+ {showOpenCollectionButton && (
+
+
+
+ )}
+
+
+ Unit Preview
+
+
+ Organize Unit
+
+
+ Unit Settings
+
+
+
+ );
+};
+
+export default UnitInfo;
diff --git a/src/library-authoring/containers/index.tsx b/src/library-authoring/containers/index.tsx
new file mode 100644
index 000000000..007a0eef7
--- /dev/null
+++ b/src/library-authoring/containers/index.tsx
@@ -0,0 +1,2 @@
+export { default as UnitInfo } from './UnitInfo';
+export { default as ContainerInfoHeader } from './ContainerInfoHeader';
diff --git a/src/library-authoring/containers/messages.ts b/src/library-authoring/containers/messages.ts
new file mode 100644
index 000000000..b1a0d3538
--- /dev/null
+++ b/src/library-authoring/containers/messages.ts
@@ -0,0 +1,41 @@
+import { defineMessages } from '@edx/frontend-platform/i18n';
+
+const messages = defineMessages({
+ openUnitButton: {
+ id: 'course-authoring.library-authoring.container-sidebar.open-button',
+ defaultMessage: 'Open',
+ description: 'Button text to open unit',
+ },
+ previewTabTitle: {
+ id: 'course-authoring.library-authoring.container-sidebar.preview-tab.title',
+ defaultMessage: 'Preview',
+ description: 'Title for preview tab',
+ },
+ organizeTabTitle: {
+ id: 'course-authoring.library-authoring.container-sidebar.organize-tab.title',
+ defaultMessage: 'Organize',
+ description: 'Title for organize tab',
+ },
+ settingsTabTitle: {
+ id: 'course-authoring.library-authoring.container-sidebar.settings-tab.title',
+ defaultMessage: 'Settings',
+ description: 'Title for settings tab',
+ },
+ updateContainerSuccessMsg: {
+ id: 'course-authoring.library-authoring.update-container-success-msg',
+ defaultMessage: 'Container updated successfully.',
+ description: 'Message displayed when container is updated successfully',
+ },
+ updateContainerErrorMsg: {
+ id: 'course-authoring.library-authoring.update-container-error-msg',
+ defaultMessage: 'Failed to update container.',
+ description: 'Message displayed when container update fails',
+ },
+ editTitleButtonAlt: {
+ id: 'course-authoring.library-authoring.container.sidebar.edit-name.alt',
+ defaultMessage: 'Edit container title',
+ description: 'Alt text for edit container title icon button',
+ },
+});
+
+export default messages;
diff --git a/src/library-authoring/data/api.mocks.ts b/src/library-authoring/data/api.mocks.ts
index 21f697058..d84ba79c6 100644
--- a/src/library-authoring/data/api.mocks.ts
+++ b/src/library-authoring/data/api.mocks.ts
@@ -457,6 +457,47 @@ mockGetCollectionMetadata.applyMock = () => {
jest.spyOn(api, 'getCollectionMetadata').mockImplementation(mockGetCollectionMetadata);
};
+/**
+ * Mock for `getContainerMetadata()`
+ *
+ * This mock returns a fixed response for the container ID *container_1*.
+ */
+export async function mockGetContainerMetadata(containerId: string): Promise