Files
frontend-app-authoring/src/generic/help-sidebar/HelpSidebar.jsx
Peter Kulko f9ef00e29f feat: [FC-0070] Remove backend redirects (use SPA functionality) (#1372)
Introduces the ability to utilize SPA functionality when the relevant waffle flags are enabled for current MFE pages. When any new MFE page is loaded, a request is made to retrieve the waffle flags. This includes both global waffle flags related to MFE Authoring pages, as well as waffle flags specific to the current course.
2024-11-08 08:19:23 -03:00

136 lines
5.0 KiB
JavaScript

import PropTypes from 'prop-types';
import { useSelector } from 'react-redux';
import { useLocation } from 'react-router-dom';
import classNames from 'classnames';
import { injectIntl, intlShape } from '@edx/frontend-platform/i18n';
import { getConfig } from '@edx/frontend-platform';
import { getWaffleFlags } from '../../data/selectors';
import { otherLinkURLParams } from './constants';
import messages from './messages';
import HelpSidebarLink from './HelpSidebarLink';
const HelpSidebar = ({
intl,
courseId,
showOtherSettings,
proctoredExamSettingsUrl,
children,
className,
}) => {
const { pathname } = useLocation();
const {
grading,
courseTeam,
advancedSettings,
scheduleAndDetails,
groupConfigurations,
} = otherLinkURLParams;
const waffleFlags = useSelector(getWaffleFlags);
const showOtherLink = (params) => !pathname.includes(params);
const generateLegacyURL = (urlParameter) => {
const referObj = new URL(`${urlParameter}/${courseId}`, getConfig().STUDIO_BASE_URL);
return referObj.href;
};
const scheduleAndDetailsDestination = generateLegacyURL(scheduleAndDetails);
const gradingDestination = generateLegacyURL(grading);
const courseTeamDestination = generateLegacyURL(courseTeam);
const advancedSettingsDestination = generateLegacyURL(advancedSettings);
const groupConfigurationsDestination = generateLegacyURL(groupConfigurations);
return (
<aside className={classNames('help-sidebar', className)}>
<div className="help-sidebar-about">{children}</div>
{showOtherSettings && (
<>
<hr />
<div className="help-sidebar-other">
<h4 className="help-sidebar-other-title">
{intl.formatMessage(messages.sidebarTitleOther)}
</h4>
<nav
className="help-sidebar-other-links"
aria-label={intl.formatMessage(messages.sidebarTitleOther)}
>
<ul className="p-0 mb-0">
{showOtherLink(scheduleAndDetails) && (
<HelpSidebarLink
pathToPage={waffleFlags.useNewScheduleDetailsPage
? `/course/${courseId}/${scheduleAndDetails}` : scheduleAndDetailsDestination}
title={intl.formatMessage(
messages.sidebarLinkToScheduleAndDetails,
)}
isNewPage={waffleFlags.useNewScheduleDetailsPage}
/>
)}
{showOtherLink(grading) && (
<HelpSidebarLink
pathToPage={waffleFlags.useNewGradingPage
? `/course/${courseId}/${grading}` : gradingDestination}
title={intl.formatMessage(messages.sidebarLinkToGrading)}
isNewPage={waffleFlags.useNewGradingPage}
/>
)}
{showOtherLink(courseTeam) && (
<HelpSidebarLink
pathToPage={waffleFlags.useNewCourseTeamPage
? `/course/${courseId}/${courseTeam}` : courseTeamDestination}
title={intl.formatMessage(messages.sidebarLinkToCourseTeam)}
isNewPage={waffleFlags.useNewCourseTeamPage}
/>
)}
{showOtherLink(groupConfigurations) && (
<HelpSidebarLink
pathToPage={waffleFlags.useNewGroupConfigurationsPage
? `/course/${courseId}/${groupConfigurations}` : groupConfigurationsDestination}
title={intl.formatMessage(
messages.sidebarLinkToGroupConfigurations,
)}
isNewPage={waffleFlags.useNewGroupConfigurationsPage}
/>
)}
{showOtherLink(advancedSettings) && (
<HelpSidebarLink
pathToPage={waffleFlags.useNewAdvancedSettingsPage
? `/course/${courseId}/${advancedSettings}` : advancedSettingsDestination}
title={intl.formatMessage(messages.sidebarLinkToAdvancedSettings)}
isNewPage={waffleFlags.useNewAdvancedSettingsPage}
/>
)}
{proctoredExamSettingsUrl && (
<HelpSidebarLink
pathToPage={proctoredExamSettingsUrl}
title={intl.formatMessage(
messages.sidebarLinkToProctoredExamSettings,
)}
/>
)}
</ul>
</nav>
</div>
</>
)}
</aside>
);
};
HelpSidebar.defaultProps = {
proctoredExamSettingsUrl: '',
className: undefined,
courseId: undefined,
showOtherSettings: false,
};
HelpSidebar.propTypes = {
intl: intlShape.isRequired,
courseId: PropTypes.string,
showOtherSettings: PropTypes.bool,
proctoredExamSettingsUrl: PropTypes.string,
children: PropTypes.node.isRequired,
className: PropTypes.string,
};
export default injectIntl(HelpSidebar);