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,
}}
>
{onRenderChatContent()}
)
}
export default ChatPanel