From 14aa3dc6ad0a13005f43fdc7823fcc7931b1034a Mon Sep 17 00:00:00 2001 From: "kshitij.sobti" Date: Sun, 26 Apr 2026 00:41:04 +0530 Subject: [PATCH 1/6] feat: Introduce slot for customizing course tab navigation Adds a new plugin slot (`CourseTabsNavigationSlot`) to enable customization, modification, or hiding of the course tab navigation. Updated relevant components to integrate with the new slot. --- src/course-tabs/CourseTabsNavigation.tsx | 7 +-- src/course-tabs/{index.js => index.ts} | 2 +- .../CourseTabsNavigationSlot/README.md | 38 ++++++++++++++ .../course-tabs-navigation-shadow.png | Bin 0 -> 5140 bytes .../CourseTabsNavigationSlot/index.tsx | 8 +++ .../{LoadedTabPage.jsx => LoadedTabPage.tsx} | 48 ++++++++---------- 6 files changed, 70 insertions(+), 33 deletions(-) rename src/course-tabs/{index.js => index.ts} (50%) create mode 100644 src/plugin-slots/CourseTabsNavigationSlot/README.md create mode 100644 src/plugin-slots/CourseTabsNavigationSlot/course-tabs-navigation-shadow.png create mode 100644 src/plugin-slots/CourseTabsNavigationSlot/index.tsx rename src/tab-page/{LoadedTabPage.jsx => LoadedTabPage.tsx} (73%) diff --git a/src/course-tabs/CourseTabsNavigation.tsx b/src/course-tabs/CourseTabsNavigation.tsx index 87a1b92c4a..781fa98e15 100644 --- a/src/course-tabs/CourseTabsNavigation.tsx +++ b/src/course-tabs/CourseTabsNavigation.tsx @@ -1,5 +1,4 @@ import React from 'react'; -import classNames from 'classnames'; import { useIntl } from '@edx/frontend-platform/i18n'; import { CourseTabLinksSlot } from '../plugin-slots/CourseTabLinksSlot'; import { CoursewareSearch, CoursewareSearchToggle } from '../course-home/courseware-search'; @@ -8,9 +7,8 @@ import { useCoursewareSearchState } from '../course-home/courseware-search/hooks import Tabs from '../generic/tabs/Tabs'; import messages from './messages'; -interface CourseTabsNavigationProps { +export interface CourseTabsNavigationProps { activeTabSlug?: string; - className?: string | null; tabs: Array<{ title: string; slug: string; @@ -20,14 +18,13 @@ interface CourseTabsNavigationProps { const CourseTabsNavigation = ({ activeTabSlug = undefined, - className = null, tabs, }:CourseTabsNavigationProps) => { const intl = useIntl(); const { show } = useCoursewareSearchState(); return ( -
+
diff --git a/src/course-tabs/index.js b/src/course-tabs/index.ts similarity index 50% rename from src/course-tabs/index.js rename to src/course-tabs/index.ts index e2236ee726..801de27856 100644 --- a/src/course-tabs/index.js +++ b/src/course-tabs/index.ts @@ -1,2 +1,2 @@ -/* eslint-disable import/prefer-default-export */ export { default as CourseTabsNavigation } from './CourseTabsNavigation'; +export type { CourseTabsNavigationProps } from './CourseTabsNavigation'; diff --git a/src/plugin-slots/CourseTabsNavigationSlot/README.md b/src/plugin-slots/CourseTabsNavigationSlot/README.md new file mode 100644 index 0000000000..8cc241dd36 --- /dev/null +++ b/src/plugin-slots/CourseTabsNavigationSlot/README.md @@ -0,0 +1,38 @@ +# Course Tab Navigation Slot + +### Slot ID: `org.openedx.frontend.learning.course_tab_navigation.v1` + +### Props: +NONE + +## Description + +This slot is used to replace/modify/hide the entire course tab navigation. + +## Example + +### Added a drop shadow to Course Tabs bar +![Added a drop shadow to Course Tabs bar](./course-tabs-navigation-shadow.png) + +The following `env.config.jsx` will add a new course tab call "Custom Tab". + +```js +import { DIRECT_PLUGIN, PLUGIN_OPERATIONS } from '@openedx/frontend-plugin-framework'; + +const config = { + pluginSlots: { + "org.openedx.frontend.learning.course_tab_navigation.v1": { + keepDefault: true, + plugins: [ + { + op: PLUGIN_OPERATIONS.Wrap, + widgetId: 'default_contents', + wrapper: ({component}) => (
{component}
) + }, + ], + }, + }, +} + +export default config; +``` diff --git a/src/plugin-slots/CourseTabsNavigationSlot/course-tabs-navigation-shadow.png b/src/plugin-slots/CourseTabsNavigationSlot/course-tabs-navigation-shadow.png new file mode 100644 index 0000000000000000000000000000000000000000..eb3c6617be2f09ad7213766378dd63cd8a6d3988 GIT binary patch literal 5140 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 literal 0 HcmV?d00001 diff --git a/src/plugin-slots/CourseTabsNavigationSlot/index.tsx b/src/plugin-slots/CourseTabsNavigationSlot/index.tsx new file mode 100644 index 0000000000..eda1e470b2 --- /dev/null +++ b/src/plugin-slots/CourseTabsNavigationSlot/index.tsx @@ -0,0 +1,8 @@ +import { CourseTabsNavigation, type CourseTabsNavigationProps } from '@src/course-tabs'; +import { PluginSlot } from '@openedx/frontend-plugin-framework'; + +export const CourseTabsNavigationSlot = ({ tabs, activeTabSlug }: CourseTabsNavigationProps) => ( + + + +); diff --git a/src/tab-page/LoadedTabPage.jsx b/src/tab-page/LoadedTabPage.tsx similarity index 73% rename from src/tab-page/LoadedTabPage.jsx rename to src/tab-page/LoadedTabPage.tsx index 67a1b86595..2ff80fc84b 100644 --- a/src/tab-page/LoadedTabPage.jsx +++ b/src/tab-page/LoadedTabPage.tsx @@ -1,27 +1,35 @@ import React from 'react'; -import PropTypes from 'prop-types'; import { Helmet } from 'react-helmet'; import { getConfig } from '@edx/frontend-platform'; import { useToggle } from '@openedx/paragon'; -import { CourseTabsNavigation } from '../course-tabs'; -import { useModel } from '../generic/model-store'; -import { AlertList } from '../generic/user-messages'; -import StreakModal from '../shared/streak-celebration'; -import InstructorToolbar from '../instructor-toolbar'; -import useEnrollmentAlert from '../alerts/enrollment-alert'; -import useLogistrationAlert from '../alerts/logistration-alert'; +import { CourseTabsNavigationSlot } from '@src/plugin-slots/CourseTabsNavigationSlot'; + +import { useModel } from '@src/generic/model-store'; +import { AlertList } from '@src/generic/user-messages'; +import useEnrollmentAlert from '@src/alerts/enrollment-alert'; +import useLogistrationAlert from '@src/alerts/logistration-alert'; +import StreakModal from '@src/shared/streak-celebration'; +import InstructorToolbar from '@src/instructor-toolbar'; import ProductTours from '../product-tours/ProductTours'; +interface LoadedTabPageProps { + activeTabSlug: string; + children: React.ReactNode; + courseId: string; + metadataModel: string; + unitId: string | null; +} + const LoadedTabPage = ({ activeTabSlug, - children, + children = null, courseId, - metadataModel, - unitId, -}) => { + metadataModel = 'courseHomeMeta', + unitId = null, +}: LoadedTabPageProps) => { const { celebrations, org, @@ -80,7 +88,7 @@ const LoadedTabPage = ({ ...logistrationAlert, }} /> - +
{children}
@@ -89,18 +97,4 @@ const LoadedTabPage = ({ ); }; -LoadedTabPage.propTypes = { - activeTabSlug: PropTypes.string.isRequired, - children: PropTypes.node, - courseId: PropTypes.string.isRequired, - metadataModel: PropTypes.string, - unitId: PropTypes.string, -}; - -LoadedTabPage.defaultProps = { - children: null, - metadataModel: 'courseHomeMeta', - unitId: null, -}; - export default LoadedTabPage; From 44096c1004516ec2f6f932ddef191864b183e5ef Mon Sep 17 00:00:00 2001 From: "kshitij.sobti" Date: Tue, 28 Apr 2026 22:53:53 +0530 Subject: [PATCH 2/6] refactor: Separate course outline data and sidebar context logic Splits `useCourseOutlineSidebar` into `useCourseOutlineData` and `useCourseOutlineSidebar` for improved separation of responsibilities. Updates components and styles to reflect this change. This change allows the usage of the course outline outside of a sidebar context. --- .../course-outline/CourseOutlineTray.jsx | 39 ++++-- .../course-outline/CourseOutlineTray.scss | 4 +- .../course-outline/CourseOutlineTrigger.jsx | 4 +- .../components/SidebarSection.jsx | 4 +- .../components/SidebarSequence.jsx | 4 +- .../course-outline/components/SidebarUnit.jsx | 2 +- .../components/UnitLinkWrapper.tsx | 14 +- .../sidebar/sidebars/course-outline/hooks.js | 131 +++++++++++------- 8 files changed, 123 insertions(+), 79 deletions(-) diff --git a/src/courseware/course/sidebar/sidebars/course-outline/CourseOutlineTray.jsx b/src/courseware/course/sidebar/sidebars/course-outline/CourseOutlineTray.jsx index 8eaf5e8a0b..2609f48f3e 100644 --- a/src/courseware/course/sidebar/sidebars/course-outline/CourseOutlineTray.jsx +++ b/src/courseware/course/sidebar/sidebars/course-outline/CourseOutlineTray.jsx @@ -9,29 +9,25 @@ import { import { LOADING } from '@src/constants'; import PageLoading from '@src/generic/PageLoading'; +import { useParams } from 'react-router-dom'; import SidebarSection from './components/SidebarSection'; import SidebarSequence from './components/SidebarSequence'; import { ID } from './constants'; -import { useCourseOutlineSidebar } from './hooks'; +import { useCourseOutlineData, useCourseOutlineSidebar } from './hooks'; import messages from './messages'; -const CourseOutlineTray = () => { +export const CourseOutline = ({ shouldDisplayFullScreen = false, onToggleCollapse = null }) => { const intl = useIntl(); const [selectedSection, setSelectedSection] = useState(null); const [isDisplaySequenceLevel, setDisplaySequenceLevel, setDisplaySectionLevel] = useToggle(true); - + const { unitId, courseId } = useParams(); const { - courseId, - unitId, - currentSidebar, - handleToggleCollapse, - isActiveEntranceExam, - shouldDisplayFullScreen, courseOutlineStatus, activeSequenceId, sections, sequences, - } = useCourseOutlineSidebar(); + isActiveEntranceExam, + } = useCourseOutlineData(); const resolvedSectionId = selectedSection || Object.keys(sections).find( @@ -50,7 +46,6 @@ const CourseOutlineTray = () => { setDisplaySequenceLevel(); setSelectedSection(id); }; - const sidebarHeading = (
{isDisplaySequenceLevel && backButtonTitle ? ( @@ -67,19 +62,20 @@ const CourseOutlineTray = () => { {intl.formatMessage(messages.courseOutlineTitle)} )} + {onToggleCollapse + && ( + )}
); - - if (isActiveEntranceExam || currentSidebar !== ID) { + if (isActiveEntranceExam) { return null; } - if (courseOutlineStatus === LOADING) { return (
{ ); }; +const CourseOutlineTray = () => { + const { + currentSidebar, + shouldDisplayFullScreen, + handleToggleCollapse, + } = useCourseOutlineSidebar(); + + if (currentSidebar !== ID) { + return null; + } + return ; +}; + CourseOutlineTray.ID = ID; export default CourseOutlineTray; diff --git a/src/courseware/course/sidebar/sidebars/course-outline/CourseOutlineTray.scss b/src/courseware/course/sidebar/sidebars/course-outline/CourseOutlineTray.scss index a574f02736..82c68f4452 100644 --- a/src/courseware/course/sidebar/sidebars/course-outline/CourseOutlineTray.scss +++ b/src/courseware/course/sidebar/sidebars/course-outline/CourseOutlineTray.scss @@ -13,7 +13,7 @@ } .outline-sidebar-heading-wrapper { - border: 1px solid #d7d3d1; + border: 1px solid var(--pgn-color-light-700); &.sticky { position: sticky; @@ -29,7 +29,7 @@ .course-sidebar-section { background: var(--pgn-color-white); - border: 1px solid #d7d3d1; + border: 1px solid var(--pgn-color-light-700); button { line-height: 1.75rem; diff --git a/src/courseware/course/sidebar/sidebars/course-outline/CourseOutlineTrigger.jsx b/src/courseware/course/sidebar/sidebars/course-outline/CourseOutlineTrigger.jsx index abccd14aed..3d6039598f 100644 --- a/src/courseware/course/sidebar/sidebars/course-outline/CourseOutlineTrigger.jsx +++ b/src/courseware/course/sidebar/sidebars/course-outline/CourseOutlineTrigger.jsx @@ -4,17 +4,17 @@ import { useIntl } from '@edx/frontend-platform/i18n'; import { IconButton } from '@openedx/paragon'; import { MenuOpen as MenuOpenIcon } from '@openedx/paragon/icons'; -import { useCourseOutlineSidebar } from './hooks'; +import { useCourseOutlineData, useCourseOutlineSidebar } from './hooks'; import { ID } from './constants'; import messages from './messages'; const CourseOutlineTrigger = ({ isMobileView }) => { const intl = useIntl(); + const { isActiveEntranceExam } = useCourseOutlineData(); const { currentSidebar, shouldDisplayFullScreen, handleToggleCollapse, - isActiveEntranceExam, } = useCourseOutlineSidebar(); const isDisplayForDesktopView = !isMobileView && !shouldDisplayFullScreen && currentSidebar !== ID; diff --git a/src/courseware/course/sidebar/sidebars/course-outline/components/SidebarSection.jsx b/src/courseware/course/sidebar/sidebars/course-outline/components/SidebarSection.jsx index 034575743b..246201ff37 100644 --- a/src/courseware/course/sidebar/sidebars/course-outline/components/SidebarSection.jsx +++ b/src/courseware/course/sidebar/sidebars/course-outline/components/SidebarSection.jsx @@ -6,7 +6,7 @@ import { ChevronRight as ChevronRightIcon } from '@openedx/paragon/icons'; import courseOutlineMessages from '@src/course-home/outline-tab/messages'; import CompletionIcon from './CompletionIcon'; -import { useCourseOutlineSidebar } from '../hooks'; +import { useCourseOutlineData } from '../hooks'; const SidebarSection = ({ section, handleSelectSection }) => { const intl = useIntl(); @@ -18,7 +18,7 @@ const SidebarSection = ({ section, handleSelectSection }) => { completionStat, } = section; - const { activeSequenceId, isEnabledCompletionTracking } = useCourseOutlineSidebar(); + const { activeSequenceId, isEnabledCompletionTracking } = useCourseOutlineData(); const isActiveSection = sequenceIds.includes(activeSequenceId); const sectionTitle = ( diff --git a/src/courseware/course/sidebar/sidebars/course-outline/components/SidebarSequence.jsx b/src/courseware/course/sidebar/sidebars/course-outline/components/SidebarSequence.jsx index 5e1fb37a4f..e612a93c2d 100644 --- a/src/courseware/course/sidebar/sidebars/course-outline/components/SidebarSequence.jsx +++ b/src/courseware/course/sidebar/sidebars/course-outline/components/SidebarSequence.jsx @@ -5,7 +5,7 @@ import { useIntl } from '@edx/frontend-platform/i18n'; import { Collapsible } from '@openedx/paragon'; import courseOutlineMessages from '@src/course-home/outline-tab/messages'; -import { useCourseOutlineSidebar } from '../hooks'; +import { useCourseOutlineData } from '../hooks'; import CompletionIcon from './CompletionIcon'; import SidebarUnit from './SidebarUnit'; import { UNIT_ICON_TYPES } from './UnitIcon'; @@ -28,7 +28,7 @@ const SidebarSequence = ({ } = sequence; const [open, setOpen] = useState(defaultOpen); - const { activeSequenceId, units, isEnabledCompletionTracking } = useCourseOutlineSidebar(); + const { activeSequenceId, units, isEnabledCompletionTracking } = useCourseOutlineData(); const isActiveSequence = id === activeSequenceId; const sectionTitle = ( diff --git a/src/courseware/course/sidebar/sidebars/course-outline/components/SidebarUnit.jsx b/src/courseware/course/sidebar/sidebars/course-outline/components/SidebarUnit.jsx index b2f6bc7249..e88408319b 100644 --- a/src/courseware/course/sidebar/sidebars/course-outline/components/SidebarUnit.jsx +++ b/src/courseware/course/sidebar/sidebars/course-outline/components/SidebarUnit.jsx @@ -28,7 +28,7 @@ const SidebarUnit = ({ const completeAndEnabled = complete && isCompletionTrackingEnabled; return ( -
  • +
  • = ({ courseId, children, }) => { - const { handleUnitClick } = useCourseOutlineSidebar(); + const { handleUnitClick } = useCourseOutlineData(); + const { shouldDisplayFullScreen, handleToggleCollapse } = useCourseOutlineSidebar(); const { pathname } = useLocation(); const isPreview = pathname.startsWith('/preview'); const baseUrl = `/course/${courseId}/${sequenceId}/${id}`; const link = isPreview ? `/preview${baseUrl}` : baseUrl; + const handleClick = React.useCallback(() => { + // Hide the sidebar after selecting a unit on a mobile device. + if (shouldDisplayFullScreen) { + handleToggleCollapse(); + } + handleUnitClick({ sequenceId, activeUnitId, id }); + }, [handleUnitClick, sequenceId, activeUnitId, id]); return ( handleUnitClick({ sequenceId, activeUnitId, id })} + onClick={handleClick} > {children} diff --git a/src/courseware/course/sidebar/sidebars/course-outline/hooks.js b/src/courseware/course/sidebar/sidebars/course-outline/hooks.js index 1e180fa279..8b0a2360da 100644 --- a/src/courseware/course/sidebar/sidebars/course-outline/hooks.js +++ b/src/courseware/course/sidebar/sidebars/course-outline/hooks.js @@ -1,28 +1,27 @@ -import { - useContext, useEffect, useLayoutEffect, useState, -} from 'react'; -import { useDispatch, useSelector } from 'react-redux'; -import { useParams } from 'react-router-dom'; import { sendTrackEvent, sendTrackingLogEvent } from '@edx/frontend-platform/analytics'; import { breakpoints } from '@openedx/paragon'; - -import { useModel } from '@src/generic/model-store'; import { LOADED } from '@src/constants'; -import { checkBlockCompletion, getCourseOutlineStructure } from '@src/courseware/data/thunks'; import { - getCoursewareOutlineSidebarSettings, + getCourseOutline, getCourseOutlineShouldUpdate, getCourseOutlineStatus, + getCoursewareOutlineSidebarSettings, getSequenceId, - getCourseOutline, getSequenceStatus, } from '@src/courseware/data/selectors'; +import { checkBlockCompletion, getCourseOutlineStructure } from '@src/courseware/data/thunks'; + +import { useModel } from '@src/generic/model-store'; +import { + useContext, useEffect, useLayoutEffect, useState, +} from 'react'; +import { useDispatch, useSelector } from 'react-redux'; +import { useParams } from 'react-router-dom'; import SidebarContext from '../../SidebarContext'; import { setOutlineSidebarCollapsed } from '../../utils/storage'; import { ID } from './constants'; -// eslint-disable-next-line import/prefer-default-export -export const useCourseOutlineSidebar = () => { +export const useCourseOutlineData = () => { const dispatch = useDispatch(); const { enableCompletionTracking: isEnabledCompletionTracking, @@ -31,43 +30,26 @@ export const useCourseOutlineSidebar = () => { const courseOutlineStatus = useSelector(getCourseOutlineStatus); const sequenceStatus = useSelector(getSequenceStatus); const activeSequenceId = useSelector(getSequenceId); - const { sections = {}, sequences = {}, units = {} } = useSelector(getCourseOutline); + const { + sections = {}, + sequences = {}, + units = {}, + } = useSelector(getCourseOutline); const { courseId } = useParams(); const course = useModel('coursewareMeta', courseId); - const { - unitId, - currentSidebar, - toggleSidebar, - shouldDisplayFullScreen, - } = useContext(SidebarContext); - - // Course outline state is now fully controlled by SidebarContextProvider - // This component only renders when currentSidebar === 'COURSE_OUTLINE' - const [isOpen, setIsOpen] = useState(true); - const { entranceExamEnabled, entranceExamPassed, } = course.entranceExamData || {}; const isActiveEntranceExam = entranceExamEnabled && !entranceExamPassed; - const collapseSidebar = () => { - toggleSidebar(null); - setOutlineSidebarCollapsed(true); - }; - - const handleToggleCollapse = () => { - if (currentSidebar === ID) { - collapseSidebar(); - } else { - toggleSidebar(ID); - setOutlineSidebarCollapsed(false); - } - }; - - const handleUnitClick = ({ sequenceId, activeUnitId, id }) => { + const handleUnitClick = ({ + sequenceId, + activeUnitId, + id, + }) => { const logEvent = (eventName, widgetPlacement) => { const findSequenceByUnitId = () => Object.values(sequences).find(seq => seq.unitIds.includes(activeUnitId)); const activeSequence = findSequenceByUnitId(activeUnitId); @@ -91,10 +73,64 @@ export const useCourseOutlineSidebar = () => { logEvent('edx.ui.lms.sequence.tab_selected', 'left'); dispatch(checkBlockCompletion(courseId, sequenceId, activeUnitId)); + }; + + // Load course outline structure when needed + useEffect(() => { + if (courseOutlineStatus !== LOADED || courseOutlineShouldUpdate) { + dispatch(getCourseOutlineStructure(courseId)); + } + }, [courseId, courseOutlineShouldUpdate]); + + return { + isEnabledCompletionTracking, + isActiveEntranceExam, + courseOutlineStatus, + activeSequenceId, + sections, + sequences, + units, + handleUnitClick, + sequenceStatus, + }; +}; - // Hide the sidebar after selecting a unit on a mobile device. - if (shouldDisplayFullScreen) { - handleToggleCollapse(); +export const useCourseOutlineSidebar = () => { + const dispatch = useDispatch(); + const courseOutlineShouldUpdate = useSelector(getCourseOutlineShouldUpdate); + const courseOutlineStatus = useSelector(getCourseOutlineStatus); + + const { courseId } = useParams(); + const course = useModel('coursewareMeta', courseId); + + const { + unitId, + currentSidebar, + toggleSidebar, + shouldDisplayFullScreen, + } = useContext(SidebarContext); + + // Course outline state is now fully controlled by SidebarContextProvider + // This component only renders when currentSidebar === 'COURSE_OUTLINE' + const [isOpen, setIsOpen] = useState(true); + + const { + entranceExamEnabled, + entranceExamPassed, + } = course.entranceExamData || {}; + const isActiveEntranceExam = entranceExamEnabled && !entranceExamPassed; + + const collapseSidebar = () => { + toggleSidebar(null); + setOutlineSidebarCollapsed(true); + }; + + const handleToggleCollapse = () => { + if (currentSidebar === ID) { + collapseSidebar(); + } else { + toggleSidebar(ID); + setOutlineSidebarCollapsed(false); } }; @@ -121,21 +157,12 @@ export const useCourseOutlineSidebar = () => { }, [currentSidebar]); return { - courseId, + isActiveEntranceExam, unitId, currentSidebar, shouldDisplayFullScreen, - isEnabledCompletionTracking, isOpen, setIsOpen, handleToggleCollapse, - isActiveEntranceExam, - courseOutlineStatus, - activeSequenceId, - sections, - sequences, - units, - handleUnitClick, - sequenceStatus, }; }; From 6624ddc3696133b437ea9cbe9c3860749d23a5d8 Mon Sep 17 00:00:00 2001 From: "kshitij.sobti" Date: Wed, 29 Apr 2026 01:05:47 +0530 Subject: [PATCH 3/6] feat: Add new slots for customizing course outline section and sequence completion icons Introduces `CourseOutlineSidebarSectionCompletionIconSlot` and `CourseOutlineSidebarSequenceCompletionIconSlot` to enable customization, modification, or replacement of completion icons in the course outline. Updated components to integrate with these new slots. --- ...ourseOutlineTray.jsx => CourseOutline.tsx} | 74 ++++++++---------- .../course-outline/CourseOutlineTray.test.jsx | 6 +- .../course-outline/CourseOutlineTray.tsx | 20 +++++ ...nIcon.test.jsx => CompletionIcon.test.tsx} | 0 ...{CompletionIcon.jsx => CompletionIcon.tsx} | 19 +++-- .../components/SidebarSection.jsx | 10 ++- .../components/SidebarSequence.jsx | 10 ++- .../README.md | 48 ++++++++++++ ...course-outline-section-completion-icon.png | Bin 0 -> 71573 bytes .../index.tsx | 20 +++++ .../README.md | 48 ++++++++++++ ...ourse-outline-sequence-completion-icon.png | Bin 0 -> 55662 bytes .../index.tsx | 19 +++++ 13 files changed, 217 insertions(+), 57 deletions(-) rename src/courseware/course/sidebar/sidebars/course-outline/{CourseOutlineTray.jsx => CourseOutline.tsx} (73%) create mode 100644 src/courseware/course/sidebar/sidebars/course-outline/CourseOutlineTray.tsx rename src/courseware/course/sidebar/sidebars/course-outline/components/{CompletionIcon.test.jsx => CompletionIcon.test.tsx} (100%) rename src/courseware/course/sidebar/sidebars/course-outline/components/{CompletionIcon.jsx => CompletionIcon.tsx} (70%) create mode 100644 src/plugin-slots/CourseOutlineSidebarSectionCompletionIconSlot/README.md create mode 100644 src/plugin-slots/CourseOutlineSidebarSectionCompletionIconSlot/course-outline-section-completion-icon.png create mode 100644 src/plugin-slots/CourseOutlineSidebarSectionCompletionIconSlot/index.tsx create mode 100644 src/plugin-slots/CourseOutlineSidebarSequenceCompletionIconSlot/README.md create mode 100644 src/plugin-slots/CourseOutlineSidebarSequenceCompletionIconSlot/course-outline-sequence-completion-icon.png create mode 100644 src/plugin-slots/CourseOutlineSidebarSequenceCompletionIconSlot/index.tsx diff --git a/src/courseware/course/sidebar/sidebars/course-outline/CourseOutlineTray.jsx b/src/courseware/course/sidebar/sidebars/course-outline/CourseOutline.tsx similarity index 73% rename from src/courseware/course/sidebar/sidebars/course-outline/CourseOutlineTray.jsx rename to src/courseware/course/sidebar/sidebars/course-outline/CourseOutline.tsx index 2609f48f3e..33ced87281 100644 --- a/src/courseware/course/sidebar/sidebars/course-outline/CourseOutlineTray.jsx +++ b/src/courseware/course/sidebar/sidebars/course-outline/CourseOutline.tsx @@ -1,26 +1,39 @@ -import { useState } from 'react'; -import classNames from 'classnames'; -import { Button, useToggle, IconButton } from '@openedx/paragon'; import { useIntl } from '@edx/frontend-platform/i18n'; +import { Button, IconButton, useToggle } from '@openedx/paragon'; +import { LOADING } from '@src/constants'; import { MenuOpen as MenuOpenIcon, ChevronLeft as ChevronLeftIcon, } from '@openedx/paragon/icons'; - -import { LOADING } from '@src/constants'; +import { + useCourseOutlineData, +} from '@src/courseware/course/sidebar/sidebars/course-outline/hooks'; import PageLoading from '@src/generic/PageLoading'; +import classNames from 'classnames'; +import { useState } from 'react'; import { useParams } from 'react-router-dom'; -import SidebarSection from './components/SidebarSection'; import SidebarSequence from './components/SidebarSequence'; -import { ID } from './constants'; -import { useCourseOutlineData, useCourseOutlineSidebar } from './hooks'; +import SidebarSection from './components/SidebarSection'; import messages from './messages'; -export const CourseOutline = ({ shouldDisplayFullScreen = false, onToggleCollapse = null }) => { +interface CourseOutlineProps { + shouldDisplayFullScreen?: boolean; + onToggleCollapse?: () => void; +} + +interface CoursePageParams extends Record { + courseId: string; + unitId: string; +} + +export const CourseOutline = ({ + shouldDisplayFullScreen = false, + onToggleCollapse, +}: CourseOutlineProps) => { const intl = useIntl(); - const [selectedSection, setSelectedSection] = useState(null); + const [selectedSection, setSelectedSection] = useState(null); const [isDisplaySequenceLevel, setDisplaySequenceLevel, setDisplaySectionLevel] = useToggle(true); - const { unitId, courseId } = useParams(); + const { unitId, courseId } = useParams(); const { courseOutlineStatus, activeSequenceId, @@ -30,19 +43,19 @@ export const CourseOutline = ({ shouldDisplayFullScreen = false, onToggleCollaps } = useCourseOutlineData(); const resolvedSectionId = selectedSection - || Object.keys(sections).find( - (sectionId) => sections[sectionId].sequenceIds.includes(activeSequenceId), - ); + || Object.keys(sections).find( + (sectionId):boolean => sections[sectionId].sequenceIds.includes(activeSequenceId), + )!; const sectionsIds = Object.keys(sections); - const sequenceIds = sections[resolvedSectionId]?.sequenceIds || []; - const backButtonTitle = sections[resolvedSectionId]?.title; + const sequenceIds: string[] = sections[resolvedSectionId]?.sequenceIds || []; + const backButtonTitle: string | undefined = sections[resolvedSectionId]?.title; const handleBackToSectionLevel = () => { setDisplaySectionLevel(); setSelectedSection(null); }; - const handleSelectSection = (id) => { + const handleSelectSection = (id:string) => { setDisplaySequenceLevel(); setSelectedSection(id); }; @@ -62,8 +75,7 @@ export const CourseOutline = ({ shouldDisplayFullScreen = false, onToggleCollaps {intl.formatMessage(messages.courseOutlineTitle)} )} - {onToggleCollapse - && ( + {onToggleCollapse && ( {isDisplaySequenceLevel - ? sequenceIds.map((sequenceId) => ( + ? sequenceIds.map((sequenceId: string) => ( )) : sectionsIds.map((sectionId) => ( @@ -125,20 +136,3 @@ export const CourseOutline = ({ shouldDisplayFullScreen = false, onToggleCollaps
  • ); }; - -const CourseOutlineTray = () => { - const { - currentSidebar, - shouldDisplayFullScreen, - handleToggleCollapse, - } = useCourseOutlineSidebar(); - - if (currentSidebar !== ID) { - return null; - } - return ; -}; - -CourseOutlineTray.ID = ID; - -export default CourseOutlineTray; diff --git a/src/courseware/course/sidebar/sidebars/course-outline/CourseOutlineTray.test.jsx b/src/courseware/course/sidebar/sidebars/course-outline/CourseOutlineTray.test.jsx index aba41c8291..653a9bc8d5 100644 --- a/src/courseware/course/sidebar/sidebars/course-outline/CourseOutlineTray.test.jsx +++ b/src/courseware/course/sidebar/sidebars/course-outline/CourseOutlineTray.test.jsx @@ -74,7 +74,7 @@ describe('', () => { await expect(screen.queryByText(messages.loading.defaultMessage)).not.toBeInTheDocument(); expect(screen.getByRole('button', { name: section.title })).toBeInTheDocument(); expect(screen.getByRole('button', { name: messages.toggleCourseOutlineTrigger.defaultMessage })).toBeInTheDocument(); - expect(screen.getByRole('button', { name: `${sequence.title} , ${courseOutlineMessages.incompleteAssignment.defaultMessage}` })).toBeInTheDocument(); + expect(screen.getByRole('button', { name: new RegExp(`${sequence.title} , ${courseOutlineMessages.incompleteAssignment.defaultMessage}`) })).toBeInTheDocument(); expect(screen.getByText(unit.title)).toBeInTheDocument(); }); @@ -115,13 +115,13 @@ describe('', () => { const sidebarBackBtn = screen.queryByRole('button', { name: section.title }); expect(sidebarBackBtn).toBeInTheDocument(); - expect(screen.getByRole('button', { name: `${sequence.title} , ${courseOutlineMessages.incompleteAssignment.defaultMessage}` })).toBeInTheDocument(); + expect(screen.getByRole('button', { name: new RegExp(`${sequence.title} , ${courseOutlineMessages.incompleteAssignment.defaultMessage}`) })).toBeInTheDocument(); await user.click(sidebarBackBtn); expect(sidebarBackBtn).not.toBeInTheDocument(); expect(screen.queryByText(messages.courseOutlineTitle.defaultMessage)).toBeInTheDocument(); - await user.click(screen.getByRole('button', { name: `${section.title} , ${courseOutlineMessages.incompleteSection.defaultMessage}` })); + await user.click(screen.getByRole('button', { name: new RegExp(`${section.title} , ${courseOutlineMessages.incompleteSection.defaultMessage}`) })); expect(screen.queryByRole('button', { name: section.title })).toBeInTheDocument(); }); }); diff --git a/src/courseware/course/sidebar/sidebars/course-outline/CourseOutlineTray.tsx b/src/courseware/course/sidebar/sidebars/course-outline/CourseOutlineTray.tsx new file mode 100644 index 0000000000..88f30fcfbe --- /dev/null +++ b/src/courseware/course/sidebar/sidebars/course-outline/CourseOutlineTray.tsx @@ -0,0 +1,20 @@ +import { CourseOutline } from './CourseOutline'; +import { ID } from './constants'; +import { useCourseOutlineSidebar } from './hooks'; + +const CourseOutlineTray = () => { + const { + currentSidebar, + shouldDisplayFullScreen, + handleToggleCollapse, + } = useCourseOutlineSidebar(); + + if (currentSidebar !== ID) { + return null; + } + return ; +}; + +CourseOutlineTray.ID = ID; + +export default CourseOutlineTray; diff --git a/src/courseware/course/sidebar/sidebars/course-outline/components/CompletionIcon.test.jsx b/src/courseware/course/sidebar/sidebars/course-outline/components/CompletionIcon.test.tsx similarity index 100% rename from src/courseware/course/sidebar/sidebars/course-outline/components/CompletionIcon.test.jsx rename to src/courseware/course/sidebar/sidebars/course-outline/components/CompletionIcon.test.tsx diff --git a/src/courseware/course/sidebar/sidebars/course-outline/components/CompletionIcon.jsx b/src/courseware/course/sidebar/sidebars/course-outline/components/CompletionIcon.tsx similarity index 70% rename from src/courseware/course/sidebar/sidebars/course-outline/components/CompletionIcon.jsx rename to src/courseware/course/sidebar/sidebars/course-outline/components/CompletionIcon.tsx index 9b3a855db8..a3fa67f5d7 100644 --- a/src/courseware/course/sidebar/sidebars/course-outline/components/CompletionIcon.jsx +++ b/src/courseware/course/sidebar/sidebars/course-outline/components/CompletionIcon.tsx @@ -1,4 +1,3 @@ -import PropTypes from 'prop-types'; import { CheckCircle as CheckCircleIcon, LmsCompletionSolid as LmsCompletionSolidIcon, @@ -6,7 +5,15 @@ import { import { DashedCircleIcon } from '../icons'; -const CompletionIcon = ({ completionStat: { completed = 0, total = 0 }, enabled }) => { +export interface CompletionIconProps { + completionStat: { + completed: number; + total: number; + }; + enabled: boolean; +} + +export const CompletionIcon = ({ completionStat: { completed = 0, total = 0 }, enabled }: CompletionIconProps) => { const percentage = total !== 0 ? Math.min((completed / total) * 100, 100) : 0; const remainder = 100 - percentage; @@ -20,12 +27,4 @@ const CompletionIcon = ({ completionStat: { completed = 0, total = 0 }, enabled } }; -CompletionIcon.propTypes = { - completionStat: PropTypes.shape({ - completed: PropTypes.number, - total: PropTypes.number, - }).isRequired, - enabled: PropTypes.bool.isRequired, -}; - export default CompletionIcon; diff --git a/src/courseware/course/sidebar/sidebars/course-outline/components/SidebarSection.jsx b/src/courseware/course/sidebar/sidebars/course-outline/components/SidebarSection.jsx index 246201ff37..bfd2aa5d18 100644 --- a/src/courseware/course/sidebar/sidebars/course-outline/components/SidebarSection.jsx +++ b/src/courseware/course/sidebar/sidebars/course-outline/components/SidebarSection.jsx @@ -1,3 +1,6 @@ +import { + CourseOverviewSectionCompletionIconSlot, +} from '@src/plugin-slots/CourseOutlineSidebarSectionCompletionIconSlot'; import PropTypes from 'prop-types'; import classNames from 'classnames'; import { useIntl } from '@edx/frontend-platform/i18n'; @@ -5,7 +8,6 @@ import { Button, Icon } from '@openedx/paragon'; import { ChevronRight as ChevronRightIcon } from '@openedx/paragon/icons'; import courseOutlineMessages from '@src/course-home/outline-tab/messages'; -import CompletionIcon from './CompletionIcon'; import { useCourseOutlineData } from '../hooks'; const SidebarSection = ({ section, handleSelectSection }) => { @@ -24,7 +26,11 @@ const SidebarSection = ({ section, handleSelectSection }) => { const sectionTitle = ( <>
    - +
    {title} diff --git a/src/courseware/course/sidebar/sidebars/course-outline/components/SidebarSequence.jsx b/src/courseware/course/sidebar/sidebars/course-outline/components/SidebarSequence.jsx index e612a93c2d..458b05ed0e 100644 --- a/src/courseware/course/sidebar/sidebars/course-outline/components/SidebarSequence.jsx +++ b/src/courseware/course/sidebar/sidebars/course-outline/components/SidebarSequence.jsx @@ -1,3 +1,6 @@ +import { + CourseOverviewSequenceCompletionIconSlot, +} from '@src/plugin-slots/CourseOutlineSidebarSequenceCompletionIconSlot'; import { useState } from 'react'; import classNames from 'classnames'; import PropTypes from 'prop-types'; @@ -6,7 +9,6 @@ import { Collapsible } from '@openedx/paragon'; import courseOutlineMessages from '@src/course-home/outline-tab/messages'; import { useCourseOutlineData } from '../hooks'; -import CompletionIcon from './CompletionIcon'; import SidebarUnit from './SidebarUnit'; import { UNIT_ICON_TYPES } from './UnitIcon'; @@ -34,7 +36,11 @@ const SidebarSequence = ({ const sectionTitle = ( <>
    - +
    {title} diff --git a/src/plugin-slots/CourseOutlineSidebarSectionCompletionIconSlot/README.md b/src/plugin-slots/CourseOutlineSidebarSectionCompletionIconSlot/README.md new file mode 100644 index 0000000000..28fcb7a2c2 --- /dev/null +++ b/src/plugin-slots/CourseOutlineSidebarSectionCompletionIconSlot/README.md @@ -0,0 +1,48 @@ +# Course Outline Sidebar Section Completion Icon Slot + +### Slot ID: `org.openedx.frontend.learning.course_outline_sidebar_section_completion_icon.v1` + +## Description + +This slot is used to replace/modify/hide the completion icon for sections in the course outline sidebar. + +### Props: +* `completionStat: { completed, total }`: Object containing the completion status of the section +* `enabled`: Boolean indicating if completion tracking is enabled for the section + +## Example + +### Replaced with a custom component +![custom progress display for section](./course-outline-section-completion-icon.png) + +The following `env.config.jsx` will replace the course outline sidebar section completion icon with a custom component. + +```js +import { DIRECT_PLUGIN, PLUGIN_OPERATIONS } from '@openedx/frontend-plugin-framework'; +import { Bubble } from '@openedx/paragon'; + + +const config = { + pluginSlots: { + 'org.openedx.frontend.learning.course_outline_sidebar_section_completion_icon.v1': { + keepDefault: false, + plugins: [ + { + op: PLUGIN_OPERATIONS.Insert, + widget: { + id: 'custom_icon', + type: DIRECT_PLUGIN, + RenderWidget: ({completionStat, enabled}) => ( + + {completionStat.completed}/{completionStat.total} + + ), + }, + }, + ] + } + }, +} + +export default config; +``` diff --git a/src/plugin-slots/CourseOutlineSidebarSectionCompletionIconSlot/course-outline-section-completion-icon.png b/src/plugin-slots/CourseOutlineSidebarSectionCompletionIconSlot/course-outline-section-completion-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5e32bd495c37ba9291364f5eae87111c4ad34e32 GIT binary patch literal 71573 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 M(#lem67K{5A3FBqcK`qY literal 0 HcmV?d00001 diff --git a/src/plugin-slots/CourseOutlineSidebarSectionCompletionIconSlot/index.tsx b/src/plugin-slots/CourseOutlineSidebarSectionCompletionIconSlot/index.tsx new file mode 100644 index 0000000000..b1d9419657 --- /dev/null +++ b/src/plugin-slots/CourseOutlineSidebarSectionCompletionIconSlot/index.tsx @@ -0,0 +1,20 @@ +import { + CompletionIcon, + type CompletionIconProps, +} from '@src/courseware/course/sidebar/sidebars/course-outline/components/CompletionIcon'; +import { PluginSlot } from '@openedx/frontend-plugin-framework'; + +import React from 'react'; + +interface Props extends CompletionIconProps { + active: boolean; +} + +export const CourseOverviewSectionCompletionIconSlot = ({ completionStat, enabled, active }: Props) => ( + + + +); diff --git a/src/plugin-slots/CourseOutlineSidebarSequenceCompletionIconSlot/README.md b/src/plugin-slots/CourseOutlineSidebarSequenceCompletionIconSlot/README.md new file mode 100644 index 0000000000..556d6d0d1e --- /dev/null +++ b/src/plugin-slots/CourseOutlineSidebarSequenceCompletionIconSlot/README.md @@ -0,0 +1,48 @@ +# Course Outline Sidebar Sequence Completion Icon Slot + +### Slot ID: `org.openedx.frontend.learning.course_outline_sidebar_sequence_completion_icon.v1` + +## Description + +This slot is used to replace/modify/hide the completion icon for sequences in the course outline sidebar. + +### Props: +* `completionStat: { completed, total }`: Object containing the completion status of the sequence +* `enabled`: Boolean indicating if completion tracking is enabled for the sequence + +## Example + +### Replaced with a custom component +![custom progress display for sequence](./course-outline-sequence-completion-icon.png) + +The following `env.config.jsx` will replace the course outline sidebar sequence completion icon with a custom component. + +```js +import { DIRECT_PLUGIN, PLUGIN_OPERATIONS } from '@openedx/frontend-plugin-framework'; +import { Bubble } from '@openedx/paragon'; + + +const config = { + pluginSlots: { + 'org.openedx.frontend.learning.course_outline_sidebar_sequence_completion_icon.v1': { + keepDefault: false, + plugins: [ + { + op: PLUGIN_OPERATIONS.Insert, + widget: { + id: 'custom_icon', + type: DIRECT_PLUGIN, + RenderWidget: ({completionStat, enabled}) => ( + + {completionStat.completed}/{completionStat.total} + + ), + }, + }, + ] + } + }, +} + +export default config; +``` diff --git a/src/plugin-slots/CourseOutlineSidebarSequenceCompletionIconSlot/course-outline-sequence-completion-icon.png b/src/plugin-slots/CourseOutlineSidebarSequenceCompletionIconSlot/course-outline-sequence-completion-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3363ab1de1fcb116ecc676268080116c22c816e0 GIT binary patch literal 55662 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

    iiuOI`LzEc8I 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

    T! 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 literal 0 HcmV?d00001 diff --git a/src/plugin-slots/CourseOutlineSidebarSequenceCompletionIconSlot/index.tsx b/src/plugin-slots/CourseOutlineSidebarSequenceCompletionIconSlot/index.tsx new file mode 100644 index 0000000000..0740d74f1e --- /dev/null +++ b/src/plugin-slots/CourseOutlineSidebarSequenceCompletionIconSlot/index.tsx @@ -0,0 +1,19 @@ +import { + CompletionIcon, + type CompletionIconProps, +} from '@src/courseware/course/sidebar/sidebars/course-outline/components/CompletionIcon'; +import { PluginSlot } from '@openedx/frontend-plugin-framework'; + +import React from 'react'; + +interface Props extends CompletionIconProps { + active: boolean; +} +export const CourseOverviewSequenceCompletionIconSlot = ({ completionStat, enabled, active }: Props) => ( + + + +); From b0b0097468b4699107ff03745d88b1207b699ead Mon Sep 17 00:00:00 2001 From: "kshitij.sobti" Date: Wed, 29 Apr 2026 12:03:35 +0530 Subject: [PATCH 4/6] feat: Add slot for customizing course outline sidebar unit icons Introduces `CourseOutlineSidebarUnitIconSlot` to enable customization, modification, or replacement of unit icons in the course outline sidebar. Refactors `UnitIcon` to support TypeScript and updates related components to integrate with the new slot. --- .../course-outline/components/SidebarUnit.jsx | 5 ++- .../{UnitIcon.test.jsx => UnitIcon.test.tsx} | 4 +- .../components/{UnitIcon.jsx => UnitIcon.tsx} | 40 +++++++++++------ .../README.md | 42 ++++++++++++++++++ .../course-outline-unit-icon-replaced.png | Bin 0 -> 52616 bytes .../index.tsx | 28 ++++++++++++ 6 files changed, 101 insertions(+), 18 deletions(-) rename src/courseware/course/sidebar/sidebars/course-outline/components/{UnitIcon.test.jsx => UnitIcon.test.tsx} (83%) rename src/courseware/course/sidebar/sidebars/course-outline/components/{UnitIcon.jsx => UnitIcon.tsx} (56%) create mode 100644 src/plugin-slots/CourseOutlineSidebarUnitIconSlot/README.md create mode 100644 src/plugin-slots/CourseOutlineSidebarUnitIconSlot/course-outline-unit-icon-replaced.png create mode 100644 src/plugin-slots/CourseOutlineSidebarUnitIconSlot/index.tsx diff --git a/src/courseware/course/sidebar/sidebars/course-outline/components/SidebarUnit.jsx b/src/courseware/course/sidebar/sidebars/course-outline/components/SidebarUnit.jsx index e88408319b..9e3a739f2e 100644 --- a/src/courseware/course/sidebar/sidebars/course-outline/components/SidebarUnit.jsx +++ b/src/courseware/course/sidebar/sidebars/course-outline/components/SidebarUnit.jsx @@ -1,9 +1,10 @@ +import { CourseOutlineSidebarUnitIconSlot } from '@src/plugin-slots/CourseOutlineSidebarUnitIconSlot'; import PropTypes from 'prop-types'; import classNames from 'classnames'; import { useIntl } from '@edx/frontend-platform/i18n'; import messages from '../messages'; -import UnitIcon, { UNIT_ICON_TYPES } from './UnitIcon'; +import { UNIT_ICON_TYPES } from './UnitIcon'; import UnitLinkWrapper from './UnitLinkWrapper'; const SidebarUnit = ({ @@ -38,7 +39,7 @@ const SidebarUnit = ({ }} >

    - +
    diff --git a/src/courseware/course/sidebar/sidebars/course-outline/components/UnitIcon.test.jsx b/src/courseware/course/sidebar/sidebars/course-outline/components/UnitIcon.test.tsx similarity index 83% rename from src/courseware/course/sidebar/sidebars/course-outline/components/UnitIcon.test.jsx rename to src/courseware/course/sidebar/sidebars/course-outline/components/UnitIcon.test.tsx index e5f70d1286..7182f47927 100644 --- a/src/courseware/course/sidebar/sidebars/course-outline/components/UnitIcon.test.jsx +++ b/src/courseware/course/sidebar/sidebars/course-outline/components/UnitIcon.test.tsx @@ -1,9 +1,9 @@ import { render } from '@testing-library/react'; -import UnitIcon, { UNIT_ICON_TYPES } from './UnitIcon'; +import UnitIcon, { UNIT_ICON_TYPES, UnitIconType } from './UnitIcon'; describe('', () => { - Object.keys(UNIT_ICON_TYPES).forEach((type) => { + Object.keys(UNIT_ICON_TYPES).forEach((type:UnitIconType) => { it(`renders default ${type} icon correctly`, () => { const { container } = render(); const icon = container.querySelector('svg'); diff --git a/src/courseware/course/sidebar/sidebars/course-outline/components/UnitIcon.jsx b/src/courseware/course/sidebar/sidebars/course-outline/components/UnitIcon.tsx similarity index 56% rename from src/courseware/course/sidebar/sidebars/course-outline/components/UnitIcon.jsx rename to src/courseware/course/sidebar/sidebars/course-outline/components/UnitIcon.tsx index 47992f215a..78672b9a63 100644 --- a/src/courseware/course/sidebar/sidebars/course-outline/components/UnitIcon.jsx +++ b/src/courseware/course/sidebar/sidebars/course-outline/components/UnitIcon.tsx @@ -1,4 +1,3 @@ -import PropTypes from 'prop-types'; import classNames from 'classnames'; import { Locked as LockedIcon, @@ -10,6 +9,7 @@ import { LmsVideocam as LmsVideocamIcon, LmsVideocamComplete as LmsVideocamCompleteIcon, } from '@openedx/paragon/icons'; +import React, { SVGProps } from 'react'; export const UNIT_ICON_TYPES = { video: 'video', @@ -17,10 +17,30 @@ export const UNIT_ICON_TYPES = { vertical: 'vertical', lock: 'lock', other: 'other', -}; +} as const; + +export type UnitIconType = typeof UNIT_ICON_TYPES[keyof typeof UNIT_ICON_TYPES]; + +export interface UnitIconProps extends SVGProps { + type: UnitIconType; + isCompleted: boolean; +} + +type IconType = React.ComponentType>; + +interface IconPair { + default: IconType; + complete: IconType; +} -const UnitIcon = ({ type, isCompleted, ...props }) => { - const iconMap = { +type IconMapVal = IconType | IconPair; + +function isIconPair(val: IconMapVal): val is IconPair { + return typeof val === 'object' && 'default' in val && 'complete' in val; +} + +const UnitIcon = ({ type, isCompleted, ...props }: UnitIconProps) => { + const iconMap: Record = { [UNIT_ICON_TYPES.video]: { default: LmsVideocamIcon, complete: LmsVideocamCompleteIcon, @@ -37,20 +57,12 @@ const UnitIcon = ({ type, isCompleted, ...props }) => { }, }; - let Icon = iconMap[type || UNIT_ICON_TYPES.other]; - - if (typeof Icon === 'object') { - Icon = iconMap[type || UNIT_ICON_TYPES.other]?.[isCompleted ? 'complete' : 'default']; - } + const iconEntry = iconMap[type || UNIT_ICON_TYPES.other]; + const Icon: IconType = isIconPair(iconEntry) ? iconEntry[isCompleted ? 'complete' : 'default'] : iconEntry; return ( ); }; -UnitIcon.propTypes = { - type: PropTypes.oneOf(Object.keys(UNIT_ICON_TYPES)).isRequired, - isCompleted: PropTypes.bool.isRequired, -}; - export default UnitIcon; diff --git a/src/plugin-slots/CourseOutlineSidebarUnitIconSlot/README.md b/src/plugin-slots/CourseOutlineSidebarUnitIconSlot/README.md new file mode 100644 index 0000000000..45ff57d67e --- /dev/null +++ b/src/plugin-slots/CourseOutlineSidebarUnitIconSlot/README.md @@ -0,0 +1,42 @@ +# Course Outline Sidebar Unit Icon Slot + +### Slot ID: `org.openedx.frontend.learning.course_outline_sidebar_unit_icon.v1` + +### Props: +* `type`: The type of the unit. +* `isCompleted`: Whether the unit is completed. + +## Description + +This slot is used to replace/modify/hide the unit icon in the course outline sidebar. + +## Example + +### Replaced Unit Icon +![Replaced Unit Icon](./course-outline-unit-icon-replaced.png) + +The following `env.config.jsx` will replace the unit icon with a custom icon. + +```jsx +import { DIRECT_PLUGIN, PLUGIN_OPERATIONS } from '@openedx/frontend-plugin-framework'; + +const config = { + pluginSlots: { + 'org.openedx.frontend.learning.course_outline_sidebar_unit_icon.v1': { + keepDefault: true, + plugins: [ + { + op: PLUGIN_OPERATIONS.Insert, + widget: { + id: 'custom_unit_icon', + type: DIRECT_PLUGIN, + RenderWidget: ({isCompleted}) => (isCompleted ? '🗹' : '☐'), + }, + }, + ], + }, + }, +}; + +export default config; +``` diff --git a/src/plugin-slots/CourseOutlineSidebarUnitIconSlot/course-outline-unit-icon-replaced.png b/src/plugin-slots/CourseOutlineSidebarUnitIconSlot/course-outline-unit-icon-replaced.png new file mode 100644 index 0000000000000000000000000000000000000000..afcf03aea2a966bbd4fa3909be3a400ba2b3672b GIT binary patch literal 52616 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 A4gdfE literal 0 HcmV?d00001 diff --git a/src/plugin-slots/CourseOutlineSidebarUnitIconSlot/index.tsx b/src/plugin-slots/CourseOutlineSidebarUnitIconSlot/index.tsx new file mode 100644 index 0000000000..4ea731b875 --- /dev/null +++ b/src/plugin-slots/CourseOutlineSidebarUnitIconSlot/index.tsx @@ -0,0 +1,28 @@ +import { PluginSlot } from '@openedx/frontend-plugin-framework'; +import UnitIcon, { + UNIT_ICON_TYPES, + type UnitIconType, + type UnitIconProps, +} from '@src/courseware/course/sidebar/sidebars/course-outline/components/UnitIcon'; +import React from 'react'; + +export interface Props extends UnitIconProps { + active: boolean; +} +export { + UNIT_ICON_TYPES, + type UnitIconType, +}; + +export const CourseOutlineSidebarUnitIconSlot = ({ + type, isCompleted, active, ...props +}: Props) => ( + + + +); From 801197c6a4aaf63473827807f9142a2c2b905583 Mon Sep 17 00:00:00 2001 From: "kshitij.sobti" Date: Fri, 1 May 2026 19:32:19 +0530 Subject: [PATCH 5/6] refactor: Enhance course outline sidebar with CSS variables for styling customization Replaces hardcoded styles with CSS variables to enable flexible theming and dynamic styling of the course sidebar components. Adjusts related JSX and SCSS for consistency. --- .../sidebars/course-outline/CourseOutline.tsx | 8 +++---- .../course-outline/CourseOutlineTray.scss | 23 +++++++++++++++---- .../components/SidebarSection.jsx | 7 ++---- 3 files changed, 25 insertions(+), 13 deletions(-) diff --git a/src/courseware/course/sidebar/sidebars/course-outline/CourseOutline.tsx b/src/courseware/course/sidebar/sidebars/course-outline/CourseOutline.tsx index 33ced87281..c6b156fe40 100644 --- a/src/courseware/course/sidebar/sidebars/course-outline/CourseOutline.tsx +++ b/src/courseware/course/sidebar/sidebars/course-outline/CourseOutline.tsx @@ -60,25 +60,25 @@ export const CourseOutline = ({ setSelectedSection(id); }; const sidebarHeading = ( -
    +
    {isDisplaySequenceLevel && backButtonTitle ? ( ) : ( - + {intl.formatMessage(messages.courseOutlineTitle)} )} {onToggleCollapse && ( diff --git a/src/courseware/course/sidebar/sidebars/course-outline/CourseOutlineTray.scss b/src/courseware/course/sidebar/sidebars/course-outline/CourseOutlineTray.scss index 82c68f4452..ed06a6424a 100644 --- a/src/courseware/course/sidebar/sidebars/course-outline/CourseOutlineTray.scss +++ b/src/courseware/course/sidebar/sidebars/course-outline/CourseOutlineTray.scss @@ -13,7 +13,10 @@ } .outline-sidebar-heading-wrapper { - border: 1px solid var(--pgn-color-light-700); + border-width: var(--learning-sidebar-outline-heading-wrapper-border-width, 1px); + border-style: solid; + border-color: var(--learning-sidebar-outline-heading-wrapper-border-color, var(--pgn-color-light-700)); + background-color: var(--learning-sidebar-outline-heading-wrapper-bg-color, var(--pgn-color-light-200)); &.sticky { position: sticky; @@ -24,12 +27,18 @@ .outline-sidebar-heading { font-weight: var(--pgn-typography-font-weight-bold); + color: var(--learning-sidebar-outline-heading-text-color, var(--pgn-color-dark-500)); } } .course-sidebar-section { - background: var(--pgn-color-white); - border: 1px solid var(--pgn-color-light-700); + background: var(--learning-sidebar-outline-section-bg-color, var(--pgn-color-white)); + + border-width: var(--learning-sidebar-outline-section-border-width, 1px); + border-style: solid; + border-color: var(--learning-sidebar-outline-section-border-color, var(--pgn-color-light-700)); + + margin-bottom: var(--learning-sidebar-outline-section-margin-bottom, var(--pgn-spacing-spacer-2)); button { line-height: 1.75rem; @@ -38,11 +47,17 @@ &:focus::before { border-radius: 0; } + + padding: var(--learning-sidebar-outline-section-padding-y, var(--pgn-spacing-spacer-3-5)) var(--learning-sidebar-outline-section-padding-x, var(--pgn-spacing-spacer-4)); + } + &.active-section button { + background-color: var(--learning-sidebar-outline-section-active-bg-color, var(--pgn-color-light-100)); } } .outline-sidebar-toggle-btn { font-size: 1.5rem; + background-color: var(--learning-sidebar-outline-toggle-btn-bg-color, var(--pgn-color-light-200)); .collapsed & { transform: scale(-1, 1); @@ -78,7 +93,7 @@ } &:last-child .pgn_collapsible { - margin-bottom: 0px !important; + margin-bottom: 0 !important; } } diff --git a/src/courseware/course/sidebar/sidebars/course-outline/components/SidebarSection.jsx b/src/courseware/course/sidebar/sidebars/course-outline/components/SidebarSection.jsx index bfd2aa5d18..92881ffcc2 100644 --- a/src/courseware/course/sidebar/sidebars/course-outline/components/SidebarSection.jsx +++ b/src/courseware/course/sidebar/sidebars/course-outline/components/SidebarSection.jsx @@ -47,13 +47,10 @@ const SidebarSection = ({ section, handleSelectSection }) => { ); return ( -
  • +