+ setCurrentPage(page)}
+ variant="secondary"
+ className="align-self-center"
+ />
+
+ );
+};
+
+export default SelectLibrary;
diff --git a/src/library-authoring/component-picker/index.ts b/src/library-authoring/component-picker/index.ts
new file mode 100644
index 0000000000..458946220c
--- /dev/null
+++ b/src/library-authoring/component-picker/index.ts
@@ -0,0 +1,2 @@
+// eslint-disable-next-line import/prefer-default-export
+export { ComponentPicker } from './ComponentPicker';
diff --git a/src/library-authoring/component-picker/messages.ts b/src/library-authoring/component-picker/messages.ts
new file mode 100644
index 0000000000..b2791a3e18
--- /dev/null
+++ b/src/library-authoring/component-picker/messages.ts
@@ -0,0 +1,36 @@
+import { defineMessages } from '@edx/frontend-platform/i18n';
+
+const messages = defineMessages({
+ selectLibraryInfo: {
+ id: 'course-authoring.library-authoring.pick-components.select-library.info',
+ defaultMessage: 'Select which Library would you like to reference components from.',
+ description: 'The info text for the select library component',
+ },
+ selectLibrarySearchPlaceholder: {
+ id: 'course-authoring.library-authoring.pick-components.select-library.search-placeholder',
+ defaultMessage: 'Search for a library',
+ description: 'The placeholder text for the search field in the select library component',
+ },
+ selectLibraryPaginationLabel: {
+ id: 'course-authoring.library-authoring.pick-components.select-library.pagination-label',
+ defaultMessage: 'Library pagination',
+ description: 'The pagination label for the select library component',
+ },
+ selectLibraryEmptyStateTitle: {
+ id: 'course-authoring.library-authoring.pick-components.select-library.empty-state.title',
+ defaultMessage: 'We could not find any result',
+ description: 'The title for the empty state in the select library component',
+ },
+ selectLibraryEmptyStateMessage: {
+ id: 'course-authoring.library-authoring.pick-components.select-library.empty-state.message',
+ defaultMessage: 'There are no libraries with the current filters.',
+ description: 'The message for the empty state in the select library component',
+ },
+ selectLibraryNextButton: {
+ id: 'course-authoring.library-authoring.pick-components.select-library.next-button',
+ defaultMessage: 'Next',
+ description: 'The text for the next button in the select library component',
+ },
+});
+
+export default messages;
diff --git a/src/library-authoring/components/BaseComponentCard.tsx b/src/library-authoring/components/BaseComponentCard.tsx
index 905d76d5a5..3b5aa748c9 100644
--- a/src/library-authoring/components/BaseComponentCard.tsx
+++ b/src/library-authoring/components/BaseComponentCard.tsx
@@ -8,12 +8,11 @@ import {
import { getItemIcon, getComponentStyleColor } from '../../generic/block-type-utils';
import TagCount from '../../generic/tag-count';
-import { BlockTypeLabel, ContentHitTags, Highlight } from '../../search-manager';
+import { BlockTypeLabel, type ContentHitTags, Highlight } from '../../search-manager';
type BaseComponentCardProps = {
componentType: string,
- displayName: string,
- description: string,
+ displayName: string, description: string,
numChildren?: number,
tags: ContentHitTags,
actions: React.ReactNode,
@@ -55,7 +54,12 @@ const BaseComponentCard = ({
title={
}
- actions={actions}
+ actions={
+ // Wrap the actions in a div to prevent the card from being clicked when the actions are clicked
+ /* eslint-disable-next-line jsx-a11y/click-events-have-key-events,
+ jsx-a11y/no-static-element-interactions */
+