Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 4 additions & 7 deletions src/course-checklist/ChecklistSection/ChecklistItemBody.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,24 +5,21 @@ import { ActionRow, Button, Icon } from '@openedx/paragon';
import { CheckCircle, RadioButtonUnchecked } from '@openedx/paragon/icons';
import { getConfig } from '@edx/frontend-platform';

import { useWaffleFlags } from '../../data/apiHooks';
import { useWaffleFlags } from '@src/data/apiHooks';

import messages from './messages';

const getUpdateLinks = (courseId, waffleFlags) => {
const baseUrl = getConfig().STUDIO_BASE_URL;
const isLegacyGradingUrl = !waffleFlags.useNewGradingPage;
const isLegacyCertificateUrl = !waffleFlags.useNewCertificatesPage;
const isLegacyCourseDatesUrl = !waffleFlags.useNewScheduleDetailsPage;
const isLegacyOutlineUrl = !waffleFlags.useNewCourseOutlinePage;
Comment on lines -13 to 15
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@rpenido, one question: why is support for these legacy pages being phased out? Have they already been deleted? Or is there a requirement for their removal? I still see these flags on edx-platform.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry, I just saw the comment on #2955 (comment)


return {
welcomeMessage: `/course/${courseId}/course_info`,
gradingPolicy: isLegacyGradingUrl
? `${baseUrl}/settings/grading/${courseId}` : `/course/${courseId}/settings/grading`,
gradingPolicy: `/course/${courseId}/settings/grading`,
certificate: isLegacyCertificateUrl
? `${baseUrl}/certificates/${courseId}` : `/course/${courseId}/certificates`,
courseDates: isLegacyCourseDatesUrl
? `${baseUrl}/settings/details/${courseId}#schedule` : `/course/${courseId}/settings/details/#schedule`,
courseDates: `/course/${courseId}/settings/details/#schedule`,
proctoringEmail: `${baseUrl}/pages-and-resources/proctoring/settings`,
outline: isLegacyOutlineUrl ? `${baseUrl}/course/${courseId}` : `/course/${courseId}`,
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@ import { camelCaseObject } from '@edx/frontend-platform';

import {
initializeMocks, render, screen, within,
} from '../../testUtils';
import { getApiWaffleFlagsUrl } from '../../data/api';
} from '@src/testUtils';
import { getApiWaffleFlagsUrl } from '@src/data/api';

import { generateCourseLaunchData } from '../factories/mockApiResponses';
import { checklistItems } from './utils/courseChecklistData';
import messages from './messages';
Expand Down Expand Up @@ -36,9 +37,7 @@ describe('ChecklistSection', () => {
axiosMock
.onGet(getApiWaffleFlagsUrl(courseId))
.reply(200, {
useNewGradingPage: true,
useNewCertificatesPage: true,
useNewScheduleDetailsPage: true,
useNewCourseOutlinePage: true,
});
});
Expand Down
8 changes: 3 additions & 5 deletions src/course-outline/status-bar/LegacyStatusBar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,16 @@ import {
Button, Hyperlink, Form, Stack, useToggle,
} from '@openedx/paragon';
import { Link } from 'react-router-dom';
import { type ReactNode } from 'react';

import { ReactNode } from 'react';
import { CourseOutlineStatusBar } from '@src/course-outline/data/types';
import { ContentTagsDrawerSheet } from '@src/content-tags-drawer';
import TagCount from '@src/generic/tag-count';
import { useHelpUrls } from '@src/help-urls/hooks';
import { useWaffleFlags } from '@src/data/apiHooks';
import { VIDEO_SHARING_OPTIONS } from '@src/course-outline/constants';
import { useContentTagsCount } from '@src/generic/data/apiHooks';
import { getVideoSharingOptionText } from '@src/course-outline/utils';

import messages from './messages';

interface StatusBarItemProps {
Expand Down Expand Up @@ -47,7 +47,6 @@ export const LegacyStatusBar = ({
handleVideoSharingOptionChange,
}: LegacyStatusBarProps) => {
const intl = useIntl();
const waffleFlags = useWaffleFlags(courseId);

const {
courseReleaseDate,
Expand All @@ -67,7 +66,6 @@ export const LegacyStatusBar = ({

const courseReleaseDateObj = moment.utc(courseReleaseDate, 'MMM DD, YYYY [at] HH:mm UTC', true);
const checkListTitle = `${completedCourseLaunchChecks + completedCourseBestPracticesChecks}/${totalCourseLaunchChecks + totalCourseBestPracticesChecks}`;
const scheduleDestination = () => new URL(`settings/details/${courseId}#schedule`, getConfig().STUDIO_BASE_URL).href;

const {
contentHighlights: contentHighlightsUrl,
Expand All @@ -88,7 +86,7 @@ export const LegacyStatusBar = ({
<StatusBarItem title={intl.formatMessage(messages.startDateTitle)}>
<Link
className="small"
to={waffleFlags.useNewScheduleDetailsPage ? `/course/${courseId}/settings/details/#schedule` : scheduleDestination()}
to={`/course/${courseId}/settings/details/#schedule`}
>
{courseReleaseDateObj.isValid() ? (
<FormattedDate
Expand Down
12 changes: 4 additions & 8 deletions src/course-outline/status-bar/StatusBar.tsx
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
import moment, { Moment } from 'moment/moment';
import { FormattedDate, FormattedMessage } from '@edx/frontend-platform/i18n';
import { getConfig } from '@edx/frontend-platform/config';
import { Badge, Icon, Stack } from '@openedx/paragon';
import { Link } from 'react-router-dom';

import type { ChecklistType, CourseOutlineStatusBar } from '@src/course-outline/data/types';
import {
Cached, ChecklistRtl, Description, Event,
} from '@openedx/paragon/icons';
import { useWaffleFlags } from '@src/data/apiHooks';

import type { ChecklistType, CourseOutlineStatusBar } from '@src/course-outline/data/types';
import { useEntityLinksSummaryByDownstreamContext } from '@src/course-libraries/data/apiHooks';
import { useCourseDetails } from '@src/course-outline/data/apiHooks';

import messages from './messages';
import { NotificationStatusIcon } from './NotificationStatusIcon';

Expand Down Expand Up @@ -179,8 +178,6 @@ export const StatusBar = ({
isLoading,
courseId,
}: StatusBarProps) => {
const waffleFlags = useWaffleFlags(courseId);

const {
endDate,
courseReleaseDate,
Expand All @@ -189,7 +186,6 @@ export const StatusBar = ({

const courseReleaseDateObj = moment.utc(courseReleaseDate, 'MMM DD, YYYY [at] HH:mm UTC', true);
const endDateObj = moment.utc(endDate);
const scheduleDestination = () => new URL(`settings/details/${courseId}#schedule`, getConfig().STUDIO_BASE_URL).href;

if (isLoading) {
return null;
Expand All @@ -203,7 +199,7 @@ export const StatusBar = ({
startDate={courseReleaseDateObj}
endDate={endDateObj}
startDateRaw={courseReleaseDate}
datesLink={waffleFlags.useNewScheduleDetailsPage ? `/course/${courseId}/settings/details/#schedule` : scheduleDestination()}
datesLink={`/course/${courseId}/settings/details/#schedule`}
/>
<Checklists courseId={courseId} checklist={checklist} />
<LibraryUpdates courseId={courseId} />
Expand Down
2 changes: 0 additions & 2 deletions src/custom-pages/CustomPages.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,7 @@ describe('CustomPages', () => {
axiosMock
.onGet(getApiWaffleFlagsUrl(courseId))
.reply(200, {
useNewGradingPage: true,
useNewCertificatesPage: true,
useNewScheduleDetailsPage: true,
useNewCourseOutlinePage: true,
});
});
Expand Down
5 changes: 0 additions & 5 deletions src/data/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,20 +76,15 @@ export const waffleFlagDefaults = {
enableCourseOptimizerCheckPrevRunLinks: false,
useNewHomePage: true,
useNewCustomPages: true,
useNewScheduleDetailsPage: true,
useNewAdvancedSettingsPage: true,
useNewGradingPage: true,
useNewUpdatesPage: true,
useNewImportPage: false,
useNewExportPage: true,
useNewFilesUploadsPage: true,
useNewVideoUploadsPage: true,
useNewCourseOutlinePage: true,
useNewUnitPage: false,
useNewCourseTeamPage: true,
useNewCertificatesPage: true,
useNewTextbooksPage: true,
useNewGroupConfigurationsPage: true,
useReactMarkdownEditor: true,
useVideoGalleryFlow: false,
enableAuthzCourseAuthoring: false,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
// @ts-check

import { waitFor } from '@testing-library/react';

import { mockWaffleFlags } from '@src/data/apiHooks.mock';
import { useUserPermissions } from '@src/authz/data/apiHooks';
import { initializeMocks, render } from '../../testUtils';
import { initializeMocks, render } from '@src/testUtils';

import messages from './messages';
import { HelpSidebar } from '.';

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import PropTypes from 'prop-types';
import { type ReactNode } from 'react';
import { useLocation } from 'react-router-dom';
import classNames from 'classnames';
import { useIntl } from '@edx/frontend-platform/i18n';
import { getConfig } from '@edx/frontend-platform';

import { useUserPermissions } from '@src/authz/data/apiHooks';
import { COURSE_PERMISSIONS } from '@src/authz/constants';
Expand All @@ -11,13 +10,21 @@ import { otherLinkURLParams } from './constants';
import messages from './messages';
import HelpSidebarLink from './HelpSidebarLink';

interface HelpSidebarProps {
courseId: string;
showOtherSettings?: boolean;
proctoredExamSettingsUrl?: string;
children: ReactNode;
className?: string;
}

const HelpSidebar = ({
courseId,
showOtherSettings,
proctoredExamSettingsUrl,
showOtherSettings = false,
proctoredExamSettingsUrl = '',
children,
className,
}) => {
}: HelpSidebarProps) => {
const intl = useIntl();
const { pathname } = useLocation();
const {
Expand All @@ -30,16 +37,6 @@ const HelpSidebar = ({
const waffleFlags = useWaffleFlags(courseId);

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);

/*
AuthZ for Course Authoring
Expand Down Expand Up @@ -78,46 +75,41 @@ const HelpSidebar = ({
<ul className="p-0 mb-0">
{showOtherLink(scheduleAndDetails) && (
<HelpSidebarLink
pathToPage={waffleFlags.useNewScheduleDetailsPage
? `/course/${courseId}/${scheduleAndDetails}` : scheduleAndDetailsDestination}
pathToPage={`/course/${courseId}/${scheduleAndDetails}`}
title={intl.formatMessage(
messages.sidebarLinkToScheduleAndDetails,
)}
isNewPage={waffleFlags.useNewScheduleDetailsPage}
isNewPage
/>
)}
{showOtherLink(grading) && (
<HelpSidebarLink
pathToPage={waffleFlags.useNewGradingPage
? `/course/${courseId}/${grading}` : gradingDestination}
pathToPage={`/course/${courseId}/${grading}`}
title={intl.formatMessage(messages.sidebarLinkToGrading)}
isNewPage={waffleFlags.useNewGradingPage}
isNewPage
/>
)}
{showOtherLink(courseTeam) && (
<HelpSidebarLink
pathToPage={waffleFlags.useNewCourseTeamPage
? `/course/${courseId}/${courseTeam}` : courseTeamDestination}
pathToPage={`/course/${courseId}/${courseTeam}`}
title={intl.formatMessage(messages.sidebarLinkToCourseTeam)}
isNewPage={waffleFlags.useNewCourseTeamPage}
isNewPage
/>
)}
{showOtherLink(groupConfigurations) && (
<HelpSidebarLink
pathToPage={waffleFlags.useNewGroupConfigurationsPage
? `/course/${courseId}/${groupConfigurations}` : groupConfigurationsDestination}
pathToPage={`/course/${courseId}/${groupConfigurations}`}
title={intl.formatMessage(
messages.sidebarLinkToGroupConfigurations,
)}
isNewPage={waffleFlags.useNewGroupConfigurationsPage}
isNewPage
/>
)}
{showOtherLink(advancedSettings) && canManageAdvancedSettings && (
<HelpSidebarLink
pathToPage={waffleFlags.useNewAdvancedSettingsPage
? `/course/${courseId}/${advancedSettings}` : advancedSettingsDestination}
pathToPage={`/course/${courseId}/${advancedSettings}`}
title={intl.formatMessage(messages.sidebarLinkToAdvancedSettings)}
isNewPage={waffleFlags.useNewAdvancedSettingsPage}
isNewPage
/>
)}
{proctoredExamSettingsUrl && (
Expand All @@ -137,19 +129,4 @@ const HelpSidebar = ({
);
};

HelpSidebar.defaultProps = {
proctoredExamSettingsUrl: '',
className: undefined,
courseId: undefined,
showOtherSettings: false,
};

HelpSidebar.propTypes = {
courseId: PropTypes.string,
showOtherSettings: PropTypes.bool,
proctoredExamSettingsUrl: PropTypes.string,
children: PropTypes.node.isRequired,
className: PropTypes.string,
};

export default HelpSidebar;
11 changes: 5 additions & 6 deletions src/header/hooks.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,6 @@ export const useContentMenuItems = (courseId: string) => {

export const useSettingMenuItems = (courseId: string) => {
const intl = useIntl();
const studioBaseUrl = getConfig().STUDIO_BASE_URL;
const { canAccessAdvancedSettings: legacyCanAccessAdvancedSettings } = useSelector(getStudioHomeData);
const waffleFlags = useWaffleFlags(courseId);

Expand All @@ -84,24 +83,24 @@ export const useSettingMenuItems = (courseId: string) => {

const items = [
{
href: waffleFlags.useNewScheduleDetailsPage ? `/course/${courseId}/settings/details` : `${studioBaseUrl}/settings/details/${courseId}`,
href: `/course/${courseId}/settings/details`,
title: intl.formatMessage(messages['header.links.scheduleAndDetails']),
},
{
href: waffleFlags.useNewGradingPage ? `/course/${courseId}/settings/grading` : `${studioBaseUrl}/settings/grading/${courseId}`,
href: `/course/${courseId}/settings/grading`,
title: intl.formatMessage(messages['header.links.grading']),
},
{
href: waffleFlags.useNewCourseTeamPage ? `/course/${courseId}/course_team` : `${studioBaseUrl}/course_team/${courseId}`,
href: `/course/${courseId}/course_team`,
title: intl.formatMessage(messages['header.links.courseTeam']),
},
{
href: waffleFlags.useNewGroupConfigurationsPage ? `/course/${courseId}/group_configurations` : `${studioBaseUrl}/group_configurations/${courseId}`,
href: `/course/${courseId}/group_configurations`,
title: intl.formatMessage(messages['header.links.groupConfigurations']),
},
...(canAccessAdvancedSettings
? [{
href: waffleFlags.useNewAdvancedSettingsPage ? `/course/${courseId}/settings/advanced` : `${studioBaseUrl}/settings/advanced/${courseId}`,
href: `/course/${courseId}/settings/advanced`,
title: intl.formatMessage(messages['header.links.advancedSettings']),
}] : []
),
Expand Down
7 changes: 3 additions & 4 deletions src/pages-and-resources/pages/PageCard.test.jsx
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
import { getConfig } from '@edx/frontend-platform';

import { getApiWaffleFlagsUrl } from '@src/data/api';
import {
initializeMocks,
screen,
render,
waitFor,
} from '../../testUtils';
} from '@src/testUtils';

import PageGrid from './PageGrid';
import { getApiWaffleFlagsUrl } from '../../data/api';

import PagesAndResourcesProvider from '../PagesAndResourcesProvider';

Expand Down Expand Up @@ -49,9 +50,7 @@ describe('LiveSettings', () => {
axiosMock
.onGet(getApiWaffleFlagsUrl(courseId))
.reply(200, {
useNewGradingPage: true,
useNewCertificatesPage: true,
useNewScheduleDetailsPage: true,
useNewCourseOutlinePage: true,
});
});
Expand Down