@openedx/frontend-app-learner-dashboard 1.0.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +661 -0
- package/README.rst +86 -0
- package/package.json +84 -0
- package/src/Main.jsx +20 -0
- package/src/__mocks__/file.js +1 -0
- package/src/__mocks__/svg.js +1 -0
- package/src/__snapshots__/App.test.jsx.snap +83 -0
- package/src/__snapshots__/index.test.jsx.snap +43 -0
- package/src/app.scss +41 -0
- package/src/app.ts +23 -0
- package/src/assets/empty-course.svg +49 -0
- package/src/assets/more-courses-sidewidget.svg +52 -0
- package/src/assets/verified-ribbon.png +0 -0
- package/src/components/Banner.jsx +26 -0
- package/src/components/Banner.test.jsx +27 -0
- package/src/components/__snapshots__/Banner.test.jsx.snap +31 -0
- package/src/constants.ts +1 -0
- package/src/containers/CourseCard/CourseCard.scss +75 -0
- package/src/containers/CourseCard/__snapshots__/index.test.jsx.snap +111 -0
- package/src/containers/CourseCard/components/CourseCardActions/ActionButton/__snapshots__/index.test.jsx.snap +14 -0
- package/src/containers/CourseCard/components/CourseCardActions/ActionButton/hooks.js +8 -0
- package/src/containers/CourseCard/components/CourseCardActions/ActionButton/hooks.test.js +21 -0
- package/src/containers/CourseCard/components/CourseCardActions/ActionButton/index.jsx +16 -0
- package/src/containers/CourseCard/components/CourseCardActions/ActionButton/index.test.jsx +25 -0
- package/src/containers/CourseCard/components/CourseCardActions/BeginCourseButton.jsx +38 -0
- package/src/containers/CourseCard/components/CourseCardActions/BeginCourseButton.test.jsx +86 -0
- package/src/containers/CourseCard/components/CourseCardActions/ResumeButton.jsx +38 -0
- package/src/containers/CourseCard/components/CourseCardActions/ResumeButton.test.jsx +84 -0
- package/src/containers/CourseCard/components/CourseCardActions/SelectSessionButton.jsx +28 -0
- package/src/containers/CourseCard/components/CourseCardActions/SelectSessionButton.test.jsx +34 -0
- package/src/containers/CourseCard/components/CourseCardActions/ViewCourseButton.jsx +37 -0
- package/src/containers/CourseCard/components/CourseCardActions/ViewCourseButton.test.jsx +45 -0
- package/src/containers/CourseCard/components/CourseCardActions/__snapshots__/BeginCourseButton.test.jsx.snap +39 -0
- package/src/containers/CourseCard/components/CourseCardActions/__snapshots__/ResumeButton.test.jsx.snap +39 -0
- package/src/containers/CourseCard/components/CourseCardActions/__snapshots__/SelectSessionButton.test.jsx.snap +19 -0
- package/src/containers/CourseCard/components/CourseCardActions/__snapshots__/ViewCourseButton.test.jsx.snap +39 -0
- package/src/containers/CourseCard/components/CourseCardActions/index.jsx +42 -0
- package/src/containers/CourseCard/components/CourseCardActions/index.test.jsx +97 -0
- package/src/containers/CourseCard/components/CourseCardActions/messages.js +26 -0
- package/src/containers/CourseCard/components/CourseCardBanners/CertificateBanner.jsx +95 -0
- package/src/containers/CourseCard/components/CourseCardBanners/CertificateBanner.test.jsx +227 -0
- package/src/containers/CourseCard/components/CourseCardBanners/CourseBanner.jsx +57 -0
- package/src/containers/CourseCard/components/CourseCardBanners/CourseBanner.test.jsx +131 -0
- package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/__snapshots__/index.test.jsx.snap +58 -0
- package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/hooks.js +42 -0
- package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/hooks.test.js +90 -0
- package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/index.jsx +36 -0
- package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/index.test.jsx +95 -0
- package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/messages.js +16 -0
- package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/ApprovedContent.jsx +35 -0
- package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/ApprovedContent.test.jsx +64 -0
- package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/EligibleContent.jsx +34 -0
- package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/EligibleContent.test.jsx +82 -0
- package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/MustRequestContent.jsx +36 -0
- package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/MustRequestContent.test.jsx +74 -0
- package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/PendingContent.jsx +30 -0
- package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/PendingContent.test.jsx +63 -0
- package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/RejectedContent.jsx +27 -0
- package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/RejectedContent.test.jsx +54 -0
- package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/components/CreditContent.jsx +51 -0
- package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/components/CreditContent.test.jsx +60 -0
- package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/components/CreditRequestForm/__snapshots__/index.test.jsx.snap +32 -0
- package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/components/CreditRequestForm/hooks.js +13 -0
- package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/components/CreditRequestForm/hooks.test.js +45 -0
- package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/components/CreditRequestForm/index.jsx +43 -0
- package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/components/CreditRequestForm/index.test.jsx +65 -0
- package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/components/CreditRequestForm/ref.test.jsx +34 -0
- package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/components/ProviderLink.jsx +24 -0
- package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/components/ProviderLink.test.jsx +42 -0
- package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/components/__snapshots__/CreditContent.test.jsx.snap +60 -0
- package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/components/__snapshots__/ProviderLink.test.jsx.snap +11 -0
- package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/hooks.js +27 -0
- package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/hooks.test.js +56 -0
- package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/messages.js +61 -0
- package/src/containers/CourseCard/components/CourseCardBanners/EntitlementBanner.jsx +66 -0
- package/src/containers/CourseCard/components/CourseCardBanners/EntitlementBanner.test.jsx +63 -0
- package/src/containers/CourseCard/components/CourseCardBanners/RelatedProgramsBanner/ProgramsList.jsx +23 -0
- package/src/containers/CourseCard/components/CourseCardBanners/RelatedProgramsBanner/ProgramsList.test.jsx +23 -0
- package/src/containers/CourseCard/components/CourseCardBanners/RelatedProgramsBanner/__snapshots__/ProgramsList.test.jsx.snap +28 -0
- package/src/containers/CourseCard/components/CourseCardBanners/RelatedProgramsBanner/__snapshots__/index.test.jsx.snap +29 -0
- package/src/containers/CourseCard/components/CourseCardBanners/RelatedProgramsBanner/index.jsx +38 -0
- package/src/containers/CourseCard/components/CourseCardBanners/RelatedProgramsBanner/index.test.jsx +42 -0
- package/src/containers/CourseCard/components/CourseCardBanners/RelatedProgramsBanner/messages.js +31 -0
- package/src/containers/CourseCard/components/CourseCardBanners/__snapshots__/CertificateBanner.test.jsx.snap +205 -0
- package/src/containers/CourseCard/components/CourseCardBanners/__snapshots__/CourseBanner.test.jsx.snap +38 -0
- package/src/containers/CourseCard/components/CourseCardBanners/__snapshots__/EntitlementBanner.test.jsx.snap +53 -0
- package/src/containers/CourseCard/components/CourseCardBanners/__snapshots__/index.test.jsx.snap +41 -0
- package/src/containers/CourseCard/components/CourseCardBanners/index.jsx +28 -0
- package/src/containers/CourseCard/components/CourseCardBanners/index.test.jsx +32 -0
- package/src/containers/CourseCard/components/CourseCardBanners/messages.js +106 -0
- package/src/containers/CourseCard/components/CourseCardDetails/__snapshots__/index.test.jsx.snap +56 -0
- package/src/containers/CourseCard/components/CourseCardDetails/hooks.js +67 -0
- package/src/containers/CourseCard/components/CourseCardDetails/hooks.test.js +186 -0
- package/src/containers/CourseCard/components/CourseCardDetails/index.jsx +45 -0
- package/src/containers/CourseCard/components/CourseCardDetails/index.scss +7 -0
- package/src/containers/CourseCard/components/CourseCardDetails/index.test.jsx +71 -0
- package/src/containers/CourseCard/components/CourseCardDetails/messages.js +41 -0
- package/src/containers/CourseCard/components/CourseCardImage.jsx +68 -0
- package/src/containers/CourseCard/components/CourseCardImage.test.jsx +66 -0
- package/src/containers/CourseCard/components/CourseCardMenu/SocialShareMenu.jsx +83 -0
- package/src/containers/CourseCard/components/CourseCardMenu/SocialShareMenu.test.jsx +236 -0
- package/src/containers/CourseCard/components/CourseCardMenu/__snapshots__/index.test.jsx.snap +81 -0
- package/src/containers/CourseCard/components/CourseCardMenu/hooks.js +58 -0
- package/src/containers/CourseCard/components/CourseCardMenu/hooks.test.js +153 -0
- package/src/containers/CourseCard/components/CourseCardMenu/index.jsx +85 -0
- package/src/containers/CourseCard/components/CourseCardMenu/index.test.jsx +214 -0
- package/src/containers/CourseCard/components/CourseCardMenu/messages.js +36 -0
- package/src/containers/CourseCard/components/CourseCardTitle.jsx +43 -0
- package/src/containers/CourseCard/components/CourseCardTitle.test.jsx +67 -0
- package/src/containers/CourseCard/components/RelatedProgramsBadge/__snapshots__/index.test.jsx.snap +25 -0
- package/src/containers/CourseCard/components/RelatedProgramsBadge/hooks.jsx +35 -0
- package/src/containers/CourseCard/components/RelatedProgramsBadge/hooks.test.js +76 -0
- package/src/containers/CourseCard/components/RelatedProgramsBadge/index.jsx +39 -0
- package/src/containers/CourseCard/components/RelatedProgramsBadge/index.test.jsx +30 -0
- package/src/containers/CourseCard/components/RelatedProgramsBadge/messages.js +13 -0
- package/src/containers/CourseCard/components/__snapshots__/CourseCardImage.test.jsx.snap +72 -0
- package/src/containers/CourseCard/components/__snapshots__/CourseCardTitle.test.jsx.snap +33 -0
- package/src/containers/CourseCard/components/hooks.js +33 -0
- package/src/containers/CourseCard/components/hooks.test.js +165 -0
- package/src/containers/CourseCard/hooks.js +23 -0
- package/src/containers/CourseCard/hooks.test.js +48 -0
- package/src/containers/CourseCard/index.jsx +50 -0
- package/src/containers/CourseCard/index.test.jsx +29 -0
- package/src/containers/CourseCard/messages.js +26 -0
- package/src/containers/CourseFilterControls/ActiveCourseFilters.jsx +40 -0
- package/src/containers/CourseFilterControls/ActiveCourseFilters.test.jsx +17 -0
- package/src/containers/CourseFilterControls/CourseFilterControls.jsx +115 -0
- package/src/containers/CourseFilterControls/CourseFilterControls.test.jsx +60 -0
- package/src/containers/CourseFilterControls/__snapshots__/ActiveCourseFilters.test.jsx.snap +39 -0
- package/src/containers/CourseFilterControls/__snapshots__/CourseFilterControls.test.jsx.snap +169 -0
- package/src/containers/CourseFilterControls/components/Checkbox.jsx +21 -0
- package/src/containers/CourseFilterControls/components/Checkbox.test.jsx +15 -0
- package/src/containers/CourseFilterControls/components/FilterForm.jsx +45 -0
- package/src/containers/CourseFilterControls/components/FilterForm.test.jsx +29 -0
- package/src/containers/CourseFilterControls/components/SortForm.jsx +39 -0
- package/src/containers/CourseFilterControls/components/SortForm.test.jsx +19 -0
- package/src/containers/CourseFilterControls/components/__snapshots__/Checkbox.test.jsx.snap +46 -0
- package/src/containers/CourseFilterControls/components/__snapshots__/FilterForm.test.jsx.snap +41 -0
- package/src/containers/CourseFilterControls/components/__snapshots__/SortForm.test.jsx.snap +29 -0
- package/src/containers/CourseFilterControls/hooks.js +60 -0
- package/src/containers/CourseFilterControls/hooks.test.js +113 -0
- package/src/containers/CourseFilterControls/index.jsx +6 -0
- package/src/containers/CourseFilterControls/index.scss +29 -0
- package/src/containers/CourseFilterControls/messages.js +61 -0
- package/src/containers/CoursesPanel/CourseList/__snapshots__/index.test.jsx.snap +70 -0
- package/src/containers/CoursesPanel/CourseList/hooks.js +8 -0
- package/src/containers/CoursesPanel/CourseList/index.jsx +54 -0
- package/src/containers/CoursesPanel/CourseList/index.test.jsx +64 -0
- package/src/containers/CoursesPanel/NoCoursesView/__snapshots__/index.test.jsx.snap +29 -0
- package/src/containers/CoursesPanel/NoCoursesView/index.jsx +40 -0
- package/src/containers/CoursesPanel/NoCoursesView/index.scss +15 -0
- package/src/containers/CoursesPanel/NoCoursesView/index.test.jsx +18 -0
- package/src/containers/CoursesPanel/NoCoursesView/messages.js +26 -0
- package/src/containers/CoursesPanel/__snapshots__/index.test.jsx.snap +55 -0
- package/src/containers/CoursesPanel/hooks.js +54 -0
- package/src/containers/CoursesPanel/hooks.test.js +115 -0
- package/src/containers/CoursesPanel/index.jsx +40 -0
- package/src/containers/CoursesPanel/index.scss +42 -0
- package/src/containers/CoursesPanel/index.test.jsx +58 -0
- package/src/containers/CoursesPanel/messages.js +11 -0
- package/src/containers/Dashboard/DashboardLayout.jsx +54 -0
- package/src/containers/Dashboard/DashboardLayout.test.jsx +115 -0
- package/src/containers/Dashboard/LoadingView.jsx +20 -0
- package/src/containers/Dashboard/LoadingView.test.jsx +23 -0
- package/src/containers/Dashboard/__snapshots__/DashboardLayout.test.jsx.snap +197 -0
- package/src/containers/Dashboard/__snapshots__/LoadingView.test.jsx.snap +13 -0
- package/src/containers/Dashboard/__snapshots__/index.test.jsx.snap +69 -0
- package/src/containers/Dashboard/hooks.js +34 -0
- package/src/containers/Dashboard/hooks.test.js +88 -0
- package/src/containers/Dashboard/index.jsx +43 -0
- package/src/containers/Dashboard/index.scss +29 -0
- package/src/containers/Dashboard/index.test.jsx +122 -0
- package/src/containers/EmailSettingsModal/__snapshots__/index.test.jsx.snap +133 -0
- package/src/containers/EmailSettingsModal/hooks.js +32 -0
- package/src/containers/EmailSettingsModal/hooks.test.js +71 -0
- package/src/containers/EmailSettingsModal/index.jsx +58 -0
- package/src/containers/EmailSettingsModal/index.test.jsx +57 -0
- package/src/containers/EmailSettingsModal/messages.js +37 -0
- package/src/containers/RelatedProgramsModal/__snapshots__/index.test.jsx.snap +169 -0
- package/src/containers/RelatedProgramsModal/components/ProgramCard.jsx +66 -0
- package/src/containers/RelatedProgramsModal/components/ProgramCard.test.jsx +23 -0
- package/src/containers/RelatedProgramsModal/components/__snapshots__/ProgramCard.test.jsx.snap +60 -0
- package/src/containers/RelatedProgramsModal/components/index.scss +23 -0
- package/src/containers/RelatedProgramsModal/components/messages.js +24 -0
- package/src/containers/RelatedProgramsModal/hooks.js +10 -0
- package/src/containers/RelatedProgramsModal/index.jsx +62 -0
- package/src/containers/RelatedProgramsModal/index.scss +5 -0
- package/src/containers/RelatedProgramsModal/index.test.jsx +60 -0
- package/src/containers/RelatedProgramsModal/messages.js +16 -0
- package/src/containers/SelectSessionModal/__snapshots__/index.test.jsx.snap +176 -0
- package/src/containers/SelectSessionModal/constants.js +2 -0
- package/src/containers/SelectSessionModal/hooks.js +77 -0
- package/src/containers/SelectSessionModal/hooks.test.js +194 -0
- package/src/containers/SelectSessionModal/index.jsx +75 -0
- package/src/containers/SelectSessionModal/index.test.jsx +53 -0
- package/src/containers/SelectSessionModal/messages.js +41 -0
- package/src/containers/UnenrollConfirmModal/__snapshots__/index.test.jsx.snap +101 -0
- package/src/containers/UnenrollConfirmModal/components/ConfirmPane.jsx +36 -0
- package/src/containers/UnenrollConfirmModal/components/ConfirmPane.test.jsx +14 -0
- package/src/containers/UnenrollConfirmModal/components/FinishedPane.jsx +35 -0
- package/src/containers/UnenrollConfirmModal/components/FinishedPane.test.jsx +21 -0
- package/src/containers/UnenrollConfirmModal/components/ReasonPane.jsx +65 -0
- package/src/containers/UnenrollConfirmModal/components/ReasonPane.test.jsx +26 -0
- package/src/containers/UnenrollConfirmModal/components/__snapshots__/ConfirmPane.test.jsx.snap +22 -0
- package/src/containers/UnenrollConfirmModal/components/__snapshots__/FinishedPane.test.jsx.snap +38 -0
- package/src/containers/UnenrollConfirmModal/components/__snapshots__/ReasonPane.test.jsx.snap +183 -0
- package/src/containers/UnenrollConfirmModal/components/messages.js +56 -0
- package/src/containers/UnenrollConfirmModal/constants.js +86 -0
- package/src/containers/UnenrollConfirmModal/hooks/index.js +55 -0
- package/src/containers/UnenrollConfirmModal/hooks/index.test.js +101 -0
- package/src/containers/UnenrollConfirmModal/hooks/reasons.js +79 -0
- package/src/containers/UnenrollConfirmModal/hooks/reasons.test.js +192 -0
- package/src/containers/UnenrollConfirmModal/index.jsx +59 -0
- package/src/containers/UnenrollConfirmModal/index.test.jsx +61 -0
- package/src/data/constants/app.js +20 -0
- package/src/data/constants/app.test.js +24 -0
- package/src/data/constants/course.js +17 -0
- package/src/data/constants/credit.js +9 -0
- package/src/data/constants/files.js +20 -0
- package/src/data/constants/htmlKeys.js +21 -0
- package/src/data/constants/requests.js +34 -0
- package/src/data/contexts/GlobalDataContext.jsx +15 -0
- package/src/data/contexts/GlobalDataProvider.jsx +23 -0
- package/src/data/contexts/MasqueradeUserContext.jsx +16 -0
- package/src/data/contexts/MasqueradeUserProvider.jsx +31 -0
- package/src/data/redux/app/index.js +2 -0
- package/src/data/redux/app/reducer.js +81 -0
- package/src/data/redux/app/reducer.test.js +124 -0
- package/src/data/redux/app/selectors/appSelectors.js +23 -0
- package/src/data/redux/app/selectors/appSelectors.test.js +28 -0
- package/src/data/redux/app/selectors/courseCard.js +155 -0
- package/src/data/redux/app/selectors/courseCard.test.js +398 -0
- package/src/data/redux/app/selectors/currentList.js +60 -0
- package/src/data/redux/app/selectors/currentList.test.js +185 -0
- package/src/data/redux/app/selectors/index.js +13 -0
- package/src/data/redux/app/selectors/simpleSelectors.js +38 -0
- package/src/data/redux/app/selectors/simpleSelectors.test.js +75 -0
- package/src/data/redux/hooks/app.js +106 -0
- package/src/data/redux/hooks/index.js +2 -0
- package/src/data/redux/hooks/requests.js +47 -0
- package/src/data/redux/index.js +37 -0
- package/src/data/redux/requests/index.js +2 -0
- package/src/data/redux/requests/reducer.js +53 -0
- package/src/data/redux/requests/reducer.test.js +62 -0
- package/src/data/redux/requests/selectors.js +29 -0
- package/src/data/redux/requests/selectors.test.js +110 -0
- package/src/data/services/lms/api.js +77 -0
- package/src/data/services/lms/api.test.js +156 -0
- package/src/data/services/lms/constants.js +18 -0
- package/src/data/services/lms/fakeData/courses.js +828 -0
- package/src/data/services/lms/fakeData/testUtils.js +40 -0
- package/src/data/services/lms/index.js +8 -0
- package/src/data/services/lms/urls.js +43 -0
- package/src/data/services/lms/urls.test.js +51 -0
- package/src/data/services/lms/utils.js +60 -0
- package/src/data/services/lms/utils.test.js +40 -0
- package/src/data/services/segment/utils.js +17 -0
- package/src/data/services/segment/utils.test.js +36 -0
- package/src/data/store.js +25 -0
- package/src/data/store.test.js +47 -0
- package/src/data/utils.js +19 -0
- package/src/data/utils.test.js +29 -0
- package/src/hooks/api.js +123 -0
- package/src/hooks/api.test.js +273 -0
- package/src/hooks/index.js +7 -0
- package/src/hooks/utils.js +17 -0
- package/src/hooks/utils.test.js +16 -0
- package/src/i18n/index.js +25 -0
- package/src/index.ts +3 -0
- package/src/messages.js +16 -0
- package/src/providers.ts +11 -0
- package/src/routes.jsx +14 -0
- package/src/segment.js +85 -0
- package/src/setupTest.jsx +251 -0
- package/src/slots/CourseBannerSlot/README.md +44 -0
- package/src/slots/CourseBannerSlot/images/course_banner_slot_default.png +0 -0
- package/src/slots/CourseBannerSlot/images/custom_course_banner.png +0 -0
- package/src/slots/CourseBannerSlot/index.jsx +18 -0
- package/src/slots/CourseCardActionSlot/README.md +53 -0
- package/src/slots/CourseCardActionSlot/images/post_course_card_action.png +0 -0
- package/src/slots/CourseCardActionSlot/index.jsx +15 -0
- package/src/slots/CourseListSlot/README.md +54 -0
- package/src/slots/CourseListSlot/images/course_list_slot.png +0 -0
- package/src/slots/CourseListSlot/images/readme_custom_course_list.png +0 -0
- package/src/slots/CourseListSlot/index.jsx +17 -0
- package/src/slots/DashboardModalSlot/README.md +30 -0
- package/src/slots/DashboardModalSlot/images/dashboard_modal_slot.png +0 -0
- package/src/slots/DashboardModalSlot/index.jsx +7 -0
- package/src/slots/NoCoursesViewSlot/README.md +34 -0
- package/src/slots/NoCoursesViewSlot/images/no_course_view_slot.png +0 -0
- package/src/slots/NoCoursesViewSlot/images/readme_custom_no_courses.png +0 -0
- package/src/slots/NoCoursesViewSlot/index.jsx +11 -0
- package/src/slots/README.md +8 -0
- package/src/slots/WidgetSidebarSlot/README.md +51 -0
- package/src/slots/WidgetSidebarSlot/__snapshots__/index.test.jsx.snap +14 -0
- package/src/slots/WidgetSidebarSlot/images/readme_custom_sidebar.png +0 -0
- package/src/slots/WidgetSidebarSlot/images/widget_sidebar_slot.png +0 -0
- package/src/slots/WidgetSidebarSlot/index.jsx +10 -0
- package/src/slots/WidgetSidebarSlot/index.test.jsx +18 -0
- package/src/slots.tsx +9 -0
- package/src/test/app.test.jsx +255 -0
- package/src/test/inspector.js +50 -0
- package/src/test/messages.js +29 -0
- package/src/test/utils.js +3 -0
- package/src/testUtils.js +211 -0
- package/src/tracking/constants.js +50 -0
- package/src/tracking/index.js +17 -0
- package/src/tracking/trackers/course.js +44 -0
- package/src/tracking/trackers/course.test.js +80 -0
- package/src/tracking/trackers/credit.js +20 -0
- package/src/tracking/trackers/credit.test.js +38 -0
- package/src/tracking/trackers/engagement.js +23 -0
- package/src/tracking/trackers/engagement.test.js +31 -0
- package/src/tracking/trackers/entitlements.js +34 -0
- package/src/tracking/trackers/entitlements.test.js +34 -0
- package/src/tracking/trackers/filter.js +21 -0
- package/src/tracking/trackers/filter.test.js +45 -0
- package/src/tracking/trackers/findCourses.js +16 -0
- package/src/tracking/trackers/findCourses.test.js +45 -0
- package/src/tracking/trackers/socialShare.js +11 -0
- package/src/tracking/trackers/socialShare.test.js +17 -0
- package/src/utils/StrictDict.js +19 -0
- package/src/utils/StrictDict.test.js +66 -0
- package/src/utils/dateFormatter.js +9 -0
- package/src/utils/hooks.js +12 -0
- package/src/utils/index.js +5 -0
- package/src/utils/keyStore.js +10 -0
- package/src/widgets/LearnerDashboardHeader/ConfirmEmailBanner/ConfirmEmailBanner.scss +3 -0
- package/src/widgets/LearnerDashboardHeader/ConfirmEmailBanner/assets/confirm-email.svg +76 -0
- package/src/widgets/LearnerDashboardHeader/ConfirmEmailBanner/hooks.js +45 -0
- package/src/widgets/LearnerDashboardHeader/ConfirmEmailBanner/index.jsx +66 -0
- package/src/widgets/LearnerDashboardHeader/ConfirmEmailBanner/messages.js +36 -0
- package/src/widgets/LearnerDashboardHeader/CoursesLink.jsx +14 -0
- package/src/widgets/LearnerDashboardHeader/DiscoverLinkMenuItem.jsx +30 -0
- package/src/widgets/LearnerDashboardHeader/MasqueradeBar/hooks.js +69 -0
- package/src/widgets/LearnerDashboardHeader/MasqueradeBar/index.jsx +92 -0
- package/src/widgets/LearnerDashboardHeader/MasqueradeBar/index.scss +38 -0
- package/src/widgets/LearnerDashboardHeader/MasqueradeBar/messages.js +36 -0
- package/src/widgets/LearnerDashboardHeader/OrderHistoryLinkMenuItem.jsx +29 -0
- package/src/widgets/LearnerDashboardHeader/ProgramsLinkMenuItem.jsx +26 -0
- package/src/widgets/LearnerDashboardHeader/SupportLinkMenuItem.jsx +29 -0
- package/src/widgets/LearnerDashboardHeader/app.tsx +93 -0
- package/src/widgets/LearnerDashboardHeader/hooks.js +20 -0
- package/src/widgets/LearnerDashboardHeader/index.ts +1 -0
- package/src/widgets/LearnerDashboardHeader/messages.js +91 -0
- package/src/widgets/LookingForChallengeWidget/__snapshots__/index.test.jsx.snap +45 -0
- package/src/widgets/LookingForChallengeWidget/index.jsx +47 -0
- package/src/widgets/LookingForChallengeWidget/index.scss +6 -0
- package/src/widgets/LookingForChallengeWidget/index.test.jsx +24 -0
- package/src/widgets/LookingForChallengeWidget/messages.js +16 -0
- package/src/widgets/LookingForChallengeWidget/track.js +15 -0
|
@@ -0,0 +1,828 @@
|
|
|
1
|
+
import { StrictDict } from '../../../../utils';
|
|
2
|
+
import creditVals from '../../../../data/constants/credit';
|
|
3
|
+
|
|
4
|
+
export const providers = StrictDict({
|
|
5
|
+
edx: { name: 'edX Course Provider' },
|
|
6
|
+
mit: { name: 'MIT' },
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
export const relatedPrograms = [
|
|
10
|
+
{
|
|
11
|
+
provider: 'HarvardX',
|
|
12
|
+
bannerImgSrc: 'https://prod-discovery.edx-cdn.org/media/course/image/327c8e4f-315a-417b-9857-046dfc90c243-677b97464958.small.jpg',
|
|
13
|
+
logoImgSrc: 'https://prod-discovery.edx-cdn.org/organization/certificate_logos/44022f13-20df-4666-9111-cede3e5dc5b6-770e00385e7e.png',
|
|
14
|
+
title: 'Relativity in Modern Mechanics',
|
|
15
|
+
programUrl: 'www.edx/my-program',
|
|
16
|
+
programType: 'MicroBachelors Program',
|
|
17
|
+
numberOfCourses: 3,
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
provider: 'University of Maryland',
|
|
21
|
+
bannerImgSrc: 'https://prod-discovery.edx-cdn.org/media/programs/banner_images/9a310b98-8f27-439e-be85-12d6460245c9-f2efca129273.small.jpg',
|
|
22
|
+
logoImgSrc: 'https://prod-discovery.edx-cdn.org/organization/certificate_logos/b9dc96da-b3fc-45a6-b6b7-b8e12eb79335-ac60112330e3.png',
|
|
23
|
+
title: 'Pandering for Modern Professionals',
|
|
24
|
+
programUrl: 'www.edx/my-program-2',
|
|
25
|
+
programType: 'MicroBachelors Program',
|
|
26
|
+
programTypeUrl: 'www.edx/my-program-type',
|
|
27
|
+
numberOfCourses: 3,
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
provider: 'HarvardX',
|
|
31
|
+
bannerImgSrc: 'https://prod-discovery.edx-cdn.org/media/course/image/327c8e4f-315a-417b-9857-046dfc90c243-677b97464958.small.jpg',
|
|
32
|
+
logoImgSrc: 'https://prod-discovery.edx-cdn.org/organization/certificate_logos/44022f13-20df-4666-9111-cede3e5dc5b6-770e00385e7e.png',
|
|
33
|
+
title: 'Relativity in Modern Mechanics',
|
|
34
|
+
programUrl: 'www.edx/my-program-3',
|
|
35
|
+
programType: 'MicroBachelors Program',
|
|
36
|
+
numberOfCourses: 3,
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
provider: 'University of Maryland',
|
|
40
|
+
bannerImgSrc: 'https://prod-discovery.edx-cdn.org/media/programs/banner_images/9a310b98-8f27-439e-be85-12d6460245c9-f2efca129273.small.jpg',
|
|
41
|
+
logoImgSrc: 'https://prod-discovery.edx-cdn.org/organization/certificate_logos/b9dc96da-b3fc-45a6-b6b7-b8e12eb79335-ac60112330e3.png',
|
|
42
|
+
title: 'Pandering for Modern Professionals',
|
|
43
|
+
programUrl: 'www.edx/my-program-4',
|
|
44
|
+
programType: 'MicroBachelors Program',
|
|
45
|
+
programTypeUrl: 'www.edx/my-program-type',
|
|
46
|
+
numberOfCourses: 3,
|
|
47
|
+
},
|
|
48
|
+
];
|
|
49
|
+
|
|
50
|
+
export const genCardId = (index) => `card-id${index}`;
|
|
51
|
+
export const genCourseId = (index) => `course-number${index}-course-id${index}`;
|
|
52
|
+
export const genCourseNumber = (index) => `course-number${index}`;
|
|
53
|
+
export const genCourseShareUrl = (index) => `home.edx.org?social-share-url/${index}`;
|
|
54
|
+
export const genEntitlementUUID = (index) => `entitlement-course-uuid-${index}`;
|
|
55
|
+
|
|
56
|
+
const bannerImgSrc = '/asset-v1:edX+DemoX+Demo_Course+type@asset+block@images_course_image.jpg';
|
|
57
|
+
|
|
58
|
+
export const farPastDate = '1900-11-11T00:00:00Z';
|
|
59
|
+
export const pastDate = '2000-11-11T00:00:00Z';
|
|
60
|
+
export const futureDate = '3030-11-11T00:00:00Z';
|
|
61
|
+
export const farFutureDate = '4040-11-11T00:00:00Z';
|
|
62
|
+
export const soonDate = new Date();
|
|
63
|
+
soonDate.setDate(soonDate.getDate() + 60);
|
|
64
|
+
export const soonDateStr = soonDate.toDateString();
|
|
65
|
+
|
|
66
|
+
export const globalData = {
|
|
67
|
+
emailConfirmation: {
|
|
68
|
+
isNeeded: true,
|
|
69
|
+
sendEmailUrl: 'sendConfirmation@edx.org',
|
|
70
|
+
},
|
|
71
|
+
enterpriseDashboard: { label: 'edX, Inc.', url: '/edx-dashboard' },
|
|
72
|
+
platformSettings: {
|
|
73
|
+
supportEmail: 'support@example.com',
|
|
74
|
+
billingEmail: 'billing@email.com',
|
|
75
|
+
courseSearchUrl: 'edx.com/course-search',
|
|
76
|
+
},
|
|
77
|
+
suggestedCourses: [
|
|
78
|
+
{
|
|
79
|
+
bannerImgSrc: 'https://prod-discovery.edx-cdn.org/media/programs/banner_images/9a310b98-8f27-439e-be85-12d6460245c9-f2efca129273.small.jpg',
|
|
80
|
+
courseName: 'Suggested course 1',
|
|
81
|
+
courseUrl: 'www.edx/suggested-course',
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
bannerImgSrc: 'https://prod-discovery.edx-cdn.org/media/programs/banner_images/9a310b98-8f27-439e-be85-12d6460245c9-f2efca129273.small.jpg',
|
|
85
|
+
courseName: 'Suggested course 2 with a really really really long name for some reason',
|
|
86
|
+
courseUrl: 'www.edx/suggested-course',
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
bannerImgSrc: 'https://prod-discovery.edx-cdn.org/media/programs/banner_images/9a310b98-8f27-439e-be85-12d6460245c9-f2efca129273.small.jpg',
|
|
90
|
+
courseName: 'Suggested course 3',
|
|
91
|
+
courseUrl: 'www.edx/suggested-course',
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
bannerImgSrc: 'https://prod-discovery.edx-cdn.org/media/programs/banner_images/9a310b98-8f27-439e-be85-12d6460245c9-f2efca129273.small.jpg',
|
|
95
|
+
courseName: 'Suggested course 4',
|
|
96
|
+
courseUrl: 'www.edx/suggested-course',
|
|
97
|
+
},
|
|
98
|
+
],
|
|
99
|
+
socialShareSettings: {
|
|
100
|
+
facebook: {
|
|
101
|
+
isEnabled: true,
|
|
102
|
+
socialBrand: 'edx.org',
|
|
103
|
+
utmParams: 'utm_campaign=social-sharing-db&utm_medium=social&utm_source=facebook',
|
|
104
|
+
},
|
|
105
|
+
twitter: {
|
|
106
|
+
isEnabled: true,
|
|
107
|
+
socialBrand: 'edx.org',
|
|
108
|
+
utmParams: 'utm_campaign=social-sharing-db&utm_medium=social&utm_source=twitter',
|
|
109
|
+
},
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
export const genCourseRunData = (data = {}) => ({
|
|
114
|
+
isStarted: false,
|
|
115
|
+
isArchived: false,
|
|
116
|
+
startDate: data.isStarted ? farPastDate : futureDate,
|
|
117
|
+
endDate: farFutureDate,
|
|
118
|
+
minPassingGrade: '0.70',
|
|
119
|
+
homeUrl: 'edx.com/courses/my-course-url/home',
|
|
120
|
+
marketingUrl: 'edx.com/courses/my-course-url/marketing',
|
|
121
|
+
progressUrl: 'edx.com/courses/my-course-url/progress',
|
|
122
|
+
unenrollUrl: 'edx.com/courses/my-course-url/unenroll',
|
|
123
|
+
resumeUrl: 'edx.com/courses/my-course-url/resume',
|
|
124
|
+
...data,
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
export const creditData = {
|
|
128
|
+
providerStatusUrl: 'test-provider-status-url',
|
|
129
|
+
providerName: 'Credit Provider Name',
|
|
130
|
+
providerId: 'credit-provider-id',
|
|
131
|
+
error: false,
|
|
132
|
+
purchased: false,
|
|
133
|
+
requestStatus: null,
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
export const genEnrollmentData = (data = {}) => ({
|
|
137
|
+
coursewareAccess: {
|
|
138
|
+
isTooEarly: false,
|
|
139
|
+
hasUnmetPrerequisites: false,
|
|
140
|
+
isStaff: false,
|
|
141
|
+
},
|
|
142
|
+
accessExpirationDate: ((data.isEnrolled === false) ? null : futureDate),
|
|
143
|
+
canUpgrade: (data.isVerified ? null : true),
|
|
144
|
+
hasStarted: false,
|
|
145
|
+
isAudit: !data.isVerified && (data.isEnrolled !== false),
|
|
146
|
+
isAuditAccessExpired: data.isVerified ? null : false,
|
|
147
|
+
isEmailEnabled: false,
|
|
148
|
+
hasOptedOutOfEmail: false,
|
|
149
|
+
isEnrolled: true,
|
|
150
|
+
isVerified: false,
|
|
151
|
+
...data,
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
export const genCertificateData = (data = {}) => ({
|
|
155
|
+
availableDate: null,
|
|
156
|
+
isRestricted: false,
|
|
157
|
+
isEarned: false,
|
|
158
|
+
isDownloadable: false,
|
|
159
|
+
certPreviewUrl: 'edx.com/courses/my-course-url/cert-preview',
|
|
160
|
+
...data,
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
export const availableSessions = [
|
|
164
|
+
{
|
|
165
|
+
startDate: '2000-01-02T00:00:00Z',
|
|
166
|
+
endDate: '2020-01-02T00:00:00Z',
|
|
167
|
+
courseId: genCourseId(1000),
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
startDate: '2000-02-03T00:00:00Z',
|
|
171
|
+
endDate: '2020-02-03T00:00:00Z',
|
|
172
|
+
courseId: genCourseId(1001),
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
startDate: '2000-03-04T00:00:00Z',
|
|
176
|
+
endDate: '2020-03-04T00:00:00Z',
|
|
177
|
+
courseId: genCourseId(1002),
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
startDate: '2000-04-05T00:00:00Z',
|
|
181
|
+
endDate: '2020-04-05T00:00:00Z',
|
|
182
|
+
courseId: genCourseId(1003),
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
startDate: '2000-05-06T00:00:00Z',
|
|
186
|
+
endDate: '2020-05-06T00:00:00Z',
|
|
187
|
+
courseId: genCourseId(1004),
|
|
188
|
+
},
|
|
189
|
+
];
|
|
190
|
+
|
|
191
|
+
const auditCourses = [
|
|
192
|
+
// audit, course run not started
|
|
193
|
+
{
|
|
194
|
+
courseName: 'Audit Course, Course run not started',
|
|
195
|
+
},
|
|
196
|
+
// audit, course run not started, too early to view
|
|
197
|
+
{
|
|
198
|
+
courseName: 'Audit Course, Course run not started, Too early to view',
|
|
199
|
+
enrollment: {
|
|
200
|
+
coursewareAccess: {
|
|
201
|
+
isTooEarly: true,
|
|
202
|
+
hasUnmetPrerequisites: false,
|
|
203
|
+
isStaff: false,
|
|
204
|
+
},
|
|
205
|
+
},
|
|
206
|
+
},
|
|
207
|
+
// audit, course run not started, too early to view and unmet prereqs
|
|
208
|
+
{
|
|
209
|
+
courseName: 'Audit Course, Course run not started, Too early to view, Has unmet prereqs.',
|
|
210
|
+
enrollment: {
|
|
211
|
+
coursewareAccess: {
|
|
212
|
+
isTooEarly: true,
|
|
213
|
+
hasUnmetPrerequisites: true,
|
|
214
|
+
isStaff: false,
|
|
215
|
+
},
|
|
216
|
+
},
|
|
217
|
+
},
|
|
218
|
+
// audit, course run started
|
|
219
|
+
{
|
|
220
|
+
courseName: 'Audit Course, Course run not started',
|
|
221
|
+
courseRun: { isStarted: true },
|
|
222
|
+
},
|
|
223
|
+
// audit, course run started, unmet prereqs
|
|
224
|
+
{
|
|
225
|
+
courseName: 'Audit Course, Course run not started, Has unmet prereqs',
|
|
226
|
+
enrollment: {
|
|
227
|
+
coursewareAccess: {
|
|
228
|
+
isTooEarly: true,
|
|
229
|
+
hasUnmetPrerequisites: true,
|
|
230
|
+
isStaff: false,
|
|
231
|
+
},
|
|
232
|
+
},
|
|
233
|
+
courseRun: { isStarted: true },
|
|
234
|
+
},
|
|
235
|
+
// audit, course run started, access expired, learner not started
|
|
236
|
+
{
|
|
237
|
+
courseName: 'Audit Course, Course run started, Audit ccess expired, Learner not started',
|
|
238
|
+
courseRun: { isStarted: true },
|
|
239
|
+
enrollment: {
|
|
240
|
+
accessExpirationDate: pastDate,
|
|
241
|
+
isAuditAccessExpired: true,
|
|
242
|
+
},
|
|
243
|
+
},
|
|
244
|
+
// audit, course run started, access expired, cannot upgrade, learner not started
|
|
245
|
+
{
|
|
246
|
+
courseName: 'Audit course, Course run not started, Audit access expired, Cannot upgrade, Learner not started',
|
|
247
|
+
courseRun: { isStarted: true },
|
|
248
|
+
enrollment: {
|
|
249
|
+
accessExpirationDate: pastDate,
|
|
250
|
+
canUpgrade: false,
|
|
251
|
+
isAuditAccessExpired: true,
|
|
252
|
+
},
|
|
253
|
+
},
|
|
254
|
+
// audit, course run ended, access expired, cannot upgrade, learner not started
|
|
255
|
+
{
|
|
256
|
+
courseName: 'Audit Course, Course run ended, Audit access expired, Cannot upgrade, Learner not started',
|
|
257
|
+
courseRun: {
|
|
258
|
+
endDate: pastDate,
|
|
259
|
+
isStarted: true,
|
|
260
|
+
},
|
|
261
|
+
enrollment: {
|
|
262
|
+
accessExpirationDate: pastDate,
|
|
263
|
+
isAuditAccessExpired: true,
|
|
264
|
+
},
|
|
265
|
+
},
|
|
266
|
+
// audit, course run archived, access expired, cannot upgrade, learner not started
|
|
267
|
+
{
|
|
268
|
+
courseName: 'Audit Course, Course run archived, Audit access expired, Cannot upgrade, Learner not started',
|
|
269
|
+
courseRun: {
|
|
270
|
+
endDate: pastDate,
|
|
271
|
+
isArchived: true,
|
|
272
|
+
isStarted: true,
|
|
273
|
+
},
|
|
274
|
+
enrollment: {
|
|
275
|
+
accessExpirationDate: pastDate,
|
|
276
|
+
isAuditAccessExpired: true,
|
|
277
|
+
},
|
|
278
|
+
},
|
|
279
|
+
// audit, course run and learner started, passing
|
|
280
|
+
{
|
|
281
|
+
courseName: 'Audit Course, Course run and learner started, Passing',
|
|
282
|
+
courseRun: { isStarted: true },
|
|
283
|
+
enrollment: { hasStarted: true },
|
|
284
|
+
},
|
|
285
|
+
// audit, course run and learner started, access expired
|
|
286
|
+
{
|
|
287
|
+
courseName: 'Audit Course, Course run and learner started, Audit access expired',
|
|
288
|
+
courseRun: { isStarted: true },
|
|
289
|
+
enrollment: {
|
|
290
|
+
accessExpirationDate: pastDate,
|
|
291
|
+
isAuditAccessExpired: true,
|
|
292
|
+
hasStarted: true,
|
|
293
|
+
},
|
|
294
|
+
},
|
|
295
|
+
// audit, course run and learner started, access expired, cannot upgrade
|
|
296
|
+
{
|
|
297
|
+
courseName: 'Audit Course, Course run and learner started, Audit access expired, Cannot upgrade',
|
|
298
|
+
courseRun: { isStarted: true },
|
|
299
|
+
enrollment: {
|
|
300
|
+
accessExpirationDate: pastDate,
|
|
301
|
+
canUpgrade: false,
|
|
302
|
+
isAuditAccessExpired: true,
|
|
303
|
+
hasStarted: true,
|
|
304
|
+
},
|
|
305
|
+
},
|
|
306
|
+
// audit, course run ended, learner started, expired, cannot upgraded, not passing
|
|
307
|
+
{
|
|
308
|
+
courseName: 'Audit Course, Course run ended, Learner started, Access expired, Cannot upgrade, Not passing',
|
|
309
|
+
courseRun: {
|
|
310
|
+
isStarted: true,
|
|
311
|
+
endDate: pastDate,
|
|
312
|
+
},
|
|
313
|
+
enrollment: {
|
|
314
|
+
accessExpirationDate: pastDate,
|
|
315
|
+
canUpgrade: false,
|
|
316
|
+
isAuditAccessExpired: true,
|
|
317
|
+
hasStarted: true,
|
|
318
|
+
},
|
|
319
|
+
grade: { isPassing: false },
|
|
320
|
+
},
|
|
321
|
+
// audit, course run archived, learner started, expired, cannot upgrade, not passing
|
|
322
|
+
{
|
|
323
|
+
courseName: 'Audit Course, Course run archived, Learner started, Access expired, Cannot upgrade, Not passing',
|
|
324
|
+
courseRun: {
|
|
325
|
+
isStarted: true,
|
|
326
|
+
isArchived: true,
|
|
327
|
+
endDate: pastDate,
|
|
328
|
+
},
|
|
329
|
+
enrollment: {
|
|
330
|
+
accessExpirationDate: pastDate,
|
|
331
|
+
canUpgrade: false,
|
|
332
|
+
isAuditAccessExpired: true,
|
|
333
|
+
hasStarted: true,
|
|
334
|
+
},
|
|
335
|
+
grade: { isPassing: false },
|
|
336
|
+
},
|
|
337
|
+
];
|
|
338
|
+
const verifiedCourses = [
|
|
339
|
+
// verified, course not started, learner not started
|
|
340
|
+
{
|
|
341
|
+
courseName: 'Verified Course, Course and learner not started',
|
|
342
|
+
enrollment: { isVerified: true },
|
|
343
|
+
},
|
|
344
|
+
// verified, course started, learner not started
|
|
345
|
+
{
|
|
346
|
+
courseName: 'Verified Course, Course started, Learner not started',
|
|
347
|
+
courseRun: { isStarted: true },
|
|
348
|
+
enrollment: { isVerified: true },
|
|
349
|
+
},
|
|
350
|
+
// verified, course started, learner started, passing
|
|
351
|
+
{
|
|
352
|
+
courseName: 'Verified Course, Course and learner started, Passing',
|
|
353
|
+
courseRun: { isStarted: true },
|
|
354
|
+
enrollment: { hasStarted: true, isVerified: true },
|
|
355
|
+
},
|
|
356
|
+
// verified, course started, learner started, not passing
|
|
357
|
+
{
|
|
358
|
+
courseName: 'Verified Course, Course and learner started, not passing',
|
|
359
|
+
courseRun: { isStarted: true },
|
|
360
|
+
gradeData: { isPassing: false },
|
|
361
|
+
enrollment: { hasStarted: true, isVerified: true },
|
|
362
|
+
},
|
|
363
|
+
// verified, learner finished, not passing, cert not earned
|
|
364
|
+
{
|
|
365
|
+
courseName: 'Verified Course, Learner finished, cert not earned',
|
|
366
|
+
enrollment: {
|
|
367
|
+
hasStarted: true,
|
|
368
|
+
isVerified: true,
|
|
369
|
+
},
|
|
370
|
+
courseRun: { isStarted: true, isArchived: true },
|
|
371
|
+
gradeData: { isPassing: false },
|
|
372
|
+
certificate: {
|
|
373
|
+
isEarned: false,
|
|
374
|
+
},
|
|
375
|
+
},
|
|
376
|
+
// verified, learner finished, passing, cert earned but not available
|
|
377
|
+
{
|
|
378
|
+
courseName: 'Verified Course, Learner finished, Cert earned but not available',
|
|
379
|
+
enrollment: {
|
|
380
|
+
hasStarted: true,
|
|
381
|
+
isVerified: true,
|
|
382
|
+
},
|
|
383
|
+
courseRun: { isStarted: true, isArchived: true },
|
|
384
|
+
certificate: {
|
|
385
|
+
isEarned: true,
|
|
386
|
+
availableDate: futureDate,
|
|
387
|
+
},
|
|
388
|
+
},
|
|
389
|
+
// verified, learner finished, passing, restricted
|
|
390
|
+
{
|
|
391
|
+
courseName: 'Verified Course, Learner finished, Passing, Certificate restricted',
|
|
392
|
+
enrollment: {
|
|
393
|
+
hasStarted: true,
|
|
394
|
+
isVerified: true,
|
|
395
|
+
},
|
|
396
|
+
courseRun: { isStarted: true, isArchived: true },
|
|
397
|
+
certificate: { isRestricted: true },
|
|
398
|
+
},
|
|
399
|
+
// verified, learner finished, cert earned, downloadable (web + link)
|
|
400
|
+
{
|
|
401
|
+
courseName: 'Verified Course, Learner finished, Passing, Certificate downloadable and viewable',
|
|
402
|
+
enrollment: {
|
|
403
|
+
hasStarted: true,
|
|
404
|
+
isVerified: true,
|
|
405
|
+
},
|
|
406
|
+
courseRun: { isStarted: true, isArchived: true },
|
|
407
|
+
certificate: {
|
|
408
|
+
isEarned: true,
|
|
409
|
+
isDownloadable: true,
|
|
410
|
+
availableDate: pastDate,
|
|
411
|
+
certPreviewUrl: bannerImgSrc,
|
|
412
|
+
},
|
|
413
|
+
},
|
|
414
|
+
// verified, course ended, learner finished, cert earned, downloadable (link only),
|
|
415
|
+
{
|
|
416
|
+
courseName: 'Verified Course, Course ended, Learner finished, Passing, Certificate downloadable',
|
|
417
|
+
enrollment: {
|
|
418
|
+
hasStarted: true,
|
|
419
|
+
isVerified: true,
|
|
420
|
+
},
|
|
421
|
+
courseRun: {
|
|
422
|
+
isStarted: true,
|
|
423
|
+
isArchived: true,
|
|
424
|
+
endDate: pastDate,
|
|
425
|
+
},
|
|
426
|
+
certificate: {
|
|
427
|
+
isEarned: true,
|
|
428
|
+
isDownloadable: true,
|
|
429
|
+
availableDate: pastDate,
|
|
430
|
+
},
|
|
431
|
+
},
|
|
432
|
+
// verified, course ended, learner finished, cert earned, downloadable (web + link)
|
|
433
|
+
{
|
|
434
|
+
courseName: 'Verified Course, Course ended, Learner finished, Passing, Certificate downloadable and viewable',
|
|
435
|
+
enrollment: {
|
|
436
|
+
hasStarted: true,
|
|
437
|
+
isVerified: true,
|
|
438
|
+
},
|
|
439
|
+
courseRun: {
|
|
440
|
+
isStarted: true,
|
|
441
|
+
isArchived: true,
|
|
442
|
+
endDate: pastDate,
|
|
443
|
+
},
|
|
444
|
+
certificate: {
|
|
445
|
+
isEarned: true,
|
|
446
|
+
isDownloadable: true,
|
|
447
|
+
availableDate: pastDate,
|
|
448
|
+
certPreviewUrl: bannerImgSrc,
|
|
449
|
+
},
|
|
450
|
+
},
|
|
451
|
+
];
|
|
452
|
+
const fulfilledEntitlementCourses = [
|
|
453
|
+
// Entitlement - not started
|
|
454
|
+
{
|
|
455
|
+
courseName: 'Entitlement Course, not started',
|
|
456
|
+
enrollment: {
|
|
457
|
+
isVerified: true,
|
|
458
|
+
coursewareAccess: {
|
|
459
|
+
isTooEarly: true,
|
|
460
|
+
hasUnmetPrerequisites: false,
|
|
461
|
+
isStaff: false,
|
|
462
|
+
},
|
|
463
|
+
},
|
|
464
|
+
courseRun: { isStarted: false },
|
|
465
|
+
entitlement: {
|
|
466
|
+
uuid: genEntitlementUUID(0),
|
|
467
|
+
availableSessions,
|
|
468
|
+
changeDeadline: futureDate,
|
|
469
|
+
enrollmentUrl: '/entitlement-enrollment',
|
|
470
|
+
isExpired: false,
|
|
471
|
+
isFulfilled: true,
|
|
472
|
+
isRefundable: true,
|
|
473
|
+
},
|
|
474
|
+
},
|
|
475
|
+
// Entitlement - Course run started, learner not started, unmet prereqs
|
|
476
|
+
{
|
|
477
|
+
courseName: 'Entitlement Course, Course run started, Learner not started, Has unmet prereqs',
|
|
478
|
+
enrollment: {
|
|
479
|
+
isVerified: true,
|
|
480
|
+
coursewareAccess: {
|
|
481
|
+
},
|
|
482
|
+
},
|
|
483
|
+
courseRun: { isStarted: true },
|
|
484
|
+
entitlement: {
|
|
485
|
+
uuid: genEntitlementUUID(1),
|
|
486
|
+
availableSessions,
|
|
487
|
+
changeDeadline: futureDate,
|
|
488
|
+
enrollmentUrl: '/entitlement-enrollment',
|
|
489
|
+
isExpired: false,
|
|
490
|
+
isFulfilled: true,
|
|
491
|
+
isRefundable: true,
|
|
492
|
+
},
|
|
493
|
+
},
|
|
494
|
+
// Entitlement - Course run started, learner started, not passing
|
|
495
|
+
{
|
|
496
|
+
courseName: 'Entitlement Course, Course run started, Learner started, Not passing',
|
|
497
|
+
enrollment: {
|
|
498
|
+
isVerified: true,
|
|
499
|
+
hasStarted: true,
|
|
500
|
+
},
|
|
501
|
+
courseRun: { isStarted: true },
|
|
502
|
+
entitlement: {
|
|
503
|
+
uuid: genEntitlementUUID(2),
|
|
504
|
+
availableSessions,
|
|
505
|
+
changeDeadline: futureDate,
|
|
506
|
+
enrollmentUrl: '/entitlement-enrollment',
|
|
507
|
+
isExpired: false,
|
|
508
|
+
isFulfilled: true,
|
|
509
|
+
isRefundable: true,
|
|
510
|
+
},
|
|
511
|
+
gradeData: { isPassing: false },
|
|
512
|
+
},
|
|
513
|
+
// Entitlement - Course run started, learner started, passing, cannot change
|
|
514
|
+
{
|
|
515
|
+
courseName: 'Entitlement Course, Course run and learner started, Passing, Cannot change sessions',
|
|
516
|
+
enrollment: {
|
|
517
|
+
isVerified: true,
|
|
518
|
+
hasStarted: true,
|
|
519
|
+
},
|
|
520
|
+
courseRun: { isStarted: true },
|
|
521
|
+
entitlement: {
|
|
522
|
+
uuid: genEntitlementUUID(3),
|
|
523
|
+
availableSessions,
|
|
524
|
+
changeDeadline: pastDate,
|
|
525
|
+
enrollmentUrl: '/entitlement-enrollment',
|
|
526
|
+
isExpired: false,
|
|
527
|
+
isFulfilled: true,
|
|
528
|
+
isRefundable: true,
|
|
529
|
+
},
|
|
530
|
+
},
|
|
531
|
+
// Entitlement - Learner finished, but did not pass
|
|
532
|
+
{
|
|
533
|
+
courseName: 'Entitlement Course, Learner finished but did not pass',
|
|
534
|
+
enrollment: {
|
|
535
|
+
isVerified: true,
|
|
536
|
+
},
|
|
537
|
+
courseRun: { isStarted: true, isArchived: false },
|
|
538
|
+
entitlement: {
|
|
539
|
+
uuid: genEntitlementUUID(4),
|
|
540
|
+
availableSessions: null,
|
|
541
|
+
changeDeadline: pastDate,
|
|
542
|
+
enrollmentUrl: '/entitlement-enrollment',
|
|
543
|
+
isExpired: false,
|
|
544
|
+
isFulfilled: true,
|
|
545
|
+
isRefundable: false,
|
|
546
|
+
},
|
|
547
|
+
gradeData: { isPassing: false },
|
|
548
|
+
},
|
|
549
|
+
// Entitlement - Learner finished, and passed. cannot refund. previewable cert.
|
|
550
|
+
{
|
|
551
|
+
courseName: 'Entitlement course, Learner finished and passed, Cannot refund, Previewable Cert',
|
|
552
|
+
enrollment: {
|
|
553
|
+
isVerified: true,
|
|
554
|
+
},
|
|
555
|
+
courseRun: { isStarted: true, isArchived: false },
|
|
556
|
+
entitlement: {
|
|
557
|
+
uuid: genEntitlementUUID(5),
|
|
558
|
+
availableSessions: null,
|
|
559
|
+
changeDeadline: pastDate,
|
|
560
|
+
enrollmentUrl: '/entitlement-enrollment',
|
|
561
|
+
isExpired: false,
|
|
562
|
+
isFulfilled: true,
|
|
563
|
+
isRefundable: false,
|
|
564
|
+
},
|
|
565
|
+
certificate: {
|
|
566
|
+
isEarned: true,
|
|
567
|
+
isDownloadable: true,
|
|
568
|
+
availableDate: pastDate,
|
|
569
|
+
certPreviewUrl: bannerImgSrc,
|
|
570
|
+
},
|
|
571
|
+
},
|
|
572
|
+
// Entitlement - Learner finished and failed. cannot refund. course ended.
|
|
573
|
+
{
|
|
574
|
+
courseName: 'Entitlement Course, Learner finished and failed, Cannot refund, Course ended',
|
|
575
|
+
enrollment: {
|
|
576
|
+
isVerified: true,
|
|
577
|
+
},
|
|
578
|
+
courseRun: {
|
|
579
|
+
isStarted: true,
|
|
580
|
+
isArchived: false,
|
|
581
|
+
endDate: pastDate,
|
|
582
|
+
},
|
|
583
|
+
entitlement: {
|
|
584
|
+
uuid: genEntitlementUUID(6),
|
|
585
|
+
availableSessions: null,
|
|
586
|
+
enrollmentUrl: '/entitlement-enrollment',
|
|
587
|
+
isFulfilled: true,
|
|
588
|
+
isRefundable: false,
|
|
589
|
+
changeDeadline: pastDate,
|
|
590
|
+
isExpired: false,
|
|
591
|
+
},
|
|
592
|
+
gradeData: { isPassing: false },
|
|
593
|
+
},
|
|
594
|
+
// Entitlement - Learner finished and passed. cannot refund. cert downloadable
|
|
595
|
+
{
|
|
596
|
+
courseName: 'Entitlement Course, Learner finished and passed, Cannot refund, Cert downloadable',
|
|
597
|
+
enrollment: {
|
|
598
|
+
isVerified: true,
|
|
599
|
+
},
|
|
600
|
+
courseRun: {
|
|
601
|
+
isArchived: true,
|
|
602
|
+
isStarted: true,
|
|
603
|
+
endDate: pastDate,
|
|
604
|
+
},
|
|
605
|
+
entitlement: {
|
|
606
|
+
uuid: genEntitlementUUID(7),
|
|
607
|
+
availableSessions: null,
|
|
608
|
+
changeDeadline: pastDate,
|
|
609
|
+
enrollmentUrl: '/entitlement-enrollment',
|
|
610
|
+
isExpired: false,
|
|
611
|
+
isRefundable: false,
|
|
612
|
+
isFulfilled: true,
|
|
613
|
+
},
|
|
614
|
+
certificate: {
|
|
615
|
+
isEarned: true,
|
|
616
|
+
isDownloadable: true,
|
|
617
|
+
availableDate: pastDate,
|
|
618
|
+
certPreviewUrl: bannerImgSrc,
|
|
619
|
+
},
|
|
620
|
+
},
|
|
621
|
+
];
|
|
622
|
+
const creditCourses = [
|
|
623
|
+
{
|
|
624
|
+
courseName: 'Credit - Eligible for credit from unknown provider',
|
|
625
|
+
credit: {
|
|
626
|
+
...creditData,
|
|
627
|
+
providerName: null,
|
|
628
|
+
providerId: null,
|
|
629
|
+
},
|
|
630
|
+
enrollment: { isEnrolled: true },
|
|
631
|
+
},
|
|
632
|
+
{
|
|
633
|
+
courseName: 'Credit - Eligible for credit from known provider',
|
|
634
|
+
credit: creditData,
|
|
635
|
+
enrollment: { isEnrolled: true },
|
|
636
|
+
},
|
|
637
|
+
{
|
|
638
|
+
courseName: 'Credit - Purchased but must request',
|
|
639
|
+
credit: { ...creditData, purchased: true },
|
|
640
|
+
enrollment: { isEnrolled: true },
|
|
641
|
+
},
|
|
642
|
+
{
|
|
643
|
+
courseName: 'Credit - Credit Request Pending',
|
|
644
|
+
credit: {
|
|
645
|
+
...creditData,
|
|
646
|
+
purchased: true,
|
|
647
|
+
requestStatus: creditVals.requestStatuses.pending,
|
|
648
|
+
},
|
|
649
|
+
enrollment: { isEnrolled: true },
|
|
650
|
+
},
|
|
651
|
+
{
|
|
652
|
+
courseName: 'Credit - Credit Request Approved',
|
|
653
|
+
credit: {
|
|
654
|
+
...creditData,
|
|
655
|
+
purchased: true,
|
|
656
|
+
requestStatus: creditVals.requestStatuses.approved,
|
|
657
|
+
},
|
|
658
|
+
enrollment: { isEnrolled: true },
|
|
659
|
+
},
|
|
660
|
+
{
|
|
661
|
+
courseName: 'Credit - Credit Request Rejected, Error thrown',
|
|
662
|
+
credit: {
|
|
663
|
+
...creditData,
|
|
664
|
+
purchased: true,
|
|
665
|
+
requestStatus: creditVals.requestStatuses.rejected,
|
|
666
|
+
error: true,
|
|
667
|
+
},
|
|
668
|
+
enrollment: { isEnrolled: true },
|
|
669
|
+
},
|
|
670
|
+
];
|
|
671
|
+
|
|
672
|
+
export const courseRuns = [
|
|
673
|
+
...auditCourses,
|
|
674
|
+
...verifiedCourses,
|
|
675
|
+
...fulfilledEntitlementCourses,
|
|
676
|
+
...creditCourses,
|
|
677
|
+
];
|
|
678
|
+
|
|
679
|
+
// unfulfilled entitlement select session
|
|
680
|
+
// unfulfilled entitlement select session with deadline
|
|
681
|
+
// unfulfilled entitlement select session pass deadline with available session {banner different from 4th}
|
|
682
|
+
// unfulfilled entitlement select session pass deadline without available session
|
|
683
|
+
export const entitlementCourses = [
|
|
684
|
+
{
|
|
685
|
+
courseName: 'Unfulfilled Entitlement select session',
|
|
686
|
+
entitlement: {
|
|
687
|
+
uuid: genEntitlementUUID(10),
|
|
688
|
+
availableSessions,
|
|
689
|
+
changeDeadline: futureDate,
|
|
690
|
+
enrollmentUrl: '/entitlement-enrollment',
|
|
691
|
+
isExpired: false,
|
|
692
|
+
isFulfilled: false,
|
|
693
|
+
isRefundable: true,
|
|
694
|
+
},
|
|
695
|
+
}, {
|
|
696
|
+
courseName: 'Unfulfilled Entitlement select session with upcoming deadline',
|
|
697
|
+
entitlement: {
|
|
698
|
+
uuid: genEntitlementUUID(11),
|
|
699
|
+
availableSessions,
|
|
700
|
+
changeDeadline: soonDateStr,
|
|
701
|
+
enrollmentUrl: '/entitlement-enrollment',
|
|
702
|
+
isExpired: false,
|
|
703
|
+
isFulfilled: false,
|
|
704
|
+
isRefundable: true,
|
|
705
|
+
},
|
|
706
|
+
}, {
|
|
707
|
+
courseName: 'Unfulfilled Entitlement select session past deadline, With available session',
|
|
708
|
+
entitlement: {
|
|
709
|
+
uuid: genEntitlementUUID(12),
|
|
710
|
+
availableSessions,
|
|
711
|
+
changeDeadline: pastDate,
|
|
712
|
+
enrollmentUrl: '/entitlement-enrollment',
|
|
713
|
+
isExpired: false,
|
|
714
|
+
isFulfilled: false,
|
|
715
|
+
isRefundable: true,
|
|
716
|
+
},
|
|
717
|
+
}, {
|
|
718
|
+
courseName: 'Unfulfilled Entitlement select session past deadline, With available no session',
|
|
719
|
+
entitlement: {
|
|
720
|
+
uuid: genEntitlementUUID(13),
|
|
721
|
+
availableSessions: [],
|
|
722
|
+
changeDeadline: pastDate,
|
|
723
|
+
enrollmentUrl: '/entitlement-enrollment',
|
|
724
|
+
isExpired: true,
|
|
725
|
+
isFulfilled: false,
|
|
726
|
+
isRefundable: true,
|
|
727
|
+
},
|
|
728
|
+
},
|
|
729
|
+
];
|
|
730
|
+
|
|
731
|
+
const providerOptions = [
|
|
732
|
+
providers.edx,
|
|
733
|
+
providers.mit,
|
|
734
|
+
null,
|
|
735
|
+
];
|
|
736
|
+
|
|
737
|
+
const emailOptions = [
|
|
738
|
+
{ isEmailEnabled: false, hasOptedOutOfEmail: false },
|
|
739
|
+
{ isEmailEnabled: true, hasOptedOutOfEmail: false },
|
|
740
|
+
{ isEmailEnabled: true, hasOptedOutOfEmail: true },
|
|
741
|
+
];
|
|
742
|
+
|
|
743
|
+
const programsOptions = [
|
|
744
|
+
{ relatedPrograms },
|
|
745
|
+
{ relatedPrograms: [relatedPrograms[0]] },
|
|
746
|
+
{ relatedPrograms: [] },
|
|
747
|
+
];
|
|
748
|
+
|
|
749
|
+
const getOption = (options, index) => options[index % options.length];
|
|
750
|
+
|
|
751
|
+
export const compileCourseRunData = ({ courseName, ...data }, index) => {
|
|
752
|
+
const courseId = genCourseId(index);
|
|
753
|
+
const courseNumber = genCourseNumber(index);
|
|
754
|
+
const socialShareUrl = genCourseShareUrl(index);
|
|
755
|
+
const lastEnrolledDate = new Date();
|
|
756
|
+
lastEnrolledDate.setDate(lastEnrolledDate.getDate() - index - 1);
|
|
757
|
+
const lastEnrolled = lastEnrolledDate.toISOString();
|
|
758
|
+
const out = {
|
|
759
|
+
gradeData: { isPassing: true },
|
|
760
|
+
entitlement: null,
|
|
761
|
+
credit: {},
|
|
762
|
+
...data,
|
|
763
|
+
certificate: genCertificateData(data.certificate),
|
|
764
|
+
enrollment: genEnrollmentData({
|
|
765
|
+
lastEnrolled,
|
|
766
|
+
...getOption(emailOptions, index),
|
|
767
|
+
...data.enrollment,
|
|
768
|
+
}),
|
|
769
|
+
courseRun: genCourseRunData({
|
|
770
|
+
...data.courseRun,
|
|
771
|
+
courseId,
|
|
772
|
+
}),
|
|
773
|
+
course: {
|
|
774
|
+
courseName,
|
|
775
|
+
bannerImgSrc,
|
|
776
|
+
courseNumber,
|
|
777
|
+
socialShareUrl,
|
|
778
|
+
},
|
|
779
|
+
courseProvider: getOption(providerOptions, index),
|
|
780
|
+
programs: getOption(programsOptions, index),
|
|
781
|
+
};
|
|
782
|
+
return out;
|
|
783
|
+
};
|
|
784
|
+
|
|
785
|
+
export const compileEntitlementData = ({ courseName, ...data }, index) => {
|
|
786
|
+
const courseNumber = genCourseNumber(100 + index);
|
|
787
|
+
const socialShareUrl = genCourseShareUrl(100 + index);
|
|
788
|
+
return {
|
|
789
|
+
enrollment: genEnrollmentData({
|
|
790
|
+
isEnrolled: false,
|
|
791
|
+
lastEnrolled: null,
|
|
792
|
+
accessExpirationDate: null,
|
|
793
|
+
canUpgrade: false,
|
|
794
|
+
hasStarted: false,
|
|
795
|
+
isAudit: false,
|
|
796
|
+
isAuditAccessExpired: false,
|
|
797
|
+
isEmailEnabled: false,
|
|
798
|
+
isVerified: false,
|
|
799
|
+
}),
|
|
800
|
+
gradeData: null,
|
|
801
|
+
certificate: null,
|
|
802
|
+
courseRun: null,
|
|
803
|
+
...data,
|
|
804
|
+
course: {
|
|
805
|
+
courseName,
|
|
806
|
+
courseNumber,
|
|
807
|
+
bannerImgSrc,
|
|
808
|
+
socialShareUrl,
|
|
809
|
+
},
|
|
810
|
+
courseProvider: getOption(providerOptions, index),
|
|
811
|
+
programs: getOption(programsOptions, index),
|
|
812
|
+
};
|
|
813
|
+
};
|
|
814
|
+
|
|
815
|
+
// Entitlement Course - refundable
|
|
816
|
+
// Entitlement Course - cannot view yet
|
|
817
|
+
// Entitlement Course - can view and change
|
|
818
|
+
// Entitlement Course - expired
|
|
819
|
+
export const courseRunData = courseRuns.map(compileCourseRunData);
|
|
820
|
+
export const entitlementData = entitlementCourses.map(compileEntitlementData);
|
|
821
|
+
|
|
822
|
+
export default {
|
|
823
|
+
compileEntitlementData,
|
|
824
|
+
compileCourseRunData,
|
|
825
|
+
courseRunData,
|
|
826
|
+
entitlementData,
|
|
827
|
+
globalData,
|
|
828
|
+
};
|