diff --git a/src/library-authoring/LibraryAuthoringPage.tsx b/src/library-authoring/LibraryAuthoringPage.tsx
index ffbbdbc290..7cbbd5ed7b 100644
--- a/src/library-authoring/LibraryAuthoringPage.tsx
+++ b/src/library-authoring/LibraryAuthoringPage.tsx
@@ -316,12 +316,11 @@ const LibraryAuthoringPage = ({
const activeTypeFilters = {
components: 'type = "library_block"',
- collections: 'type = "collection"',
units: 'block_type = "unit"',
subsections: 'block_type = "subsection"',
sections: 'block_type = "section"',
};
- if (activeKey !== ContentType.home) {
+ if (activeKey !== ContentType.home && activeKey !== ContentType.collections) {
extraFilter.push(activeTypeFilters[activeKey]);
}
diff --git a/src/library-authoring/LibraryContent.tsx b/src/library-authoring/LibraryContent.tsx
index 416d1a57b3..e55014a8ae 100644
--- a/src/library-authoring/LibraryContent.tsx
+++ b/src/library-authoring/LibraryContent.tsx
@@ -45,6 +45,17 @@ const LibraryContent = ({ contentType = ContentType.home }: LibraryContentProps)
const { libraryId, openCreateCollectionModal, collectionId } = useOptionalLibraryContext();
const { openAddContentSidebar, openComponentInfoSidebar } = useSidebarContext();
const { insideCollection } = useLibraryRoutes();
+ /**
+ * Filter collections on the frontend to display only collection cards in the Collections tab.
+ * This approach is used instead of backend filtering to ensure that all components (including those
+ * within collections) remain available in the 'hits' array. This is necessary for the component
+ * selection workflow when adding components to xblocks by choosing the while collection in Collections tab.
+ * Note: LibraryAuthoringPage.tsx has been modified to skip backend filtering for this purpose.
+ */
+ const filteredHits = contentType === ContentType.collections
+ ? hits.filter((hit) => hit.type === 'collection')
+ : hits;
+
/**
* Placeholder blocks represent fake blocks for failed imports from other sources, such as courses.
* They should only be displayed when viewing all components in the home tab of the library and the
@@ -103,7 +114,7 @@ const LibraryContent = ({ contentType = ContentType.home }: LibraryContentProps)
return (
- {hits.map((contentHit) => {
+ {filteredHits.map((contentHit) => {
const CardComponent = LibraryItemCard[contentHit.type] || ComponentCard;
return ;
diff --git a/src/library-authoring/__mocks__/library-search.json b/src/library-authoring/__mocks__/library-search.json
index 37ef2e72c5..b5b632f875 100644
--- a/src/library-authoring/__mocks__/library-search.json
+++ b/src/library-authoring/__mocks__/library-search.json
@@ -67,6 +67,7 @@
},
{
"display_name": "Collection 2",
+ "block_id": "col2",
"description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque et mi ac nisi accumsan imperdiet vitae at odio. Vivamus tempor nec lorem eget lacinia. Vivamus efficitur lacus non dapibus porta. Nulla venenatis luctus nisi id posuere. Sed sollicitudin magna a sem ultrices accumsan. Praesent volutpat tortor vitae luctus rutrum. Integer. Descrition 58",
"id": 2,
"type": "collection",
@@ -99,6 +100,7 @@
},
{
"display_name": "Collection 3",
+ "block_id": "col3",
"description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque et mi ac nisi accumsan imperdiet vitae at odio. Vivamus tempor nec lorem eget lacinia. Vivamus efficitur lacus non dapibus porta. Nulla venenatis luctus nisi id posuere. Sed sollicitudin magna a sem ultrices accumsan. Praesent volutpat tortor vitae luctus rutrum. Integer. Descrition 57",
"id": 3,
"type": "collection",
@@ -131,6 +133,7 @@
},
{
"display_name": "Collection 4",
+ "block_id": "col4",
"description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque et mi ac nisi accumsan imperdiet vitae at odio. Vivamus tempor nec lorem eget lacinia. Vivamus efficitur lacus non dapibus porta. Nulla venenatis luctus nisi id posuere. Sed sollicitudin magna a sem ultrices accumsan. Praesent volutpat tortor vitae luctus rutrum. Integer. Descrition 56",
"id": 4,
"type": "collection",
@@ -163,6 +166,7 @@
},
{
"display_name": "Collection 5",
+ "block_id": "col5",
"description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque et mi ac nisi accumsan imperdiet vitae at odio. Vivamus tempor nec lorem eget lacinia. Vivamus efficitur lacus non dapibus porta. Nulla venenatis luctus nisi id posuere. Sed sollicitudin magna a sem ultrices accumsan. Praesent volutpat tortor vitae luctus rutrum. Integer. Descrition 55",
"id": 5,
"type": "collection",
@@ -195,6 +199,7 @@
},
{
"display_name": "Collection 6",
+ "block_id": "col6",
"description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque et mi ac nisi accumsan imperdiet vitae at odio. Vivamus tempor nec lorem eget lacinia. Vivamus efficitur lacus non dapibus porta. Nulla venenatis luctus nisi id posuere. Sed sollicitudin magna a sem ultrices accumsan. Praesent volutpat tortor vitae luctus rutrum. Integer. Descrition 54",
"id": 6,
"type": "collection",
diff --git a/src/library-authoring/collections/LibraryCollectionComponents.tsx b/src/library-authoring/collections/LibraryCollectionComponents.tsx
index 6fcd79aa5c..b0d071071d 100644
--- a/src/library-authoring/collections/LibraryCollectionComponents.tsx
+++ b/src/library-authoring/collections/LibraryCollectionComponents.tsx
@@ -4,7 +4,6 @@ import { useSearchContext } from '../../search-manager';
import messages from './messages';
import { useSidebarContext } from '../common/context/SidebarContext';
import LibraryContent from '../LibraryContent';
-import { ContentType } from '../routes';
const LibraryCollectionComponents = () => {
const { totalHits: componentCount, isFiltered } = useSearchContext();
@@ -25,7 +24,7 @@ const LibraryCollectionComponents = () => {
return (