diff --git a/src/library-authoring/LibraryAuthoringPage.scss b/src/library-authoring/LibraryAuthoringPage.scss
index 5a4470008c..5f0ceb7881 100644
--- a/src/library-authoring/LibraryAuthoringPage.scss
+++ b/src/library-authoring/LibraryAuthoringPage.scss
@@ -13,7 +13,7 @@
.library-authoring-sidebar {
z-index: 1000; // same as header
- flex: 500px 0 0;
+ flex: 530px 0 0;
position: sticky;
top: 0;
right: 0;
diff --git a/src/library-authoring/containers/ContainerInfo.tsx b/src/library-authoring/containers/ContainerInfo.tsx
index d3d3afbd48..d2c7c4c78c 100644
--- a/src/library-authoring/containers/ContainerInfo.tsx
+++ b/src/library-authoring/containers/ContainerInfo.tsx
@@ -8,10 +8,11 @@ import {
Icon,
IconButton,
useToggle,
+ Alert,
} from '@openedx/paragon';
import React, { useCallback } from 'react';
import { Link } from 'react-router-dom';
-import { MoreVert } from '@openedx/paragon/icons';
+import { InfoOutline, MoreVert } from '@openedx/paragon/icons';
import { useClipboard } from '@src/generic/clipboard';
import { ContainerType, getBlockType } from '@src/generic/key-utils';
@@ -149,6 +150,15 @@ const ContainerActions = ({
);
};
+/* istanbul ignore next */
+/* istanbul ignore next */
+const ContainerSettings = () => (
+
+
+
+
+
+);
const ContainerInfo = () => {
const intl = useIntl();
const {
@@ -222,7 +232,7 @@ const ContainerInfo = () => {
{renderTab(
CONTAINER_INFO_TABS.Settings,
intl.formatMessage(messages.settingsTabTitle),
- // TODO: container settings component
+ ,
)}
diff --git a/src/library-authoring/containers/messages.ts b/src/library-authoring/containers/messages.ts
index f18da2c389..b4cbbc6fdc 100644
--- a/src/library-authoring/containers/messages.ts
+++ b/src/library-authoring/containers/messages.ts
@@ -66,6 +66,11 @@ const messages = defineMessages({
defaultMessage: 'Container actions menu',
description: 'Alt/title text for the container card menu button.',
},
+ containerSettingsMsg: {
+ id: 'course-authoring.library-authoring.container.settings.alert.message',
+ defaultMessage: 'Section settings cannot be configured within Libraries and must be set within a course. In a future release, Libraries may support configuring some settings.',
+ description: 'Temporary message for settings tab being',
+ },
menuOpen: {
id: 'course-authoring.library-authoring.menu.open',
defaultMessage: 'Open',
diff --git a/src/library-authoring/create-library/CreateLibrary.tsx b/src/library-authoring/create-library/CreateLibrary.tsx
index 9bae528191..c9d67de91c 100644
--- a/src/library-authoring/create-library/CreateLibrary.tsx
+++ b/src/library-authoring/create-library/CreateLibrary.tsx
@@ -253,7 +253,8 @@ export const CreateLibrary = ({
{(restoreTaskId || isError || restoreMutation.isError) && (
- {restoreStatus?.state === LibraryRestoreStatus.Pending && (
+ {(restoreStatus?.state === LibraryRestoreStatus.Pending
+ || restoreStatus?.state === LibraryRestoreStatus.InProgress) && (
{intl.formatMessage(messages.restoreInProgress)}
diff --git a/src/library-authoring/create-library/data/apiHooks.test.tsx b/src/library-authoring/create-library/data/apiHooks.test.tsx
index e4befed86d..0075bcac65 100644
--- a/src/library-authoring/create-library/data/apiHooks.test.tsx
+++ b/src/library-authoring/create-library/data/apiHooks.test.tsx
@@ -173,6 +173,34 @@ describe('create library apiHooks', () => {
expect(axiosMock.history.get[0].url).toEqual(`http://localhost:18010/api/libraries/v2/restore/?task_id=${taskId}`);
});
+ it('should handle in-progress status with refetch interval', async () => {
+ const taskId = 'in-progress-task-id';
+ const inProgressResult = {
+ state: LibraryRestoreStatus.InProgress,
+ result: null,
+ error: null,
+ error_log: null,
+ };
+
+ const expectedResult = {
+ state: LibraryRestoreStatus.InProgress,
+ result: null,
+ error: null,
+ errorLog: null,
+ };
+
+ axiosMock.onGet(`http://localhost:18010/api/libraries/v2/restore/?task_id=${taskId}`).reply(200, inProgressResult);
+
+ const { result } = renderHook(() => useGetLibraryRestoreStatus(taskId), { wrapper });
+
+ await waitFor(() => {
+ expect(result.current.isLoading).toBeFalsy();
+ });
+
+ expect(result.current.data).toEqual(expectedResult);
+ expect(axiosMock.history.get[0].url).toEqual(`http://localhost:18010/api/libraries/v2/restore/?task_id=${taskId}`);
+ });
+
it('should handle failed status', async () => {
const taskId = 'failed-task-id';
const failedResult = {
diff --git a/src/library-authoring/create-library/data/apiHooks.ts b/src/library-authoring/create-library/data/apiHooks.ts
index 9fac3edf75..1f53719684 100644
--- a/src/library-authoring/create-library/data/apiHooks.ts
+++ b/src/library-authoring/create-library/data/apiHooks.ts
@@ -41,7 +41,10 @@ export const useGetLibraryRestoreStatus = (taskId: string) => useQuery
getLibraryRestoreStatus(taskId),
enabled: !!taskId, // Only run the query if taskId is provided
- refetchInterval: (query) => (query.state.data?.state === LibraryRestoreStatus.Pending ? 2000 : false),
+ refetchInterval: (query) => (
+ (query.state.data?.state === LibraryRestoreStatus.Pending
+ || query.state.data?.state === LibraryRestoreStatus.InProgress
+ ) ? 2000 : false),
});
export const useCreateLibraryRestore = () => useMutation({
diff --git a/src/library-authoring/create-library/data/restoreConstants.ts b/src/library-authoring/create-library/data/restoreConstants.ts
index 323821e631..4545285cee 100644
--- a/src/library-authoring/create-library/data/restoreConstants.ts
+++ b/src/library-authoring/create-library/data/restoreConstants.ts
@@ -32,6 +32,7 @@ export interface GetLibraryRestoreStatusResponse {
export enum LibraryRestoreStatus {
Pending = 'Pending',
+ InProgress = 'In Progress',
Succeeded = 'Succeeded',
Failed = 'Failed',
}