228 lines
8 KiB
TypeScript
228 lines
8 KiB
TypeScript
// Copyright 2021 Signal Messenger, LLC
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
import React, { memo, useCallback } from 'react';
|
|
import { useSelector } from 'react-redux';
|
|
import type { ButtonVariant } from '../../components/Button';
|
|
import { ErrorModal } from '../../components/ErrorModal';
|
|
import { GlobalModalContainer } from '../../components/GlobalModalContainer';
|
|
import { SmartAboutContactModal } from './AboutContactModal';
|
|
import { SmartAddUserToAnotherGroupModal } from './AddUserToAnotherGroupModal';
|
|
import { SmartContactModal } from './ContactModal';
|
|
import { SmartEditHistoryMessagesModal } from './EditHistoryMessagesModal';
|
|
import { SmartForwardMessagesModal } from './ForwardMessagesModal';
|
|
import { SmartProfileEditorModal } from './ProfileEditorModal';
|
|
import { SmartUsernameOnboardingModal } from './UsernameOnboardingModal';
|
|
import { SmartSafetyNumberModal } from './SafetyNumberModal';
|
|
import { SmartSendAnywayDialog } from './SendAnywayDialog';
|
|
import { SmartShortcutGuideModal } from './ShortcutGuideModal';
|
|
import { SmartStickerPreviewModal } from './StickerPreviewModal';
|
|
import { SmartStoriesSettingsModal } from './StoriesSettingsModal';
|
|
import { getConversationsStoppingSend } from '../selectors/conversations';
|
|
import { getIntl, getTheme } from '../selectors/user';
|
|
import { useGlobalModalActions } from '../ducks/globalModals';
|
|
import { SmartDeleteMessagesModal } from './DeleteMessagesModal';
|
|
import { SmartMessageRequestActionsConfirmation } from './MessageRequestActionsConfirmation';
|
|
import { getGlobalModalsState } from '../selectors/globalModals';
|
|
import { SmartEditNicknameAndNoteModal } from './EditNicknameAndNoteModal';
|
|
import { SmartNotePreviewModal } from './NotePreviewModal';
|
|
import { SmartCallLinkEditModal } from './CallLinkEditModal';
|
|
|
|
function renderCallLinkEditModal(): JSX.Element {
|
|
return <SmartCallLinkEditModal />;
|
|
}
|
|
|
|
function renderEditHistoryMessagesModal(): JSX.Element {
|
|
return <SmartEditHistoryMessagesModal />;
|
|
}
|
|
|
|
function renderEditNicknameAndNoteModal(): JSX.Element {
|
|
return <SmartEditNicknameAndNoteModal />;
|
|
}
|
|
|
|
function renderProfileEditor(): JSX.Element {
|
|
return <SmartProfileEditorModal />;
|
|
}
|
|
|
|
function renderUsernameOnboarding(): JSX.Element {
|
|
return <SmartUsernameOnboardingModal />;
|
|
}
|
|
|
|
function renderContactModal(): JSX.Element {
|
|
return <SmartContactModal />;
|
|
}
|
|
|
|
function renderDeleteMessagesModal(): JSX.Element {
|
|
return <SmartDeleteMessagesModal />;
|
|
}
|
|
|
|
function renderForwardMessagesModal(): JSX.Element {
|
|
return <SmartForwardMessagesModal />;
|
|
}
|
|
|
|
function renderMessageRequestActionsConfirmation(): JSX.Element {
|
|
return <SmartMessageRequestActionsConfirmation />;
|
|
}
|
|
|
|
function renderNotePreviewModal(): JSX.Element {
|
|
return <SmartNotePreviewModal />;
|
|
}
|
|
|
|
function renderStoriesSettings(): JSX.Element {
|
|
return <SmartStoriesSettingsModal />;
|
|
}
|
|
|
|
function renderSendAnywayDialog(): JSX.Element {
|
|
return <SmartSendAnywayDialog />;
|
|
}
|
|
|
|
function renderShortcutGuideModal(): JSX.Element {
|
|
return <SmartShortcutGuideModal />;
|
|
}
|
|
|
|
function renderAboutContactModal(): JSX.Element {
|
|
return <SmartAboutContactModal />;
|
|
}
|
|
|
|
export const SmartGlobalModalContainer = memo(
|
|
function SmartGlobalModalContainer() {
|
|
const conversationsStoppingSend = useSelector(getConversationsStoppingSend);
|
|
const i18n = useSelector(getIntl);
|
|
const theme = useSelector(getTheme);
|
|
|
|
const hasSafetyNumberChangeModal = conversationsStoppingSend.length > 0;
|
|
|
|
const {
|
|
aboutContactModalContactId,
|
|
addUserToAnotherGroupModalContactId,
|
|
callLinkEditModalRoomId,
|
|
contactModalState,
|
|
deleteMessagesProps,
|
|
editHistoryMessages,
|
|
editNicknameAndNoteModalProps,
|
|
errorModalProps,
|
|
forwardMessagesProps,
|
|
messageRequestActionsConfirmationProps,
|
|
notePreviewModalProps,
|
|
isProfileEditorVisible,
|
|
isShortcutGuideModalVisible,
|
|
isSignalConnectionsVisible,
|
|
isStoriesSettingsVisible,
|
|
isWhatsNewVisible,
|
|
usernameOnboardingState,
|
|
safetyNumberChangedBlockingData,
|
|
safetyNumberModalContactId,
|
|
stickerPackPreviewId,
|
|
userNotFoundModalState,
|
|
} = useSelector(getGlobalModalsState);
|
|
|
|
const {
|
|
closeErrorModal,
|
|
hideUserNotFoundModal,
|
|
hideWhatsNewModal,
|
|
toggleSignalConnectionsModal,
|
|
} = useGlobalModalActions();
|
|
|
|
const renderAddUserToAnotherGroup = useCallback(() => {
|
|
return (
|
|
<SmartAddUserToAnotherGroupModal
|
|
contactID={String(addUserToAnotherGroupModalContactId)}
|
|
/>
|
|
);
|
|
}, [addUserToAnotherGroupModalContactId]);
|
|
|
|
const renderSafetyNumber = useCallback(
|
|
() => (
|
|
<SmartSafetyNumberModal
|
|
contactID={String(safetyNumberModalContactId)}
|
|
/>
|
|
),
|
|
[safetyNumberModalContactId]
|
|
);
|
|
|
|
const renderStickerPreviewModal = useCallback(
|
|
() =>
|
|
stickerPackPreviewId ? (
|
|
<SmartStickerPreviewModal packId={stickerPackPreviewId} />
|
|
) : null,
|
|
[stickerPackPreviewId]
|
|
);
|
|
|
|
const renderErrorModal = useCallback(
|
|
({
|
|
buttonVariant,
|
|
description,
|
|
title,
|
|
}: {
|
|
buttonVariant?: ButtonVariant;
|
|
description?: string;
|
|
title?: string;
|
|
}) => (
|
|
<ErrorModal
|
|
buttonVariant={buttonVariant}
|
|
description={description}
|
|
title={title}
|
|
i18n={i18n}
|
|
onClose={closeErrorModal}
|
|
/>
|
|
),
|
|
[closeErrorModal, i18n]
|
|
);
|
|
|
|
return (
|
|
<GlobalModalContainer
|
|
addUserToAnotherGroupModalContactId={
|
|
addUserToAnotherGroupModalContactId
|
|
}
|
|
callLinkEditModalRoomId={callLinkEditModalRoomId}
|
|
contactModalState={contactModalState}
|
|
editHistoryMessages={editHistoryMessages}
|
|
editNicknameAndNoteModalProps={editNicknameAndNoteModalProps}
|
|
errorModalProps={errorModalProps}
|
|
deleteMessagesProps={deleteMessagesProps}
|
|
forwardMessagesProps={forwardMessagesProps}
|
|
messageRequestActionsConfirmationProps={
|
|
messageRequestActionsConfirmationProps
|
|
}
|
|
notePreviewModalProps={notePreviewModalProps}
|
|
hasSafetyNumberChangeModal={hasSafetyNumberChangeModal}
|
|
hideUserNotFoundModal={hideUserNotFoundModal}
|
|
hideWhatsNewModal={hideWhatsNewModal}
|
|
i18n={i18n}
|
|
isAboutContactModalVisible={aboutContactModalContactId != null}
|
|
isProfileEditorVisible={isProfileEditorVisible}
|
|
isShortcutGuideModalVisible={isShortcutGuideModalVisible}
|
|
isSignalConnectionsVisible={isSignalConnectionsVisible}
|
|
isStoriesSettingsVisible={isStoriesSettingsVisible}
|
|
isWhatsNewVisible={isWhatsNewVisible}
|
|
renderAboutContactModal={renderAboutContactModal}
|
|
renderAddUserToAnotherGroup={renderAddUserToAnotherGroup}
|
|
renderCallLinkEditModal={renderCallLinkEditModal}
|
|
renderContactModal={renderContactModal}
|
|
renderEditHistoryMessagesModal={renderEditHistoryMessagesModal}
|
|
renderEditNicknameAndNoteModal={renderEditNicknameAndNoteModal}
|
|
renderErrorModal={renderErrorModal}
|
|
renderDeleteMessagesModal={renderDeleteMessagesModal}
|
|
renderForwardMessagesModal={renderForwardMessagesModal}
|
|
renderMessageRequestActionsConfirmation={
|
|
renderMessageRequestActionsConfirmation
|
|
}
|
|
renderNotePreviewModal={renderNotePreviewModal}
|
|
renderProfileEditor={renderProfileEditor}
|
|
renderUsernameOnboarding={renderUsernameOnboarding}
|
|
renderSafetyNumber={renderSafetyNumber}
|
|
renderSendAnywayDialog={renderSendAnywayDialog}
|
|
renderShortcutGuideModal={renderShortcutGuideModal}
|
|
renderStickerPreviewModal={renderStickerPreviewModal}
|
|
renderStoriesSettings={renderStoriesSettings}
|
|
safetyNumberChangedBlockingData={safetyNumberChangedBlockingData}
|
|
safetyNumberModalContactId={safetyNumberModalContactId}
|
|
stickerPackPreviewId={stickerPackPreviewId}
|
|
theme={theme}
|
|
toggleSignalConnectionsModal={toggleSignalConnectionsModal}
|
|
userNotFoundModalState={userNotFoundModalState}
|
|
usernameOnboardingState={usernameOnboardingState}
|
|
/>
|
|
);
|
|
}
|
|
);
|