{"version":3,"file":"app.85af2e0cb849508b9478.js","mappings":"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ACT,SAAUC,GACV,GAAMC,GACN,QAASC,GACT,GAAMI,GACN,GAAMH,GACN,GAAMC,I,6hmDC3BR,IACE,GAAMrB,GACN,Q,w2DACA,GAAMC,GACN,GAAMC,GACN,QAASC,GACT,GAAMC,GACN,GAAMC,GACN,GAAMiB,GACN,GAAMhB,GACN,QAASC,GACT,QAASC,GACT,QAASE,GACT,GAAMC,GACN,GAAMC,GACN,GAAMC,GACN,QAASC,GACT,GAAMC,GACN,QAASC,GACT,SAAUC,GACV,GAAMC,GACN,QAASC,GACT,GAAMI,GACN,GAAMH,I,kz1YCvBR,IACE,GAAMpB,GACN,Q,2hVACA,GAAMC,GACN,GAAMC,GACN,QAASC,GACT,GAAMC,GACN,GAAMC,GACN,GAAMiB,GACN,GAAMhB,GACN,QAASC,GACT,QAASC,GACT,GAAMC,GACN,QAASC,GACT,GAAMC,GACN,GAAMC,GACN,GAAMC,GACN,QAASC,GACT,GAAMC,GACN,QAASC,GACT,SAAUC,GACV,GAAMC,GACN,QAASC,GACT,GAAMC,I,y7u4BCxCR,IACEI,EACAC,EACAC,GACAC,GACAC,GCaF,CACE,GAAM5B,GACN,Q,qx0BACA,GAAMC,GACN,GAAMC,GACN,QAASC,GACT,GAAMC,GACN,GAAMC,GACN,GAAMiB,GACN,GAAMhB,GACN,QAASC,GACT,QAASC,GACT,GAAMC,GACN,QAASC,GACT,GAAMC,GACN,GAAMC,GACN,GAAMC,GACN,QAASC,GACT,GAAMC,GACN,QAASC,GACT,SAAUC,GACV,GAAMC,GACN,QAASC,GACT,GAAMI,GACN,GAAMH,K,yCCxCRS,EAAAA,EAAAA,IAAUC,EAAAA,IAAW,KACnBC,EAAAA,QACExmE,EAAAA,GAAAA,KAACymE,GAAAA,EAAG,IACJ9pE,SAASC,eAAe,QACzB,KAGH0pE,EAAAA,EAAAA,IAAUI,EAAAA,IAAiB78D,IACzB28D,EAAAA,QAAgBxmE,EAAAA,GAAAA,KAAC2mE,GAAAA,EAAS,CAACvuD,QAASvO,EAAMuO,UAAazb,SAASC,eAAe,QAAQ,KAGzFgqE,EAAAA,EAAAA,IAAW,CACTC,0BA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","sources":["webpack://@edx/frontend-app-learning/./src/alerts/access-expiration-alert/hooks.js","webpack://@edx/frontend-app-learning/./src/alerts/active-enteprise-alert/hooks.js","webpack://@edx/frontend-app-learning/./src/alerts/active-enteprise-alert/index.js","webpack://@edx/frontend-app-learning/./src/alerts/course-start-alert/hooks.js","webpack://@edx/frontend-app-learning/./src/alerts/enrollment-alert/hooks.js","webpack://@edx/frontend-app-learning/./src/alerts/logistration-alert/hooks.js","webpack://@edx/frontend-app-learning/./src/alerts/sequence-alerts/messages.js","webpack://@edx/frontend-app-learning/./src/alerts/sequence-alerts/hooks.js","webpack://@edx/frontend-app-learning/./src/constants.js","webpack://@edx/frontend-app-learning/./src/course-home/courseware-search/hooks.js","webpack://@edx/frontend-app-learning/./src/course-home/courseware-search/messages.js","webpack://@edx/frontend-app-learning/./src/course-home/courseware-search/CoursewareSearchToggle.jsx","webpack://@edx/frontend-app-learning/./src/course-home/courseware-search/CoursewareSearchForm.jsx","webpack://@edx/frontend-app-learning/./src/course-home/courseware-search/CoursewareSearchEmpty.jsx","webpack://@edx/frontend-app-learning/./src/course-home/courseware-search/CoursewareSearchResults.jsx","webpack://@edx/frontend-app-learning/./src/course-home/courseware-search/CoursewareResultsFilter.jsx","webpack://@edx/frontend-app-learning/./src/course-home/courseware-search/CoursewareSearch.jsx","webpack://@edx/frontend-app-learning/./src/course-home/data/api.js","webpack://@edx/frontend-app-learning/./src/course-home/data/slice.js","webpack://@edx/frontend-app-learning/./src/course-home/courseware-search/map-search-response.js","webpack://@edx/frontend-app-learning/./src/course-home/data/thunks.js","webpack://@edx/frontend-app-learning/./src/course-home/goal-unsubscribe/messages.js","webpack://@edx/frontend-app-learning/./src/course-home/outline-tab/alerts/certificate-status-alert/messages.js","webpack://@edx/frontend-app-learning/./src/course-home/outline-tab/alerts/course-end-alert/hooks.js","webpack://@edx/frontend-app-learning/./src/course-home/outline-tab/alerts/scheduled-content-alert/hooks.js","webpack://@edx/frontend-app-learning/./src/course-home/outline-tab/messages.js","webpack://@edx/frontend-app-learning/./src/course-home/progress-tab/certificate-status/messages.js","webpack://@edx/frontend-app-learning/./src/course-home/progress-tab/grades/messages.js","webpack://@edx/frontend-app-learning/./src/course-home/suggested-schedule-messaging/messages.js","webpack://@edx/frontend-app-learning/./src/course-tabs/messages.js","webpack://@edx/frontend-app-learning/./src/courseware/course/celebration/assets/claps_280x201.gif","webpack://@edx/frontend-app-learning/./src/courseware/course/celebration/assets/claps_456x328.gif","webpack://@edx/frontend-app-learning/./src/courseware/course/celebration/messages.js","webpack://@edx/frontend-app-learning/./src/courseware/course/celebration/data/api.js","webpack://@edx/frontend-app-learning/./src/courseware/course/celebration/utils.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/celebration/CelebrationModal.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/celebration/assets/target.svg","webpack://@edx/frontend-app-learning/./src/courseware/course/celebration/WeeklyGoalCelebrationModal.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/content-tools/calculator/messages.js","webpack://@edx/frontend-app-learning/./src/courseware/course/content-tools/calculator/Calculator.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/content-tools/calculator/index.js","webpack://@edx/frontend-app-learning/./src/courseware/course/content-tools/notes-visibility/messages.js","webpack://@edx/frontend-app-learning/./src/courseware/course/content-tools/notes-visibility/NotesVisibility.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/content-tools/notes-visibility/index.js","webpack://@edx/frontend-app-learning/./src/courseware/course/content-tools/ContentTools.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/content-tools/index.js","webpack://@edx/frontend-app-learning/./src/courseware/course/course-exit/data/slice.js","webpack://@edx/frontend-app-learning/./src/courseware/course/course-exit/data/thunks.js","webpack://@edx/frontend-app-learning/./src/courseware/course/course-exit/data/api.js","webpack://@edx/frontend-app-learning/./src/courseware/course/course-exit/messages.js","webpack://@edx/frontend-app-learning/./src/courseware/course/course-exit/utils.js","webpack://@edx/frontend-app-learning/./src/courseware/course/course-license/messages.js","webpack://@edx/frontend-app-learning/./src/courseware/course/messages.js","webpack://@edx/frontend-app-learning/./src/courseware/course/new-sidebar/SidebarContext.js","webpack://@edx/frontend-app-learning/./src/courseware/course/new-sidebar/messages.js","webpack://@edx/frontend-app-learning/./src/courseware/course/new-sidebar/common/SidebarBase.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/new-sidebar/sidebars/discussions-notifications/discussions/DiscussionsWidget.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/new-sidebar/sidebars/discussions-notifications/notifications/NotificationsWidget.jsx","webpack://@edx/frontend-app-learning/./src/data/sessionStorage.js","webpack://@edx/frontend-app-learning/./src/courseware/course/new-sidebar/icons/RightSidebarFilled.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/new-sidebar/icons/RightSidebarOutlined.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/new-sidebar/sidebars/discussions-notifications/DiscussionsNotificationsTrigger.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/new-sidebar/sidebars/index.js","webpack://@edx/frontend-app-learning/./src/courseware/course/new-sidebar/sidebars/discussions-notifications/DiscussionsNotificationsSidebar.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/sequence/Unit/constants.js","webpack://@edx/frontend-app-learning/./src/courseware/course/sequence/Unit/hooks/useExamAccess.js","webpack://@edx/frontend-app-learning/./src/courseware/course/sequence/Unit/hooks/useLoadBearingHook.js","webpack://@edx/frontend-app-learning/./src/courseware/course/sequence/Unit/hooks/useIFrameBehavior.js","webpack://@edx/frontend-app-learning/./src/courseware/course/sequence/Unit/hooks/useModalIFrameData.js","webpack://@edx/frontend-app-learning/./src/courseware/course/sequence/Unit/hooks/useShouldDisplayHonorCode.js","webpack://@edx/frontend-app-learning/./src/courseware/course/sequence/Unit/urls.js","webpack://@edx/frontend-app-learning/./src/courseware/course/sequence/hidden-after-due/messages.js","webpack://@edx/frontend-app-learning/./src/courseware/course/sequence/hidden-after-due/HiddenAfterDue.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/sequence/messages.js","webpack://@edx/frontend-app-learning/./src/courseware/course/course-exit/GymCourseCelebration.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/course-exit/GymCourseExit.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/sequence/sequence-navigation/UnitIcon.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/sequence/sequence-navigation/CompleteIcon.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/sequence/sequence-navigation/UnitButton.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/sequence/sequence-navigation/SequenceNavigationDropdown.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/sequence/sequence-navigation/hooks.js","webpack://@edx/frontend-app-learning/./src/courseware/course/sequence/sequence-navigation/SequenceNavigationTabs.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/sequence/sequence-navigation/messages.js","webpack://@edx/frontend-app-learning/./src/courseware/course/sequence/sequence-navigation/SequenceNavigation.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/sequence/sequence-navigation/UnitNavigationEffortEstimate.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/sequence/sequence-navigation/UnitNavigation.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/sidebar/SidebarContext.js","webpack://@edx/frontend-app-learning/./src/courseware/course/sidebar/sidebars/course-outline/constants.js","webpack://@edx/frontend-app-learning/./src/courseware/course/sidebar/sidebars/course-outline/messages.js","webpack://@edx/frontend-app-learning/./src/courseware/course/sidebar/sidebars/discussions/messages.js","webpack://@edx/frontend-app-learning/./src/courseware/course/sidebar/sidebars/discussions/DiscussionsTrigger.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/sidebar/sidebars/discussions/DiscussionsSidebar.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/sidebar/sidebars/index.js","webpack://@edx/frontend-app-learning/./src/courseware/course/sidebar/sidebars/notifications/NotificationIcon.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/sidebar/sidebars/notifications/NotificationTrigger.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/sidebar/sidebars/notifications/NotificationTray.jsx","webpack://@edx/frontend-app-learning/./src/courseware/data/api.js","webpack://@edx/frontend-app-learning/./src/courseware/data/utils.js","webpack://@edx/frontend-app-learning/./src/courseware/data/selectors.js","webpack://@edx/frontend-app-learning/./src/courseware/data/slice.js","webpack://@edx/frontend-app-learning/./src/courseware/data/thunks.js","webpack://@edx/frontend-app-learning/./src/data/localStorage.js","webpack://@edx/frontend-app-learning/./src/generic/hooks.js","webpack://@edx/frontend-app-learning/./src/generic/messages.js","webpack://@edx/frontend-app-learning/./src/generic/model-store/slice.js","webpack://@edx/frontend-app-learning/./src/generic/model-store/hooks.js","webpack://@edx/frontend-app-learning/./src/generic/notices/NoticesProvider.jsx","webpack://@edx/frontend-app-learning/./src/generic/notices/api.js","webpack://@edx/frontend-app-learning/./src/generic/path-fixes/PathFixesProvider.jsx","webpack://@edx/frontend-app-learning/./src/generic/plugin-store/slice.js","webpack://@edx/frontend-app-learning/./src/generic/plugin-store/hooks.js","webpack://@edx/frontend-app-learning/./src/generic/tabs/useIndexOfLastVisibleChild.js","webpack://@edx/frontend-app-learning/./src/generic/upgrade-button/messages.js","webpack://@edx/frontend-app-learning/./src/generic/upgrade-button/FormattedPricing.jsx","webpack://@edx/frontend-app-learning/./src/generic/upgrade-button/UpgradeButton.jsx","webpack://@edx/frontend-app-learning/./src/generic/upgrade-button/UpgradeNowButton.jsx","webpack://@edx/frontend-app-learning/./src/generic/user-messages/UserMessagesContext.js","webpack://@edx/frontend-app-learning/./src/generic/user-messages/AlertList.jsx","webpack://@edx/frontend-app-learning/./src/generic/user-messages/hooks.js","webpack://@edx/frontend-app-learning/./src/instructor-toolbar/masquerade-widget/data/api.js","webpack://@edx/frontend-app-learning/./src/instructor-toolbar/masquerade-widget/messages.js","webpack://@edx/frontend-app-learning/./src/product-tours/data/api.js","webpack://@edx/frontend-app-learning/./src/product-tours/data/thunks.js","webpack://@edx/frontend-app-learning/./src/product-tours/data/slice.js","webpack://@edx/frontend-app-learning/./src/product-tours/messages.js","webpack://@edx/frontend-app-learning/./src/shared/access.js","webpack://@edx/frontend-app-learning/./src/shared/effort-estimate/messages.js","webpack://@edx/frontend-app-learning/./src/shared/effort-estimate/EffortEstimate.jsx","webpack://@edx/frontend-app-learning/./src/shared/effort-estimate/index.js","webpack://@edx/frontend-app-learning/./src/shared/streak-celebration/assets/Streak_mobile.png","webpack://@edx/frontend-app-learning/./src/shared/streak-celebration/assets/Streak_desktop.png","webpack://@edx/frontend-app-learning/./src/shared/streak-celebration/messages.js","webpack://@edx/frontend-app-learning/./src/shared/streak-celebration/StreakCelebrationModal.jsx","webpack://@edx/frontend-app-learning/./src/shared/streak-celebration/utils.jsx","webpack://@edx/frontend-app-learning/./src/store.js","webpack://@edx/frontend-app-learning/./src/tab-page/messages.js","webpack://@edx/frontend-app-learning/./src/utils.js","webpack://@edx/frontend-app-learning/./src/alerts/logistration-alert/messages.js","webpack://@edx/frontend-app-learning/./src/alerts/logistration-alert/AccountActivationAlert.jsx","webpack://@edx/frontend-app-learning/./src/course-home/dates-tab/messages.js","webpack://@edx/frontend-app-learning/./src/course-home/dates-tab/timeline/badgelist.jsx","webpack://@edx/frontend-app-learning/./src/course-home/dates-tab/timeline/Day.jsx","webpack://@edx/frontend-app-learning/./src/course-home/dates-tab/timeline/Timeline.jsx","webpack://@edx/frontend-app-learning/./src/course-home/suggested-schedule-messaging/SuggestedScheduleHeader.jsx","webpack://@edx/frontend-app-learning/./src/course-home/suggested-schedule-messaging/UpgradeToCompleteAlert.jsx","webpack://@edx/frontend-app-learning/./src/course-home/dates-tab/DatesTab.jsx","webpack://@edx/frontend-app-learning/./src/course-home/dates-tab/index.jsx","webpack://@edx/frontend-app-learning/./src/course-home/dates-tab/utils.jsx","webpack://@edx/frontend-app-learning/./src/course-home/discussion-tab/DiscussionTab.jsx","webpack://@edx/frontend-app-learning/./src/course-home/goal-unsubscribe/unsubscribe.svg","webpack://@edx/frontend-app-learning/./src/course-home/goal-unsubscribe/ResultPage.jsx","webpack://@edx/frontend-app-learning/./src/course-home/live-tab/LiveTab.jsx","webpack://@edx/frontend-app-learning/./src/course-home/outline-tab/SequenceLink.jsx","webpack://@edx/frontend-app-learning/./src/course-home/outline-tab/Section.jsx","webpack://@edx/frontend-app-learning/./src/course-home/outline-tab/widgets/flag_black.svg","webpack://@edx/frontend-app-learning/./src/course-home/outline-tab/widgets/flag_outline.svg","webpack://@edx/frontend-app-learning/./src/course-home/outline-tab/widgets/flag_gray.svg","webpack://@edx/frontend-app-learning/./src/course-home/outline-tab/widgets/FlagButton.jsx","webpack://@edx/frontend-app-learning/./src/course-home/outline-tab/widgets/LearningGoalButton.jsx","webpack://@edx/frontend-app-learning/./src/course-home/outline-tab/widgets/ProctoringInfoPanel.jsx","webpack://@edx/frontend-app-learning/./src/course-home/progress-tab/messages.js","webpack://@edx/frontend-app-learning/./src/course-home/progress-tab/ProgressHeader.jsx","webpack://@edx/frontend-app-learning/./src/course-home/progress-tab/course-completion/messages.js","webpack://@edx/frontend-app-learning/./src/course-home/progress-tab/course-completion/CompleteDonutSegment.jsx","webpack://@edx/frontend-app-learning/./src/course-home/progress-tab/course-completion/IncompleteDonutSegment.jsx","webpack://@edx/frontend-app-learning/./src/course-home/progress-tab/course-completion/LockedDonutSegment.jsx","webpack://@edx/frontend-app-learning/./src/course-home/progress-tab/course-completion/CompletionDonutChart.jsx","webpack://@edx/frontend-app-learning/./src/course-home/progress-tab/course-completion/CourseCompletion.jsx","webpack://@edx/frontend-app-learning/./src/course-home/progress-tab/grades/course-grade/GradeRangeTooltip.jsx","webpack://@edx/frontend-app-learning/./src/course-home/progress-tab/grades/course-grade/CourseGradeFooter.jsx","webpack://@edx/frontend-app-learning/./src/course-home/progress-tab/grades/course-grade/CourseGradeHeader.jsx","webpack://@edx/frontend-app-learning/./src/course-home/progress-tab/grades/course-grade/CurrentGradeTooltip.jsx","webpack://@edx/frontend-app-learning/./src/course-home/progress-tab/grades/course-grade/PassingGradeTooltip.jsx","webpack://@edx/frontend-app-learning/./src/course-home/progress-tab/grades/course-grade/GradeBar.jsx","webpack://@edx/frontend-app-learning/./src/course-home/progress-tab/credit-information/messages.js","webpack://@edx/frontend-app-learning/./src/course-home/progress-tab/credit-information/CreditInformation.jsx","webpack://@edx/frontend-app-learning/./src/course-home/progress-tab/grades/course-grade/CourseGrade.jsx","webpack://@edx/frontend-app-learning/./src/course-home/progress-tab/grades/detailed-grades/ProblemScoreDrawer.jsx","webpack://@edx/frontend-app-learning/./src/course-home/progress-tab/grades/detailed-grades/SubsectionTitleCell.jsx","webpack://@edx/frontend-app-learning/./src/course-home/progress-tab/grades/detailed-grades/DetailedGradesTable.jsx","webpack://@edx/frontend-app-learning/./src/course-home/progress-tab/grades/detailed-grades/DetailedGrades.jsx","webpack://@edx/frontend-app-learning/./src/course-home/progress-tab/grades/grade-summary/GradeSummaryHeader.jsx","webpack://@edx/frontend-app-learning/./src/course-home/progress-tab/grades/grade-summary/AssignmentTypeCell.jsx","webpack://@edx/frontend-app-learning/./src/course-home/progress-tab/grades/grade-summary/DroppableAssignmentFootnote.jsx","webpack://@edx/frontend-app-learning/./src/course-home/progress-tab/grades/grade-summary/GradeSummaryTableFooter.jsx","webpack://@edx/frontend-app-learning/./src/course-home/progress-tab/grades/grade-summary/GradeSummaryTable.jsx","webpack://@edx/frontend-app-learning/./src/course-home/progress-tab/grades/grade-summary/GradeSummary.jsx","webpack://@edx/frontend-app-learning/./src/course-home/progress-tab/related-links/messages.js","webpack://@edx/frontend-app-learning/./src/course-home/progress-tab/related-links/RelatedLinks.jsx","webpack://@edx/frontend-app-learning/./src/course-home/suggested-schedule-messaging/ShiftDatesAlert.jsx","webpack://@edx/frontend-app-learning/./src/course-home/suggested-schedule-messaging/UpgradeToShiftDatesAlert.jsx","webpack://@edx/frontend-app-learning/./src/courseware/RedirectPage.jsx","webpack://@edx/frontend-app-learning/./src/courseware/CoursewareRedirectLandingPage.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/JumpNavMenuItem.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/CourseBreadcrumbs.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/bookmark/BookmarkOutlineIcon.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/bookmark/data/api.js","webpack://@edx/frontend-app-learning/./src/courseware/course/bookmark/BookmarkButton.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/bookmark/data/thunks.js","webpack://@edx/frontend-app-learning/./src/courseware/course/bookmark/BookmarkFilledIcon.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/chat/Chat.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/course-exit/CatalogSuggestion.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/course-exit/CourseInProgress.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/course-exit/CourseNonPassing.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/course-exit/CourseRecommendations.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/course-exit/DashboardFootnote.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/course-exit/Footnote.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/course-exit/ProgramCompletion.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/course-exit/UpgradeFootnote.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/new-sidebar/Sidebar.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/new-sidebar/SidebarContextProvider.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/new-sidebar/SidebarTriggers.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/sequence/honor-code/messages.js","webpack://@edx/frontend-app-learning/./src/courseware/course/sequence/honor-code/HonorCode.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/sequence/lock-paywall/messages.js","webpack://@edx/frontend-app-learning/./src/courseware/course/sequence/lock-paywall/LockPaywall.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/sequence/Unit/UnitSuspense.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/sidebar/Sidebar.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/sidebar/SidebarContextProvider.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/sidebar/SidebarTriggers.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/sidebar/common/SidebarBase.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/sidebar/common/TriggerBase.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/sidebar/sidebars/course-outline/icons/DashedCircleIcon.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/sidebar/sidebars/course-outline/components/CompletionIcon.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/sidebar/sidebars/course-outline/components/SidebarSection.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/sidebar/sidebars/course-outline/components/SidebarUnit.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/sidebar/sidebars/course-outline/components/UnitIcon.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/sidebar/sidebars/course-outline/hooks.jsx","webpack://@edx/frontend-app-learning/./src/courseware/social-share/messages.js","webpack://@edx/frontend-app-learning/./src/courseware/social-share/SocialIcons.jsx","webpack://@edx/frontend-app-learning/./src/courseware/utils.jsx","webpack://@edx/frontend-app-learning/./src/decode-page-route/index.jsx","webpack://@edx/frontend-app-learning/./src/generic/PageLoading.jsx","webpack://@edx/frontend-app-learning/./src/generic/tabs/Tabs.jsx","webpack://@edx/frontend-app-learning/./src/generic/upgrade-notification/UpgradeNotification.jsx","webpack://@edx/frontend-app-learning/./src/generic/upsell-bullets/UpsellBullets.jsx","webpack://@edx/frontend-app-learning/./src/generic/user-messages/Alert.jsx","webpack://@edx/frontend-app-learning/./src/generic/user-messages/UserMessagesProvider.jsx","webpack://@edx/frontend-app-learning/./src/i18n/messages/frontend-platform/index.js","webpack://@edx/frontend-app-learning/./src/i18n/messages/paragon/index.js","webpack://@edx/frontend-app-learning/./src/i18n/messages/frontend-component-header/index.js","webpack://@edx/frontend-app-learning/./src/i18n/messages/frontend-component-footer/index.js","webpack://@edx/frontend-app-learning/./src/i18n/messages/frontend-lib-special-exams/index.js","webpack://@edx/frontend-app-learning/./src/i18n/index.js","webpack://@edx/frontend-app-learning/./src/i18n/messages/frontend-app-learning/index.js","webpack://@edx/frontend-app-learning/./src/index.jsx","webpack://@edx/frontend-app-learning/./src/instructor-toolbar/masquerade-widget/MasqueradeUserNameInput.jsx","webpack://@edx/frontend-app-learning/./src/instructor-toolbar/masquerade-widget/MasqueradeWidgetOption.jsx","webpack://@edx/frontend-app-learning/./src/plugin-slots/SequenceContainerSlot/index.jsx","webpack://@edx/frontend-app-learning/./src/plugin-slots/UnitTitleSlot/index.jsx","webpack://@edx/frontend-app-learning/./src/preferences-unsubscribe/messages.js","webpack://@edx/frontend-app-learning/./src/preferences-unsubscribe/index.jsx","webpack://@edx/frontend-app-learning/./src/preferences-unsubscribe/data/api.js","webpack://@edx/frontend-app-learning/./src/product-tours/GenericTourFormattedMessages.jsx","webpack://@edx/frontend-app-learning/./src/product-tours/AbandonTour.jsx","webpack://@edx/frontend-app-learning/./src/product-tours/CoursewareTour.jsx","webpack://@edx/frontend-app-learning/./src/product-tours/ExistingUserCourseHomeTour.jsx","webpack://@edx/frontend-app-learning/./src/product-tours/newUserCourseHomeTour/NewUserCourseHomeTour.jsx","webpack://@edx/frontend-app-learning/./src/product-tours/newUserCourseHomeTour/course_home_tour_modal_hero.png","webpack://@edx/frontend-app-learning/./src/product-tours/newUserCourseHomeTour/NewUserCourseHomeTourModal.jsx","webpack://@edx/frontend-app-learning/./src/product-tours/ProductTours.jsx","webpack://@edx/frontend-app-learning/./src/product-tours/newUserCourseHomeTour/LaunchCourseHomeTourButton.jsx","webpack://@edx/frontend-app-learning/./src/shared/links.jsx","webpack://@edx/frontend-app-learning/./src/courseware/course/course-exit/assets/celebration_456x328.gif","webpack://@edx/frontend-app-learning/./src/courseware/course/course-exit/assets/celebration_750x540.gif","webpack://@edx/frontend-app-learning/./src/generic/assets/edX_certificate.png","webpack://@edx/frontend-app-learning/./src/generic/assets/edX_locked_certificate.png"],"sourcesContent":["import React, { useMemo } from 'react';\nimport { useAlert } from '../../generic/user-messages';\nimport { useModel } from '../../generic/model-store';\n\nconst AccessExpirationAlert = React.lazy(() => import('./AccessExpirationAlert'));\nconst AccessExpirationMasqueradeBanner = React.lazy(() => import('./AccessExpirationMasqueradeBanner'));\n\nfunction useAccessExpirationAlert(accessExpiration, courseId, org, userTimezone, topic, analyticsPageName) {\n const isVisible = accessExpiration && !accessExpiration.masqueradingExpiredCourse; // If it exists, show it.\n const payload = useMemo(() => ({\n accessExpiration,\n courseId,\n org,\n userTimezone,\n analyticsPageName,\n }), [accessExpiration, analyticsPageName, courseId, org, userTimezone]);\n\n useAlert(isVisible, {\n code: 'clientAccessExpirationAlert',\n payload,\n topic,\n });\n\n return { clientAccessExpirationAlert: AccessExpirationAlert };\n}\n\nexport function useAccessExpirationMasqueradeBanner(courseId, tab) {\n const {\n userTimezone,\n } = useModel('courseHomeMeta', courseId);\n const {\n accessExpiration,\n } = useModel(tab, courseId);\n\n const isVisible = accessExpiration && accessExpiration.masqueradingExpiredCourse;\n const expirationDate = accessExpiration && accessExpiration.expirationDate;\n const payload = useMemo(() => ({\n expirationDate,\n userTimezone,\n }), [expirationDate, userTimezone]);\n\n useAlert(isVisible, {\n code: 'clientAccessExpirationMasqueradeBanner',\n payload,\n topic: 'instructor-toolbar-alerts',\n });\n\n return { clientAccessExpirationMasqueradeBanner: AccessExpirationMasqueradeBanner };\n}\n\nexport default useAccessExpirationAlert;\n","import React, { useMemo } from 'react';\nimport { ALERT_TYPES, useAlert } from '../../generic/user-messages';\nimport { useModel } from '../../generic/model-store';\n\nconst ActiveEnterpriseAlert = React.lazy(() => import('./ActiveEnterpriseAlert'));\n\nexport default function useActiveEnterpriseAlert(courseId) {\n const { courseAccess } = useModel('courseHomeMeta', courseId);\n /**\n * This alert should render if\n * 1. course access code is incorrect_active_enterprise\n */\n const isVisible = courseAccess && !courseAccess.hasAccess && courseAccess.errorCode === 'incorrect_active_enterprise';\n\n const payload = useMemo(() => ({\n text: courseAccess && courseAccess.userMessage,\n courseId,\n }), [courseAccess, courseId]);\n useAlert(isVisible, {\n code: 'clientActiveEnterpriseAlert',\n topic: 'outline',\n dismissible: false,\n type: ALERT_TYPES.ERROR,\n payload,\n });\n\n return { clientActiveEnterpriseAlert: ActiveEnterpriseAlert };\n}\n","import useActiveEnterpriseAlert from './hooks';\n\nexport default useActiveEnterpriseAlert;\n","import React, { useMemo } from 'react';\nimport { useAlert } from '../../generic/user-messages';\nimport { useModel } from '../../generic/model-store';\n\nconst CourseStartAlert = React.lazy(() => import('./CourseStartAlert'));\nconst CourseStartMasqueradeBanner = React.lazy(() => import('./CourseStartMasqueradeBanner'));\n\nfunction IsStartDateInFuture(courseId) {\n const {\n start,\n } = useModel('courseHomeMeta', courseId);\n\n const today = new Date();\n const startDate = new Date(start);\n return startDate > today;\n}\n\nfunction useCourseStartAlert(courseId) {\n const {\n isEnrolled,\n } = useModel('courseHomeMeta', courseId);\n\n const isVisible = isEnrolled && IsStartDateInFuture(courseId);\n\n const payload = useMemo(() => ({\n courseId,\n }), [courseId]);\n\n useAlert(isVisible, {\n code: 'clientCourseStartAlert',\n payload,\n topic: 'outline-course-alerts',\n });\n\n return {\n clientCourseStartAlert: CourseStartAlert,\n };\n}\n\nexport function useCourseStartMasqueradeBanner(courseId, tab) {\n const {\n isMasquerading,\n } = useModel('courseHomeMeta', courseId);\n\n const isVisible = isMasquerading && tab === 'progress' && IsStartDateInFuture(courseId);\n\n const payload = useMemo(() => ({\n courseId,\n }), [courseId]);\n\n useAlert(isVisible, {\n code: 'clientCourseStartMasqueradeBanner',\n payload,\n topic: 'instructor-toolbar-alerts',\n });\n\n return {\n clientCourseStartMasqueradeBanner: CourseStartMasqueradeBanner,\n };\n}\n\nexport default useCourseStartAlert;\n","/* eslint-disable import/prefer-default-export */\nimport React, {\n useContext, useMemo,\n} from 'react';\nimport { AppContext } from '@edx/frontend-platform/react';\n\nimport { useAlert } from '@src/generic/user-messages';\nimport { useModel } from '@src/generic/model-store';\n\nconst EnrollmentAlert = React.lazy(() => import('./EnrollmentAlert'));\n\nexport function useEnrollmentAlert(courseId) {\n const { authenticatedUser } = useContext(AppContext);\n const course = useModel('courseHomeMeta', courseId);\n const outline = useModel('outline', courseId);\n const enrolledUser = course && course.isEnrolled !== undefined && course.isEnrolled;\n const privateOutline = outline && outline.courseBlocks && !outline.courseBlocks.courses;\n /**\n * This alert should render if\n * 1. the user is not enrolled,\n * 2. the user is authenticated, AND\n * 3. the course is private.\n */\n const isVisible = !enrolledUser && authenticatedUser !== null && privateOutline;\n const payload = useMemo(() => ({\n canEnroll: outline && outline.enrollAlert ? outline.enrollAlert.canEnroll : false,\n courseId,\n extraText: outline && outline.enrollAlert ? outline.enrollAlert.extraText : '',\n isStaff: course && course.isStaff,\n }), [course, courseId, outline]);\n\n useAlert(isVisible, {\n code: 'clientEnrollmentAlert',\n payload,\n topic: 'outline',\n });\n\n return { clientEnrollmentAlert: EnrollmentAlert };\n}\n","/* eslint-disable import/prefer-default-export */\nimport React, { useContext } from 'react';\nimport { AppContext } from '@edx/frontend-platform/react';\nimport { ALERT_TYPES, useAlert } from '../../generic/user-messages';\nimport { useModel } from '../../generic/model-store';\n\nconst LogistrationAlert = React.lazy(() => import('./LogistrationAlert'));\n\nexport function useLogistrationAlert(courseId) {\n const { authenticatedUser } = useContext(AppContext);\n const outline = useModel('outline', courseId);\n const privateOutline = outline && outline.courseBlocks && !outline.courseBlocks.courses;\n /**\n * This alert should render if\n * 1. the user is not authenticated, AND\n * 2. the course is private.\n */\n const isVisible = authenticatedUser === null && privateOutline;\n\n useAlert(isVisible, {\n code: 'clientLogistrationAlert',\n topic: 'outline',\n dismissible: false,\n type: ALERT_TYPES.ERROR,\n });\n\n return { clientLogistrationAlert: LogistrationAlert };\n}\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n entranceExamTextNotPassing: {\n id: 'learn.sequence.entranceExamTextNotPassing',\n defaultMessage: 'To access course materials, you must score {entranceExamMinimumScorePct}% or higher on this exam. Your current score is {entranceExamCurrentScore}%.',\n },\n entranceExamTextPassed: {\n id: 'learn.sequence.entranceExamTextPassed',\n defaultMessage: 'Your score is {entranceExamCurrentScore}%. You have passed the entrance exam.',\n },\n});\n\nexport default messages;\n","import { useSelector } from 'react-redux';\n\nimport { useModel } from '../../generic/model-store';\nimport { ALERT_TYPES, useAlert } from '../../generic/user-messages';\n\nimport messages from './messages';\n\nfunction useSequenceBannerTextAlert(sequenceId) {\n const sequence = useModel('sequences', sequenceId);\n const sequenceStatus = useSelector(state => state.courseware.sequenceStatus);\n\n // Show Alert that comes along with the sequence\n useAlert(sequenceStatus === 'loaded' && sequence.bannerText, {\n code: null,\n dismissible: false,\n text: sequence.bannerText,\n type: ALERT_TYPES.INFO,\n topic: 'sequence',\n });\n}\n\nfunction useSequenceEntranceExamAlert(courseId, sequenceId, intl) {\n const course = useModel('coursewareMeta', courseId);\n const sequence = useModel('sequences', sequenceId);\n const sequenceStatus = useSelector(state => state.courseware.sequenceStatus);\n const {\n entranceExamCurrentScore,\n entranceExamEnabled,\n entranceExamId,\n entranceExamMinimumScorePct,\n entranceExamPassed,\n } = course.entranceExamData || {};\n const entranceExamAlertVisible = sequenceStatus === 'loaded' && entranceExamEnabled && entranceExamId === sequence.sectionId;\n let entranceExamText;\n\n if (entranceExamPassed) {\n entranceExamText = intl.formatMessage(\n messages.entranceExamTextPassed,\n { entranceExamCurrentScore: entranceExamCurrentScore * 100 },\n );\n } else {\n entranceExamText = intl.formatMessage(messages.entranceExamTextNotPassing, {\n entranceExamCurrentScore: entranceExamCurrentScore * 100,\n entranceExamMinimumScorePct: entranceExamMinimumScorePct * 100,\n });\n }\n\n useAlert(entranceExamAlertVisible, {\n code: null,\n dismissible: false,\n text: entranceExamText,\n type: ALERT_TYPES.INFO,\n topic: 'sequence',\n });\n}\n\nexport { useSequenceBannerTextAlert, useSequenceEntranceExamAlert };\n","export const DECODE_ROUTES = {\n ACCESS_DENIED: '/course/:courseId/access-denied',\n HOME: '/course/:courseId/home',\n LIVE: '/course/:courseId/live',\n DATES: '/course/:courseId/dates',\n DISCUSSION: '/course/:courseId/discussion/:path/*',\n PROGRESS: [\n '/course/:courseId/progress/:targetUserId/',\n '/course/:courseId/progress',\n ],\n COURSE_END: '/course/:courseId/course-end',\n COURSEWARE: [\n '/course/:courseId/:sequenceId/:unitId',\n '/course/:courseId/:sequenceId',\n '/course/:courseId',\n ],\n REDIRECT_HOME: 'home/:courseId',\n REDIRECT_SURVEY: 'survey/:courseId',\n};\n\nexport const ROUTES = {\n UNSUBSCRIBE: '/goal-unsubscribe/:token',\n PREFERENCES_UNSUBSCRIBE: '/preferences-unsubscribe/:userToken/:updatePatch',\n REDIRECT: '/redirect/*',\n DASHBOARD: 'dashboard',\n ENTERPRISE_LEARNER_DASHBOARD: 'enterprise-learner-dashboard',\n CONSENT: 'consent',\n};\n\nexport const REDIRECT_MODES = {\n DASHBOARD_REDIRECT: 'dashboard-redirect',\n ENTERPRISE_LEARNER_DASHBOARD_REDIRECT: 'enterprise-learner-dashboard-redirect',\n CONSENT_REDIRECT: 'consent-redirect',\n HOME_REDIRECT: 'home-redirect',\n SURVEY_REDIRECT: 'survey-redirect',\n};\n\nexport const VERIFIED_MODES = [\n 'professional',\n 'verified',\n 'no-id-professional',\n 'credit',\n 'masters',\n 'executive-education',\n 'paid-executive-education',\n 'paid-bootcamp',\n];\n\nexport const WIDGETS = {\n DISCUSSIONS: 'DISCUSSIONS',\n NOTIFICATIONS: 'NOTIFICATIONS',\n};\n\nexport const LOADING = 'loading';\nexport const LOADED = 'loaded';\nexport const FAILED = 'failed';\nexport const DENIED = 'denied';\n","import { useState, useEffect, useLayoutEffect } from 'react';\nimport { useParams, useSearchParams } from 'react-router-dom';\nimport { useSelector } from 'react-redux';\nimport { debounce } from 'lodash';\nimport { fetchCoursewareSearchSettings } from '../data/thunks';\n\nconst DEBOUNCE_WAIT = 100; // ms\n\nexport function useCoursewareSearchFeatureFlag() {\n const { courseId } = useParams();\n const [enabled, setEnabled] = useState(false);\n\n useEffect(() => {\n fetchCoursewareSearchSettings(courseId).then(response => setEnabled(response.enabled));\n }, [courseId]);\n\n return enabled;\n}\n\nexport function useCoursewareSearchState() {\n const enabled = useCoursewareSearchFeatureFlag();\n const show = useSelector(state => state.courseHome.showSearch);\n\n return { show: enabled && show };\n}\n\nexport function useElementBoundingBox(elementId) {\n const [info, setInfo] = useState(undefined);\n\n const element = document.getElementById(elementId);\n\n if (!element) {\n console.warn(`useElementBoundingBox(): Unable to find element with id='${elementId}' in the document.`); // eslint-disable-line no-console\n return undefined;\n }\n\n useLayoutEffect(() => {\n // Handler to call on window resize and scroll\n function recalculate() {\n const bounds = element.getBoundingClientRect();\n setInfo(bounds);\n }\n const debouncedRecalculate = debounce(recalculate, DEBOUNCE_WAIT, { leading: true });\n\n // Add event listener\n global.addEventListener('resize', debouncedRecalculate);\n global.addEventListener('scroll', debouncedRecalculate);\n\n // Call handler right away so state gets updated with initial window size\n debouncedRecalculate();\n\n // Remove event listener on cleanup\n return () => {\n global.removeEventListener('resize', debouncedRecalculate);\n global.removeEventListener('scroll', debouncedRecalculate);\n };\n }, []);\n\n return info;\n}\n\nexport function useLockScroll() {\n useLayoutEffect(() => {\n window.scrollTo(0, 0);\n document.body.classList.add('_search-no-scroll');\n\n return () => {\n document.body.classList.remove('_search-no-scroll');\n };\n }, []);\n}\n\nconst initSearchParams = { q: '', f: '' };\nexport function useCoursewareSearchParams() {\n const [searchParams, setSearchParams] = useSearchParams(initSearchParams);\n const clearSearchParams = () => setSearchParams(initSearchParams);\n\n const query = searchParams.get('q');\n const filter = searchParams.get('f')?.toLowerCase();\n\n const setQuery = (q) => setSearchParams((params) => ({ q, f: params.get('f') }));\n const setFilter = (f) => setSearchParams((params) => ({ q: params.get('q'), f }));\n\n return {\n query, filter, setQuery, setFilter, clearSearchParams,\n };\n}\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n searchOpenAction: {\n id: 'learn.coursewareSearch.openAction',\n defaultMessage: 'Search within this course',\n description: 'Aria-label for a button that will pop up Courseware Search.',\n },\n contentSearchButton: {\n id: 'learn.coursewareSearch.contentSearchButton',\n defaultMessage: 'Content search',\n description: 'Text for a button that will pop up Courseware Search.',\n },\n searchSubmitLabel: {\n id: 'learn.coursewareSearch.submitLabel',\n defaultMessage: 'Search',\n description: 'Button label that will submit Courseware Search.',\n },\n searchClearAction: {\n id: 'learn.coursewareSearch.clearAction',\n defaultMessage: 'Clear search',\n description: 'Button label that will the current Courseware Search input.',\n },\n searchCloseAction: {\n id: 'learn.coursewareSearch.closeAction',\n defaultMessage: 'Close the search form',\n description: 'Aria-label for a button that will close Courseware Search.',\n },\n searchModuleTitle: {\n id: 'learn.coursewareSearch.searchModuleTitle',\n defaultMessage: 'Search this course',\n description: 'Title for the Courseware Search module.',\n },\n searchBarPlaceholderText: {\n id: 'learn.coursewareSearch.searchBarPlaceholderText',\n defaultMessage: 'Search',\n description: 'Placeholder text for the Courseware Search input control',\n },\n loading: {\n id: 'learn.coursewareSearch.loading',\n defaultMessage: 'Searching...',\n description: 'Screen reader text to use on the spinner while the search is performing.',\n },\n searchResultsNone: {\n id: 'learn.coursewareSearch.searchResultsNone',\n defaultMessage: 'No results found.',\n description: 'Text to show when the Courseware Search found no results matching the criteria.',\n },\n searchResultsLabel: {\n id: 'learn.coursewareSearch.searchResultsLabel',\n defaultMessage: 'Results for \"{keyword}\":',\n description: 'Text to show above the search results response list.',\n },\n searchResultsError: {\n id: 'learn.coursewareSearch.searchResultsError',\n defaultMessage: 'There was an error on the search process. Please try again in a few minutes. If the problem persists, please contact the support team.',\n description: 'Error message to show to the users when there\\'s an error with the endpoint or the returned payload format.',\n },\n\n // These are translations for labeling the filters\n 'filter:all': {\n id: 'learn.coursewareSearch.filter:all',\n defaultMessage: 'All content',\n description: 'Label for the search results filter that shows all content (no filter).',\n },\n 'filter:text': {\n id: 'learn.coursewareSearch.filter:text',\n defaultMessage: 'Text',\n description: 'Label for the search results filter that shows results with text content.',\n },\n 'filter:video': {\n id: 'learn.coursewareSearch.filter:video',\n defaultMessage: 'Video',\n description: 'Label for the search results filter that shows results with video content.',\n },\n 'filter:sequence': {\n id: 'learn.coursewareSearch.filter:sequence',\n defaultMessage: 'Section',\n description: 'Label for the search results filter that shows results with section content.',\n },\n 'filter:other': {\n id: 'learn.coursewareSearch.filter:other',\n defaultMessage: 'Other',\n description: 'Label for the search results filter that shows results with other content.',\n },\n});\n\nexport default messages;\n","import React, { useEffect } from 'react';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Button } from '@openedx/paragon';\nimport { ManageSearch } from '@openedx/paragon/icons';\nimport { useDispatch } from 'react-redux';\nimport messages from './messages';\nimport { useCoursewareSearchFeatureFlag, useCoursewareSearchParams } from './hooks';\nimport { setShowSearch } from '../data/slice';\n\nconst CoursewareSearchToggle = ({\n intl,\n}) => {\n const dispatch = useDispatch();\n const enabled = useCoursewareSearchFeatureFlag();\n const { query } = useCoursewareSearchParams();\n\n const handleSearchOpenClick = () => {\n dispatch(setShowSearch(true));\n };\n\n useEffect(() => {\n if (enabled && !!query) { handleSearchOpenClick(); }\n }, [enabled]);\n\n if (!enabled) { return null; }\n\n return (\n
\n \n {intl.formatMessage(messages.contentSearchButton)}\n \n
\n );\n};\n\nCoursewareSearchToggle.propTypes = {\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(CoursewareSearchToggle);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { SearchField } from '@openedx/paragon';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport messages from './messages';\n\nconst CoursewareSearchForm = ({\n intl,\n searchTerm,\n onSubmit,\n onChange,\n placeholder,\n}) => (\n \n
\n \n \n \n
\n \n \n);\n\nCoursewareSearchForm.propTypes = {\n intl: intlShape.isRequired,\n searchTerm: PropTypes.string,\n onSubmit: PropTypes.func,\n onChange: PropTypes.func,\n placeholder: PropTypes.string,\n};\n\nCoursewareSearchForm.defaultProps = {\n searchTerm: undefined,\n onSubmit: undefined,\n onChange: undefined,\n placeholder: undefined,\n};\n\nexport default injectIntl(CoursewareSearchForm);\n","import React from 'react';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport messages from './messages';\n\nconst CoursewareSearchEmpty = ({ intl }) => (\n
\n

{intl.formatMessage(messages.searchResultsNone)}

\n
\n);\n\nCoursewareSearchEmpty.propTypes = {\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(CoursewareSearchEmpty);\n","import React from 'react';\nimport {\n Folder, TextFields, VideoCamera, Article,\n} from '@openedx/paragon/icons';\nimport { getConfig } from '@edx/frontend-platform';\nimport { Icon } from '@openedx/paragon';\nimport PropTypes from 'prop-types';\nimport CoursewareSearchEmpty from './CoursewareSearchEmpty';\n\nconst iconTypeMapping = {\n text: TextFields,\n video: VideoCamera,\n sequence: Folder,\n other: Article,\n};\n\nconst defaultIcon = Article;\n\nconst CoursewareSearchResults = ({ results = [] }) => {\n if (!results?.length) {\n return ;\n }\n\n const baseUrl = `${getConfig().LMS_BASE_URL}`;\n\n return (\n
\n {results.map(({\n id,\n title,\n type,\n location,\n url,\n contentHits,\n }) => {\n const key = type.toLowerCase();\n const icon = iconTypeMapping[key] || defaultIcon;\n const isExternal = !url.startsWith('/');\n const linkProps = isExternal ? {\n href: url,\n target: '_blank',\n rel: 'nofollow',\n } : { href: `${baseUrl}${url}` };\n\n return (\n \n
\n
\n
\n {title}\n {contentHits ? ({contentHits}) : null }\n
\n {location?.length ? (\n
    \n {\n // This ignore is necessary because the breadcrumb texts might have duplicates.\n // The breadcrumbs are not expected to change.\n // eslint-disable-next-line react/no-array-index-key\n location.map((breadcrumb, i) => (
  • {breadcrumb}
  • ))\n }\n
\n ) : null}\n
\n
\n );\n })}\n
\n );\n};\n\nCoursewareSearchResults.propTypes = {\n results: PropTypes.arrayOf(PropTypes.shape({\n id: PropTypes.string,\n title: PropTypes.string,\n type: PropTypes.string,\n location: PropTypes.arrayOf(PropTypes.string),\n url: PropTypes.string,\n contentHits: PropTypes.number,\n })),\n};\n\nCoursewareSearchResults.defaultProps = {\n results: [],\n};\n\nexport default CoursewareSearchResults;\n","import React, { useMemo } from 'react';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Tabs, Tab } from '@openedx/paragon';\n\nimport { useParams } from 'react-router';\nimport CoursewareSearchResults from './CoursewareSearchResults';\nimport messages from './messages';\nimport { useCoursewareSearchParams } from './hooks';\nimport { useModel } from '../../generic/model-store';\n\nconst filterAll = 'all';\nconst filterTypes = ['text', 'video', 'sequence'];\nconst filterOther = 'other';\nconst validFilters = [filterAll, ...filterTypes, filterOther];\n\nexport const CoursewareSearchResultsFilter = ({ intl }) => {\n const { courseId } = useParams();\n const lastSearch = useModel('contentSearchResults', courseId);\n const { filter: filterKeyword, setFilter } = useCoursewareSearchParams();\n\n if (!lastSearch) { return null; }\n\n const { results: data = [] } = lastSearch;\n\n // If there's no data, we show an empty result.\n if (!data.length) { return ; }\n\n const results = useMemo(() => {\n // This reducer distributes the data into different groups to make it easy to\n // use on the filters.\n // All results are added to the \"all\" key and then to its proper group key as well.\n const grouped = data.reduce((acc, { type, ...rest }) => {\n const resultType = filterTypes.includes(type) ? type : filterOther;\n acc[filterAll].push({ type: resultType, ...rest });\n acc[resultType] = [...(acc[resultType] || []), { type: resultType, ...rest }];\n return acc;\n }, { [filterAll]: [] });\n\n // This is just to format the output object with the expected tab order.\n const output = {};\n validFilters.forEach(key => { if (grouped[key]) { output[key] = grouped[key]; } });\n\n return output;\n }, [lastSearch]);\n\n const tabKeys = Object.keys(results);\n // Filter has no use if it has only 2 tabs (The \"all\" tab and another one with the same items).\n if (tabKeys.length < 3) { return ; }\n\n const filters = useMemo(() => tabKeys.map((key) => ({\n key,\n label: intl.formatMessage(messages[`filter:${key}`]),\n count: results[key].length,\n })), [results]);\n\n const activeKey = validFilters.includes(filterKeyword) ? filterKeyword : filterAll;\n\n return (\n \n {filters.filter(({ count }) => (count > 0)).map(({ key, label }) => (\n \n \n \n ))}\n \n );\n};\n\nCoursewareSearchResultsFilter.propTypes = {\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(CoursewareSearchResultsFilter);\n","import React, { useEffect } from 'react';\nimport { useParams } from 'react-router';\nimport { useDispatch } from 'react-redux';\nimport { sendTrackingLogEvent } from '@edx/frontend-platform/analytics';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport {\n Alert, Button, Icon, Spinner,\n} from '@openedx/paragon';\nimport {\n Close,\n} from '@openedx/paragon/icons';\nimport { setShowSearch } from '../data/slice';\nimport { useCoursewareSearchParams, useElementBoundingBox, useLockScroll } from './hooks';\nimport messages from './messages';\n\nimport CoursewareSearchForm from './CoursewareSearchForm';\nimport CoursewareSearchResultsFilterContainer from './CoursewareResultsFilter';\nimport { updateModel, useModel } from '../../generic/model-store';\nimport { searchCourseContent } from '../data/thunks';\n\nconst CoursewareSearch = ({ intl, ...sectionProps }) => {\n const { courseId } = useParams();\n const { query: searchKeyword, setQuery, clearSearchParams } = useCoursewareSearchParams();\n const dispatch = useDispatch();\n const { org } = useModel('courseHomeMeta', courseId);\n const {\n loading,\n searchKeyword: lastSearchKeyword,\n errors,\n total,\n } = useModel('contentSearchResults', courseId);\n\n useLockScroll();\n\n const info = useElementBoundingBox('courseTabsNavigation');\n const top = info ? `${Math.floor(info.top)}px` : 0;\n\n const clearSearch = () => {\n clearSearchParams();\n dispatch(updateModel({\n modelType: 'contentSearchResults',\n model: {\n id: courseId,\n searchKeyword: '',\n results: [],\n errors: undefined,\n loading: false,\n },\n }));\n };\n\n const handleSubmit = (value) => {\n if (!value) {\n clearSearch();\n return;\n }\n\n sendTrackingLogEvent('edx.course.home.courseware_search.submit', {\n org_key: org,\n courserun_key: courseId,\n event_type: 'searchKeyword',\n keyword: value,\n });\n\n dispatch(searchCourseContent(courseId, value));\n setQuery(value);\n };\n\n useEffect(() => {\n handleSubmit(searchKeyword);\n }, []);\n\n const handleOnChange = (value) => {\n if (value === searchKeyword) { return; }\n if (!value) { clearSearch(); }\n };\n\n const handleSearchCloseClick = () => {\n clearSearch();\n dispatch(setShowSearch(false));\n };\n\n let status = 'idle';\n if (loading) {\n status = 'loading';\n } else if (errors) {\n status = 'error';\n } else if (lastSearchKeyword) {\n status = 'results';\n }\n\n return (\n
\n
\n \n \n
\n
\n
\n

{intl.formatMessage(messages.searchModuleTitle)}

\n \n {status === 'loading' ? (\n
\n \n
\n ) : null}\n {status === 'error' && (\n \n {intl.formatMessage(messages.searchResultsError)}\n \n )}\n {status === 'results' ? (\n <>\n {total > 0 ? (\n {intl.formatMessage(messages.searchResultsLabel, { total, keyword: lastSearchKeyword })}\n
\n ) : null}\n \n \n ) : null}\n
\n \n
\n );\n};\n\nCoursewareSearch.propTypes = {\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(CoursewareSearch);\n","import { camelCaseObject, getConfig } from '@edx/frontend-platform';\nimport { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth';\nimport { logInfo } from '@edx/frontend-platform/logging';\nimport { appendBrowserTimezoneToUrl } from '../../utils';\n\nconst calculateAssignmentTypeGrades = (points, assignmentWeight, numDroppable) => {\n let dropCount = numDroppable;\n // Drop the lowest grades\n while (dropCount && points.length >= dropCount) {\n const lowestScore = Math.min(...points);\n const lowestScoreIndex = points.indexOf(lowestScore);\n points.splice(lowestScoreIndex, 1);\n dropCount--;\n }\n let averageGrade = 0;\n let weightedGrade = 0;\n if (points.length) {\n // Calculate the average grade for the assignment and round it. This rounding is not ideal and does not accurately\n // reflect what a learner's grade would be, however, we must have parity with the current grading behavior that\n // exists in edx-platform.\n averageGrade = (points.reduce((a, b) => a + b, 0) / points.length).toFixed(4);\n weightedGrade = averageGrade * assignmentWeight;\n }\n return { averageGrade, weightedGrade };\n};\n\nfunction normalizeAssignmentPolicies(assignmentPolicies, sectionScores) {\n const gradeByAssignmentType = {};\n assignmentPolicies.forEach(assignment => {\n // Create an array with the number of total assignments and set the scores to 0\n // as placeholders for assignments that have not yet been released\n gradeByAssignmentType[assignment.type] = {\n grades: Array(assignment.numTotal).fill(0),\n numAssignmentsCreated: 0,\n numTotalExpectedAssignments: assignment.numTotal,\n };\n });\n\n sectionScores.forEach((chapter) => {\n chapter.subsections.forEach((subsection) => {\n if (!(subsection.hasGradedAssignment && subsection.showGrades && subsection.numPointsPossible)) {\n return;\n }\n const {\n assignmentType,\n numPointsEarned,\n numPointsPossible,\n } = subsection;\n\n // If a subsection's assignment type does not match an assignment policy in Studio,\n // we won't be able to include it in this accumulation of grades by assignment type.\n // This may happen if a course author has removed/renamed an assignment policy in Studio and\n // neglected to update the subsection's of that assignment type\n if (!gradeByAssignmentType[assignmentType]) {\n return;\n }\n\n let {\n numAssignmentsCreated,\n } = gradeByAssignmentType[assignmentType];\n\n numAssignmentsCreated++;\n if (numAssignmentsCreated <= gradeByAssignmentType[assignmentType].numTotalExpectedAssignments) {\n // Remove a placeholder grade so long as the number of recorded created assignments is less than the number\n // of expected assignments\n gradeByAssignmentType[assignmentType].grades.shift();\n }\n // Add the graded assignment to the list\n gradeByAssignmentType[assignmentType].grades.push(numPointsEarned ? numPointsEarned / numPointsPossible : 0);\n // Record the created assignment\n gradeByAssignmentType[assignmentType].numAssignmentsCreated = numAssignmentsCreated;\n });\n });\n\n return assignmentPolicies.map((assignment) => {\n const { averageGrade, weightedGrade } = calculateAssignmentTypeGrades(\n gradeByAssignmentType[assignment.type].grades,\n assignment.weight,\n assignment.numDroppable,\n );\n\n return {\n averageGrade,\n numDroppable: assignment.numDroppable,\n shortLabel: assignment.shortLabel,\n type: assignment.type,\n weight: assignment.weight,\n weightedGrade,\n };\n });\n}\n\n/**\n * Tweak the metadata for consistency\n * @param metadata the data to normalize\n * @param rootSlug either 'courseware' or 'outline' depending on the context\n * @returns {Object} The normalized metadata\n */\nfunction normalizeCourseHomeCourseMetadata(metadata, rootSlug) {\n const data = camelCaseObject(metadata);\n return {\n ...data,\n tabs: data.tabs.map(tab => ({\n // The API uses \"courseware\" as a slug for both courseware and the outline tab.\n // If needed, we switch it to \"outline\" here for\n // use within the MFE to differentiate between course home and courseware.\n slug: tab.tabId === 'courseware' ? rootSlug : tab.tabId,\n title: tab.title,\n url: tab.url,\n })),\n isMasquerading: data.originalUserIsStaff && !data.isStaff,\n };\n}\n\nexport function normalizeOutlineBlocks(courseId, blocks) {\n const models = {\n courses: {},\n sections: {},\n sequences: {},\n };\n Object.values(blocks).forEach(block => {\n switch (block.type) {\n case 'course':\n models.courses[block.id] = {\n id: courseId,\n title: block.display_name,\n sectionIds: block.children || [],\n hasScheduledContent: block.has_scheduled_content,\n };\n break;\n\n case 'chapter':\n models.sections[block.id] = {\n complete: block.complete,\n id: block.id,\n title: block.display_name,\n resumeBlock: block.resume_block,\n sequenceIds: block.children || [],\n hideFromTOC: block.hide_from_toc,\n };\n break;\n\n case 'sequential':\n models.sequences[block.id] = {\n complete: block.complete,\n description: block.description,\n due: block.due,\n effortActivities: block.effort_activities,\n effortTime: block.effort_time,\n icon: block.icon,\n id: block.id,\n // The presence of a URL for the sequence indicates that we want this sequence to be a clickable\n // link in the outline (even though we ignore the given url and use an internal to ourselves).\n showLink: !!block.lms_web_url,\n title: block.display_name,\n hideFromTOC: block.hide_from_toc,\n navigationDisabled: block.navigation_disabled,\n };\n break;\n\n default:\n logInfo(`Unexpected course block type: ${block.type} with ID ${block.id}. Expected block types are course, chapter, and sequential.`);\n }\n });\n\n // Next go through each list and use their child lists to decorate those children with a\n // reference back to their parent.\n Object.values(models.courses).forEach(course => {\n if (Array.isArray(course.sectionIds)) {\n course.sectionIds.forEach(sectionId => {\n const section = models.sections[sectionId];\n section.courseId = course.id;\n });\n }\n });\n\n Object.values(models.sections).forEach(section => {\n if (Array.isArray(section.sequenceIds)) {\n section.sequenceIds.forEach(sequenceId => {\n if (sequenceId in models.sequences) {\n models.sequences[sequenceId].sectionId = section.id;\n } else {\n logInfo(`Section ${section.id} has child block ${sequenceId}, but that block is not in the list of sequences.`);\n }\n });\n }\n });\n\n return models;\n}\n\nexport async function getCourseHomeCourseMetadata(courseId, rootSlug) {\n let url = `${getConfig().LMS_BASE_URL}/api/course_home/course_metadata/${courseId}`;\n url = appendBrowserTimezoneToUrl(url);\n const { data } = await getAuthenticatedHttpClient().get(url);\n return normalizeCourseHomeCourseMetadata(data, rootSlug);\n}\n\n// For debugging purposes, you might like to see a fully loaded dates tab.\n// Just uncomment the next few lines and the immediate 'return' in the function below\n// import { Factory } from 'rosie';\n// import './__factories__';\nexport async function getDatesTabData(courseId) {\n // return camelCaseObject(Factory.build('datesTabData'));\n const url = `${getConfig().LMS_BASE_URL}/api/course_home/dates/${courseId}`;\n try {\n const { data } = await getAuthenticatedHttpClient().get(url);\n return camelCaseObject(data);\n } catch (error) {\n const httpErrorStatus = error?.response?.status;\n if (httpErrorStatus === 401) {\n // The backend sends this for unenrolled and unauthenticated learners, but we handle those cases by examining\n // courseAccess in the metadata call, so just ignore this status for now.\n return {};\n }\n if (httpErrorStatus === 403) {\n // The backend sends this if there is a course access error and the user should be redirected. The redirect\n // info is included in the course metadata request and will be handled there as long as this call returns\n // without an error\n return {};\n }\n throw error;\n }\n}\n\nexport async function getProgressTabData(courseId, targetUserId) {\n let url = `${getConfig().LMS_BASE_URL}/api/course_home/progress/${courseId}`;\n\n // If targetUserId is passed in, we will get the progress page data\n // for the user with the provided id, rather than the requesting user.\n if (targetUserId) {\n url += `/${targetUserId}/`;\n }\n\n try {\n const { data } = await getAuthenticatedHttpClient().get(url);\n const camelCasedData = camelCaseObject(data);\n\n camelCasedData.gradingPolicy.assignmentPolicies = normalizeAssignmentPolicies(\n camelCasedData.gradingPolicy.assignmentPolicies,\n camelCasedData.sectionScores,\n );\n\n // We replace gradingPolicy.gradeRange with the original data to preserve the intended casing for the grade.\n // For example, if a grade range key is \"A\", we do not want it to be camel cased (i.e. \"A\" would become \"a\")\n // in order to preserve a course team's desired grade formatting.\n camelCasedData.gradingPolicy.gradeRange = data.grading_policy.grade_range;\n\n camelCasedData.gradesFeatureIsFullyLocked = camelCasedData.completionSummary.lockedCount > 0;\n\n camelCasedData.gradesFeatureIsPartiallyLocked = false;\n if (camelCasedData.gradesFeatureIsFullyLocked) {\n camelCasedData.sectionScores.forEach((chapter) => {\n chapter.subsections.forEach((subsection) => {\n // If something is eligible to be gated by content type gating and would show up on the progress page\n if (subsection.assignmentType !== null && subsection.hasGradedAssignment && subsection.showGrades\n && (subsection.numPointsPossible > 0 || subsection.numPointsEarned > 0)) {\n // but the learner still has access to it, then we are in a partially locked, rather than fully locked state\n // since the learner has access to some (but not all) content that would normally be locked\n if (subsection.learnerHasAccess) {\n camelCasedData.gradesFeatureIsPartiallyLocked = true;\n camelCasedData.gradesFeatureIsFullyLocked = false;\n }\n }\n });\n });\n }\n\n return camelCasedData;\n } catch (error) {\n const httpErrorStatus = error?.response?.status;\n if (httpErrorStatus === 404) {\n global.location.replace(`${getConfig().LMS_BASE_URL}/courses/${courseId}/progress`);\n return {};\n }\n if (httpErrorStatus === 401) {\n // The backend sends this for unenrolled and unauthenticated learners, but we handle those cases by examining\n // courseAccess in the metadata call, so just ignore this status for now.\n return {};\n }\n if (httpErrorStatus === 403) {\n // The backend sends this if there is a course access error and the user should be redirected. The redirect\n // info is included in the course metadata request and will be handled there as long as this call returns\n // without an error\n return {};\n }\n throw error;\n }\n}\n\nexport async function getProctoringInfoData(courseId, username) {\n let url = `${getConfig().LMS_BASE_URL}/api/edx_proctoring/v1/user_onboarding/status?is_learning_mfe=true&course_id=${encodeURIComponent(courseId)}`;\n if (username) {\n url += `&username=${encodeURIComponent(username)}`;\n }\n try {\n const { data } = await getAuthenticatedHttpClient().get(url);\n return data;\n } catch (error) {\n const { httpErrorStatus } = error && error.customAttributes;\n if (httpErrorStatus === 404) {\n return {};\n }\n throw error;\n }\n}\n\nexport async function getLiveTabIframe(courseId) {\n const url = `${getConfig().LMS_BASE_URL}/api/course_live/iframe/${courseId}/`;\n try {\n const { data } = await getAuthenticatedHttpClient().get(url);\n return data;\n } catch (error) {\n const { httpErrorStatus } = error && error.customAttributes;\n if (httpErrorStatus === 404) {\n return {};\n }\n throw error;\n }\n}\n\nexport function getTimeOffsetMillis(headerDate, requestTime, responseTime) {\n // Time offset computation should move down into the HttpClient wrapper to maintain a global time correction reference\n // Requires 'Access-Control-Expose-Headers: Date' on the server response per https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#access-control-expose-headers\n\n let timeOffsetMillis = 0;\n if (headerDate !== undefined) {\n const headerTime = Date.parse(headerDate);\n const roundTripMillis = requestTime - responseTime;\n const localTime = responseTime - (roundTripMillis / 2); // Roughly compensate for transit time\n timeOffsetMillis = headerTime - localTime;\n }\n\n return timeOffsetMillis;\n}\n\nexport async function getOutlineTabData(courseId) {\n const url = `${getConfig().LMS_BASE_URL}/api/course_home/outline/${courseId}`;\n const requestTime = Date.now();\n let tabData;\n try {\n tabData = await getAuthenticatedHttpClient().get(url);\n } catch (error) {\n const httpErrorStatus = error?.response?.status;\n if (httpErrorStatus === 403) {\n // The backend sends this if there is a course access error and the user should be redirected. The redirect\n // info is included in the course metadata request and will be handled there as long as this call returns\n // without an error\n return {};\n }\n throw error;\n }\n\n const responseTime = Date.now();\n\n const {\n data,\n headers,\n } = tabData;\n\n const accessExpiration = camelCaseObject(data.access_expiration);\n const canShowUpgradeSock = data.can_show_upgrade_sock;\n const certData = camelCaseObject(data.cert_data);\n const courseBlocks = data.course_blocks ? normalizeOutlineBlocks(courseId, data.course_blocks.blocks) : {};\n const courseGoals = camelCaseObject(data.course_goals);\n const courseTools = camelCaseObject(data.course_tools);\n const datesBannerInfo = camelCaseObject(data.dates_banner_info);\n const datesWidget = camelCaseObject(data.dates_widget);\n const enableProctoredExams = data.enable_proctored_exams;\n const enrollAlert = camelCaseObject(data.enroll_alert);\n const enrollmentMode = data.enrollment_mode;\n const handoutsHtml = data.handouts_html;\n const hasScheduledContent = data.has_scheduled_content;\n const hasEnded = data.has_ended;\n const offer = camelCaseObject(data.offer);\n const resumeCourse = camelCaseObject(data.resume_course);\n const timeOffsetMillis = getTimeOffsetMillis(headers && headers.date, requestTime, responseTime);\n const userHasPassingGrade = data.user_has_passing_grade;\n const verifiedMode = camelCaseObject(data.verified_mode);\n const welcomeMessageHtml = data.welcome_message_html || '';\n\n return {\n accessExpiration,\n canShowUpgradeSock,\n certData,\n courseBlocks,\n courseGoals,\n courseTools,\n datesBannerInfo,\n datesWidget,\n enrollAlert,\n enrollmentMode,\n enableProctoredExams,\n handoutsHtml,\n hasScheduledContent,\n hasEnded,\n offer,\n resumeCourse,\n timeOffsetMillis, // This should move to a global time correction reference\n userHasPassingGrade,\n verifiedMode,\n welcomeMessageHtml,\n };\n}\n\nexport async function postCourseDeadlines(courseId, model) {\n const url = new URL(`${getConfig().LMS_BASE_URL}/api/course_experience/v1/reset_course_deadlines`);\n return getAuthenticatedHttpClient().post(url.href, {\n course_key: courseId,\n research_event_data: { location: `${model}-tab` },\n });\n}\n\nexport async function deprecatedPostCourseGoals(courseId, goalKey) {\n const url = new URL(`${getConfig().LMS_BASE_URL}/api/course_home/save_course_goal`);\n return getAuthenticatedHttpClient().post(url.href, { course_id: courseId, goal_key: goalKey });\n}\n\nexport async function postWeeklyLearningGoal(courseId, daysPerWeek, subscribedToReminders) {\n const url = new URL(`${getConfig().LMS_BASE_URL}/api/course_home/save_course_goal`);\n return getAuthenticatedHttpClient().post(url.href, {\n course_id: courseId,\n days_per_week: daysPerWeek,\n subscribed_to_reminders: subscribedToReminders,\n });\n}\n\nexport async function postDismissWelcomeMessage(courseId) {\n const url = new URL(`${getConfig().LMS_BASE_URL}/api/course_home/dismiss_welcome_message`);\n await getAuthenticatedHttpClient().post(url.href, { course_id: courseId });\n}\n\nexport async function postRequestCert(courseId) {\n const url = new URL(`${getConfig().LMS_BASE_URL}/courses/${courseId}/generate_user_cert`);\n await getAuthenticatedHttpClient().post(url.href);\n}\n\nexport async function executePostFromPostEvent(postData, researchEventData) {\n const url = new URL(postData.url);\n return getAuthenticatedHttpClient().post(url.href, {\n course_key: postData.bodyParams.courseId,\n research_event_data: researchEventData,\n });\n}\n\nexport async function unsubscribeFromCourseGoal(token) {\n const url = new URL(`${getConfig().LMS_BASE_URL}/api/course_home/unsubscribe_from_course_goal/${token}`);\n return getAuthenticatedHttpClient().post(url.href)\n .then(res => camelCaseObject(res));\n}\n\nexport async function getCoursewareSearchEnabledFlag(courseId) {\n const url = new URL(`${getConfig().LMS_BASE_URL}/courses/${courseId}/courseware-search/enabled/`);\n const { data } = await getAuthenticatedHttpClient().get(url.href);\n return { enabled: data.enabled || false };\n}\n\nexport async function searchCourseContentFromAPI(courseId, searchKeyword, options = {}) {\n const defaults = { page: 0, limit: 20 };\n const { page, limit } = { ...defaults, ...options };\n\n const url = new URL(`${getConfig().LMS_BASE_URL}/search/${courseId}`);\n const formData = `search_string=${searchKeyword}&page_size=${limit}&page_index=${page}`;\n const response = await getAuthenticatedHttpClient().post(url.href, formData);\n\n return camelCaseObject(response);\n}\n","/* eslint-disable no-param-reassign */\nimport { createSlice } from '@reduxjs/toolkit';\n\nexport const LOADING = 'loading';\nexport const LOADED = 'loaded';\nexport const FAILED = 'failed';\nexport const DENIED = 'denied';\n\nconst slice = createSlice({\n name: 'course-home',\n initialState: {\n courseStatus: 'loading',\n courseId: null,\n proctoringPanelStatus: 'loading',\n toastBodyText: null,\n toastBodyLink: null,\n toastHeader: '',\n showSearch: false,\n },\n reducers: {\n fetchProctoringInfoResolved: (state) => {\n state.proctoringPanelStatus = LOADED;\n },\n fetchTabDenied: (state, { payload }) => {\n state.courseId = payload.courseId;\n state.courseStatus = DENIED;\n },\n fetchTabFailure: (state, { payload }) => {\n state.courseId = payload.courseId;\n state.courseStatus = FAILED;\n },\n fetchTabRequest: (state, { payload }) => {\n state.courseId = payload.courseId;\n state.courseStatus = LOADING;\n },\n fetchTabSuccess: (state, { payload }) => {\n state.courseId = payload.courseId;\n state.targetUserId = payload.targetUserId;\n state.courseStatus = LOADED;\n },\n setCallToActionToast: (state, { payload }) => {\n const {\n header,\n link,\n linkText,\n } = payload;\n state.toastBodyLink = link;\n state.toastBodyText = linkText;\n state.toastHeader = header;\n },\n setShowSearch: (state, { payload }) => {\n state.showSearch = payload;\n },\n },\n});\n\nexport const {\n fetchProctoringInfoResolved,\n fetchTabDenied,\n fetchTabFailure,\n fetchTabRequest,\n fetchTabSuccess,\n setCallToActionToast,\n setShowSearch,\n} = slice.actions;\n\nexport const {\n reducer,\n} = slice;\n","const Joi = require('joi');\n\nconst endpointSchema = Joi.object({\n took: Joi.number().required(),\n total: Joi.number().required(),\n maxScore: Joi.number().allow(null),\n results: Joi.array().items(Joi.object({\n id: Joi.string(),\n contentType: Joi.string(),\n location: Joi.array().items(Joi.string()),\n url: Joi.string(),\n content: Joi.object({\n displayName: Joi.string(),\n htmlContent: Joi.string(),\n transcriptEn: Joi.string(),\n }),\n }).unknown(true)).strict(),\n}).unknown(true).strict();\n\nconst defaultType = 'text';\n\n// Parses the search results in a convenient way.\nexport default function mapSearchResponse(response, searchKeywords = '') {\n const { error, value: data } = endpointSchema.validate(response);\n\n if (error) {\n throw new Error('Error in server response:', error);\n }\n\n const keywords = searchKeywords ? searchKeywords.toLowerCase().split(' ') : [];\n\n const {\n took: ms,\n total,\n maxScore,\n results: rawResults,\n } = data;\n\n const results = rawResults.map(result => {\n const {\n score,\n data: {\n id,\n content: {\n displayName,\n htmlContent,\n transcriptEn,\n },\n contentType,\n location,\n url,\n },\n } = result;\n\n const type = contentType?.toLowerCase() || defaultType;\n\n const content = htmlContent || transcriptEn || '';\n const searchContent = content.toLowerCase();\n let contentHits = 0;\n if (keywords.length) {\n keywords.forEach(word => {\n contentHits += searchContent ? searchContent.toLowerCase().split(word).length - 1 : 0;\n });\n }\n\n const title = displayName || contentType;\n\n return {\n id,\n title,\n type,\n location,\n url,\n contentHits,\n score,\n };\n });\n\n const filters = rawResults.reduce((list, result) => {\n const label = result?.data?.contentType;\n\n if (!label) { return list; }\n\n const key = label.toLowerCase();\n\n const index = list.findIndex(i => i.key === key);\n\n if (index === -1) {\n return [\n ...list,\n {\n key,\n label,\n count: 1,\n },\n ];\n }\n\n const newItem = { ...list[index] };\n newItem.count++;\n\n const newList = list.slice(0);\n newList[index] = newItem;\n\n return newList;\n }, []);\n\n filters.sort((a, b) => (a.key > b.key ? 1 : -1));\n\n return {\n results,\n filters,\n total,\n maxScore,\n ms,\n };\n}\n","import { logError } from '@edx/frontend-platform/logging';\nimport { camelCaseObject } from '@edx/frontend-platform';\nimport {\n executePostFromPostEvent,\n getCourseHomeCourseMetadata,\n getDatesTabData,\n getOutlineTabData,\n getProgressTabData,\n postCourseDeadlines,\n deprecatedPostCourseGoals,\n postWeeklyLearningGoal,\n postDismissWelcomeMessage,\n postRequestCert,\n getLiveTabIframe,\n getCoursewareSearchEnabledFlag,\n searchCourseContentFromAPI,\n} from './api';\n\nimport {\n addModel, updateModel,\n} from '../../generic/model-store';\n\nimport {\n fetchTabDenied,\n fetchTabFailure,\n fetchTabRequest,\n fetchTabSuccess,\n setCallToActionToast,\n} from './slice';\n\nimport mapSearchResponse from '../courseware-search/map-search-response';\n\nconst eventTypes = {\n POST_EVENT: 'post_event',\n};\n\nexport function fetchTab(courseId, tab, getTabData, targetUserId) {\n return async (dispatch) => {\n dispatch(fetchTabRequest({ courseId }));\n try {\n const promisesToFulfill = [getCourseHomeCourseMetadata(courseId, 'outline')];\n if (getTabData) {\n promisesToFulfill.push(getTabData(courseId, targetUserId));\n }\n const [\n courseHomeCourseMetadataResult,\n tabDataResult,\n ] = await Promise.allSettled(promisesToFulfill);\n if (courseHomeCourseMetadataResult.status === 'fulfilled') {\n dispatch(addModel({\n modelType: 'courseHomeMeta',\n model: {\n id: courseId,\n ...courseHomeCourseMetadataResult.value,\n },\n }));\n }\n if (tabDataResult?.status === 'fulfilled') {\n dispatch(addModel({\n modelType: tab,\n model: {\n id: courseId,\n ...tabDataResult.value,\n },\n }));\n }\n if (courseHomeCourseMetadataResult.status === 'rejected') {\n throw courseHomeCourseMetadataResult.reason;\n } else if (!courseHomeCourseMetadataResult.value.courseAccess.hasAccess) {\n // If the learner does not have access to the course, short cut to dispatch to a denied response regardless of\n // the tabDataResult.\n dispatch(fetchTabDenied({ courseId }));\n } else if (tabDataResult?.status === 'rejected') {\n throw tabDataResult.reason;\n } else {\n dispatch(fetchTabSuccess({\n courseId,\n targetUserId,\n }));\n }\n } catch (e) {\n dispatch(fetchTabFailure({ courseId }));\n logError(e);\n }\n };\n}\n\nexport function fetchDatesTab(courseId) {\n return fetchTab(courseId, 'dates', getDatesTabData);\n}\n\nexport function fetchProgressTab(courseId, targetUserId) {\n return fetchTab(courseId, 'progress', getProgressTabData, parseInt(targetUserId, 10) || targetUserId);\n}\n\nexport function fetchOutlineTab(courseId) {\n return fetchTab(courseId, 'outline', getOutlineTabData);\n}\n\nexport function fetchLiveTab(courseId) {\n return fetchTab(courseId, 'live', getLiveTabIframe);\n}\n\nexport function fetchDiscussionTab(courseId) {\n return fetchTab(courseId, 'discussion');\n}\n\nexport function dismissWelcomeMessage(courseId) {\n return async () => postDismissWelcomeMessage(courseId);\n}\n\nexport function requestCert(courseId) {\n return async () => postRequestCert(courseId);\n}\n\nexport function resetDeadlines(courseId, model, getTabData) {\n return async (dispatch) => {\n postCourseDeadlines(courseId, model).then(response => {\n const { data } = response;\n const {\n header,\n link,\n link_text: linkText,\n } = data;\n dispatch(getTabData(courseId));\n dispatch(setCallToActionToast({ header, link, linkText }));\n });\n };\n}\n\nexport async function deprecatedSaveCourseGoal(courseId, goalKey) {\n return deprecatedPostCourseGoals(courseId, goalKey);\n}\n\nexport async function saveWeeklyLearningGoal(courseId, daysPerWeek, subscribedToReminders) {\n return postWeeklyLearningGoal(courseId, daysPerWeek, subscribedToReminders);\n}\n\nexport function processEvent(eventData, getTabData) {\n return async (dispatch) => {\n // Pulling this out early so the data doesn't get camelCased and is easier\n // to use when it's passed to the backend\n const { research_event_data: researchEventData } = eventData;\n const event = camelCaseObject(eventData);\n if (event.eventName === eventTypes.POST_EVENT) {\n executePostFromPostEvent(event.postData, researchEventData).then(response => {\n const { data } = response;\n const {\n header,\n link,\n link_text: linkText,\n } = data;\n dispatch(getTabData(event.postData.bodyParams.courseId));\n dispatch(setCallToActionToast({ header, link, linkText }));\n });\n }\n };\n}\n\nexport async function fetchCoursewareSearchSettings(courseId) {\n try {\n const { enabled } = await getCoursewareSearchEnabledFlag(courseId);\n return { enabled };\n } catch (e) {\n return { enabled: false };\n }\n}\n\nexport function searchCourseContent(courseId, searchKeyword) {\n return async (dispatch) => {\n const start = new Date();\n\n dispatch(addModel({\n modelType: 'contentSearchResults',\n model: {\n id: courseId,\n searchKeyword,\n results: [],\n errors: undefined,\n loading: true,\n },\n }));\n\n let data;\n let curatedResponse;\n let errors;\n try {\n ({ data } = await searchCourseContentFromAPI(courseId, searchKeyword));\n curatedResponse = mapSearchResponse(data, searchKeyword);\n } catch (e) {\n // TODO: Remove when publishing to prod. Just temporary for performance debugging.\n // eslint-disable-next-line no-console\n console.error('Error on Courseware Search: ', e.message);\n errors = e.message;\n }\n\n dispatch(updateModel({\n modelType: 'contentSearchResults',\n model: {\n ...curatedResponse,\n id: courseId,\n searchKeyword,\n errors,\n loading: false,\n },\n }));\n\n const end = new Date();\n const clientMs = (end - start);\n const {\n took, total, maxScore, accessDeniedCount,\n } = data;\n\n // TODO: Remove when publishing to prod. Just temporary for performance debugging.\n // eslint-disable-next-line no-console\n console.table({\n 'Search Keyword': searchKeyword,\n 'Client time (ms)': clientMs,\n 'Server time (ms)': took,\n 'Total matches': total,\n 'Max score': maxScore,\n 'Access denied count': accessDeniedCount,\n });\n };\n}\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n contactSupport: {\n id: 'learning.goals.unsubscribe.contact',\n defaultMessage: 'contact support',\n description: 'Its shown as a suggestion or recommendation for learner when their unsubscribing request has failed',\n },\n description: {\n id: 'learning.goals.unsubscribe.description',\n defaultMessage: 'You will no longer receive email reminders about your goal for {courseTitle}.',\n description: 'It describes the consequences to learner when they unsubscribe of goal reminder service',\n },\n errorHeader: {\n id: 'learning.goals.unsubscribe.errorHeader',\n defaultMessage: 'Something went wrong',\n description: 'It indicate that the unsubscribing request has failed',\n },\n goToDashboard: {\n id: 'learning.goals.unsubscribe.goToDashboard',\n defaultMessage: 'Go to dashboard',\n description: 'Anchor text for button that redirects to dashboard page',\n },\n header: {\n id: 'learning.goals.unsubscribe.header',\n defaultMessage: 'You’ve unsubscribed from goal reminders',\n description: 'It indicate that the unsubscribing request was successful',\n },\n loading: {\n id: 'learning.goals.unsubscribe.loading',\n defaultMessage: 'Unsubscribing…',\n description: 'Message shown when the unsubscribing request is processing',\n },\n});\n\nexport default messages;\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n certStatusEarnedNotAvailableHeader: {\n id: 'cert.alert.earned.unavailable.header.v2',\n defaultMessage: 'Your grade and certificate status will be available soon.',\n description: 'Header alerting the user that their certificate will be available soon.',\n },\n certStatusDownloadableHeader: {\n id: 'cert.alert.earned.ready.header',\n defaultMessage: 'Congratulations! Your certificate is ready.',\n description: 'Header alerting the user that their certificate is ready.',\n },\n certStatusNotPassingHeader: {\n id: 'cert.alert.notPassing.header',\n defaultMessage: 'You are not yet eligible for a certificate',\n },\n certStatusNotPassingButton: {\n id: 'cert.alert.notPassing.button',\n defaultMessage: 'View grades',\n },\n});\n\nexport default messages;\n","/* eslint-disable import/prefer-default-export */\nimport React, { useMemo } from 'react';\nimport { useAlert } from '../../../../generic/user-messages';\nimport { useModel } from '../../../../generic/model-store';\n\nconst CourseEndAlert = React.lazy(() => import('./CourseEndAlert'));\n\n// period of time (in ms) before end of course during which we alert\nconst WARNING_PERIOD_MS = 14 * 24 * 60 * 60 * 1000; // 14 days\n\nexport function useCourseEndAlert(courseId) {\n const {\n isEnrolled,\n } = useModel('courseHomeMeta', courseId);\n const {\n datesWidget: {\n courseDateBlocks,\n },\n userTimezone,\n } = useModel('outline', courseId);\n\n const endBlock = courseDateBlocks.find(b => b.dateType === 'course-end-date');\n const endDate = endBlock ? new Date(endBlock.date) : null;\n const delta = endBlock ? endDate - new Date() : 0;\n const isVisible = isEnrolled && endBlock && delta > 0 && delta < WARNING_PERIOD_MS;\n const payload = useMemo(() => ({\n description: endBlock && endBlock.description,\n endDate: endBlock && endBlock.date,\n userTimezone,\n }), [endBlock, userTimezone]);\n\n useAlert(isVisible, {\n code: 'clientCourseEndAlert',\n payload,\n topic: 'outline-course-alerts',\n });\n\n return {\n clientCourseEndAlert: CourseEndAlert,\n };\n}\n","import React, { useMemo } from 'react';\n\nimport { useAlert } from '../../../../generic/user-messages';\nimport { useModel } from '../../../../generic/model-store';\n\nconst ScheduledContentAlert = React.lazy(() => import('./ScheduledCotentAlert'));\n\nconst useScheduledContentAlert = (courseId) => {\n const {\n courseBlocks: {\n courses,\n },\n datesWidget: {\n datesTabLink,\n },\n } = useModel('outline', courseId);\n\n const hasScheduledContent = (\n !!courses\n && !!Object.values(courses).find(course => course.hasScheduledContent === true)\n );\n const { isEnrolled } = useModel('courseHomeMeta', courseId);\n const payload = useMemo(() => ({\n datesTabLink,\n }), [datesTabLink]);\n useAlert(hasScheduledContent && isEnrolled, {\n code: 'ScheduledContentAlert',\n payload,\n topic: 'outline-course-alerts',\n });\n\n return { ScheduledContentAlert };\n};\n\nexport default useScheduledContentAlert;\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n allDates: {\n id: 'learning.outline.dates.all',\n defaultMessage: 'View all course dates',\n description: 'Text anchor for link that redirects to dates or course timeline tab',\n },\n casualGoalButtonText: {\n id: 'learning.outline.goalButton.casual.text',\n defaultMessage: '1 day a week',\n description: 'Text shown for casual goal button',\n },\n casualGoalButtonTitle: {\n id: 'learning.outline.goalButton.screenReader.text',\n defaultMessage: 'Casual',\n description: 'A very short description of the least intense of three learning goals',\n },\n certAlt: {\n id: 'learning.outline.certificateAlt',\n defaultMessage: 'Example Certificate',\n description: 'Alternate text displayed when the example certificate image cannot be displayed.',\n },\n collapseAll: {\n id: 'learning.outline.collapseAll',\n defaultMessage: 'Collapse all',\n description: 'Label for button to close all of the collapsible sections',\n },\n completedAssignment: {\n id: 'learning.outline.completedAssignment',\n defaultMessage: 'Completed',\n description: 'Text used to describe the green checkmark icon in front of an assignment title',\n },\n completedSection: {\n id: 'learning.outline.completedSection',\n defaultMessage: 'Completed section',\n description: 'Text used to describe the green checkmark icon in front of a section title',\n },\n hiddenSection: {\n id: 'learning.outline.hiddenSection',\n defaultMessage: 'Hidden in Course Outline, accessible via link',\n description: 'Label for hidden section in course outline',\n },\n hiddenSequenceLink: {\n id: 'learning.outline.hiddenSequenceLink',\n defaultMessage: 'Subsections are not navigable between each other, they can only be accessed through their link.',\n description: 'Label for hidden sequence in course outline',\n },\n dates: {\n id: 'learning.outline.dates',\n defaultMessage: 'Important dates',\n description: 'Headline for the (summary of dates) section of the outline page',\n },\n editGoal: {\n id: 'learning.outline.editGoal',\n defaultMessage: 'Edit goal',\n description: 'Edit course goal button',\n },\n expandAll: {\n id: 'learning.outline.expandAll',\n defaultMessage: 'Expand all',\n description: 'Label for button to open all of the collapsible sections',\n },\n goal: {\n id: 'learning.outline.goal',\n defaultMessage: 'Goal',\n description: 'Label for the selected course goal',\n },\n goalReminderDetail: {\n id: 'learning.outline.goalReminderDetail',\n defaultMessage: 'If we notice you’re not quite at your goal, we’ll send you an email reminder.',\n description: 'It describe to learner what is goal reminder service',\n },\n goalUnsure: {\n id: 'learning.outline.goalUnsure',\n defaultMessage: 'Not sure yet',\n },\n handouts: {\n id: 'learning.outline.handouts',\n defaultMessage: 'Course Handouts',\n description: 'Header for (Course Handouts) section in course outline',\n },\n incompleteAssignment: {\n id: 'learning.outline.incompleteAssignment',\n defaultMessage: 'Incomplete',\n description: 'Text used to describe the gray checkmark icon in front of an assignment title',\n },\n incompleteSection: {\n id: 'learning.outline.incompleteSection',\n defaultMessage: 'Incomplete section',\n description: 'Text used to describe the gray checkmark icon in front of a section title',\n },\n intenseGoalButtonText: {\n id: 'learning.outline.goalButton.intense.text',\n defaultMessage: '5 days a week',\n description: 'Text shown for intense goal button',\n },\n intenseGoalButtonTitle: {\n id: 'learning.outline.goalButton.intense.title',\n defaultMessage: 'Intense',\n description: 'A very short description of the most intensive option of three learning goals, Casual, Regular and Intense',\n },\n learnMore: {\n id: 'learning.outline.learnMore',\n defaultMessage: 'Learn More',\n },\n openSection: {\n id: 'learning.outline.altText.openSection',\n defaultMessage: 'Open',\n description: 'A button to open the given section of the course outline',\n },\n proctoringInfoPanel: {\n id: 'learning.proctoringPanel.header',\n defaultMessage: 'This course contains proctored exams',\n description: 'Used as a label to indicate that course has proctored exams',\n },\n regularGoalButtonText: {\n id: 'learning.outline.goalButton.regular.text',\n defaultMessage: '3 days a week',\n description: 'Text shown for regular goal button',\n\n },\n regularGoalButtonTitle: {\n id: 'learning.outline.goalButton.regular.title',\n defaultMessage: 'Regular',\n description: 'A very short description of the middle option of three learning goals, Casual, Regular and Intense',\n },\n resumeBlurb: {\n id: 'learning.outline.resumeBlurb',\n defaultMessage: 'Pick up where you left off',\n description: 'Text describing to the learner that they can return to the last section they visited within the course.',\n },\n resume: {\n id: 'learning.outline.resume',\n defaultMessage: 'Resume course',\n description: 'Anchor text for button that would resume course',\n },\n setGoal: {\n id: 'learning.outline.setGoal',\n defaultMessage: 'To start, set a course goal by selecting the option below that best describes your learning plan.',\n description: 'In indicate to learner how to set or use the goal reminder service',\n },\n setGoalReminder: {\n id: 'learning.outline.setGoalReminder',\n defaultMessage: 'Set a goal reminder',\n description: 'The text for the radio button which activate or deactivate the goal reminder service',\n },\n setLearningGoalButtonScreenReaderText: {\n id: 'learning.outline.goalButton.casual.title',\n defaultMessage: 'Set a learning goal style.',\n description: 'screen reader text informing learner they can select an intensity of learning goal',\n },\n setWeeklyGoal: {\n id: 'learning.outline.setWeeklyGoal',\n defaultMessage: 'Set a weekly learning goal',\n description: 'The headline for (goal reminder service) section in course outline',\n },\n setWeeklyGoalDetail: {\n id: 'learning.outline.setWeeklyGoalDetail',\n defaultMessage: 'Setting a goal motivates you to finish the course. You can always change it later.',\n description: 'It indiacate the gaol or the purpose of the goal reminder service to learners',\n },\n start: {\n id: 'learning.outline.start',\n defaultMessage: 'Start course',\n description: 'The text for button which starts the course',\n },\n startBlurb: {\n id: 'learning.outline.startBlurb',\n defaultMessage: 'Begin your course today',\n },\n tools: {\n id: 'learning.outline.tools',\n defaultMessage: 'Course Tools',\n description: 'Headline for the (course tools) section in course outline. course tool might include links to course bookmarks, financial assistance...etc',\n },\n upgradeButton: {\n id: 'learning.outline.upgradeButton',\n defaultMessage: 'Upgrade ({symbol}{price})',\n description: 'Text for the button which redirects to the upgrading page',\n },\n upgradeTitle: {\n id: 'learning.outline.upgradeTitle',\n defaultMessage: 'Pursue a verified certificate',\n description: 'Upgrade title',\n },\n welcomeMessage: {\n id: 'learning.outline.welcomeMessage',\n defaultMessage: 'Welcome Message',\n },\n welcomeMessageShowMoreButton: {\n id: 'learning.outline.welcomeMessageShowMoreButton',\n defaultMessage: 'Show More',\n },\n welcomeMessageShowLessButton: {\n id: 'learning.outline.welcomeMessageShowLessButton',\n defaultMessage: 'Show Less',\n },\n welcomeTo: {\n id: 'learning.outline.goalWelcome',\n defaultMessage: 'Welcome to',\n description: 'This precedes the title of the course',\n },\n notStartedProctoringStatus: {\n id: 'learning.proctoringPanel.status.notStarted',\n defaultMessage: 'Not Started',\n description: 'It indcate that proctortrack onboarding exam hasn’t started yet',\n },\n startedProctoringStatus: {\n id: 'learning.proctoringPanel.status.started',\n defaultMessage: 'Started',\n description: 'Label to indicate the starting status of the proctortrack onboarding exam',\n },\n submittedProctoringStatus: {\n id: 'learning.proctoringPanel.status.submitted',\n defaultMessage: 'Submitted',\n description: 'Label to indicate the submitted status of proctortrack onboarding exam',\n },\n verifiedProctoringStatus: {\n id: 'learning.proctoringPanel.status.verified',\n defaultMessage: 'Verified',\n description: 'Label to indicate the verified status of the proctortrack onboarding exam',\n },\n rejectedProctoringStatus: {\n id: 'learning.proctoringPanel.status.rejected',\n defaultMessage: 'Rejected',\n description: 'Label to indicate the rejection status of the proctortrack onboarding exam',\n },\n errorProctoringStatus: {\n id: 'learning.proctoringPanel.status.error',\n defaultMessage: 'Error',\n description: 'Label to indicate that there is error in proctortrack onboarding exam',\n },\n otherCourseApprovedProctoringStatus: {\n id: 'learning.proctoringPanel.status.otherCourseApproved',\n defaultMessage: 'Approved in Another Course',\n description: 'Label to indicate that the proctortrack onboarding exam is verified based on taking onboarding exam on another course',\n },\n expiringSoonProctoringStatus: {\n id: 'learning.proctoringPanel.status.expiringSoon',\n defaultMessage: 'Expiring Soon',\n description: 'A label to indicate that proctortrack onboarding exam will expire soon',\n },\n expiredProctoringStatus: {\n id: 'learning.proctoringPanel.status.expired',\n defaultMessage: 'Expired',\n description: 'A label to indicate that proctortrack onboarding exam has expired',\n },\n proctoringCurrentStatus: {\n id: 'learning.proctoringPanel.status',\n defaultMessage: 'Current Onboarding Status:',\n description: 'The text that precede the status label of proctortrack onboarding exam',\n },\n notStartedProctoringMessage: {\n id: 'learning.proctoringPanel.message.notStarted',\n defaultMessage: 'You have not started your onboarding exam.',\n description: 'The text that explain the meaning of (not started) label of the proctortrack onboarding exam',\n },\n startedProctoringMessage: {\n id: 'learning.proctoringPanel.message.started',\n defaultMessage: 'You have started your onboarding exam.',\n description: 'The text that explain the meaning of (started) label of the proctortrack onboarding exam',\n },\n submittedProctoringMessage: {\n id: 'learning.proctoringPanel.message.submitted',\n defaultMessage: 'You have submitted your onboarding exam.',\n description: 'The text that explain the meaning of (submitted) label of the proctortrack onboarding exam',\n },\n verifiedProctoringMessage: {\n id: 'learning.proctoringPanel.message.verified',\n defaultMessage: 'Your onboarding exam has been approved in this course.',\n description: 'The text that explain the meaning of (verified) label of the proctortrack onboarding exam',\n },\n rejectedProctoringMessage: {\n id: 'learning.proctoringPanel.message.rejected',\n defaultMessage: 'Your onboarding exam has been rejected. Please retry onboarding.',\n description: 'The text that explain the meaning of (rejected) label of the proctortrack onboarding exam',\n },\n errorProctoringMessage: {\n id: 'learning.proctoringPanel.message.error',\n defaultMessage: 'An error has occurred during your onboarding exam. Please retry onboarding.',\n description: 'The text that explain the meaning of (error) label of the proctortrack onboarding exam',\n },\n otherCourseApprovedProctoringMessage: {\n id: 'learning.proctoringPanel.message.otherCourseApproved',\n defaultMessage: 'Your onboarding exam has been approved in another course.',\n description: 'The text that explain the meaning of (approved in another course) label of the proctortrack onboarding exam',\n },\n otherCourseApprovedProctoringDetail: {\n id: 'learning.proctoringPanel.detail.otherCourseApproved',\n defaultMessage: 'If your device has changed, we recommend that you complete this course\\'s onboarding exam in order to ensure that your setup still meets the requirements for proctoring.',\n description: 'The text that recommend an action when the status of the proctortrack onboarding exam is (approved in another course)',\n },\n expiringSoonProctoringMessage: {\n id: 'learning.proctoringPanel.message.expiringSoon',\n defaultMessage: 'Your onboarding profile has been approved. However, your onboarding status is expiring soon. Please complete onboarding again to ensure that you will be able to continue taking proctored exams.',\n description: 'The text that recommend an action when the status of the proctortrack onboarding exam is (expiring soon)',\n },\n expiredProctoringMessage: {\n id: 'learning.proctoringPanel.message.expired',\n defaultMessage: 'Your onboarding status has expired. Please complete onboarding again to continue taking proctored exams.',\n description: 'The text that recommend an action when the status of the proctortrack onboarding exam is (expired)',\n },\n proctoringPanelGeneralInfo: {\n id: 'learning.proctoringPanel.generalInfo',\n defaultMessage: 'You must complete the onboarding process prior to taking any proctored exam. ',\n description: 'It indicate key and important fact to learner about the importance of taking proctortrack onboarding exam',\n },\n proctoringPanelGeneralInfoSubmitted: {\n id: 'learning.proctoringPanel.generalInfoSubmitted',\n defaultMessage: 'Your submitted profile is in review.',\n description: 'The text that explain the meaning of (in review) label of the proctortrack onboarding exam',\n },\n proctoringPanelGeneralTime: {\n id: 'learning.proctoringPanel.generalTime',\n defaultMessage: 'Onboarding profile review can take 2+ business days.',\n description: 'This text explain for how long the (in review) status of the proctortrack onboarding exam might remain',\n },\n proctoringOnboardingButton: {\n id: 'learning.proctoringPanel.onboardingButton',\n defaultMessage: 'Complete Onboarding',\n description: 'Text shown on the button that starts the actual proctortrack onboarding exam when it is released',\n },\n proctoringOnboardingPracticeButton: {\n id: 'learning.proctoringPanel.onboardingPracticeButton',\n defaultMessage: 'View Onboarding Exam',\n description: 'The text that appears on onboarding exam while its not released, so learners can take or view it as a practice',\n },\n proctoringOnboardingButtonNotOpen: {\n id: 'learning.proctoringPanel.onboardingButtonNotOpen',\n defaultMessage: 'Onboarding Opens: {releaseDate}',\n description: 'It indicate when or from when the learner can take the proctortrack onboarding exam',\n },\n proctoringReviewRequirementsButton: {\n id: 'learning.proctoringPanel.reviewRequirementsButton',\n defaultMessage: 'Review instructions and system requirements',\n description: 'Anchor text for button which redirect leaner to doc or a detailed page about proctortrack onboarding exam',\n },\n proctoringOnboardingButtonPastDue: {\n id: 'learning.proctoringPanel.onboardingButtonPastDue',\n defaultMessage: 'Onboarding Past Due',\n description: 'Text that show when the deadline of proctortrack onboarding exam has passed, it appears on button that start the onboarding exam however for this case the button is disabled for obvious reason',\n },\n});\n\nexport default messages;\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n notPassingHeader: {\n id: 'progress.certificateStatus.notPassingHeader',\n defaultMessage: 'Certificate status',\n description: 'Header text when learner certifcate status is not passing',\n },\n notPassingBody: {\n id: 'progress.certificateStatus.notPassingBody',\n defaultMessage: 'In order to qualify for a certificate, you must have a passing grade.',\n description: 'Body text when learner certifcate status is not passing',\n },\n inProgressHeader: {\n id: 'progress.certificateStatus.inProgressHeader',\n defaultMessage: 'More content is coming soon!',\n description: 'Header text when learner certifcate is in progress',\n },\n inProgressBody: {\n id: 'progress.certificateStatus.inProgressBody',\n defaultMessage: 'It looks like there is more content in this course that will be released in the future. Look out for email updates or check back on your course for when this content will be available.',\n description: 'Body text when learner certifcate is in progress',\n },\n requestableHeader: {\n id: 'progress.certificateStatus.requestableHeader',\n defaultMessage: 'Certificate status',\n description: 'Header text when learner certifcate status is requestable',\n },\n requestableBody: {\n id: 'progress.certificateStatus.requestableBody',\n defaultMessage: 'Congratulations, you qualified for a certificate! In order to access your certificate, request it below.',\n description: 'Body text when learner certifcate status is requestable',\n },\n requestableButton: {\n id: 'progress.certificateStatus.requestableButton',\n defaultMessage: 'Request certificate',\n description: 'Button text when learner certifcate status is requestable',\n },\n unverifiedHeader: {\n id: 'progress.certificateStatus.unverifiedHeader',\n defaultMessage: 'Certificate status',\n description: 'Header text when learner certifcate status is unverified',\n },\n unverifiedButton: {\n id: 'progress.certificateStatus.unverifiedButton',\n defaultMessage: 'Verify ID',\n description: 'Button text when learner certifcate status is unverified',\n },\n unverifiedPendingBody: {\n id: 'progress.certificateStatus.courseCelebration.verificationPending',\n defaultMessage: 'Your ID verification is pending and your certificate will be available once approved.',\n description: 'Body text when learner certifcate status is unverified pending',\n },\n downloadableHeader: {\n id: 'progress.certificateStatus.downloadableHeader',\n defaultMessage: 'Your certificate is available!',\n description: 'Header text when the certifcate is available',\n },\n viewableButton: {\n id: 'progress.certificateStatus.viewableButton',\n defaultMessage: 'View my certificate',\n description: 'Button text which view or links to the certifcate',\n },\n notAvailableHeader: {\n id: 'progress.certificateStatus.notAvailableHeader',\n defaultMessage: 'Certificate status',\n description: 'Header text when the certifcate is not available',\n },\n notAvailableEndDateBody: {\n id: 'progress.certificateBody.notAvailable.endDate',\n defaultMessage: 'Final grades and any earned certificates are scheduled to be available after {endDate}.',\n description: 'Shown for learners who have finished a course before grades and certificates are available.',\n },\n upgradeHeader: {\n id: 'progress.certificateStatus.upgradeHeader',\n defaultMessage: 'Earn a certificate',\n description: 'Header text when the learner needs to upgrade to earn a certifcate ',\n },\n upgradeBody: {\n id: 'progress.certificateStatus.upgradeBody',\n defaultMessage: 'You are in an audit track and do not qualify for a certificate. In order to work towards a certificate, upgrade your course today.',\n description: 'Body text when the learner needs to upgrade to earn a certifcate ',\n },\n upgradeButton: {\n id: 'progress.certificateStatus.upgradeButton',\n defaultMessage: 'Upgrade now',\n description: 'Button text which leaner needs to upgrade to get the certifcate',\n },\n unverifiedHomeHeader: {\n id: 'progress.certificateStatus.unverifiedHomeHeader.v2',\n defaultMessage: 'Verify your identity to qualify for a certificate.',\n description: 'Header text when the learner needs to do verification to earn a certifcate ',\n },\n unverifiedHomeButton: {\n id: 'progress.certificateStatus.unverifiedHomeButton',\n defaultMessage: 'Verify my ID',\n description: 'Button text which leaner needs to do verification to earn a certifcate',\n },\n unverifiedHomeBody: {\n id: 'progress.certificateStatus.unverifiedHomeBody',\n defaultMessage: 'In order to generate a certificate for this course, you must complete the ID verification process.',\n description: 'Body text when the learner needs to do verification to earn a certifcate',\n },\n});\n\nexport default messages;\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n assignmentType: {\n id: 'progress.assignmentType',\n defaultMessage: 'Assignment type',\n description: 'Header for column that indicate type of the assignment in grade summary table',\n },\n backToContent: {\n id: 'progress.footnotes.backToContent',\n defaultMessage: 'Back to content',\n description: 'Text for button that redirects to contnet',\n },\n courseGradeBody: {\n id: 'progress.courseGrade.body',\n defaultMessage: 'This represents your weighted grade against the grade needed to pass this course.',\n description: 'This text is shown to explain the meaning of the (grade bar) chart',\n },\n courseGradeBarAltText: {\n id: 'progress.courseGrade.gradeBar.altText',\n defaultMessage: 'Your current grade is {currentGrade}%. A weighted grade of {passingGrade}% is required to pass in this course.',\n description: 'Alt text for the grade chart bar',\n },\n courseGradeFooterGenericPassing: {\n id: 'progress.courseGrade.footer.generic.passing',\n defaultMessage: 'You’re currently passing this course',\n description: 'This shown when learner weighted grade is greater or equal course passing grade',\n },\n courseGradeFooterNonPassing: {\n id: 'progress.courseGrade.footer.nonPassing',\n defaultMessage: 'A weighted grade of {passingGrade}% is required to pass in this course',\n description: 'This shown when learner weighted grade is less than course passing grade',\n },\n courseGradeFooterPassingWithGrade: {\n id: 'progress.courseGrade.footer.passing',\n defaultMessage: 'You’re currently passing this course with a grade of {letterGrade} ({minGrade}-{maxGrade}%)',\n description: 'This shown when learner weighted grade is greater or equal course passing grade amd course is using letter grade',\n },\n courseGradePreviewHeaderLocked: {\n id: 'progress.courseGrade.preview.headerLocked',\n defaultMessage: 'locked feature',\n description: 'This when (progress page) feature is locked, sometimes learner needs to upgrade to get insight about their progress',\n },\n courseGradePreviewHeaderLimited: {\n id: 'progress.courseGrade.preview.headerLimited',\n defaultMessage: 'limited feature',\n description: 'This when (progress page) feature is partially locked, it means leaners can see their progress but not get to a certificate',\n },\n courseGradePreviewHeaderAriaHidden: {\n id: 'progress.courseGrade.preview.header.ariaHidden',\n defaultMessage: 'Preview of a ',\n description: 'This text precedes either (locked feature) or (limited feature)',\n },\n courseGradePreviewUnlockCertificateBody: {\n id: 'progress.courseGrade.preview.body.unlockCertificate',\n defaultMessage: 'Unlock to view grades and work towards a certificate.',\n description: 'Recommending an action for learner when they need to upgrade to view progress and get a certificate',\n },\n courseGradePartialPreviewUnlockCertificateBody: {\n id: 'progress.courseGrade.partialpreview.body.unlockCertificate',\n defaultMessage: 'Unlock to work towards a certificate.',\n description: 'Recommending an action for learner when they need to upgrade to get a certificate',\n },\n courseGradePreviewUpgradeDeadlinePassedBody: {\n id: 'progress.courseGrade.preview.body.upgradeDeadlinePassed',\n defaultMessage: 'The deadline to upgrade in this course has passed.',\n description: 'Shown when learner no longer can upgrade',\n },\n courseGradePreviewUpgradeButton: {\n id: 'progress.courseGrade.preview.button.upgrade',\n defaultMessage: 'Upgrade now',\n description: 'Text for button that redirects to the upgrade page',\n },\n courseGradeRangeTooltip: {\n id: 'progress.courseGrade.gradeRange.tooltip',\n defaultMessage: 'Grade ranges for this course:',\n description: 'This shown when course is using (letter grade) to explain e.g. range for A, B, and C...etc',\n },\n courseOutline: {\n id: 'progress.courseOutline',\n defaultMessage: 'Course Outline',\n description: 'Anchor text for link that redirects to (course outline) tab',\n },\n currentGradeLabel: {\n id: 'progress.courseGrade.label.currentGrade',\n defaultMessage: 'Your current grade',\n description: 'Text label current leaner grade on (grade bar) chart',\n },\n detailedGrades: {\n id: 'progress.detailedGrades',\n defaultMessage: 'Detailed grades',\n description: 'Headline for the (detailed grade) section in the progress tab',\n },\n detailedGradesEmpty: {\n id: 'progress.detailedGrades.emptyTable',\n defaultMessage: 'You currently have no graded problem scores.',\n description: 'It indicate that there are no problem or assignments to be scored',\n },\n footnotesTitle: {\n id: 'progress.footnotes.title',\n defaultMessage: 'Grade summary footnotes',\n description: 'Title for grade summary footnotes, if exists',\n },\n grade: {\n id: 'progress.gradeSummary.grade',\n defaultMessage: 'Grade',\n description: 'Headline for (grade column) in grade summary table',\n },\n grades: {\n id: 'progress.courseGrade.grades',\n defaultMessage: 'Grades',\n description: 'Headline for grades section in progress tab',\n },\n gradesAndCredit: {\n id: 'progress.courseGrade.gradesAndCredit',\n defaultMessage: 'Grades & Credit',\n description: 'Headline for (grades and credit) section in progress tab',\n },\n gradeRangeTooltipAlt: {\n id: 'progress.courseGrade.gradeRange.Tooltip',\n defaultMessage: 'Grade range tooltip',\n description: 'Alt text for icon which that triggers (tip box) for grade range',\n },\n gradeSummary: {\n id: 'progress.gradeSummary',\n defaultMessage: 'Grade summary',\n description: 'Headline for the (grade summary) section in (grades) section in progress tab',\n },\n gradeSummaryLimitedAccessExplanation: {\n id: 'progress.gradeSummary.limitedAccessExplanation',\n defaultMessage: 'You have limited access to graded assignments as part of the audit track in this course.',\n description: 'Text shown when learner has limited access to grade feature',\n },\n gradeSummaryTooltipAlt: {\n id: 'progress.gradeSummary.tooltip.alt',\n defaultMessage: 'Grade summary tooltip',\n description: 'Alt text for icon which that triggers (tip box) for grade summary',\n },\n gradeSummaryTooltipBody: {\n id: 'progress.gradeSummary.tooltip.body',\n defaultMessage: \"Your course assignment's weight is determined by your instructor. \"\n + 'By multiplying your grade by the weight for that assignment type, your weighted grade is calculated. '\n + \"Your weighted grade is what's used to determine if you pass the course.\",\n description: 'The content of (tip box) for the grade summary section',\n },\n noAccessToAssignmentType: {\n id: 'progress.noAcessToAssignmentType',\n defaultMessage: 'You do not have access to assignments of type {assignmentType}',\n description: 'Its alt text for locked icon which is shown if assignment type in (grade summary table) is locked',\n },\n noAccessToSubsection: {\n id: 'progress.noAcessToSubsection',\n defaultMessage: 'You do not have access to subsection {displayName}',\n description: 'Text shown when learner have limited access to grades feature',\n },\n passingGradeLabel: {\n id: 'progress.courseGrade.label.passingGrade',\n defaultMessage: 'Passing grade',\n description: 'Label for mark on the (grade bar) chart which indicate the poisition of passing grade on the bar',\n },\n problemScoreLabel: {\n id: 'progress.detailedGrades.problemScore.label',\n defaultMessage: 'Problem Scores:',\n description: 'Label text which precedes detailed view of all scores per assignment',\n },\n problemScoreToggleAltText: {\n id: 'progress.detailedGrades.problemScore.toggleButton',\n defaultMessage: 'Toggle individual problem scores for {subsectionTitle}',\n description: 'Alt text for button which switches detailed view per module',\n },\n sectionGradeOverridden: {\n id: 'progress.detailedGrades.overridden',\n defaultMessage: 'Section grade has been overridden.',\n description: 'This indicate that the graded score has been changed, it can happen if leaner initial assessment was not fair, might be for other reasons as well',\n },\n score: {\n id: 'progress.score',\n defaultMessage: 'Score',\n description: 'It indicate how many points the learner have socred scored in particular assignment, or exam',\n },\n weight: {\n id: 'progress.weight',\n defaultMessage: 'Weight',\n description: 'It indicate the weight of particular assignment on overall course grade, it is demeterined by course author',\n },\n weightedGrade: {\n id: 'progress.weightedGrade',\n defaultMessage: 'Weighted grade',\n description: 'Weighed grade is calculated by (weight %) * (grade score) ',\n },\n weightedGradeSummary: {\n id: 'progress.weightedGradeSummary',\n defaultMessage: 'Your current weighted grade summary',\n description: 'It the text precede the sum of weighted grades of all the assignment',\n },\n\n});\n\nexport default messages;\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n suggestedSchedule: {\n id: 'datesBanner.suggestedSchedule',\n defaultMessage: 'We’ve built a suggested schedule to help you stay on track. But don’t worry—it’s flexible so you'\n + ' can learn at your own pace.',\n description: 'Messaging that explain the gaol and the effect fo the suggested schedule',\n },\n upgradeToCompleteHeader: {\n id: 'datesBanner.upgradeToCompleteGradedBanner.header',\n defaultMessage: 'Upgrade to unlock',\n description: 'Messaging that prompts users to upgrade their course status in order to access locked course content',\n },\n upgradeToCompleteBody: {\n id: 'datesBanner.upgradeToCompleteGradedBanner.body',\n defaultMessage: 'You are auditing this course, which means that you are unable to participate in graded'\n + ' assignments. To complete graded assignments as part of this course, you can upgrade today.',\n description: 'It explain the effect of upgrading the course',\n },\n upgradeToCompleteButton: {\n id: 'datesBanner.upgradeToCompleteGradedBanner.button',\n defaultMessage: 'Upgrade now',\n description: 'Button that prompts users to upgrade their course status',\n },\n upgradeToShiftBody: {\n id: 'datesBanner.upgradeToResetBanner.body',\n defaultMessage: 'To keep yourself on track, you can update this schedule and shift the past due assignments into'\n + ' the future. Don’t worry—you won’t lose any of the progress you’ve made when you shift your due dates.',\n description: 'Text that explain the consequences of resetting dates when learner needs to upgrade to do so',\n },\n upgradeToShiftButton: {\n id: 'datesBanner.upgradeToResetBanner.button',\n defaultMessage: 'Upgrade to shift due dates',\n description: 'Button that prompts users to upgrade their course status before they can shift their due dates into'\n + ' the future',\n },\n missedDeadlines: {\n id: 'datesBanner.resetDatesBanner.header',\n defaultMessage: 'It looks like you missed some important deadlines based on our suggested schedule.',\n description: 'Text shown when leaner missed assignment due date',\n },\n shiftDatesBody: {\n id: 'datesBanner.resetDatesBanner.body',\n defaultMessage: 'To keep yourself on track, you can update this schedule and shift the past due assignments into'\n + ' the future. Don’t worry—you won’t lose any of the progress you’ve made when you shift your due dates.',\n description: 'Text that explain the consequences of resetting dates',\n },\n shiftDatesButton: {\n id: 'datesBanner.resetDatesBanner.button',\n defaultMessage: 'Shift due dates',\n description: 'Button that prompts users to move their due dates into the future',\n },\n});\n\nexport default messages;\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n courseMaterial: {\n id: 'learn.navigation.course.tabs.label',\n defaultMessage: 'Course Material',\n description: 'The accessible label for course tabs navigation',\n },\n});\n\nexport default messages;\n","export default __webpack_public_path__ + \"5d807cf236c139fbbba42662e57fd7d7.gif\";","export default __webpack_public_path__ + \"3e27683222187b61655f1e0b82e12596.gif\";","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n completed: {\n id: 'learning.celebration.completed',\n defaultMessage: 'You just completed the first section of your course.',\n description: 'Shown only once to leaner when they complete their first section',\n },\n congrats: {\n id: 'learning.celebration.congrats',\n defaultMessage: 'Congratulations!',\n description: 'Greeting for learners when they complete their weekly goal or finish the first section',\n },\n earned: {\n id: 'learning.celebration.earned',\n defaultMessage: 'You earned it!',\n description: 'Shown below congrats messaging when leaner complete a goal',\n },\n emailSubject: {\n id: 'learning.celebration.emailSubject',\n defaultMessage: \"I'm on my way to completing {title} online with {platform}!\",\n description: 'Subject when sharing course progress via email',\n },\n forward: {\n id: 'learning.celebration.forward',\n defaultMessage: 'Keep going',\n description: 'Button to close celebration dialog and get back to course',\n },\n goalMet: {\n id: 'learning.celebration.goalMet',\n defaultMessage: 'You met your goal!',\n description: 'Headline for (weekly gaol celebration) section in courseware',\n },\n keepItUp: {\n id: 'learning.celebration.keepItUp',\n defaultMessage: 'Keep it up',\n description: 'Button to close celebration dialog and get back to course',\n },\n share: {\n id: 'learning.celebration.share',\n defaultMessage: 'Take a moment to celebrate and share your progress.',\n description: 'Text that precedes the (sharing icon) for goal accomplishment ',\n },\n socialMessage: {\n id: 'learning.celebration.social',\n defaultMessage: 'I’m on my way to completing {title} online with {platform}. What are you spending your time learning?',\n description: 'Shown when sharing course progress on a social network',\n },\n});\n\nexport default messages;\n","/* eslint-disable import/prefer-default-export */\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth';\n\n// Does not block on answer\nexport function postCelebrationComplete(courseId, data) {\n const url = new URL(`${getConfig().LMS_BASE_URL}/api/courseware/celebration/${courseId}`);\n getAuthenticatedHttpClient().post(url.href, data);\n}\n","import { sendTrackEvent } from '@edx/frontend-platform/analytics';\nimport { getAuthenticatedUser } from '@edx/frontend-platform/auth';\n\nimport { postCelebrationComplete } from './data/api';\nimport { clearLocalStorage, getLocalStorage, setLocalStorage } from '../../../data/localStorage';\nimport { updateModel } from '../../../generic/model-store';\n\nconst CELEBRATION_LOCAL_STORAGE_KEY = 'CelebrationModal.showOnSectionLoad';\n\n// Records clicks through the end of a section, so that we can know whether we should celebrate when we finish loading\nfunction handleNextSectionCelebration(sequenceId, nextSequenceId) {\n setLocalStorage(CELEBRATION_LOCAL_STORAGE_KEY, {\n prevSequenceId: sequenceId,\n nextSequenceId,\n });\n}\n\nfunction recordFirstSectionCelebration(org, courseId, celebrations, dispatch) {\n // Tell the LMS\n postCelebrationComplete(courseId, { first_section: false });\n // Update our local copy of course data from LMS\n dispatch(updateModel({\n modelType: 'courseHomeMeta',\n model: {\n id: courseId,\n celebrations: {\n ...celebrations,\n firstSection: false,\n },\n },\n }));\n\n // Tell our analytics\n const { administrator } = getAuthenticatedUser();\n sendTrackEvent('edx.ui.lms.celebration.first_section.opened', {\n org_key: org,\n courserun_key: courseId,\n course_id: courseId, // should only be courserun_key, but left as-is for historical reasons\n is_staff: administrator,\n });\n}\n\nfunction recordWeeklyGoalCelebration(org, courseId) {\n // Tell the LMS\n postCelebrationComplete(courseId, { weekly_goal: false });\n\n // Tell our analytics\n const { administrator } = getAuthenticatedUser();\n sendTrackEvent('edx.ui.lms.celebration.weekly_goal.opened', {\n org_key: org,\n courserun_key: courseId,\n is_staff: administrator,\n });\n}\n\n// Looks at local storage to see whether we just came from the end of a section.\n// Note! This does have side effects (will clear some local storage and may start an api call).\nfunction shouldCelebrateOnSectionLoad(courseId, sequenceId, celebrateFirstSection, dispatch, celebrations) {\n const celebrationIds = getLocalStorage(CELEBRATION_LOCAL_STORAGE_KEY);\n if (!celebrationIds) {\n return false;\n }\n\n const {\n prevSequenceId,\n nextSequenceId,\n } = celebrationIds;\n const onTargetSequence = sequenceId === nextSequenceId;\n let shouldCelebrate = onTargetSequence && celebrateFirstSection;\n\n if (shouldCelebrate && celebrations.streakLengthToCelebrate) {\n // We don't want two modals to show up on the same page.\n // If we are going to celebrate a streak then we will not also celebrate the first section.\n // We will still mark the first section as celebrated, so that we don't incorrectly celebrate the second section.\n shouldCelebrate = false;\n postCelebrationComplete(courseId, { first_section: false });\n }\n\n if (sequenceId !== prevSequenceId && !onTargetSequence) {\n // Don't clear until we move off of current/prev sequence\n clearLocalStorage(CELEBRATION_LOCAL_STORAGE_KEY);\n\n // Update our local copy of course data from LMS\n dispatch(updateModel({\n modelType: 'courseHomeMeta',\n model: {\n id: courseId,\n celebrations: {\n ...celebrations,\n firstSection: false,\n },\n },\n }));\n }\n\n return shouldCelebrate;\n}\n\nexport {\n handleNextSectionCelebration,\n recordFirstSectionCelebration,\n recordWeeklyGoalCelebration,\n shouldCelebrateOnSectionLoad,\n};\n","import React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport {\n ActionRow,\n breakpoints,\n Button,\n StandardModal,\n useWindowSize,\n} from '@openedx/paragon';\n\nimport { useDispatch } from 'react-redux';\nimport ClapsMobile from './assets/claps_280x201.gif';\nimport ClapsTablet from './assets/claps_456x328.gif';\nimport messages from './messages';\nimport SocialIcons from '../../social-share/SocialIcons';\nimport { recordFirstSectionCelebration } from './utils';\nimport { useModel } from '../../../generic/model-store';\n\nconst CelebrationModal = ({\n courseId, intl, isOpen, onClose, ...rest\n}) => {\n const { org, celebrations } = useModel('courseHomeMeta', courseId);\n const dispatch = useDispatch();\n const wideScreen = useWindowSize().width >= breakpoints.small.minWidth;\n\n useEffect(() => {\n if (isOpen) {\n recordFirstSectionCelebration(org, courseId, celebrations, dispatch);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen]);\n\n return (\n \n \n \n )}\n hasCloseButton={false}\n isOpen={isOpen}\n onClose={onClose}\n title={(\n

{intl.formatMessage(messages.congrats)}

\n )}\n {...rest}\n >\n <>\n

{intl.formatMessage(messages.completed)}

\n {!wideScreen && \"\"}\n {wideScreen && \"\"}\n

\n {intl.formatMessage(messages.earned)} {intl.formatMessage(messages.share)}\n

\n \n \n \n );\n};\n\nCelebrationModal.propTypes = {\n courseId: PropTypes.string.isRequired,\n intl: intlShape.isRequired,\n isOpen: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n};\n\nexport default injectIntl(CelebrationModal);\n","var _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _path9, _path10, _path11, _path12, _path13, _path14, _path15, _path16, _path17, _path18, _path19, _path20;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgTarget = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 139,\n height: 160,\n fill: \"none\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#2D494E\",\n d: \"M76.031 156.25V3.888a2.48 2.48 0 0 0-2.26-2.527 2.39 2.39 0 0 0-2.519 2.388V156.25a2.387 2.387 0 0 0 2.39 2.388 2.39 2.39 0 0 0 2.389-2.388\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#2D494E\",\n d: \"M73.642 159.561a3.31 3.31 0 0 1-3.312-3.311V3.75A3.3 3.3 0 0 1 73.817.438a3.386 3.386 0 0 1 3.137 3.448V156.25a3.31 3.31 0 0 1-3.312 3.311m0-157.278a1.45 1.45 0 0 0-1.467 1.466V156.25a1.467 1.467 0 0 0 2.934 0V3.887a1.56 1.56 0 0 0-1.384-1.604zM29.399 156.97c8.303-26.124 15.775-48.873 23.192-70.82a2.47 2.47 0 0 0-1.227-3.07 2.39 2.39 0 0 0-3.257 1.41c-7.444 22.003-14.916 44.834-23.265 71.004a2.39 2.39 0 0 0 2.279 3.117 2.39 2.39 0 0 0 2.278-1.641\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#2D494E\",\n d: \"M27.12 159.56a3.304 3.304 0 0 1-3.272-2.785 3.3 3.3 0 0 1 .117-1.539c8.377-26.318 15.775-48.873 23.266-71.004a3.33 3.33 0 0 1 4.52-1.955 3.42 3.42 0 0 1 1.716 4.205c-7.472 22.131-14.843 44.594-23.192 70.801a3.28 3.28 0 0 1-3.155 2.277m23.247-75.77a1.46 1.46 0 0 0-1.383.995c-7.491 22.131-14.88 44.705-23.266 71.004a1.47 1.47 0 0 0 .222 1.318 1.43 1.43 0 0 0 1.18.6 1.496 1.496 0 0 0 1.402-1.024c8.303-26.225 15.683-48.734 23.202-70.837a1.465 1.465 0 0 0-1.357-2.066zM120.164 158.639a2.4 2.4 0 0 0 1.927-.983 2.4 2.4 0 0 0 .351-2.134 3844 3844 0 0 0-23.237-70.948 2.44 2.44 0 0 0-2.602-1.688 2.39 2.39 0 0 0-1.956 3.136c7.427 21.974 14.899 44.778 23.229 70.948a2.41 2.41 0 0 0 2.288 1.669\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#2D494E\",\n d: \"M120.164 159.56a3.3 3.3 0 0 1-3.164-2.315c-8.367-26.271-15.747-48.808-23.229-70.93a3.26 3.26 0 0 1 .323-2.766 3.3 3.3 0 0 1 2.39-1.54 3.36 3.36 0 0 1 3.597 2.306c7.472 22.131 14.861 44.667 23.238 71.003a3.31 3.31 0 0 1-1.656 3.957 3.3 3.3 0 0 1-1.499.359zM96.908 83.79h-.176a1.476 1.476 0 0 0-1.217 1.926c7.49 22.131 14.87 44.677 23.247 71.004a1.48 1.48 0 0 0 1.402 1.023 1.465 1.465 0 0 0 1.393-1.918c-8.367-26.28-15.747-48.826-23.229-70.93a1.55 1.55 0 0 0-1.42-1.106\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#03C7E8\",\n d: \"M73.642 138.628c35.236 0 63.8-28.552 63.8-63.774 0-35.221-28.564-63.774-63.8-63.774s-63.8 28.553-63.8 63.774 28.564 63.774 63.8 63.774\"\n})), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#2D494E\",\n d: \"M73.642 139.559a64.75 64.75 0 0 1-35.966-10.9 64.7 64.7 0 0 1-23.845-29.037 64.68 64.68 0 0 1 14.026-70.518 64.757 64.757 0 0 1 70.545-14.03 64.73 64.73 0 0 1 29.053 23.83 64.7 64.7 0 0 1 10.91 35.95 64.77 64.77 0 0 1-18.978 45.729 64.82 64.82 0 0 1-45.745 18.976m0-127.557A62.9 62.9 0 0 0 38.7 22.592a62.87 62.87 0 0 0-23.165 28.21 62.84 62.84 0 0 0 13.63 68.511 62.912 62.912 0 0 0 68.538 13.625 62.9 62.9 0 0 0 28.222-23.157 62.85 62.85 0 0 0 10.595-34.927 62.92 62.92 0 0 0-18.438-44.422 62.97 62.97 0 0 0-44.44-18.43\"\n})), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M73.642 127.701c29.198 0 52.868-23.661 52.868-52.847 0-29.187-23.67-52.847-52.868-52.847s-52.869 23.66-52.869 52.847c0 29.186 23.67 52.847 52.869 52.847\"\n})), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#2D494E\",\n d: \"M73.642 128.623a53.8 53.8 0 0 1-29.885-9.062 53.77 53.77 0 0 1-19.811-24.13 53.75 53.75 0 0 1 11.66-58.597 53.813 53.813 0 0 1 58.62-11.656 53.8 53.8 0 0 1 24.142 19.804 53.76 53.76 0 0 1 9.065 29.872 53.82 53.82 0 0 1-15.771 38.004 53.86 53.86 0 0 1-38.02 15.765m0-105.684a51.96 51.96 0 0 0-28.86 8.751 51.93 51.93 0 0 0-19.133 23.305 51.905 51.905 0 0 0 11.265 56.588 51.965 51.965 0 0 0 56.613 11.25 51.94 51.94 0 0 0 23.311-19.129 51.9 51.9 0 0 0 8.75-28.85 51.97 51.97 0 0 0-15.234-36.694 52 52 0 0 0-36.712-15.221\"\n})), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#03C7E8\",\n d: \"M73.642 114.091c21.679 0 39.252-17.567 39.252-39.236 0-21.67-17.574-39.237-39.252-39.237S34.39 53.185 34.39 74.855s17.574 39.236 39.252 39.236\"\n})), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#2D494E\",\n d: \"M73.642 115.041a40.2 40.2 0 0 1-22.336-6.746 40.17 40.17 0 0 1-14.82-18.014 40.15 40.15 0 0 1 8.673-43.788 40.19 40.19 0 0 1 43.791-8.74 40.18 40.18 0 0 1 24.83 37.101 40.2 40.2 0 0 1-11.76 28.385 40.24 40.24 0 0 1-28.378 11.802m0-78.482a38.35 38.35 0 0 0-21.316 6.438 38.31 38.31 0 0 0-5.847 58.977 38.34 38.34 0 0 0 19.637 10.495 38.343 38.343 0 0 0 39.368-16.31 38.3 38.3 0 0 0 6.451-21.305 38.35 38.35 0 0 0-11.227-27.065A38.38 38.38 0 0 0 73.642 36.54z\"\n})), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M73.642 101.688c14.826 0 26.845-12.014 26.845-26.834S88.468 48.021 73.642 48.021 46.797 60.034 46.797 74.854s12.02 26.834 26.845 26.834\"\n})), _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#2D494E\",\n d: \"M73.642 102.611a27.8 27.8 0 0 1-15.43-4.674 27.76 27.76 0 0 1-11.814-28.492 27.75 27.75 0 0 1 7.597-14.214 27.772 27.772 0 0 1 42.725 4.202 27.75 27.75 0 0 1 4.68 15.422 27.78 27.78 0 0 1-8.138 19.615 27.8 27.8 0 0 1-19.62 8.141m0-53.659a25.93 25.93 0 0 0-14.405 4.363 25.902 25.902 0 0 0-3.934 39.87 25.925 25.925 0 0 0 28.254 5.616 25.9 25.9 0 0 0 11.633-9.547 25.9 25.9 0 0 0 4.365-14.4 25.93 25.93 0 0 0-7.6-18.304 25.96 25.96 0 0 0-18.313-7.598\"\n})), _path13 || (_path13 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#03C7E8\",\n d: \"M73.642 89.719c8.213 0 14.87-6.656 14.87-14.865 0-8.21-6.657-14.865-14.87-14.865s-14.87 6.655-14.87 14.865 6.657 14.865 14.87 14.865\"\n})), _path14 || (_path14 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#2D494E\",\n d: \"M73.642 90.64a15.8 15.8 0 0 1-14.591-9.745 15.78 15.78 0 0 1 3.423-17.204 15.796 15.796 0 0 1 26.961 11.163 15.8 15.8 0 0 1-4.631 11.158 15.82 15.82 0 0 1-11.162 4.629m0-29.728a13.95 13.95 0 0 0-12.887 8.607 13.94 13.94 0 0 0 3.024 15.194 13.95 13.95 0 0 0 23.811-9.859 13.96 13.96 0 0 0-4.09-9.853 13.97 13.97 0 0 0-9.858-4.09\"\n})), _path15 || (_path15 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#D23228\",\n d: \"m16.087 29.394-14.53 6.528 21.117 16.266 15.202-5.938z\"\n})), _path16 || (_path16 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#2D494E\",\n d: \"M22.674 53.11a1 1 0 0 1-.572-.184L.995 36.659a.923.923 0 0 1 .185-1.567l14.529-6.529a.92.92 0 0 1 .922.11l21.79 16.857a.923.923 0 0 1-.23 1.596l-15.204 5.938a1 1 0 0 1-.313.046M3.3 36.125l19.484 15.02 13.2-5.154-19.99-15.528z\"\n})), _path17 || (_path17 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#D23228\",\n d: \"m15.773 28.48 5.083-13.306 18.727 17.889-1.706 13.186z\"\n})), _path18 || (_path18 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#2D494E\",\n d: \"M37.877 47.172a.92.92 0 0 1-.582-.203L15.155 29.2a.92.92 0 0 1-.286-1.051l5.083-13.297a.92.92 0 0 1 .664-.572.92.92 0 0 1 .914.25l18.736 17.888a.92.92 0 0 1 .276.784L38.827 46.39a.92.92 0 0 1-.572.737.9.9 0 0 1-.379.046m-20.96-18.995 20.295 16.33 1.44-11.065-17.399-16.598z\"\n})), _path19 || (_path19 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F0CC00\",\n d: \"M73.882 77.234a2.15 2.15 0 0 1-1.329-.47L6.862 24.58a2.15 2.15 0 1 1 2.675-3.356L75.22 73.425a2.148 2.148 0 0 1-1.337 3.827z\"\n})), _path20 || (_path20 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#2D494E\",\n d: \"M73.882 78.155a3.05 3.05 0 0 1-1.9-.673L6.29 25.299a3.07 3.07 0 0 1-.443-4.316 3.08 3.08 0 0 1 4.308-.498l65.692 52.211a3.07 3.07 0 0 1-1.92 5.468zM8.2 21.657a1.227 1.227 0 0 0-.757 2.185l65.682 52.201a1.254 1.254 0 0 0 1.716-.193 1.226 1.226 0 0 0-.194-1.725L8.965 21.905a1.26 1.26 0 0 0-.765-.23z\"\n})));\nexport { SvgTarget as ReactComponent };\nexport default __webpack_public_path__ + \"576c66a8c6641bf4ae79601dcb8f6d07.svg\";","import React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { FormattedMessage, injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport {\n ActionRow, Button, Icon, StandardModal,\n} from '@openedx/paragon';\nimport { Lightbulb } from '@openedx/paragon/icons';\n\nimport Target from './assets/target.svg';\nimport messages from './messages';\nimport { recordWeeklyGoalCelebration } from './utils';\nimport { useModel } from '../../../generic/model-store';\n\nconst WeeklyGoalCelebrationModal = ({\n courseId, daysPerWeek, intl, isOpen, onClose, ...rest\n}) => {\n const { org } = useModel('courseHomeMeta', courseId);\n\n useEffect(() => {\n if (isOpen) {\n recordWeeklyGoalCelebration(org, courseId);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen]);\n\n return (\n \n \n \n )}\n hasCloseButton={false}\n isOpen={isOpen}\n onClose={onClose}\n title={(\n

{intl.formatMessage(messages.goalMet)}

\n )}\n {...rest}\n >\n <>\n
\n {daysPerWeek} {daysPerWeek === 1 ? 'time' : 'times'}),\n }}\n />\n
\n
\n \"\"\n
\n
\n \n
\n achieve higher performance),\n }}\n />\n
\n
\n \n \n );\n};\n\nWeeklyGoalCelebrationModal.propTypes = {\n courseId: PropTypes.string.isRequired,\n daysPerWeek: PropTypes.number.isRequired,\n intl: intlShape.isRequired,\n isOpen: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n};\n\nexport default injectIntl(WeeklyGoalCelebrationModal);\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n 'calculator.button.label': {\n id: 'calculator.button.label',\n defaultMessage: 'Calculator',\n description: 'Button label to expand or close the calculator',\n },\n 'calculator.input.field.label': {\n id: 'calculator.input.field.label',\n defaultMessage: 'Calculator Input',\n description: 'label for calculator input',\n },\n 'calculator.submit.button.label': {\n id: 'calculator.submit.button.label',\n defaultMessage: 'Calculate',\n description: 'Submit button label to execute the calculator',\n },\n 'calculator.result.field.label': {\n id: 'calculator.result.field.label',\n defaultMessage: 'Calculator Result',\n description: 'label for calculator result',\n },\n 'calculator.result.field.placeholder': {\n id: 'calculator.result.field.placeholder',\n defaultMessage: 'Result',\n description: 'placeholder for calculator result',\n },\n});\n\nexport default messages;\n","import React, { Component } from 'react';\nimport { Collapsible } from '@openedx/paragon';\nimport { getConfig } from '@edx/frontend-platform';\nimport { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth';\nimport {\n FormattedMessage, injectIntl, intlShape,\n} from '@edx/frontend-platform/i18n';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n faCalculator, faQuestionCircle, faTimesCircle, faEquals,\n} from '@fortawesome/free-solid-svg-icons';\nimport messages from './messages';\n\nclass Calculator extends Component {\n constructor(props) {\n super(props);\n this.state = {\n equation: '',\n result: '',\n };\n this.handleSubmit = this.handleSubmit.bind(this);\n }\n\n async handleSubmit(event) {\n event.preventDefault();\n event.stopPropagation();\n const urlEncoded = new URLSearchParams();\n urlEncoded.append('equation', this.state.equation);\n\n const response = await getAuthenticatedHttpClient().get(\n `${getConfig().LMS_BASE_URL}/calculate?${urlEncoded.toString()}`,\n );\n this.setState(() => ({ result: response.data.result }));\n }\n\n changeEquation(value) {\n this.setState(() => ({ equation: value }));\n }\n\n render() {\n return (\n \n
\n \n \n \n \n \n \n \n {this.props.intl.formatMessage(messages['calculator.button.label'])}\n \n
\n \n
\n this.changeEquation(event.target.value)}\n />\n \n \n \n \n \n\n \n
\n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n ),\n }}\n />\n

\n \n \n \n

\n
    \n
  • \n \n
  • \n
  • \n \n
  • \n
  • \n \n
  • \n
  • \n \n
  • \n
  • \n \n
  • \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n
\n \n \n
    \n
  • \n \n
  • \n
  • \n \n
  • \n
  • \n \n
  • \n
\n
\n
    \n
  • 2520
  • \n
  • 2/3
  • \n
  • 3.14, .98
  • \n
\n
\n \n \n
    \n
  • \n {' + - * / '}\n \n
  • \n
  • \n {'^ '}\n \n
  • \n
  • \n {'|| '}\n \n
  • \n
\n
\n
    \n
  • x+(2*y)/x-1
  • \n
  • x^(n+1)
  • \n
  • v_IN+v_OUT
  • \n
  • 1||2
  • \n
\n
\n \n e, pi\n
    \n
  • 20*e
  • \n
  • 418*pi
  • \n
\n
\n \n \n \n \n
    \n
  • 20%
  • \n
\n
\n \n abs, exp, fact, factorial, ln, log2, log10, sqrt\n
    \n
  • abs(x+y)
  • \n
  • sqrt(x^2-y)
  • \n
\n
\n \n \n
    \n
  • sin, cos, tan, sec, csc, cot
  • \n
  • arcsin, sinh, arcsinh
  • \n
\n
\n
    \n
  • sin(4x+y)
  • \n
  • arccsch(4x+y)
  • \n
\n
\n
\n \n \n \n 10^-9
\n \n \n \n 1e-9
\n
\n
\n
\n
\n );\n }\n}\n\nCalculator.propTypes = {\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(Calculator);\n","import Calculator from './Calculator';\n\nexport default Calculator;\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n 'notes.button.show': {\n id: 'notes.button.show',\n defaultMessage: 'Show Notes',\n description: 'Message for toggling notes visibility',\n },\n 'notes.button.hide': {\n id: 'notes.button.hide',\n defaultMessage: 'Hide Notes',\n description: 'Message for toggling notes visibility',\n },\n});\n\nexport default messages;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth';\nimport {\n injectIntl, intlShape,\n} from '@edx/frontend-platform/i18n';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faPencilAlt } from '@fortawesome/free-solid-svg-icons';\nimport messages from './messages';\n\nfunction toggleNotes() {\n const iframe = document.getElementById('unit-iframe');\n iframe.contentWindow.postMessage('tools.toggleNotes', getConfig().LMS_BASE_URL);\n}\n\nclass NotesVisibility extends Component {\n constructor(props) {\n super(props);\n this.state = {\n visible: props.course.notes.visible,\n };\n this.visibilityUrl = `${getConfig().LMS_BASE_URL}/courses/${props.course.id}/edxnotes/visibility/`;\n }\n\n handleClick = () => {\n const data = { visibility: !this.state.visible };\n getAuthenticatedHttpClient().put(\n this.visibilityUrl,\n data,\n ).then(() => {\n this.setState((state) => ({ visible: !state.visible }));\n toggleNotes();\n });\n };\n\n render() {\n const message = this.state.visible ? 'notes.button.hide' : 'notes.button.show';\n return (\n \n \n {this.props.intl.formatMessage(messages[message])}\n \n );\n }\n}\n\nNotesVisibility.propTypes = {\n intl: intlShape.isRequired,\n course: PropTypes.shape({\n id: PropTypes.string.isRequired,\n notes: PropTypes.shape({\n visible: PropTypes.bool,\n }).isRequired,\n }).isRequired,\n};\n\nexport default injectIntl(NotesVisibility);\n","import NotesVisibility from './NotesVisibility';\n\nexport default NotesVisibility;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useSelector } from 'react-redux';\n\nimport Calculator from './calculator';\nimport NotesVisibility from './notes-visibility';\n\nconst ContentTools = ({\n course,\n}) => {\n const {\n sidebarIsOpen,\n } = useSelector(state => state.learningAssistant);\n\n return (\n !sidebarIsOpen && (\n
\n
\n {course.showCalculator && (\n \n )}\n {course.notes.enabled && (\n \n )}\n
\n
\n )\n );\n};\n\nContentTools.propTypes = {\n course: PropTypes.shape({\n notes: PropTypes.shape({\n enabled: PropTypes.bool,\n }),\n showCalculator: PropTypes.bool,\n }).isRequired,\n};\n\nexport default ContentTools;\n","import ContentTools from './ContentTools';\n\nexport default ContentTools;\n","/* eslint-disable no-param-reassign */\nimport { createSlice } from '@reduxjs/toolkit';\n\nexport const LOADING = 'loading';\nexport const LOADED = 'loaded';\nexport const FAILED = 'failed';\n\nconst slice = createSlice({\n courseId: null,\n name: 'recommendations',\n initialState: {\n recommendationsStatus: LOADING,\n },\n reducers: {\n fetchCourseRecommendationsRequest: (state, { payload }) => {\n state.courseId = payload.courseId;\n state.recommendationsStatus = LOADING;\n },\n fetchCourseRecommendationsSuccess: (state, { payload }) => {\n state.courseId = payload.courseId;\n state.recommendationsStatus = LOADED;\n },\n fetchCourseRecommendationsFailure: (state, { payload }) => {\n state.courseId = payload.courseId;\n state.recommendationsStatus = FAILED;\n },\n },\n});\n\nexport const {\n fetchCourseRecommendationsRequest,\n fetchCourseRecommendationsSuccess,\n fetchCourseRecommendationsFailure,\n} = slice.actions;\n\nexport const {\n reducer,\n} = slice;\n","import { logError } from '@edx/frontend-platform/logging';\n\nimport {\n fetchCourseRecommendationsFailure,\n fetchCourseRecommendationsRequest,\n fetchCourseRecommendationsSuccess,\n} from './slice';\nimport {\n getCourseRecommendations,\n postUnsubscribeFromGoalReminders,\n} from './api';\nimport { updateModel } from '../../../../generic/model-store';\n\nexport default function fetchCourseRecommendations(courseKey, courseId) {\n return async (dispatch) => {\n dispatch(fetchCourseRecommendationsRequest({ courseId }));\n try {\n const recommendations = await getCourseRecommendations(courseKey);\n dispatch(updateModel({\n modelType: 'coursewareMeta',\n model: {\n id: courseId,\n recommendations,\n },\n }));\n dispatch(fetchCourseRecommendationsSuccess({ courseId }));\n } catch (error) {\n logError(error);\n dispatch(fetchCourseRecommendationsFailure({ courseId }));\n }\n };\n}\n\nexport async function unsubscribeFromGoalReminders(courseId, daysPerWeek, subscribedToReminders) {\n return postUnsubscribeFromGoalReminders(courseId, daysPerWeek, subscribedToReminders);\n}\n","import { getConfig, camelCaseObject } from '@edx/frontend-platform';\nimport { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth';\n\nfunction filterRecommendationsList(\n {\n data: {\n uuid,\n recommendations,\n },\n },\n {\n data: enrollments,\n },\n) {\n const enrollmentRunIds = enrollments.map(({\n courseDetails: {\n courseId,\n },\n }) => courseId);\n\n return recommendations.filter(({ uuid: recUuid, courseRunKeys }) => (\n recUuid !== uuid && courseRunKeys.every((key) => !enrollmentRunIds.includes(key))\n ));\n}\n\nexport async function getCourseRecommendations(courseKey) {\n const discoveryApiUrl = getConfig().DISCOVERY_API_BASE_URL;\n if (!discoveryApiUrl) {\n return [];\n }\n const recommendationsUrl = new URL(`${discoveryApiUrl}/api/v1/course_recommendations/${courseKey}?exclude_utm=true`);\n const enrollmentsUrl = new URL(`${getConfig().LMS_BASE_URL}/api/enrollment/v1/enrollment`);\n const [recommendationsResponse, enrollmentsResponse] = await Promise.all([\n getAuthenticatedHttpClient().get(recommendationsUrl),\n getAuthenticatedHttpClient().get(enrollmentsUrl),\n ]);\n return filterRecommendationsList(camelCaseObject(recommendationsResponse), camelCaseObject(enrollmentsResponse));\n}\n\nexport async function postUnsubscribeFromGoalReminders(courseId) {\n const url = new URL(`${getConfig().LMS_BASE_URL}/api/course_home/save_course_goal`);\n return getAuthenticatedHttpClient().post(url.href, {\n course_id: courseId,\n subscribed_to_reminders: false,\n });\n}\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n applyForCredit: {\n id: 'courseExit.programs.applyForCredit',\n defaultMessage: 'Apply for credit',\n description: 'Button for the learner to apply for course credit',\n },\n certificateHeaderDownloadable: {\n id: 'courseCelebration.certificateHeader.downloadable',\n defaultMessage: 'Your certificate is available!',\n description: 'Text displayed when course certificate is ready to be downloaded',\n },\n certificateHeaderNotAvailable: {\n id: 'courseCelebration.certificateHeader.notAvailable',\n defaultMessage: 'Your grade and certificate status will be available soon.',\n description: 'Header displayed when course certificate is not yet available to be viewed',\n },\n certificateNotAvailableBodyAccessCert: {\n id: 'courseCelebration.certificateBody.notAvailable.accessCertificate',\n defaultMessage: 'If you have earned a passing grade, your certificate will be automatically issued.',\n description: 'Text displayed when course certificate is not yet available to be viewed',\n },\n certificateNotAvailableEndDateBody: {\n id: 'courseCelebration.certificateBody.notAvailable.endDate',\n defaultMessage: 'Final grades and any earned certificates are scheduled to be available after {endDate}.',\n description: 'Shown for learners who have finished a course before grades and certificates are available.',\n },\n certificateHeaderUnverified: {\n id: 'courseCelebration.certificateHeader.unverified',\n defaultMessage: 'You must complete verification to receive your certificate.',\n description: 'Text displayed when a user has not verified their identity and cannot view their course certificate',\n },\n certificateHeaderRequestable: {\n id: 'courseCelebration.certificateHeader.requestable',\n defaultMessage: 'Congratulations, you qualified for a certificate!',\n description: 'Text displayed when a user has completed the course and can request a certificate',\n },\n certificateHeaderUpgradable: {\n id: 'courseCelebration.certificateHeader.upgradable',\n defaultMessage: 'Upgrade to pursue a verified certificate',\n description: 'Header when learner finished or pass the course but need to upgrade to get a certificate',\n },\n certificateImage: {\n id: 'courseCelebration.certificateImage',\n defaultMessage: 'Sample certificate',\n description: 'Alt text used to describe an image of a certificate',\n },\n completedCourseHeader: {\n id: 'courseCelebration.completedCourseHeader',\n defaultMessage: 'You have completed your course.',\n description: 'Header text for course exit section',\n },\n congratulationsHeader: {\n id: 'courseCelebration.congratulationsHeader',\n defaultMessage: 'Congratulations!',\n description: 'Greeting learner for finishing the course',\n },\n congratulationsImage: {\n id: 'courseCelebration.congratulationsImage',\n defaultMessage: 'Four people raising their hands in celebration',\n description: 'Alt text used to describe celebratory image',\n },\n courseInProgressDescription: {\n id: 'courseExit.courseInProgressDescription',\n defaultMessage: 'It looks like there is more content in this course that will be released in the future. Look out for email updates or check back on your course for when this content will be available.',\n description: 'Shown to learner when they finish all available assignments, but not the whole course',\n },\n courseInProgressHeader: {\n id: 'courseExit.courseInProgressHeader',\n defaultMessage: 'More content is coming soon!',\n description: 'Header when the status of the course not all of (contents or assignments) available yet',\n },\n dashboardLink: {\n id: 'courseExit.dashboardLink',\n defaultMessage: 'Dashboard',\n description: 'Link to user’s dashboard',\n },\n endOfCourseDescription: {\n id: 'courseExit.endOfCourseDescription',\n defaultMessage: 'Unfortunately, you are not currently eligible for a certificate. You need to receive a passing grade to be eligible for a certificate.',\n description: 'Shown to learner when they did not pass the course',\n },\n endOfCourseHeader: {\n id: 'courseExit.endOfCourseHeader',\n defaultMessage: 'You’ve reached the end of the course!',\n },\n endOfCourseTitle: {\n id: 'courseExit.endOfCourseTitle',\n defaultMessage: 'End of Course',\n },\n idVerificationSupportLink: {\n id: 'courseExit.idVerificationSupportLink',\n defaultMessage: 'Learn more about ID verification',\n description: 'Link to an article about identity verification',\n },\n linkedinAddToProfileButton: {\n id: 'courseCelebration.linkedinAddToProfileButton',\n defaultMessage: 'Add to LinkedIn profile',\n description: 'Button to add certificate information to the user’s LinkedIn profile',\n },\n microBachelorsLearnMore: {\n id: 'courseExit.programs.microBachelors.learnMore',\n defaultMessage: 'Learn more about how your MicroBachelors credential can be applied for credit.',\n },\n microMastersLearnMore: {\n id: 'courseExit.programs.microMasters.learnMore',\n defaultMessage: 'Learn more about the process of applying MicroMasters certificates to Master’s degrees.',\n },\n microMastersMessage: {\n id: 'courseExit.programs.microMasters.mastersMessage',\n defaultMessage: 'If you’re interested in using your MicroMasters certificate towards a Master’s program, you can get started today!',\n },\n nextButtonComplete: {\n id: 'learn.sequence.navigation.complete.button', // for historical reasons\n defaultMessage: 'Complete the course',\n description: 'This text is shown on the button which usually links to the next unit or assignment in course sequence, however when it is the last unit. The button will link to course exit page',\n },\n nextButtonEnd: {\n id: 'courseExit.nextButton.endOfCourse',\n defaultMessage: 'Next (end of course)',\n description: 'This shown for the button which links to the next unit, when learner did not pass the course',\n },\n profileLink: {\n id: 'courseExit.profileLink',\n defaultMessage: 'Profile',\n description: 'Link to user’s profile',\n },\n programsLastCourseHeader: {\n id: 'courseExit.programs.lastCourse',\n defaultMessage: 'You have completed the last course in {title}!',\n description: 'This shown to learner when the course they completed is the last one of a program, the program might be mircomaster, or microbachelors...etc',\n },\n requestCertificateBodyText: {\n id: 'courseCelebration.requestCertificateBodyText',\n defaultMessage: 'In order to access your certificate, request it below.',\n description: 'Shown when learner need to request the certifcate',\n },\n requestCertificateButton: {\n id: 'courseCelebration.requestCertificateButton',\n defaultMessage: 'Request certificate',\n description: 'Button to request the course certificate',\n },\n searchOurCatalogLink: {\n id: 'courseExit.searchOurCatalogLink',\n defaultMessage: 'Search our catalog',\n description: 'First part of a sentence that continues afterward',\n },\n shareMessage: {\n id: 'courseCelebration.shareMessage',\n defaultMessage: 'Share your success on social media or email.',\n description: 'Recommending an action when learner pass the course',\n },\n socialMessage: {\n id: 'courseExit.social.shareCompletionMessage',\n defaultMessage: 'I just completed {title} with {platform}!',\n description: 'Shown when sharing course progress on a social network',\n },\n upgradeButton: {\n id: 'courseExit.upgradeButton',\n defaultMessage: 'Upgrade now',\n },\n upgradeLink: {\n id: 'courseExit.upgradeLink',\n defaultMessage: 'upgrade now',\n },\n verificationPending: {\n id: 'courseCelebration.verificationPending',\n defaultMessage: 'Your ID verification is pending and your certificate will be available once approved.',\n description: 'Shown when the status of verification is pending',\n },\n verifiedCertificateSupportLink: {\n id: 'courseExit.verifiedCertificateSupportLink',\n defaultMessage: 'Learn more about verified certificates',\n description: 'Anchor text for link that redirect to external help page about verified certificates',\n },\n verifyIdentityButton: {\n id: 'courseCelebration.verifyIdentityButton',\n defaultMessage: 'Verify ID now',\n description: 'Button to verify the identify of the user',\n },\n viewCertificateButton: {\n id: 'courseCelebration.viewCertificateButton',\n defaultMessage: 'View my certificate',\n description: 'Button to view the course certificate',\n },\n viewCourseScheduleButton: {\n id: 'courseExit.viewCourseScheduleButton',\n defaultMessage: 'View course schedule',\n description: 'Button to view the course schedule',\n },\n viewCoursesButton: {\n id: 'courseExit.viewCoursesButton',\n defaultMessage: 'View my courses',\n description: 'Button to redirect user to their course dashboard',\n },\n viewGradesButton: {\n id: 'courseExit.viewGradesButton',\n defaultMessage: 'View grades',\n },\n\n});\n\nexport default messages;\n","import { sendTrackEvent } from '@edx/frontend-platform/analytics';\nimport { getAuthenticatedUser } from '@edx/frontend-platform/auth';\n\nimport messages from './messages';\nimport { useModel } from '../../../generic/model-store';\n\nconst COURSE_EXIT_MODES = {\n disabled: 0,\n celebration: 1,\n nonPassing: 2,\n inProgress: 3,\n entranceExamFail: 4,\n};\n\n// These are taken from the edx-platform `get_cert_data` function found in lms/courseware/views/views.py\nconst CELEBRATION_STATUSES = [\n 'audit_passing',\n 'downloadable',\n 'earned_but_not_available',\n 'honor_passing',\n 'requesting',\n 'unverified',\n];\nconst NON_CERTIFICATE_STATUSES = [ // no certificate will be given, though a valid certificateData block is provided\n 'audit_passing',\n 'honor_passing', // provided when honor is configured to not give a certificate\n];\n\nfunction getCourseExitMode(\n certificateData,\n hasScheduledContent,\n isEnrolled,\n userHasPassingGrade,\n courseExitPageIsActive = null,\n canImmediatelyViewCertificate = false,\n entranceExamPassed = null,\n) {\n const authenticatedUser = getAuthenticatedUser();\n\n if (entranceExamPassed === false) {\n return COURSE_EXIT_MODES.entranceExamFail;\n }\n\n if (courseExitPageIsActive === false || !authenticatedUser || !isEnrolled) {\n return COURSE_EXIT_MODES.disabled;\n }\n\n // Set defaults for our status-calculated variables, used when no certificateData is provided.\n // This happens when `get_cert_data` in edx-platform returns None, which it does if we are\n // in a certificate-earning mode, but the certificate is not available (maybe they didn't pass\n // or course is not set up for certificates or something). Audit users will always have a\n // certificateData sent over.\n let isCelebratoryStatus = true;\n let isEligibleForCertificate = true;\n\n if (certificateData) {\n const { certStatus } = certificateData;\n isCelebratoryStatus = CELEBRATION_STATUSES.indexOf(certStatus) !== -1;\n isEligibleForCertificate = NON_CERTIFICATE_STATUSES.indexOf(certStatus) === -1;\n }\n\n if (hasScheduledContent && !userHasPassingGrade) {\n return COURSE_EXIT_MODES.inProgress;\n }\n if (isEligibleForCertificate && !userHasPassingGrade && canImmediatelyViewCertificate) {\n return COURSE_EXIT_MODES.nonPassing;\n }\n if (isCelebratoryStatus) {\n return COURSE_EXIT_MODES.celebration;\n }\n return COURSE_EXIT_MODES.disabled;\n}\n\n// Returns null in order to render the default navigation text\nfunction GetCourseExitNavigation(courseId, intl) {\n const {\n certificateData,\n hasScheduledContent,\n isEnrolled,\n userHasPassingGrade,\n courseExitPageIsActive,\n entranceExamData: { entranceExamPassed },\n } = useModel('coursewareMeta', courseId);\n const { canViewCertificate } = useModel('courseHomeMeta', courseId);\n const exitMode = getCourseExitMode(\n certificateData,\n hasScheduledContent,\n isEnrolled,\n userHasPassingGrade,\n courseExitPageIsActive,\n canViewCertificate,\n entranceExamPassed,\n );\n\n /** exitActive is used to enable/disable the exit i.e. next buttons.\n COURSE_EXIT_MODES denote the current status of the course.\n Available COURSE_EXIT_MODES: disabled, celebration, nonPassing, inProgress, entranceExamFail\n If the user fails the entrance exam,\n access to further course sections should not be allowed i.e. disable the next buttons. */\n const exitActive = ((exitMode !== COURSE_EXIT_MODES.disabled) && (exitMode !== COURSE_EXIT_MODES.entranceExamFail));\n\n let exitText;\n switch (exitMode) {\n case COURSE_EXIT_MODES.celebration:\n exitText = intl.formatMessage(messages.nextButtonComplete);\n break;\n case COURSE_EXIT_MODES.nonPassing:\n exitText = intl.formatMessage(messages.nextButtonEnd);\n break;\n default:\n exitText = null;\n }\n return { exitActive, exitText };\n}\n\n// Meant to be used as part of a button's onClick handler.\n// For convenience, you can pass a falsy event and it will be ignored.\nconst logClick = (org, courseId, administrator, event, extraProperties) => {\n if (!event) {\n return;\n }\n\n sendTrackEvent(`edx.ui.lms.course_exit.${event}.clicked`, {\n org_key: org,\n courserun_key: courseId,\n is_staff: administrator,\n ...extraProperties,\n });\n};\n\n// Use like the following to call this only once on initial page load:\n// useEffect(() => logVisit(org, courseId, administrator, variant), [org, courseId, administrator, variant]);\n// For convenience, you can pass a falsy variant and it will be ignored.\nconst logVisit = (org, courseId, administrator, variant) => {\n if (!variant) {\n return;\n }\n\n sendTrackEvent('edx.ui.lms.course_exit.visited', {\n org_key: org,\n courserun_key: courseId,\n is_staff: administrator,\n variant,\n });\n};\n\nexport {\n COURSE_EXIT_MODES,\n getCourseExitMode,\n GetCourseExitNavigation,\n logClick,\n logVisit,\n};\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n 'learn.course.license.allRightsReserved.text': {\n id: 'learn.course.license.allRightsReserved.text',\n defaultMessage: 'All Rights Reserved',\n description: 'License text shown when using All Rights Reserved license type.',\n },\n 'learn.course.license.creativeCommons.terms.preamble': {\n id: 'learn.course.license.creativeCommons.terms.preamble',\n defaultMessage: 'Creative Commons licensed content, with terms as follows:',\n description: 'Screen reader only text preamble before reading specific Creative Commons license terms.',\n },\n 'learn.course.license.creativeCommons.terms.by': {\n id: 'learn.course.license.creativeCommons.terms.by',\n defaultMessage: 'Attribution',\n description: 'Creative Commons license text for Attribution term.',\n },\n 'learn.course.license.creativeCommons.terms.nc': {\n id: 'learn.course.license.creativeCommons.terms.nc',\n defaultMessage: 'Noncommercial',\n description: 'Creative Commons license text for Noncommercial term.',\n },\n 'learn.course.license.creativeCommons.terms.nd': {\n id: 'learn.course.license.creativeCommons.terms.nd',\n defaultMessage: 'No Derivatives',\n description: 'Creative Commons license text for No Derivatives term.',\n },\n 'learn.course.license.creativeCommons.terms.sa': {\n id: 'learn.course.license.creativeCommons.terms.sa',\n defaultMessage: 'Share Alike',\n description: 'Creative Commons license text for Share Alike term.',\n },\n // No text for `zero` license\n 'learn.course.license.creativeCommons.terms.zero': {\n id: 'learn.course.license.creativeCommons.terms.zero',\n defaultMessage: 'No terms',\n description: 'Creative Commons license text for license with no terms.',\n },\n 'learn.course.license.creativeCommons.text': {\n id: 'learn.course.license.creativeCommons.text',\n defaultMessage: 'Some Rights Reserved',\n description: 'License text shown when using all Creative Commons license types.',\n },\n});\n\nexport default messages;\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n notificationTray: {\n id: 'notification.tray.container',\n defaultMessage: 'Notification tray',\n description: 'Notification tray container',\n },\n openNotificationTrigger: {\n id: 'notification.open.button',\n defaultMessage: 'Show notification tray',\n description: 'Button to open the notification tray and show notifications',\n },\n closeNotificationTrigger: {\n id: 'notification.close.button',\n defaultMessage: 'Close notification tray',\n description: 'Button for the learner to close the sidebar',\n },\n responsiveCloseNotificationTray: {\n id: 'responsive.close.notification',\n defaultMessage: 'Back to course',\n description: 'Responsive button to go back to course and close the notification tray',\n },\n notificationTitle: {\n id: 'notification.tray.title',\n defaultMessage: 'Notifications',\n description: 'Title text displayed for the notification tray',\n },\n noNotificationsMessage: {\n id: 'notification.tray.no.message',\n defaultMessage: 'You have no new notifications at this time.',\n description: 'Text displayed when the learner has no notifications',\n },\n});\n\nexport default messages;\n","import React from 'react';\n\nconst SidebarContext = React.createContext({});\n\nexport default SidebarContext;\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n discussionsTitle: {\n id: 'discussions.sidebar.title',\n defaultMessage: 'Discussions',\n description: 'Title text for a forum where users are able to discuss course topics',\n },\n discussionNotificationTray: {\n id: 'discussions.notification.tray.container',\n defaultMessage: 'Discussion and Notification tray',\n description: 'Discussion and Notification tray container',\n },\n notificationTitle: {\n id: 'notification.tray.title',\n defaultMessage: 'Notifications',\n description: 'Title text displayed for the notification tray',\n },\n closeTrigger: {\n id: 'tray.close.button',\n defaultMessage: 'Close tray',\n description: 'Button for the learner to close the sidebar',\n },\n openSidebarTrigger: {\n id: 'sidebar.open.button',\n defaultMessage: 'Show sidebar tray',\n description: 'Button to open the sidebar tray and shows notifications and didcussions',\n },\n responsiveCloseSidebarTray: {\n id: 'responsive.close.sidebar',\n defaultMessage: 'Back to course',\n description: 'Responsive button to go back to course and close the sidebar tray',\n },\n});\n\nexport default messages;\n","import React, { useCallback, useContext } from 'react';\nimport PropTypes from 'prop-types';\n\nimport classNames from 'classnames';\n\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { Icon, IconButton } from '@openedx/paragon';\nimport { ArrowBackIos, Close } from '@openedx/paragon/icons';\n\nimport { useEventListener } from '../../../../generic/hooks';\nimport { WIDGETS } from '../../../../constants';\nimport messages from '../messages';\nimport SidebarContext from '../SidebarContext';\n\nconst SidebarBase = ({\n title,\n ariaLabel,\n sidebarId,\n className,\n children,\n showTitleBar,\n width,\n allowFullHeight,\n showBorder,\n}) => {\n const intl = useIntl();\n const {\n toggleSidebar,\n shouldDisplayFullScreen,\n currentSidebar,\n } = useContext(SidebarContext);\n\n const receiveMessage = useCallback(({ data }) => {\n const { type } = data;\n if (type === 'learning.events.sidebar.close') {\n toggleSidebar(currentSidebar, WIDGETS.DISCUSSIONS);\n }\n }, [toggleSidebar]);\n\n useEventListener('message', receiveMessage);\n\n return (\n \n {shouldDisplayFullScreen\n && (\n toggleSidebar(null)}\n onKeyDown={() => toggleSidebar(null)}\n role=\"button\"\n tabIndex=\"0\"\n alt={intl.formatMessage(messages.responsiveCloseSidebarTray)}\n >\n \n \n {intl.formatMessage(messages.responsiveCloseSidebarTray)}\n \n \n )}\n {showTitleBar && (\n <>\n
\n {title}\n
\n toggleSidebar(sidebarId)}\n alt={intl.formatMessage(messages.closeTrigger)}\n className=\"icon-hover\"\n />\n
\n
\n
\n \n )}\n {children}\n \n );\n};\n\nSidebarBase.propTypes = {\n title: PropTypes.string,\n ariaLabel: PropTypes.string.isRequired,\n sidebarId: PropTypes.string.isRequired,\n className: PropTypes.string,\n children: PropTypes.element.isRequired,\n showTitleBar: PropTypes.bool,\n width: PropTypes.string,\n allowFullHeight: PropTypes.bool,\n showBorder: PropTypes.bool,\n};\n\nSidebarBase.defaultProps = {\n title: '',\n width: '45rem',\n allowFullHeight: false,\n showTitleBar: true,\n className: '',\n showBorder: true,\n};\n\nexport default SidebarBase;\n","import React, { useContext } from 'react';\n\nimport { ensureConfig, getConfig } from '@edx/frontend-platform';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport classNames from 'classnames';\n\nimport SidebarContext from '../../../SidebarContext';\nimport messages from '../../../messages';\n\nensureConfig(['DISCUSSIONS_MFE_BASE_URL']);\n\nconst DiscussionsWidget = () => {\n const intl = useIntl();\n const {\n unitId,\n courseId,\n hideDiscussionbar,\n isDiscussionbarAvailable,\n shouldDisplayFullScreen,\n } = useContext(SidebarContext);\n const discussionsUrl = `${getConfig().DISCUSSIONS_MFE_BASE_URL}/${courseId}/category/${unitId}`;\n\n if (hideDiscussionbar || !isDiscussionbarAvailable) { return null; }\n\n return (\n \n );\n};\n\nexport default DiscussionsWidget;\n","import React, { useContext, useEffect, useMemo } from 'react';\n\nimport { sendTrackEvent } from '@edx/frontend-platform/analytics';\nimport { PluginSlot } from '@openedx/frontend-plugin-framework';\nimport { useModel } from '../../../../../../generic/model-store';\nimport UpgradeNotification from '../../../../../../generic/upgrade-notification/UpgradeNotification';\nimport { WIDGETS } from '../../../../../../constants';\nimport SidebarContext from '../../../SidebarContext';\n\nconst NotificationsWidget = () => {\n const {\n courseId,\n onNotificationSeen,\n upgradeNotificationCurrentState,\n setUpgradeNotificationCurrentState,\n hideNotificationbar,\n toggleSidebar,\n isNotificationbarAvailable,\n currentSidebar,\n } = useContext(SidebarContext);\n const course = useModel('coursewareMeta', courseId);\n\n const {\n accessExpiration,\n contentTypeGatingEnabled,\n end,\n enrollmentEnd,\n enrollmentMode,\n enrollmentStart,\n marketingUrl,\n offer,\n start,\n timeOffsetMillis,\n userTimezone,\n verificationStatus,\n } = course;\n\n const {\n courseModes,\n org,\n verifiedMode,\n username,\n } = useModel('courseHomeMeta', courseId);\n\n const activeCourseModes = useMemo(() => courseModes?.map(mode => mode.slug), [courseModes]);\n\n const notificationTrayEventProperties = {\n course_end: end,\n course_modes: activeCourseModes,\n course_start: start,\n courserun_key: courseId,\n enrollment_end: enrollmentEnd,\n enrollment_mode: enrollmentMode,\n enrollment_start: enrollmentStart,\n is_upgrade_notification_visible: !!verifiedMode,\n name: 'New Sidebar Notification Tray',\n org_key: org,\n username,\n verification_status: verificationStatus,\n };\n\n const onToggleSidebar = () => {\n toggleSidebar(currentSidebar, WIDGETS.NOTIFICATIONS);\n };\n\n // After three seconds, update notificationSeen (to hide red dot)\n useEffect(() => {\n setTimeout(onNotificationSeen, 3000);\n sendTrackEvent('edx.ui.course.upgrade.new_sidebar.notifications', notificationTrayEventProperties);\n }, []);\n\n if (hideNotificationbar || !isNotificationbarAvailable) { return null; }\n\n return (\n
\n \n \n \n
\n );\n};\n\nexport default NotificationsWidget;\n","// This file holds some convenience methods for dealing with sessionStorage. Unlike localStorage that never expires,\n// sessionStorage is cleared when the browser tab is closed since the page session ends\n//\n// NOTE: These storage keys are not namespaced. That means that it's shared for the current fully\n// qualified domain. Namespacing could be added, but we'll cross that bridge when we need it.\n\nfunction getSessionStorage(key) {\n try {\n if (global.sessionStorage) {\n return global.sessionStorage.getItem(key);\n }\n } catch (e) {\n // If this fails for some reason, just return null.\n }\n return null;\n}\n\nfunction setSessionStorage(key, value) {\n try {\n if (global.sessionStorage) {\n global.sessionStorage.setItem(key, value);\n }\n } catch (e) {\n // If this fails, just bail.\n }\n}\n\nexport {\n getSessionStorage,\n setSessionStorage,\n};\n","import * as React from 'react';\n\nconst RightSidebarFilled = (props) => (\n \n \n \n);\nexport default RightSidebarFilled;\n","import * as React from 'react';\n\nconst RightSidebarOutlined = (props) => (\n \n \n \n);\nexport default RightSidebarOutlined;\n","import React, { useContext, useEffect, useMemo } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { useDispatch } from 'react-redux';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { Icon, IconButton } from '@openedx/paragon';\n\nimport { getLocalStorage, setLocalStorage } from '../../../../../data/localStorage';\nimport { getSessionStorage, setSessionStorage } from '../../../../../data/sessionStorage';\nimport { useModel } from '../../../../../generic/model-store';\nimport { getCourseDiscussionTopics } from '../../../../data/thunks';\nimport { RightSidebarFilled, RightSidebarOutlined } from '../../icons';\nimport messages from '../../messages';\nimport SidebarContext from '../../SidebarContext';\n\nexport const ID = 'DISCUSSIONS_NOTIFICATIONS';\n\nconst DiscussionsNotificationsTrigger = ({ onClick }) => {\n const {\n courseId,\n currentSidebar,\n setNotificationStatus,\n upgradeNotificationCurrentState,\n isNotificationbarAvailable,\n isDiscussionbarAvailable,\n } = useContext(SidebarContext);\n\n const dispatch = useDispatch();\n const intl = useIntl();\n const { tabs } = useModel('courseHomeMeta', courseId);\n const baseUrl = getConfig().DISCUSSIONS_MFE_BASE_URL;\n const edxProvider = useMemo(\n () => tabs?.find(tab => tab.slug === 'discussion'),\n [tabs],\n );\n\n useEffect(() => {\n if (baseUrl && edxProvider) {\n dispatch(getCourseDiscussionTopics(courseId));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [courseId, baseUrl, edxProvider]);\n\n /* Re-show a red dot beside the notification trigger for each of the 7 UpgradeNotification stages\n The upgradeNotificationCurrentState prop will be available after UpgradeNotification mounts. Once available,\n compare with the last state they've seen, and if it's different then set dot back to red */\n function updateUpgradeNotificationLastSeen() {\n if (upgradeNotificationCurrentState) {\n if (getLocalStorage(`upgradeNotificationLastSeen.${courseId}`) !== upgradeNotificationCurrentState) {\n setNotificationStatus('active');\n setLocalStorage(`notificationStatus.${courseId}`, 'active');\n setLocalStorage(`upgradeNotificationLastSeen.${courseId}`, upgradeNotificationCurrentState);\n }\n }\n }\n\n if (!getLocalStorage(`notificationStatus.${courseId}`)) {\n setLocalStorage(`notificationStatus.${courseId}`, 'active'); // Show red dot on notificationTrigger until seen\n }\n\n if (!getLocalStorage(`upgradeNotificationCurrentState.${courseId}`)) {\n setLocalStorage(`upgradeNotificationCurrentState.${courseId}`, 'initialize');\n }\n\n useEffect(() => {\n updateUpgradeNotificationLastSeen();\n });\n\n const handleClick = () => {\n if (getSessionStorage(`notificationTrayStatus.${courseId}`) === 'open') {\n setSessionStorage(`notificationTrayStatus.${courseId}`, 'closed');\n } else {\n setSessionStorage(`notificationTrayStatus.${courseId}`, 'open');\n }\n onClick();\n };\n\n if (!isDiscussionbarAvailable && !isNotificationbarAvailable) { return null; }\n\n return (\n \n );\n};\n\nDiscussionsNotificationsTrigger.propTypes = {\n onClick: PropTypes.func.isRequired,\n};\n\nexport default DiscussionsNotificationsTrigger;\n","import * as discussionsNotifications from './discussions-notifications';\n\nexport const SIDEBARS = {\n [discussionsNotifications.ID]: {\n ID: discussionsNotifications.ID,\n Sidebar: discussionsNotifications.Sidebar,\n Trigger: discussionsNotifications.Trigger,\n },\n};\n\nexport const SIDEBAR_ORDER = [\n discussionsNotifications.ID,\n];\n","import React, { useContext } from 'react';\n\nimport { useIntl } from '@edx/frontend-platform/i18n';\n\nimport SidebarBase from '../../common/SidebarBase';\nimport messages from '../../messages';\nimport SidebarContext from '../../SidebarContext';\nimport DiscussionsSidebar from './discussions/DiscussionsWidget';\nimport NotificationTray from './notifications/NotificationsWidget';\nimport { ID } from './DiscussionsNotificationsTrigger';\n\nconst DiscussionsNotificationsSidebar = () => {\n const intl = useIntl();\n const { hideNotificationbar } = useContext(SidebarContext);\n\n return (\n \n \n {!hideNotificationbar &&
}\n \n \n );\n};\n\nexport default DiscussionsNotificationsSidebar;\n","import { StrictDict } from '@edx/react-unit-test-utils/dist';\n\nexport const modelKeys = StrictDict({\n units: 'units',\n coursewareMeta: 'coursewareMeta',\n});\n\nexport const views = StrictDict({\n student: 'student_view',\n public: 'public_view',\n});\n\nexport const loadingState = 'loading';\n\nexport const messageTypes = StrictDict({\n modal: 'plugin.modal',\n resize: 'plugin.resize',\n videoFullScreen: 'plugin.videoFullScreen',\n});\n\nexport default StrictDict({\n modelKeys,\n views,\n loadingState,\n messageTypes,\n});\n","import React from 'react';\n\nimport { logError } from '@edx/frontend-platform/logging';\nimport { StrictDict, useKeyedState } from '@edx/react-unit-test-utils';\nimport { useExamAccessToken, useFetchExamAccessToken, useIsExam } from '@edx/frontend-lib-special-exams';\n\nexport const stateKeys = StrictDict({\n accessToken: 'accessToken',\n blockAccess: 'blockAccess',\n});\n\nconst useExamAccess = ({\n id,\n}) => {\n const isExam = useIsExam();\n const [blockAccess, setBlockAccess] = useKeyedState(stateKeys.blockAccess, isExam);\n\n const fetchExamAccessToken = useFetchExamAccessToken();\n\n // NOTE: We cannot use this hook in the useEffect hook below to grab the updated exam access token in the finally\n // block, due to the rules of hooks. Instead, we get the value of the exam access token from a call to the hook.\n // When the fetchExamAccessToken call completes, the useExamAccess hook will re-run\n // (due to a change to the Redux store, and, thus, a change to the the context), at which point the updated\n // exam access token will be fetched via the useExamAccessToken hook call below.\n // The important detail is that there should never be a return value (false, '').\n const examAccessToken = useExamAccessToken();\n\n React.useEffect(() => {\n if (isExam) {\n fetchExamAccessToken()\n .finally(() => {\n setBlockAccess(false);\n })\n .catch((error) => {\n logError(error);\n });\n }\n }, [id]);\n\n return {\n blockAccess,\n accessToken: examAccessToken,\n };\n};\n\nexport default useExamAccess;\n","import React from 'react';\n\n/**\n * We discovered an error in Firefox where - upon iframe load - React would cease to call any\n * useEffect hooks until the user interacts with the page again. This is particularly confusing\n * when navigating between sequences, as the UI partially updates leaving the user in a nebulous\n * state.\n *\n * We were able to solve this error by using a layout effect to update some component state, which\n * executes synchronously on render. Somehow this forces React to continue it's lifecycle\n * immediately, rather than waiting for user interaction. This layout effect could be anywhere in\n * the parent tree, as far as we can tell - we chose to add a conspicuously 'load bearing' (that's\n * a joke) one here so it wouldn't be accidentally removed elsewhere.\n *\n * If we remove this hook when one of these happens:\n * 1. React figures out that there's an issue here and fixes a bug.\n * 2. We cease to use an iframe for unit rendering.\n * 3. Firefox figures out that there's an issue in their iframe loading and fixes a bug.\n * 4. We stop supporting Firefox.\n * 5. An enterprising engineer decides to create a repo that reproduces the problem, submits it to\n * Firefox/React for review, and they kindly help us figure out what in the world is happening\n * so we can fix it.\n *\n * This hook depends on the unit id just to make sure it re-evaluates whenever the ID changes. If\n * we change whether or not the Unit component is re-mounted when the unit ID changes, this may\n * become important, as this hook will otherwise only evaluate the useLayoutEffect once.\n */\nconst useLoadBearingHook = (id) => {\n const setValue = React.useState(0)[1];\n React.useLayoutEffect(() => {\n setValue(currentValue => currentValue + 1);\n }, [id]);\n};\n\nexport default useLoadBearingHook;\n","import { getConfig } from '@edx/frontend-platform';\nimport { sendTrackEvent } from '@edx/frontend-platform/analytics';\nimport React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { StrictDict, useKeyedState } from '@edx/react-unit-test-utils';\nimport { logError } from '@edx/frontend-platform/logging';\n\nimport { fetchCourse } from '@src/courseware/data';\nimport { processEvent } from '@src/course-home/data/thunks';\nimport { useEventListener } from '@src/generic/hooks';\nimport { messageTypes } from '../constants';\n\nimport useLoadBearingHook from './useLoadBearingHook';\n\nexport const stateKeys = StrictDict({\n iframeHeight: 'iframeHeight',\n hasLoaded: 'hasLoaded',\n showError: 'showError',\n windowTopOffset: 'windowTopOffset',\n});\n\nconst useIFrameBehavior = ({\n elementId,\n id,\n iframeUrl,\n onLoaded,\n}) => {\n // Do not remove this hook. See function description.\n useLoadBearingHook(id);\n\n const dispatch = useDispatch();\n\n const [iframeHeight, setIframeHeight] = useKeyedState(stateKeys.iframeHeight, 0);\n const [hasLoaded, setHasLoaded] = useKeyedState(stateKeys.hasLoaded, false);\n const [showError, setShowError] = useKeyedState(stateKeys.showError, false);\n const [windowTopOffset, setWindowTopOffset] = useKeyedState(stateKeys.windowTopOffset, null);\n\n React.useEffect(() => {\n const frame = document.getElementById(elementId);\n const { hash } = window.location;\n if (hash) {\n // The url hash will be sent to LMS-served iframe in order to find the location of the\n // hash within the iframe.\n frame.contentWindow.postMessage({ hashName: hash }, `${getConfig().LMS_BASE_URL}`);\n }\n }, [id, onLoaded, iframeHeight, hasLoaded]);\n\n const receiveMessage = React.useCallback(({ data }) => {\n const { type, payload } = data;\n if (type === messageTypes.resize) {\n setIframeHeight(payload.height);\n\n if (!hasLoaded && iframeHeight === 0 && payload.height > 0) {\n setHasLoaded(true);\n if (onLoaded) {\n onLoaded();\n }\n }\n } else if (type === messageTypes.videoFullScreen) {\n // We observe exit from the video xblock fullscreen mode\n // and scroll to the previously saved scroll position\n if (!payload.open && windowTopOffset !== null) {\n window.scrollTo(0, Number(windowTopOffset));\n }\n\n // We listen for this message from LMS to know when we need to\n // save or reset scroll position on toggle video xblock fullscreen mode\n setWindowTopOffset(payload.open ? window.scrollY : null);\n } else if (data.offset) {\n // We listen for this message from LMS to know when the page needs to\n // be scrolled to another location on the page.\n window.scrollTo(0, data.offset + document.getElementById('unit-iframe').offsetTop);\n }\n }, [\n id,\n onLoaded,\n hasLoaded,\n setHasLoaded,\n iframeHeight,\n setIframeHeight,\n windowTopOffset,\n setWindowTopOffset,\n ]);\n\n useEventListener('message', receiveMessage);\n\n /**\n * onLoad *should* only fire after everything in the iframe has finished its own load events.\n * Which means that the plugin.resize message (which calls setHasLoaded above) will have fired already\n * for a successful load. If it *has not fired*, we are in an error state. For example, the backend\n * could have given us a 4xx or 5xx response.\n */\n\n const handleIFrameLoad = () => {\n if (!hasLoaded) {\n setShowError(true);\n sendTrackEvent('edx.bi.error.learning.iframe_load_failed', {\n iframeUrl,\n unitId: id,\n });\n logError('Unit iframe failed to load. Server possibly returned 4xx or 5xx response.', {\n iframeUrl,\n });\n }\n window.onmessage = (e) => {\n if (e.data.event_name) {\n dispatch(processEvent(e.data, fetchCourse));\n }\n };\n };\n\n React.useEffect(() => {\n setIframeHeight(0);\n setHasLoaded(false);\n }, [iframeUrl]);\n\n return {\n iframeHeight,\n handleIFrameLoad,\n showError,\n hasLoaded,\n };\n};\n\nexport default useIFrameBehavior;\n","import React from 'react';\n\nimport { StrictDict, useKeyedState } from '@edx/react-unit-test-utils/dist';\n\nimport { useEventListener } from '@src/generic/hooks';\n\nexport const stateKeys = StrictDict({\n isOpen: 'isOpen',\n options: 'options',\n});\n\nexport const DEFAULT_HEIGHT = '100%';\n\nconst useModalIFrameData = () => {\n const [isOpen, setIsOpen] = useKeyedState(stateKeys.isOpen, false);\n const [options, setOptions] = useKeyedState(stateKeys.options, { height: DEFAULT_HEIGHT });\n\n const handleModalClose = () => {\n const rootFrame = document.querySelector('iframe');\n setIsOpen(false);\n rootFrame.contentWindow.postMessage({ type: 'plugin.modal-close' }, '*');\n };\n\n const receiveMessage = React.useCallback((event) => {\n const { type, payload } = event.data;\n if (!type) {\n return;\n }\n if (type === 'plugin.modal') {\n setOptions((current) => ({ ...current, ...payload }));\n setIsOpen(true);\n }\n if (type === 'plugin.modal-close') {\n handleModalClose();\n }\n }, []);\n useEventListener('message', receiveMessage);\n\n return {\n handleModalClose,\n modalOptions: { isOpen, ...options },\n };\n};\n\nexport default useModalIFrameData;\n","import React from 'react';\n\nimport { StrictDict, useKeyedState } from '@edx/react-unit-test-utils/dist';\nimport { useModel } from '@src/generic/model-store';\n\nimport { modelKeys } from '../constants';\n\nexport const stateKeys = StrictDict({\n shouldDisplay: 'shouldDisplay',\n});\n\n/**\n * @return {bool} should the honor code be displayed?\n */\nconst useShouldDisplayHonorCode = ({ id, courseId }) => {\n const [shouldDisplay, setShouldDisplay] = useKeyedState(stateKeys.shouldDisplay, false);\n\n const { graded } = useModel(modelKeys.units, id);\n const { userNeedsIntegritySignature } = useModel(modelKeys.coursewareMeta, courseId);\n\n React.useEffect(() => {\n setShouldDisplay(userNeedsIntegritySignature && graded);\n }, [setShouldDisplay, userNeedsIntegritySignature]);\n\n return shouldDisplay;\n};\n\nexport default useShouldDisplayHonorCode;\n","import { getConfig } from '@edx/frontend-platform';\nimport { stringifyUrl } from 'query-string';\n\nexport const iframeParams = {\n show_title: 0,\n show_bookmark: 0,\n recheck_access: 1,\n};\n\nexport const getIFrameUrl = ({\n id,\n view,\n format,\n examAccess,\n jumpToId,\n}) => {\n const xblockUrl = `${getConfig().LMS_BASE_URL}/xblock/${id}`;\n return stringifyUrl({\n url: xblockUrl,\n query: {\n ...iframeParams,\n view,\n ...(format && { format }),\n ...(!examAccess.blockAccess && { exam_access: examAccess.accessToken }),\n jumpToId, // Pass jumpToId as query param as fragmentIdentifier is not passed to server.\n },\n fragmentIdentifier: jumpToId, // this is used by browser to scroll to correct block.\n });\n};\n\nexport default {\n getIFrameUrl,\n};\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n header: {\n id: 'learn.hiddenAfterDue.header',\n defaultMessage: 'The due date for this assignment has passed.',\n description: 'Shown when content of a course is longer available because due date passed',\n },\n description: {\n id: 'learn.hiddenAfterDue.description',\n defaultMessage: 'Because the due date has passed, this assignment is no longer available.',\n description: 'It explain why the content is not available',\n },\n gradeAvailable: {\n id: 'learn.hiddenAfterDue.gradeAvailable',\n defaultMessage: 'If you have completed this assignment, your grade is available on the {progressPage}.',\n description: 'Text that precedes link that redirect to progress page',\n },\n progressPage: {\n id: 'learn.hiddenAfterDue.progressPage',\n defaultMessage: 'progress page',\n description: 'This is the text for the link embedded in learn.hiddenAfterDue.gradeAvailable',\n },\n});\n\nexport default messages;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { injectIntl, intlShape, FormattedMessage } from '@edx/frontend-platform/i18n';\nimport { Alert, Hyperlink } from '@openedx/paragon';\nimport { Info } from '@openedx/paragon/icons';\n\nimport { useModel } from '../../../../generic/model-store';\n\nimport messages from './messages';\n\nconst HiddenAfterDue = ({ courseId, intl }) => {\n const { tabs } = useModel('courseHomeMeta', courseId);\n\n const progressTab = tabs.find(tab => tab.slug === 'progress');\n const progressLink = progressTab && progressTab.url && (\n \n {intl.formatMessage(messages.progressPage)}\n \n );\n\n return (\n \n

{intl.formatMessage(messages.header)}

\n

\n {intl.formatMessage(messages.description)}\n {progressLink && (\n <>\n
\n \n \n )}\n

\n
\n );\n};\n\nHiddenAfterDue.propTypes = {\n intl: intlShape.isRequired,\n courseId: PropTypes.string.isRequired,\n};\n\nexport default injectIntl(HiddenAfterDue);\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n headerPlaceholder: {\n id: 'learn.header.h2.placeholder',\n defaultMessage: 'Level 2 headings may be created by course providers in the future.',\n description: 'Message spoken by a screenreader indicating that the h2 tag is a placeholder.',\n },\n loadFailure: {\n id: 'learn.course.load.failure',\n defaultMessage: 'There was an error loading this course.',\n description: 'Message when a course fails to load',\n },\n loadingHonorCode: {\n id: 'learn.loading.honor.codk',\n defaultMessage: 'Loading honor code messaging...',\n description: 'Message shown when an interface about the honor code is being loaded',\n },\n loadingLockedContent: {\n id: 'learn.loading.content.lock',\n defaultMessage: 'Loading locked content messaging...',\n description: 'Message shown when an interface about locked content is being loaded',\n },\n loadingSequence: {\n id: 'learn.loading.learning.sequence',\n defaultMessage: 'Loading learning sequence...',\n description: 'Message when learning sequence is being loaded',\n },\n noContent: {\n id: 'learn.sequence.no.content',\n defaultMessage: 'There is no content here.',\n description: 'Message shown when there is no content to show a user inside a learning sequence.',\n },\n});\n\nexport default messages;\n","import React, { useEffect } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faLinkedinIn } from '@fortawesome/free-brands-svg-icons';\n\nimport {\n FormattedDate, FormattedMessage, injectIntl, intlShape,\n} from '@edx/frontend-platform/i18n';\nimport { Helmet } from 'react-helmet';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n Alert,\n breakpoints,\n Button,\n Hyperlink,\n useWindowSize,\n} from '@openedx/paragon';\nimport { CheckCircle } from '@openedx/paragon/icons';\nimport { getConfig } from '@edx/frontend-platform';\nimport { getAuthenticatedUser } from '@edx/frontend-platform/auth';\n\nimport CelebrationMobile from './assets/celebration_456x328.gif';\nimport CelebrationDesktop from './assets/celebration_750x540.gif';\nimport certificate from '../../../generic/assets/edX_certificate.png';\nimport certificateLocked from '../../../generic/assets/edX_locked_certificate.png';\nimport { FormattedPricing } from '../../../generic/upgrade-button';\nimport messages from './messages';\nimport { useModel } from '../../../generic/model-store';\nimport { requestCert } from '../../../course-home/data/thunks';\nimport ProgramCompletion from './ProgramCompletion';\nimport DashboardFootnote from './DashboardFootnote';\nimport UpgradeFootnote from './UpgradeFootnote';\nimport SocialIcons from '../../social-share/SocialIcons';\nimport { logClick, logVisit } from './utils';\nimport { DashboardLink, IdVerificationSupportLink, ProfileLink } from '../../../shared/links';\nimport CourseRecommendations from './CourseRecommendations';\n\nconst LINKEDIN_BLUE = '#2867B2';\n\nconst CourseCelebration = ({ intl }) => {\n const wideScreen = useWindowSize().width >= breakpoints.medium.minWidth;\n const { courseId } = useSelector(state => state.courseware);\n const dispatch = useDispatch();\n const {\n certificateData,\n end,\n linkedinAddToProfileUrl,\n marketingUrl,\n offer,\n relatedPrograms,\n title,\n verifyIdentityUrl,\n verificationStatus,\n } = useModel('coursewareMeta', courseId);\n\n const {\n org,\n verifiedMode,\n canViewCertificate,\n userTimezone,\n } = useModel('courseHomeMeta', courseId);\n\n const {\n certStatus,\n certWebViewUrl,\n certificateAvailableDate,\n } = certificateData || {};\n\n const { administrator } = getAuthenticatedUser();\n\n const dashboardLink = ;\n const idVerificationSupportLink = ;\n const profileLink = ;\n const timezoneFormatArgs = userTimezone ? { timeZone: userTimezone } : {};\n\n let buttonPrefix = null;\n let buttonLocation;\n let buttonText;\n let buttonVariant = 'outline-primary';\n let buttonEvent = null;\n let buttonSuffix = null;\n let certificateImage = certificate;\n let footnote;\n let message;\n let certHeader;\n let visitEvent = 'celebration_generic';\n // These cases are taken from the edx-platform `get_cert_data` function found in lms/courseware/views/views.py\n switch (certStatus) {\n case 'downloadable':\n certHeader = intl.formatMessage(messages.certificateHeaderDownloadable);\n message = (\n

\n \n

\n );\n // TODO: for Gymnasium, update the buttonLocation\n if (certWebViewUrl) {\n buttonLocation = `${certWebViewUrl}`;\n buttonText = intl.formatMessage(messages.viewCertificateButton);\n }\n if (linkedinAddToProfileUrl) {\n buttonPrefix = (\n logClick(org, courseId, administrator, 'linkedin_add_to_profile')}\n style={{ backgroundColor: LINKEDIN_BLUE, border: 'none' }}\n >\n \n {`${intl.formatMessage(messages.linkedinAddToProfileButton)}`}\n \n );\n }\n buttonEvent = 'view_cert';\n visitEvent = 'celebration_with_cert';\n footnote = ;\n break;\n case 'earned_but_not_available': {\n const endDate = ;\n const certAvailableDate = ;\n certHeader = intl.formatMessage(messages.certificateHeaderNotAvailable);\n message = (\n <>\n

\n \n

\n

\n {intl.formatMessage(messages.certificateNotAvailableBodyAccessCert)}\n

\n \n );\n visitEvent = 'celebration_with_unavailable_cert';\n footnote = ;\n break;\n }\n case 'requesting':\n // The requesting status needs a different button because it does a POST instead of a GET.\n // So we don't set buttonLocation and instead define a custom button as a buttonPrefix.\n buttonEvent = 'request_cert';\n buttonPrefix = (\n {\n logClick(org, courseId, administrator, buttonEvent);\n dispatch(requestCert(courseId));\n }}\n >\n {intl.formatMessage(messages.requestCertificateButton)}\n \n );\n certHeader = intl.formatMessage(messages.certificateHeaderRequestable);\n message = (

{intl.formatMessage(messages.requestCertificateBodyText)}

);\n visitEvent = 'celebration_with_requestable_cert';\n footnote = ;\n break;\n case 'unverified':\n certHeader = intl.formatMessage(messages.certificateHeaderUnverified);\n visitEvent = 'celebration_unverified';\n footnote = ;\n if (verificationStatus === 'pending') {\n message = (

{intl.formatMessage(messages.verificationPending)}

);\n } else {\n buttonText = intl.formatMessage(messages.verifyIdentityButton);\n buttonEvent = 'verify_id';\n buttonLocation = verifyIdentityUrl;\n // todo: check for idVerificationSupportLink null\n message = (\n

\n \n

\n );\n }\n break;\n case 'audit_passing':\n case 'honor_passing':\n if (verifiedMode) {\n certHeader = intl.formatMessage(messages.certificateHeaderUpgradable);\n message = (\n

\n }}\n description=\"Body text when the learner needs to upgrade to earn a certifcate and they have passed the course\"\n />\n
\n {getConfig().SUPPORT_URL_VERIFIED_CERTIFICATE && (\n \n {intl.formatMessage(messages.verifiedCertificateSupportLink)}\n \n )}\n

\n );\n buttonText = intl.formatMessage(messages.upgradeButton);\n buttonEvent = 'upgrade';\n buttonLocation = verifiedMode.upgradeUrl;\n buttonVariant = 'primary';\n if (offer) {\n buttonSuffix = (\n \n {offer.code}),\n percent: offer.percentage,\n }}\n description=\"Shown if learner can use a discount code when they upgrade the course\"\n />\n \n );\n }\n certificateImage = certificateLocked;\n visitEvent = 'celebration_upgrade';\n if (verifiedMode.accessExpirationDate) {\n footnote = ;\n } else {\n footnote = ;\n }\n } else {\n visitEvent = 'celebration_audit_no_upgrade';\n }\n break;\n default:\n if (!canViewCertificate) {\n // We reuse the cert event here. Since this default state is so\n // Similar to the earned_not_available state, this event name should be fine\n // to cover the same cases.\n visitEvent = 'celebration_with_unavailable_cert';\n certHeader = intl.formatMessage(messages.certificateHeaderNotAvailable);\n const endDate = intl.formatDate(end, {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n ...timezoneFormatArgs,\n });\n message = (\n <>\n

\n {intl.formatMessage(messages.certificateNotAvailableEndDateBody, { endDate })}\n

\n

\n {intl.formatMessage(messages.certificateNotAvailableBodyAccessCert)}\n

\n \n );\n }\n break;\n }\n\n useEffect(() => logVisit(org, courseId, administrator, visitEvent), [org, courseId, administrator, visitEvent]);\n\n return (\n <>\n \n {`${intl.formatMessage(messages.congratulationsHeader)} | ${title} | ${getConfig().SITE_NAME}`}\n \n
\n
\n {intl.formatMessage(messages.congratulationsHeader)}\n
\n
\n {intl.formatMessage(messages.completedCourseHeader)}\n {marketingUrl && ` ${intl.formatMessage(messages.shareMessage)}`}\n \n
\n
\n {!wideScreen && (\n \n )}\n {wideScreen && (\n \n )}\n
\n
\n {certHeader && (\n \n
\n
\n
{certHeader}
\n {message}\n
\n {buttonPrefix}\n {buttonLocation && (\n logClick(org, courseId, administrator, buttonEvent)}\n >\n {buttonText}\n \n )}\n {buttonSuffix}\n
\n
\n {certStatus !== 'unverified' && (\n
\n \n
\n )}\n
\n
\n )}\n {relatedPrograms && relatedPrograms.map(program => (\n \n ))}\n {footnote}\n \n
\n
\n \n );\n};\n\nCourseCelebration.propTypes = {\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(CourseCelebration);\n","import React, { useEffect } from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Button } from '@openedx/paragon';\nimport { useSelector } from 'react-redux';\nimport { Navigate } from 'react-router-dom';\n\nimport CourseCelebration from './GymCourseCelebration';\nimport CourseInProgress from './CourseInProgress';\nimport CourseNonPassing from './CourseNonPassing';\nimport { COURSE_EXIT_MODES, getCourseExitMode } from './utils';\nimport messages from './messages';\nimport { unsubscribeFromGoalReminders } from './data/thunks';\n\nimport { useModel } from '../../../generic/model-store';\n\nconst CourseExit = ({ intl }) => {\n const { courseId } = useSelector(state => state.courseware);\n const {\n certificateData,\n courseExitPageIsActive,\n courseGoals,\n enrollmentMode,\n hasScheduledContent,\n isEnrolled,\n userHasPassingGrade,\n } = useModel('coursewareMeta', courseId);\n\n const {\n isMasquerading,\n canViewCertificate,\n } = useModel('courseHomeMeta', courseId);\n\n const mode = getCourseExitMode(\n certificateData,\n hasScheduledContent,\n isEnrolled,\n userHasPassingGrade,\n courseExitPageIsActive,\n canViewCertificate,\n );\n\n // Audit users cannot fully complete a course, so we will\n // unsubscribe them from goal reminders once they reach the course exit page\n // to avoid spamming them with goal reminder emails\n if (courseGoals && enrollmentMode === 'audit' && !isMasquerading) {\n useEffect(() => {\n unsubscribeFromGoalReminders(courseId);\n }, []);\n }\n\n let body = null;\n if (mode === COURSE_EXIT_MODES.nonPassing) {\n body = ();\n } else if (mode === COURSE_EXIT_MODES.inProgress) {\n body = ();\n } else if (mode === COURSE_EXIT_MODES.celebration) {\n body = ();\n } else {\n return ();\n }\n\n return (\n <>\n
\n \n {intl.formatMessage(messages.viewCoursesButton)}\n \n
\n {body}\n \n );\n};\n\nCourseExit.propTypes = {\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(CourseExit);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n faVideo, faBook, faEdit, faTasks, faLock,\n} from '@fortawesome/free-solid-svg-icons';\n\nconst UnitIcon = ({ type }) => {\n let icon = null;\n switch (type) {\n case 'video':\n icon = faVideo;\n break;\n case 'other':\n icon = faBook;\n break;\n case 'vertical':\n icon = faTasks;\n break;\n case 'problem':\n icon = faEdit;\n break;\n case 'lock':\n icon = faLock;\n break;\n default:\n icon = faBook;\n }\n\n return (\n \n );\n};\n\nUnitIcon.propTypes = {\n type: PropTypes.oneOf(['video', 'other', 'vertical', 'problem', 'lock']).isRequired,\n};\n\nexport default UnitIcon;\n","import React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faCheck } from '@fortawesome/free-solid-svg-icons';\n\nconst CompleteIcon = (props) => ;\n\nexport default CompleteIcon;\n","import React, { useCallback } from 'react';\nimport { Link } from 'react-router-dom';\nimport PropTypes from 'prop-types';\nimport { connect, useSelector } from 'react-redux';\nimport classNames from 'classnames';\nimport { Button } from '@openedx/paragon';\n\nimport UnitIcon from './UnitIcon';\nimport CompleteIcon from './CompleteIcon';\nimport BookmarkFilledIcon from '../../bookmark/BookmarkFilledIcon';\n\nconst UnitButton = ({\n onClick,\n title,\n contentType,\n isActive,\n bookmarked,\n complete,\n showCompletion,\n unitId,\n className,\n showTitle,\n}) => {\n const { courseId, sequenceId } = useSelector(state => state.courseware);\n\n const handleClick = useCallback(() => {\n onClick(unitId);\n }, [onClick, unitId]);\n\n return (\n \n \n {showTitle && {title}}\n {showCompletion && complete ? : null}\n {bookmarked ? (\n \n ) : null}\n \n );\n};\n\nUnitButton.propTypes = {\n bookmarked: PropTypes.bool,\n className: PropTypes.string,\n complete: PropTypes.bool,\n contentType: PropTypes.string.isRequired,\n isActive: PropTypes.bool,\n onClick: PropTypes.func.isRequired,\n showCompletion: PropTypes.bool,\n showTitle: PropTypes.bool,\n title: PropTypes.string.isRequired,\n unitId: PropTypes.string.isRequired,\n};\n\nUnitButton.defaultProps = {\n className: undefined,\n isActive: false,\n bookmarked: false,\n complete: false,\n showTitle: false,\n showCompletion: true,\n};\n\nconst mapStateToProps = (state, props) => {\n if (props.unitId) {\n return {\n ...state.models.units[props.unitId],\n };\n }\n return {};\n};\n\nexport default connect(mapStateToProps)(UnitButton);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Dropdown } from '@openedx/paragon';\nimport { FormattedMessage } from '@edx/frontend-platform/i18n';\n\nimport UnitButton from './UnitButton';\n\nconst SequenceNavigationDropdown = ({\n unitId,\n onNavigate,\n showCompletion,\n unitIds,\n}) => (\n \n \n \n \n \n {unitIds.map(buttonUnitId => (\n \n ))}\n \n \n);\n\nSequenceNavigationDropdown.propTypes = {\n unitId: PropTypes.string.isRequired,\n onNavigate: PropTypes.func.isRequired,\n showCompletion: PropTypes.bool.isRequired,\n unitIds: PropTypes.arrayOf(PropTypes.string).isRequired,\n};\n\nexport default SequenceNavigationDropdown;\n","import { useContext } from 'react';\nimport { useSelector } from 'react-redux';\nimport { breakpoints, useWindowSize } from '@openedx/paragon';\n\nimport { useModel } from '../../../../generic/model-store';\nimport { sequenceIdsSelector } from '../../../data';\nimport SidebarContext from '../../sidebar/SidebarContext';\nimport NewSidebarContext from '../../new-sidebar/SidebarContext';\nimport { WIDGETS } from '../../../../constants';\n\nexport function useSequenceNavigationMetadata(currentSequenceId, currentUnitId) {\n const sequenceIds = useSelector(sequenceIdsSelector);\n const sequence = useModel('sequences', currentSequenceId);\n const courseId = useSelector(state => state.courseware.courseId);\n const courseStatus = useSelector(state => state.courseware.courseStatus);\n const { entranceExamData: { entranceExamPassed } } = useModel('coursewareMeta', courseId);\n const sequenceStatus = useSelector(state => state.courseware.sequenceStatus);\n\n // If we don't know the sequence and unit yet, then assume no.\n if (courseStatus !== 'loaded' || sequenceStatus !== 'loaded' || !currentSequenceId || !currentUnitId) {\n return {\n isFirstUnit: false,\n isLastUnit: false,\n navigationDisabledNextSequence: false,\n navigationDisabledPrevSequence: false,\n };\n }\n\n // if entrance exam is not passed then we should treat this as 1st and last unit\n if (entranceExamPassed === false) {\n return {\n isFirstUnit: true,\n isLastUnit: true,\n navigationDisabledNextSequence: false,\n navigationDisabledPrevSequence: false,\n };\n }\n\n const sequenceIndex = sequenceIds.indexOf(currentSequenceId);\n const unitIndex = sequence.unitIds.indexOf(currentUnitId);\n\n const isFirstSequence = sequenceIndex === 0;\n const isFirstUnitInSequence = unitIndex === 0;\n const isFirstUnit = isFirstSequence && isFirstUnitInSequence;\n const isLastSequence = sequenceIndex === sequenceIds.length - 1;\n const isLastUnitInSequence = unitIndex === sequence.unitIds.length - 1;\n const isLastUnit = isLastSequence && isLastUnitInSequence;\n const sequenceNavigationDisabled = sequence.navigationDisabled;\n const navigationDisabledPrevSequence = sequenceNavigationDisabled && isFirstUnitInSequence;\n const navigationDisabledNextSequence = sequenceNavigationDisabled && isLastUnitInSequence;\n\n const nextSequenceId = sequenceIndex < sequenceIds.length - 1 ? sequenceIds[sequenceIndex + 1] : null;\n const previousSequenceId = sequenceIndex > 0 ? sequenceIds[sequenceIndex - 1] : null;\n\n let nextLink;\n if (isLastUnit) {\n nextLink = `/course/${courseId}/course-end`;\n } else {\n const nextIndex = unitIndex + 1;\n if (nextIndex < sequence.unitIds.length) {\n const nextUnitId = sequence.unitIds[nextIndex];\n nextLink = `/course/${courseId}/${currentSequenceId}/${nextUnitId}`;\n } else if (nextSequenceId) {\n nextLink = `/course/${courseId}/${nextSequenceId}/first`;\n }\n }\n\n let previousLink;\n const previousIndex = unitIndex - 1;\n if (previousIndex >= 0) {\n const previousUnitId = sequence.unitIds[previousIndex];\n previousLink = `/course/${courseId}/${currentSequenceId}/${previousUnitId}`;\n } else if (previousSequenceId) {\n previousLink = `/course/${courseId}/${previousSequenceId}/last`;\n }\n\n return {\n isFirstUnit,\n isLastUnit,\n nextLink,\n previousLink,\n navigationDisabledNextSequence,\n navigationDisabledPrevSequence,\n };\n}\n\nexport function useIsOnMediumDesktop() {\n const windowSize = useWindowSize();\n return windowSize.width >= breakpoints.medium.minWidth && windowSize.width < breakpoints.extraLarge.minWidth;\n}\n\nexport function useIsOnLargeDesktop() {\n const windowSize = useWindowSize();\n return windowSize.width >= breakpoints.extraLarge.minWidth && windowSize.width < breakpoints.extraLarge.maxWidth;\n}\n\nexport function useIsOnXLDesktop() {\n const windowSize = useWindowSize();\n return windowSize.width >= breakpoints.extraLarge.maxWidth;\n}\n\nexport function useIsSidebarOpen(unitId) {\n const courseId = useSelector(state => state.courseware.courseId);\n const { isNewDiscussionSidebarViewEnabled } = useModel('courseHomeMeta', courseId);\n const { currentSidebar } = useContext(isNewDiscussionSidebarViewEnabled ? NewSidebarContext : SidebarContext);\n const topic = useModel('discussionTopics', unitId);\n\n return (currentSidebar === WIDGETS.NOTIFICATIONS) || (currentSidebar === 'DISCUSSIONS_NOTIFICATIONS') || (\n currentSidebar === WIDGETS.DISCUSSIONS && !!(topic?.id || topic?.enabledInContext));\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\n\nimport UnitButton from './UnitButton';\nimport SequenceNavigationDropdown from './SequenceNavigationDropdown';\nimport useIndexOfLastVisibleChild from '../../../../generic/tabs/useIndexOfLastVisibleChild';\nimport {\n useIsOnXLDesktop, useIsOnMediumDesktop, useIsOnLargeDesktop, useIsSidebarOpen,\n} from './hooks';\n\nconst SequenceNavigationTabs = ({\n unitIds, unitId, showCompletion, onNavigate,\n}) => {\n const isSidebarOpen = useIsSidebarOpen(unitId);\n const [\n indexOfLastVisibleChild,\n containerRef,\n invisibleStyle,\n ] = useIndexOfLastVisibleChild(isSidebarOpen);\n const isOnXLDesktop = useIsOnXLDesktop();\n const isOnLargeDesktop = useIsOnLargeDesktop();\n const isOnMediumDesktop = useIsOnMediumDesktop();\n const shouldDisplayDropdown = indexOfLastVisibleChild === -1 || indexOfLastVisibleChild < unitIds.length - 1;\n\n return (\n \n \n \n {unitIds.map(buttonUnitId => (\n \n ))}\n
\n
\n {shouldDisplayDropdown && (\n \n )}\n \n );\n};\n\nSequenceNavigationTabs.propTypes = {\n unitId: PropTypes.string.isRequired,\n onNavigate: PropTypes.func.isRequired,\n showCompletion: PropTypes.bool.isRequired,\n unitIds: PropTypes.arrayOf(PropTypes.string).isRequired,\n};\n\nexport default SequenceNavigationTabs;\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n nextButton: {\n id: 'learn.sequence.navigation.next.button',\n defaultMessage: 'Next',\n description: 'Button to advance to the next section',\n },\n nextUpButton: {\n id: 'learn.sequence.navigation.next.up.button',\n defaultMessage: 'Next Up: {title}',\n description: 'Button to advance to the next section, with title',\n },\n previousButton: {\n id: 'learn.sequence.navigation.previous.button',\n defaultMessage: 'Previous',\n description: 'Button to return to the previous section',\n },\n});\n\nexport default messages;\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport PropTypes from 'prop-types';\nimport { breakpoints, Button, useWindowSize } from '@openedx/paragon';\nimport { ChevronLeft, ChevronRight } from '@openedx/paragon/icons';\nimport classNames from 'classnames';\nimport {\n injectIntl,\n intlShape,\n isRtl,\n getLocale,\n} from '@edx/frontend-platform/i18n';\nimport { PluginSlot } from '@openedx/frontend-plugin-framework';\nimport { useSelector } from 'react-redux';\n\nimport { GetCourseExitNavigation } from '../../course-exit';\nimport UnitButton from './UnitButton';\nimport SequenceNavigationTabs from './SequenceNavigationTabs';\nimport { useSequenceNavigationMetadata } from './hooks';\nimport { useModel } from '../../../../generic/model-store';\nimport { LOADED } from '../../../data/slice';\n\nimport messages from './messages';\n\nconst SequenceNavigation = ({\n intl,\n unitId,\n sequenceId,\n className,\n onNavigate,\n nextHandler,\n previousHandler,\n nextSequenceHandler,\n handleNavigate,\n isOpen,\n open,\n close,\n}) => {\n const sequence = useModel('sequences', sequenceId);\n const {\n isFirstUnit,\n isLastUnit,\n nextLink,\n previousLink,\n navigationDisabledPrevSequence,\n navigationDisabledNextSequence,\n } = useSequenceNavigationMetadata(sequenceId, unitId);\n const {\n courseId,\n sequenceStatus,\n } = useSelector(state => state.courseware);\n const isLocked = sequenceStatus === LOADED ? (\n sequence.gatedContent !== undefined && sequence.gatedContent.gated\n ) : undefined;\n\n const shouldDisplayNotificationTriggerInSequence = useWindowSize().width < breakpoints.small.minWidth;\n\n const renderUnitButtons = () => {\n if (isLocked) {\n return (\n {}} />\n );\n }\n if (sequence.unitIds.length === 0 || unitId === null) {\n return (\n
\n );\n }\n return (\n \n );\n };\n\n const renderPreviousButton = () => {\n const disabled = isFirstUnit;\n const prevArrow = isRtl(getLocale()) ? ChevronRight : ChevronLeft;\n return navigationDisabledPrevSequence || (\n \n {shouldDisplayNotificationTriggerInSequence ? null : intl.formatMessage(messages.previousButton)}\n \n );\n };\n\n const renderNextButton = () => {\n const { exitActive, exitText } = GetCourseExitNavigation(courseId, intl);\n const buttonText = (isLastUnit && exitText) ? exitText : intl.formatMessage(messages.nextButton);\n const disabled = isLastUnit && !exitActive;\n const nextArrow = isRtl(getLocale()) ? ChevronLeft : ChevronRight;\n\n return navigationDisabledNextSequence || (\n \n \n {shouldDisplayNotificationTriggerInSequence ? null : buttonText}\n \n \n );\n };\n\n return sequenceStatus === LOADED && (\n \n );\n};\n\nSequenceNavigation.propTypes = {\n intl: intlShape.isRequired,\n sequenceId: PropTypes.string.isRequired,\n unitId: PropTypes.string,\n className: PropTypes.string,\n onNavigate: PropTypes.func.isRequired,\n nextHandler: PropTypes.func.isRequired,\n previousHandler: PropTypes.func.isRequired,\n close: PropTypes.func,\n open: PropTypes.func,\n isOpen: PropTypes.bool,\n handleNavigate: PropTypes.func,\n nextSequenceHandler: PropTypes.func,\n};\n\nSequenceNavigation.defaultProps = {\n className: null,\n unitId: null,\n close: null,\n open: null,\n isOpen: false,\n handleNavigate: null,\n nextSequenceHandler: null,\n};\n\nexport default injectIntl(SequenceNavigation);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useSelector } from 'react-redux';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\n\nimport EffortEstimate from '../../../../shared/effort-estimate';\nimport { sequenceIdsSelector } from '../../../data';\nimport { useModel } from '../../../../generic/model-store';\n\nimport messages from './messages';\n\n// This component exists to peek ahead at the next sequence and grab its estimated effort.\n// If we should be showing the next sequence's effort, we display the title and effort instead of \"Next\".\n\n/**\n * Note: this component is basically ignored and just acts as a pass-through to children components right now because\n * effort estimation is no longer attached to the sequence model. It used to be attached, via the LMS blocks API and\n * its block transformers. But as part of the effort to remove reliance on modulestore blocks on the LMS side, we\n * stopped calling that API and we lost effort estimation in the deal.\n *\n * See https://openedx.atlassian.net/browse/AA-930 for the initiative to refactor Effort Estimation to avoid the\n * modulestore, which would allow us to revive the usefulness of this component again.\n */\n\nconst UnitNavigationEffortEstimate = ({\n children,\n intl,\n sequenceId,\n unitId,\n}) => {\n const sequenceIds = useSelector(sequenceIdsSelector);\n const sequenceIndex = sequenceIds.indexOf(sequenceId);\n const nextSequenceId = sequenceIndex < sequenceIds.length - 1 ? sequenceIds[sequenceIndex + 1] : null;\n const sequence = useModel('sequences', sequenceId);\n const nextSequence = useModel('sequences', nextSequenceId);\n\n if (!sequence || Object.keys(sequence).length === 0 || !nextSequence || Object.keys(nextSequence).length === 0) {\n return children;\n }\n\n const isLastUnitInSequence = sequence.unitIds.indexOf(unitId) === sequence.unitIds.length - 1;\n if (!isLastUnitInSequence) {\n return children;\n }\n\n // If we don't have info to show for the next sequence, just bail\n if (!nextSequence.effortActivities && !nextSequence.effortTime) {\n return children;\n }\n\n // Note: we don't use `children` here - we replace it with the next sequence's title.\n return (\n
\n {intl.formatMessage(messages.nextUpButton, { title: nextSequence.title })}\n \n
\n );\n};\n\nUnitNavigationEffortEstimate.propTypes = {\n children: PropTypes.node,\n intl: intlShape.isRequired,\n sequenceId: PropTypes.string.isRequired,\n unitId: PropTypes.string,\n};\n\nUnitNavigationEffortEstimate.defaultProps = {\n children: null,\n unitId: null,\n};\n\nexport default injectIntl(UnitNavigationEffortEstimate);\n","import classNames from 'classnames';\nimport { Link } from 'react-router-dom';\nimport PropTypes from 'prop-types';\nimport { Button } from '@openedx/paragon';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faChevronLeft, faChevronRight } from '@fortawesome/free-solid-svg-icons';\nimport {\n injectIntl, intlShape, isRtl, getLocale,\n} from '@edx/frontend-platform/i18n';\nimport { useSelector } from 'react-redux';\n\nimport { GetCourseExitNavigation } from '../../course-exit';\n\nimport UnitNavigationEffortEstimate from './UnitNavigationEffortEstimate';\nimport { useSequenceNavigationMetadata } from './hooks';\nimport messages from './messages';\n\nconst UnitNavigation = ({\n intl,\n sequenceId,\n unitId,\n onClickPrevious,\n onClickNext,\n isAtTop,\n}) => {\n const {\n isFirstUnit, isLastUnit, nextLink, previousLink,\n } = useSequenceNavigationMetadata(sequenceId, unitId);\n const { courseId } = useSelector(state => state.courseware);\n\n const renderPreviousButton = () => {\n const disabled = isFirstUnit;\n const prevArrow = isRtl(getLocale()) ? faChevronRight : faChevronLeft;\n return (\n \n \n {intl.formatMessage(messages.previousButton)}\n \n );\n };\n\n const renderNextButton = () => {\n const { exitActive, exitText } = GetCourseExitNavigation(courseId, intl);\n const buttonText = (isLastUnit && exitText) ? exitText : intl.formatMessage(messages.nextButton);\n const disabled = isLastUnit && !exitActive;\n const nextArrow = isRtl(getLocale()) ? faChevronLeft : faChevronRight;\n return (\n \n \n {buttonText}\n \n \n \n );\n };\n\n return (\n
\n {renderPreviousButton()}\n {renderNextButton()}\n
\n );\n};\n\nUnitNavigation.propTypes = {\n intl: intlShape.isRequired,\n sequenceId: PropTypes.string.isRequired,\n unitId: PropTypes.string,\n onClickPrevious: PropTypes.func.isRequired,\n onClickNext: PropTypes.func.isRequired,\n isAtTop: PropTypes.bool,\n};\n\nUnitNavigation.defaultProps = {\n unitId: null,\n isAtTop: false,\n};\n\nexport default injectIntl(UnitNavigation);\n","import React from 'react';\n\nconst SidebarContext = React.createContext({});\n\nexport default SidebarContext;\n","// eslint-disable-next-line import/prefer-default-export\nexport const ID = 'COURSE_OUTLINE';\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n loading: {\n id: 'courseOutline.loading',\n defaultMessage: 'Loading...',\n description: 'Screen reader text to use on the spinner while the sidebar is loading.',\n },\n toggleCourseOutlineTrigger: {\n id: 'courseOutline.toggle.button',\n defaultMessage: 'Toggle course outline tray',\n description: 'Button for the learner to toggle the sidebar',\n },\n courseOutlineTitle: {\n id: 'courseOutline.tray.title',\n defaultMessage: 'Course Outline',\n description: 'Title text displayed for the course outline tray',\n },\n completedUnit: {\n id: 'courseOutline.completedUnit',\n defaultMessage: 'Completed unit',\n description: 'Text used to describe the green checkmark icon in front of a unit title',\n },\n incompleteUnit: {\n id: 'courseOutline.incompleteUnit',\n defaultMessage: 'Incomplete unit',\n description: 'Text used to describe the gray checkmark icon in front of a unit title',\n },\n});\n\nexport default messages;\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n discussionsTitle: {\n id: 'discussions.sidebar.title',\n defaultMessage: 'Discussions',\n description: 'Title text for a forum where users are able to discuss course topics',\n },\n openDiscussionsTrigger: {\n id: 'discussions.sidebar.open.button',\n defaultMessage: 'Show discussions tray',\n description: 'Alt text for a button that opens the discussions feature',\n },\n});\n\nexport default messages;\n","import { ensureConfig, getConfig } from '@edx/frontend-platform';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Icon } from '@openedx/paragon';\nimport { QuestionAnswer } from '@openedx/paragon/icons';\nimport PropTypes from 'prop-types';\nimport { useContext, useEffect, useMemo } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { useModel } from '@src/generic/model-store';\nimport { WIDGETS } from '@src/constants';\nimport { getCourseDiscussionTopics } from '../../../../data/thunks';\nimport SidebarTriggerBase from '../../common/TriggerBase';\nimport SidebarContext from '../../SidebarContext';\nimport messages from './messages';\n\nensureConfig(['DISCUSSIONS_MFE_BASE_URL']);\nexport const ID = WIDGETS.DISCUSSIONS;\n\nconst DiscussionsTrigger = ({\n intl,\n onClick,\n}) => {\n const {\n unitId,\n courseId,\n } = useContext(SidebarContext);\n const dispatch = useDispatch();\n const { tabs } = useModel('courseHomeMeta', courseId);\n const topic = useModel('discussionTopics', unitId);\n const baseUrl = getConfig().DISCUSSIONS_MFE_BASE_URL;\n const edxProvider = useMemo(\n () => tabs?.find(tab => tab.slug === 'discussion'),\n [tabs],\n );\n\n useEffect(() => {\n if (baseUrl && edxProvider) {\n dispatch(getCourseDiscussionTopics(courseId));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [courseId, baseUrl]);\n\n if (!topic?.id || !topic?.enabledInContext) {\n return null;\n }\n\n return (\n \n \n \n );\n};\n\nDiscussionsTrigger.propTypes = {\n intl: intlShape.isRequired,\n onClick: PropTypes.func.isRequired,\n};\n\nexport default injectIntl(DiscussionsTrigger);\n","import { useContext } from 'react';\nimport classNames from 'classnames';\nimport { ensureConfig, getConfig } from '@edx/frontend-platform';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\n\nimport { useModel } from '@src/generic/model-store';\nimport SidebarBase from '../../common/SidebarBase';\nimport SidebarContext from '../../SidebarContext';\nimport { ID } from './DiscussionsTrigger';\n\nimport messages from './messages';\n\nensureConfig(['DISCUSSIONS_MFE_BASE_URL']);\n\nconst DiscussionsSidebar = ({ intl }) => {\n const {\n unitId,\n courseId,\n shouldDisplayFullScreen,\n } = useContext(SidebarContext);\n const topic = useModel('discussionTopics', unitId);\n const discussionsUrl = `${getConfig().DISCUSSIONS_MFE_BASE_URL}/${courseId}/category/${unitId}`;\n\n if (!topic?.id || !topic?.enabledInContext) {\n return null;\n }\n\n return (\n \n \n \n );\n};\n\nDiscussionsSidebar.propTypes = {\n intl: intlShape.isRequired,\n};\n\nDiscussionsSidebar.Trigger = DiscussionsSidebar;\nDiscussionsSidebar.ID = ID;\n\nexport default injectIntl(DiscussionsSidebar);\n","import * as notifications from './notifications';\nimport * as discussions from './discussions';\n\nexport const SIDEBARS = {\n [notifications.ID]: {\n ID: notifications.ID,\n Sidebar: notifications.Sidebar,\n Trigger: notifications.Trigger,\n },\n [discussions.ID]: {\n ID: discussions.ID,\n Sidebar: discussions.Sidebar,\n Trigger: discussions.Trigger,\n },\n};\n\nexport const SIDEBAR_ORDER = [\n discussions.ID,\n notifications.ID,\n];\n","import { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Icon } from '@openedx/paragon';\nimport { WatchOutline } from '@openedx/paragon/icons';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport React from 'react';\n\nimport messages from '../../../messages';\n\nconst NotificationIcon = ({\n intl,\n status,\n notificationColor,\n}) => (\n <>\n \n {status === 'active'\n ? (\n \n )\n : null}\n \n);\n\nNotificationIcon.defaultProps = {\n status: null,\n};\n\nNotificationIcon.propTypes = {\n intl: intlShape.isRequired,\n status: PropTypes.string,\n notificationColor: PropTypes.string.isRequired,\n};\n\nexport default injectIntl(NotificationIcon);\n","import { useContext, useEffect } from 'react';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport PropTypes from 'prop-types';\n\nimport { WIDGETS } from '@src/constants';\nimport { getLocalStorage, setLocalStorage } from '@src/data/localStorage';\nimport messages from '../../../messages';\nimport SidebarTriggerBase from '../../common/TriggerBase';\nimport SidebarContext from '../../SidebarContext';\nimport NotificationIcon from './NotificationIcon';\n\nexport const ID = WIDGETS.NOTIFICATIONS;\n\nconst NotificationTrigger = ({\n intl,\n onClick,\n}) => {\n const {\n courseId,\n notificationStatus,\n setNotificationStatus,\n upgradeNotificationCurrentState,\n } = useContext(SidebarContext);\n\n /* Re-show a red dot beside the notification trigger for each of the 7 UpgradeNotification stages\n The upgradeNotificationCurrentState prop will be available after UpgradeNotification mounts. Once available,\n compare with the last state they've seen, and if it's different then set dot back to red */\n function UpdateUpgradeNotificationLastSeen() {\n if (upgradeNotificationCurrentState) {\n if (getLocalStorage(`upgradeNotificationLastSeen.${courseId}`) !== upgradeNotificationCurrentState) {\n setNotificationStatus('active');\n setLocalStorage(`notificationStatus.${courseId}`, 'active');\n setLocalStorage(`upgradeNotificationLastSeen.${courseId}`, upgradeNotificationCurrentState);\n }\n }\n }\n\n if (!getLocalStorage(`notificationStatus.${courseId}`)) {\n setLocalStorage(`notificationStatus.${courseId}`, 'active'); // Show red dot on notificationTrigger until seen\n }\n\n if (!getLocalStorage(`upgradeNotificationCurrentState.${courseId}`)) {\n setLocalStorage(`upgradeNotificationCurrentState.${courseId}`, 'initialize');\n }\n\n useEffect(() => {\n UpdateUpgradeNotificationLastSeen();\n });\n\n return (\n \n \n \n );\n};\n\nNotificationTrigger.propTypes = {\n intl: intlShape.isRequired,\n onClick: PropTypes.func.isRequired,\n};\n\nexport default injectIntl(NotificationTrigger);\n","import { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport classNames from 'classnames';\nimport { useContext, useEffect, useMemo } from 'react';\nimport { sendTrackEvent } from '@edx/frontend-platform/analytics';\nimport { PluginSlot } from '@openedx/frontend-plugin-framework';\nimport { getAuthenticatedUser } from '@edx/frontend-platform/auth';\nimport { useModel } from '@src/generic/model-store';\nimport UpgradeNotification from '../../../../../generic/upgrade-notification/UpgradeNotification';\n\nimport messages from '../../../messages';\nimport SidebarBase from '../../common/SidebarBase';\nimport SidebarContext from '../../SidebarContext';\nimport NotificationTrigger, { ID } from './NotificationTrigger';\n\nconst NotificationTray = ({ intl }) => {\n const {\n courseId,\n onNotificationSeen,\n shouldDisplayFullScreen,\n upgradeNotificationCurrentState,\n setUpgradeNotificationCurrentState,\n } = useContext(SidebarContext);\n const course = useModel('coursewareMeta', courseId);\n\n const {\n accessExpiration,\n contentTypeGatingEnabled,\n end,\n enrollmentEnd,\n enrollmentMode,\n enrollmentStart,\n marketingUrl,\n offer,\n start,\n timeOffsetMillis,\n userTimezone,\n verificationStatus,\n } = course;\n\n const {\n courseModes,\n org,\n verifiedMode,\n username,\n isStaff,\n } = useModel('courseHomeMeta', courseId);\n const { administrator } = getAuthenticatedUser();\n const activeCourseModes = useMemo(() => courseModes?.map(mode => mode.slug), [courseModes]);\n const notificationTrayEventProperties = {\n course_end: end,\n course_modes: activeCourseModes,\n course_start: start,\n courserun_key: courseId,\n enrollment_end: enrollmentEnd,\n enrollment_mode: enrollmentMode,\n enrollment_start: enrollmentStart,\n is_upgrade_notification_visible: !!verifiedMode,\n name: 'Old Sidebar Notification Tray',\n org_key: org,\n username,\n verification_status: verificationStatus,\n is_staff: isStaff,\n is_admin: administrator,\n };\n // After three seconds, update notificationSeen (to hide red dot)\n useEffect(() => {\n setTimeout(onNotificationSeen, 3000);\n sendTrackEvent('edx.ui.course.upgrade.old_sidebar.notifications', notificationTrayEventProperties);\n }, []);\n\n return (\n \n
{verifiedMode\n ? (\n \n \n \n ) : (\n

{intl.formatMessage(messages.noNotificationsMessage)}

\n )}\n
\n \n );\n};\n\nNotificationTray.propTypes = {\n intl: intlShape.isRequired,\n};\n\nNotificationTray.Trigger = NotificationTrigger;\nNotificationTray.ID = ID;\n\nexport default injectIntl(NotificationTray);\n","import { camelCaseObject, getConfig } from '@edx/frontend-platform';\nimport { getAuthenticatedHttpClient, getAuthenticatedUser } from '@edx/frontend-platform/auth';\nimport { appendBrowserTimezoneToUrl } from '../../utils';\nimport {\n normalizeLearningSequencesData, normalizeMetadata, normalizeOutlineBlocks, normalizeSequenceMetadata,\n} from './utils';\n\n// Do not add further calls to this API - we don't like making use of the modulestore if we can help it\nexport async function getSequenceForUnitDeprecated(courseId, unitId) {\n const authenticatedUser = getAuthenticatedUser();\n const url = new URL(`${getConfig().LMS_BASE_URL}/api/courses/v2/blocks/`);\n url.searchParams.append('course_id', courseId);\n url.searchParams.append('username', authenticatedUser ? authenticatedUser.username : '');\n url.searchParams.append('depth', 3);\n url.searchParams.append('requested_fields', 'children,discussions_url');\n\n const { data } = await getAuthenticatedHttpClient().get(url.href, {});\n const parent = Object.values(data.blocks).find(block => block.type === 'sequential' && block.children.includes(unitId));\n return parent?.id;\n}\n\nexport async function getLearningSequencesOutline(courseId) {\n const outlineUrl = new URL(`${getConfig().LMS_BASE_URL}/api/learning_sequences/v1/course_outline/${courseId}`);\n const { data } = await getAuthenticatedHttpClient().get(outlineUrl.href, {});\n return normalizeLearningSequencesData(data);\n}\n\nexport async function getCourseMetadata(courseId) {\n let url = `${getConfig().LMS_BASE_URL}/api/courseware/course/${courseId}`;\n url = appendBrowserTimezoneToUrl(url);\n const metadata = await getAuthenticatedHttpClient().get(url);\n return normalizeMetadata(metadata);\n}\n\nexport async function getSequenceMetadata(sequenceId) {\n const { data } = await getAuthenticatedHttpClient()\n .get(`${getConfig().LMS_BASE_URL}/api/courseware/sequence/${sequenceId}`, {});\n\n return normalizeSequenceMetadata(data);\n}\n\nconst getSequenceHandlerUrl = (courseId, sequenceId) => `${getConfig().LMS_BASE_URL}/courses/${courseId}/xblock/${sequenceId}/handler`;\n\nexport async function getBlockCompletion(courseId, sequenceId, usageKey) {\n const { data } = await getAuthenticatedHttpClient().post(\n `${getSequenceHandlerUrl(courseId, sequenceId)}/get_completion`,\n { usage_key: usageKey },\n );\n return data.complete === true;\n}\n\nexport async function postSequencePosition(courseId, sequenceId, activeUnitIndex) {\n const { data } = await getAuthenticatedHttpClient().post(\n `${getSequenceHandlerUrl(courseId, sequenceId)}/goto_position`,\n // Position is 1-indexed on the server and 0-indexed in this app. Adjust here.\n { position: activeUnitIndex + 1 },\n );\n return data;\n}\n\nexport async function getResumeBlock(courseId) {\n const url = new URL(`${getConfig().LMS_BASE_URL}/api/courseware/resume/${courseId}`);\n const { data } = await getAuthenticatedHttpClient().get(url.href, {});\n return camelCaseObject(data);\n}\n\nexport async function postIntegritySignature(courseId) {\n const { data } = await getAuthenticatedHttpClient().post(`${getConfig().LMS_BASE_URL}/api/agreements/v1/integrity_signature/${courseId}`, {});\n return camelCaseObject(data);\n}\n\nexport async function sendActivationEmail() {\n const url = new URL(`${getConfig().LMS_BASE_URL}/api/send_account_activation_email`);\n const { data } = await getAuthenticatedHttpClient().post(url.href, {});\n return data;\n}\n\nexport async function getCourseDiscussionConfig(courseId) {\n const url = `${getConfig().LMS_BASE_URL}/api/discussion/v1/courses/${courseId}`;\n const { data } = await getAuthenticatedHttpClient().get(url);\n return data;\n}\n\nexport async function getCourseTopics(courseId) {\n const { data } = await getAuthenticatedHttpClient()\n .get(`${getConfig().LMS_BASE_URL}/api/discussion/v2/course_topics/${courseId}`);\n return camelCaseObject(data);\n}\n\n/**\n * Get course outline structure for the courseware navigation sidebar.\n * @param {string} courseId - The unique identifier for the course.\n * @returns {Promise<{units: {}, sequences: {}, sections: {}}|null>}\n */\nexport async function getCourseOutline(courseId) {\n const { data } = await getAuthenticatedHttpClient()\n .get(`${getConfig().LMS_BASE_URL}/api/course_home/v1/navigation/${courseId}`);\n\n return data.blocks ? normalizeOutlineBlocks(courseId, data.blocks) : null;\n}\n\n/**\n * Get waffle flag value that enable courseware outline sidebar and always open auxiliary sidebar.\n * @param {string} courseId - The unique identifier for the course.\n * @returns {Promise<{enable_navigation_sidebar: boolean, enable_navigation_sidebar: boolean}>} - The object\n * of boolean values of enabling of the outline sidebar and is always open auxiliary sidebar.\n */\nexport async function getCoursewareOutlineSidebarToggles(courseId) {\n const url = new URL(`${getConfig().LMS_BASE_URL}/courses/${courseId}/courseware-navigation-sidebar/toggles/`);\n const { data } = await getAuthenticatedHttpClient().get(url.href);\n return {\n enable_navigation_sidebar: data.enable_navigation_sidebar || false,\n always_open_auxiliary_sidebar: data.always_open_auxiliary_sidebar || false,\n };\n}\n","import { logInfo } from '@edx/frontend-platform/logging';\nimport { camelCaseObject } from '@edx/frontend-platform';\n\nimport { getTimeOffsetMillis } from '../../course-home/data/api';\n\nexport function normalizeLearningSequencesData(learningSequencesData) {\n const models = {\n courses: {},\n sections: {},\n sequences: {},\n };\n\n const now = new Date();\n function isReleased(block) {\n // We check whether the backend marks this as accessible because staff users are granted access anyway.\n // Note that sections don't have the `accessible` field and will just be checking `effective_start`.\n return block.accessible || !block.effective_start || now >= Date.parse(block.effective_start);\n }\n\n // Sequences\n Object.entries(learningSequencesData.outline.sequences).forEach(([seqId, sequence]) => {\n if (!isReleased(sequence)) {\n return; // Don't let the learner see unreleased sequences\n }\n\n models.sequences[seqId] = {\n id: seqId,\n title: sequence.title,\n };\n });\n\n // Sections\n learningSequencesData.outline.sections.forEach(section => {\n // Filter out any ignored sequences (e.g. unreleased sequences)\n const availableSequenceIds = section.sequence_ids.filter(seqId => seqId in models.sequences);\n\n // If we are unreleased and already stripped out all our children, just don't show us at all.\n // (We check both release date and children because children will exist for an unreleased section even for staff,\n // so we still want to show this section.)\n if (!isReleased(section) && availableSequenceIds.length === 0) {\n return;\n }\n\n models.sections[section.id] = {\n id: section.id,\n title: section.title,\n sequenceIds: availableSequenceIds,\n courseId: learningSequencesData.course_key,\n };\n\n // Add back-references to this section for all child sequences.\n availableSequenceIds.forEach(childSeqId => {\n models.sequences[childSeqId].sectionId = section.id;\n });\n });\n\n // Course\n models.courses[learningSequencesData.course_key] = {\n id: learningSequencesData.course_key,\n title: learningSequencesData.title,\n sectionIds: Object.entries(models.sections).map(([sectionId]) => sectionId),\n\n // Scan through all the sequences and look for ones that aren't released yet.\n hasScheduledContent: Object.values(learningSequencesData.outline.sequences).some(seq => !isReleased(seq)),\n };\n\n return models;\n}\n\nexport function normalizeMetadata(metadata) {\n const requestTime = Date.now();\n const responseTime = requestTime;\n const { data, headers } = metadata;\n return {\n accessExpiration: camelCaseObject(data.access_expiration),\n canShowUpgradeSock: data.can_show_upgrade_sock,\n contentTypeGatingEnabled: data.content_type_gating_enabled,\n courseGoals: camelCaseObject(data.course_goals),\n id: data.id,\n title: data.name,\n offer: camelCaseObject(data.offer),\n enrollmentStart: data.enrollment_start,\n enrollmentEnd: data.enrollment_end,\n end: data.end,\n start: data.start,\n enrollmentMode: data.enrollment.mode,\n isEnrolled: data.enrollment.is_active,\n license: data.license,\n userTimezone: data.user_timezone,\n showCalculator: data.show_calculator,\n notes: camelCaseObject(data.notes),\n marketingUrl: data.marketing_url,\n celebrations: camelCaseObject(data.celebrations),\n userHasPassingGrade: data.user_has_passing_grade,\n courseExitPageIsActive: data.course_exit_page_is_active,\n certificateData: camelCaseObject(data.certificate_data),\n entranceExamData: camelCaseObject(data.entrance_exam_data),\n language: data.language,\n timeOffsetMillis: getTimeOffsetMillis(headers && headers.date, requestTime, responseTime),\n verifyIdentityUrl: data.verify_identity_url,\n verificationStatus: data.verification_status,\n linkedinAddToProfileUrl: data.linkedin_add_to_profile_url,\n relatedPrograms: camelCaseObject(data.related_programs),\n userNeedsIntegritySignature: data.user_needs_integrity_signature,\n canAccessProctoredExams: data.can_access_proctored_exams,\n learningAssistantEnabled: data.learning_assistant_enabled,\n };\n}\n\nexport function normalizeSequenceMetadata(sequence) {\n return {\n sequence: {\n id: sequence.item_id,\n blockType: sequence.tag,\n unitIds: sequence.items.map(unit => unit.id),\n bannerText: sequence.banner_text,\n format: sequence.format,\n title: sequence.display_name,\n /*\n Example structure of gated_content when prerequisites exist:\n {\n prereq_id: 'id of the prereq section',\n prereq_url: 'unused by this frontend',\n prereq_section_name: 'Name of the prerequisite section',\n gated: true,\n gated_section_name: 'Name of this gated section',\n */\n gatedContent: camelCaseObject(sequence.gated_content),\n isTimeLimited: sequence.is_time_limited,\n isProctored: sequence.is_proctored,\n isHiddenAfterDue: sequence.is_hidden_after_due,\n // Position comes back from the server 1-indexed. Adjust here.\n activeUnitIndex: sequence.position ? sequence.position - 1 : 0,\n saveUnitPosition: sequence.save_position,\n showCompletion: sequence.show_completion,\n allowProctoringOptOut: sequence.allow_proctoring_opt_out,\n navigationDisabled: sequence.navigation_disabled,\n },\n units: sequence.items.map(unit => ({\n id: unit.id,\n sequenceId: sequence.item_id,\n bookmarked: unit.bookmarked,\n complete: unit.complete,\n title: unit.page_title,\n contentType: unit.type,\n graded: unit.graded,\n containsContentTypeGatedContent: unit.contains_content_type_gated_content,\n })),\n };\n}\n\n/**\n * Normalizes outline blocks for a given course.\n * @param {string} courseId - The unique identifier for the course.\n * @param {Object} blocks - An object containing different blocks of the course outline.\n * @returns {Object} - An object with normalized sections, sequences, and units.\n */\nexport function normalizeOutlineBlocks(courseId, blocks) {\n const models = {\n sections: {},\n sequences: {},\n units: {},\n };\n Object.values(blocks).forEach(block => {\n switch (block.type) {\n case 'chapter':\n models.sections[block.id] = {\n complete: block.complete,\n id: block.id,\n title: block.display_name,\n sequenceIds: block.children || [],\n completionStat: {\n completed: block.completion_stat?.completion,\n total: block.completion_stat?.completable_children,\n },\n };\n break;\n\n case 'sequential':\n case 'lock':\n models.sequences[block.id] = {\n complete: block.complete,\n id: block.id,\n title: block.display_name,\n type: block.type,\n specialExamInfo: block.special_exam_info,\n unitIds: block.children || [],\n completionStat: {\n completed: block.completion_stat?.completion,\n total: block.completion_stat?.completable_children,\n },\n };\n break;\n\n case 'vertical':\n models.units[block.id] = {\n complete: block.complete,\n icon: block.icon,\n id: block.id,\n title: block.display_name,\n type: block.type,\n };\n break;\n\n default:\n logInfo(`Unexpected course block type: ${block.type} with ID ${block.id}. Expected block types are course, chapter, and sequential.`);\n }\n });\n\n return models;\n}\n","import { LOADED } from './slice';\n\nexport function sequenceIdsSelector(state) {\n if (state.courseware.courseStatus !== LOADED) {\n return [];\n }\n const { sectionIds = [] } = state.models.coursewareMeta[state.courseware.courseId];\n\n return sectionIds\n .flatMap(sectionId => state.models.sections[sectionId].sequenceIds);\n}\n\nexport const getSequenceId = state => state.courseware.sequenceId;\n\nexport const getCourseOutline = state => state.courseware.courseOutline;\n\nexport const getCourseOutlineStatus = state => state.courseware.courseOutlineStatus;\n\nexport const getCoursewareOutlineSidebarSettings = state => state.courseware.coursewareOutlineSidebarSettings;\n\nexport const getCourseOutlineShouldUpdate = state => state.courseware.courseOutlineShouldUpdate;\n","/* eslint-disable no-param-reassign */\nimport { createSlice } from '@reduxjs/toolkit';\n\nexport const LOADING = 'loading';\nexport const LOADED = 'loaded';\nexport const FAILED = 'failed';\nexport const DENIED = 'denied';\n\nconst slice = createSlice({\n name: 'courseware',\n initialState: {\n courseId: null,\n courseStatus: LOADING,\n sequenceId: null,\n sequenceMightBeUnit: false,\n sequenceStatus: LOADING,\n courseOutline: {},\n coursewareOutlineSidebarSettings: {},\n courseOutlineStatus: LOADING,\n courseOutlineShouldUpdate: false,\n },\n reducers: {\n fetchCourseRequest: (state, { payload }) => {\n state.courseId = payload.courseId;\n state.courseStatus = LOADING;\n },\n fetchCourseSuccess: (state, { payload }) => {\n state.courseId = payload.courseId;\n state.courseStatus = LOADED;\n },\n fetchCourseFailure: (state, { payload }) => {\n state.courseId = payload.courseId;\n state.courseStatus = FAILED;\n },\n fetchCourseDenied: (state, { payload }) => {\n state.courseId = payload.courseId;\n state.courseStatus = DENIED;\n },\n fetchSequenceRequest: (state, { payload }) => {\n state.sequenceId = payload.sequenceId;\n state.sequenceStatus = LOADING;\n state.sequenceMightBeUnit = false;\n },\n fetchSequenceSuccess: (state, { payload }) => {\n state.sequenceId = payload.sequenceId;\n state.sequenceStatus = LOADED;\n state.sequenceMightBeUnit = false;\n },\n fetchSequenceFailure: (state, { payload }) => {\n state.sequenceId = payload.sequenceId;\n state.sequenceStatus = FAILED;\n state.sequenceMightBeUnit = payload.sequenceMightBeUnit || false;\n },\n fetchCourseOutlineRequest: (state) => {\n state.courseOutline = {};\n state.courseOutlineStatus = LOADING;\n },\n fetchCourseOutlineSuccess: (state, { payload }) => {\n state.courseOutline = payload.courseOutline;\n state.courseOutlineStatus = LOADED;\n state.courseOutlineShouldUpdate = false;\n },\n fetchCourseOutlineFailure: (state) => {\n state.courseOutline = {};\n state.courseOutlineStatus = FAILED;\n },\n setCoursewareOutlineSidebarToggles: (state, { payload }) => {\n state.coursewareOutlineSidebarSettings = payload;\n },\n updateCourseOutlineCompletion: (state, { payload }) => {\n const { unitId, isComplete: isUnitComplete } = payload;\n if (!isUnitComplete) {\n return state;\n }\n\n state.courseOutline.units[unitId].complete = true;\n\n const sequenceId = Object.keys(state.courseOutline.sequences)\n .find(id => state.courseOutline.sequences[id].unitIds.includes(unitId));\n const sequenceUnits = state.courseOutline.sequences[sequenceId].unitIds;\n const completedUnits = sequenceUnits.filter((id) => state.courseOutline.units[id].complete);\n const isAllUnitsAreComplete = sequenceUnits.every((id) => state.courseOutline.units[id].complete);\n\n // Update amount of completed units of the sequence\n state.courseOutline.sequences[sequenceId].completionStat.completed = completedUnits.length;\n\n if (isAllUnitsAreComplete) {\n state.courseOutline.sequences[sequenceId].complete = true;\n }\n\n const sectionId = Object.keys(state.courseOutline.sections)\n .find(id => state.courseOutline.sections[id].sequenceIds.includes(sequenceId));\n const sectionSequences = state.courseOutline.sections[sectionId].sequenceIds;\n const isAllSequencesAreComplete = sectionSequences.every((id) => state.courseOutline.sequences[id].complete);\n const hasLockedSequence = sectionSequences.some((id) => state.courseOutline.sequences[id].type === 'lock');\n\n // This block of code checks whether all units in the current sequence are complete\n // and if the parent section has a locked (prerequisites) sequence. If both conditions\n // are met, it switches the state of the 'courseOutlineShouldUpdate' flag to true,\n // indicating that the sidebar outline structure needs to be refetched.\n if (isAllUnitsAreComplete && hasLockedSequence) {\n state.courseOutlineShouldUpdate = true;\n }\n\n // Update amount of completed units of the section\n state.courseOutline.sections[sectionId].completionStat.completed = sectionSequences.reduce(\n (acc, id) => acc + state.courseOutline.sequences[id].completionStat.completed,\n 0,\n );\n\n if (isAllSequencesAreComplete) {\n state.courseOutline.sections[sectionId].complete = true;\n }\n\n return state;\n },\n },\n});\n\nexport const {\n fetchCourseRequest,\n fetchCourseSuccess,\n fetchCourseFailure,\n fetchCourseDenied,\n fetchSequenceRequest,\n fetchSequenceSuccess,\n fetchSequenceFailure,\n fetchCourseRecommendationsRequest,\n fetchCourseRecommendationsSuccess,\n fetchCourseRecommendationsFailure,\n fetchCourseOutlineRequest,\n fetchCourseOutlineSuccess,\n fetchCourseOutlineFailure,\n setCoursewareOutlineSidebarToggles,\n updateCourseOutlineCompletion,\n} = slice.actions;\n\nexport const {\n reducer,\n} = slice;\n","import { logError, logInfo } from '@edx/frontend-platform/logging';\nimport { getCourseHomeCourseMetadata } from '../../course-home/data/api';\nimport {\n addModel, addModelsMap, updateModel, updateModels, updateModelsMap,\n} from '../../generic/model-store';\nimport {\n getBlockCompletion,\n getCourseDiscussionConfig,\n getCourseMetadata,\n getCourseOutline,\n getCourseTopics,\n getCoursewareOutlineSidebarToggles,\n getLearningSequencesOutline,\n getSequenceMetadata,\n postIntegritySignature,\n postSequencePosition,\n} from './api';\nimport {\n fetchCourseDenied,\n fetchCourseFailure,\n fetchCourseRequest,\n fetchCourseSuccess,\n fetchSequenceFailure,\n fetchSequenceRequest,\n fetchSequenceSuccess,\n fetchCourseOutlineRequest,\n fetchCourseOutlineSuccess,\n fetchCourseOutlineFailure,\n setCoursewareOutlineSidebarToggles,\n updateCourseOutlineCompletion,\n} from './slice';\n\nexport function fetchCourse(courseId) {\n return async (dispatch) => {\n dispatch(fetchCourseRequest({ courseId }));\n Promise.allSettled([\n getCourseMetadata(courseId),\n getLearningSequencesOutline(courseId),\n getCourseHomeCourseMetadata(courseId, 'courseware'),\n getCoursewareOutlineSidebarToggles(courseId),\n ]).then(([\n courseMetadataResult,\n learningSequencesOutlineResult,\n courseHomeMetadataResult,\n coursewareOutlineSidebarTogglesResult]) => {\n const fetchedMetadata = courseMetadataResult.status === 'fulfilled';\n const fetchedCourseHomeMetadata = courseHomeMetadataResult.status === 'fulfilled';\n const fetchedOutline = learningSequencesOutlineResult.status === 'fulfilled';\n const fetchedCoursewareOutlineSidebarTogglesResult = coursewareOutlineSidebarTogglesResult.status === 'fulfilled';\n\n if (fetchedMetadata) {\n dispatch(addModel({\n modelType: 'coursewareMeta',\n model: courseMetadataResult.value,\n }));\n }\n\n if (fetchedCourseHomeMetadata) {\n dispatch(addModel({\n modelType: 'courseHomeMeta',\n model: {\n id: courseId,\n ...courseHomeMetadataResult.value,\n },\n }));\n }\n\n if (fetchedOutline) {\n const {\n courses, sections, sequences,\n } = learningSequencesOutlineResult.value;\n\n // This updates the course with a sectionIds array from the Learning Sequence data.\n dispatch(updateModelsMap({\n modelType: 'coursewareMeta',\n modelsMap: courses,\n }));\n dispatch(addModelsMap({\n modelType: 'sections',\n modelsMap: sections,\n }));\n // We update for sequences because the sequence metadata may have come back first.\n dispatch(updateModelsMap({\n modelType: 'sequences',\n modelsMap: sequences,\n }));\n }\n\n if (fetchedCoursewareOutlineSidebarTogglesResult) {\n const {\n enable_navigation_sidebar: enableNavigationSidebar,\n always_open_auxiliary_sidebar: alwaysOpenAuxiliarySidebar,\n } = coursewareOutlineSidebarTogglesResult.value;\n dispatch(setCoursewareOutlineSidebarToggles({ enableNavigationSidebar, alwaysOpenAuxiliarySidebar }));\n }\n\n // Log errors for each request if needed. Outline failures may occur\n // even if the course metadata request is successful\n if (!fetchedOutline) {\n const { response } = learningSequencesOutlineResult.reason;\n if (response && response.status === 403) {\n // 403 responses are normal - they happen when the learner is logged out.\n // We'll redirect them in a moment to the outline tab by calling fetchCourseDenied() below.\n logInfo(learningSequencesOutlineResult.reason);\n } else {\n logError(learningSequencesOutlineResult.reason);\n }\n }\n if (!fetchedMetadata) {\n logError(courseMetadataResult.reason);\n }\n if (!fetchedCourseHomeMetadata) {\n logError(courseHomeMetadataResult.reason);\n }\n if (!fetchedCoursewareOutlineSidebarTogglesResult) {\n logError(coursewareOutlineSidebarTogglesResult.reason);\n }\n if (fetchedMetadata && fetchedCourseHomeMetadata) {\n if (courseHomeMetadataResult.value.courseAccess.hasAccess && fetchedOutline) {\n // User has access\n dispatch(fetchCourseSuccess({ courseId }));\n return;\n }\n // User either doesn't have access or only has partial access\n // (can't access course blocks)\n dispatch(fetchCourseDenied({ courseId }));\n return;\n }\n\n // Definitely an error happening\n dispatch(fetchCourseFailure({ courseId }));\n });\n };\n}\n\nexport function fetchSequence(sequenceId) {\n return async (dispatch) => {\n dispatch(fetchSequenceRequest({ sequenceId }));\n try {\n const { sequence, units } = await getSequenceMetadata(sequenceId);\n if (sequence.blockType !== 'sequential') {\n // Some other block types (particularly 'chapter') can be returned\n // by this API. We want to error in that case, since downstream\n // courseware code is written to render Sequences of Units.\n logError(\n `Requested sequence '${sequenceId}' `\n + `has block type '${sequence.blockType}'; expected block type 'sequential'.`,\n );\n dispatch(fetchSequenceFailure({ sequenceId }));\n } else {\n dispatch(updateModel({\n modelType: 'sequences',\n model: sequence,\n }));\n dispatch(updateModels({\n modelType: 'units',\n models: units,\n }));\n dispatch(fetchSequenceSuccess({ sequenceId }));\n }\n } catch (error) {\n // Some errors are expected - for example, CoursewareContainer may request sequence metadata for a unit and rely\n // on the request failing to notice that it actually does have a unit (mostly so it doesn't have to know anything\n // about the opaque key structure). In such cases, the backend gives us a 422.\n const sequenceMightBeUnit = error?.response?.status === 422;\n if (!sequenceMightBeUnit) {\n logError(error);\n }\n dispatch(fetchSequenceFailure({ sequenceId, sequenceMightBeUnit }));\n }\n };\n}\n\nexport function checkBlockCompletion(courseId, sequenceId, unitId) {\n return async (dispatch, getState) => {\n const { models } = getState();\n if (models.units[unitId]?.complete) {\n return {}; // do nothing. Things don't get uncompleted after they are completed.\n }\n\n try {\n const isComplete = await getBlockCompletion(courseId, sequenceId, unitId);\n dispatch(updateModel({\n modelType: 'units',\n model: {\n id: unitId,\n complete: isComplete,\n },\n }));\n dispatch(updateCourseOutlineCompletion({ sequenceId, unitId, isComplete }));\n return isComplete;\n } catch (error) {\n logError(error);\n }\n return {};\n };\n}\n\nexport function saveSequencePosition(courseId, sequenceId, activeUnitIndex) {\n return async (dispatch, getState) => {\n const { models } = getState();\n const initialActiveUnitIndex = models.sequences[sequenceId].activeUnitIndex;\n // Optimistically update the position.\n dispatch(updateModel({\n modelType: 'sequences',\n model: {\n id: sequenceId,\n activeUnitIndex,\n },\n }));\n try {\n await postSequencePosition(courseId, sequenceId, activeUnitIndex);\n // Update again under the assumption that the above call succeeded, since it doesn't return a\n // meaningful response.\n dispatch(updateModel({\n modelType: 'sequences',\n model: {\n id: sequenceId,\n activeUnitIndex,\n },\n }));\n } catch (error) {\n logError(error);\n dispatch(updateModel({\n modelType: 'sequences',\n model: {\n id: sequenceId,\n activeUnitIndex: initialActiveUnitIndex,\n },\n }));\n }\n };\n}\n\nexport function saveIntegritySignature(courseId, isMasquerading) {\n return async (dispatch) => {\n try {\n // If the request is made by a staff user masquerading as a specific learner,\n // don't actually create a signature for them on the backend,\n // only the modal dialog will be dismissed\n if (!isMasquerading) {\n await postIntegritySignature(courseId);\n }\n dispatch(updateModel({\n modelType: 'coursewareMeta',\n model: {\n id: courseId,\n userNeedsIntegritySignature: false,\n },\n }));\n } catch (error) {\n logError(error);\n }\n };\n}\n\nexport function getCourseDiscussionTopics(courseId) {\n return async (dispatch) => {\n try {\n const config = await getCourseDiscussionConfig(courseId);\n // Only load topics for the openedx provider, the legacy provider uses\n // the xblock\n if (config.provider === 'openedx') {\n const topics = await getCourseTopics(courseId);\n dispatch(updateModels({\n modelType: 'discussionTopics',\n models: topics.filter(topic => topic.usageKey),\n idField: 'usageKey',\n }));\n }\n } catch (error) {\n logError(error);\n }\n };\n}\n\nexport function getCourseOutlineStructure(courseId) {\n return async (dispatch) => {\n dispatch(fetchCourseOutlineRequest());\n try {\n const courseOutline = await getCourseOutline(courseId);\n dispatch(fetchCourseOutlineSuccess({ courseOutline }));\n } catch (error) {\n logError(error);\n dispatch(fetchCourseOutlineFailure());\n }\n };\n}\n","// This file holds some convenience methods for dealing with localStorage.\n//\n// NOTE: These storage keys are not namespaced. That means that it's shared for the current fully\n// qualified domain. Namespacing could be added, but we'll cross that bridge when we need it.\n\nfunction getLocalStorage(key) {\n try {\n if (global.localStorage) {\n const rawItem = global.localStorage.getItem(key);\n if (rawItem) {\n return JSON.parse(rawItem);\n }\n }\n } catch (e) {\n // If this fails for some reason, just return null.\n }\n return null;\n}\n\nfunction setLocalStorage(key, value) {\n try {\n if (global.localStorage) {\n global.localStorage.setItem(key, JSON.stringify(value));\n }\n } catch (e) {\n // If this fails, just bail.\n }\n}\n\nfunction clearLocalStorage(key) {\n try {\n if (global.localStorage) {\n global.localStorage.removeItem(key);\n }\n } catch (e) {\n // If this fails, just bail.\n }\n}\n\nfunction popLocalStorage(key) {\n const value = getLocalStorage(key);\n clearLocalStorage(key);\n return value;\n}\n\nexport {\n clearLocalStorage,\n getLocalStorage,\n popLocalStorage,\n setLocalStorage,\n};\n","/* eslint-disable import/prefer-default-export */\n\nimport {\n useCallback, useEffect, useRef, useState,\n} from 'react';\n\nexport function useEventListener(type, handler) {\n // We use this ref so that we can hold a reference to the currently active event listener.\n const eventListenerRef = useRef(null);\n useEffect(() => {\n // If we currently have an event listener, remove it.\n if (eventListenerRef.current !== null) {\n global.removeEventListener(type, eventListenerRef.current);\n eventListenerRef.current = null;\n }\n // Now add our new handler as the event listener.\n global.addEventListener(type, handler);\n // And then save it to our ref for next time.\n eventListenerRef.current = handler;\n // When the component finally unmounts, use the ref to remove the correct handler.\n return () => global.removeEventListener(type, eventListenerRef.current);\n }, [type, handler]);\n}\n\n/**\n * Hooks up post messages to callbacks\n * @param {Object.} events A mapping of message type to callback\n */\nexport function useIFramePluginEvents(events) {\n const receiveMessage = useCallback(({ data }) => {\n const {\n type,\n payload,\n } = data;\n if (events[type]) {\n events[type](payload);\n }\n }, [events]);\n useEventListener('message', receiveMessage);\n}\n\n/**\n * A hook to monitor message about changes in iframe content height\n * @param onIframeLoaded A callback for when the frame is loaded\n * @returns {[boolean, number]}\n */\nexport function useIFrameHeight(onIframeLoaded = null) {\n const [iframeHeight, setIframeHeight] = useState(null);\n const [hasLoaded, setHasLoaded] = useState(false);\n const receiveResizeMessage = useCallback(({ height }) => {\n setIframeHeight(height);\n if (!hasLoaded && !iframeHeight && height > 0) {\n setHasLoaded(true);\n if (onIframeLoaded) {\n onIframeLoaded();\n }\n }\n }, [setIframeHeight, hasLoaded, iframeHeight, setHasLoaded, onIframeLoaded]);\n useIFramePluginEvents({ 'plugin.resize': receiveResizeMessage });\n return [hasLoaded, iframeHeight];\n}\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n close: {\n id: 'general.altText.close',\n defaultMessage: 'Close',\n description: 'Text used as an aria-label to describe closing or dismissing a component',\n },\n registerLowercase: {\n id: 'learning.logistration.register', // ID left for historical purposes\n defaultMessage: 'register',\n description: 'Text in a link, prompting the user to create an account. Used in \"learning.logistration.alert\"',\n },\n signInLowercase: {\n id: 'learning.logistration.login', // ID left for historical purposes\n defaultMessage: 'sign in',\n description: 'Text in a link, prompting the user to log in. Used in \"learning.logistration.alert\"',\n },\n signInSentenceCase: {\n id: 'general.signIn.sentenceCase',\n defaultMessage: 'Sign in',\n description: 'Text in a button, prompting the user to log in.',\n },\n});\n\nexport default messages;\n","/* eslint-disable no-param-reassign */\nimport { createSlice } from '@reduxjs/toolkit';\n\nfunction add(state, modelType, model, idField) {\n idField = idField ?? 'id';\n const id = model[idField];\n if (state[modelType] === undefined) {\n state[modelType] = {};\n }\n state[modelType][id] = model;\n}\n\nfunction update(state, modelType, model, idField) {\n idField = idField ?? 'id';\n const id = model[idField];\n if (state[modelType] === undefined) {\n state[modelType] = {};\n }\n state[modelType][id] = { ...state[modelType][id], ...model };\n}\n\nfunction remove(state, modelType, id) {\n if (state[modelType] === undefined) {\n state[modelType] = {};\n }\n\n delete state[modelType][id];\n}\n\nconst slice = createSlice({\n name: 'models',\n initialState: {},\n reducers: {\n addModel: (state, { payload }) => {\n const { modelType, model, idField } = payload;\n add(state, modelType, model, idField);\n },\n addModels: (state, { payload }) => {\n const { modelType, models, idField } = payload;\n models.forEach(model => add(state, modelType, model, idField));\n },\n addModelsMap: (state, { payload }) => {\n const { modelType, modelsMap, idField } = payload;\n Object.values(modelsMap).forEach(model => add(state, modelType, model, idField));\n },\n updateModel: (state, { payload }) => {\n const { modelType, model, idField } = payload;\n update(state, modelType, model, idField);\n },\n updateModels: (state, { payload }) => {\n const { modelType, models, idField } = payload;\n models.forEach(model => update(state, modelType, model, idField));\n },\n updateModelsMap: (state, { payload }) => {\n const { modelType, modelsMap, idField } = payload;\n Object.values(modelsMap).forEach(model => update(state, modelType, model, idField));\n },\n removeModel: (state, { payload }) => {\n const { modelType, id } = payload;\n remove(state, modelType, id);\n },\n removeModels: (state, { payload }) => {\n const { modelType, ids } = payload;\n ids.forEach(id => remove(state, modelType, id));\n },\n },\n});\n\nexport const {\n addModel,\n addModels,\n addModelsMap,\n updateModel,\n updateModels,\n updateModelsMap,\n removeModel,\n removeModels,\n} = slice.actions;\n\nexport const { reducer } = slice;\n","import { useSelector, shallowEqual } from 'react-redux';\n\n/*\n Return the selected model with the given id, or an empty object if the model does not exist \"{}\".\n */\nexport function useModel(type, id) {\n return useSelector(\n state => ((state.models[type] !== undefined && state.models[type][id] !== undefined) ? state.models[type][id] : {}),\n shallowEqual,\n );\n}\n\nexport function useModels(type, ids) {\n return useSelector(\n state => ids.map(\n id => ((state.models[type] !== undefined && state.models[type][id] !== undefined) ? state.models[type][id] : {}),\n ),\n shallowEqual,\n );\n}\n","import React, { useEffect, useState } from 'react';\nimport { getConfig } from '@edx/frontend-platform';\nimport PropTypes from 'prop-types';\nimport { getNotices } from './api';\n/**\n * This component uses the platform-plugin-notices plugin to function.\n * If the user has an unacknowledged notice, they will be rerouted off\n * course home and onto a full-screen notice page. If the plugin is not\n * installed, or there are no notices, we just passthrough this component.\n */\nconst NoticesProvider = ({ children }) => {\n const [isRedirected, setIsRedirected] = useState();\n\n useEffect(() => {\n async function getData() {\n if (getConfig().ENABLE_NOTICES) {\n const data = await getNotices();\n if (data && data.results && data.results.length > 0) {\n const { results } = data;\n setIsRedirected(true);\n window.location.replace(`${results[0]}?next=${window.location.href}`);\n }\n }\n }\n getData();\n }, []);\n\n return (\n
\n {isRedirected === true ? null : children}\n
\n );\n};\n\nNoticesProvider.propTypes = {\n children: PropTypes.node.isRequired,\n};\n\nexport default NoticesProvider;\n","/* eslint-disable import/prefer-default-export */\nimport { getConfig } from '@edx/frontend-platform';\nimport { getAuthenticatedHttpClient, getAuthenticatedUser } from '@edx/frontend-platform/auth';\nimport { logError, logInfo } from '@edx/frontend-platform/logging';\n\nexport const getNotices = async () => {\n const authenticatedUser = getAuthenticatedUser();\n const url = new URL(`${getConfig().LMS_BASE_URL}/notices/api/v1/unacknowledged`);\n if (authenticatedUser) {\n try {\n const { data } = await getAuthenticatedHttpClient().get(url.href, {});\n return data;\n } catch (e) {\n // we will just swallow error, as that probably means the notices app is not installed.\n // Notices are not necessary for the rest of courseware to function.\n const { customAttributes: { httpErrorStatus } } = e;\n if (httpErrorStatus === 404) {\n logInfo(`${e}. This probably happened because the notices plugin is not installed on platform.`);\n } else {\n logError(e);\n }\n }\n }\n return null;\n};\n","import { Navigate, useLocation } from 'react-router-dom';\nimport PropTypes from 'prop-types';\n\nimport { sendTrackEvent } from '@edx/frontend-platform/analytics';\n\n/**\n * We have seen evidence of learners hitting MFE pages with spaces instead of plus signs (which are used commonly\n * in our course keys). It's possible something out there is un-escaping our paths before sending learners to them.\n *\n * So this provider fixes those paths up and logs it so that we can try to fix the source.\n *\n * This might be temporary, based on how much we can fix the sources of these urls-with-spaces.\n */\nconst PathFixesProvider = ({ children }) => {\n const location = useLocation();\n\n // We only check for spaces. That's not the only kind of character that is escaped in URLs, but it would always be\n // present for our cases, and I believe it's the only one we use normally.\n if (location.pathname.includes(' ') || location.pathname.includes('%20')) {\n const newLocation = {\n ...location,\n pathname: (location.pathname.replaceAll(' ', '+')).replaceAll('%20', '+'),\n };\n\n sendTrackEvent('edx.ui.lms.path_fixed', {\n new_path: newLocation.pathname,\n old_path: location.pathname,\n referrer: document.referrer,\n search: location.search,\n });\n\n return ();\n }\n\n return children; // pass through\n};\n\nPathFixesProvider.propTypes = {\n children: PropTypes.node.isRequired,\n};\n\nexport default PathFixesProvider;\n","/* eslint-disable no-param-reassign */\nimport { createSlice } from '@reduxjs/toolkit';\n\nconst slice = createSlice({\n name: 'plugin',\n initialState: {\n },\n reducers: {\n registerOverrideMethod: (state, { payload }) => {\n const { pluginName, methodName, method } = payload;\n state[pluginName] = state[pluginName] || {};\n state[pluginName][methodName] = method;\n },\n },\n});\n\nexport const {\n registerOverrideMethod,\n} = slice.actions;\n\nexport const { reducer } = slice;\n","import { useSelector, shallowEqual } from 'react-redux';\n\n// eslint-disable-next-line import/prefer-default-export\nexport function usePluginsCallback(methodName, defaultMethod) {\n return useSelector(\n state => (() => {\n let result = defaultMethod();\n Object.values(state.plugins).forEach((plugin) => {\n if (plugin[methodName]) {\n result = plugin[methodName](result);\n }\n });\n return result;\n }),\n shallowEqual,\n );\n}\n","import { useLayoutEffect, useRef, useState } from 'react';\nimport { useWindowSize } from '@openedx/paragon';\n\nconst invisibleStyle = {\n position: 'absolute',\n left: 0,\n pointerEvents: 'none',\n visibility: 'hidden',\n maxWidth: '100%',\n};\n\n/**\n * This hook will find the index of the last child of a containing element\n * that fits within its bounding rectangle. This is done by summing the widths\n * of the children until they exceed the width of the container.\n *\n * The hook returns an array containing:\n * [indexOfLastVisibleChild, containerElementRef, invisibleStyle, overflowElementRef]\n *\n * indexOfLastVisibleChild - the index of the last visible child\n * containerElementRef - a ref to be added to the containing html node\n * invisibleStyle - a set of styles to be applied to child of the containing node\n * if it needs to be hidden. These styles remove the element visually, from\n * screen readers, and from normal layout flow. But, importantly, these styles\n * preserve the width of the element, so that future width calculations will\n * still be accurate.\n * overflowElementRef - a ref to be added to an html node inside the container\n * that is likely to be used to contain a \"More\" type dropdown or other\n * mechanism to reveal hidden children. The width of this element is always\n * included when determining which children will fit or not. Usage of this ref\n * is optional.\n */\nexport default function useIndexOfLastVisibleChild(isSidebarOpen) {\n const containerElementRef = useRef(null);\n const overflowElementRef = useRef(null);\n const containingRectRef = useRef({});\n const [indexOfLastVisibleChild, setIndexOfLastVisibleChild] = useState(-1);\n const windowSize = useWindowSize();\n\n useLayoutEffect(() => {\n const containingRect = containerElementRef.current.getBoundingClientRect();\n\n // No-op if the width is unchanged.\n // (Assumes tabs themselves don't change count or width).\n if (!containingRect.width === containingRectRef.current.width) {\n return;\n }\n // Update for future comparison\n containingRectRef.current = containingRect;\n\n // Get array of child nodes from NodeList form\n const childNodesArr = Array.prototype.slice.call(containerElementRef.current.children);\n const { nextIndexOfLastVisibleChild } = childNodesArr\n // filter out the overflow element\n .filter(childNode => childNode !== overflowElementRef.current)\n // sum the widths to find the last visible element's index\n .reduce((acc, childNode, index) => {\n // use floor to prevent rounding errors\n acc.sumWidth += Math.floor(childNode.getBoundingClientRect().width);\n if (acc.sumWidth <= containingRect.width) {\n acc.nextIndexOfLastVisibleChild = index;\n }\n return acc;\n }, {\n // Include the overflow element's width to begin with. Doing this means\n // sometimes we'll show a dropdown with one item in it when it would fit,\n // but allowing this case dramatically simplifies the calculations we need\n // to do above.\n sumWidth: overflowElementRef.current ? overflowElementRef.current.getBoundingClientRect().width : 0,\n nextIndexOfLastVisibleChild: -1,\n });\n\n setIndexOfLastVisibleChild(nextIndexOfLastVisibleChild);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [windowSize, containerElementRef.current, isSidebarOpen]);\n\n return [indexOfLastVisibleChild, containerElementRef, invisibleStyle, overflowElementRef];\n}\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n srPrices: {\n id: 'learning.offer.screenReaderPrices', // historic id\n defaultMessage: 'Original price: {originalPrice}, discount price: {discountedPrice}',\n },\n srInlinePrices: {\n id: 'learning.upgradeButton.screenReaderInlinePrices',\n defaultMessage: 'Original price: {originalPrice}',\n },\n});\n\nexport default messages;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\n\nimport messages from './messages';\n\nconst FormattedPricing = (props) => {\n const {\n inline,\n intl,\n offer,\n verifiedMode,\n } = props;\n\n let currencySymbol;\n if (verifiedMode) {\n currencySymbol = verifiedMode.currencySymbol;\n }\n\n if (!offer) {\n const {\n price,\n } = verifiedMode;\n return `${currencySymbol}${price}`;\n }\n\n const {\n discountedPrice,\n originalPrice,\n } = offer;\n\n // The inline style is meant for being embedded in a sentence - it bolds the discount and leaves the original price\n // as a parenthetical. The normal styling is more suited for a button, where the price and discount are side by side.\n if (inline) {\n return (\n <>\n {discountedPrice}\n  (\n \n {intl.formatMessage(messages.srInlinePrices, { originalPrice })}\n \n \n {originalPrice}\n \n )\n \n );\n }\n\n return (\n <>\n \n {intl.formatMessage(messages.srPrices, { discountedPrice, originalPrice })}\n \n \n {discountedPrice} ({originalPrice})\n \n \n );\n};\n\nFormattedPricing.defaultProps = {\n inline: false,\n offer: null,\n verifiedMode: null,\n};\n\nFormattedPricing.propTypes = {\n inline: PropTypes.bool,\n intl: intlShape.isRequired,\n offer: PropTypes.shape({\n discountedPrice: PropTypes.string.isRequired,\n originalPrice: PropTypes.string.isRequired,\n upgradeUrl: PropTypes.string.isRequired,\n }),\n verifiedMode: PropTypes.shape({\n currencySymbol: PropTypes.string.isRequired,\n price: PropTypes.number.isRequired,\n upgradeUrl: PropTypes.string.isRequired,\n }),\n};\n\nexport default injectIntl(FormattedPricing);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { FormattedMessage, injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Button } from '@openedx/paragon';\n\nimport FormattedPricing from './FormattedPricing';\n\nconst UpgradeButton = (props) => {\n const {\n intl,\n offer,\n variant,\n onClick,\n verifiedMode,\n ...rest\n } = props;\n\n // Prefer offer's url in case it is ever different (though it is not at time of this writing)\n const url = offer ? offer.upgradeUrl : verifiedMode.upgradeUrl;\n\n return (\n \n
\n \n ),\n }}\n />\n
\n \n );\n};\n\nUpgradeButton.defaultProps = {\n offer: null,\n onClick: null,\n variant: 'primary',\n};\n\nUpgradeButton.propTypes = {\n intl: intlShape.isRequired,\n offer: PropTypes.shape({\n upgradeUrl: PropTypes.string.isRequired,\n }),\n onClick: PropTypes.func,\n verifiedMode: PropTypes.shape({\n upgradeUrl: PropTypes.string.isRequired,\n }).isRequired,\n variant: PropTypes.string,\n};\n\nexport default injectIntl(UpgradeButton);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { FormattedMessage, injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Button } from '@openedx/paragon';\n\nimport FormattedPricing from './FormattedPricing';\n\nconst UpgradeNowButton = (props) => {\n const {\n intl,\n offer,\n variant,\n onClick,\n verifiedMode,\n ...rest\n } = props;\n\n // Prefer offer's url in case it is different (might hold a coupon code that the normal does not)\n const url = offer ? offer.upgradeUrl : verifiedMode.upgradeUrl;\n\n return (\n \n \n ),\n }}\n />\n \n );\n};\n\nUpgradeNowButton.defaultProps = {\n offer: null,\n onClick: null,\n variant: 'primary',\n};\n\nUpgradeNowButton.propTypes = {\n intl: intlShape.isRequired,\n offer: PropTypes.shape({\n upgradeUrl: PropTypes.string.isRequired,\n }),\n onClick: PropTypes.func,\n verifiedMode: PropTypes.shape({\n upgradeUrl: PropTypes.string.isRequired,\n }).isRequired,\n variant: PropTypes.string,\n};\n\nexport default injectIntl(UpgradeNowButton);\n","import React from 'react';\n\nconst UserMessagesContext = React.createContext({});\n\nexport default UserMessagesContext;\n","import React, { useContext, useCallback, Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nimport UserMessagesContext from './UserMessagesContext';\nimport Alert from './Alert';\n\nconst AlertList = ({\n topic, className, customAlerts, customProps,\n}) => {\n const { remove, messages } = useContext(UserMessagesContext);\n const getAlertComponent = useCallback(\n (code) => (customAlerts[code] !== undefined ? customAlerts[code] : Alert),\n [customAlerts],\n );\n\n const topicMessages = messages.filter(message => !topic || message.topic === topic);\n if (topicMessages.length === 0) {\n return null;\n }\n\n return (\n
\n {topicMessages.map(message => {\n const AlertComponent = getAlertComponent(message.code);\n return (\n \n remove(message.id)}\n payload={message.payload}\n {...customProps}\n >\n {message.text}\n \n \n );\n })}\n
\n );\n};\n\nAlertList.propTypes = {\n className: PropTypes.string,\n topic: PropTypes.string,\n customAlerts: PropTypes.objectOf(\n PropTypes.oneOfType([\n PropTypes.object,\n PropTypes.func,\n PropTypes.node,\n ]),\n ),\n // eslint-disable-next-line react/forbid-prop-types\n customProps: PropTypes.object,\n};\n\nAlertList.defaultProps = {\n topic: null,\n className: null,\n customAlerts: {},\n customProps: {},\n};\n\nexport default AlertList;\n","/* eslint-disable import/prefer-default-export */\nimport { useContext, useEffect } from 'react';\nimport UserMessagesContext from './UserMessagesContext';\n\nexport function useAlert(isVisible, {\n code, text, topic, type, payload, dismissible,\n}) {\n const { add, remove } = useContext(UserMessagesContext);\n\n // Please note:\n // The deps list [isVisible, code, ... etc.] in this `useEffect` call prevents the\n // effect from running if none of deps have changed. However, \"changed\" for objects is\n // defined in terms of identity; thus, if you provide a payload that is *seemingly* equal\n // to the previous one but *actually* a different object, then this effect will run.\n // If you are particularly unlucky, this will cause an infinite re-render loop.\n // This manifested itself in TNL-7400.\n // We hope to address the underlying issue in TNL-7418.\n // In the mean time, you may follow the pattern that `useAccessExpirationAlert`\n // establishes: memoize the payload so that the exact same object is used if the\n // payload has not changed. And don't put values based off of now() in your payload, as\n // that breaks memoization.\n useEffect(() => {\n if (!isVisible) {\n return undefined;\n }\n\n const cleanupId = add({\n code, text, topic, type, payload, dismissible,\n });\n\n return () => {\n remove(cleanupId);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isVisible, code, text, topic, type, payload, dismissible]);\n}\n","import { getConfig, camelCaseObject } from '@edx/frontend-platform';\nimport { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth';\n\nexport async function getMasqueradeOptions(courseId) {\n const url = new URL(`${getConfig().LMS_BASE_URL}/courses/${courseId}/masquerade`);\n const { data } = await getAuthenticatedHttpClient().get(url.href, {});\n return camelCaseObject(data);\n}\n\nexport async function postMasqueradeOptions(courseId, payload) {\n const url = new URL(`${getConfig().LMS_BASE_URL}/courses/${courseId}/masquerade`);\n const { data } = await getAuthenticatedHttpClient().post(url.href, payload);\n return camelCaseObject(data);\n}\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n genericError: {\n id: 'masquerade-widget.userName.error.generic',\n defaultMessage: 'An error has occurred; please try again.',\n description: 'Message shown after a general error when attempting to masquerade',\n },\n placeholder: {\n id: 'masquerade-widget.userName.input.placeholder',\n defaultMessage: 'Username or email',\n description: 'Placeholder text to prompt for a user to masquerade as',\n },\n userNameLabel: {\n id: 'masquerade-widget.userName.input.label',\n defaultMessage: 'Masquerade as this user',\n description: 'Label for the masquerade user input',\n },\n});\n\nexport default messages;\n","import { camelCaseObject, getConfig } from '@edx/frontend-platform';\nimport { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth';\n\nexport async function getTourData(username) {\n const url = `${getConfig().LMS_BASE_URL}/api/user_tours/v1/${username}`;\n try {\n const { data } = await getAuthenticatedHttpClient().get(url);\n return { toursEnabled: true, ...camelCaseObject(data) };\n } catch (error) {\n const { httpErrorStatus } = error && error.customAttributes;\n /** The API will return a\n * 401 if the user is not authenticated\n * 403 if the tour waffle flag is inactive\n * 404 if no User Tour objects exist for the given username\n */\n if (httpErrorStatus === 401 || httpErrorStatus === 403 || httpErrorStatus === 404) {\n return { toursEnabled: false };\n }\n throw error;\n }\n}\n\nexport async function patchTourData(username, tourData) {\n const url = `${getConfig().LMS_BASE_URL}/api/user_tours/v1/${username}`;\n return getAuthenticatedHttpClient().patch(url, tourData);\n}\n","import { logError } from '@edx/frontend-platform/logging';\n\nimport { getTourData, patchTourData } from './api';\nimport {\n disableCourseHomeTour,\n disableCoursewareTour,\n disableNewUserCourseHomeModal,\n setTourData,\n} from './slice';\n\nexport function closeNewUserCourseHomeModal() {\n return async (dispatch) => dispatch(disableNewUserCourseHomeModal());\n}\n\nexport function endCourseHomeTour(username) {\n return async (dispatch) => {\n try {\n await patchTourData(username, {\n course_home_tour_status: 'no-tour',\n });\n dispatch(disableCourseHomeTour());\n } catch (error) {\n logError(error);\n }\n };\n}\n\nexport function endCoursewareTour(username) {\n return async (dispatch) => {\n try {\n await patchTourData(username, {\n show_courseware_tour: false,\n });\n dispatch(disableCoursewareTour());\n } catch (error) {\n logError(error);\n }\n };\n}\n\nexport function fetchTourData(username) {\n return async (dispatch) => {\n try {\n const data = await getTourData(username);\n dispatch(setTourData(data));\n } catch (error) {\n logError(error);\n }\n };\n}\n","/* eslint-disable no-param-reassign */\nimport { createSlice } from '@reduxjs/toolkit';\n\nconst slice = createSlice({\n name: 'tours',\n initialState: {\n showCoursewareTour: false,\n showExistingUserCourseHomeTour: false,\n showNewUserCourseHomeModal: false,\n showNewUserCourseHomeTour: false,\n toursEnabled: false,\n },\n reducers: {\n disableCourseHomeTour: (state) => {\n state.showNewUserCourseHomeModal = false;\n state.showNewUserCourseHomeTour = false;\n state.showExistingUserCourseHomeTour = false;\n },\n disableCoursewareTour: (state) => {\n state.showCoursewareTour = false;\n },\n disableNewUserCourseHomeModal: (state) => {\n state.showNewUserCourseHomeModal = false;\n },\n launchCourseHomeTour: (state) => {\n if (state.showExistingUserCourseHomeTour) {\n state.showExistingUserCourseHomeTour = false;\n }\n\n if (!state.showNewUserCourseHomeModal || !state.showNewUserCourseHomeTour) {\n state.showNewUserCourseHomeTour = true;\n }\n },\n setTourData: (state, { payload }) => {\n const {\n courseHomeTourStatus,\n showCoursewareTour,\n toursEnabled,\n } = payload;\n state.showCoursewareTour = showCoursewareTour;\n state.showExistingUserCourseHomeTour = courseHomeTourStatus === 'show-existing-user-tour';\n state.showNewUserCourseHomeModal = courseHomeTourStatus === 'show-new-user-tour';\n state.toursEnabled = toursEnabled;\n },\n },\n});\n\nexport const {\n disableCourseHomeTour,\n disableCoursewareTour,\n disableNewUserCourseHomeModal,\n launchCourseHomeTour,\n setTourData,\n} = slice.actions;\n\nexport const {\n reducer,\n} = slice;\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n beginTour: {\n id: 'tours.button.beginTour',\n defaultMessage: 'Begin tour',\n description: 'A button used to start a tour of the website',\n },\n launchTour: {\n id: 'tours.button.launchTour',\n defaultMessage: 'Launch tour',\n description: 'A button used to launch a tour of the website',\n },\n newUserModalBody: {\n id: 'tours.newUserModal.body',\n defaultMessage: 'Let’s take a quick tour of {siteName} so you can get the most out of your course.',\n },\n newUserModalTitleWelcome: {\n id: 'tours.newUserModal.title.welcome',\n defaultMessage: 'Welcome to your',\n description: 'The beginning of the phrase \"Welcome to your edX course!\"',\n },\n skipForNow: {\n id: 'tours.button.skipForNow',\n defaultMessage: 'Skip for now',\n description: 'A button used to dismiss the modal and skip the optional tour of the website',\n },\n});\n\nexport default messages;\n","/* eslint-disable import/prefer-default-export */\nimport { getLocale } from '@edx/frontend-platform/i18n';\n\n// This function inspects an access denied error and provides a redirect url (looks like a /redirect/... path),\n// which then renders a nice little message while the browser loads the next page.\n// This is basically a frontend version of check_course_access_with_redirect in the backend.\nexport function getAccessDeniedRedirectUrl(courseId, activeTabSlug, courseAccess, start) {\n let url = null;\n switch (courseAccess.errorCode) {\n case 'audit_expired':\n url = `/redirect/dashboard?access_response_error=${courseAccess.additionalContextUserMessage}`;\n break;\n case 'course_not_started':\n // eslint-disable-next-line no-case-declarations\n const startDate = (new Intl.DateTimeFormat(getLocale())).format(new Date(start));\n url = `/redirect/dashboard?notlive=${startDate}`;\n break;\n case 'course_not_started_enterprise_learner':\n url = '/redirect/enterprise-learner-dashboard';\n break;\n case 'survey_required':\n url = `/redirect/survey/${courseId}`;\n break;\n case 'data_sharing_access_required':\n url = `/redirect/consent?consentPath=${encodeURIComponent(courseAccess.developerMessage)}`;\n break;\n case 'incorrect_active_enterprise':\n url = `/course/${courseId}/access-denied`;\n break;\n case 'unfulfilled_milestones':\n url = '/redirect/dashboard';\n break;\n case 'authentication_required':\n case 'enrollment_required':\n default:\n if (activeTabSlug !== 'outline') {\n url = `/course/${courseId}/home`;\n }\n }\n return url;\n}\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n activities: {\n id: 'learning.effortEstimation.activities',\n defaultMessage: '{activityCount, plural, one {# activity} other {# activities}}',\n },\n minutesAbbreviated: {\n id: 'learning.effortEstimation.minutesAbbreviated',\n defaultMessage: '{minuteCount, plural, one {# min} other {# min}}',\n description: 'Number of minutes in a casual, shorthand manner: 5 min',\n },\n minutesFull: {\n id: 'learning.effortEstimation.minutesFull',\n defaultMessage: '{minuteCount, plural, one {# minute} other {# minutes}}',\n description: 'Number of minutes spelled out: 5 minutes',\n },\n});\n\nexport default messages;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { FormattedMessage, injectIntl, intlShape } from '@edx/frontend-platform/i18n';\n\nimport messages from './messages';\n\n// This component shows an effort estimate provided by the backend block data. Either time, activities, or both.\n\nconst EffortEstimate = (props) => {\n const {\n block: {\n effortActivities,\n effortTime,\n },\n className,\n intl,\n } = props;\n\n const minuteCount = Math.ceil(effortTime / 60); // effortTime is in seconds\n const minutesAbbreviated = intl.formatMessage(messages.minutesAbbreviated, { minuteCount });\n const minutesFull = intl.formatMessage(messages.minutesFull, { minuteCount });\n const minutes = (\n <>\n {minutesAbbreviated}\n {minutesFull}\n \n );\n const activities = intl.formatMessage(messages.activities, { activityCount: effortActivities });\n let content = null;\n\n if (effortTime && effortActivities) {\n content = (\n \n );\n } else if (effortTime) {\n content = minutes;\n } else if (effortActivities) {\n content = activities;\n } else {\n return null;\n }\n\n return (\n \n {content}\n \n );\n};\n\nEffortEstimate.defaultProps = {\n className: null,\n};\n\nEffortEstimate.propTypes = {\n block: PropTypes.shape({\n effortActivities: PropTypes.number,\n effortTime: PropTypes.number,\n }).isRequired,\n className: PropTypes.string,\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(EffortEstimate);\n","import EffortEstimate from './EffortEstimate';\n\nexport default EffortEstimate;\n","export default __webpack_public_path__ + \"b69837871e2ef32b6802932f909dd089.png\";","export default __webpack_public_path__ + \"1a0e59bbcf5275b2cf9957f81a555867.png\";","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n congratulations: {\n id: 'learning.streakCelebration.congratulations',\n defaultMessage: 'Congratulations!',\n description: 'Shown to learners when are using the learning app for X days in a row',\n },\n streakBody: {\n id: 'learning.streakCelebration.body',\n defaultMessage: 'Keep it up, you’re on a roll!',\n },\n streakButton: {\n id: 'learning.streakCelebration.button',\n defaultMessage: 'Keep it up',\n description: 'Text on the button which closes the celebration dialog',\n },\n streakButtonSrOnly: {\n id: 'learning.streakCelebration.buttonSrOnly',\n defaultMessage: 'Close modal and continue',\n description: 'Screenreader label for streakButton text',\n },\n streakButtonAA759: {\n id: 'learning.streakCelebration.buttonAA759',\n defaultMessage: 'Continue with course',\n },\n streakHeader: {\n id: 'learning.streakCelebration.header',\n defaultMessage: 'day streak',\n description: 'Will come after a number. For example, 3 day streak',\n },\n streakFactoidABoldedSection: {\n id: 'learning.streakCelebration.factoidABoldedSection',\n defaultMessage: 'are 20x more likely to pass their course',\n description: 'This bolded section is in the following sentence: Users who learn 3 days in a row {bolded_section} than those who don\\'t.',\n },\n streakFactoidBBoldedSection: {\n id: 'learning.streakCelebration.factoidBBoldedSection',\n defaultMessage: 'complete 5x as much course content on average',\n description: 'This bolded section is in the following sentence: Users who learn 3 days in a row {bolded_section} vs. those who don\\'t.',\n },\n streakDiscountMessage: {\n id: 'learning.streakCelebration.streakDiscountMessage',\n defaultMessage: 'You’ve unlocked a {percent}% off discount when you upgrade this course for a limited time only.',\n description: 'This message describes a discount the user becomes eligible for when they hit their three day streak',\n },\n});\n\nexport default messages;\n","/* eslint-disable react/prop-types */\nimport React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { camelCaseObject, getConfig } from '@edx/frontend-platform';\nimport { sendTrackEvent } from '@edx/frontend-platform/analytics';\nimport { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth';\nimport {\n FormattedMessage, injectIntl, intlShape,\n} from '@edx/frontend-platform/i18n';\nimport { Lightbulb, MoneyFilled } from '@openedx/paragon/icons';\nimport {\n Alert, breakpoints, Icon, ModalDialog, Spinner, useWindowSize,\n} from '@openedx/paragon';\nimport { useDispatch } from 'react-redux';\nimport { UpgradeNowButton } from '../../generic/upgrade-button';\n\nimport { useModel } from '../../generic/model-store';\nimport StreakMobileImage from './assets/Streak_mobile.png';\nimport StreakDesktopImage from './assets/Streak_desktop.png';\nimport messages from './messages';\nimport { recordModalClosing, recordStreakCelebration } from './utils';\n\nfunction getRandomFactoid(intl, streakLength) {\n const boldedSectionA = intl.formatMessage(messages.streakFactoidABoldedSection);\n const boldedSectionB = intl.formatMessage(messages.streakFactoidBBoldedSection);\n const factoids = [\n ({boldedSectionA}),\n streak_length: (streakLength),\n }}\n />),\n ({boldedSectionB}),\n streak_length: (streakLength),\n }}\n />),\n ];\n return factoids[Math.floor(Math.random() * (factoids.length))];\n}\n\nasync function calculateVoucherDiscount(voucher, sku, username) {\n const urlBase = `${getConfig().ECOMMERCE_BASE_URL}/api/v2/baskets/calculate`;\n const url = `${urlBase}/?code=${voucher}&sku=${sku}&username=${username}`;\n return getAuthenticatedHttpClient().get(url)\n .then(res => camelCaseObject(res));\n}\n\nconst CloseText = ({ intl }) => (\n \n {intl.formatMessage(messages.streakButton)}\n . {intl.formatMessage(messages.streakButtonSrOnly)}\n \n);\n\nconst StreakModal = ({\n courseId, metadataModel, streakLengthToCelebrate, intl, isStreakCelebrationOpen,\n closeStreakCelebration, streakDiscountCouponEnabled, verifiedMode, ...rest\n}) => {\n const { org, celebrations, username } = useModel('courseHomeMeta', courseId);\n const factoid = getRandomFactoid(intl, streakLengthToCelebrate);\n // eslint-disable-next-line no-unused-vars\n const [randomFactoid, setRandomFactoid] = useState(factoid); // Don't change factoid on re-render\n\n // Open edX Folks: if you create a voucher with this code, the MFE will notice and show the discount\n const discountCode = 'ZGY11119949';\n // Negative means \"we don't know yet\" vs zero meaning no discount available\n const [discountPercent, setDiscountPercent] = useState(-1);\n const queryingDiscount = discountPercent < 0;\n\n const wideScreen = useWindowSize().width >= breakpoints.small.minWidth;\n const dispatch = useDispatch();\n\n useEffect(() => {\n if (isStreakCelebrationOpen) {\n recordStreakCelebration(org, courseId);\n }\n }, [isStreakCelebrationOpen, org, courseId]);\n\n // Ask ecommerce to calculate discount savings\n useEffect(() => {\n if (streakDiscountCouponEnabled && verifiedMode && getConfig().ECOMMERCE_BASE_URL) {\n calculateVoucherDiscount(discountCode, verifiedMode.sku, username)\n .then(\n (result) => {\n const { totalInclTax, totalInclTaxExclDiscounts } = result.data;\n if (totalInclTaxExclDiscounts && totalInclTax !== totalInclTaxExclDiscounts) {\n // Just store the percent (rather than using these values directly), because ecommerce doesn't give us\n // the currency symbol to use, so we want to use the symbol that LMS gives us. And I don't want to assume\n // ecommerce's currency is the same as the LMS. So we'll keep using the values in verifiedMode, just\n // multiplied by the calculated percentage.\n setDiscountPercent(1 - totalInclTax / totalInclTaxExclDiscounts);\n sendTrackEvent('edx.bi.course.streak_discount_enabled', {\n course_id: courseId,\n sku: verifiedMode.sku,\n });\n } else {\n setDiscountPercent(0);\n }\n },\n () => {\n // ignore any errors - we just won't show the discount to the user then\n setDiscountPercent(0);\n },\n );\n } else {\n setDiscountPercent(0);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [streakDiscountCouponEnabled, username, verifiedMode]);\n\n if (!isStreakCelebrationOpen) {\n return null;\n }\n\n let upgradeUrl;\n let mode;\n let offer;\n\n if (verifiedMode) {\n upgradeUrl = `${verifiedMode.upgradeUrl}`;\n mode = {\n currencySymbol: verifiedMode.currencySymbol,\n price: verifiedMode.price,\n upgradeUrl,\n };\n\n if (discountPercent > 0) {\n const discountMultipler = 1 - discountPercent;\n offer = {\n discountedPrice: `${verifiedMode.currencySymbol}${(mode.price * discountMultipler).toFixed(2).toString()}`,\n originalPrice: `${verifiedMode.currencySymbol}${mode.price.toString()}`,\n upgradeUrl: `${mode.upgradeUrl}&code=${discountCode}`,\n };\n }\n }\n\n const title = `${streakLengthToCelebrate} ${intl.formatMessage(messages.streakHeader)}`;\n const showOffer = offer && streakDiscountCouponEnabled;\n\n return (\n {\n closeStreakCelebration();\n recordModalClosing(celebrations, org, courseId, dispatch);\n }}\n isOpen={isStreakCelebrationOpen}\n isFullscreenScroll\n {...rest}\n >\n \n \n {title}\n \n \n \n

{intl.formatMessage(messages.streakBody)}

\n

\n {!wideScreen && \"\"}\n {wideScreen && \"\"}\n

\n { queryingDiscount && (\n \n )}\n { !queryingDiscount && !showOffer && (\n
\n \n
\n {randomFactoid}\n
\n
\n )}\n { !queryingDiscount && showOffer && (\n \n
\n \n
\n {intl.formatMessage(messages.congratulations)}\n  {intl.formatMessage(messages.streakDiscountMessage, {\n percent: (discountPercent * 100).toFixed(0),\n })} \n \n
\n
\n
\n )}\n
\n \n { !queryingDiscount && showOffer && (\n <>\n {!wideScreen && (\n <>\n \n \n {intl.formatMessage(messages.streakButtonAA759)}\n \n \n )}\n {wideScreen && (\n <>\n \n \n {intl.formatMessage(messages.streakButtonAA759)}\n \n \n )}\n \n )}\n { !queryingDiscount && !showOffer && (\n \n )}\n \n \n );\n};\n\nStreakModal.defaultProps = {\n isStreakCelebrationOpen: false,\n streakDiscountCouponEnabled: false,\n streakLengthToCelebrate: -1,\n verifiedMode: {},\n};\n\nStreakModal.propTypes = {\n courseId: PropTypes.string.isRequired,\n metadataModel: PropTypes.string.isRequired,\n streakLengthToCelebrate: PropTypes.number,\n intl: intlShape.isRequired,\n isStreakCelebrationOpen: PropTypes.bool,\n closeStreakCelebration: PropTypes.func.isRequired,\n streakDiscountCouponEnabled: PropTypes.bool,\n verifiedMode: PropTypes.shape({\n currencySymbol: PropTypes.string,\n price: PropTypes.number,\n sku: PropTypes.string,\n upgradeUrl: PropTypes.string,\n }),\n};\n\nexport default injectIntl(StreakModal);\n","import { sendTrackEvent } from '@edx/frontend-platform/analytics';\nimport { getAuthenticatedUser } from '@edx/frontend-platform/auth';\n\nimport { updateModel } from '../../generic/model-store';\n\nfunction recordStreakCelebration(org, courseId) {\n // Tell our analytics\n const { administrator } = getAuthenticatedUser();\n sendTrackEvent('edx.ui.lms.celebration.streak.opened', {\n org_key: org,\n courserun_key: courseId,\n is_staff: administrator,\n });\n}\n\nfunction recordModalClosing(celebrations, org, courseId, dispatch) {\n // Ensure we only celebrate each streak once\n dispatch(updateModel({\n modelType: 'courseHomeMeta',\n model: {\n id: courseId,\n celebrations: { ...celebrations, streakLengthToCelebrate: null },\n },\n }));\n}\n\nexport { recordStreakCelebration, recordModalClosing };\n","import { reducer as learningAssistantReducer } from '@edx/frontend-lib-learning-assistant';\nimport { reducer as specialExamsReducer } from '@edx/frontend-lib-special-exams';\nimport { configureStore } from '@reduxjs/toolkit';\nimport { reducer as courseHomeReducer } from './course-home/data';\nimport { reducer as coursewareReducer } from './courseware/data/slice';\nimport { reducer as recommendationsReducer } from './courseware/course/course-exit/data/slice';\nimport { reducer as toursReducer } from './product-tours/data';\nimport { reducer as modelsReducer } from './generic/model-store';\nimport { reducer as pluginsReducer } from './generic/plugin-store';\n\nexport default function initializeStore() {\n return configureStore({\n reducer: {\n models: modelsReducer,\n courseware: coursewareReducer,\n courseHome: courseHomeReducer,\n learningAssistant: learningAssistantReducer,\n specialExams: specialExamsReducer,\n recommendations: recommendationsReducer,\n tours: toursReducer,\n plugins: pluginsReducer,\n },\n // temporarily solutions to disable serializable check for plugin actions\n middleware: (getDefaultMiddleware) => getDefaultMiddleware({\n serializableCheck: {\n ignoredActions: ['plugin/registerOverrideMethod'],\n ignoredPaths: ['plugins'],\n },\n }),\n });\n}\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n failure: {\n id: 'learning.loading.failure',\n defaultMessage: 'There was an error loading this course.',\n description: 'Can be because internet connection or any technical other reason',\n },\n loading: {\n id: 'learning.loading',\n defaultMessage: 'Loading course page…',\n description: 'When content of the course is still loading...etc',\n },\n});\n\nexport default messages;\n","// Helper, that is used to forcibly finalize all promises\n// in thunk before running matcher against state.\nexport const executeThunk = async (thunk, dispatch, getState) => {\n await thunk(dispatch, getState);\n await new Promise(setImmediate);\n};\n\n// Utility function for appending the browser timezone to the url\n// Can be used on the backend when the user timezone is not set in the user account\nexport const appendBrowserTimezoneToUrl = (url) => {\n const browserTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n const urlObject = new URL(url);\n if (browserTimezone) {\n urlObject.searchParams.append('browser_timezone', browserTimezone);\n }\n return urlObject.href;\n};\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n accountActivationAlertTitle: {\n id: 'account-activation.alert.title',\n defaultMessage: 'Activate your account so you can log back in',\n description: 'Title for account activation alert which is shown after the registration',\n },\n});\n\nexport default messages;\n","import React, { useState } from 'react';\nimport Cookies from 'js-cookie';\nimport { getConfig } from '@edx/frontend-platform';\nimport { getAuthenticatedUser } from '@edx/frontend-platform/auth';\nimport {\n AlertModal,\n Button,\n Spinner,\n Icon,\n} from '@openedx/paragon';\nimport { Check, ArrowForward } from '@openedx/paragon/icons';\nimport { FormattedMessage, injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { sendActivationEmail } from '../../courseware/data';\nimport messages from './messages';\n\nconst AccountActivationAlert = ({\n intl,\n}) => {\n const [showModal, setShowModal] = useState(false);\n const [showSpinner, setShowSpinner] = useState(false);\n const [showCheck, setShowCheck] = useState(false);\n const handleOnClick = () => {\n setShowSpinner(true);\n setShowCheck(false);\n sendActivationEmail().then(() => {\n setShowSpinner(false);\n setShowCheck(true);\n });\n };\n\n const showAccountActivationAlert = Cookies.get('show-account-activation-popup');\n if (showAccountActivationAlert !== undefined) {\n Cookies.remove('show-account-activation-popup', { path: '/', domain: process.env.SESSION_COOKIE_DOMAIN });\n // extra check to make sure cookie was removed before updating the state. Updating the state without removal\n // of cookie would make it infinite rendering\n if (Cookies.get('show-account-activation-popup') === undefined) {\n setShowModal(true);\n }\n }\n\n const button = (\n setShowModal(false)}\n >\n \n \n \n );\n\n const children = () => {\n let bodyContent;\n const message = (\n {getAuthenticatedUser() && getAuthenticatedUser().email},\n sendEmailTag: (\n // eslint-disable-next-line jsx-a11y/anchor-is-valid\n \n \n \n ),\n }}\n />\n );\n bodyContent = (\n
\n {message}\n
\n );\n\n if (!showCheck && showSpinner) {\n bodyContent = (\n
\n {message}\n \n
\n );\n }\n\n if (showCheck && !showSpinner) {\n bodyContent = (\n
\n {message}\n \n
\n );\n }\n return bodyContent;\n };\n\n return (\n ({})}\n >\n {children()}\n \n );\n};\n\nAccountActivationAlert.propTypes = {\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(AccountActivationAlert);\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n completed: {\n id: 'learning.dates.badge.completed',\n defaultMessage: 'Completed',\n description: 'shown as label for the assignments which learner has completed.',\n },\n dueNext: {\n id: 'learning.dates.badge.dueNext',\n defaultMessage: 'Due next',\n description: 'Shown as label for the assignment which date is in the future',\n },\n pastDue: {\n id: 'learning.dates.badge.pastDue',\n defaultMessage: 'Past due',\n description: 'Shown as label for the assignments which deadline has passed',\n },\n title: {\n id: 'learning.dates.title',\n defaultMessage: 'Important dates',\n description: 'The title of dates tab (course timeline).',\n },\n today: {\n id: 'learning.dates.badge.today',\n defaultMessage: 'Today',\n description: 'Label used when the scheduled date for the assignment matches the current day',\n },\n unreleased: {\n id: 'learning.dates.badge.unreleased',\n defaultMessage: 'Not yet released',\n description: 'Shown as label for assignments which date is unknown yet',\n },\n verifiedOnly: {\n id: 'learning.dates.badge.verifiedOnly',\n defaultMessage: 'Verified only',\n description: 'Shown as label for assignments which learner has no access to.',\n },\n});\n\nexport default messages;\n","import React from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faLock } from '@fortawesome/free-solid-svg-icons';\nimport { Badge } from '@openedx/paragon';\n\nimport messages from '../messages';\nimport { daycmp, isLearnerAssignment } from '../utils';\n\nfunction hasAccess(item) {\n return item.learnerHasAccess;\n}\n\nfunction isComplete(assignment) {\n return assignment.complete;\n}\n\nfunction isPastDue(assignment) {\n return !isComplete(assignment) && (new Date(assignment.date) < new Date());\n}\n\nfunction isUnreleased(assignment) {\n return !assignment.link;\n}\n\n// Pass a null item if you want to get a whole day's badge list, not just one item's list.\n// Returns an object with 'color' and 'badges' properties.\nfunction getBadgeListAndColor(date, intl, item, items) {\n const now = new Date();\n const assignments = items.filter(isLearnerAssignment);\n const isToday = daycmp(date, now) === 0;\n const isInFuture = daycmp(date, now) > 0;\n\n // This badge info list is in order of priority (they will appear left to right in this order and the first badge\n // sets the color of the dot in the timeline).\n const badgesInfo = [\n {\n message: messages.today,\n shownForDay: isToday,\n bg: 'bg-warning-300',\n className: 'text-dark',\n },\n {\n message: messages.completed,\n shownForDay: assignments.length && assignments.every(isComplete),\n shownForItem: x => isLearnerAssignment(x) && isComplete(x),\n bg: 'bg-light-500',\n className: 'text-dark',\n },\n {\n message: messages.pastDue,\n shownForDay: assignments.length && assignments.every(isPastDue),\n shownForItem: x => isLearnerAssignment(x) && isPastDue(x),\n bg: 'bg-dark-200',\n className: 'text-dark',\n },\n {\n message: messages.dueNext,\n shownForDay: !isToday && assignments.some(x => x.dueNext),\n shownForItem: x => x.dueNext,\n bg: 'bg-gray-500',\n className: 'text-white',\n },\n {\n message: messages.unreleased,\n shownForDay: assignments.length && assignments.every(isUnreleased),\n shownForItem: x => isLearnerAssignment(x) && isUnreleased(x),\n className: 'border border-gray-500 text-gray-500',\n },\n {\n message: messages.verifiedOnly,\n shownForDay: items.length && items.every(x => !hasAccess(x)),\n shownForItem: x => !hasAccess(x),\n icon: faLock,\n bg: 'bg-dark-700',\n className: 'text-white',\n },\n ];\n let color = null; // first color of any badge\n const badges = (\n <>\n {badgesInfo.map(b => {\n let shown = b.shownForDay;\n if (item) {\n if (b.shownForDay) {\n shown = false; // don't double up, if the day already has this badge\n } else {\n shown = b.shownForItem && b.shownForItem(item);\n }\n }\n if (!shown) {\n return null;\n }\n\n if (!color && !isInFuture) {\n color = b.bg;\n }\n return (\n \n {b.icon && }\n {intl.formatMessage(b.message)}\n \n );\n })}\n \n );\n if (!color && isInFuture) {\n color = 'bg-gray-900';\n }\n\n return {\n color,\n badges,\n };\n}\n\n// eslint-disable-next-line import/prefer-default-export\nexport { getBadgeListAndColor };\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { useSelector } from 'react-redux';\nimport {\n FormattedDate,\n FormattedTime,\n injectIntl,\n intlShape,\n} from '@edx/frontend-platform/i18n';\nimport { Tooltip, OverlayTrigger } from '@openedx/paragon';\nimport { faInfoCircle } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\n\nimport { useModel } from '../../../generic/model-store';\n\nimport { getBadgeListAndColor } from './badgelist';\nimport { isLearnerAssignment } from '../utils';\n\nconst Day = ({\n date,\n first,\n intl,\n items,\n last,\n}) => {\n const {\n courseId,\n } = useSelector(state => state.courseHome);\n const {\n userTimezone,\n } = useModel('courseHomeMeta', courseId);\n\n const timezoneFormatArgs = userTimezone ? { timeZone: userTimezone } : {};\n\n const { color, badges } = getBadgeListAndColor(date, intl, null, items);\n\n return (\n
  • \n {/* Top Line */}\n {!first &&
    }\n\n {/* Dot */}\n
    \n\n {/* Bottom Line */}\n {!last &&
    }\n\n {/* Content */}\n
    \n
    \n \n {badges}\n
    \n {items.map((item) => {\n const { badges: itemBadges } = getBadgeListAndColor(date, intl, item, items);\n\n const showDueDateTime = item.dateType === 'assignment-due-date';\n const showLink = item.link && isLearnerAssignment(item);\n const title = showLink ? ({item.title}) : item.title;\n const available = item.learnerHasAccess && (item.link || !isLearnerAssignment(item));\n const textColor = available ? 'text-primary-700' : 'text-gray-500';\n\n return (\n
    \n
    \n \n {item.assignmentType && `${item.assignmentType}: `}{title}\n {showDueDateTime && (\n \n due\n \n \n )}\n \n {itemBadges}\n {item.extraInfo && (\n {item.extraInfo}\n }\n >\n \n \n )}\n
    \n {item.description &&
    {item.description}
    }\n
    \n );\n })}\n
    \n
  • \n );\n};\n\nDay.propTypes = {\n date: PropTypes.objectOf(Date).isRequired,\n first: PropTypes.bool,\n intl: intlShape.isRequired,\n items: PropTypes.arrayOf(PropTypes.shape({\n date: PropTypes.string,\n dateType: PropTypes.string,\n description: PropTypes.string,\n dueNext: PropTypes.bool,\n learnerHasAccess: PropTypes.bool,\n link: PropTypes.string,\n title: PropTypes.string,\n })).isRequired,\n last: PropTypes.bool,\n};\n\nDay.defaultProps = {\n first: false,\n last: false,\n};\n\nexport default injectIntl(Day);\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { useModel } from '../../../generic/model-store';\n\nimport Day from './Day';\nimport { daycmp, isLearnerAssignment } from '../utils';\n\nconst Timeline = () => {\n const {\n courseId,\n } = useSelector(state => state.courseHome);\n\n const {\n courseDateBlocks,\n } = useModel('dates', courseId);\n\n // Group date items by day (assuming they are sorted in first place) and add some metadata\n const groupedDates = [];\n const now = new Date();\n let foundNextDue = false;\n let foundToday = false;\n courseDateBlocks.forEach(courseDateBlock => {\n const dateInfo = { ...courseDateBlock };\n const parsedDate = new Date(dateInfo.date);\n\n if (!foundNextDue && parsedDate >= now && isLearnerAssignment(dateInfo) && !dateInfo.complete) {\n foundNextDue = true;\n dateInfo.dueNext = true;\n }\n\n if (!foundToday) {\n const compared = daycmp(parsedDate, now);\n if (compared === 0) {\n foundToday = true;\n } else if (compared > 0) {\n foundToday = true;\n groupedDates.push({\n date: now,\n items: [],\n });\n }\n }\n\n if (groupedDates.length === 0 || daycmp(groupedDates[groupedDates.length - 1].date, parsedDate) !== 0) {\n // Add new grouped date\n groupedDates.push({\n date: parsedDate,\n items: [dateInfo],\n first: groupedDates.length === 0,\n });\n } else {\n groupedDates[groupedDates.length - 1].items.push(dateInfo);\n }\n });\n if (!foundToday) {\n groupedDates.push({ date: now, items: [] });\n }\n if (groupedDates.length) {\n groupedDates[groupedDates.length - 1].last = true;\n }\n\n return (\n
      \n {groupedDates.map((groupedDate) => (\n \n ))}\n
    \n );\n};\n\nexport default Timeline;\n","import React from 'react';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\n\nimport messages from './messages';\n\nconst SuggestedScheduleHeader = ({ intl }) => (\n

    \n {intl.formatMessage(messages.suggestedSchedule)}\n

    \n);\n\nSuggestedScheduleHeader.propTypes = {\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(SuggestedScheduleHeader);\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport {\n Alert,\n Button,\n Col,\n Row,\n} from '@openedx/paragon';\n\nimport { useModel } from '../../generic/model-store';\nimport messages from './messages';\n\nconst UpgradeToCompleteAlert = ({ intl, logUpgradeLinkClick }) => {\n const {\n courseId,\n } = useSelector(state => state.courseHome);\n\n const {\n datesBannerInfo,\n hasEnded,\n } = useModel('dates', courseId);\n\n const {\n contentTypeGatingEnabled,\n missedDeadlines,\n verifiedUpgradeLink,\n } = datesBannerInfo;\n\n if (!contentTypeGatingEnabled || missedDeadlines || hasEnded || !verifiedUpgradeLink) {\n return null;\n }\n\n return (\n \n \n \n {intl.formatMessage(messages.upgradeToCompleteHeader)}\n {intl.formatMessage(messages.upgradeToCompleteBody)}\n \n \n {\n logUpgradeLinkClick();\n global.location.replace(verifiedUpgradeLink);\n }}\n >\n {intl.formatMessage(messages.upgradeToCompleteButton)}\n \n \n \n \n );\n};\n\nUpgradeToCompleteAlert.propTypes = {\n intl: intlShape.isRequired,\n logUpgradeLinkClick: PropTypes.func,\n};\n\nUpgradeToCompleteAlert.defaultProps = {\n logUpgradeLinkClick: () => {},\n};\n\nexport default injectIntl(UpgradeToCompleteAlert);\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { sendTrackEvent } from '@edx/frontend-platform/analytics';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\n\nimport messages from './messages';\nimport Timeline from './timeline/Timeline';\n\nimport { fetchDatesTab } from '../data';\nimport { useModel } from '../../generic/model-store';\n\nimport SuggestedScheduleHeader from '../suggested-schedule-messaging/SuggestedScheduleHeader';\nimport ShiftDatesAlert from '../suggested-schedule-messaging/ShiftDatesAlert';\nimport UpgradeToCompleteAlert from '../suggested-schedule-messaging/UpgradeToCompleteAlert';\nimport UpgradeToShiftDatesAlert from '../suggested-schedule-messaging/UpgradeToShiftDatesAlert';\n\nconst DatesTab = ({ intl }) => {\n const {\n courseId,\n } = useSelector(state => state.courseHome);\n\n const {\n isSelfPaced,\n org,\n } = useModel('courseHomeMeta', courseId);\n\n const {\n courseDateBlocks,\n } = useModel('dates', courseId);\n\n const hasDeadlines = courseDateBlocks && courseDateBlocks.some(x => x.dateType === 'assignment-due-date');\n\n const logUpgradeLinkClick = () => {\n sendTrackEvent('edx.bi.ecommerce.upsell_links_clicked', {\n org_key: org,\n courserun_key: courseId,\n linkCategory: 'personalized_learner_schedules',\n linkName: 'dates_upgrade',\n linkType: 'button',\n pageName: 'dates_tab',\n });\n };\n\n return (\n <>\n
    \n {intl.formatMessage(messages.title)}\n
    \n {isSelfPaced && hasDeadlines && (\n <>\n \n \n \n \n \n )}\n \n \n );\n};\n\nDatesTab.propTypes = {\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(DatesTab);\n","import DatesTab from './DatesTab';\n\nexport default DatesTab;\n","function daycmp(a, b) {\n if (a.getFullYear() < b.getFullYear()) { return -1; }\n if (a.getFullYear() > b.getFullYear()) { return 1; }\n if (a.getMonth() < b.getMonth()) { return -1; }\n if (a.getMonth() > b.getMonth()) { return 1; }\n if (a.getDate() < b.getDate()) { return -1; }\n if (a.getDate() > b.getDate()) { return 1; }\n return 0;\n}\n\n// item is a date block returned from the API\nfunction isLearnerAssignment(item) {\n return item.learnerHasAccess && item.dateType === 'assignment-due-date';\n}\n\nexport { daycmp, isLearnerAssignment };\n","import { getConfig } from '@edx/frontend-platform';\nimport { injectIntl } from '@edx/frontend-platform/i18n';\nimport React, { useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { useParams, generatePath, useNavigate } from 'react-router-dom';\nimport { useIFrameHeight, useIFramePluginEvents } from '../../generic/hooks';\n\nconst DiscussionTab = () => {\n const { courseId } = useSelector(state => state.courseHome);\n const { path } = useParams();\n const [originalPath] = useState(path);\n const navigate = useNavigate();\n\n const [, iFrameHeight] = useIFrameHeight();\n useIFramePluginEvents({\n 'discussions.navigate': (payload) => {\n const basePath = generatePath('/course/:courseId/discussion', { courseId });\n navigate(`${basePath}/${payload.path}`);\n },\n });\n const discussionsUrl = `${getConfig().DISCUSSIONS_MFE_BASE_URL}/${courseId}/${originalPath}`;\n return (\n \n );\n};\n\nDiscussionTab.propTypes = {};\n\nexport default injectIntl(DiscussionTab);\n","var _path, _circle, _path2;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgUnsubscribe = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 167,\n height: 153,\n fill: \"none\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"currentColor\",\n d: \"M140.25 25.5H12.75v102h127.5zM127.5 46l-51 31.875L25.5 46v-7.75l51 31.875 51-31.875z\"\n})), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 134,\n cy: 39,\n r: 33,\n fill: \"#fff\",\n transform: \"rotate(-90 134 39)\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#D23228\",\n d: \"M134 11c-15.456 0-28 12.544-28 28s12.544 28 28 28 28-12.544 28-28-12.544-28-28-28m0 50.4c-12.376 0-22.4-10.024-22.4-22.4 0-5.18 1.764-9.94 4.732-13.72l31.388 31.388A22.13 22.13 0 0 1 134 61.4m17.668-8.68L120.28 21.332A22.13 22.13 0 0 1 134 16.6c12.376 0 22.4 10.024 22.4 22.4 0 5.18-1.764 9.94-4.732 13.72\"\n})));\nexport { SvgUnsubscribe as ReactComponent };\nexport default __webpack_public_path__ + \"f8d0b96aefbf2f51efd56a705ccfa2ed.svg\";","import PropTypes from 'prop-types';\nimport { getConfig } from '@edx/frontend-platform';\nimport { FormattedMessage, injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Button, Hyperlink } from '@openedx/paragon';\n\nimport messages from './messages';\nimport { ReactComponent as UnsubscribeIcon } from './unsubscribe.svg';\n\nconst ResultPage = ({ courseTitle, error, intl }) => {\n const errorDescription = (\n \n {intl.formatMessage(messages.contactSupport)}\n \n ),\n }}\n />\n );\n\n const header = error\n ? intl.formatMessage(messages.errorHeader)\n : intl.formatMessage(messages.header);\n const description = error\n ? errorDescription\n : intl.formatMessage(messages.description, { courseTitle });\n\n return (\n <>\n \n
    {header}
    \n
    \n
    {description}
    \n
    \n \n \n );\n};\n\nResultPage.defaultProps = {\n courseTitle: null,\n error: false,\n};\n\nResultPage.propTypes = {\n courseTitle: PropTypes.string,\n error: PropTypes.bool,\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(ResultPage);\n","import React, { useEffect } from 'react';\nimport { useSelector } from 'react-redux';\n\nconst LiveTab = () => {\n const { courseId } = useSelector(state => state.courseHome);\n const liveModel = useSelector(state => state.models.live);\n useEffect(() => {\n const iframe = document.getElementById('lti-tab-embed');\n if (iframe) {\n iframe.className += ' vh-100 w-100 border-0';\n }\n }, []);\n return (\n \n );\n};\n\nexport default LiveTab;\n","import PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { Link } from 'react-router-dom';\nimport {\n FormattedMessage,\n FormattedTime,\n injectIntl,\n intlShape,\n} from '@edx/frontend-platform/i18n';\nimport { faCheckCircle as fasCheckCircle } from '@fortawesome/free-solid-svg-icons';\nimport { faCheckCircle as farCheckCircle } from '@fortawesome/free-regular-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\n\nimport { Icon } from '@openedx/paragon';\nimport { Block } from '@openedx/paragon/icons';\nimport EffortEstimate from '../../shared/effort-estimate';\nimport { useModel } from '../../generic/model-store';\nimport messages from './messages';\n\nconst SequenceLink = ({\n id,\n intl,\n courseId,\n first,\n sequence,\n}) => {\n const {\n complete,\n description,\n due,\n showLink,\n title,\n hideFromTOC,\n } = sequence;\n const {\n userTimezone,\n } = useModel('outline', courseId);\n\n const timezoneFormatArgs = userTimezone ? { timeZone: userTimezone } : {};\n\n const coursewareUrl = {title};\n const displayTitle = showLink ? coursewareUrl : title;\n\n const dueDateMessage = (\n \n ),\n description: description || '',\n }}\n />\n );\n\n const noDueDateMessage = (\n \n ),\n description: description || '',\n }}\n />\n );\n\n return (\n
  • \n
    \n
    \n
    \n {complete ? (\n \n ) : (\n \n )}\n
    \n
    \n {displayTitle}\n \n , {intl.formatMessage(complete ? messages.completedAssignment : messages.incompleteAssignment)}\n \n \n
    \n
    \n {hideFromTOC && (\n
    \n \n \n \n {intl.formatMessage(messages.hiddenSequenceLink)}\n \n \n
    \n )}\n
    \n \n {due ? dueDateMessage : noDueDateMessage}\n \n
    \n
    \n
  • \n );\n};\n\nSequenceLink.propTypes = {\n id: PropTypes.string.isRequired,\n intl: intlShape.isRequired,\n courseId: PropTypes.string.isRequired,\n first: PropTypes.bool.isRequired,\n sequence: PropTypes.shape().isRequired,\n};\n\nexport default injectIntl(SequenceLink);\n","import React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Collapsible, IconButton, Icon } from '@openedx/paragon';\nimport { faCheckCircle as fasCheckCircle, faMinus, faPlus } from '@fortawesome/free-solid-svg-icons';\nimport { faCheckCircle as farCheckCircle } from '@fortawesome/free-regular-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\n\nimport { DisabledVisible } from '@openedx/paragon/icons';\nimport SequenceLink from './SequenceLink';\nimport { useModel } from '../../generic/model-store';\n\nimport genericMessages from '../../generic/messages';\nimport messages from './messages';\n\nconst Section = ({\n courseId,\n defaultOpen,\n expand,\n intl,\n section,\n}) => {\n const {\n complete,\n sequenceIds,\n title,\n hideFromTOC,\n } = section;\n const {\n courseBlocks: {\n sequences,\n },\n } = useModel('outline', courseId);\n\n const [open, setOpen] = useState(defaultOpen);\n\n useEffect(() => {\n setOpen(expand);\n }, [expand]);\n\n useEffect(() => {\n setOpen(defaultOpen);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const sectionTitle = (\n
    \n
    \n {complete ? (\n \n ) : (\n \n )}\n
    \n
    \n {title}\n \n , {intl.formatMessage(complete ? messages.completedSection : messages.incompleteSection)}\n \n
    \n {hideFromTOC && (\n
    \n {hideFromTOC && (\n \n \n \n {intl.formatMessage(messages.hiddenSection)}\n \n \n )}\n
    \n )}\n
    \n );\n\n return (\n
  • \n { setOpen(!open); }}\n iconWhenClosed={(\n { setOpen(true); }}\n size=\"sm\"\n />\n )}\n iconWhenOpen={(\n { setOpen(false); }}\n size=\"sm\"\n />\n )}\n >\n
      \n {sequenceIds.map((sequenceId, index) => (\n \n ))}\n
    \n \n
  • \n );\n};\n\nSection.propTypes = {\n courseId: PropTypes.string.isRequired,\n defaultOpen: PropTypes.bool.isRequired,\n expand: PropTypes.bool.isRequired,\n intl: intlShape.isRequired,\n section: PropTypes.shape().isRequired,\n};\n\nexport default injectIntl(Section);\n","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgFlagBlack = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n fill: \"none\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#000\",\n d: \"M14.4 6 14 4H5v17h2v-7h5.6l.4 2h7V6z\"\n})));\nexport { SvgFlagBlack as ReactComponent };\nexport default __webpack_public_path__ + \"618c66f2320092cb2a787c07147f7146.svg\";","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgFlagOutline = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 15,\n height: 17,\n fill: \"none\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#002B2B\",\n d: \"M9.4 2 9 0H0v17h2v-7h5.6l.4 2h7V2zm3.6 8H9.64l-.4-2H2V2h5.36l.4 2H13z\"\n})));\nexport { SvgFlagOutline as ReactComponent };\nexport default __webpack_public_path__ + \"5615c2010dc4523a5ca27285b35e4266.svg\";","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgFlagGray = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 15,\n height: 17,\n fill: \"none\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#002B2B\",\n d: \"M9.4 2 9 0H0v17h2v-7h5.6l.4 2h7V2zm3.6 8H9.64l-.4-2H2V2h5.36l.4 2H13z\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M9.66 9.987c-.002-.004-.095-.456-.206-1.004l-.202-.996-3.614-.008-3.615-.008V2.023l2.664.007 2.663.008.197.99.197.988h5.24v5.979h-1.66c-.914 0-1.663-.004-1.665-.008\",\n style: {\n fill: \"gray\",\n fillRule: \"evenodd\",\n strokeWidth: 0.0150977\n }\n}));\nexport { SvgFlagGray as ReactComponent };\nexport default __webpack_public_path__ + \"cb5894908f8fdcc54d5d94bed8c3b7c9.svg\";","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\n\nconst FlagButton = ({\n buttonIcon,\n title,\n text,\n handleSelect,\n isSelected,\n}) => (\n handleSelect()}\n data-testid={`weekly-learning-goal-input-${title}`}\n >\n
    \n {buttonIcon}\n
    \n
    \n {title}\n
    \n
    \n {text}\n
    \n \n);\n\nFlagButton.propTypes = {\n buttonIcon: PropTypes.element.isRequired,\n title: PropTypes.string.isRequired,\n text: PropTypes.string.isRequired,\n handleSelect: PropTypes.func.isRequired,\n isSelected: PropTypes.bool.isRequired,\n};\n\nexport default FlagButton;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\n// These flag svgs are derivatives of the Flag icon from paragon\nimport { ReactComponent as FlagIntenseIcon } from './flag_black.svg';\nimport { ReactComponent as FlagCasualIcon } from './flag_outline.svg';\nimport { ReactComponent as FlagRegularIcon } from './flag_gray.svg';\nimport FlagButton from './FlagButton';\nimport messages from '../messages';\n\nconst LearningGoalButton = ({\n level,\n isSelected,\n handleSelect,\n intl,\n}) => {\n const buttonDetails = {\n casual: {\n daysPerWeek: 1,\n title: messages.casualGoalButtonTitle,\n text: messages.casualGoalButtonText,\n icon: ,\n },\n regular: {\n daysPerWeek: 3,\n title: messages.regularGoalButtonTitle,\n text: messages.regularGoalButtonText,\n icon: ,\n },\n intense: {\n daysPerWeek: 5,\n title: messages.intenseGoalButtonTitle,\n text: messages.intenseGoalButtonText,\n icon: ,\n },\n };\n\n const values = buttonDetails[level];\n\n return (\n handleSelect(values.daysPerWeek)}\n isSelected={isSelected}\n />\n );\n};\n\nLearningGoalButton.propTypes = {\n level: PropTypes.string.isRequired,\n isSelected: PropTypes.bool.isRequired,\n handleSelect: PropTypes.func.isRequired,\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(LearningGoalButton);\n","import React, { useState, useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport camelCase from 'lodash.camelcase';\n\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Button } from '@openedx/paragon';\n\nimport messages from '../messages';\nimport { getProctoringInfoData } from '../../data/api';\nimport { fetchProctoringInfoResolved } from '../../data/slice';\nimport { useModel } from '../../../generic/model-store';\n\nconst ProctoringInfoPanel = ({ intl }) => {\n const {\n courseId,\n } = useSelector(state => state.courseHome);\n const {\n username,\n } = useModel('courseHomeMeta', courseId);\n const dispatch = useDispatch();\n\n const [link, setLink] = useState('');\n const [onboardingPastDue, setOnboardingPastDue] = useState(false);\n const [showInfoPanel, setShowInfoPanel] = useState(false);\n const [status, setStatus] = useState('');\n const [readableStatus, setReadableStatus] = useState('');\n const [releaseDate, setReleaseDate] = useState(null);\n\n const readableStatuses = {\n notStarted: 'notStarted',\n started: 'started',\n submitted: 'submitted',\n verified: 'verified',\n rejected: 'rejected',\n error: 'error',\n otherCourseApproved: 'otherCourseApproved',\n expiringSoon: 'expiringSoon',\n expired: 'expired',\n };\n\n function getReadableStatusClass(examStatus) {\n let readableClass = '';\n if (['created', 'download_software_clicked', 'ready_to_start'].includes(examStatus) || !examStatus) {\n readableClass = readableStatuses.notStarted;\n } else if (['started', 'ready_to_submit'].includes(examStatus)) {\n readableClass = readableStatuses.started;\n } else if (['second_review_required', 'submitted'].includes(examStatus)) {\n readableClass = readableStatuses.submitted;\n } else {\n const examStatusCamelCase = camelCase(examStatus);\n if (examStatusCamelCase in readableStatuses) {\n readableClass = readableStatuses[examStatusCamelCase];\n }\n }\n return readableClass;\n }\n\n function isCurrentlySubmitted(examStatus) {\n const SUBMITTED_STATES = ['submitted', 'second_review_required'];\n return SUBMITTED_STATES.includes(examStatus);\n }\n\n function isSubmissionRequired(examStatus) {\n const OK_STATES = [readableStatuses.submitted, readableStatuses.verified];\n return !OK_STATES.includes(examStatus);\n }\n\n function isNotYetReleased(examReleaseDate) {\n if (!examReleaseDate) {\n return false;\n }\n const now = new Date();\n return now < examReleaseDate;\n }\n\n function getBorderClass() {\n let borderClass = '';\n if ([readableStatuses.submitted, readableStatuses.expiringSoon].includes(readableStatus)) {\n borderClass = 'proctoring-onboarding-submitted';\n } else if ([readableStatuses.verified, readableStatuses.otherCourseApproved].includes(readableStatus)) {\n borderClass = 'proctoring-onboarding-success';\n }\n return borderClass;\n }\n\n function isExpired(dateString) {\n // Returns true if the expiration date has passed\n const today = new Date();\n const expirationDateObject = new Date(dateString);\n return today >= expirationDateObject.getTime();\n }\n\n function isExpiringSoon(dateString) {\n // Returns true if the expiration date is within 28 days\n const twentyeightDays = 28 * 24 * 60 * 60 * 1000;\n const today = new Date();\n const expirationDateObject = new Date(dateString);\n return today > expirationDateObject.getTime() - twentyeightDays;\n }\n\n useEffect(() => {\n getProctoringInfoData(courseId, username)\n .then(\n response => {\n if (response) {\n if (Object.keys(response).length > 0) {\n setShowInfoPanel(true);\n }\n\n setStatus(response.onboarding_status);\n setLink(response.onboarding_link);\n const expirationDate = response.expiration_date;\n if (expirationDate && isExpired(expirationDate)) {\n setReadableStatus(getReadableStatusClass('expired'));\n } else if (expirationDate && isExpiringSoon(expirationDate)) {\n setReadableStatus(getReadableStatusClass('expiringSoon'));\n } else {\n setReadableStatus(getReadableStatusClass(response.onboarding_status));\n }\n setReleaseDate(new Date(response.onboarding_release_date));\n setOnboardingPastDue(response.onboarding_past_due);\n }\n },\n )\n .catch(() => {\n /* Do nothing. API throws 404 when class does not have proctoring */\n })\n .finally(() => {\n dispatch(fetchProctoringInfoResolved());\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n let onboardingExamButton = null;\n\n if (isNotYetReleased(releaseDate)) {\n onboardingExamButton = (\n \n );\n } else if (onboardingPastDue) {\n onboardingExamButton = (\n \n );\n } else if (!isNotYetReleased(releaseDate)) {\n if (readableStatus === readableStatuses.otherCourseApproved) {\n onboardingExamButton = (\n \n );\n } else if (readableStatus !== readableStatuses.otherCourseApproved) {\n onboardingExamButton = (\n \n );\n }\n }\n\n return (\n // eslint-disable-next-line react/jsx-no-useless-fragment\n <>\n { showInfoPanel && (\n
    \n

    {intl.formatMessage(messages.proctoringInfoPanel)}

    \n
    \n {readableStatus && (\n <>\n

    \n {intl.formatMessage(messages.proctoringCurrentStatus)} {intl.formatMessage(messages[`${readableStatus}ProctoringStatus`])}\n

    \n

    \n {intl.formatMessage(messages[`${readableStatus}ProctoringMessage`])}\n

    \n

    \n {readableStatus === readableStatuses.otherCourseApproved && intl.formatMessage(messages[`${readableStatus}ProctoringDetail`])}\n

    \n \n )}\n {![readableStatuses.verified, readableStatuses.otherCourseApproved].includes(readableStatus) && (\n <>\n

    \n {!isCurrentlySubmitted(status) && (\n intl.formatMessage(messages.proctoringPanelGeneralInfo)\n )}\n {isCurrentlySubmitted(status) && (\n intl.formatMessage(messages.proctoringPanelGeneralInfoSubmitted)\n )}\n

    \n

    {intl.formatMessage(messages.proctoringPanelGeneralTime)}

    \n \n )}\n {isSubmissionRequired(readableStatus) && (\n onboardingExamButton\n )}\n \n
    \n
    \n )}\n \n );\n};\n\nProctoringInfoPanel.propTypes = {\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(ProctoringInfoPanel);\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n progressHeader: {\n id: 'progress.header',\n defaultMessage: 'Your progress',\n description: 'Headline or title for the progress tab',\n },\n progressHeaderForTargetUser: {\n id: 'progress.header.targetUser',\n defaultMessage: 'Course progress for {username}',\n description: 'Header when displaying the progress for a different user',\n },\n studioLink: {\n id: 'progress.link.studio',\n defaultMessage: 'View grading in Studio',\n description: 'Text shown for button that redirects to the studio if the user is a staff memember',\n },\n});\n\nexport default messages;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { getAuthenticatedUser } from '@edx/frontend-platform/auth';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Button } from '@openedx/paragon';\n\nimport { useModel } from '../../generic/model-store';\n\nimport messages from './messages';\n\nconst ProgressHeader = ({ intl }) => {\n const {\n courseId,\n targetUserId,\n } = useSelector(state => state.courseHome);\n\n const { administrator, userId } = getAuthenticatedUser();\n\n const { studioUrl, username } = useModel('progress', courseId);\n\n const viewingOtherStudentsProgressPage = (targetUserId && targetUserId !== userId);\n\n const pageTitle = viewingOtherStudentsProgressPage\n ? intl.formatMessage(messages.progressHeaderForTargetUser, { username })\n : intl.formatMessage(messages.progressHeader);\n\n return (\n
    \n

    {pageTitle}

    \n {administrator && studioUrl && (\n \n )}\n
    \n );\n};\n\nProgressHeader.propTypes = {\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(ProgressHeader);\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n donutLabel: {\n id: 'progress.completion.donut.label',\n defaultMessage: 'completed',\n description: 'Label text for progress donut chart',\n },\n completionBody: {\n id: 'progress.completion.body',\n defaultMessage: 'This represents how much of the course content you have completed. Note that some content may not yet be released.',\n description: 'It explains the meaning of progress donut chart',\n },\n completeContentTooltip: {\n id: 'progress.completion.tooltip.locked',\n defaultMessage: 'Content that you have completed.',\n description: 'It expalains the meaning of content that is completed',\n },\n courseCompletion: {\n id: 'progress.completion.header',\n defaultMessage: 'Course completion',\n description: 'Header text for (completion donut chart) section of the progress tab',\n },\n incompleteContentTooltip: {\n id: 'progress.completion.tooltip',\n defaultMessage: 'Content that you have access to and have not completed.',\n description: 'It explain the meaning for content is completed',\n },\n lockedContentTooltip: {\n id: 'progress.completion.tooltip.complete',\n defaultMessage: 'Content that is locked and available only to those who upgrade.',\n description: 'It expalains the meaning of content that is locked',\n },\n percentComplete: {\n id: 'progress.completion.donut.percentComplete',\n defaultMessage: 'You have completed {percent}% of content in this course.',\n description: 'It summarize the progress in the course (100% - %incomplete)',\n },\n percentIncomplete: {\n id: 'progress.completion.donut.percentIncomplete',\n defaultMessage: 'You have not completed {percent}% of content in this course that you have access to.',\n description: 'It summarize the progress in the course (100% - %complete)',\n },\n percentLocked: {\n id: 'progress.completion.donut.percentLocked',\n defaultMessage: '{percent}% of content in this course is locked and available only for those who upgrade.',\n description: 'It indicate the relative size of content that is locked in the course (100% - %open_content)',\n },\n});\n\nexport default messages;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { OverlayTrigger, Popover } from '@openedx/paragon';\n\nimport messages from './messages';\n\nconst CompleteDonutSegment = ({ completePercentage, intl, lockedPercentage }) => {\n const [showCompletePopover, setShowCompletePopover] = useState(false);\n\n if (!completePercentage) {\n return null;\n }\n\n const completeSegmentOffset = (3.6 * completePercentage) / 8;\n let completeTooltipDegree = completePercentage < 100 ? -completeSegmentOffset : 0;\n\n const lockedSegmentOffset = lockedPercentage - 75;\n if (lockedPercentage > 0) {\n completeTooltipDegree = (lockedSegmentOffset + completePercentage) * -3.6 + 90 + completeSegmentOffset;\n }\n\n return (\n setShowCompletePopover(false)}\n onFocus={() => setShowCompletePopover(true)}\n tabIndex=\"-1\"\n >\n {/* Tooltip */}\n \n \n {intl.formatMessage(messages.completeContentTooltip)}\n \n \n )}\n >\n {/* Used to anchor the tooltip within the complete segment's stroke */}\n \n \n\n {/* Complete segment */}\n \n\n {/* Segment dividers */}\n {lockedPercentage > 0 && lockedPercentage < 100 && (\n \n )}\n {completePercentage < 100 && lockedPercentage > 0 && lockedPercentage < 100\n && lockedPercentage + completePercentage === 100 && (\n \n )}\n \n );\n};\n\nCompleteDonutSegment.propTypes = {\n completePercentage: PropTypes.number.isRequired,\n intl: intlShape.isRequired,\n lockedPercentage: PropTypes.number.isRequired,\n};\n\nexport default injectIntl(CompleteDonutSegment);\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { OverlayTrigger, Popover } from '@openedx/paragon';\n\nimport messages from './messages';\n\nconst IncompleteDonutSegment = ({ incompletePercentage, intl }) => {\n const [showIncompletePopover, setShowIncompletePopover] = useState(false);\n\n if (!incompletePercentage) {\n return null;\n }\n\n const incompleteSegmentOffset = (3.6 * incompletePercentage) / 16;\n const incompleteTooltipDegree = incompletePercentage < 100 ? incompleteSegmentOffset : 0;\n\n return (\n setShowIncompletePopover(false)}\n onFocus={() => setShowIncompletePopover(true)}\n tabIndex=\"-1\"\n >\n \n\n {/* Tooltip */}\n \n \n {intl.formatMessage(messages.incompleteContentTooltip)}\n \n \n )}\n >\n {/* Used to anchor the tooltip within the incomplete segment's stroke */}\n \n \n \n );\n};\n\nIncompleteDonutSegment.propTypes = {\n incompletePercentage: PropTypes.number.isRequired,\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(IncompleteDonutSegment);\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { OverlayTrigger, Popover } from '@openedx/paragon';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\n\nimport messages from './messages';\n\nconst LockedDonutSegment = ({ intl, lockedPercentage }) => {\n const [showLockedPopover, setShowLockedPopover] = useState(false);\n\n if (!lockedPercentage) {\n return null;\n }\n\n const iconDegree = lockedPercentage > 8 ? (3.6 * lockedPercentage) / 8 : ((3.6 * lockedPercentage) / 5) * 2;\n\n return (\n setShowLockedPopover(false)}\n onFocus={() => setShowLockedPopover(true)}\n tabIndex=\"-1\"\n >\n \n\n {/* Tooltip */}\n \n \n {intl.formatMessage(messages.lockedContentTooltip)}\n \n \n )}\n >\n \n {/* Locked icon */}\n 5 ? 'white' : 'transparent'}\n style={{ transform: `scale(0.18) translate(5.8em, .7em) rotate(${iconDegree}deg)` }}\n />\n \n \n \n );\n};\n\nLockedDonutSegment.propTypes = {\n intl: intlShape.isRequired,\n lockedPercentage: PropTypes.number.isRequired,\n};\n\nexport default injectIntl(LockedDonutSegment);\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport {\n getLocale, injectIntl, intlShape, isRtl,\n} from '@edx/frontend-platform/i18n';\nimport { useModel } from '../../../generic/model-store';\n\nimport CompleteDonutSegment from './CompleteDonutSegment';\nimport IncompleteDonutSegment from './IncompleteDonutSegment';\nimport LockedDonutSegment from './LockedDonutSegment';\nimport messages from './messages';\n\nconst CompletionDonutChart = ({ intl }) => {\n const {\n courseId,\n } = useSelector(state => state.courseHome);\n\n const {\n completionSummary: {\n completeCount,\n incompleteCount,\n lockedCount,\n },\n } = useModel('progress', courseId);\n\n const numTotalUnits = completeCount + incompleteCount + lockedCount;\n const completePercentage = completeCount ? Number(((completeCount / numTotalUnits) * 100).toFixed(0)) : 0;\n const lockedPercentage = lockedCount ? Number(((lockedCount / numTotalUnits) * 100).toFixed(0)) : 0;\n const incompletePercentage = 100 - completePercentage - lockedPercentage;\n\n const isLocaleRtl = isRtl(getLocale());\n\n return (\n <>\n \n {/* The radius (or \"r\" attribute) is based off of a circumference of 100 in order to simplify percentage\n calculations. The subsequent stroke-dasharray values found in each segment should add up to equal 100\n in order to wrap around the circle once. */}\n \n \n \n {completePercentage}{isLocaleRtl && '\\u200f'}%\n \n \n {intl.formatMessage(messages.donutLabel)}\n \n \n \n \n \n \n
    \n {intl.formatMessage(messages.percentComplete, { percent: completePercentage })}\n {intl.formatMessage(messages.percentIncomplete, { percent: incompletePercentage })}\n {lockedPercentage > 0 && (\n <>\n {intl.formatMessage(messages.percentLocked, { percent: lockedPercentage })}\n \n )}\n
    \n \n );\n};\n\nCompletionDonutChart.propTypes = {\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(CompletionDonutChart);\n","import React from 'react';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\n\nimport CompletionDonutChart from './CompletionDonutChart';\nimport messages from './messages';\n\nconst CourseCompletion = ({ intl }) => (\n
    \n
    \n
    \n

    {intl.formatMessage(messages.courseCompletion)}

    \n

    \n {intl.formatMessage(messages.completionBody)}\n

    \n
    \n
    \n \n
    \n
    \n
    \n);\n\nCourseCompletion.propTypes = {\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(CourseCompletion);\n","import React, { useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport PropTypes from 'prop-types';\n\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { InfoOutline } from '@openedx/paragon/icons';\nimport {\n Icon, IconButton, OverlayTrigger, Popover,\n} from '@openedx/paragon';\nimport { useModel } from '../../../../generic/model-store';\n\nimport messages from '../messages';\n\nconst GradeRangeTooltip = ({ intl, iconButtonClassName, passingGrade }) => {\n const {\n courseId,\n } = useSelector(state => state.courseHome);\n\n const {\n gradesFeatureIsFullyLocked,\n gradingPolicy: {\n gradeRange,\n },\n } = useModel('progress', courseId);\n\n const [showTooltip, setShowTooltip] = useState(false);\n\n const orderedGradeRange = Object.entries(gradeRange).sort((a, b) => (\n gradeRange[b[0]] - gradeRange[a[0]]\n ));\n\n return (\n \n \n {intl.formatMessage(messages.courseGradeRangeTooltip)}\n
      \n {orderedGradeRange.map((range, index) => {\n if (index === 0) {\n return (\n
    • \n {range[0]}: {(range[1] * 100).toFixed(0)}%-100%\n
    • \n );\n }\n const previousGrade = orderedGradeRange[index - 1];\n return (\n
    • \n {range[0]}: {(range[1] * 100).toFixed(0)}%-{(previousGrade[1] * 100).toFixed(0)}%\n
    • \n );\n })}\n
    • F: {'<'}{passingGrade}%
    • \n
    \n
    \n \n )}\n >\n setShowTooltip(!showTooltip)}\n onBlur={() => setShowTooltip(false)}\n alt={intl.formatMessage(messages.gradeRangeTooltipAlt)}\n className={`mb-0 mt-n1 ${iconButtonClassName}`}\n src={InfoOutline}\n iconAs={Icon}\n size=\"inline\"\n disabled={gradesFeatureIsFullyLocked}\n />\n \n );\n};\n\nGradeRangeTooltip.defaultProps = {\n iconButtonClassName: '',\n};\n\nGradeRangeTooltip.propTypes = {\n iconButtonClassName: PropTypes.string,\n intl: intlShape.isRequired,\n passingGrade: PropTypes.number.isRequired,\n};\n\nexport default injectIntl(GradeRangeTooltip);\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport PropTypes from 'prop-types';\n\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { CheckCircle, WarningFilled } from '@openedx/paragon/icons';\nimport { breakpoints, Icon, useWindowSize } from '@openedx/paragon';\nimport { useModel } from '../../../../generic/model-store';\n\nimport GradeRangeTooltip from './GradeRangeTooltip';\nimport messages from '../messages';\n\nconst CourseGradeFooter = ({ intl, passingGrade }) => {\n const {\n courseId,\n } = useSelector(state => state.courseHome);\n\n const {\n courseGrade: {\n isPassing,\n letterGrade,\n },\n gradingPolicy: {\n gradeRange,\n },\n } = useModel('progress', courseId);\n\n const wideScreen = useWindowSize().width >= breakpoints.medium.minWidth;\n\n const hasLetterGrades = Object.keys(gradeRange).length > 1; // A pass/fail course will only have one key\n let footerText = intl.formatMessage(messages.courseGradeFooterNonPassing, { passingGrade });\n\n if (isPassing) {\n if (hasLetterGrades) {\n const minGradeRangeCutoff = gradeRange[letterGrade] * 100;\n const possibleMaxGradeRangeValues = [...Object.values(gradeRange).filter(\n (grade) => (grade * 100 > minGradeRangeCutoff),\n )];\n const maxGradeRangeCutoff = possibleMaxGradeRangeValues.length ? Math.min(...possibleMaxGradeRangeValues) * 100\n : 100;\n\n footerText = intl.formatMessage(messages.courseGradeFooterPassingWithGrade, {\n letterGrade,\n minGrade: minGradeRangeCutoff.toFixed(0),\n maxGrade: maxGradeRangeCutoff.toFixed(0),\n });\n } else {\n footerText = intl.formatMessage(messages.courseGradeFooterGenericPassing);\n }\n }\n\n const icon = isPassing ? \n : ;\n\n return (\n
    \n
    \n {icon}\n
    \n
    \n {!wideScreen && (\n \n {footerText}\n {hasLetterGrades && (\n \n  \n \n \n )}\n \n )}\n {wideScreen && (\n \n {footerText}\n {hasLetterGrades && (\n \n  \n \n \n )}\n \n )}\n
    \n
    \n );\n};\n\nCourseGradeFooter.propTypes = {\n intl: intlShape.isRequired,\n passingGrade: PropTypes.number.isRequired,\n};\n\nexport default injectIntl(CourseGradeFooter);\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { sendTrackEvent } from '@edx/frontend-platform/analytics';\nimport { getAuthenticatedUser } from '@edx/frontend-platform/auth';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Locked } from '@openedx/paragon/icons';\nimport { Button, Icon } from '@openedx/paragon';\n\nimport { useModel } from '../../../../generic/model-store';\nimport messages from '../messages';\n\nconst CourseGradeHeader = ({ intl }) => {\n const {\n courseId,\n } = useSelector(state => state.courseHome);\n const {\n org,\n } = useModel('courseHomeMeta', courseId);\n const {\n verifiedMode,\n gradesFeatureIsFullyLocked,\n } = useModel('progress', courseId);\n\n const eventProperties = {\n org_key: org,\n courserun_key: courseId,\n };\n\n const { administrator } = getAuthenticatedUser();\n const logUpgradeButtonClick = () => {\n sendTrackEvent('edx.ui.lms.course_progress.grades_upgrade.clicked', {\n org_key: org,\n courserun_key: courseId,\n is_staff: administrator,\n });\n sendTrackEvent('edx.bi.ecommerce.upsell_links_clicked', {\n ...eventProperties,\n linkCategory: '(none)',\n linkName: 'progress_locked',\n linkType: 'button',\n pageName: 'progress',\n });\n };\n let previewText;\n if (verifiedMode) {\n previewText = gradesFeatureIsFullyLocked\n ? intl.formatMessage(messages.courseGradePreviewUnlockCertificateBody)\n : intl.formatMessage(messages.courseGradePartialPreviewUnlockCertificateBody);\n } else {\n previewText = intl.formatMessage(messages.courseGradePreviewUpgradeDeadlinePassedBody);\n }\n return (\n
    \n
    \n
    \n
    \n \n
    \n
    \n \n {intl.formatMessage(messages.courseGradePreviewHeaderAriaHidden)}\n \n {gradesFeatureIsFullyLocked\n ? intl.formatMessage(messages.courseGradePreviewHeaderLocked)\n : intl.formatMessage(messages.courseGradePreviewHeaderLimited)}\n
    \n
    \n
    \n
    \n {previewText}\n
    \n
    \n
    \n {verifiedMode && (\n
    \n \n
    \n )}\n
    \n );\n};\n\nCourseGradeHeader.propTypes = {\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(CourseGradeHeader);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useSelector } from 'react-redux';\n\nimport {\n getLocale, injectIntl, intlShape, isRtl,\n} from '@edx/frontend-platform/i18n';\nimport { OverlayTrigger, Popover } from '@openedx/paragon';\n\nimport { useModel } from '../../../../generic/model-store';\n\nimport messages from '../messages';\n\nconst CurrentGradeTooltip = ({ intl, tooltipClassName }) => {\n const {\n courseId,\n } = useSelector(state => state.courseHome);\n\n const {\n courseGrade: {\n isPassing,\n percent,\n },\n } = useModel('progress', courseId);\n\n const currentGrade = Number((percent * 100).toFixed(0));\n\n let currentGradeDirection = currentGrade < 50 ? '' : '-';\n\n const isLocaleRtl = isRtl(getLocale());\n\n if (isLocaleRtl) {\n currentGradeDirection = currentGrade < 50 ? '-' : '';\n }\n\n return (\n <>\n \n \n {currentGrade.toFixed(0)}{isLocaleRtl ? '\\u200f' : ''}%\n \n \n )}\n >\n \n \n \n \n \n \n {intl.formatMessage(messages.currentGradeLabel)}\n \n \n );\n};\n\nCurrentGradeTooltip.defaultProps = {\n tooltipClassName: '',\n};\n\nCurrentGradeTooltip.propTypes = {\n intl: intlShape.isRequired,\n tooltipClassName: PropTypes.string,\n};\n\nexport default injectIntl(CurrentGradeTooltip);\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport {\n getLocale, injectIntl, intlShape, isRtl,\n} from '@edx/frontend-platform/i18n';\nimport { OverlayTrigger, Popover } from '@openedx/paragon';\n\nimport messages from '../messages';\n\nconst PassingGradeTooltip = ({ intl, passingGrade, tooltipClassName }) => {\n const isLocaleRtl = isRtl(getLocale());\n\n let passingGradeDirection = passingGrade < 50 ? '' : '-';\n\n if (isLocaleRtl) {\n passingGradeDirection = passingGrade < 50 ? '-' : '';\n }\n\n return (\n <>\n \n \n {passingGrade}{isLocaleRtl && '\\u200f'}%\n \n \n )}\n >\n \n \n \n \n \n\n \n {intl.formatMessage(messages.passingGradeLabel)}\n \n \n );\n};\n\nPassingGradeTooltip.defaultProps = {\n tooltipClassName: '',\n};\n\nPassingGradeTooltip.propTypes = {\n intl: intlShape.isRequired,\n passingGrade: PropTypes.number.isRequired,\n tooltipClassName: PropTypes.string,\n};\n\nexport default injectIntl(PassingGradeTooltip);\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport PropTypes from 'prop-types';\n\nimport {\n getLocale, injectIntl, intlShape, isRtl,\n} from '@edx/frontend-platform/i18n';\nimport { useModel } from '../../../../generic/model-store';\nimport CurrentGradeTooltip from './CurrentGradeTooltip';\nimport PassingGradeTooltip from './PassingGradeTooltip';\n\nimport messages from '../messages';\n\nconst GradeBar = ({ intl, passingGrade }) => {\n const {\n courseId,\n } = useSelector(state => state.courseHome);\n\n const {\n courseGrade: {\n isPassing,\n percent,\n },\n gradesFeatureIsFullyLocked,\n } = useModel('progress', courseId);\n\n const currentGrade = Number((percent * 100).toFixed(0));\n\n const lockedTooltipClassName = gradesFeatureIsFullyLocked ? 'locked-overlay' : '';\n\n const adjustedRtlStyle = (percentOffest) => (isRtl(getLocale()) ? { transform: `translateX(${100 - percentOffest}%)` } : {});\n\n return (\n
    \n
    {intl.formatMessage(messages.courseGradeBarAltText, { currentGrade, passingGrade })}
    \n \n \n \n \n \n\n {/* Start divider */}\n \n {/* End divider */}\n \n \n \n \n \n
    \n );\n};\n\nGradeBar.propTypes = {\n intl: intlShape.isRequired,\n passingGrade: PropTypes.number.isRequired,\n};\n\nexport default injectIntl(GradeBar);\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n completed: {\n id: 'progress.creditInformation.completed',\n defaultMessage: 'Completed',\n description: 'Label text if a requirement for (course credit) is satisfied',\n },\n courseCredit: {\n id: 'progress.creditInformation.courseCredit',\n defaultMessage: 'course credit',\n description: 'Anchor text for link that redirects (course credit) help page',\n },\n minimumGrade: {\n id: 'progress.creditInformation.minimumGrade',\n defaultMessage: 'Minimum grade for credit ({minGrade}%)',\n },\n requirementsHeader: {\n id: 'progress.creditInformation.requirementsHeader',\n defaultMessage: 'Requirements for course credit',\n description: 'Header for the requirements section in course credit',\n },\n upcoming: {\n id: 'progress.creditInformation.upcoming',\n defaultMessage: 'Upcoming',\n description: 'It indicate that the a (credit requirement) status is not known yet',\n },\n verificationFailed: {\n id: 'progress.creditInformation.verificationFailed',\n defaultMessage: 'Verification failed',\n description: 'It indicate that the learner submitted a requirement but is either failed or declined',\n },\n verificationSubmitted: {\n id: 'progress.creditInformation.verificationSubmitted',\n defaultMessage: 'Verification submitted',\n description: 'It indicate that the learner submitted a requirement but is not graded or reviewed yet',\n },\n});\n\nexport default messages;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { getConfig } from '@edx/frontend-platform';\nimport { FormattedMessage, injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { CheckCircle, WarningFilled, WatchFilled } from '@openedx/paragon/icons';\nimport { Hyperlink, Icon } from '@openedx/paragon';\n\nimport { useModel } from '../../../generic/model-store';\nimport { DashboardLink } from '../../../shared/links';\n\nimport messages from './messages';\n\nconst CreditInformation = ({ intl }) => {\n const {\n courseId,\n } = useSelector(state => state.courseHome);\n\n const {\n creditCourseRequirements,\n } = useModel('progress', courseId);\n\n if (!creditCourseRequirements) { return null; }\n\n let eligibilityStatus;\n let requirementStatus;\n const requirements = [];\n const dashboardLink = ;\n const creditLink = (\n {intl.formatMessage(messages.courseCredit)}\n \n );\n\n switch (creditCourseRequirements.eligibilityStatus) {\n case 'not_eligible':\n eligibilityStatus = (\n \n );\n break;\n case 'eligible':\n eligibilityStatus = (\n \n );\n break;\n case 'partial_eligible':\n eligibilityStatus = (\n \n );\n break;\n default:\n break;\n }\n creditCourseRequirements.requirements.forEach(requirement => {\n switch (requirement.status) {\n case 'submitted':\n requirementStatus = (<>{intl.formatMessage(messages.verificationSubmitted)} );\n break;\n case 'failed':\n case 'declined':\n requirementStatus = (<>{intl.formatMessage(messages.verificationFailed)} );\n break;\n case 'satisfied':\n requirementStatus = (<>{intl.formatMessage(messages.completed)} );\n break;\n default:\n requirementStatus = (<>{intl.formatMessage(messages.upcoming)} );\n }\n requirements.push((\n
    \n

    \n {requirement.namespace === 'grade'\n ? `${intl.formatMessage(messages.minimumGrade, { minGrade: Number(requirement.criteria.minGrade) * 100 })}:`\n : `${requirement.displayName}:`}\n

    \n
    \n {requirementStatus}\n
    \n
    \n ));\n });\n\n return (\n <>\n

    {intl.formatMessage(messages.requirementsHeader)}

    \n

    {eligibilityStatus}

    \n {requirements}\n \n );\n};\n\nCreditInformation.propTypes = {\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(CreditInformation);\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\n\nimport { useModel } from '../../../../generic/model-store';\n\nimport CourseGradeFooter from './CourseGradeFooter';\nimport CourseGradeHeader from './CourseGradeHeader';\nimport GradeBar from './GradeBar';\nimport CreditInformation from '../../credit-information/CreditInformation';\n\nimport messages from '../messages';\n\nconst CourseGrade = ({ intl }) => {\n const {\n courseId,\n } = useSelector(state => state.courseHome);\n\n const {\n creditCourseRequirements,\n gradesFeatureIsFullyLocked,\n gradesFeatureIsPartiallyLocked,\n gradingPolicy: {\n gradeRange,\n },\n } = useModel('progress', courseId);\n\n const passingGrade = Number((Math.min(...Object.values(gradeRange)) * 100).toFixed(0));\n\n const applyLockedOverlay = gradesFeatureIsFullyLocked ? 'locked-overlay' : '';\n\n return (\n
    \n {(gradesFeatureIsFullyLocked || gradesFeatureIsPartiallyLocked) && }\n
    \n
    \n
    \n

    {creditCourseRequirements\n ? intl.formatMessage(messages.gradesAndCredit)\n : intl.formatMessage(messages.grades)}\n

    \n

    \n {intl.formatMessage(messages.courseGradeBody)}\n

    \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n );\n};\n\nCourseGrade.propTypes = {\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(CourseGrade);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\n\nimport {\n getLocale, injectIntl, intlShape, isRtl,\n} from '@edx/frontend-platform/i18n';\n\nimport messages from '../messages';\n\nconst ProblemScoreDrawer = ({ intl, problemScores, subsection }) => {\n const isLocaleRtl = isRtl(getLocale());\n return (\n \n {intl.formatMessage(messages.problemScoreLabel)}\n
    \n
      \n {problemScores.map((problemScore, i) => (\n // eslint-disable-next-line react/no-array-index-key\n
    • {problemScore.earned}{isLocaleRtl ? '\\\\' : '/'}{problemScore.possible}
    • \n ))}\n
    \n
    \n
    \n );\n};\n\nProblemScoreDrawer.propTypes = {\n intl: intlShape.isRequired,\n problemScores: PropTypes.arrayOf(PropTypes.shape({\n earned: PropTypes.number.isRequired,\n possible: PropTypes.number.isRequired,\n })).isRequired,\n subsection: PropTypes.shape({ learnerHasAccess: PropTypes.bool }).isRequired,\n};\n\nexport default injectIntl(ProblemScoreDrawer);\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport PropTypes from 'prop-types';\n\nimport { sendTrackEvent } from '@edx/frontend-platform/analytics';\nimport { getAuthenticatedUser } from '@edx/frontend-platform/auth';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Collapsible, Icon, Row } from '@openedx/paragon';\nimport {\n ArrowDropDown, ArrowDropUp, Blocked, Info,\n} from '@openedx/paragon/icons';\n\nimport messages from '../messages';\nimport { useModel } from '../../../../generic/model-store';\nimport ProblemScoreDrawer from './ProblemScoreDrawer';\n\nconst SubsectionTitleCell = ({ intl, subsection }) => {\n const {\n courseId,\n } = useSelector(state => state.courseHome);\n const {\n org,\n } = useModel('courseHomeMeta', courseId);\n const {\n gradesFeatureIsFullyLocked,\n } = useModel('progress', courseId);\n\n const {\n blockKey,\n displayName,\n problemScores,\n url,\n } = subsection;\n\n const { administrator } = getAuthenticatedUser();\n const logSubsectionClicked = () => {\n sendTrackEvent('edx.ui.lms.course_progress.detailed_grades_assignment.clicked', {\n org_key: org,\n courserun_key: courseId,\n is_staff: administrator,\n assignment_block_key: blockKey,\n });\n };\n\n return (\n \n \n \n \n \n \n \n {gradesFeatureIsFullyLocked || subsection.learnerHasAccess ? ''\n : (\n \n )}\n {url ? (\n \n {displayName}\n \n ) : (\n {displayName}\n )}\n \n \n \n
    \n { subsection.override && (\n
    \n
    \n \n
    \n
    {intl.formatMessage(messages.sectionGradeOverridden)}
    \n
    \n )}\n \n
    \n
    \n
    \n );\n};\n\nSubsectionTitleCell.propTypes = {\n intl: intlShape.isRequired,\n subsection: PropTypes.shape({\n blockKey: PropTypes.string.isRequired,\n displayName: PropTypes.string.isRequired,\n learnerHasAccess: PropTypes.bool.isRequired,\n override: PropTypes.shape({\n system: PropTypes.string,\n reason: PropTypes.string,\n }),\n problemScores: PropTypes.arrayOf(PropTypes.shape({\n earned: PropTypes.number.isRequired,\n possible: PropTypes.number.isRequired,\n })).isRequired,\n url: PropTypes.string,\n }).isRequired,\n};\n\nexport default injectIntl(SubsectionTitleCell);\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n\nimport {\n getLocale, injectIntl, intlShape, isRtl,\n} from '@edx/frontend-platform/i18n';\nimport { DataTable } from '@openedx/paragon';\n\nimport { useModel } from '../../../../generic/model-store';\nimport messages from '../messages';\nimport SubsectionTitleCell from './SubsectionTitleCell';\n\nconst DetailedGradesTable = ({ intl }) => {\n const {\n courseId,\n } = useSelector(state => state.courseHome);\n\n const {\n sectionScores,\n } = useModel('progress', courseId);\n\n const isLocaleRtl = isRtl(getLocale());\n return (\n sectionScores.map((chapter) => {\n const subsectionScores = chapter.subsections.filter(\n (subsection) => !!(\n subsection.hasGradedAssignment\n && subsection.showGrades\n && (subsection.numPointsPossible > 0 || subsection.numPointsEarned > 0)),\n );\n\n if (subsectionScores.length === 0) {\n return null;\n }\n\n const detailedGradesData = subsectionScores.map((subsection) => ({\n subsectionTitle: ,\n score: {subsection.numPointsEarned}{isLocaleRtl ? '\\\\' : '/'}{subsection.numPointsPossible},\n }));\n\n return (\n
    \n \n \n \n
    \n );\n })\n );\n};\n\nDetailedGradesTable.propTypes = {\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(DetailedGradesTable);\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { sendTrackEvent } from '@edx/frontend-platform/analytics';\nimport { getAuthenticatedUser } from '@edx/frontend-platform/auth';\nimport { FormattedMessage, injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Blocked } from '@openedx/paragon/icons';\nimport { Icon, Hyperlink } from '@openedx/paragon';\nimport { useModel } from '../../../../generic/model-store';\n\nimport DetailedGradesTable from './DetailedGradesTable';\n\nimport messages from '../messages';\n\nconst DetailedGrades = ({ intl }) => {\n const { administrator } = getAuthenticatedUser();\n const {\n courseId,\n } = useSelector(state => state.courseHome);\n const {\n org,\n tabs,\n } = useModel('courseHomeMeta', courseId);\n const {\n gradesFeatureIsFullyLocked,\n gradesFeatureIsPartiallyLocked,\n sectionScores,\n } = useModel('progress', courseId);\n\n const hasSectionScores = sectionScores.length > 0;\n\n const logOutlineLinkClick = () => {\n sendTrackEvent('edx.ui.lms.course_progress.detailed_grades.course_outline_link.clicked', {\n org_key: org,\n courserun_key: courseId,\n is_staff: administrator,\n });\n };\n\n const overviewTab = tabs.find(tab => tab.slug === 'outline');\n const overviewTabUrl = overviewTab && overviewTab.url;\n\n const outlineLink = overviewTabUrl && (\n \n {intl.formatMessage(messages.courseOutline)}\n \n );\n\n return (\n
    \n

    {intl.formatMessage(messages.detailedGrades)}

    \n {gradesFeatureIsPartiallyLocked && (\n
    \n \n {intl.formatMessage(messages.gradeSummaryLimitedAccessExplanation)}\n
    \n )}\n {hasSectionScores && (\n \n )}\n {!hasSectionScores && (\n

    {intl.formatMessage(messages.detailedGradesEmpty)}

    \n )}\n {overviewTabUrl && (\n

    \n \n

    \n )}\n
    \n );\n};\n\nDetailedGrades.propTypes = {\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(DetailedGrades);\n","import React, { useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport PropTypes from 'prop-types';\n\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport {\n Icon, IconButton, OverlayTrigger, Popover,\n} from '@openedx/paragon';\nimport { Blocked, InfoOutline } from '@openedx/paragon/icons';\n\nimport messages from '../messages';\nimport { useModel } from '../../../../generic/model-store';\n\nconst GradeSummaryHeader = ({ intl, allOfSomeAssignmentTypeIsLocked }) => {\n const {\n courseId,\n } = useSelector(state => state.courseHome);\n const {\n gradesFeatureIsFullyLocked,\n } = useModel('progress', courseId);\n const [showTooltip, setShowTooltip] = useState(false);\n\n return (\n
    \n

    {intl.formatMessage(messages.gradeSummary)}

    \n \n \n {intl.formatMessage(messages.gradeSummaryTooltipBody)}\n \n \n )}\n >\n { setShowTooltip(!showTooltip); }}\n onBlur={() => { setShowTooltip(false); }}\n alt={intl.formatMessage(messages.gradeSummaryTooltipAlt)}\n src={InfoOutline}\n iconAs={Icon}\n className=\"mb-3\"\n size=\"sm\"\n disabled={gradesFeatureIsFullyLocked}\n />\n \n {!gradesFeatureIsFullyLocked && allOfSomeAssignmentTypeIsLocked && (\n
    \n \n {intl.formatMessage(messages.gradeSummaryLimitedAccessExplanation)}\n
    \n )}\n
    \n );\n};\n\nGradeSummaryHeader.propTypes = {\n intl: intlShape.isRequired,\n allOfSomeAssignmentTypeIsLocked: PropTypes.bool.isRequired,\n};\n\nexport default injectIntl(GradeSummaryHeader);\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Blocked } from '@openedx/paragon/icons';\nimport { Icon } from '@openedx/paragon';\nimport { useModel } from '../../../../generic/model-store';\nimport messages from '../messages';\n\nconst AssignmentTypeCell = ({\n intl, assignmentType, footnoteMarker, footnoteId, locked,\n}) => {\n const {\n courseId,\n } = useSelector(state => state.courseHome);\n\n const {\n gradesFeatureIsFullyLocked,\n } = useModel('progress', courseId);\n\n const lockedIcon = locked ? : '';\n\n return (\n
    \n
    {lockedIcon}
    \n
    \n {assignmentType} \n {footnoteId && footnoteMarker && (\n \n \n {footnoteMarker}\n \n \n )}\n
    \n
    \n );\n};\n\nAssignmentTypeCell.propTypes = {\n intl: intlShape.isRequired,\n assignmentType: PropTypes.string.isRequired,\n footnoteId: PropTypes.string,\n footnoteMarker: PropTypes.number,\n locked: PropTypes.bool,\n};\n\nAssignmentTypeCell.defaultProps = {\n footnoteId: '',\n footnoteMarker: null,\n locked: false,\n};\n\nexport default injectIntl(AssignmentTypeCell);\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport PropTypes from 'prop-types';\n\nimport { FormattedMessage, injectIntl, intlShape } from '@edx/frontend-platform/i18n';\n\nimport messages from '../messages';\nimport { useModel } from '../../../../generic/model-store';\n\nconst DroppableAssignmentFootnote = ({ footnotes, intl }) => {\n const {\n courseId,\n } = useSelector(state => state.courseHome);\n const {\n gradesFeatureIsFullyLocked,\n } = useModel('progress', courseId);\n return (\n <>\n {intl.formatMessage(messages.footnotesTitle)}\n \n \n );\n};\n\nDroppableAssignmentFootnote.propTypes = {\n footnotes: PropTypes.arrayOf(PropTypes.shape({\n assignmentType: PropTypes.string.isRequired,\n id: PropTypes.string.isRequired,\n numDroppable: PropTypes.number.isRequired,\n })).isRequired,\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(DroppableAssignmentFootnote);\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n\nimport {\n getLocale, injectIntl, intlShape, isRtl,\n} from '@edx/frontend-platform/i18n';\nimport { DataTable } from '@openedx/paragon';\nimport { useModel } from '../../../../generic/model-store';\n\nimport messages from '../messages';\n\nconst GradeSummaryTableFooter = ({ intl }) => {\n const {\n courseId,\n } = useSelector(state => state.courseHome);\n\n const {\n courseGrade: {\n isPassing,\n percent,\n },\n } = useModel('progress', courseId);\n\n const bgColor = isPassing ? 'bg-success-100' : 'bg-warning-100';\n const totalGrade = (percent * 100).toFixed(0);\n\n const isLocaleRtl = isRtl(getLocale());\n\n return (\n \n
    \n
    {intl.formatMessage(messages.weightedGradeSummary)}
    \n
    {totalGrade}{isLocaleRtl && '\\u200f'}%
    \n
    \n
    \n );\n};\n\nGradeSummaryTableFooter.propTypes = {\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(GradeSummaryTableFooter);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useSelector } from 'react-redux';\n\nimport {\n getLocale, injectIntl, intlShape, isRtl,\n} from '@edx/frontend-platform/i18n';\nimport { DataTable } from '@openedx/paragon';\nimport { useModel } from '../../../../generic/model-store';\n\nimport AssignmentTypeCell from './AssignmentTypeCell';\nimport DroppableAssignmentFootnote from './DroppableAssignmentFootnote';\nimport GradeSummaryTableFooter from './GradeSummaryTableFooter';\n\nimport messages from '../messages';\n\nconst GradeSummaryTable = ({ intl, setAllOfSomeAssignmentTypeIsLocked }) => {\n const {\n courseId,\n } = useSelector(state => state.courseHome);\n\n const {\n gradingPolicy: {\n assignmentPolicies,\n },\n gradesFeatureIsFullyLocked,\n sectionScores,\n } = useModel('progress', courseId);\n\n const footnotes = [];\n\n const getFootnoteId = (assignment) => {\n const footnoteId = assignment.shortLabel ? assignment.shortLabel : assignment.type;\n return footnoteId.replace(/[^A-Za-z0-9.-_]+/g, '-');\n };\n\n const hasNoAccessToAssignmentsOfType = (assignmentType) => {\n const subsectionAssignmentsOfType = sectionScores.map((chapter) => chapter.subsections.filter((subsection) => (\n subsection.assignmentType === assignmentType && subsection.hasGradedAssignment\n && (subsection.numPointsPossible > 0 || subsection.numPointsEarned > 0)\n ))).flat();\n if (subsectionAssignmentsOfType.length) {\n const noAccessToAssignmentsOfType = !subsectionAssignmentsOfType.some((subsection) => (\n subsection.learnerHasAccess === true\n ));\n if (noAccessToAssignmentsOfType) {\n setAllOfSomeAssignmentTypeIsLocked(true);\n return true;\n }\n }\n return false;\n };\n\n const gradeSummaryData = assignmentPolicies.map((assignment) => {\n let footnoteId = '';\n let footnoteMarker;\n\n if (assignment.numDroppable > 0) {\n footnoteId = getFootnoteId(assignment);\n footnotes.push({\n id: footnoteId,\n numDroppable: assignment.numDroppable,\n assignmentType: assignment.type,\n });\n\n footnoteMarker = footnotes.length;\n }\n\n const locked = !gradesFeatureIsFullyLocked && hasNoAccessToAssignmentsOfType(assignment.type);\n\n const isLocaleRtl = isRtl(getLocale());\n\n return {\n type: {\n footnoteId, footnoteMarker, type: assignment.type, locked,\n },\n weight: { weight: `${(assignment.weight * 100).toFixed(0)}${isLocaleRtl ? '\\u200f' : ''}%`, locked },\n grade: { grade: `${(assignment.averageGrade * 100).toFixed(0)}${isLocaleRtl ? '\\u200f' : ''}%`, locked },\n weightedGrade: { weightedGrade: `${(assignment.weightedGrade * 100).toFixed(0)}${isLocaleRtl ? '\\u200f' : ''}%`, locked },\n };\n });\n const getAssignmentTypeCell = (value) => (\n \n );\n\n const getCell = (locked, value) => {value};\n\n return (\n <>\n getAssignmentTypeCell(value),\n headerClassName: 'h5 mb-0',\n },\n {\n Header: `${intl.formatMessage(messages.weight)}`,\n accessor: 'weight',\n headerClassName: 'justify-content-end h5 mb-0',\n Cell: ({ value }) => getCell(value.locked, value.weight),\n cellClassName: 'text-right small',\n },\n {\n Header: `${intl.formatMessage(messages.grade)}`,\n accessor: 'grade',\n headerClassName: 'justify-content-end h5 mb-0',\n Cell: ({ value }) => getCell(value.locked, value.grade),\n cellClassName: 'text-right small',\n },\n {\n Header: `${intl.formatMessage(messages.weightedGrade)}`,\n accessor: 'weightedGrade',\n headerClassName: 'justify-content-end h5 mb-0 text-right',\n Cell: ({ value }) => getCell(value.locked, value.weightedGrade),\n cellClassName: 'text-right font-weight-bold small',\n },\n ]}\n >\n \n \n \n\n {footnotes && (\n \n )}\n \n );\n};\n\nGradeSummaryTable.propTypes = {\n intl: intlShape.isRequired,\n setAllOfSomeAssignmentTypeIsLocked: PropTypes.func.isRequired,\n};\n\nexport default injectIntl(GradeSummaryTable);\n","import React, { useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { useModel } from '../../../../generic/model-store';\n\nimport GradeSummaryHeader from './GradeSummaryHeader';\nimport GradeSummaryTable from './GradeSummaryTable';\n\nconst GradeSummary = () => {\n const {\n courseId,\n } = useSelector(state => state.courseHome);\n\n const {\n gradingPolicy: {\n assignmentPolicies,\n },\n } = useModel('progress', courseId);\n\n const [allOfSomeAssignmentTypeIsLocked, setAllOfSomeAssignmentTypeIsLocked] = useState(false);\n\n if (assignmentPolicies.length === 0) {\n return null;\n }\n\n return (\n
    \n \n \n
    \n );\n};\n\nexport default GradeSummary;\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n datesCardDescription: {\n id: 'progress.relatedLinks.datesCard.description',\n defaultMessage: 'A schedule view of your course due dates and upcoming assignments.',\n description: 'It explain the content of the dates tab',\n },\n datesCardLink: {\n id: 'progress.relatedLinks.datesCard.link',\n defaultMessage: 'Dates',\n description: 'Anchor text for link that redirects to dates tab',\n },\n outlineCardDescription: {\n id: 'progress.relatedLinks.outlineCard.description',\n defaultMessage: 'A birds-eye view of your course content.',\n description: 'It explain the content of the course outline tab',\n },\n outlineCardLink: {\n id: 'progress.relatedLinks.outlineCard.link',\n defaultMessage: 'Course Outline',\n description: 'Anchor text for link that redirects to course outline tab',\n },\n relatedLinks: {\n id: 'progress.relatedLinks',\n defaultMessage: 'Related links',\n description: 'Headline for (related links) section in progress tab',\n },\n});\n\nexport default messages;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { sendTrackEvent } from '@edx/frontend-platform/analytics';\nimport { getAuthenticatedUser } from '@edx/frontend-platform/auth';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Hyperlink } from '@openedx/paragon';\n\nimport messages from './messages';\nimport { useModel } from '../../../generic/model-store';\n\nconst RelatedLinks = ({ intl }) => {\n const {\n courseId,\n } = useSelector(state => state.courseHome);\n const {\n org,\n tabs,\n } = useModel('courseHomeMeta', courseId);\n\n const { administrator } = getAuthenticatedUser();\n const logLinkClicked = (linkName) => {\n sendTrackEvent('edx.ui.lms.course_progress.related_links.clicked', {\n org_key: org,\n courserun_key: courseId,\n is_staff: administrator,\n link_clicked: linkName,\n });\n };\n\n const overviewTab = tabs.find(tab => tab.slug === 'outline');\n const overviewTabUrl = overviewTab && overviewTab.url;\n const datesTab = tabs.find(tab => tab.slug === 'dates');\n const datesTabUrl = datesTab && datesTab.url;\n\n return (\n
    \n

    {intl.formatMessage(messages.relatedLinks)}

    \n
      \n {datesTabUrl && (\n
    • \n logLinkClicked('dates')}>\n {intl.formatMessage(messages.datesCardLink)}\n \n

      {intl.formatMessage(messages.datesCardDescription)}

      \n
    • \n )}\n {overviewTabUrl && (\n
    • \n logLinkClicked('course_outline')}>\n {intl.formatMessage(messages.outlineCardLink)}\n \n

      {intl.formatMessage(messages.outlineCardDescription)}

      \n
    • \n )}\n
    \n
    \n );\n};\n\nRelatedLinks.propTypes = {\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(RelatedLinks);\n","import React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport PropTypes from 'prop-types';\n\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport {\n Alert,\n Button,\n Row,\n Col,\n} from '@openedx/paragon';\n\nimport { resetDeadlines } from '../data';\nimport { useModel } from '../../generic/model-store';\nimport messages from './messages';\n\nconst ShiftDatesAlert = ({ fetch, intl, model }) => {\n const {\n courseId,\n } = useSelector(state => state.courseHome);\n\n const {\n datesBannerInfo,\n hasEnded,\n } = useModel(model, courseId);\n\n const {\n missedDeadlines,\n missedGatedContent,\n } = datesBannerInfo;\n\n const dispatch = useDispatch();\n\n if (!missedDeadlines || missedGatedContent || hasEnded) {\n return null;\n }\n\n return (\n \n \n \n {intl.formatMessage(messages.missedDeadlines)}\n {' '}{intl.formatMessage(messages.shiftDatesBody)}\n \n \n dispatch(resetDeadlines(courseId, model, fetch))}\n >\n {intl.formatMessage(messages.shiftDatesButton)}\n \n \n \n \n );\n};\n\nShiftDatesAlert.propTypes = {\n fetch: PropTypes.func.isRequired,\n intl: intlShape.isRequired,\n model: PropTypes.string.isRequired,\n};\n\nexport default injectIntl(ShiftDatesAlert);\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport PropTypes from 'prop-types';\n\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport {\n Alert,\n Button,\n Row,\n Col,\n} from '@openedx/paragon';\n\nimport { useModel } from '../../generic/model-store';\nimport messages from './messages';\n\nconst UpgradeToShiftDatesAlert = ({ intl, logUpgradeLinkClick, model }) => {\n const {\n courseId,\n } = useSelector(state => state.courseHome);\n\n const {\n datesBannerInfo,\n hasEnded,\n } = useModel(model, courseId);\n\n const {\n contentTypeGatingEnabled,\n missedDeadlines,\n missedGatedContent,\n verifiedUpgradeLink,\n } = datesBannerInfo;\n\n if (!(contentTypeGatingEnabled && missedDeadlines && missedGatedContent && verifiedUpgradeLink) || hasEnded) {\n return null;\n }\n\n return (\n \n \n \n {intl.formatMessage(messages.missedDeadlines)}\n {' '}{intl.formatMessage(messages.upgradeToShiftBody)}\n \n \n {\n logUpgradeLinkClick();\n global.location.replace(verifiedUpgradeLink);\n }}\n >\n {intl.formatMessage(messages.upgradeToShiftButton)}\n \n \n \n \n );\n};\n\nUpgradeToShiftDatesAlert.propTypes = {\n intl: intlShape.isRequired,\n logUpgradeLinkClick: PropTypes.func,\n model: PropTypes.string.isRequired,\n};\n\nUpgradeToShiftDatesAlert.defaultProps = {\n logUpgradeLinkClick: () => {},\n};\n\nexport default injectIntl(UpgradeToShiftDatesAlert);\n","import PropTypes from 'prop-types';\nimport {\n generatePath, useParams, useLocation,\n} from 'react-router-dom';\nimport { getConfig } from '@edx/frontend-platform';\n\nimport queryString from 'query-string';\nimport { REDIRECT_MODES } from '../constants';\n\nconst RedirectPage = ({\n pattern, mode,\n}) => {\n const { courseId } = useParams();\n const location = useLocation();\n const { consentPath } = queryString.parse(location?.search);\n\n const {\n LMS_BASE_URL,\n ENTERPRISE_LEARNER_PORTAL_URL,\n } = getConfig();\n\n switch (mode) {\n case REDIRECT_MODES.DASHBOARD_REDIRECT:\n global.location.assign(`${LMS_BASE_URL}${pattern}${location?.search}`);\n break;\n case REDIRECT_MODES.ENTERPRISE_LEARNER_DASHBOARD_REDIRECT:\n global.location.assign(ENTERPRISE_LEARNER_PORTAL_URL);\n break;\n case REDIRECT_MODES.CONSENT_REDIRECT:\n global.location.assign(`${LMS_BASE_URL}${consentPath}`);\n break;\n case REDIRECT_MODES.HOME_REDIRECT:\n global.location.assign(generatePath(pattern, { courseId }));\n break;\n default:\n global.location.assign(`${LMS_BASE_URL}${generatePath(pattern, { courseId })}`);\n }\n\n return null;\n};\n\nRedirectPage.propTypes = {\n pattern: PropTypes.string,\n mode: PropTypes.string.isRequired,\n};\n\nRedirectPage.defaultProps = {\n pattern: null,\n};\n\nexport default RedirectPage;\n","import React from 'react';\nimport { Routes, Route } from 'react-router-dom';\nimport { FormattedMessage } from '@edx/frontend-platform/i18n';\nimport { PageWrap } from '@edx/frontend-platform/react';\n\nimport PageLoading from '../generic/PageLoading';\n\nimport DecodePageRoute from '../decode-page-route';\nimport { DECODE_ROUTES, REDIRECT_MODES, ROUTES } from '../constants';\nimport RedirectPage from './RedirectPage';\n\nconst CoursewareRedirectLandingPage = () => (\n
    \n \n )}\n />\n\n \n }\n />\n }\n />\n }\n />\n }\n />\n }\n />\n \n
    \n);\n\nexport default CoursewareRedirectLandingPage;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Dropdown } from '@openedx/paragon';\n\nimport {\n sendTrackingLogEvent,\n sendTrackEvent,\n} from '@edx/frontend-platform/analytics';\nimport { useNavigate } from 'react-router-dom';\n\nconst JumpNavMenuItem = ({\n title,\n courseId,\n currentSequence,\n currentUnit,\n sequences,\n isDefault,\n onClick,\n}) => {\n const navigate = useNavigate();\n\n function logEvent(targetUrl) {\n const eventName = 'edx.ui.lms.jump_nav.selected';\n const payload = {\n target_name: title,\n id: targetUrl,\n current_id: courseId,\n widget_placement: 'breadcrumb',\n };\n sendTrackEvent(eventName, payload);\n sendTrackingLogEvent(eventName, payload);\n }\n\n function destinationUrl() {\n if (isDefault) {\n return `/course/${courseId}/${currentSequence}/${currentUnit}`;\n }\n return `/course/${courseId}/${sequences[0].id}`;\n }\n function handleClick(e) {\n const url = destinationUrl();\n logEvent(url);\n navigate(url);\n if (onClick) { onClick(e); }\n }\n\n return (\n handleClick(e)}\n >\n {title}\n \n );\n};\n\nconst sequenceShape = PropTypes.shape({\n id: PropTypes.string.isRequired,\n});\n\nJumpNavMenuItem.defaultProps = {\n onClick: null,\n};\n\nJumpNavMenuItem.propTypes = {\n title: PropTypes.string.isRequired,\n sequences: PropTypes.arrayOf(sequenceShape).isRequired,\n isDefault: PropTypes.bool.isRequired,\n courseId: PropTypes.string.isRequired,\n currentSequence: PropTypes.string.isRequired,\n currentUnit: PropTypes.string.isRequired,\n onClick: PropTypes.func,\n};\n\nexport default JumpNavMenuItem;\n","import React, { useMemo, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { getConfig } from '@edx/frontend-platform';\nimport { FormattedMessage } from '@edx/frontend-platform/i18n';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faHome } from '@fortawesome/free-solid-svg-icons';\nimport { useSelector } from 'react-redux';\nimport { useToggle, ModalPopup, Menu } from '@openedx/paragon';\nimport { Link } from 'react-router-dom';\nimport { useModel, useModels } from '../../generic/model-store';\nimport JumpNavMenuItem from './JumpNavMenuItem';\n\nconst CourseBreadcrumb = ({\n content,\n withSeparator,\n courseId,\n sequenceId,\n unitId,\n isStaff,\n}) => {\n const defaultContent = content.filter(\n (destination) => destination.default,\n )[0] || { id: courseId, label: '', sequences: [] };\n\n const showRegularLink = getConfig().ENABLE_JUMPNAV !== 'true' || content.length < 2 || !isStaff;\n const [isOpen, open, close] = useToggle(false);\n const [target, setTarget] = useState(null);\n return (\n <>\n {withSeparator && (\n
  • /
  • \n )}\n\n \n {showRegularLink ? (\n \n {defaultContent.label}\n \n ) : (\n <>\n {\n // eslint-disable-next-line\n \n {defaultContent.label}\n \n }\n \n \n {content.map((item) => (\n \n ))}\n \n \n \n )}\n \n \n );\n};\nCourseBreadcrumb.propTypes = {\n content: PropTypes.arrayOf(\n PropTypes.shape({\n default: PropTypes.bool,\n id: PropTypes.string,\n label: PropTypes.string,\n }),\n ).isRequired,\n sequenceId: PropTypes.string,\n unitId: PropTypes.string,\n withSeparator: PropTypes.bool,\n courseId: PropTypes.string,\n isStaff: PropTypes.bool,\n};\n\nCourseBreadcrumb.defaultProps = {\n withSeparator: false,\n sequenceId: null,\n unitId: null,\n courseId: null,\n isStaff: null,\n};\n\nconst CourseBreadcrumbs = ({\n courseId,\n sectionId,\n sequenceId,\n unitId,\n isStaff,\n}) => {\n const course = useModel('coursewareMeta', courseId);\n const courseStatus = useSelector((state) => state.courseware.courseStatus);\n const sequenceStatus = useSelector(\n (state) => state.courseware.sequenceStatus,\n );\n\n const allSequencesInSections = Object.fromEntries(\n useModels('sections', course.sectionIds).map((section) => [\n section.id,\n {\n default: section.id === sectionId,\n title: section.title,\n sequences: useModels('sequences', section.sequenceIds),\n },\n ]),\n );\n\n const links = useMemo(() => {\n const chapters = [];\n const sequentials = [];\n if (courseStatus === 'loaded' && sequenceStatus === 'loaded') {\n Object.entries(allSequencesInSections).forEach(([id, section]) => {\n chapters.push({\n id,\n label: section.title,\n default: section.default,\n sequences: section.sequences,\n });\n if (section.default) {\n section.sequences.forEach((sequence) => {\n sequentials.push({\n id: sequence.id,\n label: sequence.title,\n default: sequence.id === sequenceId,\n sequences: [sequence],\n });\n });\n }\n });\n }\n return [chapters, sequentials];\n }, [courseStatus, sequenceStatus, allSequencesInSections]);\n\n return (\n \n );\n};\n\nCourseBreadcrumbs.propTypes = {\n courseId: PropTypes.string.isRequired,\n sectionId: PropTypes.string,\n sequenceId: PropTypes.string,\n unitId: PropTypes.string,\n isStaff: PropTypes.bool,\n};\n\nCourseBreadcrumbs.defaultProps = {\n sectionId: null,\n sequenceId: null,\n unitId: null,\n isStaff: null,\n};\n\nexport default CourseBreadcrumbs;\n","import React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faBookmark } from '@fortawesome/free-regular-svg-icons';\n\nconst BookmarkOutlineIcon = (props) => ;\n\nexport default BookmarkOutlineIcon;\n","import { getConfig } from '@edx/frontend-platform';\nimport { getAuthenticatedHttpClient, getAuthenticatedUser } from '@edx/frontend-platform/auth';\n\nexport const getBookmarksBaseUrl = () => `${getConfig().LMS_BASE_URL}/api/bookmarks/v1/bookmarks/`;\n\nexport async function createBookmark(usageId) {\n return getAuthenticatedHttpClient().post(getBookmarksBaseUrl(), { usage_id: usageId });\n}\n\nexport async function deleteBookmark(usageId) {\n const { username } = getAuthenticatedUser();\n return getAuthenticatedHttpClient().delete(`${getBookmarksBaseUrl()}${username},${usageId}/`);\n}\n","import React, { useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport { StatefulButton } from '@openedx/paragon';\nimport { FormattedMessage } from '@edx/frontend-platform/i18n';\nimport { useDispatch } from 'react-redux';\nimport BookmarkOutlineIcon from './BookmarkOutlineIcon';\nimport BookmarkFilledIcon from './BookmarkFilledIcon';\nimport { removeBookmark, addBookmark } from './data/thunks';\n\nconst addBookmarkLabel = (\n \n);\n\nconst hasBookmarkLabel = (\n \n);\n\nconst BookmarkButton = ({\n isBookmarked, isProcessing, unitId,\n}) => {\n const bookmarkState = isBookmarked ? 'bookmarked' : 'default';\n const state = isProcessing ? `${bookmarkState}Processing` : bookmarkState;\n\n const dispatch = useDispatch();\n const toggleBookmark = useCallback(() => {\n if (isBookmarked) {\n dispatch(removeBookmark(unitId));\n } else {\n dispatch(addBookmark(unitId));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isBookmarked, unitId]);\n\n return (\n ,\n defaultProcessing: ,\n bookmarked: ,\n bookmarkedProcessing: ,\n }}\n />\n );\n};\n\nBookmarkButton.propTypes = {\n unitId: PropTypes.string.isRequired,\n isBookmarked: PropTypes.bool,\n isProcessing: PropTypes.bool.isRequired,\n};\n\nBookmarkButton.defaultProps = {\n isBookmarked: false,\n};\n\nexport default BookmarkButton;\n","import { logError } from '@edx/frontend-platform/logging';\nimport {\n createBookmark,\n deleteBookmark,\n} from './api';\nimport { updateModel } from '../../../../generic/model-store';\n\nexport function addBookmark(unitId) {\n return async (dispatch) => {\n // Optimistically update the bookmarked flag.\n dispatch(updateModel({\n modelType: 'units',\n model: {\n id: unitId,\n bookmarked: true,\n bookmarkedUpdateState: 'loading',\n },\n }));\n\n try {\n await createBookmark(unitId);\n dispatch(updateModel({\n modelType: 'units',\n model: {\n id: unitId,\n bookmarked: true,\n bookmarkedUpdateState: 'loaded',\n },\n }));\n } catch (error) {\n logError(error);\n dispatch(updateModel({\n modelType: 'units',\n model: {\n id: unitId,\n bookmarked: false,\n bookmarkedUpdateState: 'failed',\n },\n }));\n }\n };\n}\n\nexport function removeBookmark(unitId) {\n return async (dispatch) => {\n // Optimistically update the bookmarked flag.\n dispatch(updateModel({\n modelType: 'units',\n model: {\n id: unitId,\n bookmarked: false,\n bookmarkedUpdateState: 'loading',\n },\n }));\n try {\n await deleteBookmark(unitId);\n dispatch(updateModel({\n modelType: 'units',\n model: {\n id: unitId,\n bookmarked: false,\n bookmarkedUpdateState: 'loaded',\n },\n }));\n } catch (error) {\n logError(error);\n dispatch(updateModel({\n modelType: 'units',\n model: {\n id: unitId,\n bookmarked: true,\n bookmarkedUpdateState: 'failed',\n },\n }));\n }\n };\n}\n","import React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faBookmark } from '@fortawesome/free-solid-svg-icons';\n\nconst BookmarkFilledIcon = (props) => ;\n\nexport default BookmarkFilledIcon;\n","import { createPortal } from 'react-dom';\nimport { useSelector } from 'react-redux';\nimport PropTypes from 'prop-types';\n\nimport { Xpert } from '@edx/frontend-lib-learning-assistant';\nimport { injectIntl } from '@edx/frontend-platform/i18n';\n\nimport { VERIFIED_MODES } from '@src/constants';\nimport { useModel } from '../../../generic/model-store';\n\nconst Chat = ({\n enabled,\n enrollmentMode,\n isStaff,\n courseId,\n contentToolsEnabled,\n unitId,\n}) => {\n const {\n activeAttempt, exam,\n } = useSelector(state => state.specialExams);\n const course = useModel('coursewareMeta', courseId);\n\n const hasVerifiedEnrollment = (\n enrollmentMode !== null\n && enrollmentMode !== undefined\n && VERIFIED_MODES.includes(enrollmentMode)\n );\n\n const validDates = () => {\n const date = new Date();\n const utcDate = date.toISOString();\n\n const startDate = course.start || utcDate;\n const endDate = course.end || utcDate;\n\n return (\n startDate <= utcDate\n && utcDate <= endDate\n );\n };\n\n const shouldDisplayChat = (\n enabled\n && (hasVerifiedEnrollment || isStaff) // display only to verified learners or staff\n && validDates()\n // it is necessary to check both whether the user is in an exam, and whether or not they are viewing an exam\n // this will prevent the learner from interacting with the tool at any point of the exam flow, even at the\n // entrance interstitial.\n && !(activeAttempt?.attempt_id || exam?.id)\n );\n\n return (\n <>\n {/* Use a portal to ensure that component overlay does not compete with learning MFE styles. */}\n {shouldDisplayChat && (createPortal(\n ,\n document.body,\n ))}\n \n );\n};\n\nChat.propTypes = {\n isStaff: PropTypes.bool.isRequired,\n enabled: PropTypes.bool.isRequired,\n enrollmentMode: PropTypes.string,\n courseId: PropTypes.string.isRequired,\n contentToolsEnabled: PropTypes.bool.isRequired,\n unitId: PropTypes.string.isRequired,\n};\n\nChat.defaultProps = {\n enrollmentMode: null,\n};\n\nexport default injectIntl(Chat);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useSelector } from 'react-redux';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { getAuthenticatedUser } from '@edx/frontend-platform/auth';\nimport {\n FormattedMessage, injectIntl, intlShape,\n} from '@edx/frontend-platform/i18n';\nimport { Hyperlink } from '@openedx/paragon';\nimport { faSearch } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\n\nimport { useModel } from '../../../generic/model-store';\n\nimport messages from './messages';\nimport { logClick } from './utils';\n\nconst CatalogSuggestion = ({ intl, variant }) => {\n const { courseId } = useSelector(state => state.courseware);\n const { org } = useModel('courseHomeMeta', courseId);\n const { administrator } = getAuthenticatedUser();\n\n const searchOurCatalogLink = (\n logClick(org, courseId, administrator, 'catalog_search', { variant })}\n >\n {intl.formatMessage(messages.searchOurCatalogLink)}\n \n );\n\n return (\n
    \n
    \n  \n \n
    \n
    \n );\n};\n\nCatalogSuggestion.propTypes = {\n intl: intlShape.isRequired,\n variant: PropTypes.string.isRequired,\n};\n\nexport default injectIntl(CatalogSuggestion);\n","import React, { useEffect } from 'react';\n\nimport { getAuthenticatedUser } from '@edx/frontend-platform/auth';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Helmet } from 'react-helmet';\nimport { useSelector } from 'react-redux';\nimport { Alert, Button } from '@openedx/paragon';\nimport { getConfig } from '@edx/frontend-platform';\n\nimport { useModel } from '../../../generic/model-store';\n\nimport CatalogSuggestion from './CatalogSuggestion';\nimport DashboardFootnote from './DashboardFootnote';\nimport messages from './messages';\nimport { logClick, logVisit } from './utils';\n\nconst CourseInProgress = ({ intl }) => {\n const { courseId } = useSelector(state => state.courseware);\n const {\n org,\n tabs,\n title,\n } = useModel('courseHomeMeta', courseId);\n const { administrator } = getAuthenticatedUser();\n\n // Get dates tab link for 'view course schedule' button\n const datesTab = tabs.find(tab => tab.slug === 'dates');\n const datesTabLink = datesTab && datesTab.url;\n\n useEffect(() => logVisit(org, courseId, administrator, 'in_progress'), [org, courseId, administrator]);\n\n return (\n <>\n \n {`${intl.formatMessage(messages.endOfCourseTitle)} | ${title} | ${getConfig().SITE_NAME}`}\n \n
    \n
    \n { intl.formatMessage(messages.courseInProgressHeader) }\n
    \n \n
    \n
    { intl.formatMessage(messages.courseInProgressDescription) }
    \n {datesTabLink && (\n logClick(org, courseId, administrator, 'view_dates_tab')}\n >\n {intl.formatMessage(messages.viewCourseScheduleButton)}\n \n )}\n
    \n
    \n \n \n
    \n \n );\n};\n\nCourseInProgress.propTypes = {\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(CourseInProgress);\n","import React, { useEffect } from 'react';\n\nimport { getAuthenticatedUser } from '@edx/frontend-platform/auth';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Helmet } from 'react-helmet';\nimport { useSelector } from 'react-redux';\nimport { Alert, Button } from '@openedx/paragon';\nimport { getConfig } from '@edx/frontend-platform';\n\nimport { useModel } from '../../../generic/model-store';\n\nimport CatalogSuggestion from './CatalogSuggestion';\nimport DashboardFootnote from './DashboardFootnote';\nimport messages from './messages';\nimport { logClick, logVisit } from './utils';\n\nconst CourseNonPassing = ({ intl }) => {\n const { courseId } = useSelector(state => state.courseware);\n const {\n org,\n tabs,\n title,\n } = useModel('courseHomeMeta', courseId);\n const { administrator } = getAuthenticatedUser();\n\n // Get progress tab link for 'view grades' button\n const progressTab = tabs.find(tab => tab.slug === 'progress');\n const progressLink = progressTab && progressTab.url;\n\n useEffect(() => logVisit(org, courseId, administrator, 'nonpassing'), [org, courseId, administrator]);\n\n return (\n <>\n \n {`${intl.formatMessage(messages.endOfCourseTitle)} | ${title} | ${getConfig().SITE_NAME}`}\n \n
    \n
    \n { intl.formatMessage(messages.endOfCourseHeader) }\n
    \n \n
    \n
    { intl.formatMessage(messages.endOfCourseDescription) }
    \n {progressLink && (\n logClick(org, courseId, administrator, 'view_grades')}\n >\n {intl.formatMessage(messages.viewGradesButton)}\n \n )}\n
    \n
    \n \n \n
    \n \n );\n};\n\nCourseNonPassing.propTypes = {\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(CourseNonPassing);\n","/* eslint-disable react/jsx-no-useless-fragment */\nimport React, { useEffect } from 'react';\nimport { getConfig } from '@edx/frontend-platform';\nimport { sendTrackEvent } from '@edx/frontend-platform/analytics';\nimport { getAuthenticatedUser } from '@edx/frontend-platform/auth';\nimport {\n FormattedMessage, injectIntl, intlShape, defineMessages,\n} from '@edx/frontend-platform/i18n';\nimport { useSelector, useDispatch } from 'react-redux';\nimport {\n Hyperlink, DataTable, CardView, Card,\n} from '@openedx/paragon';\nimport PropTypes from 'prop-types';\nimport truncate from 'truncate-html';\nimport { useModel } from '../../../generic/model-store';\nimport fetchCourseRecommendations from './data/thunks';\nimport { FAILED, LOADED, LOADING } from './data/slice';\nimport CatalogSuggestion from './CatalogSuggestion';\nimport PageLoading from '../../../generic/PageLoading';\nimport { logClick } from './utils';\n\nconst messages = defineMessages({\n recommendationsHeading: {\n id: 'courseCelebration.recommendations.heading',\n description: 'Header for recommendations section of course celebration',\n defaultMessage: 'Keep building your skills with these courses!',\n },\n recommendationsCourseFooter: {\n id: 'courseCelebration.recommendations.label', // not very descriptive, but is historical\n description: 'Label on a discovery-card that lets a user know that it is a course card',\n defaultMessage: 'Course',\n },\n listJoin: {\n id: 'courseCelebration.recommendations.formatting.list_join',\n description: 'Joining mark or word for a list of items, use the {sp} placeholder to include space before the joining word',\n // eslint-disable-next-line prefer-template\n defaultMessage: ('{style, select, '\n + 'punctuation {, } ' // HACK: select keys must match ListStyles, above, but must be statically coded for extract\n + 'conjunction { {sp}and } ' // HACK: interpolating a space character to get a leading-space here\n + 'other { }}'),\n },\n browseCatalog: {\n id: 'courseCelebration.recommendations.browse_catalog',\n description: 'Link to course catalog in course celebration',\n defaultMessage: 'Explore more courses',\n },\n loadingRecommendations: {\n id: 'courseCelebration.recommendations.loading_recommendations',\n description: 'Screen-reader text for the loading screen for recommendations',\n defaultMessage: 'Loading recommendations',\n },\n});\n\nconst ListStyles = {\n punctuation: 'punctuation',\n conjunction: 'conjunction',\n};\n\nconst CourseCard = ({\n original: {\n title,\n image,\n owners,\n marketingUrl,\n onClick,\n },\n intl,\n}) => {\n const formatList = (items, style) => (\n items.join(intl.formatMessage(\n messages.listJoin,\n { style, sp: ' ' }, // HACK: there isn't a way to escape a leading space in the format, so pass one in\n ))\n );\n\n const formattedOwners = formatList(\n owners.map(owner => owner.key),\n ListStyles.punctuation,\n intl,\n );\n\n const subtitle = (\n {text => (\n <>\n {text}: \n {truncate(formattedOwners, 40, { reserveLastWord: -1 })}\n \n )}\n \n );\n\n return (\n \n \n \n \n \n {/* Section is needed for internal vertical spacing to work out. If you can remove, be my guest */}\n <> \n <>\n \n \n
    \n );\n};\n\nCourseCard.propTypes = {\n original: PropTypes.shape({\n marketingUrl: PropTypes.string,\n title: PropTypes.string,\n image: PropTypes.shape({\n src: PropTypes.string,\n }),\n owners: PropTypes.arrayOf(PropTypes.shape({\n key: PropTypes.string,\n })),\n onClick: PropTypes.func,\n }).isRequired,\n intl: intlShape.isRequired,\n};\n\nconst IntlCard = injectIntl(CourseCard);\n\nconst CourseRecommendations = ({ intl, variant }) => {\n const { courseId, recommendationsStatus } = useSelector(state => ({ ...state.recommendations, ...state.courseware }));\n const { recommendations } = useModel('coursewareMeta', courseId);\n const { org, number } = useModel('courseHomeMeta', courseId);\n const dispatch = useDispatch();\n\n const courseKey = `${org}+${number}`;\n const { administrator } = getAuthenticatedUser();\n\n useEffect(() => {\n dispatch(fetchCourseRecommendations(courseKey, courseId));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dispatch]);\n\n const recommendationsLength = recommendations ? recommendations.length : 0;\n\n if (recommendationsStatus && recommendationsStatus !== LOADING) {\n sendTrackEvent('edx.ui.lms.course_exit.recommendations.viewed', {\n course_key: courseKey,\n recommendations_status: recommendationsStatus,\n recommendations_length: recommendationsLength,\n });\n }\n\n if (recommendationsStatus === FAILED || (recommendationsStatus === LOADED && recommendationsLength < 2)) {\n return ();\n }\n\n if (recommendationsStatus === LOADING) {\n return ;\n }\n\n const onCardClick = (url) => (e) => {\n e.preventDefault();\n logClick(org, courseId, administrator, 'recommendation_discovery_card');\n setTimeout(() => {\n window.location.href = url;\n }, (200));\n };\n\n const recommendationData = recommendations.map((recommendation) => (\n { ...recommendation, onClick: onCardClick(recommendation.marketingUrl) }\n ));\n\n return (\n
    \n

    {intl.formatMessage(messages.recommendationsHeading)}

    \n
    \n \n \n \n
    \n \n {intl.formatMessage(messages.browseCatalog)}\n \n
    \n );\n};\n\nCourseRecommendations.propTypes = {\n intl: intlShape.isRequired,\n variant: PropTypes.string.isRequired,\n};\n\nexport default injectIntl(CourseRecommendations);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useSelector } from 'react-redux';\n\nimport { getAuthenticatedUser } from '@edx/frontend-platform/auth';\nimport {\n FormattedMessage, injectIntl, intlShape,\n} from '@edx/frontend-platform/i18n';\nimport { Hyperlink } from '@openedx/paragon';\nimport { faCalendarAlt } from '@fortawesome/free-regular-svg-icons';\nimport { getConfig } from '@edx/frontend-platform';\n\nimport { useModel } from '../../../generic/model-store';\n\nimport Footnote from './Footnote';\nimport messages from './messages';\nimport { logClick } from './utils';\n\nconst DashboardFootnote = ({ intl, variant }) => {\n const { courseId } = useSelector(state => state.courseware);\n const { org } = useModel('courseHomeMeta', courseId);\n const { administrator } = getAuthenticatedUser();\n\n const dashboardLink = (\n logClick(org, courseId, administrator, 'dashboard_footnote', { variant })}\n >\n {intl.formatMessage(messages.dashboardLink)}\n \n );\n\n return (\n \n )}\n />\n );\n};\n\nDashboardFootnote.propTypes = {\n intl: intlShape.isRequired,\n variant: PropTypes.string.isRequired,\n};\n\nexport default injectIntl(DashboardFootnote);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\n\nconst Footnote = ({ icon, text }) => (\n
    \n

    \n  \n {text}\n

    \n
    \n);\n\nFootnote.propTypes = {\n icon: PropTypes.shape({}).isRequired,\n text: PropTypes.node.isRequired,\n};\n\nexport default Footnote;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { FormattedMessage, injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Alert, Button, Hyperlink } from '@openedx/paragon';\nimport certImage from '../../../generic/assets/edX_certificate.png';\nimport messages from './messages';\n\n/**\n * Note for Open edX developers:\n * There are pieces of this component that are hard-coded and specific to edX that may not apply to your organization.\n * This includes mentions of our edX program types (MicroMasters, MicroBachelors, Professional Certificate, and\n * XSeries), along with their respective support article URLs and image variable names.\n *\n * Currently, this component will not render unless the learner's completed course has a related program of one of the\n * four aforementioned types. This will not impact the parent components (i.e. CourseCelebration will render normally).\n */\n\nconst programTypes = ['microbachelors', 'micromasters', 'professional-certificate', 'xseries'];\n\nconst ProgramCompletion = ({\n intl,\n progress,\n title,\n type,\n url,\n}) => {\n if (!programTypes.includes(type) || progress.notStarted !== 0 || progress.inProgress !== 0) {\n return null;\n }\n\n const programLink = (\n \n {intl.formatMessage(messages.dashboardLink)}\n \n );\n\n return (\n \n
    \n
    \n
    {intl.formatMessage(messages.programsLastCourseHeader, { title })}
    \n

    \n \n

    \n {type === 'microbachelors' && (\n <>\n

    \n \n {intl.formatMessage(messages.microBachelorsLearnMore)}\n \n

    \n \n \n )}\n {type === 'micromasters' && (\n

    \n {intl.formatMessage(messages.microMastersMessage)}\n {' '}\n \n {intl.formatMessage(messages.microMastersLearnMore)}\n \n

    \n )}\n
    \n
    \n \n
    \n
    \n
    \n );\n};\n\nProgramCompletion.propTypes = {\n intl: intlShape.isRequired,\n progress: PropTypes.shape({\n completed: PropTypes.number.isRequired,\n inProgress: PropTypes.number.isRequired,\n notStarted: PropTypes.number.isRequired,\n }).isRequired,\n title: PropTypes.string.isRequired,\n type: PropTypes.string.isRequired,\n url: PropTypes.string.isRequired,\n};\n\nexport default injectIntl(ProgramCompletion);\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport PropTypes from 'prop-types';\n\nimport { getAuthenticatedUser } from '@edx/frontend-platform/auth';\nimport {\n FormattedDate, FormattedMessage, injectIntl, intlShape,\n} from '@edx/frontend-platform/i18n';\nimport { Hyperlink } from '@openedx/paragon';\nimport { faCalendarAlt } from '@fortawesome/free-regular-svg-icons';\n\nimport Footnote from './Footnote';\nimport { logClick } from './utils';\nimport messages from './messages';\nimport { useModel } from '../../../generic/model-store';\n\nconst UpgradeFootnote = ({ deadline, href, intl }) => {\n const { courseId } = useSelector(state => state.courseware);\n const { org } = useModel('courseHomeMeta', courseId);\n const { administrator } = getAuthenticatedUser();\n\n const upgradeLink = (\n logClick(org, courseId, administrator, 'upgrade_footnote')}\n >\n {intl.formatMessage(messages.upgradeLink)}\n \n );\n\n const expirationDate = (\n \n );\n\n return (\n \n )}\n />\n );\n};\n\nUpgradeFootnote.propTypes = {\n deadline: PropTypes.instanceOf(Date).isRequired,\n href: PropTypes.string.isRequired,\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(UpgradeFootnote);\n","import React, { useContext } from 'react';\n\nimport SidebarContext from './SidebarContext';\nimport { SIDEBARS } from './sidebars';\n\nconst Sidebar = () => {\n const { currentSidebar, isDiscussionbarAvailable, isNotificationbarAvailable } = useContext(SidebarContext);\n\n if (currentSidebar === null || (!isDiscussionbarAvailable && !isNotificationbarAvailable)\n || !SIDEBARS[currentSidebar]) { return null; }\n const SidebarToRender = SIDEBARS[currentSidebar].Sidebar;\n\n return (\n \n );\n};\n\nexport default Sidebar;\n","import React, {\n useCallback, useEffect, useMemo, useState,\n} from 'react';\nimport PropTypes from 'prop-types';\n\nimport isEmpty from 'lodash/isEmpty';\n\nimport { breakpoints, useWindowSize } from '@openedx/paragon';\n\nimport { getLocalStorage, setLocalStorage } from '../../../data/localStorage';\nimport { useModel } from '../../../generic/model-store';\nimport { WIDGETS } from '../../../constants';\nimport SidebarContext from './SidebarContext';\nimport { SIDEBARS } from './sidebars';\n\nconst SidebarProvider = ({\n courseId,\n unitId,\n children,\n}) => {\n const { verifiedMode } = useModel('courseHomeMeta', courseId);\n const topic = useModel('discussionTopics', unitId);\n const shouldDisplayFullScreen = useWindowSize().width < breakpoints.large.minWidth;\n const shouldDisplaySidebarOpen = useWindowSize().width > breakpoints.medium.minWidth;\n const query = new URLSearchParams(window.location.search);\n const isInitiallySidebarOpen = shouldDisplaySidebarOpen || query.get('sidebar') === 'true';\n const sidebarKey = `sidebar.${courseId}`;\n\n let initialSidebar = shouldDisplayFullScreen && sidebarKey in localStorage ? getLocalStorage(sidebarKey)\n : SIDEBARS.DISCUSSIONS_NOTIFICATIONS.ID;\n\n if (!shouldDisplayFullScreen && isInitiallySidebarOpen) {\n initialSidebar = SIDEBARS.DISCUSSIONS_NOTIFICATIONS.ID;\n }\n const [currentSidebar, setCurrentSidebar] = useState(initialSidebar);\n const [notificationStatus, setNotificationStatus] = useState(getLocalStorage(`notificationStatus.${courseId}`));\n const [hideDiscussionbar, setHideDiscussionbar] = useState(false);\n const [hideNotificationbar, setHideNotificationbar] = useState(false);\n const [upgradeNotificationCurrentState, setUpgradeNotificationCurrentState] = useState(\n getLocalStorage(`upgradeNotificationCurrentState.${courseId}`),\n );\n const isDiscussionbarAvailable = (topic?.id && topic?.enabledInContext) || false;\n const isNotificationbarAvailable = !isEmpty(verifiedMode);\n\n const onNotificationSeen = useCallback(() => {\n setNotificationStatus('inactive');\n setLocalStorage(`notificationStatus.${courseId}`, 'inactive');\n }, [courseId]);\n\n useEffect(() => {\n setHideDiscussionbar(!isDiscussionbarAvailable);\n setHideNotificationbar(!isNotificationbarAvailable);\n if (initialSidebar && currentSidebar !== initialSidebar) {\n setCurrentSidebar(SIDEBARS.DISCUSSIONS_NOTIFICATIONS.ID);\n }\n }, [unitId, topic]);\n\n useEffect(() => {\n if (hideDiscussionbar && hideNotificationbar) {\n setCurrentSidebar(null);\n }\n }, [hideDiscussionbar, hideNotificationbar]);\n\n useEffect(() => {\n setCurrentSidebar(initialSidebar);\n }, [shouldDisplaySidebarOpen, initialSidebar]);\n\n const handleWidgetToggle = useCallback((widgetId, sidebarId) => {\n setHideDiscussionbar(prevWidgetId => (widgetId === WIDGETS.DISCUSSIONS ? true : prevWidgetId));\n setHideNotificationbar(prevWidgetId => (widgetId === WIDGETS.NOTIFICATIONS ? true : prevWidgetId));\n setLocalStorage(sidebarKey, sidebarId);\n }, []);\n\n const handleSidebarToggle = useCallback((sidebarId) => {\n setCurrentSidebar(prevSidebar => (sidebarId === prevSidebar ? null : sidebarId));\n setHideDiscussionbar(!isDiscussionbarAvailable);\n setHideNotificationbar(!isNotificationbarAvailable);\n setLocalStorage(sidebarKey, sidebarId === currentSidebar ? null : sidebarId);\n }, [currentSidebar, isDiscussionbarAvailable, isNotificationbarAvailable]);\n\n const clearSidebarKeyIfWidgetsUnavailable = useCallback((widgetId) => {\n if (((!isNotificationbarAvailable || hideNotificationbar) && widgetId === WIDGETS.DISCUSSIONS)\n || ((!isDiscussionbarAvailable || hideDiscussionbar) && widgetId === WIDGETS.NOTIFICATIONS)) {\n setLocalStorage(sidebarKey, null);\n }\n }, [isDiscussionbarAvailable, isNotificationbarAvailable, hideDiscussionbar, hideNotificationbar]);\n\n const toggleSidebar = useCallback((sidebarId = null, widgetId = null) => {\n if (widgetId) {\n handleWidgetToggle(widgetId, sidebarId);\n } else {\n handleSidebarToggle(sidebarId);\n }\n\n clearSidebarKeyIfWidgetsUnavailable(widgetId);\n }, [handleWidgetToggle, handleSidebarToggle, clearSidebarKeyIfWidgetsUnavailable]);\n\n const contextValue = useMemo(() => ({\n toggleSidebar,\n onNotificationSeen,\n setNotificationStatus,\n currentSidebar,\n notificationStatus,\n upgradeNotificationCurrentState,\n setUpgradeNotificationCurrentState,\n shouldDisplaySidebarOpen,\n shouldDisplayFullScreen,\n courseId,\n unitId,\n hideDiscussionbar,\n hideNotificationbar,\n isNotificationbarAvailable,\n isDiscussionbarAvailable,\n }), [courseId, currentSidebar, notificationStatus, onNotificationSeen, shouldDisplayFullScreen,\n shouldDisplaySidebarOpen, toggleSidebar, unitId, upgradeNotificationCurrentState, hideDiscussionbar,\n hideNotificationbar, isNotificationbarAvailable, isDiscussionbarAvailable]);\n\n return (\n \n {children}\n \n );\n};\n\nSidebarProvider.propTypes = {\n courseId: PropTypes.string.isRequired,\n unitId: PropTypes.string.isRequired,\n children: PropTypes.node,\n};\n\nSidebarProvider.defaultProps = {\n children: null,\n};\n\nexport default SidebarProvider;\n","import React, { useContext } from 'react';\n\nimport SidebarContext from './SidebarContext';\nimport { SIDEBAR_ORDER, SIDEBARS } from './sidebars';\n\nconst SidebarTriggers = () => {\n const { toggleSidebar } = useContext(SidebarContext);\n\n return (\n
    \n {SIDEBAR_ORDER.map((sidebarId) => {\n const { Trigger } = SIDEBARS[sidebarId];\n return (\n toggleSidebar(sidebarId)} key={sidebarId} />\n );\n })}\n
    \n );\n};\n\nexport default SidebarTriggers;\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n 'learn.honorCode.name': {\n id: 'learn.honorCode.name',\n defaultMessage: 'Honor Code',\n description: 'Honor code name.',\n },\n 'learn.honorCode.cancel': {\n id: 'learn.honorCode.cancel',\n defaultMessage: 'Cancel',\n description: '\"Cancel\" button.',\n },\n 'learn.honorCode.agree': {\n id: 'learn.honorCode.agree',\n defaultMessage: 'I agree',\n description: '\"I agree\" button.',\n },\n});\n\nexport default messages;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useDispatch } from 'react-redux';\nimport { getConfig } from '@edx/frontend-platform';\nimport { getAuthenticatedUser } from '@edx/frontend-platform/auth';\nimport { FormattedMessage, injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { ActionRow, Alert, Button } from '@openedx/paragon';\n\nimport { useNavigate } from 'react-router-dom';\nimport { useModel } from '../../../../generic/model-store';\nimport { saveIntegritySignature } from '../../../data';\nimport messages from './messages';\n\nconst HonorCode = ({ intl, courseId }) => {\n const navigate = useNavigate();\n const dispatch = useDispatch();\n const {\n isMasquerading,\n username,\n } = useModel('courseHomeMeta', courseId);\n const authUser = getAuthenticatedUser();\n const siteName = getConfig().SITE_NAME;\n const honorCodeUrl = `${getConfig().TERMS_OF_SERVICE_URL}#honor-code`;\n\n const handleCancel = () => navigate(`/course/${courseId}/home`);\n\n const handleAgree = () => dispatch(\n // If the request is made by a staff user masquerading as a specific learner,\n // don't actually create a signature for them on the backend.\n // Only the modal dialog will be dismissed.\n // Otherwise, even for staff users, we want to record the signature.\n saveIntegritySignature(\n courseId,\n isMasquerading && username !== authUser.username,\n ),\n );\n\n return (\n \n

    \n {siteName}{' '}\n {intl.formatMessage(messages['learn.honorCode.name'])}\n

    \n\n

    \n {intl.formatMessage(messages['learn.honorCode.name'])},\n }}\n description=\"This is shown to learner, when course author wants to learners to explicity agree on their (Term of use or conduct), hence it links honor code page. \"\n />\n

    \n\n \n \n \n \n \n
    \n );\n};\n\nHonorCode.propTypes = {\n intl: intlShape.isRequired,\n courseId: PropTypes.string.isRequired,\n};\n\nexport default injectIntl(HonorCode);\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n 'learn.lockPaywall.title': {\n id: 'learn.lockPaywall.title',\n defaultMessage: 'Graded assignments are locked',\n description: 'Heading for message shown to indicate that a piece of content is unavailable to audit track users.',\n },\n 'learn.lockPaywall.content': {\n id: 'learn.lockPaywall.content',\n defaultMessage: 'Upgrade to gain access to locked features like this one and get the most out of your course.',\n description: 'Message shown to indicate that a piece of content is unavailable to audit track users.',\n },\n 'learn.lockPaywall.content.pastExpiration': {\n id: 'learn.lockPaywall.content.pastExpiration',\n defaultMessage: 'The upgrade deadline for this course passed. To upgrade, enroll in the next available session. ',\n description: 'Message shown to indicate that a piece of content is unavailable to audit track users in a course where the expiration deadline has passed.',\n },\n 'learn.lockPaywall.courseDetails': {\n id: 'learn.lockPaywall.courseDetails',\n defaultMessage: 'View Course Details',\n description: 'Link to the course details page for this course with a past expiration date.',\n },\n 'learn.lockPaywall.example.alt': {\n id: 'learn.lockPaywall.example.alt',\n defaultMessage: 'Example Certificate',\n description: 'Alternate text displayed when the example certificate image cannot be displayed.',\n },\n 'learn.lockPaywall.list.intro': {\n id: 'learn.lockPaywall.list.intro',\n defaultMessage: 'When you upgrade, you:',\n description: 'Text displayed to introduce the list of benefits from upgrading.',\n },\n});\n\nexport default messages;\n","import React, { useContext } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { sendTrackEvent } from '@edx/frontend-platform/analytics';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport {\n Alert, Hyperlink, breakpoints, useWindowSize,\n} from '@openedx/paragon';\nimport { Locked } from '@openedx/paragon/icons';\nimport SidebarContext from '../../sidebar/SidebarContext';\nimport messages from './messages';\nimport certificateLocked from '../../../../generic/assets/edX_locked_certificate.png';\nimport { useModel } from '../../../../generic/model-store';\nimport { UpgradeButton } from '../../../../generic/upgrade-button';\nimport {\n VerifiedCertBullet,\n UnlockGradedBullet,\n FullAccessBullet,\n SupportMissionBullet,\n} from '../../../../generic/upsell-bullets/UpsellBullets';\n\nconst LockPaywall = ({\n intl,\n courseId,\n}) => {\n const { notificationTrayVisible } = useContext(SidebarContext);\n const course = useModel('coursewareMeta', courseId);\n const {\n accessExpiration,\n marketingUrl,\n offer,\n } = course;\n\n const {\n org, verifiedMode,\n } = useModel('courseHomeMeta', courseId);\n\n // the following variables are set and used for resposive layout to work with\n // whether the NotificationTray is open or not and if there's an offer with longer text\n const shouldDisplayBulletPointsBelowCertificate = useWindowSize().width <= breakpoints.large.minWidth;\n const shouldDisplayGatedContentOneColumn = useWindowSize().width <= breakpoints.extraLarge.minWidth\n && notificationTrayVisible;\n const shouldDisplayGatedContentTwoColumns = useWindowSize().width < breakpoints.large.minWidth\n && notificationTrayVisible;\n const shouldDisplayGatedContentTwoColumnsHalf = useWindowSize().width <= breakpoints.large.minWidth\n && !notificationTrayVisible;\n const shouldWrapTextOnButton = useWindowSize().width > breakpoints.extraSmall.minWidth;\n\n const accessExpirationDate = accessExpiration ? new Date(accessExpiration.expirationDate) : null;\n const pastExpirationDeadline = accessExpiration ? new Date(Date.now()) > accessExpirationDate : false;\n\n if (!verifiedMode) {\n return null;\n }\n\n const eventProperties = {\n org_key: org,\n courserun_key: courseId,\n };\n\n const logClick = () => {\n sendTrackEvent('edx.bi.ecommerce.upsell_links_clicked', {\n ...eventProperties,\n linkCategory: '(none)',\n linkName: 'in_course_upgrade',\n linkType: 'link',\n pageName: 'in_course',\n });\n };\n\n const logClickPastExpiration = () => {\n sendTrackEvent('edx.bi.ecommerce.gated_content.past_expiration.link_clicked', {\n ...eventProperties,\n linkCategory: 'gated_content',\n linkName: 'course_details',\n linkType: 'link',\n pageName: 'in_course',\n });\n };\n\n return (\n \n
    \n
    \n

    \n {intl.formatMessage(messages['learn.lockPaywall.title'])}\n

    \n {pastExpirationDeadline ? (\n
    \n {intl.formatMessage(messages['learn.lockPaywall.content.pastExpiration'])}\n {intl.formatMessage(messages['learn.lockPaywall.courseDetails'])}\n
    \n ) : (\n
    \n {intl.formatMessage(messages['learn.lockPaywall.content'])}\n
    \n )}\n\n
    \n
    \n \n
    \n\n
    \n
    \n {intl.formatMessage(messages['learn.lockPaywall.list.intro'])}\n
    \n
      \n \n \n \n \n
    \n
    \n
    \n
    \n\n {pastExpirationDeadline\n ? null\n : (\n \n \n
    \n )}\n \n
    \n );\n};\nLockPaywall.propTypes = {\n intl: intlShape.isRequired,\n courseId: PropTypes.string.isRequired,\n};\nexport default injectIntl(LockPaywall);\n","import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { PluginSlot } from '@openedx/frontend-plugin-framework';\n\nimport { useModel } from '@src/generic/model-store';\nimport PageLoading from '@src/generic/PageLoading';\n\nimport messages from '../messages';\nimport HonorCode from '../honor-code';\nimport LockPaywall from '../lock-paywall';\nimport * as hooks from './hooks';\nimport { modelKeys } from './constants';\n\nconst UnitSuspense = ({\n courseId,\n id,\n}) => {\n const { formatMessage } = useIntl();\n const shouldDisplayHonorCode = hooks.useShouldDisplayHonorCode({ courseId, id });\n const unit = useModel(modelKeys.units, id);\n const meta = useModel(modelKeys.coursewareMeta, courseId);\n const shouldDisplayContentGating = (\n meta.contentTypeGatingEnabled && unit.containsContentTypeGatedContent\n );\n\n return (\n <>\n {shouldDisplayContentGating && (\n }>\n \n \n \n \n )}\n {shouldDisplayHonorCode && (\n }>\n \n \n )}\n \n );\n};\n\nUnitSuspense.propTypes = {\n courseId: PropTypes.string.isRequired,\n id: PropTypes.string.isRequired,\n};\n\nexport default UnitSuspense;\n","import { useContext } from 'react';\n\nimport SidebarContext from './SidebarContext';\nimport { SIDEBARS } from './sidebars';\n\nconst Sidebar = () => {\n const { currentSidebar } = useContext(SidebarContext);\n\n if (!currentSidebar || !SIDEBARS[currentSidebar]) {\n return null;\n }\n\n const SidebarToRender = SIDEBARS[currentSidebar].Sidebar;\n\n return (\n \n );\n};\n\nexport default Sidebar;\n","import { breakpoints, useWindowSize } from '@openedx/paragon';\nimport PropTypes from 'prop-types';\nimport { useSelector } from 'react-redux';\nimport {\n useEffect, useState, useMemo, useCallback,\n} from 'react';\n\nimport { useModel } from '@src/generic/model-store';\nimport { getLocalStorage, setLocalStorage } from '@src/data/localStorage';\nimport { getCoursewareOutlineSidebarSettings } from '../../data/selectors';\n\nimport * as discussionsSidebar from './sidebars/discussions';\nimport * as notificationsSidebar from './sidebars/notifications';\nimport SidebarContext from './SidebarContext';\nimport { SIDEBARS } from './sidebars';\n\nconst SidebarProvider = ({\n courseId,\n unitId,\n children,\n}) => {\n const { verifiedMode } = useModel('courseHomeMeta', courseId);\n const topic = useModel('discussionTopics', unitId);\n const isUnitHasDiscussionTopics = topic?.id && topic?.enabledInContext;\n const shouldDisplayFullScreen = useWindowSize().width < breakpoints.extraLarge.minWidth;\n const shouldDisplaySidebarOpen = useWindowSize().width > breakpoints.extraLarge.minWidth;\n const query = new URLSearchParams(window.location.search);\n const { alwaysOpenAuxiliarySidebar } = useSelector(getCoursewareOutlineSidebarSettings);\n const isInitiallySidebarOpen = shouldDisplaySidebarOpen || query.get('sidebar') === 'true';\n\n let initialSidebar = shouldDisplayFullScreen ? getLocalStorage(`sidebar.${courseId}`) : null;\n if (!shouldDisplayFullScreen && isInitiallySidebarOpen && alwaysOpenAuxiliarySidebar) {\n initialSidebar = isUnitHasDiscussionTopics\n ? SIDEBARS[discussionsSidebar.ID].ID\n : verifiedMode && SIDEBARS[notificationsSidebar.ID].ID;\n }\n const [currentSidebar, setCurrentSidebar] = useState(initialSidebar);\n const [notificationStatus, setNotificationStatus] = useState(getLocalStorage(`notificationStatus.${courseId}`));\n const [upgradeNotificationCurrentState, setUpgradeNotificationCurrentState] = useState(getLocalStorage(`upgradeNotificationCurrentState.${courseId}`));\n\n useEffect(() => {\n if (initialSidebar && currentSidebar !== initialSidebar) {\n setCurrentSidebar(initialSidebar);\n }\n }, [unitId, topic]);\n\n useEffect(() => {\n if (initialSidebar) {\n setCurrentSidebar(initialSidebar);\n }\n }, [shouldDisplaySidebarOpen]);\n\n const onNotificationSeen = useCallback(() => {\n setNotificationStatus('inactive');\n setLocalStorage(`notificationStatus.${courseId}`, 'inactive');\n }, [courseId]);\n\n const toggleSidebar = useCallback((sidebarId) => {\n // Switch to new sidebar or hide the current sidebar\n const newSidebar = sidebarId === currentSidebar ? null : sidebarId;\n setCurrentSidebar(newSidebar);\n setLocalStorage(`sidebar.${courseId}`, newSidebar);\n }, [currentSidebar]);\n\n const contextValue = useMemo(() => ({\n initialSidebar,\n toggleSidebar,\n onNotificationSeen,\n setNotificationStatus,\n currentSidebar,\n notificationStatus,\n upgradeNotificationCurrentState,\n setUpgradeNotificationCurrentState,\n shouldDisplaySidebarOpen,\n shouldDisplayFullScreen,\n courseId,\n unitId,\n }), [courseId, currentSidebar, notificationStatus, onNotificationSeen, shouldDisplayFullScreen,\n shouldDisplaySidebarOpen, toggleSidebar, unitId, upgradeNotificationCurrentState]);\n\n return (\n \n {children}\n \n );\n};\n\nSidebarProvider.propTypes = {\n courseId: PropTypes.string.isRequired,\n unitId: PropTypes.string.isRequired,\n children: PropTypes.node,\n};\n\nSidebarProvider.defaultProps = {\n children: null,\n};\n\nexport default SidebarProvider;\n","import { useContext } from 'react';\nimport classNames from 'classnames';\nimport { breakpoints, useWindowSize } from '@openedx/paragon';\nimport SidebarContext from './SidebarContext';\nimport { SIDEBAR_ORDER, SIDEBARS } from './sidebars';\n\nconst SidebarTriggers = () => {\n const {\n toggleSidebar,\n currentSidebar,\n } = useContext(SidebarContext);\n\n const isMobileView = useWindowSize().width < breakpoints.small.minWidth;\n\n return (\n
    \n {SIDEBAR_ORDER.map((sidebarId) => {\n const { Trigger } = SIDEBARS[sidebarId];\n const isActive = sidebarId === currentSidebar;\n return (\n \n toggleSidebar(sidebarId)} key={sidebarId} />\n
    \n );\n })}\n \n );\n};\n\nSidebarTriggers.propTypes = {};\n\nexport default SidebarTriggers;\n","import { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Icon, IconButton } from '@openedx/paragon';\nimport { ArrowBackIos, Close } from '@openedx/paragon/icons';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { useCallback, useContext } from 'react';\nimport { useEventListener } from '@src/generic/hooks';\nimport messages from '../../messages';\nimport SidebarContext from '../SidebarContext';\n\nconst SidebarBase = ({\n intl,\n title,\n ariaLabel,\n sidebarId,\n className,\n children,\n showTitleBar,\n width,\n}) => {\n const {\n toggleSidebar,\n shouldDisplayFullScreen,\n currentSidebar,\n } = useContext(SidebarContext);\n\n const receiveMessage = useCallback(({ data }) => {\n const { type } = data;\n if (type === 'learning.events.sidebar.close') {\n toggleSidebar(null);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [sidebarId, toggleSidebar]);\n\n useEventListener('message', receiveMessage);\n\n return (\n \n {shouldDisplayFullScreen ? (\n toggleSidebar(null)}\n onKeyDown={() => toggleSidebar(null)}\n role=\"button\"\n tabIndex=\"0\"\n >\n \n \n {intl.formatMessage(messages.responsiveCloseNotificationTray)}\n \n \n ) : null}\n {showTitleBar && (\n <>\n
    \n {title}\n {shouldDisplayFullScreen\n ? null\n : (\n
    \n toggleSidebar(null)}\n variant=\"primary\"\n alt={intl.formatMessage(messages.closeNotificationTrigger)}\n />\n
    \n )}\n
    \n \n )}\n {children}\n \n );\n};\n\nSidebarBase.propTypes = {\n intl: intlShape.isRequired,\n title: PropTypes.string.isRequired,\n ariaLabel: PropTypes.string.isRequired,\n sidebarId: PropTypes.string.isRequired,\n className: PropTypes.string.isRequired,\n children: PropTypes.element.isRequired,\n showTitleBar: PropTypes.bool,\n width: PropTypes.string,\n};\n\nSidebarBase.defaultProps = {\n width: '31rem',\n showTitleBar: true,\n};\n\nexport default injectIntl(SidebarBase);\n","import { injectIntl } from '@edx/frontend-platform/i18n';\nimport PropTypes from 'prop-types';\nimport React from 'react';\n\nconst SidebarTriggerBase = ({\n onClick,\n ariaLabel,\n children,\n}) => (\n \n
    \n {children}\n
    \n \n);\n\nSidebarTriggerBase.propTypes = {\n onClick: PropTypes.func.isRequired,\n ariaLabel: PropTypes.string.isRequired,\n children: PropTypes.element.isRequired,\n};\n\nexport default injectIntl(SidebarTriggerBase);\n","import PropTypes from 'prop-types';\n\nconst DashedCircleIcon = (props) => (\n \n \n \n \n);\n\nDashedCircleIcon.propTypes = {\n percentage: PropTypes.number.isRequired,\n remainder: PropTypes.number.isRequired,\n};\n\nexport default DashedCircleIcon;\n","import PropTypes from 'prop-types';\nimport {\n CheckCircle as CheckCircleIcon,\n LmsCompletionSolid as LmsCompletionSolidIcon,\n} from '@openedx/paragon/icons';\n\nimport { DashedCircleIcon } from '../icons';\n\nconst CompletionIcon = ({ completionStat: { completed = 0, total = 0 } }) => {\n const percentage = total !== 0 ? Math.min((completed / total) * 100, 100) : 0;\n const remainder = 100 - percentage;\n\n switch (true) {\n case !completed:\n return ;\n case completed === total:\n return ;\n default:\n return ;\n }\n};\n\nCompletionIcon.propTypes = {\n completionStat: PropTypes.shape({\n completed: PropTypes.number,\n total: PropTypes.number,\n }).isRequired,\n};\n\nexport default CompletionIcon;\n","import PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { useSelector } from 'react-redux';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Button, Icon } from '@openedx/paragon';\nimport { ChevronRight as ChevronRightIcon } from '@openedx/paragon/icons';\n\nimport courseOutlineMessages from '@src/course-home/outline-tab/messages';\nimport { getSequenceId } from '@src/courseware/data/selectors';\nimport CompletionIcon from './CompletionIcon';\n\nconst SidebarSection = ({ intl, section, handleSelectSection }) => {\n const {\n id,\n complete,\n title,\n sequenceIds,\n completionStat,\n } = section;\n\n const activeSequenceId = useSelector(getSequenceId);\n const isActiveSection = sequenceIds.includes(activeSequenceId);\n\n const sectionTitle = (\n <>\n
    \n \n
    \n
    \n {title}\n \n , {intl.formatMessage(complete\n ? courseOutlineMessages.completedSection\n : courseOutlineMessages.incompleteSection)}\n \n
    \n \n );\n\n return (\n
  • \n handleSelectSection(id)}\n >\n {sectionTitle}\n \n \n
  • \n );\n};\n\nSidebarSection.propTypes = {\n intl: intlShape.isRequired,\n section: PropTypes.shape({\n complete: PropTypes.bool,\n id: PropTypes.string,\n title: PropTypes.string,\n sequenceIds: PropTypes.arrayOf(PropTypes.string),\n completionStat: PropTypes.shape({\n completed: PropTypes.number,\n total: PropTypes.number,\n }),\n }).isRequired,\n handleSelectSection: PropTypes.func.isRequired,\n};\n\nexport default injectIntl(SidebarSection);\n","import PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { Link } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { sendTrackEvent, sendTrackingLogEvent } from '@edx/frontend-platform/analytics';\n\nimport { checkBlockCompletion } from '@src/courseware/data';\nimport { getCourseOutline } from '@src/courseware/data/selectors';\nimport messages from '../messages';\nimport UnitIcon, { UNIT_ICON_TYPES } from './UnitIcon';\n\nconst SidebarUnit = ({\n id,\n intl,\n courseId,\n sequenceId,\n isFirst,\n unit,\n isActive,\n isLocked,\n activeUnitId,\n}) => {\n const {\n complete,\n title,\n icon = UNIT_ICON_TYPES.other,\n } = unit;\n const dispatch = useDispatch();\n const { sequences = {} } = useSelector(getCourseOutline);\n\n const logEvent = (eventName, widgetPlacement) => {\n const findSequenceByUnitId = (unitId) => Object.values(sequences).find(seq => seq.unitIds.includes(unitId));\n const activeSequence = findSequenceByUnitId(activeUnitId);\n const targetSequence = findSequenceByUnitId(id);\n const payload = {\n id: activeUnitId,\n current_tab: activeSequence.unitIds.indexOf(activeUnitId) + 1,\n tab_count: activeSequence.unitIds.length,\n target_id: id,\n target_tab: targetSequence.unitIds.indexOf(id) + 1,\n widget_placement: widgetPlacement,\n };\n\n if (activeSequence.id !== targetSequence.id) {\n payload.target_tab_count = targetSequence.unitIds.length;\n }\n\n sendTrackEvent(eventName, payload);\n sendTrackingLogEvent(eventName, payload);\n };\n\n const handleClick = () => {\n logEvent('edx.ui.lms.sequence.tab_selected', 'left');\n dispatch(checkBlockCompletion(courseId, sequenceId, activeUnitId));\n };\n\n const iconType = isLocked ? UNIT_ICON_TYPES.lock : icon;\n\n return (\n
  • \n \n
    \n \n
    \n
    \n \n {title}\n \n \n , {intl.formatMessage(complete ? messages.completedUnit : messages.incompleteUnit)}\n \n
    \n \n
  • \n );\n};\n\nSidebarUnit.propTypes = {\n intl: intlShape.isRequired,\n id: PropTypes.string.isRequired,\n isFirst: PropTypes.bool.isRequired,\n unit: PropTypes.shape({\n complete: PropTypes.bool,\n icon: PropTypes.string,\n id: PropTypes.string,\n title: PropTypes.string,\n type: PropTypes.string,\n }).isRequired,\n isActive: PropTypes.bool.isRequired,\n isLocked: PropTypes.bool.isRequired,\n courseId: PropTypes.string.isRequired,\n sequenceId: PropTypes.string.isRequired,\n activeUnitId: PropTypes.string.isRequired,\n};\n\nexport default injectIntl(SidebarUnit);\n","import PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport {\n Locked as LockedIcon,\n Article as ArticleIcon,\n LmsBook as LmsBookIcon,\n LmsBookComplete as LmsBookCompleteIcon,\n LmsEditSquare as LmsEditSquareIcon,\n LmsEditSquareComplete as LmsEditSquareCompleteIcon,\n LmsVideocam as LmsVideocamIcon,\n LmsVideocamComplete as LmsVideocamCompleteIcon,\n} from '@openedx/paragon/icons';\n\nexport const UNIT_ICON_TYPES = {\n video: 'video',\n problem: 'problem',\n vertical: 'vertical',\n lock: 'lock',\n other: 'other',\n};\n\nconst UnitIcon = ({ type, isCompleted, ...props }) => {\n const iconMap = {\n [UNIT_ICON_TYPES.video]: {\n default: LmsVideocamIcon,\n complete: LmsVideocamCompleteIcon,\n },\n [UNIT_ICON_TYPES.problem]: {\n default: LmsEditSquareIcon,\n complete: LmsEditSquareCompleteIcon,\n },\n [UNIT_ICON_TYPES.vertical]: ArticleIcon,\n [UNIT_ICON_TYPES.lock]: LockedIcon,\n [UNIT_ICON_TYPES.other]: {\n default: LmsBookIcon,\n complete: LmsBookCompleteIcon,\n },\n };\n\n let Icon = iconMap[type || UNIT_ICON_TYPES.other];\n\n if (typeof Icon === 'object') {\n Icon = iconMap[type || UNIT_ICON_TYPES.other]?.[isCompleted ? 'complete' : 'default'];\n }\n\n return (\n \n );\n};\n\nUnitIcon.propTypes = {\n type: PropTypes.oneOf(Object.keys(UNIT_ICON_TYPES)).isRequired,\n isCompleted: PropTypes.bool.isRequired,\n};\n\nexport default UnitIcon;\n","import { useContext, useEffect, useState } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { useModel } from '@src/generic/model-store';\nimport SidebarContext from '@src/courseware/course/sidebar/SidebarContext';\nimport { getCoursewareOutlineSidebarSettings } from '@src/courseware/data/selectors';\nimport { ID } from './constants';\n\n// eslint-disable-next-line import/prefer-default-export\nexport const useCourseOutlineSidebar = () => {\n const isCollapsedOutlineSidebar = window.sessionStorage.getItem('hideCourseOutlineSidebar');\n const { enableNavigationSidebar: isEnabledSidebar } = useSelector(getCoursewareOutlineSidebarSettings);\n const {\n unitId,\n courseId,\n initialSidebar,\n currentSidebar,\n toggleSidebar,\n shouldDisplayFullScreen,\n } = useContext(SidebarContext);\n\n const isOpenSidebar = !initialSidebar && isEnabledSidebar && !isCollapsedOutlineSidebar;\n const [isOpen, setIsOpen] = useState(true);\n\n const course = useModel('coursewareMeta', courseId);\n const {\n entranceExamEnabled,\n entranceExamPassed,\n } = course.entranceExamData || {};\n const isActiveEntranceExam = entranceExamEnabled && !entranceExamPassed;\n\n const handleToggleCollapse = () => {\n if (currentSidebar === ID) {\n toggleSidebar(null);\n window.sessionStorage.setItem('hideCourseOutlineSidebar', 'true');\n } else {\n toggleSidebar(ID);\n window.sessionStorage.removeItem('hideCourseOutlineSidebar');\n }\n };\n\n useEffect(() => {\n if (isOpenSidebar && currentSidebar !== ID) {\n toggleSidebar(ID);\n }\n }, [initialSidebar, unitId]);\n\n return {\n courseId,\n unitId,\n currentSidebar,\n shouldDisplayFullScreen,\n isEnabledSidebar,\n isOpen,\n setIsOpen,\n handleToggleCollapse,\n isActiveEntranceExam,\n };\n};\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n defaultEmailBody: {\n id: 'learning.celebration.emailBody',\n defaultMessage: 'What are you spending your time learning?',\n description: 'Body when sharing course progress via email',\n },\n shareEmail: {\n id: 'learning.social.shareEmail',\n defaultMessage: 'Share your progress via email.',\n description: 'Text email share button',\n },\n shareService: {\n id: 'learning.social.shareService',\n defaultMessage: 'Share your progress on {service}.',\n },\n});\n\nexport default messages;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {\n EmailIcon,\n EmailShareButton,\n FacebookIcon,\n FacebookShareButton,\n LinkedinIcon,\n LinkedinShareButton,\n TwitterIcon,\n TwitterShareButton,\n} from 'react-share';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { sendTrackEvent } from '@edx/frontend-platform/analytics';\nimport { getAuthenticatedUser } from '@edx/frontend-platform/auth';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\n\nimport messages from './messages';\nimport { useModel } from '../../generic/model-store';\n\nconst SocialIcons = ({\n analyticsId,\n className,\n courseId,\n emailBody,\n emailSubject,\n hashtags,\n intl,\n socialMessage,\n}) => {\n const { marketingUrl } = useModel('coursewareMeta', courseId);\n\n const {\n org,\n title,\n } = useModel('courseHomeMeta', courseId);\n\n if (!marketingUrl) {\n return null;\n }\n\n const twitterUrl = getConfig().TWITTER_URL;\n const twitterAccount = twitterUrl && twitterUrl.substring(twitterUrl.lastIndexOf('/') + 1);\n\n const logClick = (service) => {\n if (!analyticsId) {\n return;\n }\n\n const { administrator } = getAuthenticatedUser();\n sendTrackEvent(analyticsId, {\n org_key: org,\n courserun_key: courseId,\n course_id: courseId, // should only be courserun_key, but left as-is for historical reasons\n is_staff: administrator,\n service,\n });\n };\n\n const socialUtmCampaign = getConfig().SOCIAL_UTM_MILESTONE_CAMPAIGN\n ? `utm_campaign=${getConfig().SOCIAL_UTM_MILESTONE_CAMPAIGN}&` : '';\n const socialUtmMarketingUrl = `${marketingUrl}?${socialUtmCampaign}utm_medium=social`;\n\n return (\n
    \n logClick('linkedin')}\n url={`${socialUtmMarketingUrl}&utm_source=linkedin`}\n >\n \n {intl.formatMessage(messages.shareService, { service: 'LinkedIn' })}\n \n {twitterAccount && (\n logClick('twitter')}\n className=\"ml-2\"\n hashtags={hashtags}\n title={socialMessage ? intl.formatMessage(socialMessage, { platform: `@${twitterAccount}`, title }) : ''}\n url={`${socialUtmMarketingUrl}&utm_source=twitter`}\n >\n \n {intl.formatMessage(messages.shareService, { service: 'Twitter' })}\n \n )}\n logClick('facebook')}\n className=\"ml-2\"\n quote={socialMessage ? intl.formatMessage(socialMessage, { platform: getConfig().SITE_NAME, title }) : ''}\n url={`${socialUtmMarketingUrl}&utm_source=facebook`}\n >\n \n {intl.formatMessage(messages.shareService, { service: 'Facebook' })}\n \n logClick('email')}\n body={emailBody ? `${intl.formatMessage(emailBody)}\\n\\n` : ''}\n className=\"ml-2\"\n subject={emailSubject ? intl.formatMessage(emailSubject, { platform: getConfig().SITE_NAME, title }) : ''}\n url={`${marketingUrl}?${socialUtmCampaign}utm_medium=email&utm_source=email`}\n >\n \n {intl.formatMessage(messages.shareEmail)}\n \n
    \n );\n};\n\nSocialIcons.defaultProps = {\n analyticsId: '',\n className: '',\n emailBody: messages.defaultEmailBody,\n emailSubject: null,\n hashtags: [getConfig().TWITTER_HASHTAG],\n socialMessage: null,\n};\n\nSocialIcons.propTypes = {\n analyticsId: PropTypes.string,\n className: PropTypes.string,\n courseId: PropTypes.string.isRequired,\n emailBody: PropTypes.shape({}),\n emailSubject: PropTypes.shape({}),\n hashtags: PropTypes.arrayOf(PropTypes.string),\n intl: intlShape.isRequired,\n socialMessage: PropTypes.shape({}),\n};\n\nexport default injectIntl(SocialIcons);\n","import React from 'react';\n\nimport { useNavigate, useParams } from 'react-router-dom';\n\nconst withParamsAndNavigation = WrappedComponent => {\n const WithParamsNavigationComponent = props => {\n const { courseId, sequenceId, unitId } = useParams();\n const navigate = useNavigate();\n return (\n \n );\n };\n return WithParamsNavigationComponent;\n};\n\nexport default withParamsAndNavigation;\n","import PropTypes from 'prop-types';\nimport { PageWrap } from '@edx/frontend-platform/react';\nimport React from 'react';\nimport {\n generatePath, useMatch, Navigate,\n} from 'react-router-dom';\n\nimport { DECODE_ROUTES } from '../constants';\n\nconst ROUTES = [].concat(\n ...Object.values(DECODE_ROUTES).map(value => (Array.isArray(value) ? value : [value])),\n);\n\nexport const decodeUrl = (encodedUrl) => {\n const decodedUrl = decodeURIComponent(encodedUrl);\n if (encodedUrl === decodedUrl) {\n return encodedUrl;\n }\n return decodeUrl(decodedUrl);\n};\n\nconst DecodePageRoute = ({ children }) => {\n let computedMatch = null;\n\n ROUTES.forEach((route) => {\n const matchedRoute = useMatch(route);\n if (matchedRoute) { computedMatch = matchedRoute; }\n });\n\n if (computedMatch) {\n const { pathname, pattern, params } = computedMatch;\n\n Object.keys(params).forEach((param) => {\n // only decode params not the entire url.\n // it is just to be safe and less prone to errors\n params[param] = decodeUrl(params[param]);\n });\n\n const newUrl = generatePath(pattern.path, params);\n\n // if the url get decoded, reroute to the decoded url\n if (newUrl !== pathname) {\n return ;\n }\n }\n\n return {children} ;\n};\n\nDecodePageRoute.propTypes = {\n children: PropTypes.node.isRequired,\n};\n\nexport default DecodePageRoute;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { Spinner } from '@openedx/paragon';\n\nexport default class PageLoading extends Component {\n renderSrMessage() {\n if (!this.props.srMessage) {\n return null;\n }\n\n return (\n \n {this.props.srMessage}\n \n );\n }\n\n render() {\n return (\n
    \n \n \n
    \n \n );\n }\n}\n\nPageLoading.propTypes = {\n srMessage: PropTypes.node.isRequired,\n};\n","import React, { useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport { Dropdown } from '@openedx/paragon';\nimport { FormattedMessage } from '@edx/frontend-platform/i18n';\nimport classNames from 'classnames';\n\nimport useIndexOfLastVisibleChild from './useIndexOfLastVisibleChild';\n\nconst Tabs = ({ children, className, ...attrs }) => {\n const [\n indexOfLastVisibleChild,\n containerElementRef,\n invisibleStyle,\n overflowElementRef,\n ] = useIndexOfLastVisibleChild();\n\n const tabChildren = useMemo(() => {\n const childrenArray = React.Children.toArray(children);\n const indexOfOverflowStart = indexOfLastVisibleChild + 1;\n\n // All tabs will be rendered. Those that would overflow are set to invisible.\n const wrappedChildren = childrenArray.map((child, index) => React.cloneElement(child, {\n style: index > indexOfLastVisibleChild ? invisibleStyle : null,\n }));\n\n // Build the list of items to put in the overflow menu\n const overflowChildren = childrenArray.slice(indexOfOverflowStart)\n .map(overflowChild => React.cloneElement(overflowChild, { className: 'dropdown-item' }));\n\n // Insert the overflow menu at the cut off index (even if it will be hidden\n // it so it can be part of measurements)\n wrappedChildren.splice(\n indexOfOverflowStart,\n 0, (\n = React.Children.count(children) ? invisibleStyle : null}\n ref={overflowElementRef}\n key=\"overflow\"\n >\n \n \n \n \n {overflowChildren}\n \n \n ),\n );\n return wrappedChildren;\n }, [children, indexOfLastVisibleChild, invisibleStyle, overflowElementRef]);\n\n return (\n \n {tabChildren}\n \n );\n};\n\nTabs.propTypes = {\n children: PropTypes.node,\n className: PropTypes.string,\n};\n\nTabs.defaultProps = {\n children: null,\n className: undefined,\n};\n\nexport default Tabs;\n","import React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport {\n useIntl, FormattedDate, FormattedMessage, injectIntl,\n} from '@edx/frontend-platform/i18n';\nimport { sendTrackEvent, sendTrackingLogEvent } from '@edx/frontend-platform/analytics';\nimport { Button, Icon, IconButton } from '@openedx/paragon';\nimport { Close } from '@openedx/paragon/icons';\nimport { setLocalStorage } from '../../data/localStorage';\nimport { UpgradeButton } from '../upgrade-button';\nimport {\n VerifiedCertBullet,\n UnlockGradedBullet,\n FullAccessBullet,\n SupportMissionBullet,\n} from '../upsell-bullets/UpsellBullets';\nimport messages from '../messages';\n\nconst UpsellNoFBECardContent = () => (\n
      \n \n \n
    \n);\n\nconst UpsellFBEFarAwayCardContent = () => (\n
      \n \n \n \n \n
    \n);\n\nconst UpsellFBESoonCardContent = ({ accessExpirationDate, timezoneFormatArgs }) => {\n const includingAnyProgress = (\n \n \n \n );\n\n const date = (\n \n );\n\n const benefitsOfUpgrading = (\n \n \n \n );\n\n return (\n
    \n

    \n \n

    \n

    \n \n

    \n
    \n );\n};\n\nUpsellFBESoonCardContent.propTypes = {\n accessExpirationDate: PropTypes.PropTypes.instanceOf(Date).isRequired,\n timezoneFormatArgs: PropTypes.shape({\n timeZone: PropTypes.string,\n }),\n};\n\nUpsellFBESoonCardContent.defaultProps = {\n timezoneFormatArgs: {},\n};\n\nconst PastExpirationCardContent = () => (\n
    \n

    \n \n

    \n
    \n);\n\nconst ExpirationCountdown = ({\n courseId, hoursToExpiration, setupgradeNotificationCurrentState, type,\n}) => {\n let expirationText;\n if (hoursToExpiration >= 24) { // More than 1 day left\n // setupgradeNotificationCurrentState is available in NotificationTray (not course home)\n if (setupgradeNotificationCurrentState) {\n if (type === 'access') {\n setupgradeNotificationCurrentState('accessDaysLeft');\n setLocalStorage(`upgradeNotificationCurrentState.${courseId}`, 'accessDaysLeft');\n }\n if (type === 'offer') {\n setupgradeNotificationCurrentState('FPDdaysLeft');\n setLocalStorage(`upgradeNotificationCurrentState.${courseId}`, 'FPDdaysLeft');\n }\n }\n expirationText = (\n \n );\n } else if (hoursToExpiration >= 1) { // More than 1 hour left\n // setupgradeNotificationCurrentState is available in NotificationTray (not course home)\n if (setupgradeNotificationCurrentState) {\n if (type === 'access') {\n setupgradeNotificationCurrentState('accessHoursLeft');\n setLocalStorage(`upgradeNotificationCurrentState.${courseId}`, 'accessHoursLeft');\n }\n if (type === 'offer') {\n setupgradeNotificationCurrentState('FPDHoursLeft');\n setLocalStorage(`upgradeNotificationCurrentState.${courseId}`, 'FPDHoursLeft');\n }\n }\n expirationText = (\n \n );\n } else { // Less than 1 hour\n // setupgradeNotificationCurrentState is available in NotificationTray (not course home)\n if (setupgradeNotificationCurrentState) {\n if (type === 'access') {\n setupgradeNotificationCurrentState('accessLastHour');\n setLocalStorage(`upgradeNotificationCurrentState.${courseId}`, 'accessLastHour');\n }\n if (type === 'offer') {\n setupgradeNotificationCurrentState('FPDLastHour');\n setLocalStorage(`upgradeNotificationCurrentState.${courseId}`, 'FPDLastHour');\n }\n }\n expirationText = (\n \n );\n }\n return (
    {expirationText}
    );\n};\n\nExpirationCountdown.propTypes = {\n courseId: PropTypes.string.isRequired,\n hoursToExpiration: PropTypes.number.isRequired,\n setupgradeNotificationCurrentState: PropTypes.func,\n type: PropTypes.string,\n};\nExpirationCountdown.defaultProps = {\n setupgradeNotificationCurrentState: null,\n type: null,\n};\n\nconst AccessExpirationDateBanner = ({\n courseId, accessExpirationDate, timezoneFormatArgs, setupgradeNotificationCurrentState,\n}) => {\n if (setupgradeNotificationCurrentState) {\n setupgradeNotificationCurrentState('accessDateView');\n setLocalStorage(`upgradeNotificationCurrentState.${courseId}`, 'accessDateView');\n }\n return (\n
    \n \n ),\n }}\n />\n
    \n );\n};\n\nAccessExpirationDateBanner.propTypes = {\n courseId: PropTypes.string.isRequired,\n accessExpirationDate: PropTypes.PropTypes.instanceOf(Date).isRequired,\n timezoneFormatArgs: PropTypes.shape({\n timeZone: PropTypes.string,\n }),\n setupgradeNotificationCurrentState: PropTypes.func,\n};\n\nAccessExpirationDateBanner.defaultProps = {\n timezoneFormatArgs: {},\n setupgradeNotificationCurrentState: null,\n};\n\nconst PastExpirationDateBanner = ({\n courseId, accessExpirationDate, timezoneFormatArgs, setupgradeNotificationCurrentState,\n}) => {\n if (setupgradeNotificationCurrentState) {\n setupgradeNotificationCurrentState('PastExpirationDate');\n setLocalStorage(`upgradeNotificationCurrentState.${courseId}`, 'PastExpirationDate');\n }\n return (\n
    \n \n ),\n }}\n />\n
    \n );\n};\n\nPastExpirationDateBanner.propTypes = {\n courseId: PropTypes.string.isRequired,\n accessExpirationDate: PropTypes.PropTypes.instanceOf(Date).isRequired,\n timezoneFormatArgs: PropTypes.shape({\n timeZone: PropTypes.string,\n }),\n setupgradeNotificationCurrentState: PropTypes.func,\n};\n\nPastExpirationDateBanner.defaultProps = {\n timezoneFormatArgs: {},\n setupgradeNotificationCurrentState: null,\n};\n\nconst UpgradeNotification = ({\n accessExpiration,\n contentTypeGatingEnabled,\n marketingUrl,\n courseId,\n offer,\n org,\n setupgradeNotificationCurrentState,\n shouldDisplayBorder,\n timeOffsetMillis,\n upsellPageName,\n userTimezone,\n verifiedMode,\n toggleSidebar,\n}) => {\n const intl = useIntl();\n const dateNow = Date.now();\n const timezoneFormatArgs = userTimezone ? { timeZone: userTimezone } : {};\n const correctedTime = new Date(dateNow + timeOffsetMillis);\n const accessExpirationDate = accessExpiration ? new Date(accessExpiration.expirationDate) : null;\n const pastExpirationDeadline = accessExpiration ? new Date(dateNow) > accessExpirationDate : false;\n\n const eventProperties = {\n org_key: org,\n courserun_key: courseId,\n };\n\n const promotionEventProperties = {\n creative: 'sidebarupsell',\n name: 'In-Course Verification Prompt',\n position: 'sidebar-message',\n promotion_id: 'courseware_verified_certificate_upsell',\n ...eventProperties,\n };\n\n useEffect(() => {\n sendTrackingLogEvent('edx.bi.course.upgrade.sidebarupsell.displayed', eventProperties);\n sendTrackEvent('Promotion Viewed', promotionEventProperties);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n if (!verifiedMode) {\n return null;\n }\n\n const logClick = () => {\n sendTrackingLogEvent('edx.bi.course.upgrade.sidebarupsell.clicked', eventProperties);\n sendTrackingLogEvent('edx.course.enrollment.upgrade.clicked', {\n ...eventProperties,\n location: 'sidebar-message',\n });\n sendTrackEvent('Promotion Clicked', promotionEventProperties);\n sendTrackEvent('edx.bi.ecommerce.upsell_links_clicked', {\n ...eventProperties,\n linkCategory: 'green_upgrade',\n linkName: `${upsellPageName}_green`,\n linkType: 'button',\n pageName: upsellPageName,\n });\n };\n\n const logClickPastExpiration = () => {\n sendTrackEvent('edx.bi.ecommerce.upgrade_notification.past_expiration.button_clicked', {\n ...eventProperties,\n linkCategory: 'upgrade_notification',\n linkName: `${upsellPageName}_course_details`,\n linkType: 'button',\n pageName: upsellPageName,\n });\n };\n\n /*\n There are 5 parts that change in the upgrade card:\n upgradeNotificationHeaderText\n expirationBanner\n upsellMessage\n callToActionButton\n offerCode\n */\n let upgradeNotificationHeaderText;\n let expirationBanner;\n let upsellMessage;\n let callToActionButton;\n let offerCode;\n\n if (!!accessExpiration && !!contentTypeGatingEnabled) {\n const hoursToAccessExpiration = Math.floor((accessExpirationDate - correctedTime) / 1000 / 60 / 60);\n\n if (hoursToAccessExpiration >= (7 * 24)) {\n if (offer) { // countdown to the first purchase discount if there is one\n const hoursToDiscountExpiration = Math.floor((new Date(offer.expirationDate) - correctedTime) / 1000 / 60 / 60);\n upgradeNotificationHeaderText = (\n \n );\n expirationBanner = (\n \n );\n } else {\n upgradeNotificationHeaderText = (\n \n );\n expirationBanner = (\n \n );\n }\n upsellMessage = ;\n } else if (hoursToAccessExpiration < (7 * 24) && hoursToAccessExpiration >= 0) {\n // more urgent messaging if there's less than 7 days left to access expiration\n upgradeNotificationHeaderText = (\n \n );\n expirationBanner = (\n \n );\n upsellMessage = (\n \n );\n } else { // access expiration deadline has passed\n upgradeNotificationHeaderText = (\n \n );\n expirationBanner = (\n \n );\n upsellMessage = (\n \n );\n }\n } else { // FBE is turned off\n upgradeNotificationHeaderText = (\n \n );\n upsellMessage = ();\n }\n\n if (pastExpirationDeadline) {\n callToActionButton = (\n \n View Course Details\n \n );\n } else {\n callToActionButton = (\n \n );\n }\n\n if (offer) { // if there's a first purchase discount, message the code at the bottom\n offerCode = (\n
    \n {offer.code}),\n }}\n />\n
    \n );\n }\n\n return (\n
    \n
    \n \n {upgradeNotificationHeaderText}\n {!!toggleSidebar && (\n
    \n \n
    \n )}\n \n {expirationBanner}\n
    \n {upsellMessage}\n
    \n
    \n {callToActionButton}\n
    \n {offerCode}\n
    \n
    \n );\n};\n\nUpgradeNotification.propTypes = {\n courseId: PropTypes.string.isRequired,\n org: PropTypes.string.isRequired,\n accessExpiration: PropTypes.shape({\n expirationDate: PropTypes.string,\n }),\n contentTypeGatingEnabled: PropTypes.bool,\n marketingUrl: PropTypes.string,\n offer: PropTypes.shape({\n expirationDate: PropTypes.string,\n percentage: PropTypes.number,\n code: PropTypes.string,\n }),\n toggleSidebar: PropTypes.func,\n shouldDisplayBorder: PropTypes.bool,\n setupgradeNotificationCurrentState: PropTypes.func,\n timeOffsetMillis: PropTypes.number,\n upsellPageName: PropTypes.string.isRequired,\n userTimezone: PropTypes.string,\n verifiedMode: PropTypes.shape({\n currencySymbol: PropTypes.string.isRequired,\n price: PropTypes.number.isRequired,\n upgradeUrl: PropTypes.string.isRequired,\n }),\n};\n\nUpgradeNotification.defaultProps = {\n accessExpiration: null,\n contentTypeGatingEnabled: false,\n marketingUrl: null,\n offer: null,\n setupgradeNotificationCurrentState: null,\n shouldDisplayBorder: null,\n timeOffsetMillis: 0,\n userTimezone: null,\n verifiedMode: null,\n toggleSidebar: null,\n};\n\nexport default injectIntl(UpgradeNotification);\n","import React from 'react';\nimport { faCheck } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { FormattedMessage } from '@edx/frontend-platform/i18n';\nimport { getConfig } from '@edx/frontend-platform';\n\nconst CheckmarkBullet = () => (\n \n);\n\n// Must be child of a
      \nexport const VerifiedCertBullet = () => {\n const verifiedCertLink = (\n \n \n \n );\n return (\n
    • \n \n \n
    • \n );\n};\n\n// Must be child of a
        \nexport const UnlockGradedBullet = () => {\n const gradedAssignmentsInBoldText = (\n \n \n \n );\n return (\n
      • \n \n \n
      • \n );\n};\n\n// Must be child of a
          \nexport const FullAccessBullet = () => {\n const fullAccessInBoldText = (\n \n \n \n );\n return (\n
        • \n \n \n
        • \n );\n};\n\n// Must be child of a
            \nexport const SupportMissionBullet = () => {\n const missionInBoldText = (\n \n \n \n );\n return (\n
          • \n \n \n
          • \n );\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Alert as ParagonAlert } from '@openedx/paragon';\nimport { CheckCircle, Info, WarningFilled } from '@openedx/paragon/icons';\n\nimport { ALERT_TYPES } from './UserMessagesProvider';\n\nfunction getAlertVariant(type) {\n switch (type) {\n case ALERT_TYPES.ERROR:\n return 'warning';\n case ALERT_TYPES.DANGER:\n return 'danger';\n case ALERT_TYPES.SUCCESS:\n return 'success';\n default:\n return 'info';\n }\n}\n\nfunction getAlertIcon(type) {\n switch (type) {\n case ALERT_TYPES.ERROR:\n return WarningFilled;\n case ALERT_TYPES.SUCCESS:\n return CheckCircle;\n default:\n return Info;\n }\n}\n\nconst Alert = ({\n type, dismissible, children, onDismiss, stacked,\n}) => (\n \n {children}\n \n);\n\nAlert.propTypes = {\n type: PropTypes.oneOf([\n ALERT_TYPES.ERROR,\n ALERT_TYPES.DANGER,\n ALERT_TYPES.INFO,\n ALERT_TYPES.SUCCESS,\n ]).isRequired,\n dismissible: PropTypes.bool,\n children: PropTypes.node,\n onDismiss: PropTypes.func,\n stacked: PropTypes.bool,\n};\n\nAlert.defaultProps = {\n dismissible: false,\n children: undefined,\n onDismiss: null,\n stacked: false,\n};\n\nexport default Alert;\n","import React, {\n useState, useRef, useEffect, useMemo,\n} from 'react';\nimport PropTypes from 'prop-types';\n\nimport UserMessagesContext from './UserMessagesContext';\nimport { getLocalStorage, popLocalStorage, setLocalStorage } from '../../data/localStorage';\n\nexport const ALERT_TYPES = {\n ERROR: 'error',\n DANGER: 'danger',\n SUCCESS: 'success',\n INFO: 'info',\n WELCOME: 'welcome',\n};\n\nconst FLASH_MESSAGES_LOCAL_STORAGE_KEY = 'UserMessagesProvider.flashMessages';\n\nfunction addFlashMessage(message) {\n let flashMessages = getLocalStorage(FLASH_MESSAGES_LOCAL_STORAGE_KEY);\n if (!flashMessages || !Array.isArray(flashMessages)) {\n flashMessages = [];\n }\n flashMessages.push(message);\n setLocalStorage(FLASH_MESSAGES_LOCAL_STORAGE_KEY, flashMessages);\n}\n\nfunction popFlashMessages() {\n return popLocalStorage(FLASH_MESSAGES_LOCAL_STORAGE_KEY) || [];\n}\n\nconst UserMessagesProvider = ({ children }) => {\n // Note: The callbacks (add, remove, clear) below interact with useState in very subtle ways.\n // When we call setMessages, we always do so with the function-based form of the handler, making\n // use of the \"current\" state and not relying on lexical scoping to access the state exposed\n // above with useState. This is very important and allows us to call multiple \"add\", \"remove\",\n // or \"clear\" functions in a single render. Without it, each call to one of the callbacks\n // references back to the -original- value of messages instead of the most recent, causing them\n // all to override each other. Last one in would win.\n const [messages, setMessages] = useState([]);\n const [nextId, setNextId] = useState(1);\n\n // Because the add, remove, and clear handlers also need to access nextId, we have to do\n // something a bit different. There's no way to wait for the \"currentNextId\" in a setMessages\n // handler. The alternative is to update a ref, which will always point to the current value by\n // its very nature.\n const refId = useRef(nextId);\n\n /**\n * Flash messages are a special kind of message that appears once on page refresh.\n */\n function addFlash(message) {\n addFlashMessage(message);\n }\n\n function add(message) {\n const {\n code, dismissible, text, type, topic, payload, ...others\n } = message;\n const id = refId.current;\n setMessages(currentMessages => [...currentMessages, {\n code, dismissible, text, type, topic, payload, ...others, id,\n }]);\n refId.current += 1;\n setNextId(refId.current);\n\n return id;\n }\n\n function remove(id) {\n setMessages(currentMessages => currentMessages.filter(message => message.id !== id));\n }\n\n function clear(topic = null) {\n setMessages(currentMessages => (topic === null ? [] : currentMessages.filter(message => message.topic !== topic)));\n }\n\n useEffect(() => {\n // We only allow flash messages to persist through one refresh, then we clear them out.\n // If we want persistent messages, then add a 'persist' key to the messages and handle that\n // as a separate local storage item.\n const flashMessages = popFlashMessages();\n flashMessages.forEach(flashMessage => add(flashMessage));\n }, []);\n\n const value = useMemo(() => ({\n add,\n addFlash,\n remove,\n clear,\n messages,\n }), [messages]);\n\n return (\n \n {children}\n \n );\n};\n\nUserMessagesProvider.propTypes = {\n children: PropTypes.node,\n};\n\nUserMessagesProvider.defaultProps = {\n children: null,\n};\n\nexport default UserMessagesProvider;\n","// This file is generated by the openedx/frontend-platform's \"intl-import.js\" script.\n//\n// Refer to the i18n documents in https://docs.openedx.org/en/latest/developers/references/i18n.html to update\n// the file and use the Micro-frontend i18n pattern in new repositories.\n//\n\nimport messagesOfArLanguage from './ar.json';\nimport messagesOfBoLanguage from './bo.json';\nimport messagesOfDaLanguage from './da.json';\nimport messagesOfDeDeLanguage from './de_DE.json';\nimport messagesOfElLanguage from './el.json';\nimport messagesOfEs419Language from './es_419.json';\nimport messagesOfEsEsLanguage from './es_ES.json';\nimport messagesOfFaLanguage from './fa.json';\nimport messagesOfFrCaLanguage from './fr_CA.json';\nimport messagesOfHeLanguage from './he.json';\nimport messagesOfHiLanguage from './hi.json';\nimport messagesOfIdLanguage from './id.json';\nimport messagesOfItItLanguage from './it_IT.json';\nimport messagesOfLvLanguage from './lv.json';\nimport messagesOfPtBrLanguage from './pt_BR.json';\nimport messagesOfPtPtLanguage from './pt_PT.json';\nimport messagesOfRuLanguage from './ru.json';\nimport messagesOfTeLanguage from './te.json';\nimport messagesOfThLanguage from './th.json';\nimport messagesOfTrTrLanguage from './tr_TR.json';\nimport messagesOfUkLanguage from './uk.json';\nimport messagesOfViLanguage from './vi.json';\nimport messagesOfZhCnLanguage from './zh_CN.json';\n\nexport default {\n 'ar': messagesOfArLanguage,\n 'zh-cn': messagesOfZhCnLanguage,\n 'vi': messagesOfViLanguage,\n 'uk': messagesOfUkLanguage,\n 'tr-tr': messagesOfTrTrLanguage,\n 'th': messagesOfThLanguage,\n 'te': messagesOfTeLanguage,\n 'ru': messagesOfRuLanguage,\n 'pt-pt': messagesOfPtPtLanguage,\n 'pt-br': messagesOfPtBrLanguage,\n 'lv': messagesOfLvLanguage,\n 'it-it': messagesOfItItLanguage,\n 'id': messagesOfIdLanguage,\n 'hi': messagesOfHiLanguage,\n 'he': messagesOfHeLanguage,\n 'fr-ca': messagesOfFrCaLanguage,\n 'fa': messagesOfFaLanguage,\n 'es-es': messagesOfEsEsLanguage,\n 'es-419': messagesOfEs419Language,\n 'el': messagesOfElLanguage,\n 'de-de': messagesOfDeDeLanguage,\n 'da': messagesOfDaLanguage,\n 'bo': messagesOfBoLanguage,\n};\n","// This file is generated by the openedx/frontend-platform's \"intl-import.js\" script.\n//\n// Refer to the i18n documents in https://docs.openedx.org/en/latest/developers/references/i18n.html to update\n// the file and use the Micro-frontend i18n pattern in new repositories.\n//\n\nimport messagesOfArLanguage from './ar.json';\nimport messagesOfDaLanguage from './da.json';\nimport messagesOfDeLanguage from './de.json';\nimport messagesOfDeDeLanguage from './de_DE.json';\nimport messagesOfElLanguage from './el.json';\nimport messagesOfEs419Language from './es_419.json';\nimport messagesOfEsEsLanguage from './es_ES.json';\nimport messagesOfFaLanguage from './fa.json';\nimport messagesOfFrCaLanguage from './fr_CA.json';\nimport messagesOfHeLanguage from './he.json';\nimport messagesOfHiLanguage from './hi.json';\nimport messagesOfIdLanguage from './id.json';\nimport messagesOfItItLanguage from './it_IT.json';\nimport messagesOfPtBrLanguage from './pt_BR.json';\nimport messagesOfPtPtLanguage from './pt_PT.json';\nimport messagesOfRuLanguage from './ru.json';\nimport messagesOfSwLanguage from './sw.json';\nimport messagesOfTeLanguage from './te.json';\nimport messagesOfThLanguage from './th.json';\nimport messagesOfTrTrLanguage from './tr_TR.json';\nimport messagesOfUkLanguage from './uk.json';\nimport messagesOfViLanguage from './vi.json';\nimport messagesOfZhCnLanguage from './zh_CN.json';\n\nexport default {\n 'ar': messagesOfArLanguage,\n 'zh-cn': messagesOfZhCnLanguage,\n 'vi': messagesOfViLanguage,\n 'uk': messagesOfUkLanguage,\n 'tr-tr': messagesOfTrTrLanguage,\n 'th': messagesOfThLanguage,\n 'te': messagesOfTeLanguage,\n 'sw': messagesOfSwLanguage,\n 'ru': messagesOfRuLanguage,\n 'pt-pt': messagesOfPtPtLanguage,\n 'pt-br': messagesOfPtBrLanguage,\n 'it-it': messagesOfItItLanguage,\n 'id': messagesOfIdLanguage,\n 'hi': messagesOfHiLanguage,\n 'he': messagesOfHeLanguage,\n 'fr-ca': messagesOfFrCaLanguage,\n 'fa': messagesOfFaLanguage,\n 'es-es': messagesOfEsEsLanguage,\n 'es-419': messagesOfEs419Language,\n 'el': messagesOfElLanguage,\n 'de-de': messagesOfDeDeLanguage,\n 'de': messagesOfDeLanguage,\n 'da': messagesOfDaLanguage,\n};\n","// This file is generated by the openedx/frontend-platform's \"intl-import.js\" script.\n//\n// Refer to the i18n documents in https://docs.openedx.org/en/latest/developers/references/i18n.html to update\n// the file and use the Micro-frontend i18n pattern in new repositories.\n//\n\nimport messagesOfArLanguage from './ar.json';\nimport messagesOfBoLanguage from './bo.json';\nimport messagesOfDaLanguage from './da.json';\nimport messagesOfDeLanguage from './de.json';\nimport messagesOfDeDeLanguage from './de_DE.json';\nimport messagesOfElLanguage from './el.json';\nimport messagesOfEs419Language from './es_419.json';\nimport messagesOfEsEsLanguage from './es_ES.json';\nimport messagesOfFaLanguage from './fa.json';\nimport messagesOfFrCaLanguage from './fr_CA.json';\nimport messagesOfHeLanguage from './he.json';\nimport messagesOfHiLanguage from './hi.json';\nimport messagesOfIdLanguage from './id.json';\nimport messagesOfItItLanguage from './it_IT.json';\nimport messagesOfLvLanguage from './lv.json';\nimport messagesOfPtBrLanguage from './pt_BR.json';\nimport messagesOfPtPtLanguage from './pt_PT.json';\nimport messagesOfRuLanguage from './ru.json';\nimport messagesOfSwLanguage from './sw.json';\nimport messagesOfTeLanguage from './te.json';\nimport messagesOfThLanguage from './th.json';\nimport messagesOfTrTrLanguage from './tr_TR.json';\nimport messagesOfUkLanguage from './uk.json';\nimport messagesOfViLanguage from './vi.json';\nimport messagesOfZhCnLanguage from './zh_CN.json';\n\nexport default {\n 'ar': messagesOfArLanguage,\n 'zh-cn': messagesOfZhCnLanguage,\n 'vi': messagesOfViLanguage,\n 'uk': messagesOfUkLanguage,\n 'tr-tr': messagesOfTrTrLanguage,\n 'th': messagesOfThLanguage,\n 'te': messagesOfTeLanguage,\n 'sw': messagesOfSwLanguage,\n 'ru': messagesOfRuLanguage,\n 'pt-pt': messagesOfPtPtLanguage,\n 'pt-br': messagesOfPtBrLanguage,\n 'lv': messagesOfLvLanguage,\n 'it-it': messagesOfItItLanguage,\n 'id': messagesOfIdLanguage,\n 'hi': messagesOfHiLanguage,\n 'he': messagesOfHeLanguage,\n 'fr-ca': messagesOfFrCaLanguage,\n 'fa': messagesOfFaLanguage,\n 'es-es': messagesOfEsEsLanguage,\n 'es-419': messagesOfEs419Language,\n 'el': messagesOfElLanguage,\n 'de-de': messagesOfDeDeLanguage,\n 'de': messagesOfDeLanguage,\n 'da': messagesOfDaLanguage,\n 'bo': messagesOfBoLanguage,\n};\n","// This file is generated by the openedx/frontend-platform's \"intl-import.js\" script.\n//\n// Refer to the i18n documents in https://docs.openedx.org/en/latest/developers/references/i18n.html to update\n// the file and use the Micro-frontend i18n pattern in new repositories.\n//\n\nimport messagesOfArLanguage from './ar.json';\nimport messagesOfDaLanguage from './da.json';\nimport messagesOfDeLanguage from './de.json';\nimport messagesOfDeDeLanguage from './de_DE.json';\nimport messagesOfElLanguage from './el.json';\nimport messagesOfEs419Language from './es_419.json';\nimport messagesOfEsEsLanguage from './es_ES.json';\nimport messagesOfFaLanguage from './fa.json';\nimport messagesOfFrCaLanguage from './fr_CA.json';\nimport messagesOfHeLanguage from './he.json';\nimport messagesOfHiLanguage from './hi.json';\nimport messagesOfIdLanguage from './id.json';\nimport messagesOfItItLanguage from './it_IT.json';\nimport messagesOfPtBrLanguage from './pt_BR.json';\nimport messagesOfPtPtLanguage from './pt_PT.json';\nimport messagesOfRuLanguage from './ru.json';\nimport messagesOfSwLanguage from './sw.json';\nimport messagesOfTeLanguage from './te.json';\nimport messagesOfThLanguage from './th.json';\nimport messagesOfTrTrLanguage from './tr_TR.json';\nimport messagesOfUkLanguage from './uk.json';\nimport messagesOfViLanguage from './vi.json';\nimport messagesOfZhCnLanguage from './zh_CN.json';\n\nexport default {\n 'ar': messagesOfArLanguage,\n 'zh-cn': messagesOfZhCnLanguage,\n 'vi': messagesOfViLanguage,\n 'uk': messagesOfUkLanguage,\n 'tr-tr': messagesOfTrTrLanguage,\n 'th': messagesOfThLanguage,\n 'te': messagesOfTeLanguage,\n 'sw': messagesOfSwLanguage,\n 'ru': messagesOfRuLanguage,\n 'pt-pt': messagesOfPtPtLanguage,\n 'pt-br': messagesOfPtBrLanguage,\n 'it-it': messagesOfItItLanguage,\n 'id': messagesOfIdLanguage,\n 'hi': messagesOfHiLanguage,\n 'he': messagesOfHeLanguage,\n 'fr-ca': messagesOfFrCaLanguage,\n 'fa': messagesOfFaLanguage,\n 'es-es': messagesOfEsEsLanguage,\n 'es-419': messagesOfEs419Language,\n 'el': messagesOfElLanguage,\n 'de-de': messagesOfDeDeLanguage,\n 'de': messagesOfDeLanguage,\n 'da': messagesOfDaLanguage,\n};\n","// This file is generated by the openedx/frontend-platform's \"intl-import.js\" script.\n//\n// Refer to the i18n documents in https://docs.openedx.org/en/latest/developers/references/i18n.html to update\n// the file and use the Micro-frontend i18n pattern in new repositories.\n//\n\nimport messagesOfArLanguage from './ar.json';\nimport messagesOfDaLanguage from './da.json';\nimport messagesOfDeDeLanguage from './de_DE.json';\nimport messagesOfElLanguage from './el.json';\nimport messagesOfEs419Language from './es_419.json';\nimport messagesOfEsEsLanguage from './es_ES.json';\nimport messagesOfFaLanguage from './fa.json';\nimport messagesOfFrCaLanguage from './fr_CA.json';\nimport messagesOfHeLanguage from './he.json';\nimport messagesOfHiLanguage from './hi.json';\nimport messagesOfIdLanguage from './id.json';\nimport messagesOfItItLanguage from './it_IT.json';\nimport messagesOfLvLanguage from './lv.json';\nimport messagesOfPtBrLanguage from './pt_BR.json';\nimport messagesOfPtPtLanguage from './pt_PT.json';\nimport messagesOfRuLanguage from './ru.json';\nimport messagesOfSwLanguage from './sw.json';\nimport messagesOfTeLanguage from './te.json';\nimport messagesOfThLanguage from './th.json';\nimport messagesOfTrTrLanguage from './tr_TR.json';\nimport messagesOfUkLanguage from './uk.json';\nimport messagesOfViLanguage from './vi.json';\nimport messagesOfZhCnLanguage from './zh_CN.json';\n\nexport default {\n 'ar': messagesOfArLanguage,\n 'zh-cn': messagesOfZhCnLanguage,\n 'vi': messagesOfViLanguage,\n 'uk': messagesOfUkLanguage,\n 'tr-tr': messagesOfTrTrLanguage,\n 'th': messagesOfThLanguage,\n 'te': messagesOfTeLanguage,\n 'sw': messagesOfSwLanguage,\n 'ru': messagesOfRuLanguage,\n 'pt-pt': messagesOfPtPtLanguage,\n 'pt-br': messagesOfPtBrLanguage,\n 'lv': messagesOfLvLanguage,\n 'it-it': messagesOfItItLanguage,\n 'id': messagesOfIdLanguage,\n 'hi': messagesOfHiLanguage,\n 'he': messagesOfHeLanguage,\n 'fr-ca': messagesOfFrCaLanguage,\n 'fa': messagesOfFaLanguage,\n 'es-es': messagesOfEsEsLanguage,\n 'es-419': messagesOfEs419Language,\n 'el': messagesOfElLanguage,\n 'de-de': messagesOfDeDeLanguage,\n 'da': messagesOfDaLanguage,\n};\n","// This file is generated by the openedx/frontend-platform's \"intl-import.js\" script.\n//\n// Refer to the i18n documents in https://docs.openedx.org/en/latest/developers/references/i18n.html to update\n// the file and use the Micro-frontend i18n pattern in new repositories.\n//\n\nimport messagesFromFrontendPlatform from './messages/frontend-platform';\nimport messagesFromParagon from './messages/paragon';\nimport messagesFromFrontendComponentHeader from './messages/frontend-component-header';\nimport messagesFromFrontendComponentFooter from './messages/frontend-component-footer';\nimport messagesFromFrontendLibSpecialExams from './messages/frontend-lib-special-exams';\nimport messagesFromFrontendAppLearning from './messages/frontend-app-learning';\n\nexport default [\n messagesFromFrontendPlatform,\n messagesFromParagon,\n messagesFromFrontendComponentHeader,\n messagesFromFrontendComponentFooter,\n messagesFromFrontendLibSpecialExams,\n messagesFromFrontendAppLearning,\n];\n","// This file is generated by the openedx/frontend-platform's \"intl-import.js\" script.\n//\n// Refer to the i18n documents in https://docs.openedx.org/en/latest/developers/references/i18n.html to update\n// the file and use the Micro-frontend i18n pattern in new repositories.\n//\n\nimport messagesOfArLanguage from './ar.json';\nimport messagesOfDaLanguage from './da.json';\nimport messagesOfDeLanguage from './de.json';\nimport messagesOfDeDeLanguage from './de_DE.json';\nimport messagesOfElLanguage from './el.json';\nimport messagesOfEs419Language from './es_419.json';\nimport messagesOfEsEsLanguage from './es_ES.json';\nimport messagesOfFaLanguage from './fa.json';\nimport messagesOfFrCaLanguage from './fr_CA.json';\nimport messagesOfHeLanguage from './he.json';\nimport messagesOfHiLanguage from './hi.json';\nimport messagesOfIdLanguage from './id.json';\nimport messagesOfItItLanguage from './it_IT.json';\nimport messagesOfLvLanguage from './lv.json';\nimport messagesOfPtBrLanguage from './pt_BR.json';\nimport messagesOfPtPtLanguage from './pt_PT.json';\nimport messagesOfRuLanguage from './ru.json';\nimport messagesOfSwLanguage from './sw.json';\nimport messagesOfTeLanguage from './te.json';\nimport messagesOfThLanguage from './th.json';\nimport messagesOfTrTrLanguage from './tr_TR.json';\nimport messagesOfUkLanguage from './uk.json';\nimport messagesOfViLanguage from './vi.json';\nimport messagesOfZhCnLanguage from './zh_CN.json';\n\nexport default {\n 'ar': messagesOfArLanguage,\n 'zh-cn': messagesOfZhCnLanguage,\n 'vi': messagesOfViLanguage,\n 'uk': messagesOfUkLanguage,\n 'tr-tr': messagesOfTrTrLanguage,\n 'th': messagesOfThLanguage,\n 'te': messagesOfTeLanguage,\n 'sw': messagesOfSwLanguage,\n 'ru': messagesOfRuLanguage,\n 'pt-pt': messagesOfPtPtLanguage,\n 'pt-br': messagesOfPtBrLanguage,\n 'lv': messagesOfLvLanguage,\n 'it-it': messagesOfItItLanguage,\n 'id': messagesOfIdLanguage,\n 'hi': messagesOfHiLanguage,\n 'he': messagesOfHeLanguage,\n 'fr-ca': messagesOfFrCaLanguage,\n 'fa': messagesOfFaLanguage,\n 'es-es': messagesOfEsEsLanguage,\n 'es-419': messagesOfEs419Language,\n 'el': messagesOfElLanguage,\n 'de-de': messagesOfDeDeLanguage,\n 'de': messagesOfDeLanguage,\n 'da': messagesOfDaLanguage,\n};\n","import {\n APP_INIT_ERROR,\n APP_READY,\n subscribe,\n initialize,\n mergeConfig,\n} from '@edx/frontend-platform';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\n\nimport messages from './i18n';\n\nimport { ErrorPage } from '@openedx/gym-frontend';\nimport { Learning as App } from '@openedx/gym-frontend/overrides/learning';\n\nsubscribe(APP_READY, () => {\n ReactDOM.render(\n ,\n document.getElementById('root'),\n );\n});\n\nsubscribe(APP_INIT_ERROR, (error) => {\n ReactDOM.render(, document.getElementById('root'));\n});\n\ninitialize({\n requireAuthenticatedUser: true,\n hydrateAuthenticatedUser: true,\n handlers: {\n config: () => {\n mergeConfig({\n CONTACT_URL: process.env.CONTACT_URL || null,\n CREDENTIALS_BASE_URL: process.env.CREDENTIALS_BASE_URL || null,\n CREDIT_HELP_LINK_URL: process.env.CREDIT_HELP_LINK_URL || null,\n DISCUSSIONS_MFE_BASE_URL: process.env.DISCUSSIONS_MFE_BASE_URL || null,\n ENABLE_ALTERNATE_ENROLLMENT_ALERT: process.env.ENABLE_ALTERNATE_ENROLLMENT_ALERT || null,\n ENTERPRISE_LEARNER_PORTAL_HOSTNAME: process.env.ENTERPRISE_LEARNER_PORTAL_HOSTNAME || null,\n ENABLE_JUMPNAV: process.env.ENABLE_JUMPNAV || null,\n ENABLE_NOTICES: process.env.ENABLE_NOTICES || null,\n INSIGHTS_BASE_URL: process.env.INSIGHTS_BASE_URL || null,\n INTERCOM_APP_ID: process.env.INTERCOM_APP_ID || null,\n SEARCH_CATALOG_URL: process.env.SEARCH_CATALOG_URL || null,\n SOCIAL_UTM_MILESTONE_CAMPAIGN: process.env.SOCIAL_UTM_MILESTONE_CAMPAIGN || null,\n STUDIO_BASE_URL: process.env.STUDIO_BASE_URL || null,\n SUPPORT_URL: process.env.SUPPORT_URL || null,\n SUPPORT_URL_CALCULATOR_MATH: process.env.SUPPORT_URL_CALCULATOR_MATH || null,\n SUPPORT_URL_ID_VERIFICATION: process.env.SUPPORT_URL_ID_VERIFICATION || null,\n SUPPORT_URL_VERIFIED_CERTIFICATE: process.env.SUPPORT_URL_VERIFIED_CERTIFICATE || null,\n TERMS_OF_SERVICE_URL: process.env.TERMS_OF_SERVICE_URL || null,\n TWITTER_HASHTAG: process.env.TWITTER_HASHTAG || null,\n TWITTER_URL: process.env.TWITTER_URL || null,\n LEGACY_THEME_NAME: process.env.LEGACY_THEME_NAME || null,\n EXAMS_BASE_URL: process.env.EXAMS_BASE_URL || null,\n PROCTORED_EXAM_FAQ_URL: process.env.PROCTORED_EXAM_FAQ_URL || null,\n PROCTORED_EXAM_RULES_URL: process.env.PROCTORED_EXAM_RULES_URL || null,\n CHAT_RESPONSE_URL: process.env.CHAT_RESPONSE_URL || null,\n PRIVACY_POLICY_URL: process.env.PRIVACY_POLICY_URL || null,\n }, 'LearnerAppConfig');\n },\n },\n messages,\n});\n","import React, {\n Component,\n} from 'react';\nimport PropTypes from 'prop-types';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Input } from '@openedx/paragon';\n\nimport messages from './messages';\n\nclass MasqueradeUserNameInput extends Component {\n onError(...args) {\n return this.props.onError(...args);\n }\n\n onKeyPress(event) {\n if (event.key === 'Enter') {\n return this.onSubmit(event);\n }\n return true;\n }\n\n onSubmit(event) {\n const payload = {\n role: 'student',\n user_name: event.target.value,\n };\n this.props.onSubmit(payload).then((data) => {\n if (data && data.success) {\n global.location.reload();\n } else {\n const error = (data && data.error) || '';\n this.onError(error);\n }\n }).catch(() => {\n const message = this.props.intl.formatMessage(messages.genericError);\n this.onError(message);\n });\n return true;\n }\n\n render() {\n const {\n intl,\n onError,\n onSubmit,\n ...rest\n } = this.props;\n return (\n this.onKeyPress(event)}\n type=\"text\"\n {...rest}\n />\n );\n }\n}\nMasqueradeUserNameInput.propTypes = {\n intl: intlShape.isRequired,\n onError: PropTypes.func.isRequired,\n onSubmit: PropTypes.func.isRequired,\n};\nexport default injectIntl(MasqueradeUserNameInput);\n","import React, {\n Component,\n} from 'react';\nimport PropTypes from 'prop-types';\nimport { Dropdown } from '@openedx/paragon';\n\nclass MasqueradeWidgetOption extends Component {\n onClick(event) {\n // TODO: Remove this hack when we upgrade Paragon\n // Note: The current version of Paragon does _not_ close dropdown components\n // automatically (or easily programmatically) when you click on an item.\n // We can simulate this behavior by programmatically clicking the\n // toggle button on behalf of the user.\n // The newest version of Paragon already contains this behavior,\n // so we can remove this when we upgrade to that point.\n event.target.parentNode.parentNode.click();\n const {\n groupId,\n groupName,\n role,\n userName,\n userPartitionId,\n userNameInputToggle,\n } = this.props;\n const payload = {};\n if (userName || userName === '') {\n userNameInputToggle(true, groupId, groupName, role, userName, userPartitionId);\n return false;\n }\n if (role) {\n payload.role = role;\n }\n if (groupId) {\n payload.group_id = parseInt(groupId, 10);\n payload.user_partition_id = parseInt(userPartitionId, 10);\n }\n this.props.onSubmit(payload).then(() => {\n global.location.reload();\n });\n return true;\n }\n\n isSelected() {\n /* eslint-disable arrow-body-style */\n const isEqual = [\n 'groupId',\n 'role',\n 'userName',\n 'userPartitionId',\n ].reduce((accumulator, currentValue) => {\n return accumulator && (\n this.props[currentValue] === this.props.selected[currentValue]\n );\n }, true);\n return isEqual;\n }\n\n render() {\n const {\n groupName,\n } = this.props;\n if (!groupName) {\n return null;\n }\n const selected = this.isSelected();\n let className;\n if (selected) {\n className = 'active';\n }\n return (\n this.onClick(event)}\n >\n {groupName}\n \n );\n }\n}\nMasqueradeWidgetOption.propTypes = {\n groupId: PropTypes.number,\n groupName: PropTypes.string.isRequired,\n onSubmit: PropTypes.func.isRequired,\n role: PropTypes.string,\n selected: PropTypes.shape({\n courseKey: PropTypes.string.isRequired,\n groupId: PropTypes.number,\n role: PropTypes.string,\n userName: PropTypes.string,\n userPartitionId: PropTypes.number,\n }),\n userName: PropTypes.string,\n userNameInputToggle: PropTypes.func.isRequired,\n userPartitionId: PropTypes.number,\n};\nMasqueradeWidgetOption.defaultProps = {\n groupId: null,\n role: null,\n selected: null,\n userName: null,\n userPartitionId: null,\n};\n\nexport default MasqueradeWidgetOption;\n","import PropTypes from 'prop-types';\nimport { PluginSlot } from '@openedx/frontend-plugin-framework';\n\nconst SequenceContainerSlot = ({ courseId, unitId }) => (\n \n);\n\nSequenceContainerSlot.propTypes = {\n courseId: PropTypes.string.isRequired,\n unitId: PropTypes.string,\n};\n\nSequenceContainerSlot.defaultProps = {\n unitId: null,\n};\n\nexport default SequenceContainerSlot;\n","import PropTypes from 'prop-types';\nimport { PluginSlot } from '@openedx/frontend-plugin-framework';\n\nconst UnitTitleSlot = ({ courseId, unitId, unitTitle }) => (\n \n);\n\nUnitTitleSlot.propTypes = {\n courseId: PropTypes.string.isRequired,\n unitId: PropTypes.string.isRequired,\n unitTitle: PropTypes.string.isRequired,\n};\n\nexport default UnitTitleSlot;\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n unsubscribeLoading: {\n id: 'learning.notification.preferences.unsubscribe.loading',\n defaultMessage: 'Loading',\n },\n unsubscribeSuccessHeading: {\n id: 'learning.notification.preferences.unsubscribe.successHeading',\n defaultMessage: 'Unsubscribe successful',\n },\n unsubscribeSuccessMessage: {\n id: 'learning.notification.preferences.unsubscribe.successMessage',\n defaultMessage: 'You have successfully unsubscribed from email digests for learning activity',\n },\n unsubscribeFailedHeading: {\n id: 'learning.notification.preferences.unsubscribe.failedHeading',\n defaultMessage: 'Error unsubscribing from preference',\n },\n unsubscribeFailedMessage: {\n id: 'learning.notification.preferences.unsubscribe.failedMessage',\n defaultMessage: 'Invalid Url or token expired',\n },\n preferenceCenterUrl: {\n id: 'learning.notification.preferences.unsubscribe.preferenceCenterUrl',\n defaultMessage: 'preferences page',\n },\n});\n\nexport default messages;\n","import React, { useEffect, useState } from 'react';\n\nimport { Container, Icon, Hyperlink } from '@openedx/paragon';\nimport { CheckCircleLightOutline, ErrorOutline } from '@openedx/paragon/icons';\nimport { useParams } from 'react-router-dom';\n\nimport Header from '@edx/frontend-component-header';\nimport { getConfig } from '@edx/frontend-platform';\nimport { sendTrackEvent } from '@edx/frontend-platform/analytics';\nimport { logError } from '@edx/frontend-platform/logging';\nimport { FormattedMessage, useIntl } from '@edx/frontend-platform/i18n';\n\nimport { LOADED, LOADING, FAILED } from '../constants';\nimport PageLoading from '../generic/PageLoading';\nimport { unsubscribeNotificationPreferences } from './data/api';\nimport messages from './messages';\n\nconst PreferencesUnsubscribe = () => {\n const intl = useIntl();\n const { userToken, updatePatch } = useParams();\n const [status, setStatus] = useState(LOADING);\n\n useEffect(() => {\n unsubscribeNotificationPreferences(userToken, updatePatch).then(\n () => setStatus(LOADED),\n (error) => {\n setStatus(FAILED);\n logError(error);\n },\n );\n sendTrackEvent('edx.ui.lms.notifications.preferences.unsubscribe', { userToken, updatePatch });\n }, []);\n\n const pageContent = {\n icon: CheckCircleLightOutline,\n iconClass: 'text-success',\n headingText: messages.unsubscribeSuccessHeading,\n bodyText: messages.unsubscribeSuccessMessage,\n };\n\n if (status === FAILED) {\n pageContent.icon = ErrorOutline;\n pageContent.iconClass = 'text-danger';\n pageContent.headingText = messages.unsubscribeFailedHeading;\n pageContent.bodyText = messages.unsubscribeFailedMessage;\n }\n\n return (\n
            \n
            \n \n
            \n
            \n {status === LOADING && }\n {status !== LOADING && (\n <>\n \n

            \n {intl.formatMessage(pageContent.headingText)}\n

            \n
            \n {intl.formatMessage(pageContent.bodyText)}\n
            \n \n \n {intl.formatMessage(messages.preferenceCenterUrl)}\n \n ),\n }}\n />\n \n \n )}\n
            \n
            \n
            \n
            \n );\n};\n\nexport default PreferencesUnsubscribe;\n","import { getConfig } from '@edx/frontend-platform';\nimport { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth';\n\nexport const getUnsubscribeUrl = (userToken, updatePatch) => (\n `${getConfig().LMS_BASE_URL}/api/notifications/preferences/update/${userToken}/${updatePatch}/`\n);\n\nexport async function unsubscribeNotificationPreferences(userToken, updatePatch) {\n const url = getUnsubscribeUrl(userToken, updatePatch);\n return getAuthenticatedHttpClient().get(url);\n}\n","import React from 'react';\nimport { FormattedMessage } from '@edx/frontend-platform/i18n';\n\nexport const DismissButtonFormattedMessage = () => (\n \n);\n\nexport const NextButtonFormattedMessage = () => (\n \n);\n\nexport const OkayButtonFormattedMessage = () => (\n \n);\n","import React from 'react';\nimport { FormattedMessage } from '@edx/frontend-platform/i18n';\n\nimport { OkayButtonFormattedMessage } from './GenericTourFormattedMessages';\n\nconst abandonTour = ({ enabled, onEnd }) => ({\n checkpoints: [{\n body: ,\n placement: 'left',\n target: '#courseHome-launchTourLink',\n }],\n enabled,\n endButtonText: ,\n onEnd,\n onEscape: onEnd,\n tourId: 'abandonTour',\n});\n\nexport default abandonTour;\n","import React from 'react';\nimport { FormattedMessage } from '@edx/frontend-platform/i18n';\n\nimport { OkayButtonFormattedMessage } from './GenericTourFormattedMessages';\n\nconst coursewareTour = ({ enabled, onEnd }) => ({\n checkpoints: [{\n body: ,\n placement: 'bottom',\n target: '#courseware-sequence-navigation',\n }],\n enabled,\n endButtonText: ,\n onEnd,\n onEscape: onEnd,\n tourId: 'coursewareTour',\n});\n\nexport default coursewareTour;\n","import React from 'react';\nimport { FormattedMessage } from '@edx/frontend-platform/i18n';\n\nimport { OkayButtonFormattedMessage } from './GenericTourFormattedMessages';\n\nconst existingUserCourseHomeTour = ({ enabled, onEnd }) => ({\n checkpoints: [{\n body: ,\n placement: 'left',\n target: '#courseHome-launchTourLink',\n }],\n enabled,\n endButtonText: ,\n onEnd,\n onEscape: onEnd,\n tourId: 'existingUserCourseHomeTour',\n});\n\nexport default existingUserCourseHomeTour;\n","import React from 'react';\nimport { FormattedMessage } from '@edx/frontend-platform/i18n';\nimport {\n DismissButtonFormattedMessage,\n NextButtonFormattedMessage,\n OkayButtonFormattedMessage,\n} from '../GenericTourFormattedMessages';\n\nconst datesCheckpoint = {\n body: ,\n placement: 'left',\n target: '#courseHome-dates',\n title: ,\n};\n\nconst outlineCheckpoint = {\n body: ,\n placement: 'top',\n target: '#courseHome-outline',\n title: ,\n};\n\nconst tabNavigationCheckpoint = {\n body: ,\n placement: 'bottom',\n target: '#courseTabsNavigation',\n title: ,\n};\n\nconst upgradeCheckpoint = {\n body: ,\n placement: 'left',\n target: '#courseHome-upgradeNotification',\n title: ,\n};\n\nconst weeklyGoalsCheckpoint = {\n body: ,\n placement: 'left',\n target: '#courseHome-weeklyLearningGoal',\n title: ,\n};\n\nconst newUserCourseHomeTour = ({\n enabled,\n onDismiss,\n onEnd,\n}) => ({\n advanceButtonText: ,\n checkpoints: [\n outlineCheckpoint,\n datesCheckpoint,\n tabNavigationCheckpoint,\n upgradeCheckpoint,\n weeklyGoalsCheckpoint,\n ],\n dismissButtonText: ,\n enabled,\n endButtonText: ,\n onDismiss,\n onEnd,\n onEscape: onDismiss,\n tourId: 'newUserCourseHomeTour',\n});\n\nexport default newUserCourseHomeTour;\n","export default __webpack_public_path__ + \"2649294b11a63f2f74a0e594104f2722.png\";","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { getConfig } from '@edx/frontend-platform';\nimport { injectIntl, intlShape, FormattedMessage } from '@edx/frontend-platform/i18n';\nimport {\n ActionRow, Button, MarketingModal, ModalDialog,\n} from '@openedx/paragon';\n\nimport heroImage from './course_home_tour_modal_hero.png';\nimport messages from '../messages';\n\nconst NewUserCourseHomeTourModal = ({\n intl,\n isOpen,\n onDismiss,\n onStartTour,\n}) => (\n \n \n \n \n {intl.formatMessage(messages.newUserModalTitleWelcome)},\n }}\n />\n \n \n \n )}\n footerNode={(\n \n \n {intl.formatMessage(messages.skipForNow)}\n \n \n {intl.formatMessage(messages.beginTour)}\n \n \n )}\n onClose={onDismiss}\n >\n

            {intl.formatMessage(messages.newUserModalBody, { siteName: getConfig().SITE_NAME })}

            \n \n);\n\nNewUserCourseHomeTourModal.propTypes = {\n intl: intlShape.isRequired,\n isOpen: PropTypes.bool.isRequired,\n onDismiss: PropTypes.func.isRequired,\n onStartTour: PropTypes.func.isRequired,\n};\n\nexport default injectIntl(NewUserCourseHomeTourModal);\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport { sendTrackEvent } from '@edx/frontend-platform/analytics';\nimport { getAuthenticatedUser } from '@edx/frontend-platform/auth';\nimport { ProductTour } from '@openedx/paragon';\n\nimport abandonTour from './AbandonTour';\nimport coursewareTour from './CoursewareTour';\nimport existingUserCourseHomeTour from './ExistingUserCourseHomeTour';\nimport newUserCourseHomeTour from './newUserCourseHomeTour/NewUserCourseHomeTour';\nimport NewUserCourseHomeTourModal from './newUserCourseHomeTour/NewUserCourseHomeTourModal';\nimport {\n closeNewUserCourseHomeModal,\n endCourseHomeTour,\n endCoursewareTour,\n fetchTourData,\n} from './data';\n\nconst ProductTours = ({\n activeTab,\n courseId,\n isStreakCelebrationOpen,\n org,\n}) => {\n const {\n proctoringPanelStatus,\n } = useSelector(state => state.courseHome);\n\n const {\n showCoursewareTour,\n showExistingUserCourseHomeTour,\n showNewUserCourseHomeModal,\n showNewUserCourseHomeTour,\n } = useSelector(state => state.tours);\n\n const [isAbandonTourEnabled, setIsAbandonTourEnabled] = useState(false);\n const [isCoursewareTourEnabled, setIsCoursewareTourEnabled] = useState(false);\n const [isExistingUserCourseHomeTourEnabled, setIsExistingUserCourseHomeTourEnabled] = useState(false);\n const [isNewUserCourseHomeTourEnabled, setIsNewUserCourseHomeTourEnabled] = useState(false);\n\n const dispatch = useDispatch();\n const {\n administrator,\n username,\n } = getAuthenticatedUser() || {};\n const isCoursewareTab = activeTab === 'courseware';\n const isOutlineTab = activeTab === 'outline';\n\n useEffect(() => {\n const isOutlineTabResolved = isOutlineTab && proctoringPanelStatus === 'loaded';\n const userIsAuthenticated = !!username;\n\n // Tours currently only exist on the Outline Tab and within Courseware, so we'll avoid\n // calling the tour endpoint unnecessarily.\n if (userIsAuthenticated && (isCoursewareTab || isOutlineTabResolved)) {\n dispatch(fetchTourData(username));\n }\n }, [proctoringPanelStatus]);\n\n useEffect(() => {\n if (isCoursewareTab && showCoursewareTour) {\n setIsCoursewareTourEnabled(true);\n }\n }, [showCoursewareTour]);\n\n useEffect(() => {\n if (isOutlineTab) {\n setIsExistingUserCourseHomeTourEnabled(!!showExistingUserCourseHomeTour);\n }\n }, [showExistingUserCourseHomeTour]);\n\n useEffect(() => {\n if (isOutlineTab && showNewUserCourseHomeTour) {\n setIsAbandonTourEnabled(false);\n setIsNewUserCourseHomeTourEnabled(true);\n }\n }, [showNewUserCourseHomeTour]);\n\n if (isStreakCelebrationOpen) {\n return null;\n }\n\n // The component cannot handle rendering multiple enabled tours at once.\n // I.e. when adding new tours, beware that if multiple tours are enabled,\n // the first enabled tour in the following array will be the only one that renders.\n // The suggestion for populating these tour objects is to ensure only one tour is enabled at a time.\n const tours = [\n abandonTour({\n enabled: isAbandonTourEnabled,\n onEnd: () => setIsAbandonTourEnabled(false),\n }),\n coursewareTour({\n enabled: isCoursewareTourEnabled,\n onEnd: () => {\n setIsCoursewareTourEnabled(false);\n sendTrackEvent('edx.ui.lms.courseware_tour.completed', {\n org_key: org,\n courserun_key: courseId,\n is_staff: administrator,\n });\n dispatch(endCoursewareTour(username));\n },\n }),\n existingUserCourseHomeTour({\n enabled: isExistingUserCourseHomeTourEnabled,\n onEnd: () => {\n setIsExistingUserCourseHomeTourEnabled(false);\n sendTrackEvent('edx.ui.lms.existing_user_tour.completed', {\n org_key: org,\n courserun_key: courseId,\n is_staff: administrator,\n });\n dispatch(endCourseHomeTour(username));\n },\n }),\n newUserCourseHomeTour({\n enabled: isNewUserCourseHomeTourEnabled,\n onDismiss: () => {\n setIsNewUserCourseHomeTourEnabled(false);\n setIsAbandonTourEnabled(true);\n sendTrackEvent('edx.ui.lms.new_user_tour.dismissed', {\n org_key: org,\n courserun_key: courseId,\n is_staff: administrator,\n });\n dispatch(endCourseHomeTour(username));\n dispatch(endCoursewareTour(username));\n },\n onEnd: () => {\n setIsNewUserCourseHomeTourEnabled(false);\n sendTrackEvent('edx.ui.lms.new_user_tour.completed', {\n org_key: org,\n courserun_key: courseId,\n is_staff: administrator,\n });\n dispatch(endCourseHomeTour(username));\n },\n }),\n ];\n\n return (\n <>\n \n {\n sendTrackEvent('edx.ui.lms.new_user_modal.dismissed', {\n org_key: org,\n courserun_key: courseId,\n is_staff: administrator,\n });\n dispatch(closeNewUserCourseHomeModal());\n setIsAbandonTourEnabled(true);\n dispatch(endCourseHomeTour(username));\n }}\n onStartTour={() => {\n sendTrackEvent('edx.ui.lms.new_user_tour.started', {\n org_key: org,\n courserun_key: courseId,\n is_staff: administrator,\n });\n dispatch(closeNewUserCourseHomeModal());\n setIsNewUserCourseHomeTourEnabled(true);\n }}\n />\n \n );\n};\n\nProductTours.propTypes = {\n activeTab: PropTypes.string.isRequired,\n courseId: PropTypes.string.isRequired,\n isStreakCelebrationOpen: PropTypes.bool.isRequired,\n org: PropTypes.string.isRequired,\n};\n\nexport default ProductTours;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { sendTrackEvent } from '@edx/frontend-platform/analytics';\nimport { getAuthenticatedUser } from '@edx/frontend-platform/auth';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Button, Icon } from '@openedx/paragon';\nimport { Compass } from '@openedx/paragon/icons';\n\nimport { useModel } from '../../generic/model-store';\nimport { launchCourseHomeTour } from '../data/slice';\nimport messages from '../messages';\n\nconst LaunchCourseHomeTourButton = ({ intl, srOnly }) => {\n const {\n courseId,\n } = useSelector(state => state.courseHome);\n\n const {\n org,\n } = useModel('courseHomeMeta', courseId);\n\n const {\n toursEnabled,\n } = useSelector(state => state.tours);\n\n const dispatch = useDispatch();\n\n const handleClick = () => {\n const { administrator } = getAuthenticatedUser();\n sendTrackEvent('edx.ui.lms.launch_tour.clicked', {\n org_key: org,\n courserun_key: courseId,\n is_staff: administrator,\n tour_variant: 'course_home',\n });\n\n dispatch(launchCourseHomeTour());\n };\n\n return (\n // eslint-disable-next-line react/jsx-no-useless-fragment\n <>\n {toursEnabled && (\n \n )}\n \n );\n};\n\nLaunchCourseHomeTourButton.defaultProps = {\n srOnly: false,\n};\n\nLaunchCourseHomeTourButton.propTypes = {\n intl: intlShape.isRequired,\n srOnly: PropTypes.bool,\n};\n\nexport default injectIntl(LaunchCourseHomeTourButton);\n","import React from 'react';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { getAuthenticatedUser } from '@edx/frontend-platform/auth';\nimport { getConfig } from '@edx/frontend-platform';\nimport { Hyperlink } from '@openedx/paragon';\n\nimport messages from '../courseware/course/course-exit/messages';\n\nconst IntlDashboardLink = ({ intl }) => (\n \n {intl.formatMessage(messages.dashboardLink)}\n \n);\n\nIntlDashboardLink.propTypes = {\n intl: intlShape.isRequired,\n};\n\nconst IntlIdVerificationSupportLink = ({ intl }) => {\n if (!getConfig().SUPPORT_URL_ID_VERIFICATION) {\n return null;\n }\n return (\n \n {intl.formatMessage(messages.idVerificationSupportLink)}\n \n );\n};\n\nIntlIdVerificationSupportLink.propTypes = {\n intl: intlShape.isRequired,\n};\n\nconst IntlProfileLink = ({ intl }) => {\n const { username } = getAuthenticatedUser();\n\n return (\n \n {intl.formatMessage(messages.profileLink)}\n \n );\n};\n\nIntlProfileLink.propTypes = {\n intl: intlShape.isRequired,\n};\n\nconst DashboardLink = injectIntl(IntlDashboardLink);\nconst IdVerificationSupportLink = injectIntl(IntlIdVerificationSupportLink);\nconst ProfileLink = injectIntl(IntlProfileLink);\n\nexport { DashboardLink, IdVerificationSupportLink, ProfileLink };\n","export default __webpack_public_path__ + \"d8d2ddd02a2781719fd303dc4b868ac0.gif\";","export default __webpack_public_path__ + \"8ecb9b1c7d41d7196375abdc97a53b4b.gif\";","export default __webpack_public_path__ + \"d0cc1158a1b3bd75bb785cd0d6e306c1.png\";","export default __webpack_public_path__ + \"50e380db78f1d321fe1ce5bacea07644.png\";"],"names":["AccessExpirationMasqueradeBanner","React","useAccessExpirationMasqueradeBanner","courseId","tab","userTimezone","useModel","accessExpiration","isVisible","masqueradingExpiredCourse","expirationDate","payload","useMemo","useAlert","code","topic","clientAccessExpirationMasqueradeBanner","ActiveEnterpriseAlert","courseAccess","hasAccess","errorCode","text","userMessage","dismissible","type","ALERT_TYPES","ERROR","clientActiveEnterpriseAlert","CourseStartAlert","CourseStartMasqueradeBanner","IsStartDateInFuture","start","today","Date","useCourseStartMasqueradeBanner","isMasquerading","clientCourseStartMasqueradeBanner","isEnrolled","clientCourseStartAlert","EnrollmentAlert","useEnrollmentAlert","authenticatedUser","useContext","AppContext","course","outline","enrolledUser","undefined","privateOutline","courseBlocks","courses","canEnroll","enrollAlert","extraText","isStaff","clientEnrollmentAlert","LogistrationAlert","useLogistrationAlert","clientLogistrationAlert","defineMessages","entranceExamTextNotPassing","id","defaultMessage","entranceExamTextPassed","useSequenceBannerTextAlert","sequenceId","sequence","sequenceStatus","useSelector","state","courseware","bannerText","INFO","useSequenceEntranceExamAlert","intl","entranceExamCurrentScore","entranceExamEnabled","entranceExamId","entranceExamMinimumScorePct","entranceExamPassed","entranceExamData","entranceExamAlertVisible","sectionId","entranceExamText","formatMessage","messages","DECODE_ROUTES","ACCESS_DENIED","HOME","LIVE","DATES","DISCUSSION","PROGRESS","COURSE_END","COURSEWARE","REDIRECT_HOME","REDIRECT_SURVEY","ROUTES","UNSUBSCRIBE","PREFERENCES_UNSUBSCRIBE","REDIRECT","DASHBOARD","ENTERPRISE_LEARNER_DASHBOARD","CONSENT","REDIRECT_MODES","DASHBOARD_REDIRECT","ENTERPRISE_LEARNER_DASHBOARD_REDIRECT","CONSENT_REDIRECT","HOME_REDIRECT","SURVEY_REDIRECT","VERIFIED_MODES","WIDGETS","DISCUSSIONS","NOTIFICATIONS","LOADING","LOADED","FAILED","DEBOUNCE_WAIT","useCoursewareSearchFeatureFlag","useParams","enabled","setEnabled","useState","useEffect","fetchCoursewareSearchSettings","then","response","useCoursewareSearchState","show","courseHome","showSearch","useElementBoundingBox","elementId","info","setInfo","element","document","getElementById","useLayoutEffect","debouncedRecalculate","debounce","bounds","getBoundingClientRect","leading","global","addEventListener","removeEventListener","console","warn","useLockScroll","window","scrollTo","body","classList","add","remove","initSearchParams","q","f","useCoursewareSearchParams","searchParams","setSearchParams","useSearchParams","query","get","filter","toLowerCase","setQuery","params","setFilter","clearSearchParams","searchOpenAction","description","contentSearchButton","searchSubmitLabel","searchClearAction","searchCloseAction","searchModuleTitle","searchBarPlaceholderText","loading","searchResultsNone","searchResultsLabel","searchResultsError","CoursewareSearchToggle","_ref","dispatch","useDispatch","handleSearchOpenClick","setShowSearch","_jsx","className","children","Button","variant","size","onClick","iconAfter","ManageSearch","propTypes","intlShape","isRequired","injectIntl","CoursewareSearchForm","searchTerm","onSubmit","onChange","placeholder","_jsxs","SearchField","Advanced","value","submitButtonLocation","screenReaderText","label","clearButton","submitButton","Label","Input","autoFocus","ClearButton","SubmitButton","buttonText","PropTypes","defaultProps","CoursewareSearchEmpty","iconTypeMapping","TextFields","video","VideoCamera","Folder","other","Article","defaultIcon","CoursewareSearchResults","results","length","baseUrl","getConfig","LMS_BASE_URL","map","_ref2","title","location","url","contentHits","key","icon","linkProps","startsWith","href","target","rel","_objectSpread","Icon","src","breadcrumb","i","filterAll","filterTypes","filterOther","validFilters","CoursewareSearchResultsFilter","lastSearch","filterKeyword","data","grouped","reduce","acc","rest","_objectWithoutProperties","_excluded","resultType","includes","push","output","forEach","tabKeys","Object","keys","filters","count","activeKey","Tabs","onSelect","_ref3","_ref4","Tab","eventKey","CoursewareSearch","sectionProps","searchKeyword","org","lastSearchKeyword","errors","total","top","Math","floor","clearSearch","updateModel","modelType","model","handleSubmit","sendTrackingLogEvent","org_key","courserun_key","event_type","keyword","searchCourseContent","status","style","handleSearchCloseClick","Close","Spinner","animation","Alert","_Fragment","CoursewareSearchResultsFilterContainer","calculateAssignmentTypeGrades","points","assignmentWeight","numDroppable","dropCount","lowestScore","min","lowestScoreIndex","indexOf","splice","averageGrade","weightedGrade","a","b","toFixed","async","getCourseHomeCourseMetadata","rootSlug","appendBrowserTimezoneToUrl","getAuthenticatedHttpClient","metadata","camelCaseObject","tabs","slug","tabId","originalUserIsStaff","normalizeCourseHomeCourseMetadata","getDatesTabData","error","httpErrorStatus","getProgressTabData","targetUserId","camelCasedData","gradingPolicy","assignmentPolicies","sectionScores","gradeByAssignmentType","assignment","grades","Array","numTotal","fill","numAssignmentsCreated","numTotalExpectedAssignments","chapter","subsections","subsection","hasGradedAssignment","showGrades","numPointsPossible","assignmentType","numPointsEarned","shift","weight","shortLabel","normalizeAssignmentPolicies","gradeRange","grading_policy","grade_range","gradesFeatureIsFullyLocked","completionSummary","lockedCount","gradesFeatureIsPartiallyLocked","learnerHasAccess","replace","getProctoringInfoData","username","encodeURIComponent","customAttributes","getLiveTabIframe","getTimeOffsetMillis","headerDate","requestTime","responseTime","timeOffsetMillis","parse","getOutlineTabData","now","tabData","headers","access_expiration","canShowUpgradeSock","can_show_upgrade_sock","certData","cert_data","course_blocks","blocks","models","sections","sequences","values","block","display_name","sectionIds","hasScheduledContent","has_scheduled_content","complete","resumeBlock","resume_block","sequenceIds","hideFromTOC","hide_from_toc","due","effortActivities","effort_activities","effortTime","effort_time","showLink","lms_web_url","navigationDisabled","navigation_disabled","logInfo","isArray","section","normalizeOutlineBlocks","courseGoals","course_goals","courseTools","course_tools","datesBannerInfo","dates_banner_info","datesWidget","dates_widget","enableProctoredExams","enable_proctored_exams","enroll_alert","enrollmentMode","enrollment_mode","handoutsHtml","handouts_html","hasEnded","has_ended","offer","resumeCourse","resume_course","date","userHasPassingGrade","user_has_passing_grade","verifiedMode","verified_mode","welcomeMessageHtml","welcome_message_html","postCourseDeadlines","URL","post","course_key","research_event_data","postWeeklyLearningGoal","daysPerWeek","subscribedToReminders","course_id","days_per_week","subscribed_to_reminders","postDismissWelcomeMessage","postRequestCert","executePostFromPostEvent","postData","researchEventData","bodyParams","unsubscribeFromCourseGoal","token","res","getCoursewareSearchEnabledFlag","searchCourseContentFromAPI","options","arguments","page","limit","formData","slice","createSlice","name","initialState","courseStatus","proctoringPanelStatus","toastBodyText","toastBodyLink","toastHeader","reducers","fetchProctoringInfoResolved","fetchTabDenied","fetchTabFailure","fetchTabRequest","fetchTabSuccess","setCallToActionToast","_ref5","header","link","linkText","_ref6","actions","reducer","Joi","require","endpointSchema","object","took","number","required","maxScore","allow","array","items","string","contentType","content","displayName","htmlContent","transcriptEn","unknown","strict","defaultType","eventTypes","POST_EVENT","fetchTab","getTabData","promisesToFulfill","courseHomeCourseMetadataResult","tabDataResult","Promise","allSettled","addModel","reason","e","logError","fetchDatesTab","fetchProgressTab","parseInt","fetchOutlineTab","fetchLiveTab","fetchDiscussionTab","dismissWelcomeMessage","requestCert","resetDeadlines","link_text","saveWeeklyLearningGoal","processEvent","eventData","event","eventName","curatedResponse","searchKeywords","validate","Error","keywords","split","ms","rawResults","result","score","searchContent","word","list","index","findIndex","newItem","newList","sort","mapSearchResponse","message","clientMs","accessDeniedCount","table","contactSupport","errorHeader","goToDashboard","certStatusEarnedNotAvailableHeader","certStatusDownloadableHeader","certStatusNotPassingHeader","certStatusNotPassingButton","CourseEndAlert","WARNING_PERIOD_MS","useCourseEndAlert","courseDateBlocks","endBlock","find","dateType","endDate","delta","clientCourseEndAlert","ScheduledContentAlert","datesTabLink","allDates","casualGoalButtonText","casualGoalButtonTitle","certAlt","collapseAll","completedAssignment","completedSection","hiddenSection","hiddenSequenceLink","dates","editGoal","expandAll","goal","goalReminderDetail","goalUnsure","handouts","incompleteAssignment","incompleteSection","intenseGoalButtonText","intenseGoalButtonTitle","learnMore","openSection","proctoringInfoPanel","regularGoalButtonText","regularGoalButtonTitle","resumeBlurb","resume","setGoal","setGoalReminder","setLearningGoalButtonScreenReaderText","setWeeklyGoal","setWeeklyGoalDetail","startBlurb","tools","upgradeButton","upgradeTitle","welcomeMessage","welcomeMessageShowMoreButton","welcomeMessageShowLessButton","welcomeTo","notStartedProctoringStatus","startedProctoringStatus","submittedProctoringStatus","verifiedProctoringStatus","rejectedProctoringStatus","errorProctoringStatus","otherCourseApprovedProctoringStatus","expiringSoonProctoringStatus","expiredProctoringStatus","proctoringCurrentStatus","notStartedProctoringMessage","startedProctoringMessage","submittedProctoringMessage","verifiedProctoringMessage","rejectedProctoringMessage","errorProctoringMessage","otherCourseApprovedProctoringMessage","otherCourseApprovedProctoringDetail","expiringSoonProctoringMessage","expiredProctoringMessage","proctoringPanelGeneralInfo","proctoringPanelGeneralInfoSubmitted","proctoringPanelGeneralTime","proctoringOnboardingButton","proctoringOnboardingPracticeButton","proctoringOnboardingButtonNotOpen","proctoringReviewRequirementsButton","proctoringOnboardingButtonPastDue","notPassingHeader","notPassingBody","inProgressHeader","inProgressBody","requestableHeader","requestableBody","requestableButton","unverifiedHeader","unverifiedButton","unverifiedPendingBody","downloadableHeader","viewableButton","notAvailableHeader","notAvailableEndDateBody","upgradeHeader","upgradeBody","unverifiedHomeHeader","unverifiedHomeButton","unverifiedHomeBody","backToContent","courseGradeBody","courseGradeBarAltText","courseGradeFooterGenericPassing","courseGradeFooterNonPassing","courseGradeFooterPassingWithGrade","courseGradePreviewHeaderLocked","courseGradePreviewHeaderLimited","courseGradePreviewHeaderAriaHidden","courseGradePreviewUnlockCertificateBody","courseGradePartialPreviewUnlockCertificateBody","courseGradePreviewUpgradeDeadlinePassedBody","courseGradePreviewUpgradeButton","courseGradeRangeTooltip","courseOutline","currentGradeLabel","detailedGrades","detailedGradesEmpty","footnotesTitle","grade","gradesAndCredit","gradeRangeTooltipAlt","gradeSummary","gradeSummaryLimitedAccessExplanation","gradeSummaryTooltipAlt","gradeSummaryTooltipBody","noAccessToAssignmentType","noAccessToSubsection","passingGradeLabel","problemScoreLabel","problemScoreToggleAltText","sectionGradeOverridden","weightedGradeSummary","suggestedSchedule","upgradeToCompleteHeader","upgradeToCompleteBody","upgradeToCompleteButton","upgradeToShiftBody","upgradeToShiftButton","missedDeadlines","shiftDatesBody","shiftDatesButton","courseMaterial","completed","congrats","earned","emailSubject","forward","goalMet","keepItUp","share","socialMessage","postCelebrationComplete","CELEBRATION_LOCAL_STORAGE_KEY","handleNextSectionCelebration","nextSequenceId","setLocalStorage","prevSequenceId","shouldCelebrateOnSectionLoad","celebrateFirstSection","celebrations","celebrationIds","getLocalStorage","onTargetSequence","shouldCelebrate","streakLengthToCelebrate","first_section","clearLocalStorage","firstSection","CelebrationModal","isOpen","onClose","wideScreen","useWindowSize","width","breakpoints","small","minWidth","administrator","getAuthenticatedUser","sendTrackEvent","is_staff","recordFirstSectionCelebration","StandardModal","footerNode","ActionRow","isStacked","hasCloseButton","ClapsMobile","alt","ClapsTablet","SocialIcons","analyticsId","WeeklyGoalCelebrationModal","weekly_goal","recordWeeklyGoalCelebration","FormattedMessage","nTimes","Target","Lightbulb","height","strongText","Calculator","Component","constructor","props","super","this","equation","bind","preventDefault","stopPropagation","urlEncoded","URLSearchParams","append","toString","setState","changeEquation","render","Collapsible","Trigger","tag","Visible","whenOpen","FontAwesomeIcon","faTimesCircle","whenClosed","faCalculator","Body","faEquals","tabIndex","readOnly","faQuestionCircle","maxHeight","overflow","tagName","expressions_link","SUPPORT_URL_CALCULATOR_MATH","scope","dir","exponentSyntax","notationSyntax","NotesVisibility","visibility","visible","put","visibilityUrl","contentWindow","postMessage","notes","role","handleClick","onKeyDown","faPencilAlt","ContentTools","sidebarIsOpen","learningAssistant","showCalculator","recommendationsStatus","fetchCourseRecommendationsRequest","fetchCourseRecommendationsSuccess","fetchCourseRecommendationsFailure","fetchCourseRecommendations","courseKey","recommendations","discoveryApiUrl","DISCOVERY_API_BASE_URL","recommendationsUrl","enrollmentsUrl","recommendationsResponse","enrollmentsResponse","all","uuid","enrollments","enrollmentRunIds","courseDetails","recUuid","courseRunKeys","every","filterRecommendationsList","getCourseRecommendations","unsubscribeFromGoalReminders","postUnsubscribeFromGoalReminders","applyForCredit","certificateHeaderDownloadable","certificateHeaderNotAvailable","certificateNotAvailableBodyAccessCert","certificateNotAvailableEndDateBody","certificateHeaderUnverified","certificateHeaderRequestable","certificateHeaderUpgradable","certificateImage","completedCourseHeader","congratulationsHeader","congratulationsImage","courseInProgressDescription","courseInProgressHeader","dashboardLink","endOfCourseDescription","endOfCourseHeader","endOfCourseTitle","idVerificationSupportLink","linkedinAddToProfileButton","microBachelorsLearnMore","microMastersLearnMore","microMastersMessage","nextButtonComplete","nextButtonEnd","profileLink","programsLastCourseHeader","requestCertificateBodyText","requestCertificateButton","searchOurCatalogLink","shareMessage","upgradeLink","verificationPending","verifiedCertificateSupportLink","verifyIdentityButton","viewCertificateButton","viewCourseScheduleButton","viewCoursesButton","viewGradesButton","COURSE_EXIT_MODES","disabled","celebration","nonPassing","inProgress","entranceExamFail","CELEBRATION_STATUSES","NON_CERTIFICATE_STATUSES","getCourseExitMode","certificateData","courseExitPageIsActive","canImmediatelyViewCertificate","isCelebratoryStatus","isEligibleForCertificate","certStatus","GetCourseExitNavigation","canViewCertificate","exitMode","exitActive","exitText","logClick","extraProperties","logVisit","notificationTray","openNotificationTrigger","closeNotificationTrigger","responsiveCloseNotificationTray","notificationTitle","noNotificationsMessage","discussionsTitle","discussionNotificationTray","closeTrigger","openSidebarTrigger","responsiveCloseSidebarTray","SidebarBase","ariaLabel","sidebarId","showTitleBar","allowFullHeight","showBorder","useIntl","toggleSidebar","shouldDisplayFullScreen","currentSidebar","SidebarContext","receiveMessage","useCallback","useEventListener","classNames","ArrowBackIos","IconButton","iconAs","ensureConfig","DiscussionsWidget","unitId","hideDiscussionbar","isDiscussionbarAvailable","discussionsUrl","DISCUSSIONS_MFE_BASE_URL","NotificationsWidget","onNotificationSeen","upgradeNotificationCurrentState","setUpgradeNotificationCurrentState","hideNotificationbar","isNotificationbarAvailable","contentTypeGatingEnabled","end","enrollmentEnd","enrollmentStart","marketingUrl","verificationStatus","courseModes","notificationTrayEventProperties","course_end","course_modes","mode","course_start","enrollment_end","enrollment_start","is_upgrade_notification_visible","verification_status","onToggleSidebar","setTimeout","PluginSlot","pluginProps","notificationCurrentState","setNotificationCurrentState","UpgradeNotification","upsellPageName","shouldDisplayBorder","setupgradeNotificationCurrentState","setSessionStorage","sessionStorage","setItem","viewBox","xmlns","fillRule","clipRule","d","ID","DiscussionsNotificationsTrigger","setNotificationStatus","edxProvider","getCourseDiscussionTopics","RightSidebarFilled","RightSidebarOutlined","getItem","getSessionStorage","SIDEBARS","discussionsNotifications","Sidebar","DiscussionsNotificationsSidebar","NotificationTray","DiscussionsSidebar","SIDEBAR_ORDER","modelKeys","StrictDict","units","coursewareMeta","views","student","public","messageTypes","modal","resize","videoFullScreen","loadingState","stateKeys","accessToken","blockAccess","isExam","useIsExam","setBlockAccess","useKeyedState","fetchExamAccessToken","useFetchExamAccessToken","examAccessToken","useExamAccessToken","finally","catch","iframeHeight","hasLoaded","showError","windowTopOffset","iframeUrl","onLoaded","setValue","currentValue","useLoadBearingHook","setIframeHeight","setHasLoaded","setShowError","setWindowTopOffset","frame","hash","hashName","open","Number","scrollY","offset","offsetTop","handleIFrameLoad","onmessage","event_name","fetchCourse","useModalIFrameData","setIsOpen","setOptions","handleModalClose","rootFrame","querySelector","current","modalOptions","shouldDisplay","setShouldDisplay","graded","userNeedsIntegritySignature","iframeParams","show_title","show_bookmark","recheck_access","getIFrameUrl","view","format","examAccess","jumpToId","xblockUrl","stringifyUrl","exam_access","fragmentIdentifier","gradeAvailable","progressPage","HiddenAfterDue","progressTab","progressLink","Hyperlink","textDecoration","destination","Info","headerPlaceholder","loadFailure","loadingHonorCode","loadingLockedContent","loadingSequence","noContent","CourseCelebration","medium","linkedinAddToProfileUrl","relatedPrograms","verifyIdentityUrl","certWebViewUrl","certificateAvailableDate","DashboardLink","IdVerificationSupportLink","ProfileLink","timezoneFormatArgs","timeZone","buttonLocation","footnote","certHeader","buttonPrefix","buttonVariant","buttonEvent","buttonSuffix","certificate","visitEvent","backgroundColor","border","faLinkedinIn","DashboardFootnote","FormattedDate","day","month","year","certAvailableDate","price","FormattedPricing","inline","SUPPORT_URL_VERIFIED_CERTIFICATE","upgradeUrl","percent","percentage","certificateLocked","accessExpirationDate","UpgradeFootnote","deadline","formatDate","Helmet","SITE_NAME","CelebrationMobile","CelebrationDesktop","CheckCircle","maxWidth","program","ProgramCompletion","progress","CourseRecommendations","CourseExit","CourseNonPassing","CourseInProgress","Navigate","to","UnitIcon","faVideo","faBook","faTasks","faEdit","faLock","faCheck","UnitButton","isActive","bookmarked","showCompletion","showTitle","active","as","Link","CompleteIcon","BookmarkFilledIcon","right","connect","mapStateToProps","SequenceNavigationDropdown","onNavigate","unitIds","Dropdown","Toggle","Menu","buttonUnitId","Item","useSequenceNavigationMetadata","currentSequenceId","currentUnitId","sequenceIdsSelector","isFirstUnit","isLastUnit","navigationDisabledNextSequence","navigationDisabledPrevSequence","sequenceIndex","unitIndex","isFirstUnitInSequence","isLastSequence","isLastUnitInSequence","sequenceNavigationDisabled","previousSequenceId","nextLink","previousLink","nextIndex","previousIndex","SequenceNavigationTabs","isSidebarOpen","isNewDiscussionSidebarViewEnabled","NewSidebarContext","enabledInContext","useIsSidebarOpen","indexOfLastVisibleChild","containerRef","invisibleStyle","useIndexOfLastVisibleChild","isOnXLDesktop","extraLarge","isOnLargeDesktop","windowSize","useIsOnLargeDesktop","isOnMediumDesktop","useIsOnMediumDesktop","shouldDisplayDropdown","flexBasis","ref","nextButton","nextUpButton","previousButton","SequenceNavigation","nextHandler","previousHandler","nextSequenceHandler","handleNavigate","close","isLocked","gatedContent","gated","shouldDisplayNotificationTriggerInSequence","renderPreviousButton","prevArrow","isRtl","getLocale","ChevronRight","ChevronLeft","iconBefore","borderBottom","renderNextButton","nextArrow","linkComponent","UnitNavigationEffortEstimate","nextSequence","EffortEstimate","UnitNavigation","onClickPrevious","onClickNext","isAtTop","faChevronRight","faChevronLeft","toggleCourseOutlineTrigger","courseOutlineTitle","completedUnit","incompleteUnit","openDiscussionsTrigger","DiscussionsTrigger","SidebarTriggerBase","QuestionAnswer","notifications","discussions","NotificationIcon","notificationColor","WatchOutline","NotificationTrigger","notificationStatus","is_admin","getSequenceForUnitDeprecated","parent","getLearningSequencesOutline","outlineUrl","learningSequencesData","isReleased","accessible","effective_start","entries","seqId","availableSequenceIds","sequence_ids","childSeqId","some","seq","normalizeLearningSequencesData","getCourseMetadata","content_type_gating_enabled","enrollment","is_active","license","user_timezone","show_calculator","marketing_url","course_exit_page_is_active","certificate_data","entrance_exam_data","language","verify_identity_url","linkedin_add_to_profile_url","related_programs","user_needs_integrity_signature","canAccessProctoredExams","can_access_proctored_exams","learningAssistantEnabled","learning_assistant_enabled","normalizeMetadata","getSequenceMetadata","item_id","blockType","unit","banner_text","gated_content","isTimeLimited","is_time_limited","isProctored","is_proctored","isHiddenAfterDue","is_hidden_after_due","activeUnitIndex","position","saveUnitPosition","save_position","show_completion","allowProctoringOptOut","allow_proctoring_opt_out","page_title","containsContentTypeGatedContent","contains_content_type_gated_content","getSequenceHandlerUrl","getBlockCompletion","usageKey","usage_key","postSequencePosition","getResumeBlock","postIntegritySignature","sendActivationEmail","getCourseDiscussionConfig","getCourseTopics","getCourseOutline","completionStat","completion_stat","completion","completable_children","specialExamInfo","special_exam_info","getCoursewareOutlineSidebarToggles","enable_navigation_sidebar","always_open_auxiliary_sidebar","flatMap","getSequenceId","getCourseOutlineStatus","courseOutlineStatus","getCoursewareOutlineSidebarSettings","coursewareOutlineSidebarSettings","getCourseOutlineShouldUpdate","courseOutlineShouldUpdate","sequenceMightBeUnit","fetchCourseRequest","fetchCourseSuccess","fetchCourseFailure","fetchCourseDenied","fetchSequenceRequest","fetchSequenceSuccess","fetchSequenceFailure","_ref7","fetchCourseOutlineRequest","fetchCourseOutlineSuccess","_ref8","fetchCourseOutlineFailure","setCoursewareOutlineSidebarToggles","_ref9","updateCourseOutlineCompletion","_ref10","isComplete","isUnitComplete","sequenceUnits","completedUnits","isAllUnitsAreComplete","sectionSequences","isAllSequencesAreComplete","hasLockedSequence","courseMetadataResult","learningSequencesOutlineResult","courseHomeMetadataResult","coursewareOutlineSidebarTogglesResult","fetchedMetadata","fetchedCourseHomeMetadata","fetchedOutline","fetchedCoursewareOutlineSidebarTogglesResult","updateModelsMap","modelsMap","addModelsMap","enableNavigationSidebar","alwaysOpenAuxiliarySidebar","fetchSequence","updateModels","checkBlockCompletion","getState","saveSequencePosition","initialActiveUnitIndex","saveIntegritySignature","provider","topics","idField","getCourseOutlineStructure","localStorage","rawItem","JSON","stringify","removeItem","popLocalStorage","handler","eventListenerRef","useRef","useIFramePluginEvents","events","useIFrameHeight","onIframeLoaded","registerLowercase","signInLowercase","signInSentenceCase","update","addModels","removeModel","removeModels","ids","shallowEqual","useModels","NoticesProvider","isRedirected","setIsRedirected","ENABLE_NOTICES","getNotices","getData","PathFixesProvider","useLocation","pathname","newLocation","replaceAll","new_path","old_path","referrer","search","registerOverrideMethod","pluginName","methodName","method","usePluginsCallback","defaultMethod","plugins","plugin","left","pointerEvents","containerElementRef","overflowElementRef","containingRectRef","setIndexOfLastVisibleChild","containingRect","childNodesArr","prototype","call","nextIndexOfLastVisibleChild","childNode","sumWidth","srPrices","srInlinePrices","currencySymbol","discountedPrice","originalPrice","UpgradeButton","pricing","UpgradeNowButton","AlertList","customAlerts","customProps","UserMessagesContext","getAlertComponent","topicMessages","AlertComponent","Suspense","fallback","onDismiss","cleanupId","getMasqueradeOptions","postMasqueradeOptions","genericError","userNameLabel","patchTourData","tourData","patch","closeNewUserCourseHomeModal","disableNewUserCourseHomeModal","endCourseHomeTour","course_home_tour_status","disableCourseHomeTour","endCoursewareTour","show_courseware_tour","disableCoursewareTour","fetchTourData","toursEnabled","getTourData","setTourData","showCoursewareTour","showExistingUserCourseHomeTour","showNewUserCourseHomeModal","showNewUserCourseHomeTour","launchCourseHomeTour","courseHomeTourStatus","beginTour","launchTour","newUserModalBody","newUserModalTitleWelcome","skipForNow","getAccessDeniedRedirectUrl","activeTabSlug","additionalContextUserMessage","Intl","DateTimeFormat","developerMessage","activities","minutesAbbreviated","minutesFull","minuteCount","ceil","minutes","activityCount","fontSize","congratulations","streakBody","streakButton","streakButtonSrOnly","streakButtonAA759","streakHeader","streakFactoidABoldedSection","streakFactoidBBoldedSection","streakDiscountMessage","CloseText","StreakModal","metadataModel","isStreakCelebrationOpen","closeStreakCelebration","streakDiscountCouponEnabled","factoid","streakLength","boldedSectionA","boldedSectionB","factoids","bolded_section","streak_length","random","getRandomFactoid","randomFactoid","setRandomFactoid","discountCode","discountPercent","setDiscountPercent","queryingDiscount","recordStreakCelebration","ECOMMERCE_BASE_URL","voucher","sku","calculateVoucherDiscount","totalInclTax","totalInclTaxExclDiscounts","discountMultipler","showOffer","ModalDialog","recordModalClosing","isFullscreenScroll","Header","Title","StreakMobileImage","StreakDesktopImage","MoneyFilled","toLocaleDateString","Footer","CloseButton","initializeStore","configureStore","modelsReducer","coursewareReducer","courseHomeReducer","learningAssistantReducer","specialExams","specialExamsReducer","recommendationsReducer","tours","toursReducer","pluginsReducer","middleware","getDefaultMiddleware","serializableCheck","ignoredActions","ignoredPaths","failure","browserTimezone","resolvedOptions","urlObject","accountActivationAlertTitle","AccountActivationAlert","showModal","setShowModal","showSpinner","setShowSpinner","showCheck","setShowCheck","handleOnClick","Cookies","path","domain","process","button","siteName","ArrowForward","AlertModal","bodyContent","boldEmail","email","sendEmailTag","Check","dueNext","pastDue","unreleased","verifiedOnly","item","isPastDue","isUnreleased","getBadgeListAndColor","assignments","isLearnerAssignment","isToday","daycmp","isInFuture","badgesInfo","shownForDay","bg","shownForItem","x","color","badges","shown","Badge","Day","first","last","weekday","itemBadges","showDueDateTime","textColor","FormattedTime","timeZoneName","extraInfo","OverlayTrigger","placement","overlay","Tooltip","faInfoCircle","Timeline","groupedDates","foundNextDue","foundToday","courseDateBlock","dateInfo","parsedDate","compared","groupedDate","SuggestedScheduleHeader","UpgradeToCompleteAlert","logUpgradeLinkClick","verifiedUpgradeLink","Row","Col","xs","md","Heading","DatesTab","isSelfPaced","hasDeadlines","linkCategory","linkName","linkType","pageName","ShiftDatesAlert","fetch","UpgradeToShiftDatesAlert","getFullYear","getMonth","getDate","DiscussionTab","originalPath","navigate","useNavigate","iFrameHeight","basePath","generatePath","minHeight","_path","_circle","_path2","_extends","assign","n","t","r","hasOwnProperty","apply","SvgUnsubscribe","cx","cy","transform","ResultPage","courseTitle","errorDescription","CONTACT_URL","UnsubscribeIcon","LiveTab","liveModel","live","iframe","dangerouslySetInnerHTML","__html","SequenceLink","coursewareUrl","displayTitle","dueDateMessage","assignmentDue","noDueDateMessage","fasCheckCircle","fixedWidth","farCheckCircle","Block","Section","defaultOpen","expand","setOpen","sectionTitle","DisabledVisible","styling","onToggle","iconWhenClosed","faPlus","iconWhenOpen","genericMessages","faMinus","SvgFlagBlack","SvgFlagOutline","SvgFlagGray","strokeWidth","FlagButton","buttonIcon","handleSelect","isSelected","classnames","LearningGoalButton","level","casual","FlagCasualIcon","regular","FlagRegularIcon","intense","FlagIntenseIcon","ProctoringInfoPanel","setLink","onboardingPastDue","setOnboardingPastDue","showInfoPanel","setShowInfoPanel","setStatus","readableStatus","setReadableStatus","releaseDate","setReleaseDate","readableStatuses","notStarted","started","submitted","verified","rejected","otherCourseApproved","expiringSoon","expired","getReadableStatusClass","examStatus","readableClass","examStatusCamelCase","camelCase","isCurrentlySubmitted","isNotYetReleased","examReleaseDate","onboarding_status","onboarding_link","expiration_date","dateString","getTime","isExpiringSoon","onboarding_release_date","onboarding_past_due","onboardingExamButton","borderClass","getBorderClass","progressHeader","progressHeaderForTargetUser","studioLink","ProgressHeader","userId","studioUrl","pageTitle","donutLabel","completionBody","completeContentTooltip","courseCompletion","incompleteContentTooltip","lockedContentTooltip","percentComplete","percentIncomplete","percentLocked","CompleteDonutSegment","completePercentage","lockedPercentage","showCompletePopover","setShowCompletePopover","completeSegmentOffset","completeTooltipDegree","lockedSegmentOffset","onBlur","onFocus","Popover","Content","y","strokeDasharray","strokeDashoffset","IncompleteDonutSegment","incompletePercentage","showIncompletePopover","setShowIncompletePopover","incompleteTooltipDegree","LockedDonutSegment","showLockedPopover","setShowLockedPopover","iconDegree","transformOrigin","CompletionDonutChart","completeCount","incompleteCount","numTotalUnits","isLocaleRtl","CourseCompletion","GradeRangeTooltip","iconButtonClassName","passingGrade","showTooltip","setShowTooltip","orderedGradeRange","trigger","range","previousGrade","InfoOutline","CourseGradeFooter","courseGrade","isPassing","letterGrade","hasLetterGrades","footerText","minGradeRangeCutoff","possibleMaxGradeRangeValues","maxGradeRangeCutoff","minGrade","maxGrade","WarningFilled","whiteSpace","CourseGradeHeader","eventProperties","previewText","Locked","logUpgradeButtonClick","CurrentGradeTooltip","tooltipClassName","currentGrade","currentGradeDirection","textAnchor","PassingGradeTooltip","passingGradeDirection","GradeBar","lockedTooltipClassName","adjustedRtlStyle","percentOffest","courseCredit","minimumGrade","requirementsHeader","upcoming","verificationFailed","verificationSubmitted","CreditInformation","creditCourseRequirements","eligibilityStatus","requirementStatus","requirements","creditLink","isInline","CREDIT_HELP_LINK_URL","requirement","WatchFilled","namespace","criteria","order","CourseGrade","applyLockedOverlay","ProblemScoreDrawer","problemScores","problemScore","possible","SubsectionTitleCell","blockKey","subsectionTitle","ArrowDropDown","ArrowDropUp","Blocked","logSubsectionClicked","assignment_block_key","override","system","DetailedGradesTable","subsectionScores","detailedGradesData","DataTable","itemCount","columns","accessor","headerClassName","cellClassName","Table","DetailedGrades","hasSectionScores","overviewTab","overviewTabUrl","outlineLink","logOutlineLinkClick","GradeSummaryHeader","allOfSomeAssignmentTypeIsLocked","AssignmentTypeCell","footnoteMarker","footnoteId","locked","lockedIcon","DroppableAssignmentFootnote","footnotes","GradeSummaryTableFooter","bgColor","totalGrade","TableFooter","GradeSummaryTable","setAllOfSomeAssignmentTypeIsLocked","gradeSummaryData","getFootnoteId","subsectionAssignmentsOfType","flat","hasNoAccessToAssignmentsOfType","getCell","Cell","getAssignmentTypeCell","GradeSummary","datesCardDescription","datesCardLink","outlineCardDescription","outlineCardLink","relatedLinks","RelatedLinks","logLinkClicked","link_clicked","datesTab","datesTabUrl","missedGatedContent","RedirectPage","pattern","consentPath","queryString","ENTERPRISE_LEARNER_PORTAL_URL","CoursewareRedirectLandingPage","PageLoading","srMessage","Routes","Route","DecodePageRoute","PageWrap","JumpNavMenuItem","currentSequence","currentUnit","isDefault","targetUrl","target_name","current_id","widget_placement","logEvent","sequenceShape","CourseBreadcrumb","withSeparator","defaultContent","default","showRegularLink","ENABLE_JUMPNAV","useToggle","setTarget","textOverflow","ModalPopup","positionRef","CourseBreadcrumbs","allSequencesInSections","fromEntries","links","chapters","sequentials","faHome","faBookmark","getBookmarksBaseUrl","addBookmarkLabel","hasBookmarkLabel","BookmarkButton","isBookmarked","isProcessing","bookmarkState","toggleBookmark","bookmarkedUpdateState","usageId","delete","deleteBookmark","removeBookmark","usage_id","createBookmark","addBookmark","StatefulButton","disabledStates","labels","defaultProcessing","bookmarkedProcessing","icons","BookmarkOutlineIcon","Chat","contentToolsEnabled","activeAttempt","exam","hasVerifiedEnrollment","shouldDisplayChat","validDates","utcDate","toISOString","startDate","attempt_id","createPortal","Xpert","CatalogSuggestion","SEARCH_CATALOG_URL","faSearch","recommendationsHeading","recommendationsCourseFooter","listJoin","browseCatalog","loadingRecommendations","CourseCard","original","image","owners","formattedOwners","owner","join","sp","subtitle","truncate","reserveLastWord","Card","isClickable","ImageCap","textElement","IntlCard","recommendationsLength","recommendations_status","recommendations_length","recommendationData","recommendation","isPaginated","pageSize","pageIndex","CardView","CardComponent","Footnote","faCalendarAlt","programTypes","programLink","SUPPORT_URL","CREDENTIALS_BASE_URL","certImage","SidebarToRender","SidebarProvider","large","shouldDisplaySidebarOpen","isInitiallySidebarOpen","sidebarKey","initialSidebar","DISCUSSIONS_NOTIFICATIONS","setCurrentSidebar","setHideDiscussionbar","setHideNotificationbar","isEmpty","handleWidgetToggle","widgetId","prevWidgetId","handleSidebarToggle","prevSidebar","clearSidebarKeyIfWidgetsUnavailable","contextValue","Provider","SidebarTriggers","HonorCode","authUser","honorCodeUrl","TERMS_OF_SERVICE_URL","Spacer","handleCancel","handleAgree","LockPaywall","notificationTrayVisible","shouldDisplayBulletPointsBelowCertificate","shouldDisplayGatedContentOneColumn","shouldDisplayGatedContentTwoColumns","shouldDisplayGatedContentTwoColumnsHalf","shouldWrapTextOnButton","extraSmall","pastExpirationDeadline","logClickPastExpiration","float","VerifiedCertBullet","UnlockGradedBullet","FullAccessBullet","SupportMissionBullet","UnitSuspense","shouldDisplayHonorCode","hooks","shouldDisplayContentGating","isUnitHasDiscussionTopics","discussionsSidebar","notificationsSidebar","newSidebar","isMobileView","borderColor","DashedCircleIcon","stroke","remainder","CompletionIcon","LmsCompletionSolidIcon","CheckCircleIcon","SidebarSection","handleSelectSection","activeSequenceId","isActiveSection","courseOutlineMessages","ChevronRightIcon","SidebarUnit","isFirst","activeUnitId","UNIT_ICON_TYPES","iconType","lock","findSequenceByUnitId","activeSequence","targetSequence","current_tab","tab_count","target_id","target_tab","target_tab_count","isCompleted","problem","vertical","iconMap","LmsVideocamIcon","LmsVideocamCompleteIcon","LmsEditSquareIcon","LmsEditSquareCompleteIcon","ArticleIcon","LockedIcon","LmsBookIcon","LmsBookCompleteIcon","useCourseOutlineSidebar","isCollapsedOutlineSidebar","isEnabledSidebar","isOpenSidebar","isActiveEntranceExam","handleToggleCollapse","defaultEmailBody","shareEmail","shareService","emailBody","hashtags","twitterUrl","TWITTER_URL","twitterAccount","substring","lastIndexOf","service","socialUtmCampaign","SOCIAL_UTM_MILESTONE_CAMPAIGN","socialUtmMarketingUrl","LinkedinShareButton","beforeOnClick","LinkedinIcon","round","TwitterShareButton","platform","TwitterIcon","FacebookShareButton","quote","FacebookIcon","EmailShareButton","subject","EmailIcon","TWITTER_HASHTAG","WrappedComponent","routeCourseId","routeSequenceId","routeUnitId","concat","decodeUrl","encodedUrl","decodedUrl","decodeURIComponent","computedMatch","route","matchedRoute","useMatch","param","newUrl","renderSrMessage","attrs","tabChildren","childrenArray","toArray","indexOfOverflowStart","wrappedChildren","child","overflowChildren","overflowChild","UpsellNoFBECardContent","UpsellFBEFarAwayCardContent","UpsellFBESoonCardContent","includingAnyProgress","benefitsOfUpgrading","instanceOf","PastExpirationCardContent","ExpirationCountdown","expirationText","hoursToExpiration","dayCount","hourCount","AccessExpirationDateBanner","PastExpirationDateBanner","dateNow","correctedTime","promotionEventProperties","creative","promotion_id","upgradeNotificationHeaderText","expirationBanner","upsellMessage","callToActionButton","offerCode","hoursToAccessExpiration","hoursToDiscountExpiration","CheckmarkBullet","verifiedCertLink","MARKETING_SITE_BASE_URL","gradedAssignmentsInBoldText","fullAccessInBoldText","missionInBoldText","getAlertVariant","DANGER","SUCCESS","getAlertIcon","stacked","ParagonAlert","WELCOME","FLASH_MESSAGES_LOCAL_STORAGE_KEY","UserMessagesProvider","setMessages","nextId","setNextId","refId","addFlash","flashMessages","addFlashMessage","others","currentMessages","clear","flashMessage","messagesOfArLanguage","messagesOfViLanguage","messagesOfUkLanguage","messagesOfTrTrLanguage","messagesOfThLanguage","messagesOfTeLanguage","messagesOfRuLanguage","messagesOfPtPtLanguage","messagesOfPtBrLanguage","messagesOfLvLanguage","messagesOfItItLanguage","messagesOfIdLanguage","messagesOfHiLanguage","messagesOfHeLanguage","messagesOfFrCaLanguage","messagesOfFaLanguage","messagesOfEsEsLanguage","messagesOfEs419Language","messagesOfElLanguage","messagesOfDeDeLanguage","messagesOfDaLanguage","messagesOfBoLanguage","messagesOfSwLanguage","messagesOfDeLanguage","messagesFromFrontendPlatform","messagesFromParagon","messagesFromFrontendComponentHeader","messagesFromFrontendComponentFooter","messagesFromFrontendLibSpecialExams","subscribe","APP_READY","ReactDOM","App","APP_INIT_ERROR","ErrorPage","initialize","requireAuthenticatedUser","hydrateAuthenticatedUser","handlers","config","mergeConfig","ENABLE_ALTERNATE_ENROLLMENT_ALERT","ENTERPRISE_LEARNER_PORTAL_HOSTNAME","INSIGHTS_BASE_URL","INTERCOM_APP_ID","STUDIO_BASE_URL","SUPPORT_URL_ID_VERIFICATION","LEGACY_THEME_NAME","EXAMS_BASE_URL","PROCTORED_EXAM_FAQ_URL","PROCTORED_EXAM_RULES_URL","CHAT_RESPONSE_URL","PRIVACY_POLICY_URL","MasqueradeUserNameInput","onError","onKeyPress","user_name","success","reload","_this$props","MasqueradeWidgetOption","parentNode","click","groupId","groupName","userName","userPartitionId","userNameInputToggle","group_id","user_partition_id","accumulator","selected","SequenceContainerSlot","UnitTitleSlot","unitTitle","unsubscribeLoading","unsubscribeSuccessHeading","unsubscribeSuccessMessage","unsubscribeFailedHeading","unsubscribeFailedMessage","preferenceCenterUrl","PreferencesUnsubscribe","userToken","updatePatch","getUnsubscribeUrl","unsubscribeNotificationPreferences","pageContent","CheckCircleLightOutline","iconClass","headingText","bodyText","ErrorOutline","Container","ACCOUNT_SETTINGS_URL","DismissButtonFormattedMessage","NextButtonFormattedMessage","OkayButtonFormattedMessage","onEnd","checkpoints","endButtonText","onEscape","tourId","datesCheckpoint","outlineCheckpoint","tabNavigationCheckpoint","upgradeCheckpoint","weeklyGoalsCheckpoint","advanceButtonText","dismissButtonText","NewUserCourseHomeTourModal","onStartTour","MarketingModal","heroIsDark","heroNode","Hero","Background","backgroundSrc","heroImage","welcome","ProductTours","activeTab","isAbandonTourEnabled","setIsAbandonTourEnabled","isCoursewareTourEnabled","setIsCoursewareTourEnabled","isExistingUserCourseHomeTourEnabled","setIsExistingUserCourseHomeTourEnabled","isNewUserCourseHomeTourEnabled","setIsNewUserCourseHomeTourEnabled","isCoursewareTab","isOutlineTab","abandonTour","coursewareTour","existingUserCourseHomeTour","newUserCourseHomeTour","ProductTour","LaunchCourseHomeTourButton","srOnly","tour_variant","Compass","IntlDashboardLink","IntlIdVerificationSupportLink","IntlProfileLink"],"sourceRoot":""}