diff --git a/package-lock.json b/package-lock.json index 9dc4b9bb3..57fa8a92f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -37,7 +37,7 @@ "@openedx-plugins/course-app-wiki": "file:plugins/course-apps/wiki", "@openedx-plugins/course-app-xpert_unit_summary": "file:plugins/course-apps/xpert_unit_summary", "@openedx/frontend-build": "^14.3.3", - "@openedx/frontend-plugin-framework": "^1.6.0", + "@openedx/frontend-plugin-framework": "^1.7.0", "@openedx/frontend-slot-footer": "^1.2.0", "@openedx/paragon": "^22.16.0", "@redux-devtools/extension": "^3.3.0", diff --git a/package.json b/package.json index 19334d346..65dffb33b 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,7 @@ "@openedx-plugins/course-app-wiki": "file:plugins/course-apps/wiki", "@openedx-plugins/course-app-xpert_unit_summary": "file:plugins/course-apps/xpert_unit_summary", "@openedx/frontend-build": "^14.3.3", - "@openedx/frontend-plugin-framework": "^1.6.0", + "@openedx/frontend-plugin-framework": "^1.7.0", "@openedx/frontend-slot-footer": "^1.2.0", "@openedx/paragon": "^22.16.0", "@redux-devtools/extension": "^3.3.0", diff --git a/src/files-and-videos/videos-page/transcript-settings/TranscriptSettings.jsx b/src/files-and-videos/videos-page/transcript-settings/TranscriptSettings.jsx index 541ac2445..3c13bdea7 100644 --- a/src/files-and-videos/videos-page/transcript-settings/TranscriptSettings.jsx +++ b/src/files-and-videos/videos-page/transcript-settings/TranscriptSettings.jsx @@ -11,7 +11,7 @@ import { TransitionReplace, } from '@openedx/paragon'; import { ChevronLeft, ChevronRight, Close } from '@openedx/paragon/icons'; -import { PluginSlot } from '@openedx/frontend-plugin-framework'; +import { AdditionalTranslationsComponentSlot } from '../../../plugin-slots/AdditionalTranslationsComponentSlot'; import OrderTranscriptForm from './OrderTranscriptForm'; import messages from './messages'; import { @@ -116,14 +116,12 @@ const TranscriptSettings = ({ )}
-
diff --git a/src/pages-and-resources/PagesAndResources.jsx b/src/pages-and-resources/PagesAndResources.jsx index 5dcb3161d..2382be67a 100644 --- a/src/pages-and-resources/PagesAndResources.jsx +++ b/src/pages-and-resources/PagesAndResources.jsx @@ -20,6 +20,8 @@ import { RequestStatus } from '../data/constants'; import SettingsComponent from './SettingsComponent'; import PermissionDeniedAlert from '../generic/PermissionDeniedAlert'; import getPageHeadTitle from '../generic/utils'; +import { AdditionalCoursePluginSlot } from '../plugin-slots/AdditionalCoursePluginSlot'; +import { AdditionalCourseContentPluginSlot } from '../plugin-slots/AdditionalCourseContentPluginSlot'; const PagesAndResources = ({ courseId }) => { const intl = useIntl(); @@ -90,7 +92,7 @@ const PagesAndResources = ({ courseId }) => { } /> - + { (contentPermissionsPages.length > 0 || hasAdditionalCoursePlugin) && ( @@ -98,7 +100,7 @@ const PagesAndResources = ({ courseId }) => {

{intl.formatMessage(messages.contentPermissions)}

- + ) } diff --git a/src/pages-and-resources/pages/PageGrid.jsx b/src/pages-and-resources/pages/PageGrid.jsx index d86e4b50a..e94db823e 100644 --- a/src/pages-and-resources/pages/PageGrid.jsx +++ b/src/pages-and-resources/pages/PageGrid.jsx @@ -1,10 +1,9 @@ import PropTypes from 'prop-types'; import React from 'react'; import { CardGrid } from '@openedx/paragon'; -import { PluginSlot } from '@openedx/frontend-plugin-framework'; import PageCard, { CoursePageShape } from './PageCard'; -const PageGrid = ({ pages, pluginSlotId, courseId }) => ( +const PageGrid = ({ pages, pluginSlotComponent, courseId }) => ( ( {pages.map((page) => ( ))} - {pluginSlotId && } + {pluginSlotComponent} ); PageGrid.defaultProps = { - pluginSlotId: null, + pluginSlotComponent: null, courseId: null, }; PageGrid.propTypes = { pages: PropTypes.arrayOf(CoursePageShape.isRequired).isRequired, - pluginSlotId: PropTypes.string, + pluginSlotComponent: PropTypes.element, courseId: PropTypes.string, }; diff --git a/src/plugin-slots/AdditionalCourseContentPluginSlot/README.md b/src/plugin-slots/AdditionalCourseContentPluginSlot/README.md new file mode 100644 index 000000000..e467dc506 --- /dev/null +++ b/src/plugin-slots/AdditionalCourseContentPluginSlot/README.md @@ -0,0 +1,6 @@ +# AdditionalCourseContentPluginSlot + +### Slot ID: `org.openedx.frontend.authoring.additional_course_content_plugin.v1` + +### Slot ID Aliases +* `additional_course_content_plugin` diff --git a/src/plugin-slots/AdditionalCourseContentPluginSlot/__snapshots__/index.test.jsx.snap b/src/plugin-slots/AdditionalCourseContentPluginSlot/__snapshots__/index.test.jsx.snap new file mode 100644 index 000000000..2542e05ea --- /dev/null +++ b/src/plugin-slots/AdditionalCourseContentPluginSlot/__snapshots__/index.test.jsx.snap @@ -0,0 +1,12 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`AdditionalCourseContentPluginSlot renders 1`] = ` + +`; diff --git a/src/plugin-slots/AdditionalCourseContentPluginSlot/index.test.jsx b/src/plugin-slots/AdditionalCourseContentPluginSlot/index.test.jsx new file mode 100644 index 000000000..a4e0cb05d --- /dev/null +++ b/src/plugin-slots/AdditionalCourseContentPluginSlot/index.test.jsx @@ -0,0 +1,15 @@ +import { shallow } from '@edx/react-unit-test-utils'; +import { AdditionalCourseContentPluginSlot } from '.'; + +jest.mock('@openedx/frontend-plugin-framework', () => ({ + PluginSlot: 'PluginSlot', +})); + +describe('AdditionalCourseContentPluginSlot', () => { + beforeEach(() => jest.resetAllMocks()); + + it('renders', () => { + const wrapper = shallow(); + expect(wrapper.snapshot).toMatchSnapshot(); + }); +}); diff --git a/src/plugin-slots/AdditionalCourseContentPluginSlot/index.tsx b/src/plugin-slots/AdditionalCourseContentPluginSlot/index.tsx new file mode 100644 index 000000000..74a6f55b5 --- /dev/null +++ b/src/plugin-slots/AdditionalCourseContentPluginSlot/index.tsx @@ -0,0 +1,9 @@ +import { PluginSlot } from '@openedx/frontend-plugin-framework/dist'; +import React from 'react'; + +export const AdditionalCourseContentPluginSlot = () => ( + +); diff --git a/src/plugin-slots/AdditionalCoursePluginSlot/README.md b/src/plugin-slots/AdditionalCoursePluginSlot/README.md new file mode 100644 index 000000000..39bf9e8fb --- /dev/null +++ b/src/plugin-slots/AdditionalCoursePluginSlot/README.md @@ -0,0 +1,6 @@ +# AdditionalCoursePluginSlot + +### Slot ID: `org.openedx.frontend.authoring.additional_course_plugin.v1` + +### Slot ID Aliases +* `additional_course_plugin` diff --git a/src/plugin-slots/AdditionalCoursePluginSlot/__snapshots__/index.test.jsx.snap b/src/plugin-slots/AdditionalCoursePluginSlot/__snapshots__/index.test.jsx.snap new file mode 100644 index 000000000..0a5dafcae --- /dev/null +++ b/src/plugin-slots/AdditionalCoursePluginSlot/__snapshots__/index.test.jsx.snap @@ -0,0 +1,12 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`AdditionalCoursePluginSlot renders 1`] = ` + +`; diff --git a/src/plugin-slots/AdditionalCoursePluginSlot/index.test.jsx b/src/plugin-slots/AdditionalCoursePluginSlot/index.test.jsx new file mode 100644 index 000000000..0f90fb497 --- /dev/null +++ b/src/plugin-slots/AdditionalCoursePluginSlot/index.test.jsx @@ -0,0 +1,15 @@ +import { shallow } from '@edx/react-unit-test-utils'; +import { AdditionalCoursePluginSlot } from '.'; + +jest.mock('@openedx/frontend-plugin-framework', () => ({ + PluginSlot: 'PluginSlot', +})); + +describe('AdditionalCoursePluginSlot', () => { + beforeEach(() => jest.resetAllMocks()); + + it('renders', () => { + const wrapper = shallow(); + expect(wrapper.snapshot).toMatchSnapshot(); + }); +}); diff --git a/src/plugin-slots/AdditionalCoursePluginSlot/index.tsx b/src/plugin-slots/AdditionalCoursePluginSlot/index.tsx new file mode 100644 index 000000000..a1cdfdc41 --- /dev/null +++ b/src/plugin-slots/AdditionalCoursePluginSlot/index.tsx @@ -0,0 +1,9 @@ +import { PluginSlot } from '@openedx/frontend-plugin-framework/dist'; +import React from 'react'; + +export const AdditionalCoursePluginSlot = () => ( + +); diff --git a/src/plugin-slots/AdditionalTranslationsComponentSlot/README.md b/src/plugin-slots/AdditionalTranslationsComponentSlot/README.md new file mode 100644 index 000000000..68d4f27e7 --- /dev/null +++ b/src/plugin-slots/AdditionalTranslationsComponentSlot/README.md @@ -0,0 +1,15 @@ +# AdditionalTranslationsComponentSlot + +### Slot ID: `org.openedx.frontend.authoring.video_transcript_additional_translations_component.v1` + +### Slot ID Aliases +* `additonal_translations_component_slot` (original misspelling) +* `additional_translations_component_slot` + +### Plugin Props: +* `setIsAiTranslations` - Function (React SetState) +* `closeTranscriptSettings` - Function (Paragon useToggle) +* `courseId` - String +* `additionalProps` - Object + * `transcriptType` - String + * `isAiTranslationsEnabled` - Boolean diff --git a/src/plugin-slots/AdditionalTranslationsComponentSlot/index.tsx b/src/plugin-slots/AdditionalTranslationsComponentSlot/index.tsx new file mode 100644 index 000000000..b1289e1e1 --- /dev/null +++ b/src/plugin-slots/AdditionalTranslationsComponentSlot/index.tsx @@ -0,0 +1,32 @@ +import { PluginSlot } from '@openedx/frontend-plugin-framework/dist'; +import React from 'react'; + +export const AdditionalTranslationsComponentSlot = ({ + setIsAiTranslations, + closeTranscriptSettings, + courseId, + transcriptType, + isAiTranslationsEnabled, +}: AdditionalTranslationsComponentSlotProps) => ( + +); + +interface AdditionalTranslationsComponentSlotProps { + setIsAiTranslations: React.Dispatch>; + closeTranscriptSettings: () => void; + courseId: string; + transcriptType: string; + isAiTranslationsEnabled: boolean; +} diff --git a/src/plugin-slots/CourseAuthoringOutlineSidebarSlot/README.md b/src/plugin-slots/CourseAuthoringOutlineSidebarSlot/README.md index 97f0d3225..ee11b7975 100644 --- a/src/plugin-slots/CourseAuthoringOutlineSidebarSlot/README.md +++ b/src/plugin-slots/CourseAuthoringOutlineSidebarSlot/README.md @@ -1,6 +1,9 @@ # CourseAuthoringOutlineSidebarSlot -### Slot ID: `course_authoring_outline_sidebar_slot` +### Slot ID: `org.openedx.frontend.authoring.course_outline_sidebar.v1` + +### Slot ID Aliases +* `course_authoring_outline_sidebar_slot` ### Plugin Props: @@ -24,7 +27,7 @@ import { PLUGIN_OPERATIONS } from '@openedx/frontend-plugin-framework'; const config = { pluginSlots: { - course_authoring_outline_sidebar_slot: { + 'org.openedx.frontend.authoring.course_outline_sidebar.v1': { keepDefault: true, plugins: [ { diff --git a/src/plugin-slots/CourseAuthoringOutlineSidebarSlot/index.tsx b/src/plugin-slots/CourseAuthoringOutlineSidebarSlot/index.tsx index 5485e69fb..06682dbec 100644 --- a/src/plugin-slots/CourseAuthoringOutlineSidebarSlot/index.tsx +++ b/src/plugin-slots/CourseAuthoringOutlineSidebarSlot/index.tsx @@ -8,7 +8,8 @@ export const CourseAuthoringOutlineSidebarSlot = ({ sections, }: CourseAuthoringOutlineSidebarSlotProps) => ( ( const config = { pluginSlots: { - course_authoring_unit_sidebar_slot: { + 'org.openedx.frontend.authoring.course_unit_sidebar.v1': { keepDefault: true, plugins: [ { diff --git a/src/plugin-slots/CourseAuthoringUnitSidebarSlot/index.tsx b/src/plugin-slots/CourseAuthoringUnitSidebarSlot/index.tsx index 846309505..af8f97d67 100644 --- a/src/plugin-slots/CourseAuthoringUnitSidebarSlot/index.tsx +++ b/src/plugin-slots/CourseAuthoringUnitSidebarSlot/index.tsx @@ -14,7 +14,8 @@ export const CourseAuthoringUnitSidebarSlot = ( }: CourseAuthoringUnitSidebarSlotProps, ) => ( ( const config = { pluginSlots: { - course_outline_header_actions_slot: { + 'org.openedx.frontend.authoring.course_outline_header_actions.v1': { keepDefault: true, plugins: [ { diff --git a/src/plugin-slots/CourseOutlineHeaderActionsSlot/__snapshots__/index.test.jsx.snap b/src/plugin-slots/CourseOutlineHeaderActionsSlot/__snapshots__/index.test.jsx.snap index 87cb3fabb..ca67b635d 100644 --- a/src/plugin-slots/CourseOutlineHeaderActionsSlot/__snapshots__/index.test.jsx.snap +++ b/src/plugin-slots/CourseOutlineHeaderActionsSlot/__snapshots__/index.test.jsx.snap @@ -2,7 +2,12 @@ exports[`CourseOutlineHeaderActionsSlot pluginProps are set correctly 1`] = ` ( ( const config = { pluginSlots: { - course_outline_subsection_card_extra_actions_slot: { + 'org.openedx.frontend.authoring.course_outline_subsection_card_extra_actions.v1': { keepDefault: true, plugins: [ { diff --git a/src/plugin-slots/CourseOutlineSubsectionCardExtraActionsSlot/index.jsx b/src/plugin-slots/CourseOutlineSubsectionCardExtraActionsSlot/index.jsx index 69b2b241d..c6ca1cb83 100644 --- a/src/plugin-slots/CourseOutlineSubsectionCardExtraActionsSlot/index.jsx +++ b/src/plugin-slots/CourseOutlineSubsectionCardExtraActionsSlot/index.jsx @@ -4,7 +4,11 @@ import PropTypes from 'prop-types'; import { PluginSlot } from '@openedx/frontend-plugin-framework'; const CourseOutlineSubsectionCardExtraActionsSlot = ({ subsection, section }) => ( - + ); CourseOutlineSubsectionCardExtraActionsSlot.propTypes = { diff --git a/src/plugin-slots/CourseOutlineUnitCardExtraActionsSlot/README.md b/src/plugin-slots/CourseOutlineUnitCardExtraActionsSlot/README.md index 79b55731e..4ce28d24c 100644 --- a/src/plugin-slots/CourseOutlineUnitCardExtraActionsSlot/README.md +++ b/src/plugin-slots/CourseOutlineUnitCardExtraActionsSlot/README.md @@ -1,6 +1,10 @@ # CourseOutlineUnitCardExtraActionsSlot -### Slot ID: `course_outline_unit_card_extra_actions_slot` +### Slot ID: `org.openedx.frontend.authoring.course_outline_unit_card_extra_actions.v1` + +### Slot ID Aliases +* `course_outline_unit_card_extra_actions_slot` + ### Plugin Props: * `unit` - object @@ -37,7 +41,7 @@ const MyIconButton = () => ( const config = { pluginSlots: { - course_outline_unit_card_extra_actions_slot: { + 'org.openedx.frontend.authoring.course_outline_unit_card_extra_actions.v1': { keepDefault: true, plugins: [ { diff --git a/src/plugin-slots/CourseOutlineUnitCardExtraActionsSlot/index.jsx b/src/plugin-slots/CourseOutlineUnitCardExtraActionsSlot/index.jsx index 64f949a20..6f4057553 100644 --- a/src/plugin-slots/CourseOutlineUnitCardExtraActionsSlot/index.jsx +++ b/src/plugin-slots/CourseOutlineUnitCardExtraActionsSlot/index.jsx @@ -4,7 +4,11 @@ import PropTypes from 'prop-types'; import { PluginSlot } from '@openedx/frontend-plugin-framework'; const CourseOutlineUnitCardExtraActionsSlot = ({ unit, subsection, section }) => ( - + ); CourseOutlineUnitCardExtraActionsSlot.propTypes = { diff --git a/src/plugin-slots/CourseUnitHeaderActionsSlot/README.md b/src/plugin-slots/CourseUnitHeaderActionsSlot/README.md index 8fa44471b..0988dcc07 100644 --- a/src/plugin-slots/CourseUnitHeaderActionsSlot/README.md +++ b/src/plugin-slots/CourseUnitHeaderActionsSlot/README.md @@ -1,6 +1,10 @@ # CourseUnitHeaderActionsSlot -### Slot ID: `course_unit_header_actions_slot` +### Slot ID: `org.openedx.frontend.authoring.course_unit_header_actions.v1` + +### Slot ID Aliases +* `course_unit_header_actions_slot` + ### Plugin Props: * `headerNavigationsActions` - Object. See the prop-types definition in the component for details. @@ -31,7 +35,7 @@ const MyButton = () => ( const config = { pluginSlots: { - course_unit_header_actions_slot: { + 'org.openedx.frontend.authoring.course_unit_header_actions.v1': { keepDefault: true, plugins: [ { diff --git a/src/plugin-slots/CourseUnitHeaderActionsSlot/__snapshots__/index.test.jsx.snap b/src/plugin-slots/CourseUnitHeaderActionsSlot/__snapshots__/index.test.jsx.snap index 7d3384895..04f50bc26 100644 --- a/src/plugin-slots/CourseUnitHeaderActionsSlot/__snapshots__/index.test.jsx.snap +++ b/src/plugin-slots/CourseUnitHeaderActionsSlot/__snapshots__/index.test.jsx.snap @@ -2,7 +2,12 @@ exports[`CourseUnitHeaderActionsSlot pluginProps are set correctly 1`] = `