feat(backup): .picpeak download + upload-restore UI in Backup Manager
Adds a self-contained "Portable backup (.picpeak)" card to the Restore
tab, completing the GUI-only roundtrip:
- Download: optional "include original photos" toggle + a prominent
plaintext-secrets warning, streams the file via a blob download.
- Restore: file picker → destructive confirmation modal ("replaces ALL
data except your current account, cannot be undone") → multipart upload
to /admin/backup/picpeak/import → success summary. If the backup uses
external media, shows a banner to reconfigure the mount, with a docs link.
Kept separate from the legacy RestoreWizard (different format/flow). en+de
strings added; dark-mode variants throughout.
This commit is contained in:
@@ -23,6 +23,7 @@ import { BackupDashboard } from '../../components/admin/BackupDashboard';
|
||||
import { BackupConfiguration } from '../../components/admin/BackupConfiguration';
|
||||
import { BackupHistory } from '../../components/admin/BackupHistory';
|
||||
import { RestoreWizard } from '../../components/admin/RestoreWizard';
|
||||
import { PicpeakBackupCard } from '../../components/admin/PicpeakBackupCard';
|
||||
import { BackupIntegrityCard } from '../../components/admin/BackupIntegrityCard';
|
||||
import { BackupCoverageCard } from '../../components/admin/BackupCoverageCard';
|
||||
import { api } from '../../config/api';
|
||||
@@ -225,7 +226,10 @@ export const BackupManagement: React.FC = () => {
|
||||
)}
|
||||
|
||||
{activeTab === 'restore' && (
|
||||
<RestoreWizard onVerifyIntegrity={() => setActiveTab('integrity')} />
|
||||
<div className="space-y-6">
|
||||
<PicpeakBackupCard />
|
||||
<RestoreWizard onVerifyIntegrity={() => setActiveTab('integrity')} />
|
||||
</div>
|
||||
)}
|
||||
|
||||
{activeTab === 'integrity' && (
|
||||
|
||||
Reference in New Issue
Block a user