Skip to content

Commit fa9d66c

Browse files
authored
fix: show "This <containerType> is empty" (#2157)
Shows "This is empty" text when container child list is empty for units, subsections, and sections.
1 parent dc16b22 commit fa9d66c

File tree

5 files changed

+21
-2
lines changed

5 files changed

+21
-2
lines changed

src/library-authoring/data/api.mocks.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -497,6 +497,7 @@ export async function mockGetContainerMetadata(containerId: string): Promise<api
497497
}
498498
}
499499
mockGetContainerMetadata.unitId = 'lct:org:lib:unit:test-unit-9a207';
500+
mockGetContainerMetadata.unitIdEmpty = 'lct:org:lib:unit:test-unit-empty';
500501
mockGetContainerMetadata.sectionId = 'lct:org:lib:section:test-section-1';
501502
mockGetContainerMetadata.subsectionId = 'lb:org1:Demo_course:subsection:subsection-0';
502503
mockGetContainerMetadata.sectionIdEmpty = 'lct:org:lib:section:test-section-empty';

src/library-authoring/section-subsections/LibraryContainerChildren.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { Description } from '@openedx/paragon/icons';
99
import DraggableList, { SortableItem } from '../../generic/DraggableList';
1010
import Loading from '../../generic/Loading';
1111
import ErrorAlert from '../../generic/alert-error';
12+
import { ContainerType, getBlockType } from '../../generic/key-utils';
1213
import { useLibraryContext } from '../common/context/LibraryContext';
1314
import {
1415
useContainerChildren,
@@ -100,11 +101,12 @@ export const LibraryContainerChildren = ({ containerKey, readOnly }: LibraryCont
100101
const intl = useIntl();
101102
const [orderedChildren, setOrderedChildren] = useState<LibraryContainerMetadataWithUniqueId[]>([]);
102103
const { showOnlyPublished, readOnly: libReadOnly } = useLibraryContext();
103-
const { navigateTo, insideSection } = useLibraryRoutes();
104+
const { navigateTo } = useLibraryRoutes();
104105
const { sidebarItemInfo } = useSidebarContext();
105106
const [activeDraggingId, setActiveDraggingId] = useState<string | null>(null);
106107
const orderMutator = useUpdateContainerChildren(containerKey);
107108
const { showToast } = useContext(ToastContext);
109+
const containerType = getBlockType(containerKey);
108110
const handleReorder = useCallback(() => async (newOrder?: LibraryContainerMetadataWithUniqueId[]) => {
109111
if (!newOrder) {
110112
return;
@@ -172,7 +174,7 @@ export const LibraryContainerChildren = ({ containerKey, readOnly }: LibraryCont
172174
<div className="ml-2 library-container-children">
173175
{children?.length === 0 && (
174176
<h4 className="ml-2">
175-
{insideSection ? (
177+
{containerType === ContainerType.Section ? (
176178
<FormattedMessage {...sectionMessages.noChildrenText} />
177179
) : (
178180
<FormattedMessage {...subsectionMessages.noChildrenText} />

src/library-authoring/units/LibraryUnitBlocks.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,11 @@ export const LibraryUnitBlocks = ({ unitId, readOnly: componentReadOnly }: Libra
273273

274274
return (
275275
<div className="library-unit-page">
276+
{orderedBlocks?.length === 0 && (
277+
<h4 className="ml-2">
278+
<FormattedMessage {...messages.noChildrenText} />
279+
</h4>
280+
)}
276281
<DraggableList
277282
itemList={orderedBlocks}
278283
setState={setOrderedBlocks}

src/library-authoring/units/LibraryUnitPage.test.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,12 @@ describe('<LibraryUnitPage />', () => {
105105
expect(screen.queryByText('Preview')).not.toBeInTheDocument();
106106
});
107107

108+
it('shows empty unit', async () => {
109+
renderLibraryUnitPage(mockGetContainerMetadata.unitIdEmpty);
110+
expect((await screen.findAllByText(libraryTitle))[0]).toBeInTheDocument();
111+
expect(await screen.findByText('This unit is empty')).toBeInTheDocument();
112+
});
113+
108114
it('can rename unit', async () => {
109115
renderLibraryUnitPage();
110116
expect((await screen.findAllByText(libraryTitle))[0]).toBeInTheDocument();

src/library-authoring/units/messages.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,11 @@ const messages = defineMessages({
5151
defaultMessage: 'Failed to update components order',
5252
description: 'Toast message displayed when components are successfully reordered in a unit',
5353
},
54+
noChildrenText: {
55+
id: 'course-authoring.library-authoring.unit.no-children.text',
56+
defaultMessage: 'This unit is empty',
57+
description: 'Message to display when unit has not children',
58+
},
5459
});
5560

5661
export default messages;

0 commit comments

Comments
 (0)