Skip to content

Commit b09bcbd

Browse files
farhaanbukhshbradenmacdonald
authored andcommitted
Revert PR #1519 "fix: only one in-course experience sidebar can be open..."
(and "fix: add test in CourseOutlineTray") This reverts commit 020e7fb and 038b05b
1 parent 4a925f9 commit b09bcbd

File tree

4 files changed

+24
-39
lines changed

4 files changed

+24
-39
lines changed

src/courseware/course/sidebar/sidebars/course-outline/CourseOutlineTray.jsx

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ import messages from './messages';
2626

2727
const CourseOutlineTray = ({ intl }) => {
2828
const [selectedSection, setSelectedSection] = useState(null);
29-
const [openSequenceId, setOpenSequenceId] = useState(null);
3029
const [isDisplaySequenceLevel, setDisplaySequenceLevel, setDisplaySectionLevel] = useToggle(true);
3130

3231
const dispatch = useDispatch();
@@ -63,10 +62,6 @@ const CourseOutlineTray = ({ intl }) => {
6362
setSelectedSection(id);
6463
};
6564

66-
const handleToggleSequence = (sequenceId) => {
67-
setOpenSequenceId((prevOpenSequenceId) => (prevOpenSequenceId === sequenceId ? null : sequenceId));
68-
};
69-
7065
const sidebarHeading = (
7166
<div className="outline-sidebar-heading-wrapper sticky d-flex justify-content-between align-self-start align-items-center bg-light-200 p-2.5 pl-4">
7267
{isDisplaySequenceLevel && backButtonTitle ? (
@@ -134,8 +129,7 @@ const CourseOutlineTray = ({ intl }) => {
134129
key={sequenceId}
135130
courseId={courseId}
136131
sequence={sequences[sequenceId]}
137-
isOpen={sequenceId === openSequenceId}
138-
onToggle={() => handleToggleSequence(sequenceId)}
132+
defaultOpen={sequenceId === activeSequenceId}
139133
activeUnitId={unitId}
140134
/>
141135
))

src/courseware/course/sidebar/sidebars/course-outline/CourseOutlineTray.test.jsx

Lines changed: 3 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ describe('<CourseOutlineTray />', () => {
1515
let store;
1616
let section = {};
1717
let sequence = {};
18+
let unit;
1819
let unitId;
1920
let courseId;
2021
let mockData;
@@ -31,6 +32,7 @@ describe('<CourseOutlineTray />', () => {
3132
const activeSectionId = Object.keys(state.courseware.courseOutline.sections)[0];
3233
section = state.courseware.courseOutline.sections[activeSectionId];
3334
[unitId] = sequence.unitIds;
35+
unit = state.courseware.courseOutline.units[unitId];
3436
}
3537

3638
mockData = {
@@ -82,6 +84,7 @@ describe('<CourseOutlineTray />', () => {
8284
expect(screen.getByRole('button', { name: section.title })).toBeInTheDocument();
8385
expect(screen.getByRole('button', { name: messages.toggleCourseOutlineTrigger.defaultMessage })).toBeInTheDocument();
8486
expect(screen.getByRole('button', { name: `${sequence.title} , ${courseOutlineMessages.incompleteAssignment.defaultMessage}` })).toBeInTheDocument();
87+
expect(screen.getByText(unit.title)).toBeInTheDocument();
8588
});
8689

8790
it('collapses sidebar correctly when toggle button is clicked', async () => {
@@ -99,30 +102,6 @@ describe('<CourseOutlineTray />', () => {
99102
expect(mockToggleSidebar).toHaveBeenCalledWith(null);
100103
});
101104

102-
it('toggles openSequenceId correctly when a sequence is clicked', async () => {
103-
const user = userEvent.setup();
104-
await initTestStore();
105-
renderWithProvider();
106-
const sequenceButton = screen.getByRole('button', { name: `${sequence.title} , ${courseOutlineMessages.incompleteAssignment.defaultMessage}` });
107-
expect(sequenceButton).toBeInTheDocument();
108-
await user.click(sequenceButton);
109-
expect(screen.getByRole('button', { name: `${sequence.title} , ${courseOutlineMessages.incompleteAssignment.defaultMessage}` })).toHaveAttribute('aria-expanded', 'true');
110-
await user.click(sequenceButton);
111-
expect(screen.getByRole('button', { name: `${sequence.title} , ${courseOutlineMessages.incompleteAssignment.defaultMessage}` })).toHaveAttribute('aria-expanded', 'false');
112-
});
113-
114-
it('updates setOpenSequenceId correctly when toggling sequences', async () => {
115-
const user = userEvent.setup();
116-
await initTestStore();
117-
renderWithProvider();
118-
const sequenceButton = screen.getByRole('button', { name: `${sequence.title} , ${courseOutlineMessages.incompleteAssignment.defaultMessage}` });
119-
expect(sequenceButton).toBeInTheDocument();
120-
await user.click(sequenceButton);
121-
expect(sequenceButton).toHaveAttribute('aria-expanded', 'true');
122-
await user.click(sequenceButton);
123-
expect(sequenceButton).toHaveAttribute('aria-expanded', 'false');
124-
});
125-
126105
it('navigates to section or sequence level correctly on click by back/section button', async () => {
127106
const user = userEvent.setup();
128107
await initTestStore();

src/courseware/course/sidebar/sidebars/course-outline/components/SidebarSequence.jsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { useState } from 'react';
12
import { useSelector } from 'react-redux';
23
import classNames from 'classnames';
34
import PropTypes from 'prop-types';
@@ -13,8 +14,7 @@ import { UNIT_ICON_TYPES } from './UnitIcon';
1314
const SidebarSequence = ({
1415
intl,
1516
courseId,
16-
isOpen,
17-
onToggle,
17+
defaultOpen,
1818
sequence,
1919
activeUnitId,
2020
}) => {
@@ -28,6 +28,7 @@ const SidebarSequence = ({
2828
completionStat,
2929
} = sequence;
3030

31+
const [open, setOpen] = useState(defaultOpen);
3132
const { units = {} } = useSelector(getCourseOutline);
3233
const activeSequenceId = useSelector(getSequenceId);
3334
const isActiveSequence = id === activeSequenceId;
@@ -52,11 +53,11 @@ const SidebarSequence = ({
5253
return (
5354
<li>
5455
<Collapsible
55-
className={classNames('mb-2', { 'active-section': isActiveSequence, 'bg-info-100': isActiveSequence && !isOpen })}
56+
className={classNames('mb-2', { 'active-section': isActiveSequence, 'bg-info-100': isActiveSequence && !open })}
5657
styling="card-lg text-break"
5758
title={sectionTitle}
58-
open={isOpen}
59-
onToggle={onToggle}
59+
open={open}
60+
onToggle={() => setOpen(!open)}
6061
>
6162
<ol className="list-unstyled">
6263
{unitIds.map((unitId, index) => (
@@ -81,8 +82,7 @@ const SidebarSequence = ({
8182
SidebarSequence.propTypes = {
8283
intl: intlShape.isRequired,
8384
courseId: PropTypes.string.isRequired,
84-
isOpen: PropTypes.bool.isRequired,
85-
onToggle: PropTypes.func.isRequired,
85+
defaultOpen: PropTypes.bool.isRequired,
8686
sequence: PropTypes.shape({
8787
complete: PropTypes.bool,
8888
id: PropTypes.string,

src/courseware/course/sidebar/sidebars/course-outline/components/SidebarSequence.test.jsx

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import { MemoryRouter } from 'react-router-dom';
2-
import { render, screen } from '@testing-library/react';
2+
import { render, screen, waitFor } from '@testing-library/react';
33
import userEvent from '@testing-library/user-event';
44
import { AppProvider } from '@edx/frontend-platform/react';
55
import { IntlProvider } from '@edx/frontend-platform/i18n';
66

77
import courseOutlineMessages from '@src/course-home/outline-tab/messages';
88
import { initializeMockApp, initializeTestStore } from '@src/setupTest';
9+
import messages from '../messages';
910
import SidebarSequence from './SidebarSequence';
1011

1112
initializeMockApp();
@@ -14,6 +15,7 @@ describe('<SidebarSequence />', () => {
1415
let courseId;
1516
let store;
1617
let sequence;
18+
let unit;
1719
const sequenceDescription = 'sequence test description';
1820

1921
const initTestStore = async (options) => {
@@ -23,6 +25,8 @@ describe('<SidebarSequence />', () => {
2325
let activeSequenceId = '';
2426
[activeSequenceId] = Object.keys(state.courseware.courseOutline.sequences);
2527
sequence = state.courseware.courseOutline.sequences[activeSequenceId];
28+
const unitId = sequence.unitIds[0];
29+
unit = state.courseware.courseOutline.units[unitId];
2630
};
2731

2832
function renderWithProvider(props = {}) {
@@ -51,6 +55,7 @@ describe('<SidebarSequence />', () => {
5155
expect(screen.getByText(sequence.title)).toBeInTheDocument();
5256
expect(screen.queryByText(sequenceDescription)).not.toBeInTheDocument();
5357
expect(screen.getByText(`, ${courseOutlineMessages.incompleteAssignment.defaultMessage}`)).toBeInTheDocument();
58+
expect(screen.queryByText(unit.title)).not.toBeInTheDocument();
5459
});
5560

5661
it('renders correctly when sequence is not collapsed and complete', async () => {
@@ -68,6 +73,13 @@ describe('<SidebarSequence />', () => {
6873
expect(screen.getByText(sequence.title)).toBeInTheDocument();
6974
expect(screen.getByText(sequenceDescription)).toBeInTheDocument();
7075
expect(screen.getByText(`, ${courseOutlineMessages.completedAssignment.defaultMessage}`)).toBeInTheDocument();
76+
expect(screen.getByText(unit.title)).toBeInTheDocument();
77+
expect(screen.getByText(`, ${messages.incompleteUnit.defaultMessage}`)).toBeInTheDocument();
78+
7179
await user.click(screen.getByText(sequence.title));
80+
await waitFor(() => {
81+
expect(screen.queryByText(unit.title)).not.toBeInTheDocument();
82+
expect(screen.queryByText(`, ${messages.incompleteUnit.defaultMessage}`)).not.toBeInTheDocument();
83+
});
7284
});
7385
});

0 commit comments

Comments
 (0)