From 37ae94c72d05df02d01963e23dc7b1c377a33a54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=B4mulo=20Penido?= Date: Tue, 24 Mar 2026 19:05:06 -0300 Subject: [PATCH] fix: remove deprecated settings waffle flags --- .../ChecklistSection/ChecklistItemBody.jsx | 11 ++- .../ChecklistSection.test.jsx | 7 +- .../status-bar/LegacyStatusBar.tsx | 8 +-- src/course-outline/status-bar/StatusBar.tsx | 12 ++-- src/custom-pages/CustomPages.test.tsx | 2 - src/data/api.ts | 5 -- ...pSidebar.test.jsx => HelpSidebar.test.tsx} | 6 +- .../{HelpSidebar.jsx => HelpSidebar.tsx} | 67 ++++++------------- src/header/hooks.tsx | 11 ++- .../pages/PageCard.test.jsx | 7 +- 10 files changed, 47 insertions(+), 89 deletions(-) rename src/generic/help-sidebar/{HelpSidebar.test.jsx => HelpSidebar.test.tsx} (98%) rename src/generic/help-sidebar/{HelpSidebar.jsx => HelpSidebar.tsx} (64%) diff --git a/src/course-checklist/ChecklistSection/ChecklistItemBody.jsx b/src/course-checklist/ChecklistSection/ChecklistItemBody.jsx index d42a5cb0d4..5d0234d0df 100644 --- a/src/course-checklist/ChecklistSection/ChecklistItemBody.jsx +++ b/src/course-checklist/ChecklistSection/ChecklistItemBody.jsx @@ -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; 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}`, }; diff --git a/src/course-checklist/ChecklistSection/ChecklistSection.test.jsx b/src/course-checklist/ChecklistSection/ChecklistSection.test.jsx index 2fc73e66d6..d6baed767d 100644 --- a/src/course-checklist/ChecklistSection/ChecklistSection.test.jsx +++ b/src/course-checklist/ChecklistSection/ChecklistSection.test.jsx @@ -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'; @@ -36,9 +37,7 @@ describe('ChecklistSection', () => { axiosMock .onGet(getApiWaffleFlagsUrl(courseId)) .reply(200, { - useNewGradingPage: true, useNewCertificatesPage: true, - useNewScheduleDetailsPage: true, useNewCourseOutlinePage: true, }); }); diff --git a/src/course-outline/status-bar/LegacyStatusBar.tsx b/src/course-outline/status-bar/LegacyStatusBar.tsx index 2673dd2143..5eb5449d14 100644 --- a/src/course-outline/status-bar/LegacyStatusBar.tsx +++ b/src/course-outline/status-bar/LegacyStatusBar.tsx @@ -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 { @@ -47,7 +47,6 @@ export const LegacyStatusBar = ({ handleVideoSharingOptionChange, }: LegacyStatusBarProps) => { const intl = useIntl(); - const waffleFlags = useWaffleFlags(courseId); const { courseReleaseDate, @@ -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, @@ -88,7 +86,7 @@ export const LegacyStatusBar = ({ {courseReleaseDateObj.isValid() ? ( { - const waffleFlags = useWaffleFlags(courseId); - const { endDate, courseReleaseDate, @@ -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; @@ -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`} /> diff --git a/src/custom-pages/CustomPages.test.tsx b/src/custom-pages/CustomPages.test.tsx index fec0ebc220..f8acd09b1f 100644 --- a/src/custom-pages/CustomPages.test.tsx +++ b/src/custom-pages/CustomPages.test.tsx @@ -62,9 +62,7 @@ describe('CustomPages', () => { axiosMock .onGet(getApiWaffleFlagsUrl(courseId)) .reply(200, { - useNewGradingPage: true, useNewCertificatesPage: true, - useNewScheduleDetailsPage: true, useNewCourseOutlinePage: true, }); }); diff --git a/src/data/api.ts b/src/data/api.ts index 4f74a7196b..102da1dc13 100644 --- a/src/data/api.ts +++ b/src/data/api.ts @@ -76,9 +76,6 @@ export const waffleFlagDefaults = { enableCourseOptimizerCheckPrevRunLinks: false, useNewHomePage: true, useNewCustomPages: true, - useNewScheduleDetailsPage: true, - useNewAdvancedSettingsPage: true, - useNewGradingPage: true, useNewUpdatesPage: true, useNewImportPage: false, useNewExportPage: true, @@ -86,10 +83,8 @@ export const waffleFlagDefaults = { useNewVideoUploadsPage: true, useNewCourseOutlinePage: true, useNewUnitPage: false, - useNewCourseTeamPage: true, useNewCertificatesPage: true, useNewTextbooksPage: true, - useNewGroupConfigurationsPage: true, useReactMarkdownEditor: true, useVideoGalleryFlow: false, enableAuthzCourseAuthoring: false, diff --git a/src/generic/help-sidebar/HelpSidebar.test.jsx b/src/generic/help-sidebar/HelpSidebar.test.tsx similarity index 98% rename from src/generic/help-sidebar/HelpSidebar.test.jsx rename to src/generic/help-sidebar/HelpSidebar.test.tsx index 8f97c4478e..64eb6d9345 100644 --- a/src/generic/help-sidebar/HelpSidebar.test.jsx +++ b/src/generic/help-sidebar/HelpSidebar.test.tsx @@ -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 '.'; diff --git a/src/generic/help-sidebar/HelpSidebar.jsx b/src/generic/help-sidebar/HelpSidebar.tsx similarity index 64% rename from src/generic/help-sidebar/HelpSidebar.jsx rename to src/generic/help-sidebar/HelpSidebar.tsx index 5a9745e8a8..074ab955e1 100644 --- a/src/generic/help-sidebar/HelpSidebar.jsx +++ b/src/generic/help-sidebar/HelpSidebar.tsx @@ -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'; @@ -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 { @@ -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 @@ -78,46 +75,41 @@ const HelpSidebar = ({
    {showOtherLink(scheduleAndDetails) && ( )} {showOtherLink(grading) && ( )} {showOtherLink(courseTeam) && ( )} {showOtherLink(groupConfigurations) && ( )} {showOtherLink(advancedSettings) && canManageAdvancedSettings && ( )} {proctoredExamSettingsUrl && ( @@ -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; diff --git a/src/header/hooks.tsx b/src/header/hooks.tsx index 5c12bcfe9f..6b8112b175 100644 --- a/src/header/hooks.tsx +++ b/src/header/hooks.tsx @@ -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); @@ -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']), }] : [] ), diff --git a/src/pages-and-resources/pages/PageCard.test.jsx b/src/pages-and-resources/pages/PageCard.test.jsx index c5d641789e..19c6247f58 100644 --- a/src/pages-and-resources/pages/PageCard.test.jsx +++ b/src/pages-and-resources/pages/PageCard.test.jsx @@ -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'; @@ -49,9 +50,7 @@ describe('LiveSettings', () => { axiosMock .onGet(getApiWaffleFlagsUrl(courseId)) .reply(200, { - useNewGradingPage: true, useNewCertificatesPage: true, - useNewScheduleDetailsPage: true, useNewCourseOutlinePage: true, }); });