Update local backup export UI

This commit is contained in:
trevor-signal
2026-01-16 15:36:06 -05:00
committed by GitHub
parent 094f41fcbc
commit 3f98b4cc8f
23 changed files with 1085 additions and 280 deletions

View File

@@ -34,7 +34,11 @@ import { SmartProfileNameWarningModal } from './ProfileNameWarningModal.preload.
import { SmartDraftGifMessageSendModal } from './DraftGifMessageSendModal.preload.js';
import { DebugLogErrorModal } from '../../components/DebugLogErrorModal.dom.js';
import { SmartPlaintextExportWorkflow } from './PlaintextExportWorkflow.preload.js';
import { shouldShowPlaintextWorkflow } from '../selectors/backups.std.js';
import { SmartLocalBackupExportWorkflow } from './LocalBackupExportWorkflow.preload.js';
import {
shouldShowPlaintextWorkflow,
shouldShowLocalBackupWorkflow,
} from '../selectors/backups.std.js';
function renderCallLinkAddNameModal(): React.JSX.Element {
return <SmartCallLinkAddNameModal />;
@@ -100,6 +104,10 @@ function renderPlaintextExportWorkflow(): React.JSX.Element {
return <SmartPlaintextExportWorkflow />;
}
function renderLocalBackupExportWorkflow(): React.JSX.Element {
return <SmartLocalBackupExportWorkflow />;
}
function renderStoriesSettings(): React.JSX.Element {
return <SmartStoriesSettingsModal />;
}
@@ -124,6 +132,9 @@ export const SmartGlobalModalContainer = memo(
const shouldShowPlaintextExportWorkflow = useSelector(
shouldShowPlaintextWorkflow
);
const shouldShowLocalBackupExportWorkflow = useSelector(
shouldShowLocalBackupWorkflow
);
const hasSafetyNumberChangeModal = conversationsStoppingSend.length > 0;
@@ -300,6 +311,7 @@ export const SmartGlobalModalContainer = memo(
}
renderNotePreviewModal={renderNotePreviewModal}
renderPlaintextExportWorkflow={renderPlaintextExportWorkflow}
renderLocalBackupExportWorkflow={renderLocalBackupExportWorkflow}
renderProfileNameWarningModal={renderProfileNameWarningModal}
renderUsernameOnboarding={renderUsernameOnboarding}
renderSafetyNumber={renderSafetyNumber}
@@ -310,6 +322,9 @@ export const SmartGlobalModalContainer = memo(
safetyNumberChangedBlockingData={safetyNumberChangedBlockingData}
safetyNumberModalContactId={safetyNumberModalContactId}
shouldShowPlaintextExportWorkflow={shouldShowPlaintextExportWorkflow}
shouldShowLocalBackupExportWorkflow={
shouldShowLocalBackupExportWorkflow
}
stickerPackPreviewId={stickerPackPreviewId}
tapToViewNotAvailableModalProps={tapToViewNotAvailableModalProps}
theme={theme}

View File

@@ -0,0 +1,59 @@
// Copyright 2025 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import React, { memo } from 'react';
import { useSelector } from 'react-redux';
import { createLogger } from '../../logging/log.std.js';
import { getIntl, getUser } from '../selectors/user.std.js';
import {
getBackups,
getLocalBackupWorkflow,
shouldShowLocalBackupWorkflow,
} from '../selectors/backups.std.js';
import { useBackupActions } from '../ducks/backups.preload.js';
import { LocalBackupExportWorkflow } from '../../components/LocalBackupExportWorkflow.dom.js';
import { useToastActions } from '../ducks/toast.preload.js';
const log = createLogger('smart/LocalBackupExportWorkflow');
export const SmartLocalBackupExportWorkflow = memo(
function SmartLocalBackupExportWorkflow() {
const backups = useSelector(getBackups);
const workflow = useSelector(getLocalBackupWorkflow);
const shouldWeRender = useSelector(shouldShowLocalBackupWorkflow);
const { osName } = useSelector(getUser);
const i18n = useSelector(getIntl);
const { openFileInFolder } = useToastActions();
const { cancelLocalBackupWorkflow, clearWorkflow } = useBackupActions();
const containerType = backups.workflow?.type;
if (containerType !== 'local-backup') {
log.error(
`SmartLocalBackupExportWorkflow: containerType is ${containerType}!`
);
return;
}
if (!shouldWeRender) {
log.error('SmartLocalBackupExportWorkflow: shouldWeRender=false!');
return;
}
if (!workflow) {
log.error('SmartLocalBackupExportWorkflow: no workflow!');
return;
}
return (
<LocalBackupExportWorkflow
cancelWorkflow={cancelLocalBackupWorkflow}
clearWorkflow={clearWorkflow}
i18n={i18n}
openFileInFolder={openFileInFolder}
osName={osName}
workflow={workflow}
/>
);
}
);

View File

@@ -8,7 +8,7 @@ import { createLogger } from '../../logging/log.std.js';
import { getIntl, getUser } from '../selectors/user.std.js';
import {
getBackups,
getWorkflow,
getPlaintextWorkflow,
shouldShowPlaintextWorkflow,
} from '../selectors/backups.std.js';
import { useBackupActions } from '../ducks/backups.preload.js';
@@ -20,7 +20,7 @@ const log = createLogger('smart/PlaintextExportWorkflow');
export const SmartPlaintextExportWorkflow = memo(
function SmartPlaintextExportWorkflow() {
const backups = useSelector(getBackups);
const workflow = useSelector(getWorkflow);
const workflow = useSelector(getPlaintextWorkflow);
const shouldWeRender = useSelector(shouldShowPlaintextWorkflow);
const { osName } = useSelector(getUser);

View File

@@ -228,7 +228,7 @@ export function SmartPreferences(): React.JSX.Element | null {
const { changeLocation } = useNavActions();
const { showToast } = useToastActions();
const { internalAddDonationReceipt } = useDonationsActions();
const { startPlaintextExport } = useBackupActions();
const { startPlaintextExport, startLocalBackupExport } = useBackupActions();
// Selectors
@@ -289,8 +289,6 @@ export function SmartPreferences(): React.JSX.Element | null {
};
const validateBackup = () => backupsService._internalValidate();
const exportLocalBackup = () =>
backupsService._internalExportLocalEncryptedBackup();
const pickLocalBackupFolder = () => backupsService.pickLocalBackupFolder();
const doDeleteAllData = () => renderClearingDataView();
@@ -564,6 +562,7 @@ export function SmartPreferences(): React.JSX.Element | null {
backupSubscriptionStatus,
backupTier,
cloudBackupStatus,
lastLocalBackup,
localBackupFolder,
backupMediaDownloadCompletedBytes,
backupMediaDownloadTotalBytes,
@@ -821,7 +820,6 @@ export function SmartPreferences(): React.JSX.Element | null {
defaultConversationColor={defaultConversationColor}
deviceName={deviceName}
emojiSkinToneDefault={emojiSkinToneDefault}
exportLocalBackup={exportLocalBackup}
phoneNumber={phoneNumber}
doDeleteAllData={doDeleteAllData}
editCustomColor={editCustomColor}
@@ -874,6 +872,7 @@ export function SmartPreferences(): React.JSX.Element | null {
isSyncSupported={isSyncSupported}
isSystemTraySupported={isSystemTraySupported}
isInternalUser={isInternalUser}
lastLocalBackup={lastLocalBackup}
lastSyncTime={lastSyncTime}
localBackupFolder={localBackupFolder}
localeOverride={localeOverride}
@@ -960,6 +959,7 @@ export function SmartPreferences(): React.JSX.Element | null {
setSettingsLocation={setSettingsLocation}
shouldShowUpdateDialog={shouldShowUpdateDialog}
showToast={showToast}
startLocalBackupExport={startLocalBackupExport}
startPlaintextExport={startPlaintextExport}
theme={theme}
themeSetting={themeSetting}