/* * Copyright (C) Contributors to the Suwayomi project * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ import Dialog from '@mui/material/Dialog'; import DialogTitle from '@mui/material/DialogTitle'; import DialogContent from '@mui/material/DialogContent'; import DialogActions from '@mui/material/DialogActions'; import Button from '@mui/material/Button'; import { useTranslation } from 'react-i18next'; import Stack from '@mui/material/Stack'; import { Link, useNavigate, useParams } from 'react-router-dom'; import { useState } from 'react'; import FormGroup from '@mui/material/FormGroup'; import { CheckboxInput } from '@/components/atoms/CheckboxInput.tsx'; import { Mangas, MigrateMode } from '@/lib/data/Mangas.ts'; import { makeToast } from '@/components/util/Toast.tsx'; import { createUpdateMetadataServerSettings, useMetadataServerSettings, } from '@/lib/metadata/metadataServerSettings.ts'; import { MetadataMigrationSettings } from '@/typings.ts'; import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts'; export const MigrateDialog = ({ mangaIdToMigrateTo, onClose }: { mangaIdToMigrateTo: number; onClose: () => void }) => { const { t } = useTranslation(); const navigate = useNavigate(); const { mangaId: mangaIdAsString } = useParams<{ mangaId: string }>(); const mangaId = Number(mangaIdAsString); const { settings: { includeChapters, includeCategories, deleteChapters }, } = useMetadataServerSettings(); const [isMigrationInProcess, setIsMigrationInProcess] = useState(false); const setMigrationFlag = createUpdateMetadataServerSettings( defaultPromiseErrorHandler('MigrateDialog::updateSetting'), ); const migrate = async (mode: MigrateMode) => { if (mangaId == null) { throw new Error(`MigrateDialog::migrate: unexpected mangaId "${mangaId}"`); } makeToast(t('migrate.label.info'), 'info'); setIsMigrationInProcess(true); try { await Mangas.migrate(mangaId, mangaIdToMigrateTo, { mode, migrateChapters: includeChapters, migrateCategories: includeCategories, deleteChapters, }); navigate(`/manga/${mangaIdToMigrateTo}`, { replace: true }); } catch (e) { setIsMigrationInProcess(false); } }; return ( {t('migrate.dialog.title')} setMigrationFlag('includeChapters', checked)} /> setMigrationFlag('includeCategories', checked)} /> setMigrationFlag('deleteChapters', checked)} /> ); };