import { Stack, Modal, ContextualMenu, IconButton, TooltipHost, } from '@fluentui/react' import { useCallback } from 'react' import type { FC } from 'react' import { useCloseButtonStyles, useModalClassnames, modalStyles, classes, } from './styles' import { Message, Messages } from '../../comps/chat' import { useChatState, useLocalState } from '../../state' import { HoverButton } from '../../comps/hover-button' import { commonClasses } from '../../utils/theme/common-styles' const ChatPanel: FC = () => { const [messages] = useChatState(state => [state.messages]) const [modalEnabled] = useLocalState(state => [state.floatingChatEnabled]) const setModalEnabled = (floatingChatEnabled: boolean) => useLocalState.setState({ floatingChatEnabled, }) const setPanel = (sidePanelTab: 'chats' | 'people' | undefined) => useLocalState.setState({ sidePanelTab, }) const modalClassnames = useModalClassnames() const closeButtonStyles = useCloseButtonStyles() const isMobile = window.matchMedia('(max-width: 480px)').matches const onRenderChatContent = useCallback( () => ( {messages.map(msg => ( ))} {!messages.length && (
Chat is empty
)}
), [messages], ) return ( {/* Un-dock button */} {!modalEnabled && !isMobile && ( { setModalEnabled(true) setPanel(undefined) }} iconProps={{ iconName: 'MiniExpandMirrored' }} style={{ margin: '.25em auto' }} /> )} {!modalEnabled ? ( {onRenderChatContent()} ) : ( Chats are open in floating Modal setModalEnabled(false)} text="Open chats here" style={{ marginTop: '.5em' }} /> )} setModalEnabled(false)} isModeless containerClassName={modalClassnames.container} layerProps={{ eventBubblingEnabled: true, }} dragOptions={{ moveMenuItemText: 'Move', closeMenuItemText: 'Close', menu: ContextualMenu, }} >
Chats setModalEnabled(false)} />
{onRenderChatContent()}
) } export default ChatPanel