@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,16 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import PropTypes from 'prop-types';
|
|
4
|
+
import { Button } from '@openedx/paragon';
|
|
5
|
+
import useCardDetailsData from './hooks';
|
|
6
|
+
import './index.scss';
|
|
7
|
+
export const CourseCardDetails = ({ cardId }) => {
|
|
8
|
+
const { providerName, accessMessage, isEntitlement, isFulfilled, canChange, openSessionModal, courseNumber, changeOrLeaveSessionMessage, } = useCardDetailsData({ cardId });
|
|
9
|
+
return (_jsxs("span", { className: "small", "data-testid": "CourseCardDetails", children: [providerName, " \u2022 ", courseNumber, !(isEntitlement && !isFulfilled) && accessMessage && (` • ${accessMessage}`), isEntitlement && isFulfilled && canChange ? (_jsxs(_Fragment, { children: [' • ', _jsx(Button, { variant: "link", size: "inline", className: "m-0 p-0", onClick: openSessionModal, children: changeOrLeaveSessionMessage })] })) : null] }));
|
|
10
|
+
};
|
|
11
|
+
CourseCardDetails.propTypes = {
|
|
12
|
+
cardId: PropTypes.string.isRequired,
|
|
13
|
+
};
|
|
14
|
+
CourseCardDetails.defaultProps = {};
|
|
15
|
+
export default CourseCardDetails;
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/containers/CourseCard/components/CourseCardDetails/index.jsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,kBAAkB,MAAM,SAAS,CAAC;AACzC,OAAO,cAAc,CAAC;AAEtB,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;IAC9C,MAAM,EACJ,YAAY,EACZ,aAAa,EACb,aAAa,EACb,WAAW,EACX,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,2BAA2B,GAC5B,GAAG,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAEnC,OAAO,CACL,gBAAM,SAAS,EAAC,OAAO,iBAAa,mBAAmB,aACpD,YAAY,cAAK,YAAY,EAC7B,CAAC,CAAC,aAAa,IAAI,CAAC,WAAW,CAAC,IAAI,aAAa,IAAI,CACpD,MAAM,aAAa,EAAE,CACtB,EACA,aAAa,IAAI,WAAW,IAAI,SAAS,CAAC,CAAC,CAAC,CAC3C,8BACG,KAAK,EACN,KAAC,MAAM,IAAC,OAAO,EAAC,MAAM,EAAC,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,SAAS,EAAC,OAAO,EAAE,gBAAgB,YAC/E,2BAA2B,GACrB,IACR,CACJ,CAAC,CAAC,CAAC,IAAI,IACH,CACR,CAAC;AACJ,CAAC,CAAC;AAEF,iBAAiB,CAAC,SAAS,GAAG;IAC5B,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU;CACpC,CAAC;AAEF,iBAAiB,CAAC,YAAY,GAAG,EAAE,CAAC;AAEpC,eAAe,iBAAiB,CAAC","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { Button } from '@openedx/paragon';\n\nimport useCardDetailsData from './hooks';\nimport './index.scss';\n\nexport const CourseCardDetails = ({ cardId }) => {\n const {\n providerName,\n accessMessage,\n isEntitlement,\n isFulfilled,\n canChange,\n openSessionModal,\n courseNumber,\n changeOrLeaveSessionMessage,\n } = useCardDetailsData({ cardId });\n\n return (\n <span className=\"small\" data-testid=\"CourseCardDetails\">\n {providerName} • {courseNumber}\n {!(isEntitlement && !isFulfilled) && accessMessage && (\n ` • ${accessMessage}`\n )}\n {isEntitlement && isFulfilled && canChange ? (\n <>\n {' • '}\n <Button variant=\"link\" size=\"inline\" className=\"m-0 p-0\" onClick={openSessionModal}>\n {changeOrLeaveSessionMessage}\n </Button>\n </>\n ) : null}\n </span>\n );\n};\n\nCourseCardDetails.propTypes = {\n cardId: PropTypes.string.isRequired,\n};\n\nCourseCardDetails.defaultProps = {};\n\nexport default CourseCardDetails;\n"]}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
export default messages;
|
|
2
|
+
declare namespace messages {
|
|
3
|
+
namespace accessExpired {
|
|
4
|
+
let id: string;
|
|
5
|
+
let description: string;
|
|
6
|
+
let defaultMessage: string;
|
|
7
|
+
}
|
|
8
|
+
namespace accessExpires {
|
|
9
|
+
let id_1: string;
|
|
10
|
+
export { id_1 as id };
|
|
11
|
+
let description_1: string;
|
|
12
|
+
export { description_1 as description };
|
|
13
|
+
let defaultMessage_1: string;
|
|
14
|
+
export { defaultMessage_1 as defaultMessage };
|
|
15
|
+
}
|
|
16
|
+
namespace courseEnded {
|
|
17
|
+
let id_2: string;
|
|
18
|
+
export { id_2 as id };
|
|
19
|
+
let description_2: string;
|
|
20
|
+
export { description_2 as description };
|
|
21
|
+
let defaultMessage_2: string;
|
|
22
|
+
export { defaultMessage_2 as defaultMessage };
|
|
23
|
+
}
|
|
24
|
+
namespace courseEnds {
|
|
25
|
+
let id_3: string;
|
|
26
|
+
export { id_3 as id };
|
|
27
|
+
let description_3: string;
|
|
28
|
+
export { description_3 as description };
|
|
29
|
+
let defaultMessage_3: string;
|
|
30
|
+
export { defaultMessage_3 as defaultMessage };
|
|
31
|
+
}
|
|
32
|
+
namespace courseStarts {
|
|
33
|
+
let id_4: string;
|
|
34
|
+
export { id_4 as id };
|
|
35
|
+
let description_4: string;
|
|
36
|
+
export { description_4 as description };
|
|
37
|
+
let defaultMessage_4: string;
|
|
38
|
+
export { defaultMessage_4 as defaultMessage };
|
|
39
|
+
}
|
|
40
|
+
namespace unknownProviderName {
|
|
41
|
+
let id_5: string;
|
|
42
|
+
export { id_5 as id };
|
|
43
|
+
let description_5: string;
|
|
44
|
+
export { description_5 as description };
|
|
45
|
+
let defaultMessage_5: string;
|
|
46
|
+
export { defaultMessage_5 as defaultMessage };
|
|
47
|
+
}
|
|
48
|
+
namespace changeOrLeaveSessionButton {
|
|
49
|
+
let id_6: string;
|
|
50
|
+
export { id_6 as id };
|
|
51
|
+
let description_6: string;
|
|
52
|
+
export { description_6 as description };
|
|
53
|
+
let defaultMessage_6: string;
|
|
54
|
+
export { defaultMessage_6 as defaultMessage };
|
|
55
|
+
}
|
|
56
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { defineMessages } from '@openedx/frontend-base';
|
|
2
|
+
const messages = defineMessages({
|
|
3
|
+
accessExpired: {
|
|
4
|
+
id: 'learner-dash.courseCard.CourseCardDetails.accessExpired',
|
|
5
|
+
description: 'Course access expiration date message on course card for expired access.',
|
|
6
|
+
defaultMessage: 'Access expired {accessExpirationDate}',
|
|
7
|
+
},
|
|
8
|
+
accessExpires: {
|
|
9
|
+
id: 'learner-dash.courseCard.CourseCardDetails.accessExpires',
|
|
10
|
+
description: 'Course access expiration date message on course card.',
|
|
11
|
+
defaultMessage: 'Access expires {accessExpirationDate}',
|
|
12
|
+
},
|
|
13
|
+
courseEnded: {
|
|
14
|
+
id: 'learner-dash.courseCard.CourseCardDetails.courseEnded',
|
|
15
|
+
description: 'Course ended message on course card.',
|
|
16
|
+
defaultMessage: 'Course ended {endDate}',
|
|
17
|
+
},
|
|
18
|
+
courseEnds: {
|
|
19
|
+
id: 'learner-dash.courseCard.CourseCardDetails.courseEnds',
|
|
20
|
+
description: 'Course ending message on course card.',
|
|
21
|
+
defaultMessage: 'Course ends {endDate}',
|
|
22
|
+
},
|
|
23
|
+
courseStarts: {
|
|
24
|
+
id: 'learner-dash.courseCard.CourseCardDetails.courseStarts',
|
|
25
|
+
description: 'Course start date message on course card.',
|
|
26
|
+
defaultMessage: 'Course starts {startDate}',
|
|
27
|
+
},
|
|
28
|
+
unknownProviderName: {
|
|
29
|
+
id: 'learner-dash.courseCard.CourseCardDetails.unknownProviderName',
|
|
30
|
+
description: 'Provider name display when name is unknown',
|
|
31
|
+
defaultMessage: 'Unknown',
|
|
32
|
+
},
|
|
33
|
+
changeOrLeaveSessionButton: {
|
|
34
|
+
id: 'learner-dash.courseCard.CourseCardDetails.changeOrLeaveSessionButton',
|
|
35
|
+
description: 'Button for trigger change or leave session for entitlement course',
|
|
36
|
+
defaultMessage: 'Change or leave session',
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
export default messages;
|
|
40
|
+
//# sourceMappingURL=messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../../../src/containers/CourseCard/components/CourseCardDetails/messages.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,aAAa,EAAE;QACb,EAAE,EAAE,yDAAyD;QAC7D,WAAW,EAAE,0EAA0E;QACvF,cAAc,EAAE,uCAAuC;KACxD;IACD,aAAa,EAAE;QACb,EAAE,EAAE,yDAAyD;QAC7D,WAAW,EAAE,uDAAuD;QACpE,cAAc,EAAE,uCAAuC;KACxD;IACD,WAAW,EAAE;QACX,EAAE,EAAE,uDAAuD;QAC3D,WAAW,EAAE,sCAAsC;QACnD,cAAc,EAAE,wBAAwB;KACzC;IACD,UAAU,EAAE;QACV,EAAE,EAAE,sDAAsD;QAC1D,WAAW,EAAE,uCAAuC;QACpD,cAAc,EAAE,uBAAuB;KACxC;IACD,YAAY,EAAE;QACZ,EAAE,EAAE,wDAAwD;QAC5D,WAAW,EAAE,2CAA2C;QACxD,cAAc,EAAE,2BAA2B;KAC5C;IACD,mBAAmB,EAAE;QACnB,EAAE,EAAE,+DAA+D;QACnE,WAAW,EAAE,4CAA4C;QACzD,cAAc,EAAE,SAAS;KAC1B;IACD,0BAA0B,EAAE;QAC1B,EAAE,EAAE,sEAAsE;QAC1E,WAAW,EAAE,mEAAmE;QAChF,cAAc,EAAE,yBAAyB;KAC1C;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n accessExpired: {\n id: 'learner-dash.courseCard.CourseCardDetails.accessExpired',\n description: 'Course access expiration date message on course card for expired access.',\n defaultMessage: 'Access expired {accessExpirationDate}',\n },\n accessExpires: {\n id: 'learner-dash.courseCard.CourseCardDetails.accessExpires',\n description: 'Course access expiration date message on course card.',\n defaultMessage: 'Access expires {accessExpirationDate}',\n },\n courseEnded: {\n id: 'learner-dash.courseCard.CourseCardDetails.courseEnded',\n description: 'Course ended message on course card.',\n defaultMessage: 'Course ended {endDate}',\n },\n courseEnds: {\n id: 'learner-dash.courseCard.CourseCardDetails.courseEnds',\n description: 'Course ending message on course card.',\n defaultMessage: 'Course ends {endDate}',\n },\n courseStarts: {\n id: 'learner-dash.courseCard.CourseCardDetails.courseStarts',\n description: 'Course start date message on course card.',\n defaultMessage: 'Course starts {startDate}',\n },\n unknownProviderName: {\n id: 'learner-dash.courseCard.CourseCardDetails.unknownProviderName',\n description: 'Provider name display when name is unknown',\n defaultMessage: 'Unknown',\n },\n changeOrLeaveSessionButton: {\n id: 'learner-dash.courseCard.CourseCardDetails.changeOrLeaveSessionButton',\n description: 'Button for trigger change or leave session for entitlement course',\n defaultMessage: 'Change or leave session',\n },\n});\n\nexport default messages;\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export function CourseCardImage({ cardId, orientation }: {
|
|
2
|
+
cardId: any;
|
|
3
|
+
orientation: any;
|
|
4
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
5
|
+
export namespace CourseCardImage {
|
|
6
|
+
namespace propTypes {
|
|
7
|
+
let cardId: PropTypes.Validator<string>;
|
|
8
|
+
let orientation: PropTypes.Validator<string>;
|
|
9
|
+
}
|
|
10
|
+
let defaultProps: {};
|
|
11
|
+
}
|
|
12
|
+
export default CourseCardImage;
|
|
13
|
+
import PropTypes from 'prop-types';
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import PropTypes from 'prop-types';
|
|
4
|
+
import { useIntl } from '@openedx/frontend-base';
|
|
5
|
+
import { baseAppUrl } from '../../../data/services/lms/urls';
|
|
6
|
+
import { Badge } from '@openedx/paragon';
|
|
7
|
+
import track from '../../../tracking';
|
|
8
|
+
import { useCourseData, useCourseTrackingEvent } from '../../../hooks';
|
|
9
|
+
import verifiedRibbon from '../../../assets/verified-ribbon.png';
|
|
10
|
+
import useActionDisabledState from './hooks';
|
|
11
|
+
import messages from '../messages';
|
|
12
|
+
const { courseImageClicked } = track.course;
|
|
13
|
+
export const CourseCardImage = ({ cardId, orientation }) => {
|
|
14
|
+
var _a, _b;
|
|
15
|
+
const { formatMessage } = useIntl();
|
|
16
|
+
const courseData = useCourseData(cardId);
|
|
17
|
+
const { homeUrl } = (courseData === null || courseData === void 0 ? void 0 : courseData.courseRun) || {};
|
|
18
|
+
const { disableCourseTitle } = useActionDisabledState(cardId);
|
|
19
|
+
const handleImageClicked = useCourseTrackingEvent(courseImageClicked, cardId, homeUrl);
|
|
20
|
+
const wrapperClassName = `pgn__card-wrapper-image-cap d-inline-block overflow-visible ${orientation}`;
|
|
21
|
+
const image = (_jsxs(_Fragment, { children: [_jsx("img", {
|
|
22
|
+
// w-100 is necessary for images on Safari, otherwise stretches full height of the image
|
|
23
|
+
// https://stackoverflow.com/a/44250830
|
|
24
|
+
className: "pgn__card-image-cap w-100 show", src: ((_a = courseData === null || courseData === void 0 ? void 0 : courseData.course) === null || _a === void 0 ? void 0 : _a.bannerImgSrc) && baseAppUrl(courseData.course.bannerImgSrc), alt: formatMessage(messages.bannerAlt) }), ((_b = courseData === null || courseData === void 0 ? void 0 : courseData.enrollment) === null || _b === void 0 ? void 0 : _b.isVerified) && (_jsxs("span", { className: "course-card-verify-ribbon-container", title: formatMessage(messages.verifiedHoverDescription), children: [_jsx(Badge, { as: "div", variant: "success", className: "w-100", children: formatMessage(messages.verifiedBanner) }), _jsx("img", { src: verifiedRibbon, alt: formatMessage(messages.verifiedBannerRibbonAlt) })] }))] }));
|
|
25
|
+
return disableCourseTitle
|
|
26
|
+
? (_jsx("div", { className: wrapperClassName, children: image }))
|
|
27
|
+
: (_jsx("a", { className: wrapperClassName, href: homeUrl, onClick: handleImageClicked, tabIndex: "-1", children: image }));
|
|
28
|
+
};
|
|
29
|
+
CourseCardImage.propTypes = {
|
|
30
|
+
cardId: PropTypes.string.isRequired,
|
|
31
|
+
orientation: PropTypes.string.isRequired,
|
|
32
|
+
};
|
|
33
|
+
CourseCardImage.defaultProps = {};
|
|
34
|
+
export default CourseCardImage;
|
|
35
|
+
//# sourceMappingURL=CourseCardImage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CourseCardImage.js","sourceRoot":"","sources":["../../../../src/containers/CourseCard/components/CourseCardImage.jsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAEzD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,OAAO,KAAK,MAAM,eAAe,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,cAAc,MAAM,iCAAiC,CAAC;AAC7D,OAAO,sBAAsB,MAAM,SAAS,CAAC;AAE7C,OAAO,QAAQ,MAAM,aAAa,CAAC;AAEnC,MAAM,EAAE,kBAAkB,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC;AAE5C,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE;;IACzD,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,SAAS,KAAI,EAAE,CAAC;IAChD,MAAM,EAAE,kBAAkB,EAAE,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC9D,MAAM,kBAAkB,GAAG,sBAAsB,CAAC,kBAAkB,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACvF,MAAM,gBAAgB,GAAG,+DAA+D,WAAW,EAAE,CAAC;IACtG,MAAM,KAAK,GAAG,CACZ,8BACE;gBACE,wFAAwF;gBACxF,uCAAuC;gBACvC,SAAS,EAAC,gCAAgC,EAC1C,GAAG,EAAE,CAAA,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,0CAAE,YAAY,KAAI,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,EACnF,GAAG,EAAE,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,GACtC,EAEA,CAAA,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,UAAU,0CAAE,UAAU,KAAI,CACpC,gBACE,SAAS,EAAC,qCAAqC,EAC/C,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,wBAAwB,CAAC,aAEvD,KAAC,KAAK,IAAC,EAAE,EAAC,KAAK,EAAC,OAAO,EAAC,SAAS,EAAC,SAAS,EAAC,OAAO,YAChD,aAAa,CAAC,QAAQ,CAAC,cAAc,CAAC,GACjC,EACR,cAAK,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,aAAa,CAAC,QAAQ,CAAC,uBAAuB,CAAC,GAAI,IAC7E,CACR,IAEF,CACJ,CAAC;IACF,OAAO,kBAAkB;QACvB,CAAC,CAAC,CAAC,cAAK,SAAS,EAAE,gBAAgB,YAAG,KAAK,GAAO,CAAC;QACnD,CAAC,CAAC,CACA,YACE,SAAS,EAAE,gBAAgB,EAC3B,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,kBAAkB,EAC3B,QAAQ,EAAC,IAAI,YAEZ,KAAK,GACJ,CACL,CAAC;AACN,CAAC,CAAC;AACF,eAAe,CAAC,SAAS,GAAG;IAC1B,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU;IACnC,WAAW,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU;CACzC,CAAC;AAEF,eAAe,CAAC,YAAY,GAAG,EAAE,CAAC;AAElC,eAAe,eAAe,CAAC","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useIntl } from '@openedx/frontend-base';\nimport { baseAppUrl } from '@src/data/services/lms/urls';\n\nimport { Badge } from '@openedx/paragon';\n\nimport track from '@src/tracking';\nimport { useCourseData, useCourseTrackingEvent } from '@src/hooks';\nimport verifiedRibbon from '@src/assets/verified-ribbon.png';\nimport useActionDisabledState from './hooks';\n\nimport messages from '../messages';\n\nconst { courseImageClicked } = track.course;\n\nexport const CourseCardImage = ({ cardId, orientation }) => {\n const { formatMessage } = useIntl();\n const courseData = useCourseData(cardId);\n const { homeUrl } = courseData?.courseRun || {};\n const { disableCourseTitle } = useActionDisabledState(cardId);\n const handleImageClicked = useCourseTrackingEvent(courseImageClicked, cardId, homeUrl);\n const wrapperClassName = `pgn__card-wrapper-image-cap d-inline-block overflow-visible ${orientation}`;\n const image = (\n <>\n <img\n // w-100 is necessary for images on Safari, otherwise stretches full height of the image\n // https://stackoverflow.com/a/44250830\n className=\"pgn__card-image-cap w-100 show\"\n src={courseData?.course?.bannerImgSrc && baseAppUrl(courseData.course.bannerImgSrc)}\n alt={formatMessage(messages.bannerAlt)}\n />\n {\n courseData?.enrollment?.isVerified && (\n <span\n className=\"course-card-verify-ribbon-container\"\n title={formatMessage(messages.verifiedHoverDescription)}\n >\n <Badge as=\"div\" variant=\"success\" className=\"w-100\">\n {formatMessage(messages.verifiedBanner)}\n </Badge>\n <img src={verifiedRibbon} alt={formatMessage(messages.verifiedBannerRibbonAlt)} />\n </span>\n )\n }\n </>\n );\n return disableCourseTitle\n ? (<div className={wrapperClassName}>{image}</div>)\n : (\n <a\n className={wrapperClassName}\n href={homeUrl}\n onClick={handleImageClicked}\n tabIndex=\"-1\"\n >\n {image}\n </a>\n );\n};\nCourseCardImage.propTypes = {\n cardId: PropTypes.string.isRequired,\n orientation: PropTypes.string.isRequired,\n};\n\nCourseCardImage.defaultProps = {};\n\nexport default CourseCardImage;\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export namespace testIds {
|
|
2
|
+
let emailSettingsModalToggle: string;
|
|
3
|
+
}
|
|
4
|
+
export function SocialShareMenu({ cardId, emailSettings }: {
|
|
5
|
+
cardId: any;
|
|
6
|
+
emailSettings: any;
|
|
7
|
+
}): import("react/jsx-runtime").JSX.Element | null;
|
|
8
|
+
export namespace SocialShareMenu {
|
|
9
|
+
namespace propTypes {
|
|
10
|
+
let cardId: PropTypes.Validator<string>;
|
|
11
|
+
let emailSettings: PropTypes.Validator<NonNullable<PropTypes.InferProps<{
|
|
12
|
+
show: PropTypes.Requireable<(...args: any[]) => any>;
|
|
13
|
+
}>>>;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export default SocialShareMenu;
|
|
17
|
+
import PropTypes from 'prop-types';
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import * as ReactShare from 'react-share';
|
|
4
|
+
import { EXECUTIVE_EDUCATION_COURSE_MODES } from '../../../../data/constants/course';
|
|
5
|
+
import { useIntl } from '@openedx/frontend-base';
|
|
6
|
+
import { Dropdown } from '@openedx/paragon';
|
|
7
|
+
import track from '../../../../tracking';
|
|
8
|
+
import { useCourseTrackingEvent, useCourseData, useIsMasquerading } from '../../../../hooks';
|
|
9
|
+
import { useCardSocialSettingsData } from './hooks';
|
|
10
|
+
import messages from './messages';
|
|
11
|
+
export const testIds = {
|
|
12
|
+
emailSettingsModalToggle: 'emailSettingsModalToggle',
|
|
13
|
+
};
|
|
14
|
+
export const SocialShareMenu = ({ cardId, emailSettings }) => {
|
|
15
|
+
var _a, _b, _c;
|
|
16
|
+
const { formatMessage } = useIntl();
|
|
17
|
+
const courseData = useCourseData(cardId);
|
|
18
|
+
const courseName = (_a = courseData === null || courseData === void 0 ? void 0 : courseData.course) === null || _a === void 0 ? void 0 : _a.courseName;
|
|
19
|
+
const isExecEd2UCourse = EXECUTIVE_EDUCATION_COURSE_MODES.includes(courseData.enrollment.mode);
|
|
20
|
+
const isEmailEnabled = (_c = (_b = courseData === null || courseData === void 0 ? void 0 : courseData.enrollment) === null || _b === void 0 ? void 0 : _b.isEmailEnabled) !== null && _c !== void 0 ? _c : false;
|
|
21
|
+
const { twitter, facebook } = useCardSocialSettingsData(cardId);
|
|
22
|
+
const isMasquerading = useIsMasquerading();
|
|
23
|
+
const handleTwitterShare = useCourseTrackingEvent(track.socialShare, cardId, 'twitter');
|
|
24
|
+
const handleFacebookShare = useCourseTrackingEvent(track.socialShare, cardId, 'facebook');
|
|
25
|
+
if (isExecEd2UCourse) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
return (_jsxs(_Fragment, { children: [isEmailEnabled && (_jsx(Dropdown.Item, { disabled: isMasquerading, onClick: emailSettings.show, "data-testid": testIds.emailSettingsModalToggle, children: formatMessage(messages.emailSettings) })), facebook.isEnabled && (_jsx(ReactShare.FacebookShareButton, { url: facebook.shareUrl, onClick: handleFacebookShare, title: formatMessage(messages.shareQuote, {
|
|
29
|
+
courseName,
|
|
30
|
+
socialBrand: facebook.socialBrand,
|
|
31
|
+
}), resetButtonStyle: false, className: "pgn__dropdown-item dropdown-item", "aria-label": "facebook", children: formatMessage(messages.shareToFacebook) })), twitter.isEnabled && (_jsx(ReactShare.TwitterShareButton, { url: twitter.shareUrl, onClick: handleTwitterShare, title: formatMessage(messages.shareQuote, {
|
|
32
|
+
courseName,
|
|
33
|
+
socialBrand: twitter.socialBrand,
|
|
34
|
+
}), resetButtonStyle: false, className: "pgn__dropdown-item dropdown-item", "aria-label": "twitter", children: formatMessage(messages.shareToTwitter) }))] }));
|
|
35
|
+
};
|
|
36
|
+
SocialShareMenu.propTypes = {
|
|
37
|
+
cardId: PropTypes.string.isRequired,
|
|
38
|
+
emailSettings: PropTypes.shape({
|
|
39
|
+
show: PropTypes.func,
|
|
40
|
+
}).isRequired,
|
|
41
|
+
};
|
|
42
|
+
export default SocialShareMenu;
|
|
43
|
+
//# sourceMappingURL=SocialShareMenu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SocialShareMenu.js","sourceRoot":"","sources":["../../../../../src/containers/CourseCard/components/CourseCardMenu/SocialShareMenu.jsx"],"names":[],"mappings":";AAAA,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,KAAK,UAAU,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,gCAAgC,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,KAAK,MAAM,eAAe,CAAC;AAClC,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACtF,OAAO,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,wBAAwB,EAAE,0BAA0B;CACrD,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,EAAE;;IAC3D,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,UAAU,GAAG,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,0CAAE,UAAU,CAAC;IAClD,MAAM,gBAAgB,GAAG,gCAAgC,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/F,MAAM,cAAc,GAAG,MAAA,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,UAAU,0CAAE,cAAc,mCAAI,KAAK,CAAC;IACvE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAChE,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;IAE3C,MAAM,kBAAkB,GAAG,sBAAsB,CAAC,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IACxF,MAAM,mBAAmB,GAAG,sBAAsB,CAAC,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IAE1F,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,8BACG,cAAc,IAAI,CACjB,KAAC,QAAQ,CAAC,IAAI,IACZ,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,aAAa,CAAC,IAAI,iBACd,OAAO,CAAC,wBAAwB,YAE5C,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,GACxB,CACjB,EACA,QAAQ,CAAC,SAAS,IAAI,CACrB,KAAC,UAAU,CAAC,mBAAmB,IAC7B,GAAG,EAAE,QAAQ,CAAC,QAAQ,EACtB,OAAO,EAAE,mBAAmB,EAC5B,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,UAAU,EAAE;oBACxC,UAAU;oBACV,WAAW,EAAE,QAAQ,CAAC,WAAW;iBAClC,CAAC,EACF,gBAAgB,EAAE,KAAK,EACvB,SAAS,EAAC,kCAAkC,gBACjC,UAAU,YAEpB,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAC,GACT,CAClC,EACA,OAAO,CAAC,SAAS,IAAI,CACpB,KAAC,UAAU,CAAC,kBAAkB,IAC5B,GAAG,EAAE,OAAO,CAAC,QAAQ,EACrB,OAAO,EAAE,kBAAkB,EAC3B,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,UAAU,EAAE;oBACxC,UAAU;oBACV,WAAW,EAAE,OAAO,CAAC,WAAW;iBACjC,CAAC,EACF,gBAAgB,EAAE,KAAK,EACvB,SAAS,EAAC,kCAAkC,gBACjC,SAAS,YAEnB,aAAa,CAAC,QAAQ,CAAC,cAAc,CAAC,GACT,CACjC,IACA,CACJ,CAAC;AACJ,CAAC,CAAC;AACF,eAAe,CAAC,SAAS,GAAG;IAC1B,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU;IACnC,aAAa,EAAE,SAAS,CAAC,KAAK,CAAC;QAC7B,IAAI,EAAE,SAAS,CAAC,IAAI;KACrB,CAAC,CAAC,UAAU;CACd,CAAC;AAEF,eAAe,eAAe,CAAC","sourcesContent":["import PropTypes from 'prop-types';\nimport * as ReactShare from 'react-share';\nimport { EXECUTIVE_EDUCATION_COURSE_MODES } from '@src/data/constants/course';\nimport { useIntl } from '@openedx/frontend-base';\nimport { Dropdown } from '@openedx/paragon';\n\nimport track from '@src/tracking';\nimport { useCourseTrackingEvent, useCourseData, useIsMasquerading } from '@src/hooks';\nimport { useCardSocialSettingsData } from './hooks';\nimport messages from './messages';\n\nexport const testIds = {\n emailSettingsModalToggle: 'emailSettingsModalToggle',\n};\n\nexport const SocialShareMenu = ({ cardId, emailSettings }) => {\n const { formatMessage } = useIntl();\n const courseData = useCourseData(cardId);\n const courseName = courseData?.course?.courseName;\n const isExecEd2UCourse = EXECUTIVE_EDUCATION_COURSE_MODES.includes(courseData.enrollment.mode);\n const isEmailEnabled = courseData?.enrollment?.isEmailEnabled ?? false;\n const { twitter, facebook } = useCardSocialSettingsData(cardId);\n const isMasquerading = useIsMasquerading();\n\n const handleTwitterShare = useCourseTrackingEvent(track.socialShare, cardId, 'twitter');\n const handleFacebookShare = useCourseTrackingEvent(track.socialShare, cardId, 'facebook');\n\n if (isExecEd2UCourse) {\n return null;\n }\n\n return (\n <>\n {isEmailEnabled && (\n <Dropdown.Item\n disabled={isMasquerading}\n onClick={emailSettings.show}\n data-testid={testIds.emailSettingsModalToggle}\n >\n {formatMessage(messages.emailSettings)}\n </Dropdown.Item>\n )}\n {facebook.isEnabled && (\n <ReactShare.FacebookShareButton\n url={facebook.shareUrl}\n onClick={handleFacebookShare}\n title={formatMessage(messages.shareQuote, {\n courseName,\n socialBrand: facebook.socialBrand,\n })}\n resetButtonStyle={false}\n className=\"pgn__dropdown-item dropdown-item\"\n aria-label=\"facebook\"\n >\n {formatMessage(messages.shareToFacebook)}\n </ReactShare.FacebookShareButton>\n )}\n {twitter.isEnabled && (\n <ReactShare.TwitterShareButton\n url={twitter.shareUrl}\n onClick={handleTwitterShare}\n title={formatMessage(messages.shareQuote, {\n courseName,\n socialBrand: twitter.socialBrand,\n })}\n resetButtonStyle={false}\n className=\"pgn__dropdown-item dropdown-item\"\n aria-label=\"twitter\"\n >\n {formatMessage(messages.shareToTwitter)}\n </ReactShare.TwitterShareButton>\n )}\n </>\n );\n};\nSocialShareMenu.propTypes = {\n cardId: PropTypes.string.isRequired,\n emailSettings: PropTypes.shape({\n show: PropTypes.func,\n }).isRequired,\n};\n\nexport default SocialShareMenu;\n"]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export const state: any;
|
|
2
|
+
export function useUnenrollData(): {
|
|
3
|
+
show: () => any;
|
|
4
|
+
hide: () => any;
|
|
5
|
+
isVisible: any;
|
|
6
|
+
};
|
|
7
|
+
export function useEmailSettings(): {
|
|
8
|
+
show: () => any;
|
|
9
|
+
hide: () => any;
|
|
10
|
+
isVisible: any;
|
|
11
|
+
};
|
|
12
|
+
export function useHandleToggleDropdown(cardId: any): (isOpen: any) => void;
|
|
13
|
+
export function useCardSocialSettingsData(cardId: any): {
|
|
14
|
+
facebook: {
|
|
15
|
+
isEnabled: any;
|
|
16
|
+
shareUrl: string;
|
|
17
|
+
};
|
|
18
|
+
twitter: {
|
|
19
|
+
isEnabled: any;
|
|
20
|
+
shareUrl: string;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
export function useOptionVisibility(cardId: any): {
|
|
24
|
+
shouldShowUnenrollItem: any;
|
|
25
|
+
shouldShowDropdown: any;
|
|
26
|
+
};
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import track from '../../../../tracking';
|
|
2
|
+
import { useCourseData, useCourseTrackingEvent } from '../../../../hooks';
|
|
3
|
+
import { useState } from 'react';
|
|
4
|
+
import { StrictDict } from '../../../../utils';
|
|
5
|
+
import { useInitializeLearnerHome } from '../../../../data/hooks';
|
|
6
|
+
export const state = StrictDict({
|
|
7
|
+
isUnenrollConfirmVisible: (val) => useState(val), // eslint-disable-line
|
|
8
|
+
isEmailSettingsVisible: (val) => useState(val), // eslint-disable-line
|
|
9
|
+
});
|
|
10
|
+
export const useUnenrollData = () => {
|
|
11
|
+
const [isVisible, setIsVisible] = state.isUnenrollConfirmVisible(false);
|
|
12
|
+
return {
|
|
13
|
+
show: () => setIsVisible(true),
|
|
14
|
+
hide: () => setIsVisible(false),
|
|
15
|
+
isVisible,
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
export const useEmailSettings = () => {
|
|
19
|
+
const [isVisible, setIsVisible] = state.isEmailSettingsVisible(false);
|
|
20
|
+
return {
|
|
21
|
+
show: () => setIsVisible(true),
|
|
22
|
+
hide: () => setIsVisible(false),
|
|
23
|
+
isVisible,
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
export const useHandleToggleDropdown = (cardId) => {
|
|
27
|
+
const trackCourseEvent = useCourseTrackingEvent(track.course.courseOptionsDropdownClicked, cardId);
|
|
28
|
+
return (isOpen) => {
|
|
29
|
+
if (isOpen) {
|
|
30
|
+
trackCourseEvent();
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
export const useCardSocialSettingsData = (cardId) => {
|
|
35
|
+
const { data: learnerHomeData } = useInitializeLearnerHome();
|
|
36
|
+
const courseData = useCourseData(cardId);
|
|
37
|
+
const socialShareSettings = learnerHomeData === null || learnerHomeData === void 0 ? void 0 : learnerHomeData.socialShareSettings;
|
|
38
|
+
const { socialShareUrl } = (courseData === null || courseData === void 0 ? void 0 : courseData.course) || {};
|
|
39
|
+
const defaultSettings = { isEnabled: false, shareUrl: '' };
|
|
40
|
+
if (!socialShareSettings) {
|
|
41
|
+
return { facebook: defaultSettings, twitter: defaultSettings };
|
|
42
|
+
}
|
|
43
|
+
const { facebook, twitter } = socialShareSettings;
|
|
44
|
+
const loadSettings = (target) => ({
|
|
45
|
+
isEnabled: target.isEnabled,
|
|
46
|
+
shareUrl: `${socialShareUrl}?${target.utmParams}`,
|
|
47
|
+
});
|
|
48
|
+
return { facebook: loadSettings(facebook), twitter: loadSettings(twitter) };
|
|
49
|
+
};
|
|
50
|
+
export const useOptionVisibility = (cardId) => {
|
|
51
|
+
var _a, _b, _c, _d, _e, _f;
|
|
52
|
+
const courseData = useCourseData(cardId);
|
|
53
|
+
const isEmailEnabled = (_b = (_a = courseData === null || courseData === void 0 ? void 0 : courseData.enrollment) === null || _a === void 0 ? void 0 : _a.isEmailEnabled) !== null && _b !== void 0 ? _b : false;
|
|
54
|
+
const isEnrolled = (_d = (_c = courseData === null || courseData === void 0 ? void 0 : courseData.enrollment) === null || _c === void 0 ? void 0 : _c.isEnrolled) !== null && _d !== void 0 ? _d : false;
|
|
55
|
+
const { twitter, facebook } = useCardSocialSettingsData(cardId);
|
|
56
|
+
const isEarned = (_f = (_e = courseData === null || courseData === void 0 ? void 0 : courseData.certificate) === null || _e === void 0 ? void 0 : _e.isEarned) !== null && _f !== void 0 ? _f : false;
|
|
57
|
+
const shouldShowUnenrollItem = isEnrolled && !isEarned;
|
|
58
|
+
const shouldShowDropdown = (shouldShowUnenrollItem
|
|
59
|
+
|| isEmailEnabled
|
|
60
|
+
|| facebook.isEnabled
|
|
61
|
+
|| twitter.isEnabled);
|
|
62
|
+
return {
|
|
63
|
+
shouldShowUnenrollItem,
|
|
64
|
+
shouldShowDropdown,
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../../../src/containers/CourseCard/components/CourseCardMenu/hooks.js"],"names":[],"mappings":"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","sourcesContent":["import track from '@src/tracking';\nimport { useCourseData, useCourseTrackingEvent } from '@src/hooks';\nimport { useState } from 'react';\nimport { StrictDict } from '@src/utils';\nimport { useInitializeLearnerHome } from '@src/data/hooks';\n\nexport const state = StrictDict({\n isUnenrollConfirmVisible: (val) => useState(val), // eslint-disable-line\n isEmailSettingsVisible: (val) => useState(val), // eslint-disable-line\n});\n\nexport const useUnenrollData = () => {\n const [isVisible, setIsVisible] = state.isUnenrollConfirmVisible(false);\n return {\n show: () => setIsVisible(true),\n hide: () => setIsVisible(false),\n isVisible,\n };\n};\n\nexport const useEmailSettings = () => {\n const [isVisible, setIsVisible] = state.isEmailSettingsVisible(false);\n return {\n show: () => setIsVisible(true),\n hide: () => setIsVisible(false),\n isVisible,\n };\n};\n\nexport const useHandleToggleDropdown = (cardId) => {\n const trackCourseEvent = useCourseTrackingEvent(\n track.course.courseOptionsDropdownClicked,\n cardId,\n );\n return (isOpen) => {\n if (isOpen) {\n trackCourseEvent();\n }\n };\n};\n\nexport const useCardSocialSettingsData = (cardId) => {\n const { data: learnerHomeData } = useInitializeLearnerHome();\n const courseData = useCourseData(cardId);\n const socialShareSettings = learnerHomeData?.socialShareSettings;\n const { socialShareUrl } = courseData?.course || {};\n const defaultSettings = { isEnabled: false, shareUrl: '' };\n\n if (!socialShareSettings) {\n return { facebook: defaultSettings, twitter: defaultSettings };\n }\n const { facebook, twitter } = socialShareSettings;\n const loadSettings = (target) => ({\n isEnabled: target.isEnabled,\n shareUrl: `${socialShareUrl}?${target.utmParams}`,\n });\n return { facebook: loadSettings(facebook), twitter: loadSettings(twitter) };\n};\n\nexport const useOptionVisibility = (cardId) => {\n const courseData = useCourseData(cardId);\n const isEmailEnabled = courseData?.enrollment?.isEmailEnabled ?? false;\n const isEnrolled = courseData?.enrollment?.isEnrolled ?? false;\n const { twitter, facebook } = useCardSocialSettingsData(cardId);\n const isEarned = courseData?.certificate?.isEarned ?? false;\n\n const shouldShowUnenrollItem = isEnrolled && !isEarned;\n const shouldShowDropdown = (\n shouldShowUnenrollItem\n || isEmailEnabled\n || facebook.isEnabled\n || twitter.isEnabled\n );\n\n return {\n shouldShowUnenrollItem,\n shouldShowDropdown,\n };\n};\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export namespace testIds {
|
|
2
|
+
let unenrollModalToggle: string;
|
|
3
|
+
}
|
|
4
|
+
export function CourseCardMenu({ cardId }: {
|
|
5
|
+
cardId: any;
|
|
6
|
+
}): import("react/jsx-runtime").JSX.Element | null;
|
|
7
|
+
export namespace CourseCardMenu {
|
|
8
|
+
namespace propTypes {
|
|
9
|
+
let cardId: PropTypes.Validator<string>;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export default CourseCardMenu;
|
|
13
|
+
import PropTypes from 'prop-types';
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import { useIntl } from '@openedx/frontend-base';
|
|
4
|
+
import { Dropdown, Icon, IconButton } from '@openedx/paragon';
|
|
5
|
+
import { MoreVert } from '@openedx/paragon/icons';
|
|
6
|
+
import EmailSettingsModal from '../../../../containers/EmailSettingsModal';
|
|
7
|
+
import UnenrollConfirmModal from '../../../../containers/UnenrollConfirmModal';
|
|
8
|
+
import { useCourseData, useIsMasquerading } from '../../../../hooks';
|
|
9
|
+
import SocialShareMenu from './SocialShareMenu';
|
|
10
|
+
import { useEmailSettings, useUnenrollData, useHandleToggleDropdown, useOptionVisibility, } from './hooks';
|
|
11
|
+
import messages from './messages';
|
|
12
|
+
export const testIds = {
|
|
13
|
+
unenrollModalToggle: 'unenrollModalToggle',
|
|
14
|
+
};
|
|
15
|
+
export const CourseCardMenu = ({ cardId }) => {
|
|
16
|
+
var _a, _b;
|
|
17
|
+
const { formatMessage } = useIntl();
|
|
18
|
+
const courseData = useCourseData(cardId);
|
|
19
|
+
const isEmailEnabled = (_b = (_a = courseData === null || courseData === void 0 ? void 0 : courseData.enrollment) === null || _a === void 0 ? void 0 : _a.isEmailEnabled) !== null && _b !== void 0 ? _b : false;
|
|
20
|
+
const emailSettings = useEmailSettings();
|
|
21
|
+
const unenrollModal = useUnenrollData();
|
|
22
|
+
const handleToggleDropdown = useHandleToggleDropdown(cardId);
|
|
23
|
+
const { shouldShowUnenrollItem, shouldShowDropdown } = useOptionVisibility(cardId);
|
|
24
|
+
const isMasquerading = useIsMasquerading();
|
|
25
|
+
if (!shouldShowDropdown) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
return (_jsxs(_Fragment, { children: [_jsxs(Dropdown, { onToggle: handleToggleDropdown, children: [_jsx(Dropdown.Toggle, { id: `course-actions-dropdown-${cardId}`, as: IconButton, src: MoreVert, iconAs: Icon, variant: "primary", alt: formatMessage(messages.dropdownAlt) }), _jsxs(Dropdown.Menu, { children: [shouldShowUnenrollItem && (_jsx(Dropdown.Item, { disabled: isMasquerading, onClick: unenrollModal.show, "data-testid": testIds.unenrollModalToggle, children: formatMessage(messages.unenroll) })), _jsx(SocialShareMenu, { cardId: cardId, emailSettings: emailSettings })] })] }), _jsx(UnenrollConfirmModal, { show: unenrollModal.isVisible, closeModal: unenrollModal.hide, cardId: cardId }), isEmailEnabled && (_jsx(EmailSettingsModal, { show: emailSettings.isVisible, closeModal: emailSettings.hide, cardId: cardId }))] }));
|
|
29
|
+
};
|
|
30
|
+
CourseCardMenu.propTypes = {
|
|
31
|
+
cardId: PropTypes.string.isRequired,
|
|
32
|
+
};
|
|
33
|
+
export default CourseCardMenu;
|
|
34
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/containers/CourseCard/components/CourseCardMenu/index.jsx"],"names":[],"mappings":";AAAA,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD,OAAO,kBAAkB,MAAM,oCAAoC,CAAC;AACpE,OAAO,oBAAoB,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,SAAS,CAAC;AAEjB,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,mBAAmB,EAAE,qBAAqB;CAC3C,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;;IAC3C,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAEzC,MAAM,cAAc,GAAG,MAAA,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,UAAU,0CAAE,cAAc,mCAAI,KAAK,CAAC;IAEvE,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;IACzC,MAAM,aAAa,GAAG,eAAe,EAAE,CAAC;IACxC,MAAM,oBAAoB,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAC7D,MAAM,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACnF,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;IAE3C,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,8BACE,MAAC,QAAQ,IAAC,QAAQ,EAAE,oBAAoB,aACtC,KAAC,QAAQ,CAAC,MAAM,IACd,EAAE,EAAE,2BAA2B,MAAM,EAAE,EACvC,EAAE,EAAE,UAAU,EACd,GAAG,EAAE,QAAQ,EACb,MAAM,EAAE,IAAI,EACZ,OAAO,EAAC,SAAS,EACjB,GAAG,EAAE,aAAa,CAAC,QAAQ,CAAC,WAAW,CAAC,GACxC,EACF,MAAC,QAAQ,CAAC,IAAI,eACX,sBAAsB,IAAI,CACzB,KAAC,QAAQ,CAAC,IAAI,IACZ,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,aAAa,CAAC,IAAI,iBACd,OAAO,CAAC,mBAAmB,YAEvC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,GACnB,CACjB,EACD,KAAC,eAAe,IAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,GAAI,IACnD,IACP,EACX,KAAC,oBAAoB,IACnB,IAAI,EAAE,aAAa,CAAC,SAAS,EAC7B,UAAU,EAAE,aAAa,CAAC,IAAI,EAC9B,MAAM,EAAE,MAAM,GACd,EACD,cAAc,IAAI,CACjB,KAAC,kBAAkB,IACjB,IAAI,EAAE,aAAa,CAAC,SAAS,EAC7B,UAAU,EAAE,aAAa,CAAC,IAAI,EAC9B,MAAM,EAAE,MAAM,GACd,CACH,IACA,CACJ,CAAC;AACJ,CAAC,CAAC;AACF,cAAc,CAAC,SAAS,GAAG;IACzB,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU;CACpC,CAAC;AAEF,eAAe,cAAc,CAAC","sourcesContent":["import PropTypes from 'prop-types';\n\nimport { useIntl } from '@openedx/frontend-base';\nimport { Dropdown, Icon, IconButton } from '@openedx/paragon';\nimport { MoreVert } from '@openedx/paragon/icons';\n\nimport EmailSettingsModal from '@src/containers/EmailSettingsModal';\nimport UnenrollConfirmModal from '@src/containers/UnenrollConfirmModal';\nimport { useCourseData, useIsMasquerading } from '@src/hooks';\nimport SocialShareMenu from './SocialShareMenu';\nimport {\n useEmailSettings,\n useUnenrollData,\n useHandleToggleDropdown,\n useOptionVisibility,\n} from './hooks';\n\nimport messages from './messages';\n\nexport const testIds = {\n unenrollModalToggle: 'unenrollModalToggle',\n};\n\nexport const CourseCardMenu = ({ cardId }) => {\n const { formatMessage } = useIntl();\n const courseData = useCourseData(cardId);\n\n const isEmailEnabled = courseData?.enrollment?.isEmailEnabled ?? false;\n\n const emailSettings = useEmailSettings();\n const unenrollModal = useUnenrollData();\n const handleToggleDropdown = useHandleToggleDropdown(cardId);\n const { shouldShowUnenrollItem, shouldShowDropdown } = useOptionVisibility(cardId);\n const isMasquerading = useIsMasquerading();\n\n if (!shouldShowDropdown) {\n return null;\n }\n\n return (\n <>\n <Dropdown onToggle={handleToggleDropdown}>\n <Dropdown.Toggle\n id={`course-actions-dropdown-${cardId}`}\n as={IconButton}\n src={MoreVert}\n iconAs={Icon}\n variant=\"primary\"\n alt={formatMessage(messages.dropdownAlt)}\n />\n <Dropdown.Menu>\n {shouldShowUnenrollItem && (\n <Dropdown.Item\n disabled={isMasquerading}\n onClick={unenrollModal.show}\n data-testid={testIds.unenrollModalToggle}\n >\n {formatMessage(messages.unenroll)}\n </Dropdown.Item>\n )}\n <SocialShareMenu cardId={cardId} emailSettings={emailSettings} />\n </Dropdown.Menu>\n </Dropdown>\n <UnenrollConfirmModal\n show={unenrollModal.isVisible}\n closeModal={unenrollModal.hide}\n cardId={cardId}\n />\n {isEmailEnabled && (\n <EmailSettingsModal\n show={emailSettings.isVisible}\n closeModal={emailSettings.hide}\n cardId={cardId}\n />\n )}\n </>\n );\n};\nCourseCardMenu.propTypes = {\n cardId: PropTypes.string.isRequired,\n};\n\nexport default CourseCardMenu;\n"]}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export default messages;
|
|
2
|
+
declare namespace messages {
|
|
3
|
+
namespace unenroll {
|
|
4
|
+
let id: string;
|
|
5
|
+
let description: string;
|
|
6
|
+
let defaultMessage: string;
|
|
7
|
+
}
|
|
8
|
+
namespace dropdownAlt {
|
|
9
|
+
let id_1: string;
|
|
10
|
+
export { id_1 as id };
|
|
11
|
+
let description_1: string;
|
|
12
|
+
export { description_1 as description };
|
|
13
|
+
let defaultMessage_1: string;
|
|
14
|
+
export { defaultMessage_1 as defaultMessage };
|
|
15
|
+
}
|
|
16
|
+
namespace emailSettings {
|
|
17
|
+
let id_2: string;
|
|
18
|
+
export { id_2 as id };
|
|
19
|
+
let description_2: string;
|
|
20
|
+
export { description_2 as description };
|
|
21
|
+
let defaultMessage_2: string;
|
|
22
|
+
export { defaultMessage_2 as defaultMessage };
|
|
23
|
+
}
|
|
24
|
+
namespace shareToFacebook {
|
|
25
|
+
let id_3: string;
|
|
26
|
+
export { id_3 as id };
|
|
27
|
+
let description_3: string;
|
|
28
|
+
export { description_3 as description };
|
|
29
|
+
let defaultMessage_3: string;
|
|
30
|
+
export { defaultMessage_3 as defaultMessage };
|
|
31
|
+
}
|
|
32
|
+
namespace shareToTwitter {
|
|
33
|
+
let id_4: string;
|
|
34
|
+
export { id_4 as id };
|
|
35
|
+
let description_4: string;
|
|
36
|
+
export { description_4 as description };
|
|
37
|
+
let defaultMessage_4: string;
|
|
38
|
+
export { defaultMessage_4 as defaultMessage };
|
|
39
|
+
}
|
|
40
|
+
namespace shareQuote {
|
|
41
|
+
let id_5: string;
|
|
42
|
+
export { id_5 as id };
|
|
43
|
+
let description_5: string;
|
|
44
|
+
export { description_5 as description };
|
|
45
|
+
let defaultMessage_5: string;
|
|
46
|
+
export { defaultMessage_5 as defaultMessage };
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { defineMessages } from '@openedx/frontend-base';
|
|
2
|
+
const messages = defineMessages({
|
|
3
|
+
unenroll: {
|
|
4
|
+
id: 'learner-dash.courseCardMenu.unenroll',
|
|
5
|
+
description: 'Course unenroll menu button',
|
|
6
|
+
defaultMessage: 'Unenroll',
|
|
7
|
+
},
|
|
8
|
+
dropdownAlt: {
|
|
9
|
+
id: 'learner-dash.courseCardMenu.dropdownAlt',
|
|
10
|
+
description: 'Course action menu alt-text',
|
|
11
|
+
defaultMessage: 'Course actions dropdown',
|
|
12
|
+
},
|
|
13
|
+
emailSettings: {
|
|
14
|
+
id: 'learner-dash.courseCardMenu.emailSettings',
|
|
15
|
+
description: 'Course email settings menu button',
|
|
16
|
+
defaultMessage: 'Email settings',
|
|
17
|
+
},
|
|
18
|
+
shareToFacebook: {
|
|
19
|
+
id: 'learner-dash.courseCardMenu.shareToFacebook',
|
|
20
|
+
description: 'Course Facebook Sharing button',
|
|
21
|
+
defaultMessage: 'Share to Facebook',
|
|
22
|
+
},
|
|
23
|
+
shareToTwitter: {
|
|
24
|
+
id: 'learner-dash.courseCardMenu.shareToTwitter',
|
|
25
|
+
description: 'Course Twitter Sharing button',
|
|
26
|
+
defaultMessage: 'Share to Twitter',
|
|
27
|
+
},
|
|
28
|
+
shareQuote: {
|
|
29
|
+
id: 'learner-dash.courseCardMenu.shareQuote',
|
|
30
|
+
description: 'Social sharing quote',
|
|
31
|
+
defaultMessage: 'I\'m taking {courseName} online with {socialBrand}. Check it out!',
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
export default messages;
|
|
35
|
+
//# sourceMappingURL=messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../../../src/containers/CourseCard/components/CourseCardMenu/messages.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,QAAQ,EAAE;QACR,EAAE,EAAE,sCAAsC;QAC1C,WAAW,EAAE,6BAA6B;QAC1C,cAAc,EAAE,UAAU;KAC3B;IACD,WAAW,EAAE;QACX,EAAE,EAAE,yCAAyC;QAC7C,WAAW,EAAE,6BAA6B;QAC1C,cAAc,EAAE,yBAAyB;KAC1C;IACD,aAAa,EAAE;QACb,EAAE,EAAE,2CAA2C;QAC/C,WAAW,EAAE,mCAAmC;QAChD,cAAc,EAAE,gBAAgB;KACjC;IACD,eAAe,EAAE;QACf,EAAE,EAAE,6CAA6C;QACjD,WAAW,EAAE,gCAAgC;QAC7C,cAAc,EAAE,mBAAmB;KACpC;IACD,cAAc,EAAE;QACd,EAAE,EAAE,4CAA4C;QAChD,WAAW,EAAE,+BAA+B;QAC5C,cAAc,EAAE,kBAAkB;KACnC;IACD,UAAU,EAAE;QACV,EAAE,EAAE,wCAAwC;QAC5C,WAAW,EAAE,sBAAsB;QACnC,cAAc,EAAE,oEAAoE;KACrF;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n unenroll: {\n id: 'learner-dash.courseCardMenu.unenroll',\n description: 'Course unenroll menu button',\n defaultMessage: 'Unenroll',\n },\n dropdownAlt: {\n id: 'learner-dash.courseCardMenu.dropdownAlt',\n description: 'Course action menu alt-text',\n defaultMessage: 'Course actions dropdown',\n },\n emailSettings: {\n id: 'learner-dash.courseCardMenu.emailSettings',\n description: 'Course email settings menu button',\n defaultMessage: 'Email settings',\n },\n shareToFacebook: {\n id: 'learner-dash.courseCardMenu.shareToFacebook',\n description: 'Course Facebook Sharing button',\n defaultMessage: 'Share to Facebook',\n },\n shareToTwitter: {\n id: 'learner-dash.courseCardMenu.shareToTwitter',\n description: 'Course Twitter Sharing button',\n defaultMessage: 'Share to Twitter',\n },\n shareQuote: {\n id: 'learner-dash.courseCardMenu.shareQuote',\n description: 'Social sharing quote',\n defaultMessage: 'I\\'m taking {courseName} online with {socialBrand}. Check it out!',\n },\n});\n\nexport default messages;\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export function CourseCardTitle({ cardId }: {
|
|
2
|
+
cardId: any;
|
|
3
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
export namespace CourseCardTitle {
|
|
5
|
+
namespace propTypes {
|
|
6
|
+
let cardId: PropTypes.Validator<string>;
|
|
7
|
+
}
|
|
8
|
+
let defaultProps: {};
|
|
9
|
+
}
|
|
10
|
+
export default CourseCardTitle;
|
|
11
|
+
import PropTypes from 'prop-types';
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import PropTypes from 'prop-types';
|
|
4
|
+
import track from '../../../tracking';
|
|
5
|
+
import { useCourseData, useCourseTrackingEvent } from '../../../hooks';
|
|
6
|
+
import useActionDisabledState from './hooks';
|
|
7
|
+
const { courseTitleClicked } = track.course;
|
|
8
|
+
export const CourseCardTitle = ({ cardId }) => {
|
|
9
|
+
var _a, _b;
|
|
10
|
+
const courseData = useCourseData(cardId);
|
|
11
|
+
const courseName = (_a = courseData === null || courseData === void 0 ? void 0 : courseData.course) === null || _a === void 0 ? void 0 : _a.courseName;
|
|
12
|
+
const homeUrl = (_b = courseData === null || courseData === void 0 ? void 0 : courseData.courseRun) === null || _b === void 0 ? void 0 : _b.homeUrl;
|
|
13
|
+
const handleTitleClicked = useCourseTrackingEvent(courseTitleClicked, cardId, homeUrl);
|
|
14
|
+
const { disableCourseTitle } = useActionDisabledState(cardId);
|
|
15
|
+
return (_jsx("h3", { children: disableCourseTitle ? (_jsx("span", { className: "course-card-title", "data-testid": "CourseCardTitle", children: courseName })) : (_jsx("a", { href: homeUrl, className: "course-card-title", "data-testid": "CourseCardTitle", onClick: handleTitleClicked, children: courseName })) }));
|
|
16
|
+
};
|
|
17
|
+
CourseCardTitle.propTypes = {
|
|
18
|
+
cardId: PropTypes.string.isRequired,
|
|
19
|
+
};
|
|
20
|
+
CourseCardTitle.defaultProps = {};
|
|
21
|
+
export default CourseCardTitle;
|
|
22
|
+
//# sourceMappingURL=CourseCardTitle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CourseCardTitle.js","sourceRoot":"","sources":["../../../../src/containers/CourseCard/components/CourseCardTitle.jsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,KAAK,MAAM,eAAe,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,sBAAsB,MAAM,SAAS,CAAC;AAE7C,MAAM,EAAE,kBAAkB,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC;AAE5C,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;;IAC5C,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,UAAU,GAAG,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,0CAAE,UAAU,CAAC;IAClD,MAAM,OAAO,GAAG,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,SAAS,0CAAE,OAAO,CAAC;IAC/C,MAAM,kBAAkB,GAAG,sBAAsB,CAC/C,kBAAkB,EAClB,MAAM,EACN,OAAO,CACR,CAAC;IACF,MAAM,EAAE,kBAAkB,EAAE,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC9D,OAAO,CACL,uBACG,kBAAkB,CAAC,CAAC,CAAC,CACpB,eAAM,SAAS,EAAC,mBAAmB,iBAAa,iBAAiB,YAAE,UAAU,GAAQ,CACtF,CAAC,CAAC,CAAC,CACF,YACE,IAAI,EAAE,OAAO,EACb,SAAS,EAAC,mBAAmB,iBACjB,iBAAiB,EAC7B,OAAO,EAAE,kBAAkB,YAE1B,UAAU,GACT,CACL,GACE,CACN,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,CAAC,SAAS,GAAG;IAC1B,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU;CACpC,CAAC;AAEF,eAAe,CAAC,YAAY,GAAG,EAAE,CAAC;AAElC,eAAe,eAAe,CAAC","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport track from '@src/tracking';\nimport { useCourseData, useCourseTrackingEvent } from '@src/hooks';\nimport useActionDisabledState from './hooks';\n\nconst { courseTitleClicked } = track.course;\n\nexport const CourseCardTitle = ({ cardId }) => {\n const courseData = useCourseData(cardId);\n const courseName = courseData?.course?.courseName;\n const homeUrl = courseData?.courseRun?.homeUrl;\n const handleTitleClicked = useCourseTrackingEvent(\n courseTitleClicked,\n cardId,\n homeUrl,\n );\n const { disableCourseTitle } = useActionDisabledState(cardId);\n return (\n <h3>\n {disableCourseTitle ? (\n <span className=\"course-card-title\" data-testid=\"CourseCardTitle\">{courseName}</span>\n ) : (\n <a\n href={homeUrl}\n className=\"course-card-title\"\n data-testid=\"CourseCardTitle\"\n onClick={handleTitleClicked}\n >\n {courseName}\n </a>\n )}\n </h3>\n );\n};\n\nCourseCardTitle.propTypes = {\n cardId: PropTypes.string.isRequired,\n};\n\nCourseCardTitle.defaultProps = {};\n\nexport default CourseCardTitle;\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export const state: any;
|
|
2
|
+
export function useRelatedProgramsBadgeData({ cardId }: {
|
|
3
|
+
cardId: any;
|
|
4
|
+
}): {
|
|
5
|
+
numPrograms: any;
|
|
6
|
+
programsMessage: string;
|
|
7
|
+
isOpen: any;
|
|
8
|
+
openModal: () => any;
|
|
9
|
+
closeModal: () => any;
|
|
10
|
+
};
|
|
11
|
+
export default module.useRelatedProgramsBadgeData;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { useIntl } from '@openedx/frontend-base';
|
|
3
|
+
import { StrictDict } from '../../../../utils';
|
|
4
|
+
import { useCourseData } from '../../../../hooks';
|
|
5
|
+
import messages from './messages';
|
|
6
|
+
import * as module from './hooks';
|
|
7
|
+
export const state = StrictDict({
|
|
8
|
+
isOpen: (val) => React.useState(val), // eslint-disable-line
|
|
9
|
+
});
|
|
10
|
+
export const useRelatedProgramsBadgeData = ({ cardId }) => {
|
|
11
|
+
var _a, _b;
|
|
12
|
+
const [isOpen, setIsOpen] = module.state.isOpen(false);
|
|
13
|
+
const { formatMessage } = useIntl();
|
|
14
|
+
const courseData = useCourseData(cardId);
|
|
15
|
+
const numPrograms = ((_b = (_a = courseData === null || courseData === void 0 ? void 0 : courseData.programs) === null || _a === void 0 ? void 0 : _a.relatedPrograms) === null || _b === void 0 ? void 0 : _b.length) || 0;
|
|
16
|
+
let programsMessage = '';
|
|
17
|
+
if (numPrograms) {
|
|
18
|
+
programsMessage = formatMessage(numPrograms === 1 ? messages.badgeLabelSingular : messages.badgeLabelPlural, { numPrograms });
|
|
19
|
+
}
|
|
20
|
+
return {
|
|
21
|
+
numPrograms,
|
|
22
|
+
programsMessage,
|
|
23
|
+
isOpen,
|
|
24
|
+
openModal: () => setIsOpen(true),
|
|
25
|
+
closeModal: () => setIsOpen(false),
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
export default useRelatedProgramsBadgeData;
|
|
29
|
+
//# sourceMappingURL=hooks.js.map
|