// Copyright 2021 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only import React from 'react'; import { useSelector } from 'react-redux'; import type { PanelRenderType } from '../../types/Panels'; import type { StateType } from '../reducer'; import * as log from '../../logging/log'; import { ContactDetail } from '../../components/conversation/ContactDetail'; import { ConversationView } from '../../components/conversation/ConversationView'; import { PanelType } from '../../types/Panels'; import { SmartAllMedia } from './AllMedia'; import { SmartChatColorPicker } from './ChatColorPicker'; import { SmartCompositionArea } from './CompositionArea'; import { SmartConversationDetails } from './ConversationDetails'; import { SmartConversationHeader } from './ConversationHeader'; import { SmartConversationNotificationsSettings } from './ConversationNotificationsSettings'; import { SmartGV1Members } from './GV1Members'; import { SmartGroupLinkManagement } from './GroupLinkManagement'; import { SmartGroupV2Permissions } from './GroupV2Permissions'; import { SmartMessageDetail } from './MessageDetail'; import { SmartPendingInvites } from './PendingInvites'; import { SmartStickerManager } from './StickerManager'; import { SmartTimeline } from './Timeline'; import { getIntl } from '../selectors/user'; import { getSelectedConversationId, getSelectedMessageIds, getTopPanel, } from '../selectors/conversations'; import { useComposerActions } from '../ducks/composer'; import { useConversationsActions } from '../ducks/conversations'; export function SmartConversationView(): JSX.Element { const conversationId = useSelector(getSelectedConversationId); if (!conversationId) { throw new Error('SmartConversationView: No selected conversation'); } const topPanel = useSelector( getTopPanel ); const { startConversation, toggleSelectMode } = useConversationsActions(); const selectedMessageIds = useSelector(getSelectedMessageIds); const isSelectMode = selectedMessageIds != null; const { processAttachments } = useComposerActions(); const i18n = useSelector(getIntl); const hasOpenModal = useSelector((state: StateType) => { return ( state.globalModals.forwardMessagesProps != null || state.globalModals.hasConfirmationModal ); }); return ( { toggleSelectMode(false); }} processAttachments={processAttachments} renderCompositionArea={() => } renderConversationHeader={() => ( )} renderTimeline={() => ( )} renderPanel={() => { if (!topPanel) { return; } if (topPanel.type === PanelType.AllMedia) { return (
); } if (topPanel.type === PanelType.ChatColorEditor) { return (
); } if (topPanel.type === PanelType.ContactDetails) { const { contact, signalAccount } = topPanel.args; return (
{ if (signalAccount) { startConversation( signalAccount.phoneNumber, signalAccount.uuid ); } }} />
); } if (topPanel.type === PanelType.ConversationDetails) { return (
); } if (topPanel.type === PanelType.GroupInvites) { return (
); } if (topPanel.type === PanelType.GroupLinkManagement) { return (
); } if (topPanel.type === PanelType.GroupPermissions) { return (
); } if (topPanel.type === PanelType.GroupV1Members) { return (
); } if (topPanel.type === PanelType.MessageDetails) { return (
); } if (topPanel.type === PanelType.NotificationSettings) { return (
); } if (topPanel.type === PanelType.StickerManager) { return (
); } log.warn('renderPanel: Got unexpected panel', topPanel); return undefined; }} /> ); }