@@ -62,9 +65,9 @@ const BaseCard = ({
className={selected ? 'selected' : undefined}
>
+
}
actions={(
-
-
+ {!props.isPlaceholder && (
+ <>
+
+
+ >
+ )}
{props.hasUnpublishedChanges && (
diff --git a/src/library-authoring/data/api.ts b/src/library-authoring/data/api.ts
index 0945bac2fa..3ebf174038 100644
--- a/src/library-authoring/data/api.ts
+++ b/src/library-authoring/data/api.ts
@@ -157,10 +157,18 @@ export const getLibraryRestoreStatusApiUrl = (taskId: string) => `${getApiBaseUr
* Get the URL for the API endpoint to copy a single container.
*/
export const getLibraryContainerCopyApiUrl = (containerId: string) => `${getLibraryContainerApiUrl(containerId)}copy/`;
+/**
+ * Base url for modulestore_migrator
+ */
+export const getBaseModuleStoreMigrationUrl = () => `${getApiBaseUrl()}/api/modulestore_migrator/v1/`;
/**
* Get the url for the API endpoint to list library course imports.
*/
-export const getCourseImportsApiUrl = (libraryId: string) => `${getApiBaseUrl()}/api/modulestore_migrator/v1/library/${libraryId}/migrations/courses/`;
+export const getCourseImportsApiUrl = (libraryId: string) => `${getBaseModuleStoreMigrationUrl()}library/${libraryId}/migrations/courses/`;
+/**
+ * Get the url for the API endpoint to get migration blocks info.
+ */
+export const getModulestoreMigratedBlocksInfoUrl = () => `${getBaseModuleStoreMigrationUrl()}migration_blocks/`;
export interface ContentLibrary {
id: string;
@@ -830,3 +838,32 @@ export async function getMigrationInfo(sourceKeys: string[]): Promise {
+ const client = getAuthenticatedHttpClient();
+
+ const params = new URLSearchParams();
+ params.append('target_key', libraryId);
+ if (collectionId) {
+ params.append('target_collection_key', collectionId);
+ }
+ if (isFailed !== undefined) {
+ params.append('is_failed', JSON.stringify(isFailed));
+ }
+
+ const { data } = await client.get(getModulestoreMigratedBlocksInfoUrl(), { params });
+ return camelCaseObject(data);
+}
diff --git a/src/library-authoring/data/apiHooks.ts b/src/library-authoring/data/apiHooks.ts
index 697f882dab..9d4f5e711d 100644
--- a/src/library-authoring/data/apiHooks.ts
+++ b/src/library-authoring/data/apiHooks.ts
@@ -99,6 +99,12 @@ export const libraryAuthoringQueryKeys = {
...libraryAuthoringQueryKeys.allMigrationInfo(),
...sourceKeys,
],
+ migrationBlocksInfo: (libraryId: string, collectionId?: string, isFailed?: boolean) => [
+ ...libraryAuthoringQueryKeys.allMigrationInfo(),
+ libraryId,
+ collectionId,
+ isFailed,
+ ],
};
export const xblockQueryKeys = {
@@ -981,3 +987,18 @@ export const useMigrationInfo = (sourcesKeys: string[], enabled: boolean = true)
queryFn: enabled ? () => api.getMigrationInfo(sourcesKeys) : skipToken,
})
);
+
+/**
+ * Returns the migration blocks info of a given library
+ */
+export const useMigrationBlocksInfo = (
+ libraryId: string,
+ collectionId?: string,
+ isFailed?: boolean,
+ enabled = true,
+) => (
+ useQuery({
+ queryKey: libraryAuthoringQueryKeys.migrationBlocksInfo(libraryId, collectionId, isFailed),
+ queryFn: enabled ? () => api.getModulestoreMigrationBlocksInfo(libraryId, collectionId, isFailed) : skipToken,
+ })
+);
diff --git a/src/library-authoring/import-course/PlaceholderCard.tsx b/src/library-authoring/import-course/PlaceholderCard.tsx
new file mode 100644
index 0000000000..ec174c79f0
--- /dev/null
+++ b/src/library-authoring/import-course/PlaceholderCard.tsx
@@ -0,0 +1,28 @@
+import BaseCard from '../components/BaseCard';
+
+interface PlaceHolderCardProps {
+ blockType: string;
+ displayName: string;
+ description?: string;
+}
+
+const PlaceholderCard = ({ blockType, displayName, description }: PlaceHolderCardProps) => {
+ const truncatedDescription = description ? `${description.substring(0, 40) }...` : undefined;
+ /* istanbul ignore next */
+ return (
+ null}
+ selected={false}
+ isPlaceholder
+ />
+ );
+};
+
+export default PlaceholderCard;