import React from 'react'; import Header from '/imports/ui/components/common/control-header/component'; import { useMutation, useQuery } from '@apollo/client'; import { GET_CHAT_DATA, GetChatDataResponse, CLOSE_PRIVATE_CHAT_MUTATION } from './queries'; import { defineMessages, useIntl } from 'react-intl'; import { closePrivateChat } from './services'; import { layoutSelect, layoutDispatch } from '../../../layout/context'; import { useShortcutHelp } from '../../../shortcut-help/useShortcutHelp'; import { Layout } from '../../../layout/layoutTypes'; import { ACTIONS, PANELS } from '../../../layout/enums'; import { ChatActions } from './chat-actions/component'; interface ChatHeaderProps { chatId: string; isPublicChat: boolean; title: string; } const intlMessages = defineMessages({ closeChatLabel: { id: 'app.chat.closeChatLabel', description: 'aria-label for closing chat button', }, hideChatLabel: { id: 'app.chat.hideChatLabel', description: 'aria-label for hiding chat button', }, titlePublic: { id: 'app.chat.titlePublic', description: 'Public chat title', }, titlePrivate: { id: 'app.chat.titlePrivate', description: 'Private chat title', }, }); const ChatHeader: React.FC = ({ chatId, isPublicChat, title }) => { const HIDE_CHAT_AK = useShortcutHelp('hideprivatechat'); const CLOSE_CHAT_AK = useShortcutHelp('closeprivatechat'); const layoutContextDispatch = layoutDispatch(); const intl = useIntl(); const [updateVisible] = useMutation(CLOSE_PRIVATE_CHAT_MUTATION); return (
{ layoutContextDispatch({ type: ACTIONS.SET_SIDEBAR_CONTENT_IS_OPEN, value: false, }); layoutContextDispatch({ type: ACTIONS.SET_ID_CHAT_OPEN, value: '', }); layoutContextDispatch({ type: ACTIONS.SET_SIDEBAR_CONTENT_PANEL, value: PANELS.NONE, }); }, }} rightButtonProps={{ accessKey: CLOSE_CHAT_AK, 'aria-label': intl.formatMessage(intlMessages.closeChatLabel, { 0: title }), 'data-test': 'closePrivateChat', icon: 'close', label: intl.formatMessage(intlMessages.closeChatLabel, { 0: title }), onClick: () => { updateVisible({ variables: { chatId } }); closePrivateChat(chatId); layoutContextDispatch({ type: ACTIONS.SET_SIDEBAR_CONTENT_IS_OPEN, value: false, }); layoutContextDispatch({ type: ACTIONS.SET_ID_CHAT_OPEN, value: '', }); layoutContextDispatch({ type: ACTIONS.SET_SIDEBAR_CONTENT_PANEL, value: PANELS.NONE, }); }, }} customRightButton={isPublicChat ? : null} /> ); }; const isChatResponse = (data: unknown): data is GetChatDataResponse => { return (data as GetChatDataResponse).chat !== undefined; }; const ChatHeaderContainer: React.FC = () => { const intl = useIntl(); const idChatOpen = layoutSelect((i: Layout) => i.idChatOpen); const { data: chatData, loading: chatDataLoading, error: chatDataError, } = useQuery(GET_CHAT_DATA, { variables: { chatId: idChatOpen }, }); if (chatDataLoading) return null; if (chatDataError) return (
Error: {JSON.stringify(chatDataError)}
); if (!isChatResponse(chatData)) return (
Error: {JSON.stringify(chatData)}
); const isPublicChat = chatData.chat[0]?.public; const title = isPublicChat ? intl.formatMessage(intlMessages.titlePublic) : intl.formatMessage(intlMessages.titlePrivate, { 0: chatData?.chat[0]?.participant?.name }); return ( ); }; export default ChatHeaderContainer;