diff --git a/src/features/migration/MigrationEntries.ts b/src/features/migration/MigrationEntries.ts index 94e80000..30707e07 100644 --- a/src/features/migration/MigrationEntries.ts +++ b/src/features/migration/MigrationEntries.ts @@ -6,7 +6,8 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import type { MigrationEntryStatus, TMigrationEntry } from '@/features/migration/Migration.types.ts'; +import type { MigratableEntry, TMigrationEntry } from '@/features/migration/Migration.types.ts'; +import { MigrationEntryStatus } from '@/features/migration/Migration.types.ts'; export class MigrationEntries { public static getExcluded(entries: TMigrationEntry[]): TMigrationEntry[] { @@ -43,4 +44,14 @@ export class MigrationEntries { return a.mangaTitle.localeCompare(b.mangaTitle); }); } + + public static getMigratable(entries: TMigrationEntry[]): MigratableEntry[] { + return Object.values(entries).filter( + (entry): entry is MigratableEntry => + [MigrationEntryStatus.SEARCH_COMPLETE, MigrationEntryStatus.MIGRATING].includes(entry.status) && + !entry.isExcluded && + entry.selectedMatchMangaId != null && + entry.selectedMatchSourceId != null, + ); + } } diff --git a/src/features/migration/MigrationManager.ts b/src/features/migration/MigrationManager.ts index d0499778..76e2bc5a 100644 --- a/src/features/migration/MigrationManager.ts +++ b/src/features/migration/MigrationManager.ts @@ -66,6 +66,7 @@ import { ZustandUtil } from '@/lib/zustand/ZustandUtil.ts'; import { getErrorMessage } from '@/lib/HelperFunctions.ts'; import isEqual from 'lodash/fp/isEqual'; import uniqBy from 'lodash/fp/uniqBy'; +import { MigrationEntries } from '@/features/migration/MigrationEntries.ts'; const RESUMABLE_PHASES: readonly MigrationPhase[] = [MigrationPhase.SEARCHING, MigrationPhase.MIGRATING]; @@ -407,22 +408,10 @@ export class MigrationManager { } } - static getMigratableEntries(): MigratableEntry[] { - const { entries } = MigrationManager.getState(); - - return Object.values(entries).filter( - (entry): entry is MigratableEntry => - [MigrationEntryStatus.SEARCH_COMPLETE, MigrationEntryStatus.MIGRATING].includes(entry.status) && - !entry.isExcluded && - entry.selectedMatchMangaId != null && - entry.selectedMatchSourceId != null, - ); - } - static async startMigration(options: Omit): Promise { MigrationManager.ensureIsInValidPhase([MigrationPhase.SEARCHING]); - const migratableEntries = MigrationManager.getMigratableEntries(); + const migratableEntries = MigrationEntries.getMigratable(Object.values(MigrationManager.getState().entries)); await Confirmation.show({ title: t`Migration information`, @@ -529,7 +518,7 @@ export class MigrationManager { if (resumeMigrationPhase) { assertIsDefined(migrateOptions); - const migratableEntries = MigrationManager.getMigratableEntries(); + const migratableEntries = MigrationEntries.getMigratable(Object.values(entries)); MigrationManager.updateState((draft) => { migratableEntries.forEach((entry) => { @@ -544,8 +533,10 @@ export class MigrationManager { assertIsDefined(searchOptions); - const pendingEntries = Object.values(entries).filter((entry) => - [MigrationEntryStatus.PENDING, MigrationEntryStatus.SEARCHING].includes(entry.status), + const pendingEntries = MigrationEntries.getHaveStatus( + Object.values(entries), + MigrationEntryStatus.PENDING, + MigrationEntryStatus.SEARCHING, ); MigrationManager.updateState((draft) => { diff --git a/src/features/migration/screens/MigrationSearch.tsx b/src/features/migration/screens/MigrationSearch.tsx index 73555aef..2c0bb948 100644 --- a/src/features/migration/screens/MigrationSearch.tsx +++ b/src/features/migration/screens/MigrationSearch.tsx @@ -59,7 +59,7 @@ export const MigrationSearch = () => { [entryList], ); - const hasMigratableEntries = useMemo(() => !!MigrationManager.getMigratableEntries().length, [entryList]); + const hasMigratableEntries = useMemo(() => !!MigrationEntries.getMigratable(entryList).length, [entryList]); return ( <>