feat: import analysis step (#2657)

Shows course analysis information in review import details step in course import stepper page. Also handles alerts based on the import status, like, reimport or unsupported number of blocks.
This commit is contained in:
Navin Karkera
2025-11-18 22:11:27 +05:30
committed by GitHub
parent 5fadccabe2
commit e2f1aedf9a
21 changed files with 800 additions and 213 deletions

View File

@@ -1,5 +1,22 @@
import { useQuery, useQueryClient } from '@tanstack/react-query';
import { getWaffleFlags, waffleFlagDefaults } from './api';
import {
skipToken, useMutation, useQuery, useQueryClient,
} from '@tanstack/react-query';
import { libraryAuthoringQueryKeys } from '@src/library-authoring/data/apiHooks';
import {
getWaffleFlags,
waffleFlagDefaults,
bulkModulestoreMigrate,
getModulestoreMigrationStatus,
BulkMigrateRequestData,
} from './api';
export const migrationQueryKeys = {
all: ['contentLibrary'],
/**
* Base key for data specific to a migration task
*/
migrationTask: (migrationId?: string | null) => [...migrationQueryKeys.all, migrationId],
};
/**
* Get the waffle flags (which enable/disable specific features). They may
@@ -30,3 +47,28 @@ export const useWaffleFlags = (courseId?: string) => {
isError,
};
};
/**
* Use this mutation to migrate multiple sources to a library
*/
export const useBulkModulestoreMigrate = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: async (requestData: BulkMigrateRequestData) => bulkModulestoreMigrate(requestData),
onSettled: (_data, _err, variables) => {
queryClient.invalidateQueries({ queryKey: libraryAuthoringQueryKeys.courseImports(variables.target) });
queryClient.invalidateQueries({ queryKey: libraryAuthoringQueryKeys.allMigrationInfo() });
},
});
};
/**
* Get the migration status
*/
export const useModulestoreMigrationStatus = (migrationId: string | null) => (
useQuery({
queryKey: migrationQueryKeys.migrationTask(migrationId),
queryFn: migrationId ? () => getModulestoreMigrationStatus(migrationId!) : skipToken,
refetchInterval: 1000, // Refresh every second
})
);