pl-fe: shoutbox in chat widget
Signed-off-by: Nicole Mikołajczyk <git@mkljczk.pl>
This commit is contained in:
@ -16,7 +16,8 @@ enum ChatWidgetScreens {
|
||||
INBOX = 'INBOX',
|
||||
SEARCH = 'SEARCH',
|
||||
CHAT = 'CHAT',
|
||||
CHAT_SETTINGS = 'CHAT_SETTINGS'
|
||||
CHAT_SETTINGS = 'CHAT_SETTINGS',
|
||||
SHOUTBOX = 'SHOUTBOX',
|
||||
}
|
||||
|
||||
interface IChatProvider {
|
||||
|
||||
@ -12,6 +12,7 @@ import ChatSearch from '../chat-search/chat-search';
|
||||
import ChatPaneHeader from '../chat-widget/chat-pane-header';
|
||||
import ChatWindow from '../chat-widget/chat-window';
|
||||
import ChatSearchHeader from '../chat-widget/headers/chat-search-header';
|
||||
import ShoutboxWindow from '../chat-widget/shoutbox-window';
|
||||
import { Pane } from '../ui/pane';
|
||||
|
||||
import Blankslate from './blankslate';
|
||||
@ -27,7 +28,7 @@ const ChatPane = () => {
|
||||
|
||||
const handleClickChat = (nextChat: Chat | 'shoutbox') => {
|
||||
if (nextChat === 'shoutbox') {
|
||||
// changeScreen(ChatWidgetScreens.SHOUTBOX);
|
||||
changeScreen(ChatWidgetScreens.SHOUTBOX);
|
||||
} else {
|
||||
changeScreen(ChatWidgetScreens.CHAT, nextChat.id);
|
||||
}
|
||||
@ -60,6 +61,15 @@ const ChatPane = () => {
|
||||
);
|
||||
}
|
||||
|
||||
// Shoutbox
|
||||
if (screen === ChatWidgetScreens.SHOUTBOX) {
|
||||
return (
|
||||
<Pane isOpen={isOpen}>
|
||||
<ShoutboxWindow />
|
||||
</Pane>
|
||||
);
|
||||
}
|
||||
|
||||
if (screen === ChatWidgetScreens.SEARCH) {
|
||||
return (
|
||||
<Pane isOpen={isOpen}>
|
||||
|
||||
@ -0,0 +1,65 @@
|
||||
import React from 'react';
|
||||
import { FormattedMessage } from 'react-intl';
|
||||
|
||||
import Avatar from 'pl-fe/components/ui/avatar';
|
||||
import HStack from 'pl-fe/components/ui/hstack';
|
||||
import Icon from 'pl-fe/components/ui/icon';
|
||||
import Stack from 'pl-fe/components/ui/stack';
|
||||
import Text from 'pl-fe/components/ui/text';
|
||||
import { ChatWidgetScreens, useChatContext } from 'pl-fe/contexts/chat-context';
|
||||
import { usePlFeConfig } from 'pl-fe/hooks/use-pl-fe-config';
|
||||
|
||||
import Shoutbox from '../shoutbox';
|
||||
|
||||
import ChatPaneHeader from './chat-pane-header';
|
||||
|
||||
const ShoutboxWindow = () => {
|
||||
const { changeScreen, isOpen, toggleChatPane } = useChatContext();
|
||||
const { logo } = usePlFeConfig();
|
||||
|
||||
const closeChat = () => {
|
||||
changeScreen(ChatWidgetScreens.INBOX);
|
||||
};
|
||||
|
||||
return (
|
||||
<>
|
||||
<ChatPaneHeader
|
||||
title={
|
||||
<HStack alignItems='center' space={2}>
|
||||
{isOpen && (
|
||||
<button onClick={closeChat}>
|
||||
<Icon
|
||||
src={require('@tabler/icons/outline/arrow-left.svg')}
|
||||
className='size-6 text-gray-600 dark:text-gray-400 rtl:rotate-180'
|
||||
/>
|
||||
</button>
|
||||
)}
|
||||
|
||||
<HStack alignItems='center' space={3}>
|
||||
{isOpen && (
|
||||
<Avatar src={logo} alt='' size={40} className='flex-none' />
|
||||
)}
|
||||
|
||||
<Stack alignItems='start'>
|
||||
<div className='flex grow items-center space-x-1'>
|
||||
<Text size='sm' weight='bold' truncate>
|
||||
<FormattedMessage id='chat_list_item_shoutbox' defaultMessage='Instance shoutbox' />
|
||||
</Text>
|
||||
</div>
|
||||
</Stack>
|
||||
</HStack>
|
||||
</HStack>
|
||||
}
|
||||
isToggleable={!isOpen}
|
||||
isOpen={isOpen}
|
||||
onToggle={toggleChatPane}
|
||||
/>
|
||||
|
||||
<Stack className='h-full grow overflow-hidden' space={2}>
|
||||
<Shoutbox />
|
||||
</Stack>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
export { ShoutboxWindow as default };
|
||||
Reference in New Issue
Block a user