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/.
*/
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,
);
}
}

View File

@@ -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<MigrateOptions, 'mangaIdToMigrateTo'>): Promise<void> {
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) => {

View File

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