Add backup flags to backup import
This commit is contained in:
@@ -10,6 +10,7 @@ import { BackupFlag, BackupFlagGroup } from '@/features/backup/Backup.types.ts';
|
||||
import { TranslationKey } from '@/base/Base.types.ts';
|
||||
|
||||
export const BACKUP_FLAGS_TO_TRANSLATION: Record<BackupFlag, TranslationKey> = {
|
||||
includeManga: 'settings.backup.flag.manga',
|
||||
includeCategories: 'settings.backup.flag.categories',
|
||||
includeChapters: 'settings.backup.flag.chapters',
|
||||
includeClientData: 'settings.backup.flag.client_data',
|
||||
@@ -26,6 +27,6 @@ export const BACKUP_FLAG_GROUP_TO_TRANSLATION: Record<BackupFlagGroup, Translati
|
||||
export const BACKUP_FLAGS = Object.keys(BACKUP_FLAGS_TO_TRANSLATION) as readonly BackupFlag[];
|
||||
|
||||
export const BACKUP_FLAGS_BY_GROUP: Record<BackupFlagGroup, BackupFlag[]> = {
|
||||
[BackupFlagGroup.LIBRARY]: ['includeChapters', 'includeTracking', 'includeHistory', 'includeCategories'],
|
||||
[BackupFlagGroup.LIBRARY]: ['includeManga', 'includeChapters', 'includeTracking', 'includeHistory', 'includeCategories'],
|
||||
[BackupFlagGroup.SETTINGS]: ['includeClientData', 'includeServerSettings'],
|
||||
};
|
||||
|
||||
@@ -6,13 +6,13 @@
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
import { CreateBackupInput } from '@/lib/graphql/generated/graphql.ts';
|
||||
import { PartialBackupFlagsInput } from '@/lib/graphql/generated/graphql.ts';
|
||||
|
||||
export enum BackupFlagGroup {
|
||||
LIBRARY = 'library',
|
||||
SETTINGS = 'settings',
|
||||
}
|
||||
|
||||
export type BackupFlag = keyof Omit<CreateBackupInput, 'clientMutationId'>;
|
||||
export type BackupFlag = keyof PartialBackupFlagsInput;
|
||||
|
||||
export type BackupFlagInclusionState = Record<BackupFlag, boolean>;
|
||||
|
||||
@@ -26,7 +26,11 @@ import {
|
||||
} from '@/features/backup/Backup.constants.ts';
|
||||
import { BackupFlagGroup, BackupFlagInclusionState } from '@/features/backup/Backup.types.ts';
|
||||
|
||||
export const BackupFlagInclusionDialog = ({ onCancel, onConfirm }: DialogProps<BackupFlagInclusionState>) => {
|
||||
export const BackupFlagInclusionDialog = ({
|
||||
onCancel,
|
||||
onConfirm,
|
||||
title,
|
||||
}: DialogProps<BackupFlagInclusionState> & { title: string }) => {
|
||||
const { t } = useTranslation();
|
||||
|
||||
const [includeStateByFlag, setIncludeStateByFlag] = useState(
|
||||
@@ -34,12 +38,12 @@ export const BackupFlagInclusionDialog = ({ onCancel, onConfirm }: DialogProps<B
|
||||
);
|
||||
|
||||
return (
|
||||
<Dialog open onAbort={onCancel} maxWidth="xs" fullWidth>
|
||||
<DialogTitle>{t('settings.backup.action.create.label.title')}</DialogTitle>
|
||||
<Dialog open onAbort={onCancel} maxWidth="xs" fullWidth onClose={onCancel}>
|
||||
<DialogTitle>{title}</DialogTitle>
|
||||
<DialogContent>
|
||||
<FormGroup sx={{ gap: 2 }}>
|
||||
{Object.entries(BACKUP_FLAGS_BY_GROUP).map(([group, flags]) => (
|
||||
<Stack>
|
||||
<Stack key={group}>
|
||||
<Typography>{t(BACKUP_FLAG_GROUP_TO_TRANSLATION[group as BackupFlagGroup])}</Typography>
|
||||
{flags.map((flag) => (
|
||||
<CheckboxInput
|
||||
|
||||
@@ -117,12 +117,14 @@ export function Backup() {
|
||||
};
|
||||
|
||||
const createBackup = async () => {
|
||||
const backupFlagInclusionState = await GlobalDialogManager.show(BackupFlagInclusionDialog);
|
||||
const flags = await GlobalDialogManager.show(BackupFlagInclusionDialog, {
|
||||
title: t('settings.backup.action.create.label.title'),
|
||||
});
|
||||
|
||||
makeToast(t('settings.backup.action.create.label.in_progress'), 'info');
|
||||
|
||||
try {
|
||||
const backupFileResponse = await requestManager.createBackupFile(backupFlagInclusionState).response;
|
||||
const backupFileResponse = await requestManager.createBackupFile({ flags }).response;
|
||||
|
||||
const backupFileUrl = backupFileResponse.data?.createBackup.url;
|
||||
if (!backupFileUrl) {
|
||||
@@ -171,11 +173,15 @@ export function Backup() {
|
||||
return false;
|
||||
};
|
||||
|
||||
const restoreBackup = async (file: File) => {
|
||||
const restoreBackup = async (backup: File) => {
|
||||
const flags = await GlobalDialogManager.show(BackupFlagInclusionDialog, {
|
||||
title: t('settings.backup.action.restore.label.title'),
|
||||
});
|
||||
|
||||
try {
|
||||
makeToast(t('settings.backup.action.restore.label.in_progress'), 'info');
|
||||
|
||||
const response = await requestManager.restoreBackupFile(file).response;
|
||||
const response = await requestManager.restoreBackupFile({ backup, flags }).response;
|
||||
backupRestoreId = response.data?.restoreBackup.id;
|
||||
setTriggerReRender(Date.now());
|
||||
} catch (e) {
|
||||
|
||||
Reference in New Issue
Block a user