Skip to content

Commit 75f56ea

Browse files
fix: fixed flicker issue of navbar width (#1364)
* fix: fixed fliker issue of navbar width * refactor: added hook function * refactor: placed discussion and notification constant on common place * refactor: moved to constant * refactor: fixed variable rename
1 parent a418ba6 commit 75f56ea

File tree

9 files changed

+29
-23
lines changed

9 files changed

+29
-23
lines changed

src/constants.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,8 @@ export const VERIFIED_MODES = [
4444
'paid-executive-education',
4545
'paid-bootcamp',
4646
];
47+
48+
export const WIDGETS = {
49+
DISCUSSIONS: 'DISCUSSIONS',
50+
NOTIFICATIONS: 'NOTIFICATIONS',
51+
};

src/courseware/course/new-sidebar/SidebarContextProvider.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { breakpoints, useWindowSize } from '@openedx/paragon';
99

1010
import { getLocalStorage, setLocalStorage } from '../../../data/localStorage';
1111
import { useModel } from '../../../generic/model-store';
12-
import WIDGETS from './constants';
12+
import { WIDGETS } from '../../../constants';
1313
import SidebarContext from './SidebarContext';
1414
import { SIDEBARS } from './sidebars';
1515

src/courseware/course/new-sidebar/common/SidebarBase.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { Icon, IconButton } from '@openedx/paragon';
88
import { ArrowBackIos, Close } from '@openedx/paragon/icons';
99

1010
import { useEventListener } from '../../../../generic/hooks';
11-
import WIDGETS from '../constants';
11+
import { WIDGETS } from '../../../../constants';
1212
import messages from '../messages';
1313
import SidebarContext from '../SidebarContext';
1414

src/courseware/course/new-sidebar/constants.js

Lines changed: 0 additions & 6 deletions
This file was deleted.

src/courseware/course/new-sidebar/sidebars/discussions-notifications/notifications/NotificationsWidget.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import React, { useContext, useEffect, useMemo } from 'react';
33
import { sendTrackEvent } from '@edx/frontend-platform/analytics';
44
import { useModel } from '../../../../../../generic/model-store';
55
import UpgradeNotification from '../../../../../../generic/upgrade-notification/UpgradeNotification';
6-
import WIDGETS from '../../../constants';
6+
import { WIDGETS } from '../../../../../../constants';
77
import SidebarContext from '../../../SidebarContext';
88

99
const NotificationsWidget = () => {

src/courseware/course/sequence/sequence-navigation/SequenceNavigationTabs.jsx

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,16 @@
1-
import React, { useContext } from 'react';
1+
import React from 'react';
22
import PropTypes from 'prop-types';
33
import classNames from 'classnames';
4-
import { getConfig } from '@edx/frontend-platform';
54

65
import UnitButton from './UnitButton';
76
import SequenceNavigationDropdown from './SequenceNavigationDropdown';
87
import useIndexOfLastVisibleChild from '../../../../generic/tabs/useIndexOfLastVisibleChild';
9-
import { useIsOnXLDesktop } from './hooks';
10-
import SidebarContext from '../../sidebar/SidebarContext';
11-
import NewSidebarContext from '../../new-sidebar/SidebarContext';
8+
import { useIsOnXLDesktop, useIsSidebarOpen } from './hooks';
129

1310
const SequenceNavigationTabs = ({
1411
unitIds, unitId, showCompletion, onNavigate,
1512
}) => {
16-
const enableNewSidebar = getConfig().ENABLE_NEW_SIDEBAR;
17-
const sidebarContext = enableNewSidebar === 'true' ? NewSidebarContext : SidebarContext;
18-
const { currentSidebar } = useContext(sidebarContext);
13+
const isSidebarOpen = useIsSidebarOpen(unitId);
1914
const [
2015
indexOfLastVisibleChild,
2116
containerRef,
@@ -29,7 +24,7 @@ const SequenceNavigationTabs = ({
2924
<div
3025
ref={containerRef}
3126
className={classNames('sequence-navigation-tabs-container', {
32-
'navigation-tab-width': isOnXLDesktop && currentSidebar,
27+
'navigation-tab-width': isOnXLDesktop && isSidebarOpen,
3328
})}
3429
>
3530
<div

src/courseware/course/sequence/sequence-navigation/hooks.js

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
1-
/* eslint-disable import/prefer-default-export */
2-
1+
import { useContext } from 'react';
32
import { useSelector } from 'react-redux';
43
import { breakpoints, useWindowSize } from '@openedx/paragon';
4+
import { getConfig } from '@edx/frontend-platform';
5+
56
import { useModel } from '../../../../generic/model-store';
67
import { sequenceIdsSelector } from '../../../data';
8+
import SidebarContext from '../../sidebar/SidebarContext';
9+
import NewSidebarContext from '../../new-sidebar/SidebarContext';
10+
import { WIDGETS } from '../../../../constants';
711

812
export function useSequenceNavigationMetadata(currentSequenceId, currentUnitId) {
913
const sequenceIds = useSelector(sequenceIdsSelector);
@@ -74,3 +78,10 @@ export function useIsOnXLDesktop() {
7478
const windowSize = useWindowSize();
7579
return windowSize.width >= breakpoints.extraLarge.minWidth;
7680
}
81+
82+
export function useIsSidebarOpen(unitId) {
83+
const { currentSidebar } = useContext(getConfig().ENABLE_NEW_SIDEBAR === 'true' ? NewSidebarContext : SidebarContext);
84+
const topic = useModel('discussionTopics', unitId);
85+
return currentSidebar === WIDGETS.NOTIFICATIONS
86+
|| (currentSidebar === WIDGETS.DISCUSSIONS && !!(topic?.id || topic?.enabledInContext));
87+
}

src/courseware/course/sidebar/sidebars/discussions/DiscussionsTrigger.jsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,10 @@ import { getCourseDiscussionTopics } from '../../../../data/thunks';
1010
import SidebarTriggerBase from '../../common/TriggerBase';
1111
import SidebarContext from '../../SidebarContext';
1212
import messages from './messages';
13+
import { WIDGETS } from '../../../../../constants';
1314

1415
ensureConfig(['DISCUSSIONS_MFE_BASE_URL']);
15-
export const ID = 'DISCUSSIONS';
16+
export const ID = WIDGETS.DISCUSSIONS;
1617

1718
const DiscussionsTrigger = ({
1819
intl,

src/courseware/course/sidebar/sidebars/notifications/NotificationTrigger.jsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ import { getLocalStorage, setLocalStorage } from '../../../../../data/localStora
55
import messages from '../../../messages';
66
import SidebarTriggerBase from '../../common/TriggerBase';
77
import SidebarContext from '../../SidebarContext';
8-
8+
import { WIDGETS } from '../../../../../constants';
99
import NotificationIcon from './NotificationIcon';
1010

11-
export const ID = 'NOTIFICATIONS';
11+
export const ID = WIDGETS.NOTIFICATIONS;
1212

1313
const NotificationTrigger = ({
1414
intl,

0 commit comments

Comments
 (0)