Move "getMigratable" function to "MigrationEntries"

This commit is contained in:
schroda
2026-05-16 02:35:25 +02:00
parent 21c16d4ba9
commit 05a722de8d
3 changed files with 20 additions and 18 deletions

View File

@@ -6,7 +6,8 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. * 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 { export class MigrationEntries {
public static getExcluded(entries: TMigrationEntry[]): TMigrationEntry[] { public static getExcluded(entries: TMigrationEntry[]): TMigrationEntry[] {
@@ -43,4 +44,14 @@ export class MigrationEntries {
return a.mangaTitle.localeCompare(b.mangaTitle); 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,
);
}
} }

View File

@@ -66,6 +66,7 @@ import { ZustandUtil } from '@/lib/zustand/ZustandUtil.ts';
import { getErrorMessage } from '@/lib/HelperFunctions.ts'; import { getErrorMessage } from '@/lib/HelperFunctions.ts';
import isEqual from 'lodash/fp/isEqual'; import isEqual from 'lodash/fp/isEqual';
import uniqBy from 'lodash/fp/uniqBy'; import uniqBy from 'lodash/fp/uniqBy';
import { MigrationEntries } from '@/features/migration/MigrationEntries.ts';
const RESUMABLE_PHASES: readonly MigrationPhase[] = [MigrationPhase.SEARCHING, MigrationPhase.MIGRATING]; 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<MigrateOptions, 'mangaIdToMigrateTo'>): Promise<void> { static async startMigration(options: Omit<MigrateOptions, 'mangaIdToMigrateTo'>): Promise<void> {
MigrationManager.ensureIsInValidPhase([MigrationPhase.SEARCHING]); MigrationManager.ensureIsInValidPhase([MigrationPhase.SEARCHING]);
const migratableEntries = MigrationManager.getMigratableEntries(); const migratableEntries = MigrationEntries.getMigratable(Object.values(MigrationManager.getState().entries));
await Confirmation.show({ await Confirmation.show({
title: t`Migration information`, title: t`Migration information`,
@@ -529,7 +518,7 @@ export class MigrationManager {
if (resumeMigrationPhase) { if (resumeMigrationPhase) {
assertIsDefined(migrateOptions); assertIsDefined(migrateOptions);
const migratableEntries = MigrationManager.getMigratableEntries(); const migratableEntries = MigrationEntries.getMigratable(Object.values(entries));
MigrationManager.updateState((draft) => { MigrationManager.updateState((draft) => {
migratableEntries.forEach((entry) => { migratableEntries.forEach((entry) => {
@@ -544,8 +533,10 @@ export class MigrationManager {
assertIsDefined(searchOptions); assertIsDefined(searchOptions);
const pendingEntries = Object.values(entries).filter((entry) => const pendingEntries = MigrationEntries.getHaveStatus(
[MigrationEntryStatus.PENDING, MigrationEntryStatus.SEARCHING].includes(entry.status), Object.values(entries),
MigrationEntryStatus.PENDING,
MigrationEntryStatus.SEARCHING,
); );
MigrationManager.updateState((draft) => { MigrationManager.updateState((draft) => {

View File

@@ -59,7 +59,7 @@ export const MigrationSearch = () => {
[entryList], [entryList],
); );
const hasMigratableEntries = useMemo(() => !!MigrationManager.getMigratableEntries().length, [entryList]); const hasMigratableEntries = useMemo(() => !!MigrationEntries.getMigratable(entryList).length, [entryList]);
return ( return (
<> <>