@edx/frontend-app-learner-dashboard 1.0.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/dist/Main.d.ts +2 -0
- package/dist/Main.js +16 -0
- package/dist/Main.js.map +1 -0
- package/dist/app.d.ts +3 -0
- package/dist/app.js +19 -0
- package/dist/app.js.map +1 -0
- package/dist/assets/empty-course.svg +49 -0
- package/dist/assets/more-courses-sidewidget.svg +52 -0
- package/dist/assets/verified-ribbon.png +0 -0
- package/dist/components/Banner.d.ts +24 -0
- package/dist/components/Banner.js +19 -0
- package/dist/components/Banner.js.map +1 -0
- package/dist/constants.d.ts +2 -0
- package/dist/constants.js +3 -0
- package/dist/constants.js.map +1 -0
- package/dist/containers/CourseCard/CourseCard.scss +73 -0
- package/dist/containers/CourseCard/components/CourseCardActions/ActionButton/hooks.d.ts +2 -0
- package/dist/containers/CourseCard/components/CourseCardActions/ActionButton/hooks.js +7 -0
- package/dist/containers/CourseCard/components/CourseCardActions/ActionButton/hooks.js.map +1 -0
- package/dist/containers/CourseCard/components/CourseCardActions/ActionButton/index.d.ts +2 -0
- package/dist/containers/CourseCard/components/CourseCardActions/ActionButton/index.js +10 -0
- package/dist/containers/CourseCard/components/CourseCardActions/ActionButton/index.js.map +1 -0
- package/dist/containers/CourseCard/components/CourseCardActions/BeginCourseButton.d.ts +10 -0
- package/dist/containers/CourseCard/components/CourseCardActions/BeginCourseButton.js +31 -0
- package/dist/containers/CourseCard/components/CourseCardActions/BeginCourseButton.js.map +1 -0
- package/dist/containers/CourseCard/components/CourseCardActions/ResumeButton.d.ts +10 -0
- package/dist/containers/CourseCard/components/CourseCardActions/ResumeButton.js +32 -0
- package/dist/containers/CourseCard/components/CourseCardActions/ResumeButton.js.map +1 -0
- package/dist/containers/CourseCard/components/CourseCardActions/SelectSessionButton.d.ts +10 -0
- package/dist/containers/CourseCard/components/CourseCardActions/SelectSessionButton.js +19 -0
- package/dist/containers/CourseCard/components/CourseCardActions/SelectSessionButton.js.map +1 -0
- package/dist/containers/CourseCard/components/CourseCardActions/ViewCourseButton.d.ts +10 -0
- package/dist/containers/CourseCard/components/CourseCardActions/ViewCourseButton.js +23 -0
- package/dist/containers/CourseCard/components/CourseCardActions/ViewCourseButton.js.map +1 -0
- package/dist/containers/CourseCard/components/CourseCardActions/index.d.ts +10 -0
- package/dist/containers/CourseCard/components/CourseCardActions/index.js +26 -0
- package/dist/containers/CourseCard/components/CourseCardActions/index.js.map +1 -0
- package/dist/containers/CourseCard/components/CourseCardActions/messages.d.ts +32 -0
- package/dist/containers/CourseCard/components/CourseCardActions/messages.js +25 -0
- package/dist/containers/CourseCard/components/CourseCardActions/messages.js.map +1 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CertificateBanner.d.ts +10 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CertificateBanner.js +63 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CertificateBanner.js.map +1 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CourseBanner.d.ts +10 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CourseBanner.js +36 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CourseBanner.js.map +1 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/hooks.d.ts +17 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/hooks.js +58 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/hooks.js.map +1 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/index.d.ts +10 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/index.js +23 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/index.js.map +1 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/messages.d.ts +16 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/messages.js +15 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/messages.js.map +1 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/ApprovedContent.d.ts +10 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/ApprovedContent.js +30 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/ApprovedContent.js.map +1 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/EligibleContent.d.ts +10 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/EligibleContent.js +26 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/EligibleContent.js.map +1 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/MustRequestContent.d.ts +10 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/MustRequestContent.js +27 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/MustRequestContent.js.map +1 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/PendingContent.d.ts +10 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/PendingContent.js +23 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/PendingContent.js.map +1 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/RejectedContent.d.ts +10 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/RejectedContent.js +22 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/RejectedContent.js.map +1 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/components/CreditContent.d.ts +30 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/components/CreditContent.js +27 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/components/CreditContent.js.map +1 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/components/CreditRequestForm/hooks.d.ts +5 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/components/CreditRequestForm/hooks.js +12 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/components/CreditRequestForm/hooks.js.map +1 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/components/CreditRequestForm/index.d.ts +19 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/components/CreditRequestForm/index.js +24 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/components/CreditRequestForm/index.js.map +1 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/components/ProviderLink.d.ts +10 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/components/ProviderLink.js +16 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/components/ProviderLink.js.map +1 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/hooks.d.ts +9 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/hooks.js +31 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/hooks.js.map +1 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/messages.d.ts +88 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/messages.js +60 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/messages.js.map +1 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/EntitlementBanner.d.ts +10 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/EntitlementBanner.js +42 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/EntitlementBanner.js.map +1 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/RelatedProgramsBanner/ProgramsList.d.ts +13 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/RelatedProgramsBanner/ProgramsList.js +12 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/RelatedProgramsBanner/ProgramsList.js.map +1 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/RelatedProgramsBanner/index.d.ts +10 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/RelatedProgramsBanner/index.js +23 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/RelatedProgramsBanner/index.js.map +1 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/RelatedProgramsBanner/messages.d.ts +40 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/RelatedProgramsBanner/messages.js +30 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/RelatedProgramsBanner/messages.js.map +1 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/index.d.ts +10 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/index.js +22 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/index.js.map +1 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/messages.d.ts +160 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/messages.js +105 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/messages.js.map +1 -0
- package/dist/containers/CourseCard/components/CourseCardDetails/hooks.d.ts +16 -0
- package/dist/containers/CourseCard/components/CourseCardDetails/hooks.js +51 -0
- package/dist/containers/CourseCard/components/CourseCardDetails/hooks.js.map +1 -0
- package/dist/containers/CourseCard/components/CourseCardDetails/index.d.ts +11 -0
- package/dist/containers/CourseCard/components/CourseCardDetails/index.js +16 -0
- package/dist/containers/CourseCard/components/CourseCardDetails/index.js.map +1 -0
- package/dist/containers/CourseCard/components/CourseCardDetails/index.scss +3 -0
- package/dist/containers/CourseCard/components/CourseCardDetails/messages.d.ts +56 -0
- package/dist/containers/CourseCard/components/CourseCardDetails/messages.js +40 -0
- package/dist/containers/CourseCard/components/CourseCardDetails/messages.js.map +1 -0
- package/dist/containers/CourseCard/components/CourseCardImage.d.ts +13 -0
- package/dist/containers/CourseCard/components/CourseCardImage.js +35 -0
- package/dist/containers/CourseCard/components/CourseCardImage.js.map +1 -0
- package/dist/containers/CourseCard/components/CourseCardMenu/SocialShareMenu.d.ts +17 -0
- package/dist/containers/CourseCard/components/CourseCardMenu/SocialShareMenu.js +43 -0
- package/dist/containers/CourseCard/components/CourseCardMenu/SocialShareMenu.js.map +1 -0
- package/dist/containers/CourseCard/components/CourseCardMenu/hooks.d.ts +26 -0
- package/dist/containers/CourseCard/components/CourseCardMenu/hooks.js +67 -0
- package/dist/containers/CourseCard/components/CourseCardMenu/hooks.js.map +1 -0
- package/dist/containers/CourseCard/components/CourseCardMenu/index.d.ts +13 -0
- package/dist/containers/CourseCard/components/CourseCardMenu/index.js +34 -0
- package/dist/containers/CourseCard/components/CourseCardMenu/index.js.map +1 -0
- package/dist/containers/CourseCard/components/CourseCardMenu/messages.d.ts +48 -0
- package/dist/containers/CourseCard/components/CourseCardMenu/messages.js +35 -0
- package/dist/containers/CourseCard/components/CourseCardMenu/messages.js.map +1 -0
- package/dist/containers/CourseCard/components/CourseCardTitle.d.ts +11 -0
- package/dist/containers/CourseCard/components/CourseCardTitle.js +22 -0
- package/dist/containers/CourseCard/components/CourseCardTitle.js.map +1 -0
- package/dist/containers/CourseCard/components/RelatedProgramsBadge/hooks.d.ts +11 -0
- package/dist/containers/CourseCard/components/RelatedProgramsBadge/hooks.js +29 -0
- package/dist/containers/CourseCard/components/RelatedProgramsBadge/hooks.js.map +1 -0
- package/dist/containers/CourseCard/components/RelatedProgramsBadge/index.d.ts +10 -0
- package/dist/containers/CourseCard/components/RelatedProgramsBadge/index.js +20 -0
- package/dist/containers/CourseCard/components/RelatedProgramsBadge/index.js.map +1 -0
- package/dist/containers/CourseCard/components/RelatedProgramsBadge/messages.d.ts +16 -0
- package/dist/containers/CourseCard/components/RelatedProgramsBadge/messages.js +14 -0
- package/dist/containers/CourseCard/components/RelatedProgramsBadge/messages.js.map +1 -0
- package/dist/containers/CourseCard/components/hooks.d.ts +8 -0
- package/dist/containers/CourseCard/components/hooks.js +25 -0
- package/dist/containers/CourseCard/components/hooks.js.map +1 -0
- package/dist/containers/CourseCard/hooks.d.ts +1 -0
- package/dist/containers/CourseCard/hooks.js +6 -0
- package/dist/containers/CourseCard/hooks.js.map +1 -0
- package/dist/containers/CourseCard/index.d.ts +10 -0
- package/dist/containers/CourseCard/index.js +22 -0
- package/dist/containers/CourseCard/index.js.map +1 -0
- package/dist/containers/CourseCard/messages.d.ts +32 -0
- package/dist/containers/CourseCard/messages.js +25 -0
- package/dist/containers/CourseCard/messages.js.map +1 -0
- package/dist/containers/CourseFilterControls/ActiveCourseFilters.d.ts +2 -0
- package/dist/containers/CourseFilterControls/ActiveCourseFilters.js +15 -0
- package/dist/containers/CourseFilterControls/ActiveCourseFilters.js.map +1 -0
- package/dist/containers/CourseFilterControls/CourseFilterControls.d.ts +2 -0
- package/dist/containers/CourseFilterControls/CourseFilterControls.js +41 -0
- package/dist/containers/CourseFilterControls/CourseFilterControls.js.map +1 -0
- package/dist/containers/CourseFilterControls/components/Checkbox.d.ts +10 -0
- package/dist/containers/CourseFilterControls/components/Checkbox.js +15 -0
- package/dist/containers/CourseFilterControls/components/Checkbox.js.map +1 -0
- package/dist/containers/CourseFilterControls/components/FilterForm.d.ts +13 -0
- package/dist/containers/CourseFilterControls/components/FilterForm.js +25 -0
- package/dist/containers/CourseFilterControls/components/FilterForm.js.map +1 -0
- package/dist/containers/CourseFilterControls/components/SortForm.d.ts +12 -0
- package/dist/containers/CourseFilterControls/components/SortForm.js +17 -0
- package/dist/containers/CourseFilterControls/components/SortForm.js.map +1 -0
- package/dist/containers/CourseFilterControls/index.d.ts +4 -0
- package/dist/containers/CourseFilterControls/index.js +5 -0
- package/dist/containers/CourseFilterControls/index.js.map +1 -0
- package/dist/containers/CourseFilterControls/index.scss +29 -0
- package/dist/containers/CourseFilterControls/messages.d.ts +88 -0
- package/dist/containers/CourseFilterControls/messages.js +60 -0
- package/dist/containers/CourseFilterControls/messages.js.map +1 -0
- package/dist/containers/CoursesPanel/CourseList/hooks.d.ts +2 -0
- package/dist/containers/CoursesPanel/CourseList/hooks.js +7 -0
- package/dist/containers/CoursesPanel/CourseList/hooks.js.map +1 -0
- package/dist/containers/CoursesPanel/CourseList/index.d.ts +16 -0
- package/dist/containers/CoursesPanel/CourseList/index.js +23 -0
- package/dist/containers/CoursesPanel/CourseList/index.js.map +1 -0
- package/dist/containers/CoursesPanel/NoCoursesView/index.d.ts +2 -0
- package/dist/containers/CoursesPanel/NoCoursesView/index.js +19 -0
- package/dist/containers/CoursesPanel/NoCoursesView/index.js.map +1 -0
- package/dist/containers/CoursesPanel/NoCoursesView/index.scss +13 -0
- package/dist/containers/CoursesPanel/NoCoursesView/messages.d.ts +32 -0
- package/dist/containers/CoursesPanel/NoCoursesView/messages.js +25 -0
- package/dist/containers/CoursesPanel/NoCoursesView/messages.js.map +1 -0
- package/dist/containers/CoursesPanel/index.d.ts +5 -0
- package/dist/containers/CoursesPanel/index.js +45 -0
- package/dist/containers/CoursesPanel/index.js.map +1 -0
- package/dist/containers/CoursesPanel/index.scss +42 -0
- package/dist/containers/CoursesPanel/messages.d.ts +8 -0
- package/dist/containers/CoursesPanel/messages.js +10 -0
- package/dist/containers/CoursesPanel/messages.js.map +1 -0
- package/dist/containers/Dashboard/DashboardLayout.d.ts +58 -0
- package/dist/containers/Dashboard/DashboardLayout.js +34 -0
- package/dist/containers/Dashboard/DashboardLayout.js.map +1 -0
- package/dist/containers/Dashboard/LoadingView.d.ts +2 -0
- package/dist/containers/Dashboard/LoadingView.js +10 -0
- package/dist/containers/Dashboard/LoadingView.js.map +1 -0
- package/dist/containers/Dashboard/hooks.d.ts +15 -0
- package/dist/containers/Dashboard/hooks.js +30 -0
- package/dist/containers/Dashboard/hooks.js.map +1 -0
- package/dist/containers/Dashboard/index.d.ts +2 -0
- package/dist/containers/Dashboard/index.js +23 -0
- package/dist/containers/Dashboard/index.js.map +1 -0
- package/dist/containers/Dashboard/index.scss +29 -0
- package/dist/containers/EmailSettingsModal/hooks.d.ts +10 -0
- package/dist/containers/EmailSettingsModal/hooks.js +27 -0
- package/dist/containers/EmailSettingsModal/hooks.js.map +1 -0
- package/dist/containers/EmailSettingsModal/index.d.ts +14 -0
- package/dist/containers/EmailSettingsModal/index.js +20 -0
- package/dist/containers/EmailSettingsModal/index.js.map +1 -0
- package/dist/containers/EmailSettingsModal/messages.d.ts +49 -0
- package/dist/containers/EmailSettingsModal/messages.js +35 -0
- package/dist/containers/EmailSettingsModal/messages.js.map +1 -0
- package/dist/containers/RelatedProgramsModal/components/ProgramCard.d.ts +19 -0
- package/dist/containers/RelatedProgramsModal/components/ProgramCard.js +29 -0
- package/dist/containers/RelatedProgramsModal/components/ProgramCard.js.map +1 -0
- package/dist/containers/RelatedProgramsModal/components/index.scss +23 -0
- package/dist/containers/RelatedProgramsModal/components/messages.d.ts +32 -0
- package/dist/containers/RelatedProgramsModal/components/messages.js +24 -0
- package/dist/containers/RelatedProgramsModal/components/messages.js.map +1 -0
- package/dist/containers/RelatedProgramsModal/index.d.ts +14 -0
- package/dist/containers/RelatedProgramsModal/index.js +25 -0
- package/dist/containers/RelatedProgramsModal/index.js.map +1 -0
- package/dist/containers/RelatedProgramsModal/index.scss +5 -0
- package/dist/containers/RelatedProgramsModal/messages.d.ts +17 -0
- package/dist/containers/RelatedProgramsModal/messages.js +15 -0
- package/dist/containers/RelatedProgramsModal/messages.js.map +1 -0
- package/dist/containers/SelectSessionModal/constants.d.ts +1 -0
- package/dist/containers/SelectSessionModal/constants.js +2 -0
- package/dist/containers/SelectSessionModal/constants.js.map +1 -0
- package/dist/containers/SelectSessionModal/hooks.d.ts +17 -0
- package/dist/containers/SelectSessionModal/hooks.js +76 -0
- package/dist/containers/SelectSessionModal/hooks.js.map +1 -0
- package/dist/containers/SelectSessionModal/index.d.ts +2 -0
- package/dist/containers/SelectSessionModal/index.js +17 -0
- package/dist/containers/SelectSessionModal/index.js.map +1 -0
- package/dist/containers/SelectSessionModal/messages.d.ts +56 -0
- package/dist/containers/SelectSessionModal/messages.js +40 -0
- package/dist/containers/SelectSessionModal/messages.js.map +1 -0
- package/dist/containers/UnenrollConfirmModal/components/ConfirmPane.d.ts +14 -0
- package/dist/containers/UnenrollConfirmModal/components/ConfirmPane.js +22 -0
- package/dist/containers/UnenrollConfirmModal/components/ConfirmPane.js.map +1 -0
- package/dist/containers/UnenrollConfirmModal/components/FinishedPane.d.ts +12 -0
- package/dist/containers/UnenrollConfirmModal/components/FinishedPane.js +21 -0
- package/dist/containers/UnenrollConfirmModal/components/FinishedPane.js.map +1 -0
- package/dist/containers/UnenrollConfirmModal/components/ReasonPane.d.ts +22 -0
- package/dist/containers/UnenrollConfirmModal/components/ReasonPane.js +28 -0
- package/dist/containers/UnenrollConfirmModal/components/ReasonPane.js.map +1 -0
- package/dist/containers/UnenrollConfirmModal/components/messages.d.ts +80 -0
- package/dist/containers/UnenrollConfirmModal/components/messages.js +55 -0
- package/dist/containers/UnenrollConfirmModal/components/messages.js.map +1 -0
- package/dist/containers/UnenrollConfirmModal/constants.d.ts +65 -0
- package/dist/containers/UnenrollConfirmModal/constants.js +89 -0
- package/dist/containers/UnenrollConfirmModal/constants.js.map +1 -0
- package/dist/containers/UnenrollConfirmModal/hooks/index.d.ts +25 -0
- package/dist/containers/UnenrollConfirmModal/hooks/index.js +53 -0
- package/dist/containers/UnenrollConfirmModal/hooks/index.js.map +1 -0
- package/dist/containers/UnenrollConfirmModal/hooks/reasons.d.ts +15 -0
- package/dist/containers/UnenrollConfirmModal/hooks/reasons.js +53 -0
- package/dist/containers/UnenrollConfirmModal/hooks/reasons.js.map +1 -0
- package/dist/containers/UnenrollConfirmModal/index.d.ts +14 -0
- package/dist/containers/UnenrollConfirmModal/index.js +22 -0
- package/dist/containers/UnenrollConfirmModal/index.js.map +1 -0
- package/dist/data/constants/app.d.ts +4 -0
- package/dist/data/constants/app.js +15 -0
- package/dist/data/constants/app.js.map +1 -0
- package/dist/data/constants/course.d.ts +11 -0
- package/dist/data/constants/course.js +17 -0
- package/dist/data/constants/course.js.map +1 -0
- package/dist/data/constants/credit.d.ts +5 -0
- package/dist/data/constants/credit.js +8 -0
- package/dist/data/constants/credit.js.map +1 -0
- package/dist/data/constants/files.d.ts +4 -0
- package/dist/data/constants/files.js +18 -0
- package/dist/data/constants/files.js.map +1 -0
- package/dist/data/constants/htmlKeys.d.ts +7 -0
- package/dist/data/constants/htmlKeys.js +19 -0
- package/dist/data/constants/htmlKeys.js.map +1 -0
- package/dist/data/constants/requests.d.ts +4 -0
- package/dist/data/constants/requests.js +31 -0
- package/dist/data/constants/requests.js.map +1 -0
- package/dist/data/context/FiltersProvider.d.ts +18 -0
- package/dist/data/context/FiltersProvider.js +37 -0
- package/dist/data/context/FiltersProvider.js.map +1 -0
- package/dist/data/context/MasqueradeProvider.d.ts +11 -0
- package/dist/data/context/MasqueradeProvider.js +19 -0
- package/dist/data/context/MasqueradeProvider.js.map +1 -0
- package/dist/data/context/SelectSessionProvider.d.ts +15 -0
- package/dist/data/context/SelectSessionProvider.js +40 -0
- package/dist/data/context/SelectSessionProvider.js.map +1 -0
- package/dist/data/context/index.d.ts +10 -0
- package/dist/data/context/index.js +8 -0
- package/dist/data/context/index.js.map +1 -0
- package/dist/data/contexts/GlobalDataContext.d.ts +16 -0
- package/dist/data/contexts/GlobalDataContext.js +14 -0
- package/dist/data/contexts/GlobalDataContext.js.map +1 -0
- package/dist/data/contexts/GlobalDataProvider.d.ts +3 -0
- package/dist/data/contexts/GlobalDataProvider.js +15 -0
- package/dist/data/contexts/GlobalDataProvider.js.map +1 -0
- package/dist/data/hooks/index.d.ts +3 -0
- package/dist/data/hooks/index.js +4 -0
- package/dist/data/hooks/index.js.map +1 -0
- package/dist/data/hooks/mutationHooks.d.ts +26 -0
- package/dist/data/hooks/mutationHooks.js +84 -0
- package/dist/data/hooks/mutationHooks.js.map +1 -0
- package/dist/data/hooks/queryHooks.d.ts +164 -0
- package/dist/data/hooks/queryHooks.js +57 -0
- package/dist/data/hooks/queryHooks.js.map +1 -0
- package/dist/data/hooks/queryKeys.d.ts +13 -0
- package/dist/data/hooks/queryKeys.js +15 -0
- package/dist/data/hooks/queryKeys.js.map +1 -0
- package/dist/data/services/lms/api.d.ts +32 -0
- package/dist/data/services/lms/api.js +80 -0
- package/dist/data/services/lms/api.js.map +1 -0
- package/dist/data/services/lms/constants.d.ts +8 -0
- package/dist/data/services/lms/constants.js +16 -0
- package/dist/data/services/lms/constants.js.map +1 -0
- package/dist/data/services/lms/index.d.ts +2 -0
- package/dist/data/services/lms/index.js +8 -0
- package/dist/data/services/lms/index.js.map +1 -0
- package/dist/data/services/lms/urls.d.ts +8 -0
- package/dist/data/services/lms/urls.js +37 -0
- package/dist/data/services/lms/urls.js.map +1 -0
- package/dist/data/services/lms/utils.d.ts +6 -0
- package/dist/data/services/lms/utils.js +56 -0
- package/dist/data/services/lms/utils.js.map +1 -0
- package/dist/data/services/segment/utils.d.ts +3 -0
- package/dist/data/services/segment/utils.js +12 -0
- package/dist/data/services/segment/utils.js.map +1 -0
- package/dist/hooks/index.d.ts +7 -0
- package/dist/hooks/index.js +11 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/useCourseData.d.ts +2 -0
- package/dist/hooks/useCourseData.js +8 -0
- package/dist/hooks/useCourseData.js.map +1 -0
- package/dist/hooks/useCourseTrackingEvent.d.ts +2 -0
- package/dist/hooks/useCourseTrackingEvent.js +13 -0
- package/dist/hooks/useCourseTrackingEvent.js.map +1 -0
- package/dist/hooks/useEntitlementInfo.d.ts +22 -0
- package/dist/hooks/useEntitlementInfo.js +29 -0
- package/dist/hooks/useEntitlementInfo.js.map +1 -0
- package/dist/hooks/useIsMasquerading.d.ts +2 -0
- package/dist/hooks/useIsMasquerading.js +9 -0
- package/dist/hooks/useIsMasquerading.js.map +1 -0
- package/dist/hooks/utils.d.ts +7 -0
- package/dist/hooks/utils.js +14 -0
- package/dist/hooks/utils.js.map +1 -0
- package/dist/i18n/index.d.ts +1 -0
- package/dist/i18n/index.js +2 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/messages.d.ts +18 -0
- package/dist/messages.js +20 -0
- package/dist/messages.js.map +1 -0
- package/dist/providers.d.ts +3 -0
- package/dist/providers.js +8 -0
- package/dist/providers.js.map +1 -0
- package/dist/routes.d.ts +13 -0
- package/dist/routes.js +29 -0
- package/dist/routes.js.map +1 -0
- package/dist/segment.d.ts +1 -0
- package/dist/segment.js +74 -0
- package/dist/segment.js.map +1 -0
- package/dist/slots/CourseBannerSlot/index.d.ts +10 -0
- package/dist/slots/CourseBannerSlot/index.js +10 -0
- package/dist/slots/CourseBannerSlot/index.js.map +1 -0
- package/dist/slots/CourseCardActionSlot/index.d.ts +10 -0
- package/dist/slots/CourseCardActionSlot/index.js +9 -0
- package/dist/slots/CourseCardActionSlot/index.js.map +1 -0
- package/dist/slots/CourseListSlot/index.d.ts +10 -0
- package/dist/slots/CourseListSlot/index.js +9 -0
- package/dist/slots/CourseListSlot/index.js.map +1 -0
- package/dist/slots/DashboardModalSlot/index.d.ts +2 -0
- package/dist/slots/DashboardModalSlot/index.js +5 -0
- package/dist/slots/DashboardModalSlot/index.js.map +1 -0
- package/dist/slots/NoCoursesViewSlot/index.d.ts +2 -0
- package/dist/slots/NoCoursesViewSlot/index.js +6 -0
- package/dist/slots/NoCoursesViewSlot/index.js.map +1 -0
- package/dist/slots/WidgetSidebarSlot/index.d.ts +2 -0
- package/dist/slots/WidgetSidebarSlot/index.js +6 -0
- package/dist/slots/WidgetSidebarSlot/index.js.map +1 -0
- package/dist/slots.d.ts +3 -0
- package/dist/slots.js +6 -0
- package/dist/slots.js.map +1 -0
- package/dist/style.scss +36 -0
- package/dist/testUtils.d.ts +86 -0
- package/dist/testUtils.js +183 -0
- package/dist/testUtils.js.map +1 -0
- package/dist/tracking/constants.d.ts +6 -0
- package/dist/tracking/constants.js +45 -0
- package/dist/tracking/constants.js.map +1 -0
- package/dist/tracking/index.d.ts +17 -0
- package/dist/tracking/index.js +17 -0
- package/dist/tracking/index.js.map +1 -0
- package/dist/tracking/trackers/course.d.ts +13 -0
- package/dist/tracking/trackers/course.js +31 -0
- package/dist/tracking/trackers/course.js.map +1 -0
- package/dist/tracking/trackers/credit.d.ts +5 -0
- package/dist/tracking/trackers/credit.js +16 -0
- package/dist/tracking/trackers/credit.js.map +1 -0
- package/dist/tracking/trackers/engagement.d.ts +9 -0
- package/dist/tracking/trackers/engagement.js +18 -0
- package/dist/tracking/trackers/engagement.js.map +1 -0
- package/dist/tracking/trackers/entitlements.d.ts +9 -0
- package/dist/tracking/trackers/entitlements.js +27 -0
- package/dist/tracking/trackers/entitlements.js.map +1 -0
- package/dist/tracking/trackers/filter.d.ts +7 -0
- package/dist/tracking/trackers/filter.js +13 -0
- package/dist/tracking/trackers/filter.js.map +1 -0
- package/dist/tracking/trackers/findCourses.d.ts +5 -0
- package/dist/tracking/trackers/findCourses.js +7 -0
- package/dist/tracking/trackers/findCourses.js.map +1 -0
- package/dist/tracking/trackers/socialShare.d.ts +2 -0
- package/dist/tracking/trackers/socialShare.js +10 -0
- package/dist/tracking/trackers/socialShare.js.map +1 -0
- package/dist/utils/StrictDict.d.ts +2 -0
- package/dist/utils/StrictDict.js +15 -0
- package/dist/utils/StrictDict.js.map +1 -0
- package/dist/utils/dataTransformers.d.ts +7 -0
- package/dist/utils/dataTransformers.js +58 -0
- package/dist/utils/dataTransformers.js.map +1 -0
- package/dist/utils/dateFormatter.d.ts +2 -0
- package/dist/utils/dateFormatter.js +8 -0
- package/dist/utils/dateFormatter.js.map +1 -0
- package/dist/utils/hooks.d.ts +5 -0
- package/dist/utils/hooks.js +10 -0
- package/dist/utils/hooks.js.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.js +5 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/keyStore.d.ts +2 -0
- package/dist/utils/keyStore.js +4 -0
- package/dist/utils/keyStore.js.map +1 -0
- package/dist/widgets/LearnerDashboardHeader/ConfirmEmailBanner/ConfirmEmailBanner.scss +3 -0
- package/dist/widgets/LearnerDashboardHeader/ConfirmEmailBanner/assets/confirm-email.svg +76 -0
- package/dist/widgets/LearnerDashboardHeader/ConfirmEmailBanner/hooks.d.ts +10 -0
- package/dist/widgets/LearnerDashboardHeader/ConfirmEmailBanner/hooks.js +34 -0
- package/dist/widgets/LearnerDashboardHeader/ConfirmEmailBanner/hooks.js.map +1 -0
- package/dist/widgets/LearnerDashboardHeader/ConfirmEmailBanner/index.d.ts +2 -0
- package/dist/widgets/LearnerDashboardHeader/ConfirmEmailBanner/index.js +19 -0
- package/dist/widgets/LearnerDashboardHeader/ConfirmEmailBanner/index.js.map +1 -0
- package/dist/widgets/LearnerDashboardHeader/ConfirmEmailBanner/messages.d.ts +48 -0
- package/dist/widgets/LearnerDashboardHeader/ConfirmEmailBanner/messages.js +35 -0
- package/dist/widgets/LearnerDashboardHeader/ConfirmEmailBanner/messages.js.map +1 -0
- package/dist/widgets/LearnerDashboardHeader/CoursesLink.d.ts +1 -0
- package/dist/widgets/LearnerDashboardHeader/CoursesLink.js +8 -0
- package/dist/widgets/LearnerDashboardHeader/CoursesLink.js.map +1 -0
- package/dist/widgets/LearnerDashboardHeader/DiscoverLinkMenuItem.d.ts +3 -0
- package/dist/widgets/LearnerDashboardHeader/DiscoverLinkMenuItem.js +17 -0
- package/dist/widgets/LearnerDashboardHeader/DiscoverLinkMenuItem.js.map +1 -0
- package/dist/widgets/LearnerDashboardHeader/MasqueradeBar/hooks.d.ts +22 -0
- package/dist/widgets/LearnerDashboardHeader/MasqueradeBar/hooks.js +44 -0
- package/dist/widgets/LearnerDashboardHeader/MasqueradeBar/hooks.js.map +1 -0
- package/dist/widgets/LearnerDashboardHeader/MasqueradeBar/index.d.ts +2 -0
- package/dist/widgets/LearnerDashboardHeader/MasqueradeBar/index.js +20 -0
- package/dist/widgets/LearnerDashboardHeader/MasqueradeBar/index.js.map +1 -0
- package/dist/widgets/LearnerDashboardHeader/MasqueradeBar/index.scss +38 -0
- package/dist/widgets/LearnerDashboardHeader/MasqueradeBar/messages.d.ts +48 -0
- package/dist/widgets/LearnerDashboardHeader/MasqueradeBar/messages.js +35 -0
- package/dist/widgets/LearnerDashboardHeader/MasqueradeBar/messages.js.map +1 -0
- package/dist/widgets/LearnerDashboardHeader/OrderHistoryLinkMenuItem.d.ts +3 -0
- package/dist/widgets/LearnerDashboardHeader/OrderHistoryLinkMenuItem.js +15 -0
- package/dist/widgets/LearnerDashboardHeader/OrderHistoryLinkMenuItem.js.map +1 -0
- package/dist/widgets/LearnerDashboardHeader/ProgramsLinkMenuItem.d.ts +3 -0
- package/dist/widgets/LearnerDashboardHeader/ProgramsLinkMenuItem.js +13 -0
- package/dist/widgets/LearnerDashboardHeader/ProgramsLinkMenuItem.js.map +1 -0
- package/dist/widgets/LearnerDashboardHeader/app.d.ts +3 -0
- package/dist/widgets/LearnerDashboardHeader/app.js +74 -0
- package/dist/widgets/LearnerDashboardHeader/app.js.map +1 -0
- package/dist/widgets/LearnerDashboardHeader/hooks.d.ts +9 -0
- package/dist/widgets/LearnerDashboardHeader/hooks.js +15 -0
- package/dist/widgets/LearnerDashboardHeader/hooks.js.map +1 -0
- package/dist/widgets/LearnerDashboardHeader/index.d.ts +1 -0
- package/dist/widgets/LearnerDashboardHeader/index.js +2 -0
- package/dist/widgets/LearnerDashboardHeader/index.js.map +1 -0
- package/dist/widgets/LearnerDashboardHeader/messages.d.ts +128 -0
- package/dist/widgets/LearnerDashboardHeader/messages.js +85 -0
- package/dist/widgets/LearnerDashboardHeader/messages.js.map +1 -0
- package/dist/widgets/LookingForChallengeWidget/index.d.ts +6 -0
- package/dist/widgets/LookingForChallengeWidget/index.js +22 -0
- package/dist/widgets/LookingForChallengeWidget/index.js.map +1 -0
- package/dist/widgets/LookingForChallengeWidget/index.scss +6 -0
- package/dist/widgets/LookingForChallengeWidget/messages.d.ts +16 -0
- package/dist/widgets/LookingForChallengeWidget/messages.js +15 -0
- package/dist/widgets/LookingForChallengeWidget/messages.js.map +1 -0
- package/dist/widgets/LookingForChallengeWidget/track.d.ts +7 -0
- package/dist/widgets/LookingForChallengeWidget/track.js +13 -0
- package/dist/widgets/LookingForChallengeWidget/track.js.map +1 -0
- package/package.json +98 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/slots/DashboardModalSlot/index.jsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAE9C,MAAM,kBAAkB,GAAG,GAAG,EAAE,CAAC,CAC/B,KAAC,IAAI,IAAC,EAAE,EAAC,8DAA8D,GAAG,CAC3E,CAAC;AAEF,eAAe,kBAAkB,CAAC","sourcesContent":["import { Slot } from '@openedx/frontend-base';\n\nconst DashboardModalSlot = () => (\n <Slot id=\"org.openedx.frontend.slot.learnerDashboard.dashboardModal.v1\" />\n);\n\nexport default DashboardModalSlot;\n"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Slot } from '@openedx/frontend-base';
|
|
3
|
+
import NoCoursesView from '../../containers/CoursesPanel/NoCoursesView';
|
|
4
|
+
export const NoCoursesViewSlot = () => (_jsx(Slot, { id: "org.openedx.frontend.slot.learnerDashboard.noCoursesView.v1", children: _jsx(NoCoursesView, {}) }));
|
|
5
|
+
export default NoCoursesViewSlot;
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/slots/NoCoursesViewSlot/index.jsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAE9C,OAAO,aAAa,MAAM,6CAA6C,CAAC;AAExE,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,EAAE,CAAC,CACrC,KAAC,IAAI,IAAC,EAAE,EAAC,6DAA6D,YACpE,KAAC,aAAa,KAAG,GACZ,CACR,CAAC;AAEF,eAAe,iBAAiB,CAAC","sourcesContent":["import { Slot } from '@openedx/frontend-base';\n\nimport NoCoursesView from '../../containers/CoursesPanel/NoCoursesView';\n\nexport const NoCoursesViewSlot = () => (\n <Slot id=\"org.openedx.frontend.slot.learnerDashboard.noCoursesView.v1\">\n <NoCoursesView />\n </Slot>\n);\n\nexport default NoCoursesViewSlot;\n"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Slot } from '@openedx/frontend-base';
|
|
3
|
+
import LookingForChallengeWidget from '../../widgets/LookingForChallengeWidget';
|
|
4
|
+
export const WidgetSidebarSlot = () => (_jsx(Slot, { id: "org.openedx.frontend.slot.learnerDashboard.widgetSidebar.v1", children: _jsx(LookingForChallengeWidget, {}) }));
|
|
5
|
+
export default WidgetSidebarSlot;
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/slots/WidgetSidebarSlot/index.jsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,OAAO,yBAAyB,MAAM,yCAAyC,CAAC;AAEhF,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,EAAE,CAAC,CACrC,KAAC,IAAI,IAAC,EAAE,EAAC,6DAA6D,YACpE,KAAC,yBAAyB,KAAG,GACxB,CACR,CAAC;AAEF,eAAe,iBAAiB,CAAC","sourcesContent":["import { Slot } from '@openedx/frontend-base';\nimport LookingForChallengeWidget from '../../widgets/LookingForChallengeWidget';\n\nexport const WidgetSidebarSlot = () => (\n <Slot id=\"org.openedx.frontend.slot.learnerDashboard.widgetSidebar.v1\">\n <LookingForChallengeWidget />\n </Slot>\n);\n\nexport default WidgetSidebarSlot;\n"]}
|
package/dist/slots.d.ts
ADDED
package/dist/slots.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slots.js","sourceRoot":"","sources":["../src/slots.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAE7E,MAAM,KAAK,GAAoB;IAC7B,GAAI,yBAAyB,CAAC,KAAY;CAC3C,CAAC;AAEF,eAAe,KAAK,CAAC","sourcesContent":["import { SlotOperation } from '@openedx/frontend-base';\n\nimport { learnerDashboardHeaderApp } from './widgets/LearnerDashboardHeader';\n\nconst slots: SlotOperation[] = [\n ...(learnerDashboardHeaderApp.slots as [])\n];\n\nexport default slots;\n"]}
|
package/dist/style.scss
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
$fa-font-path: "~font-awesome/fonts";
|
|
2
|
+
@import "~font-awesome/scss/font-awesome";
|
|
3
|
+
|
|
4
|
+
$input-focus-box-shadow: var(--pgn-elevation-form-input-base); // hack to get upgrade to paragon 4.0.0 to work
|
|
5
|
+
|
|
6
|
+
#learnerDashboardRoot {
|
|
7
|
+
main {
|
|
8
|
+
flex-grow: 1;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
// Removing a odd 1.5 scaling on checkboxes.:
|
|
12
|
+
input[type=checkbox] {
|
|
13
|
+
transform: none;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.text-ellipsis {
|
|
17
|
+
overflow: hidden;
|
|
18
|
+
text-overflow: ellipsis;
|
|
19
|
+
white-space: nowrap;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.alert.alert-info .alert-icon {
|
|
23
|
+
color: black;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
#paragon-portal-root {
|
|
27
|
+
.pgn__modal-layer {
|
|
28
|
+
.pgn__modal-close-container {
|
|
29
|
+
right: 1rem !important;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
.confirm-modal .pgn__modal-body {
|
|
33
|
+
overflow: hidden;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
export function formatMessage(msg: any, values: any): any;
|
|
2
|
+
export function mockNestedComponent(name: string, contents: obj): func;
|
|
3
|
+
export function mockNestedComponents(mapping: obj): obj;
|
|
4
|
+
/**
|
|
5
|
+
* Mock utility for working with useState in a hooks module.
|
|
6
|
+
* Expects/requires an object containing the state object in order to ensure
|
|
7
|
+
* the mock behavior works appropriately.
|
|
8
|
+
*
|
|
9
|
+
* Expected format:
|
|
10
|
+
* hooks = { state: { <key>: (val) => React.createRef(val), ... } }
|
|
11
|
+
*
|
|
12
|
+
* Returns a utility for mocking useState and providing access to specific state values
|
|
13
|
+
* and setState methods, as well as allowing per-test configuration of useState value returns.
|
|
14
|
+
*
|
|
15
|
+
* Example usage:
|
|
16
|
+
* // hooks.js
|
|
17
|
+
* import * as module from './hooks';
|
|
18
|
+
* const state = {
|
|
19
|
+
* isOpen: (val) => React.useState(val),
|
|
20
|
+
* hasDoors: (val) => React.useState(val),
|
|
21
|
+
* selected: (val) => React.useState(val),
|
|
22
|
+
* };
|
|
23
|
+
* ...
|
|
24
|
+
* export const exampleHook = () => {
|
|
25
|
+
* const [isOpen, setIsOpen] = module.state.isOpen(false);
|
|
26
|
+
* if (!isOpen) { return null; }
|
|
27
|
+
* return { isOpen, setIsOpen };
|
|
28
|
+
* }
|
|
29
|
+
* ...
|
|
30
|
+
*
|
|
31
|
+
* // hooks.test.js
|
|
32
|
+
* import * as hooks from './hooks';
|
|
33
|
+
* const state = new MockUseState(hooks)
|
|
34
|
+
* ...
|
|
35
|
+
* describe('state hooks', () => {
|
|
36
|
+
* state.testGetter(state.keys.isOpen);
|
|
37
|
+
* state.testGetter(state.keys.hasDoors);
|
|
38
|
+
* state.testGetter(state.keys.selected);
|
|
39
|
+
* });
|
|
40
|
+
* describe('exampleHook', () => {
|
|
41
|
+
* beforeEach(() => { state.mock(); });
|
|
42
|
+
* it('returns null if isOpen is default value', () => {
|
|
43
|
+
* expect(hooks.exampleHook()).toEqual(null);
|
|
44
|
+
* });
|
|
45
|
+
* it('returns isOpen and setIsOpen if isOpen is not null', () => {
|
|
46
|
+
* state.mockVal(state.keys.isOpen, true);
|
|
47
|
+
* expect(hooks.exampleHook()).toEqual({
|
|
48
|
+
* isOpen: true,
|
|
49
|
+
* setIsOpen: state.setState[state.keys.isOpen],
|
|
50
|
+
* });
|
|
51
|
+
* });
|
|
52
|
+
* afterEach(() => { state.restore(); });
|
|
53
|
+
* });
|
|
54
|
+
*
|
|
55
|
+
* @param {obj} hooks - hooks module containing a 'state' object
|
|
56
|
+
*/
|
|
57
|
+
export class MockUseState {
|
|
58
|
+
constructor(hooks: any);
|
|
59
|
+
hooks: any;
|
|
60
|
+
oldState: any;
|
|
61
|
+
setState: {};
|
|
62
|
+
stateVals: {};
|
|
63
|
+
/**
|
|
64
|
+
* Replace the hook module's state object with a mocked version, initialized to default values.
|
|
65
|
+
*/
|
|
66
|
+
mock(): void;
|
|
67
|
+
/**
|
|
68
|
+
* Restore the hook module's state object to the actual code.
|
|
69
|
+
*/
|
|
70
|
+
restore(): void;
|
|
71
|
+
/**
|
|
72
|
+
* Mock the state getter associated with a single key to return a specific value one time.
|
|
73
|
+
* @param {string} key - state key (from this.keys)
|
|
74
|
+
* @param {any} val - new value to be returned by the useState call.
|
|
75
|
+
*/
|
|
76
|
+
mockVal(key: string, val: any): void;
|
|
77
|
+
testGetter(key: any): void;
|
|
78
|
+
/**
|
|
79
|
+
* @return {object} - StrictDict of state object keys
|
|
80
|
+
*/
|
|
81
|
+
get keys(): object;
|
|
82
|
+
expectInitializedWith(key: any, value: any): void;
|
|
83
|
+
expectSetStateCalledWith(key: any, value: any): void;
|
|
84
|
+
get values(): any;
|
|
85
|
+
}
|
|
86
|
+
export function mockLocation(href: any): void;
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import react from 'react';
|
|
3
|
+
import { StrictDict } from './utils';
|
|
4
|
+
/**
|
|
5
|
+
* Mocked formatMessage provided by react-intl
|
|
6
|
+
*/
|
|
7
|
+
export const formatMessage = (msg, values) => {
|
|
8
|
+
let message = msg.defaultMessage;
|
|
9
|
+
if (values === undefined) {
|
|
10
|
+
return message;
|
|
11
|
+
}
|
|
12
|
+
// check if value is not a primitive type.
|
|
13
|
+
if (Object.values(values).filter(value => Object(value) === value).length) {
|
|
14
|
+
return _jsx("format-message-function", { message: msg, values });
|
|
15
|
+
}
|
|
16
|
+
Object.keys(values).forEach((key) => {
|
|
17
|
+
message = message.replaceAll(`{${key}}`, values[key]);
|
|
18
|
+
});
|
|
19
|
+
return message;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Mock a single component, or a nested component so that its children render nicely
|
|
23
|
+
* in snapshots.
|
|
24
|
+
* @param {string} name - parent component name
|
|
25
|
+
* @param {obj} contents - object of child components with intended component
|
|
26
|
+
* render name.
|
|
27
|
+
* @return {func} - mock component with nested children.
|
|
28
|
+
*
|
|
29
|
+
* usage:
|
|
30
|
+
* mockNestedComponent('Card', { Body: 'Card.Body', Form: { Control: { Feedback: 'Form.Control.Feedback' }}... });
|
|
31
|
+
* mockNestedComponent('IconButton', 'IconButton');
|
|
32
|
+
*/
|
|
33
|
+
export const mockNestedComponent = (name, contents) => {
|
|
34
|
+
if (typeof contents === 'function') {
|
|
35
|
+
return contents();
|
|
36
|
+
}
|
|
37
|
+
if (typeof contents !== 'object') {
|
|
38
|
+
return contents;
|
|
39
|
+
}
|
|
40
|
+
const fn = () => name;
|
|
41
|
+
Object.defineProperty(fn, 'name', { value: name });
|
|
42
|
+
Object.keys(contents).forEach((nestedName) => {
|
|
43
|
+
const value = contents[nestedName];
|
|
44
|
+
fn[nestedName] = typeof value !== 'object'
|
|
45
|
+
? value
|
|
46
|
+
: mockNestedComponent(`${name}.${nestedName}`, value);
|
|
47
|
+
});
|
|
48
|
+
return fn;
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Mock a module of components. nested components will be rendered nicely in snapshots.
|
|
52
|
+
* @param {obj} mapping - component module mock config.
|
|
53
|
+
* @return {obj} - module of flat and nested components that will render nicely in snapshots.
|
|
54
|
+
* usage:
|
|
55
|
+
* mockNestedComponents({
|
|
56
|
+
* Card: { Body: 'Card.Body' },
|
|
57
|
+
* IconButton: 'IconButton',
|
|
58
|
+
* })
|
|
59
|
+
*/
|
|
60
|
+
export const mockNestedComponents = (mapping) => Object.entries(mapping).reduce((obj, [name, value]) => (Object.assign(Object.assign({}, obj), { [name]: mockNestedComponent(name, value) })), {});
|
|
61
|
+
/**
|
|
62
|
+
* Mock utility for working with useState in a hooks module.
|
|
63
|
+
* Expects/requires an object containing the state object in order to ensure
|
|
64
|
+
* the mock behavior works appropriately.
|
|
65
|
+
*
|
|
66
|
+
* Expected format:
|
|
67
|
+
* hooks = { state: { <key>: (val) => React.createRef(val), ... } }
|
|
68
|
+
*
|
|
69
|
+
* Returns a utility for mocking useState and providing access to specific state values
|
|
70
|
+
* and setState methods, as well as allowing per-test configuration of useState value returns.
|
|
71
|
+
*
|
|
72
|
+
* Example usage:
|
|
73
|
+
* // hooks.js
|
|
74
|
+
* import * as module from './hooks';
|
|
75
|
+
* const state = {
|
|
76
|
+
* isOpen: (val) => React.useState(val),
|
|
77
|
+
* hasDoors: (val) => React.useState(val),
|
|
78
|
+
* selected: (val) => React.useState(val),
|
|
79
|
+
* };
|
|
80
|
+
* ...
|
|
81
|
+
* export const exampleHook = () => {
|
|
82
|
+
* const [isOpen, setIsOpen] = module.state.isOpen(false);
|
|
83
|
+
* if (!isOpen) { return null; }
|
|
84
|
+
* return { isOpen, setIsOpen };
|
|
85
|
+
* }
|
|
86
|
+
* ...
|
|
87
|
+
*
|
|
88
|
+
* // hooks.test.js
|
|
89
|
+
* import * as hooks from './hooks';
|
|
90
|
+
* const state = new MockUseState(hooks)
|
|
91
|
+
* ...
|
|
92
|
+
* describe('state hooks', () => {
|
|
93
|
+
* state.testGetter(state.keys.isOpen);
|
|
94
|
+
* state.testGetter(state.keys.hasDoors);
|
|
95
|
+
* state.testGetter(state.keys.selected);
|
|
96
|
+
* });
|
|
97
|
+
* describe('exampleHook', () => {
|
|
98
|
+
* beforeEach(() => { state.mock(); });
|
|
99
|
+
* it('returns null if isOpen is default value', () => {
|
|
100
|
+
* expect(hooks.exampleHook()).toEqual(null);
|
|
101
|
+
* });
|
|
102
|
+
* it('returns isOpen and setIsOpen if isOpen is not null', () => {
|
|
103
|
+
* state.mockVal(state.keys.isOpen, true);
|
|
104
|
+
* expect(hooks.exampleHook()).toEqual({
|
|
105
|
+
* isOpen: true,
|
|
106
|
+
* setIsOpen: state.setState[state.keys.isOpen],
|
|
107
|
+
* });
|
|
108
|
+
* });
|
|
109
|
+
* afterEach(() => { state.restore(); });
|
|
110
|
+
* });
|
|
111
|
+
*
|
|
112
|
+
* @param {obj} hooks - hooks module containing a 'state' object
|
|
113
|
+
*/
|
|
114
|
+
export class MockUseState {
|
|
115
|
+
constructor(hooks) {
|
|
116
|
+
this.hooks = hooks;
|
|
117
|
+
this.oldState = null;
|
|
118
|
+
this.setState = {};
|
|
119
|
+
this.stateVals = {};
|
|
120
|
+
this.mock = this.mock.bind(this);
|
|
121
|
+
this.restore = this.restore.bind(this);
|
|
122
|
+
this.mockVal = this.mockVal.bind(this);
|
|
123
|
+
this.testGetter = this.testGetter.bind(this);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* @return {object} - StrictDict of state object keys
|
|
127
|
+
*/
|
|
128
|
+
get keys() {
|
|
129
|
+
return StrictDict(Object.keys(this.hooks.state).reduce((obj, key) => (Object.assign(Object.assign({}, obj), { [key]: key })), {}));
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Replace the hook module's state object with a mocked version, initialized to default values.
|
|
133
|
+
*/
|
|
134
|
+
mock() {
|
|
135
|
+
this.oldState = this.hooks.state;
|
|
136
|
+
Object.keys(this.keys).forEach(key => {
|
|
137
|
+
this.hooks.state[key] = jest.fn(val => {
|
|
138
|
+
this.stateVals[key] = val;
|
|
139
|
+
return [val, this.setState[key]];
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
this.setState = Object.keys(this.keys).reduce((obj, key) => (Object.assign(Object.assign({}, obj), { [key]: jest.fn(val => {
|
|
143
|
+
this.hooks.state[key] = val;
|
|
144
|
+
}) })), {});
|
|
145
|
+
}
|
|
146
|
+
expectInitializedWith(key, value) {
|
|
147
|
+
expect(this.hooks.state[key]).toHaveBeenCalledWith(value);
|
|
148
|
+
}
|
|
149
|
+
expectSetStateCalledWith(key, value) {
|
|
150
|
+
expect(this.setState[key]).toHaveBeenCalledWith(value);
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Restore the hook module's state object to the actual code.
|
|
154
|
+
*/
|
|
155
|
+
restore() {
|
|
156
|
+
this.hooks.state = this.oldState;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Mock the state getter associated with a single key to return a specific value one time.
|
|
160
|
+
* @param {string} key - state key (from this.keys)
|
|
161
|
+
* @param {any} val - new value to be returned by the useState call.
|
|
162
|
+
*/
|
|
163
|
+
mockVal(key, val) {
|
|
164
|
+
this.hooks.state[key].mockReturnValueOnce([val, this.setState[key]]);
|
|
165
|
+
}
|
|
166
|
+
testGetter(key) {
|
|
167
|
+
test(`${key} state getter should return useState passthrough`, () => {
|
|
168
|
+
const testValue = 'some value';
|
|
169
|
+
const useState = (val) => ({ useState: val });
|
|
170
|
+
jest.spyOn(react, 'useState').mockImplementationOnce(useState);
|
|
171
|
+
expect(this.hooks.state[key](testValue)).toEqual(useState(testValue));
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
get values() {
|
|
175
|
+
return StrictDict(Object.assign({}, this.hooks.state));
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
export const mockLocation = (href) => {
|
|
179
|
+
delete global.window.location;
|
|
180
|
+
global.window = Object.create(window);
|
|
181
|
+
global.window.location = { href };
|
|
182
|
+
};
|
|
183
|
+
//# sourceMappingURL=testUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testUtils.js","sourceRoot":"","sources":["../src/testUtils.js"],"names":[],"mappings":"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","sourcesContent":["import react from 'react';\n\nimport { StrictDict } from '@src/utils';\n\n/**\n * Mocked formatMessage provided by react-intl\n */\nexport const formatMessage = (msg, values) => {\n let message = msg.defaultMessage;\n if (values === undefined) {\n return message;\n }\n // check if value is not a primitive type.\n if (Object.values(values).filter(value => Object(value) === value).length) {\n return <format-message-function {...{ message: msg, values }} />;\n }\n Object.keys(values).forEach((key) => {\n message = message.replaceAll(`{${key}}`, values[key]);\n });\n return message;\n};\n\n/**\n * Mock a single component, or a nested component so that its children render nicely\n * in snapshots.\n * @param {string} name - parent component name\n * @param {obj} contents - object of child components with intended component\n * render name.\n * @return {func} - mock component with nested children.\n *\n * usage:\n * mockNestedComponent('Card', { Body: 'Card.Body', Form: { Control: { Feedback: 'Form.Control.Feedback' }}... });\n * mockNestedComponent('IconButton', 'IconButton');\n */\nexport const mockNestedComponent = (name, contents) => {\n if (typeof contents === 'function') {\n return contents();\n }\n if (typeof contents !== 'object') {\n return contents;\n }\n const fn = () => name;\n Object.defineProperty(fn, 'name', { value: name });\n Object.keys(contents).forEach((nestedName) => {\n const value = contents[nestedName];\n fn[nestedName] = typeof value !== 'object'\n ? value\n : mockNestedComponent(`${name}.${nestedName}`, value);\n });\n return fn;\n};\n\n/**\n * Mock a module of components. nested components will be rendered nicely in snapshots.\n * @param {obj} mapping - component module mock config.\n * @return {obj} - module of flat and nested components that will render nicely in snapshots.\n * usage:\n * mockNestedComponents({\n * Card: { Body: 'Card.Body' },\n * IconButton: 'IconButton',\n * })\n */\nexport const mockNestedComponents = (mapping) => Object.entries(mapping).reduce(\n (obj, [name, value]) => ({\n ...obj,\n [name]: mockNestedComponent(name, value),\n }),\n {},\n);\n\n/**\n * Mock utility for working with useState in a hooks module.\n * Expects/requires an object containing the state object in order to ensure\n * the mock behavior works appropriately.\n *\n * Expected format:\n * hooks = { state: { <key>: (val) => React.createRef(val), ... } }\n *\n * Returns a utility for mocking useState and providing access to specific state values\n * and setState methods, as well as allowing per-test configuration of useState value returns.\n *\n * Example usage:\n * // hooks.js\n * import * as module from './hooks';\n * const state = {\n * isOpen: (val) => React.useState(val),\n * hasDoors: (val) => React.useState(val),\n * selected: (val) => React.useState(val),\n * };\n * ...\n * export const exampleHook = () => {\n * const [isOpen, setIsOpen] = module.state.isOpen(false);\n * if (!isOpen) { return null; }\n * return { isOpen, setIsOpen };\n * }\n * ...\n *\n * // hooks.test.js\n * import * as hooks from './hooks';\n * const state = new MockUseState(hooks)\n * ...\n * describe('state hooks', () => {\n * state.testGetter(state.keys.isOpen);\n * state.testGetter(state.keys.hasDoors);\n * state.testGetter(state.keys.selected);\n * });\n * describe('exampleHook', () => {\n * beforeEach(() => { state.mock(); });\n * it('returns null if isOpen is default value', () => {\n * expect(hooks.exampleHook()).toEqual(null);\n * });\n * it('returns isOpen and setIsOpen if isOpen is not null', () => {\n * state.mockVal(state.keys.isOpen, true);\n * expect(hooks.exampleHook()).toEqual({\n * isOpen: true,\n * setIsOpen: state.setState[state.keys.isOpen],\n * });\n * });\n * afterEach(() => { state.restore(); });\n * });\n *\n * @param {obj} hooks - hooks module containing a 'state' object\n */\nexport class MockUseState {\n constructor(hooks) {\n this.hooks = hooks;\n this.oldState = null;\n this.setState = {};\n this.stateVals = {};\n\n this.mock = this.mock.bind(this);\n this.restore = this.restore.bind(this);\n this.mockVal = this.mockVal.bind(this);\n this.testGetter = this.testGetter.bind(this);\n }\n\n /**\n * @return {object} - StrictDict of state object keys\n */\n get keys() {\n return StrictDict(Object.keys(this.hooks.state).reduce(\n (obj, key) => ({ ...obj, [key]: key }),\n {},\n ));\n }\n\n /**\n * Replace the hook module's state object with a mocked version, initialized to default values.\n */\n mock() {\n this.oldState = this.hooks.state;\n Object.keys(this.keys).forEach(key => {\n this.hooks.state[key] = jest.fn(val => {\n this.stateVals[key] = val;\n return [val, this.setState[key]];\n });\n });\n this.setState = Object.keys(this.keys).reduce(\n (obj, key) => ({\n ...obj,\n [key]: jest.fn(val => {\n this.hooks.state[key] = val;\n }),\n }),\n {},\n );\n }\n\n expectInitializedWith(key, value) {\n expect(this.hooks.state[key]).toHaveBeenCalledWith(value);\n }\n\n expectSetStateCalledWith(key, value) {\n expect(this.setState[key]).toHaveBeenCalledWith(value);\n }\n\n /**\n * Restore the hook module's state object to the actual code.\n */\n restore() {\n this.hooks.state = this.oldState;\n }\n\n /**\n * Mock the state getter associated with a single key to return a specific value one time.\n * @param {string} key - state key (from this.keys)\n * @param {any} val - new value to be returned by the useState call.\n */\n mockVal(key, val) {\n this.hooks.state[key].mockReturnValueOnce([val, this.setState[key]]);\n }\n\n testGetter(key) {\n test(`${key} state getter should return useState passthrough`, () => {\n const testValue = 'some value';\n const useState = (val) => ({ useState: val });\n jest.spyOn(react, 'useState').mockImplementationOnce(useState);\n expect(this.hooks.state[key](testValue)).toEqual(useState(testValue));\n });\n }\n\n get values() {\n return StrictDict({ ...this.hooks.state });\n }\n}\n\nexport const mockLocation = (href) => {\n delete global.window.location;\n global.window = Object.create(window);\n global.window.location = { href };\n};\n"]}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { StrictDict } from '../utils';
|
|
2
|
+
export const categories = StrictDict({
|
|
3
|
+
dashboard: 'dashboard',
|
|
4
|
+
userEngagement: 'user-engagement',
|
|
5
|
+
searchButton: 'search_button',
|
|
6
|
+
credit: 'credit',
|
|
7
|
+
filter: 'filter',
|
|
8
|
+
});
|
|
9
|
+
export const events = StrictDict({
|
|
10
|
+
enterCourseClicked: 'enterCourseClicked',
|
|
11
|
+
courseImageClicked: 'courseImageClicked',
|
|
12
|
+
courseTitleClicked: 'courseTitleClicked',
|
|
13
|
+
courseOptionsDropdownClicked: 'courseOptionsDropdownClicked',
|
|
14
|
+
shareClicked: 'shareClicked',
|
|
15
|
+
userSettingsChanged: 'userSettingsChanged',
|
|
16
|
+
newSession: 'newSession',
|
|
17
|
+
switchSession: 'switchSession',
|
|
18
|
+
leaveSession: 'leaveSession',
|
|
19
|
+
unenrollReason: 'unenrollReason',
|
|
20
|
+
entitlementUnenrollReason: 'entitlementUnenrollReason',
|
|
21
|
+
});
|
|
22
|
+
export const eventNames = StrictDict({
|
|
23
|
+
enterCourseClicked: 'edx.bi.dashboard.enter_course.clicked',
|
|
24
|
+
courseImageClicked: 'edx.bi.dashboard.course_image.clicked',
|
|
25
|
+
courseTitleClicked: 'edx.bi.dashboard.course_title.clicked',
|
|
26
|
+
courseOptionsDropdownClicked: 'edx.bi.dashboard.course_options_dropdown.clicked',
|
|
27
|
+
shareClicked: 'edx.course.share_clicked',
|
|
28
|
+
userSettingsChanged: 'edx.user.settings.changed',
|
|
29
|
+
newSession: 'course-dashboard.new-session',
|
|
30
|
+
switchSession: 'course-dashboard.switch-session',
|
|
31
|
+
leaveSession: 'course-dashboard.leave-session',
|
|
32
|
+
unenrollReason: 'unenrollment_reason.selected',
|
|
33
|
+
entitlementUnenrollReason: 'entitlement_unenrollment_reason.selected',
|
|
34
|
+
findCoursesClicked: 'edx.bi.dashboard.find_courses_button.clicked',
|
|
35
|
+
purchaseCredit: 'edx.bi.credit.clicked_purchase_credit',
|
|
36
|
+
filterClicked: 'course-dashboard.filter.clicked',
|
|
37
|
+
filterOptionSelected: 'course-dashboard.filter_option.selected',
|
|
38
|
+
});
|
|
39
|
+
export const linkNames = StrictDict({
|
|
40
|
+
learnerHomeNavExplore: 'learner_home_nav_explore',
|
|
41
|
+
learnerHomeNavDropdownExplore: 'learner_home_nav_dropdown_explore',
|
|
42
|
+
});
|
|
43
|
+
export const appName = 'learner-home';
|
|
44
|
+
export default eventNames;
|
|
45
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/tracking/constants.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAC;IACnC,SAAS,EAAE,WAAW;IACtB,cAAc,EAAE,iBAAiB;IACjC,YAAY,EAAE,eAAe;IAC7B,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;CACjB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU,CAAC;IAC/B,kBAAkB,EAAE,oBAAoB;IACxC,kBAAkB,EAAE,oBAAoB;IACxC,kBAAkB,EAAE,oBAAoB;IACxC,4BAA4B,EAAE,8BAA8B;IAC5D,YAAY,EAAE,cAAc;IAC5B,mBAAmB,EAAE,qBAAqB;IAC1C,UAAU,EAAE,YAAY;IACxB,aAAa,EAAE,eAAe;IAC9B,YAAY,EAAE,cAAc;IAC5B,cAAc,EAAE,gBAAgB;IAChC,yBAAyB,EAAE,2BAA2B;CACvD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAC;IACnC,kBAAkB,EAAE,uCAAuC;IAC3D,kBAAkB,EAAE,uCAAuC;IAC3D,kBAAkB,EAAE,uCAAuC;IAC3D,4BAA4B,EAAE,kDAAkD;IAChF,YAAY,EAAE,0BAA0B;IACxC,mBAAmB,EAAE,2BAA2B;IAChD,UAAU,EAAE,8BAA8B;IAC1C,aAAa,EAAE,iCAAiC;IAChD,YAAY,EAAE,gCAAgC;IAC9C,cAAc,EAAE,8BAA8B;IAC9C,yBAAyB,EAAE,0CAA0C;IACrE,kBAAkB,EAAE,8CAA8C;IAClE,cAAc,EAAE,uCAAuC;IACvD,aAAa,EAAE,iCAAiC;IAChD,oBAAoB,EAAE,yCAAyC;CAChE,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,SAAS,GAAG,UAAU,CAAC;IAClC,qBAAqB,EAAE,0BAA0B;IACjD,6BAA6B,EAAE,mCAAmC;CACnE,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,cAAc,CAAC;AAEtC,eAAe,UAAU,CAAC","sourcesContent":["import { StrictDict } from '../utils';\n\nexport const categories = StrictDict({\n dashboard: 'dashboard',\n userEngagement: 'user-engagement',\n searchButton: 'search_button',\n credit: 'credit',\n filter: 'filter',\n});\n\nexport const events = StrictDict({\n enterCourseClicked: 'enterCourseClicked',\n courseImageClicked: 'courseImageClicked',\n courseTitleClicked: 'courseTitleClicked',\n courseOptionsDropdownClicked: 'courseOptionsDropdownClicked',\n shareClicked: 'shareClicked',\n userSettingsChanged: 'userSettingsChanged',\n newSession: 'newSession',\n switchSession: 'switchSession',\n leaveSession: 'leaveSession',\n unenrollReason: 'unenrollReason',\n entitlementUnenrollReason: 'entitlementUnenrollReason',\n});\n\nexport const eventNames = StrictDict({\n enterCourseClicked: 'edx.bi.dashboard.enter_course.clicked',\n courseImageClicked: 'edx.bi.dashboard.course_image.clicked',\n courseTitleClicked: 'edx.bi.dashboard.course_title.clicked',\n courseOptionsDropdownClicked: 'edx.bi.dashboard.course_options_dropdown.clicked',\n shareClicked: 'edx.course.share_clicked',\n userSettingsChanged: 'edx.user.settings.changed',\n newSession: 'course-dashboard.new-session',\n switchSession: 'course-dashboard.switch-session',\n leaveSession: 'course-dashboard.leave-session',\n unenrollReason: 'unenrollment_reason.selected',\n entitlementUnenrollReason: 'entitlement_unenrollment_reason.selected',\n findCoursesClicked: 'edx.bi.dashboard.find_courses_button.clicked',\n purchaseCredit: 'edx.bi.credit.clicked_purchase_credit',\n filterClicked: 'course-dashboard.filter.clicked',\n filterOptionSelected: 'course-dashboard.filter_option.selected',\n});\n\nexport const linkNames = StrictDict({\n learnerHomeNavExplore: 'learner_home_nav_explore',\n learnerHomeNavDropdownExplore: 'learner_home_nav_dropdown_explore',\n});\n\nexport const appName = 'learner-home';\n\nexport default eventNames;\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
declare namespace _default {
|
|
2
|
+
export { course };
|
|
3
|
+
export { credit };
|
|
4
|
+
export { engagement };
|
|
5
|
+
export { entitlements };
|
|
6
|
+
export { socialShare };
|
|
7
|
+
export { findCourses };
|
|
8
|
+
export { filter };
|
|
9
|
+
}
|
|
10
|
+
export default _default;
|
|
11
|
+
import course from './trackers/course';
|
|
12
|
+
import credit from './trackers/credit';
|
|
13
|
+
import engagement from './trackers/engagement';
|
|
14
|
+
import entitlements from './trackers/entitlements';
|
|
15
|
+
import socialShare from './trackers/socialShare';
|
|
16
|
+
import findCourses from './trackers/findCourses';
|
|
17
|
+
import filter from './trackers/filter';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import course from './trackers/course';
|
|
2
|
+
import credit from './trackers/credit';
|
|
3
|
+
import engagement from './trackers/engagement';
|
|
4
|
+
import entitlements from './trackers/entitlements';
|
|
5
|
+
import socialShare from './trackers/socialShare';
|
|
6
|
+
import findCourses from './trackers/findCourses';
|
|
7
|
+
import filter from './trackers/filter';
|
|
8
|
+
export default {
|
|
9
|
+
course,
|
|
10
|
+
credit,
|
|
11
|
+
engagement,
|
|
12
|
+
entitlements,
|
|
13
|
+
socialShare,
|
|
14
|
+
findCourses,
|
|
15
|
+
filter,
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tracking/index.js"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,UAAU,MAAM,uBAAuB,CAAC;AAC/C,OAAO,YAAY,MAAM,yBAAyB,CAAC;AACnD,OAAO,WAAW,MAAM,wBAAwB,CAAC;AACjD,OAAO,WAAW,MAAM,wBAAwB,CAAC;AACjD,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAEvC,eAAe;IACb,MAAM;IACN,MAAM;IACN,UAAU;IACV,YAAY;IACZ,WAAW;IACX,WAAW;IACX,MAAM;CACP,CAAC","sourcesContent":["import course from './trackers/course';\nimport credit from './trackers/credit';\nimport engagement from './trackers/engagement';\nimport entitlements from './trackers/entitlements';\nimport socialShare from './trackers/socialShare';\nimport findCourses from './trackers/findCourses';\nimport filter from './trackers/filter';\n\nexport default {\n course,\n credit,\n engagement,\n entitlements,\n socialShare,\n findCourses,\n filter,\n};\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export function courseEventTracker(eventName: string, courseId: string, options?: [object]): () => void;
|
|
2
|
+
export function courseLinkTracker(eventName: string): callback;
|
|
3
|
+
export function courseOptionsDropdownClicked(courseId: any): () => void;
|
|
4
|
+
export function courseImageClicked(...args: any[]): any;
|
|
5
|
+
export function courseTitleClicked(...args: any[]): any;
|
|
6
|
+
export function enterCourseClicked(...args: any[]): any;
|
|
7
|
+
declare namespace _default {
|
|
8
|
+
export { courseImageClicked };
|
|
9
|
+
export { courseOptionsDropdownClicked };
|
|
10
|
+
export { courseTitleClicked };
|
|
11
|
+
export { enterCourseClicked };
|
|
12
|
+
}
|
|
13
|
+
export default _default;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { createEventTracker, createLinkTracker } from '../../data/services/segment/utils';
|
|
2
|
+
import { categories, eventNames } from '../constants';
|
|
3
|
+
import * as module from './course';
|
|
4
|
+
// Utils/Helpers
|
|
5
|
+
/**
|
|
6
|
+
* Generate a segement event tracker for a given course event.
|
|
7
|
+
* @param {string} eventName - segment event name
|
|
8
|
+
* @param {string} courseId - course run identifier
|
|
9
|
+
* @param {[object]} options - optional event data
|
|
10
|
+
*/
|
|
11
|
+
export const courseEventTracker = (eventName, courseId, options = {}) => createEventTracker(eventName, Object.assign({ category: categories.dashboard, label: courseId }, options));
|
|
12
|
+
/**
|
|
13
|
+
* Generate a hook to allow components to provide a courseId and link href and provide
|
|
14
|
+
* a link tracker with defined event name and options, over a set of default optiosn.
|
|
15
|
+
* @param {string} eventName - event name for the click event
|
|
16
|
+
* @return {callback} - component hook returning a link tracking event callback
|
|
17
|
+
*/
|
|
18
|
+
export const courseLinkTracker = (eventName) => (courseId, href) => (createLinkTracker(module.courseEventTracker(eventName, courseId), href));
|
|
19
|
+
// Non-Link events
|
|
20
|
+
export const courseOptionsDropdownClicked = (courseId) => (module.courseEventTracker(eventNames.courseOptionsDropdownClicked, courseId));
|
|
21
|
+
// Link events (track and then change page location)
|
|
22
|
+
export const courseImageClicked = (...args) => (module.courseLinkTracker(eventNames.courseImageClicked)(...args));
|
|
23
|
+
export const courseTitleClicked = (...args) => (module.courseLinkTracker(eventNames.courseTitleClicked)(...args));
|
|
24
|
+
export const enterCourseClicked = (...args) => (module.courseLinkTracker(eventNames.enterCourseClicked)(...args));
|
|
25
|
+
export default {
|
|
26
|
+
courseImageClicked,
|
|
27
|
+
courseOptionsDropdownClicked,
|
|
28
|
+
courseTitleClicked,
|
|
29
|
+
enterCourseClicked,
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=course.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"course.js","sourceRoot":"","sources":["../../../src/tracking/trackers/course.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAC1F,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AAEnC,gBAAgB;AAChB;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,GAAG,EAAE,EAAE,EAAE,CAAC,kBAAkB,CACzF,SAAS,kBACP,QAAQ,EAAE,UAAU,CAAC,SAAS,EAAE,KAAK,EAAE,QAAQ,IAAK,OAAO,EAC9D,CAAC;AACF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,CAClE,iBAAiB,CAAC,MAAM,CAAC,kBAAkB,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,CACxE,CAAC;AAEF,kBAAkB;AAClB,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CACxD,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,4BAA4B,EAAE,QAAQ,CAAC,CAC7E,CAAC;AAEF,oDAAoD;AACpD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,CAC7C,MAAM,CAAC,iBAAiB,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AACpE,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,CAC7C,MAAM,CAAC,iBAAiB,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AACpE,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,CAC7C,MAAM,CAAC,iBAAiB,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AAEpE,eAAe;IACb,kBAAkB;IAClB,4BAA4B;IAC5B,kBAAkB;IAClB,kBAAkB;CACnB,CAAC","sourcesContent":["import { createEventTracker, createLinkTracker } from '../../data/services/segment/utils';\nimport { categories, eventNames } from '../constants';\nimport * as module from './course';\n\n// Utils/Helpers\n/**\n * Generate a segement event tracker for a given course event.\n * @param {string} eventName - segment event name\n * @param {string} courseId - course run identifier\n * @param {[object]} options - optional event data\n */\nexport const courseEventTracker = (eventName, courseId, options = {}) => createEventTracker(\n eventName,\n { category: categories.dashboard, label: courseId, ...options },\n);\n/**\n * Generate a hook to allow components to provide a courseId and link href and provide\n * a link tracker with defined event name and options, over a set of default optiosn.\n * @param {string} eventName - event name for the click event\n * @return {callback} - component hook returning a link tracking event callback\n */\nexport const courseLinkTracker = (eventName) => (courseId, href) => (\n createLinkTracker(module.courseEventTracker(eventName, courseId), href)\n);\n\n// Non-Link events\nexport const courseOptionsDropdownClicked = (courseId) => (\n module.courseEventTracker(eventNames.courseOptionsDropdownClicked, courseId)\n);\n\n// Link events (track and then change page location)\nexport const courseImageClicked = (...args) => (\n module.courseLinkTracker(eventNames.courseImageClicked)(...args));\nexport const courseTitleClicked = (...args) => (\n module.courseLinkTracker(eventNames.courseTitleClicked)(...args));\nexport const enterCourseClicked = (...args) => (\n module.courseLinkTracker(eventNames.enterCourseClicked)(...args));\n\nexport default {\n courseImageClicked,\n courseOptionsDropdownClicked,\n courseTitleClicked,\n enterCourseClicked,\n};\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { createEventTracker, createLinkTracker } from '../../data/services/segment/utils';
|
|
2
|
+
import { creditPurchaseUrl } from '../../data/services/lms/urls';
|
|
3
|
+
import { categories, eventNames } from '../constants';
|
|
4
|
+
/**
|
|
5
|
+
* Create event tracker for purchase credit event
|
|
6
|
+
* @param {string} fromCourseRun - course run identifier for leaving course
|
|
7
|
+
* @return {callback} - callback that triggers the event tracker
|
|
8
|
+
*/
|
|
9
|
+
export const purchase = (courseId) => createLinkTracker(createEventTracker(eventNames.purchaseCredit, {
|
|
10
|
+
label: courseId,
|
|
11
|
+
category: categories.credit,
|
|
12
|
+
}), creditPurchaseUrl(courseId));
|
|
13
|
+
export default {
|
|
14
|
+
purchase,
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=credit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credit.js","sourceRoot":"","sources":["../../../src/tracking/trackers/credit.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAC1F,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAEtD;;;;GAIG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,iBAAiB,CACrD,kBAAkB,CAAC,UAAU,CAAC,cAAc,EAAE;IAC5C,KAAK,EAAE,QAAQ;IACf,QAAQ,EAAE,UAAU,CAAC,MAAM;CAC5B,CAAC,EACF,iBAAiB,CAAC,QAAQ,CAAC,CAC5B,CAAC;AAEF,eAAe;IACb,QAAQ;CACT,CAAC","sourcesContent":["import { createEventTracker, createLinkTracker } from '../../data/services/segment/utils';\nimport { creditPurchaseUrl } from '../../data/services/lms/urls';\nimport { categories, eventNames } from '../constants';\n\n/**\n * Create event tracker for purchase credit event\n * @param {string} fromCourseRun - course run identifier for leaving course\n * @return {callback} - callback that triggers the event tracker\n */\nexport const purchase = (courseId) => createLinkTracker(\n createEventTracker(eventNames.purchaseCredit, {\n label: courseId,\n category: categories.credit,\n }),\n creditPurchaseUrl(courseId),\n);\n\nexport default {\n purchase,\n};\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export namespace engagementOptions {
|
|
2
|
+
let category: any;
|
|
3
|
+
let displayName: string;
|
|
4
|
+
}
|
|
5
|
+
export function unenrollReason(courseId: string, reason: string, isEntitlement: bool): callback;
|
|
6
|
+
declare namespace _default {
|
|
7
|
+
export { unenrollReason };
|
|
8
|
+
}
|
|
9
|
+
export default _default;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { createEventTracker } from '../../data/services/segment/utils';
|
|
2
|
+
import { categories, eventNames } from '../constants';
|
|
3
|
+
export const engagementOptions = {
|
|
4
|
+
category: categories.userEngagement,
|
|
5
|
+
displayName: 'v1',
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Creates callback which sends segment event for unenroll with reason event
|
|
9
|
+
* @param {string} courseId - course run identifier
|
|
10
|
+
* @param {string} reason - unenroll reason
|
|
11
|
+
* @param {bool} isEntitlement - is the course an entitlement course?
|
|
12
|
+
* @return {callback} - callback that will send the appropriate segment message.
|
|
13
|
+
*/
|
|
14
|
+
export const unenrollReason = (courseId, reason, isEntitlement) => createEventTracker(isEntitlement ? eventNames.entitlementUnenrollReason : eventNames.unenrollReason, Object.assign({ reason, course_id: courseId }, engagementOptions));
|
|
15
|
+
export default {
|
|
16
|
+
unenrollReason,
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=engagement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engagement.js","sourceRoot":"","sources":["../../../src/tracking/trackers/engagement.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAEtD,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,QAAQ,EAAE,UAAU,CAAC,cAAc;IACnC,WAAW,EAAE,IAAI;CAClB,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,CAAC,kBAAkB,CACnF,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC,CAAC,UAAU,CAAC,cAAc,kBAC9E,MAAM,EAAE,SAAS,EAAE,QAAQ,IAAK,iBAAiB,EACpD,CAAC;AAEF,eAAe;IACb,cAAc;CACf,CAAC","sourcesContent":["import { createEventTracker } from '../../data/services/segment/utils';\nimport { categories, eventNames } from '../constants';\n\nexport const engagementOptions = {\n category: categories.userEngagement,\n displayName: 'v1',\n};\n\n/**\n * Creates callback which sends segment event for unenroll with reason event\n * @param {string} courseId - course run identifier\n * @param {string} reason - unenroll reason\n * @param {bool} isEntitlement - is the course an entitlement course?\n * @return {callback} - callback that will send the appropriate segment message.\n */\nexport const unenrollReason = (courseId, reason, isEntitlement) => createEventTracker(\n isEntitlement ? eventNames.entitlementUnenrollReason : eventNames.unenrollReason,\n { reason, course_id: courseId, ...engagementOptions },\n);\n\nexport default {\n unenrollReason,\n};\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export function leaveSession(fromCourseRun: string): callback;
|
|
2
|
+
export function newSession(toCourseRun: string): callback;
|
|
3
|
+
export function switchSession(fromCourseRun: string, toCourseRun: string): callback;
|
|
4
|
+
declare namespace _default {
|
|
5
|
+
export { leaveSession };
|
|
6
|
+
export { newSession };
|
|
7
|
+
export { switchSession };
|
|
8
|
+
}
|
|
9
|
+
export default _default;
|