diff --git a/src/courseware/course/sidebar/sidebars/course-outline/hooks.js b/src/courseware/course/sidebar/sidebars/course-outline/hooks.js index 71ed4bff63..1bdb115e0d 100644 --- a/src/courseware/course/sidebar/sidebars/course-outline/hooks.js +++ b/src/courseware/course/sidebar/sidebars/course-outline/hooks.js @@ -74,9 +74,17 @@ export const useCourseOutlineSidebar = () => { const handleUnitClick = ({ sequenceId, activeUnitId, id }) => { const logEvent = (eventName, widgetPlacement) => { - const findSequenceByUnitId = () => Object.values(sequences).find(seq => seq.unitIds.includes(activeUnitId)); + const findSequenceByUnitId = (searchUnitId) => { + if (!searchUnitId) { + return null; + } + return Object.values(sequences).find(seq => seq.unitIds.includes(searchUnitId)); + }; const activeSequence = findSequenceByUnitId(activeUnitId); const targetSequence = findSequenceByUnitId(id); + if (!activeSequence || !targetSequence) { + return; + } const payload = { id: activeUnitId, current_tab: activeSequence.unitIds.indexOf(activeUnitId) + 1, @@ -95,7 +103,9 @@ export const useCourseOutlineSidebar = () => { }; logEvent('edx.ui.lms.sequence.tab_selected', 'left'); - dispatch(checkBlockCompletion(courseId, sequenceId, activeUnitId)); + if (activeUnitId) { + dispatch(checkBlockCompletion(courseId, sequenceId, activeUnitId)); + } // Hide the sidebar after selecting a unit on a mobile device. if (shouldDisplayFullScreen) { diff --git a/src/courseware/data/thunks.js b/src/courseware/data/thunks.js index 15d36f7251..2bb76e4a9e 100644 --- a/src/courseware/data/thunks.js +++ b/src/courseware/data/thunks.js @@ -176,6 +176,10 @@ export function fetchSequence(sequenceId, isPreview) { export function checkBlockCompletion(courseId, sequenceId, unitId) { return async (dispatch, getState) => { + if (!unitId) { + return {}; + } + const { models } = getState(); if (models.units[unitId]?.complete) { return {}; // do nothing. Things don't get uncompleted after they are completed.