@edx/frontend-app-subscription-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 +84 -0
- package/dist/Main.d.ts +2 -0
- package/dist/Main.js +9 -0
- package/dist/Main.js.map +1 -0
- package/dist/app.d.ts +3 -0
- package/dist/app.js +20 -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 +1 -0
- package/dist/constants.js +2 -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 +12 -0
- package/dist/containers/CourseCard/components/CourseCardActions/index.js +30 -0
- package/dist/containers/CourseCard/components/CourseCardActions/index.js.map +1 -0
- package/dist/containers/CourseCard/components/CourseCardActions/messages.d.ts +48 -0
- package/dist/containers/CourseCard/components/CourseCardActions/messages.js +35 -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/RedeemBanner.d.ts +2 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/RedeemBanner.js +10 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/RedeemBanner.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 +12 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/index.js +17 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/index.js.map +1 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/messages.d.ts +168 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/messages.js +110 -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 +12 -0
- package/dist/containers/CourseCard/index.js +21 -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 +17 -0
- package/dist/containers/CoursesPanel/CourseList/index.js +22 -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 +17 -0
- package/dist/containers/CoursesPanel/NoCoursesView/index.js.map +1 -0
- package/dist/containers/CoursesPanel/NoCoursesView/messages.d.ts +16 -0
- package/dist/containers/CoursesPanel/NoCoursesView/messages.js +15 -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 +48 -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 +16 -0
- package/dist/containers/CoursesPanel/messages.js +15 -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/DashboardTabs.d.ts +2 -0
- package/dist/containers/Dashboard/DashboardTabs.js +34 -0
- package/dist/containers/Dashboard/DashboardTabs.js.map +1 -0
- package/dist/containers/Dashboard/DashboardTitle.d.ts +2 -0
- package/dist/containers/Dashboard/DashboardTitle.js +9 -0
- package/dist/containers/Dashboard/DashboardTitle.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 +25 -0
- package/dist/containers/Dashboard/index.js.map +1 -0
- package/dist/containers/Dashboard/index.scss +29 -0
- package/dist/containers/Dashboard/messages.d.ts +13 -0
- package/dist/containers/Dashboard/messages.js +15 -0
- package/dist/containers/Dashboard/messages.js.map +1 -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/ProductCard/index.d.ts +4 -0
- package/dist/containers/ProductCard/index.js +8 -0
- package/dist/containers/ProductCard/index.js.map +1 -0
- package/dist/containers/ProductCard/index.scss +6 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/ProgramProgress.d.ts +4 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/ProgramProgress.js +54 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/ProgramProgress.js.map +1 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/ProgramProgressHeader.d.ts +4 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/ProgramProgressHeader.js +13 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/ProgramProgressHeader.js.map +1 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/ProgramProgressInfo.d.ts +4 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/ProgramProgressInfo.js +12 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/ProgramProgressInfo.js.map +1 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/ProgramProgressProvider.d.ts +10 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/ProgramProgressProvider.js +30 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/ProgramProgressProvider.js.map +1 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/UpgradeButton/UpgradeAllButton.d.ts +4 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/UpgradeButton/UpgradeAllButton.js +29 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/UpgradeButton/UpgradeAllButton.js.map +1 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/UpgradeButton/index.d.ts +2 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/UpgradeButton/index.js +3 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/UpgradeButton/index.js.map +1 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/UpgradeButton/index.scss +7 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/UpgradeButton/messages.d.ts +8 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/UpgradeButton/messages.js +10 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/UpgradeButton/messages.js.map +1 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/index.d.ts +2 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/index.js +6 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/index.js.map +1 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/index.scss +20 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/messages.d.ts +33 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/messages.js +35 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/messages.js.map +1 -0
- package/dist/containers/ProgramDashboard/assets/micromasters-icon.svg +17 -0
- package/dist/containers/ProgramDashboard/assets/professional-certificate-program-details.svg +1 -0
- package/dist/containers/ProgramDashboard/assets/rwth-aachen-university.svg +47 -0
- package/dist/containers/ProgramDashboard/assets/xseries-program-details.svg +1 -0
- package/dist/containers/ProgramDashboard/data/api.d.ts +1 -0
- package/dist/containers/ProgramDashboard/data/api.js +18 -0
- package/dist/containers/ProgramDashboard/data/api.js.map +1 -0
- package/dist/containers/ProgramDashboard/data/constants.d.ts +8 -0
- package/dist/containers/ProgramDashboard/data/constants.js +9 -0
- package/dist/containers/ProgramDashboard/data/constants.js.map +1 -0
- package/dist/containers/ProgramDashboard/data/util.d.ts +1 -0
- package/dist/containers/ProgramDashboard/data/util.js +17 -0
- package/dist/containers/ProgramDashboard/data/util.js.map +1 -0
- package/dist/containers/ProgramDashboard/index.d.ts +2 -0
- package/dist/containers/ProgramDashboard/index.js +3 -0
- package/dist/containers/ProgramDashboard/index.js.map +1 -0
- package/dist/containers/RecommendedCourse/index.d.ts +3 -0
- package/dist/containers/RecommendedCourse/index.js +16 -0
- package/dist/containers/RecommendedCourse/index.js.map +1 -0
- package/dist/containers/RecommendedCourse/index.scss +21 -0
- package/dist/containers/RecommendedCourse/messages.d.ts +8 -0
- package/dist/containers/RecommendedCourse/messages.js +10 -0
- package/dist/containers/RecommendedCourse/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/SubscriptionBanner/components/SubscriptionBanner.d.ts +2 -0
- package/dist/containers/SubscriptionBanner/components/SubscriptionBanner.js +72 -0
- package/dist/containers/SubscriptionBanner/components/SubscriptionBanner.js.map +1 -0
- package/dist/containers/SubscriptionBanner/index.d.ts +1 -0
- package/dist/containers/SubscriptionBanner/index.js +2 -0
- package/dist/containers/SubscriptionBanner/index.js.map +1 -0
- package/dist/containers/SubscriptionBanner/messages.d.ts +38 -0
- package/dist/containers/SubscriptionBanner/messages.js +40 -0
- package/dist/containers/SubscriptionBanner/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 +5 -0
- package/dist/data/constants/app.js +17 -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/data/services/subs/api.d.ts +10 -0
- package/dist/data/services/subs/api.js +66 -0
- package/dist/data/services/subs/api.js.map +1 -0
- package/dist/data/services/subs/index.d.ts +1 -0
- package/dist/data/services/subs/index.js +2 -0
- package/dist/data/services/subs/index.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/useRecommendedCourseData.d.ts +15 -0
- package/dist/hooks/useRecommendedCourseData.js +6 -0
- package/dist/hooks/useRecommendedCourseData.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 +25 -0
- package/dist/i18n/index.js +26 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/messages.d.ts +13 -0
- package/dist/messages.js +15 -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 +42 -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/SupportLinkMenuItem.d.ts +3 -0
- package/dist/widgets/LearnerDashboardHeader/SupportLinkMenuItem.js +15 -0
- package/dist/widgets/LearnerDashboardHeader/SupportLinkMenuItem.js.map +1 -0
- package/dist/widgets/LearnerDashboardHeader/app.d.ts +3 -0
- package/dist/widgets/LearnerDashboardHeader/app.js +69 -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 +136 -0
- package/dist/widgets/LearnerDashboardHeader/messages.js +90 -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 +84 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import React, { useMemo } from 'react';
|
|
3
|
+
import PropTypes from 'prop-types';
|
|
4
|
+
import { useIntl } from '@openedx/frontend-base';
|
|
5
|
+
import { EXECUTIVE_EDUCATION_COURSE_MODES } from '../../../../data/constants/course';
|
|
6
|
+
import { baseAppUrl } from '../../../../data/services/lms/urls';
|
|
7
|
+
import track from '../../../../tracking';
|
|
8
|
+
import { useCourseTrackingEvent, useCourseData } from '../../../../hooks';
|
|
9
|
+
import { useInitializeLearnerHome } from '../../../../data/hooks';
|
|
10
|
+
import useActionDisabledState from '../hooks';
|
|
11
|
+
import ActionButton from './ActionButton';
|
|
12
|
+
import messages from './messages';
|
|
13
|
+
export const ResumeButton = ({ cardId }) => {
|
|
14
|
+
var _a;
|
|
15
|
+
const { formatMessage } = useIntl();
|
|
16
|
+
const { data: learnerData } = useInitializeLearnerHome();
|
|
17
|
+
const courseData = useCourseData(cardId);
|
|
18
|
+
const resumeUrl = baseAppUrl((_a = courseData === null || courseData === void 0 ? void 0 : courseData.courseRun) === null || _a === void 0 ? void 0 : _a.resumeUrl);
|
|
19
|
+
const execEdTrackingParam = useMemo(() => {
|
|
20
|
+
const isExecEd2UCourse = EXECUTIVE_EDUCATION_COURSE_MODES.includes(courseData.enrollment.mode);
|
|
21
|
+
const { authOrgId } = learnerData.enterpriseDashboard || {};
|
|
22
|
+
return isExecEd2UCourse ? `?org_id=${authOrgId}` : '';
|
|
23
|
+
}, [courseData.enrollment.mode, learnerData.enterpriseDashboard]);
|
|
24
|
+
const { disableResumeCourse } = useActionDisabledState(cardId);
|
|
25
|
+
const handleClick = useCourseTrackingEvent(track.course.enterCourseClicked, cardId, resumeUrl + execEdTrackingParam);
|
|
26
|
+
return (_jsx(ActionButton, { disabled: disableResumeCourse, as: "a", href: "#", onClick: handleClick, children: formatMessage(messages.resume) }));
|
|
27
|
+
};
|
|
28
|
+
ResumeButton.propTypes = {
|
|
29
|
+
cardId: PropTypes.string.isRequired,
|
|
30
|
+
};
|
|
31
|
+
export default ResumeButton;
|
|
32
|
+
//# sourceMappingURL=ResumeButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ResumeButton.js","sourceRoot":"","sources":["../../../../../src/containers/CourseCard/components/CourseCardActions/ResumeButton.jsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAE,gCAAgC,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,KAAK,MAAM,eAAe,CAAC;AAClC,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,sBAAsB,MAAM,UAAU,CAAC;AAC9C,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;;IACzC,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,wBAAwB,EAAE,CAAC;IACzD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,UAAU,CAAC,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,SAAS,0CAAE,SAAS,CAAC,CAAC;IAC/D,MAAM,mBAAmB,GAAG,OAAO,CAAC,GAAG,EAAE;QACvC,MAAM,gBAAgB,GAAG,gCAAgC,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC/F,MAAM,EAAE,SAAS,EAAE,GAAG,WAAW,CAAC,mBAAmB,IAAI,EAAE,CAAC;QAC5D,OAAO,gBAAgB,CAAC,CAAC,CAAC,WAAW,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACxD,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAClE,MAAM,EAAE,mBAAmB,EAAE,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAE/D,MAAM,WAAW,GAAG,sBAAsB,CACxC,KAAK,CAAC,MAAM,CAAC,kBAAkB,EAC/B,MAAM,EACN,SAAS,GAAG,mBAAmB,CAChC,CAAC;IACF,OAAO,CACL,KAAC,YAAY,IACX,QAAQ,EAAE,mBAAmB,EAC7B,EAAE,EAAC,GAAG,EACN,IAAI,EAAC,GAAG,EACR,OAAO,EAAE,WAAW,YAEnB,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,GAClB,CAChB,CAAC;AACJ,CAAC,CAAC;AACF,YAAY,CAAC,SAAS,GAAG;IACvB,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU;CACpC,CAAC;AACF,eAAe,YAAY,CAAC","sourcesContent":["import React, { useMemo } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { useIntl } from '@openedx/frontend-base';\n\nimport { EXECUTIVE_EDUCATION_COURSE_MODES } from '@src/data/constants/course';\nimport { baseAppUrl } from '@src/data/services/lms/urls';\nimport track from '@src/tracking';\nimport { useCourseTrackingEvent, useCourseData } from '@src/hooks';\nimport { useInitializeLearnerHome } from '@src/data/hooks';\nimport useActionDisabledState from '../hooks';\nimport ActionButton from './ActionButton';\nimport messages from './messages';\n\nexport const ResumeButton = ({ cardId }) => {\n const { formatMessage } = useIntl();\n const { data: learnerData } = useInitializeLearnerHome();\n const courseData = useCourseData(cardId);\n const resumeUrl = baseAppUrl(courseData?.courseRun?.resumeUrl);\n const execEdTrackingParam = useMemo(() => {\n const isExecEd2UCourse = EXECUTIVE_EDUCATION_COURSE_MODES.includes(courseData.enrollment.mode);\n const { authOrgId } = learnerData.enterpriseDashboard || {};\n return isExecEd2UCourse ? `?org_id=${authOrgId}` : '';\n }, [courseData.enrollment.mode, learnerData.enterpriseDashboard]);\n const { disableResumeCourse } = useActionDisabledState(cardId);\n\n const handleClick = useCourseTrackingEvent(\n track.course.enterCourseClicked,\n cardId,\n resumeUrl + execEdTrackingParam,\n );\n return (\n <ActionButton\n disabled={disableResumeCourse}\n as=\"a\"\n href=\"#\"\n onClick={handleClick}\n >\n {formatMessage(messages.resume)}\n </ActionButton>\n );\n};\nResumeButton.propTypes = {\n cardId: PropTypes.string.isRequired,\n};\nexport default ResumeButton;\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export function SelectSessionButton({ cardId }: {
|
|
2
|
+
cardId: any;
|
|
3
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
export namespace SelectSessionButton {
|
|
5
|
+
namespace propTypes {
|
|
6
|
+
let cardId: PropTypes.Validator<string>;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export default SelectSessionButton;
|
|
10
|
+
import PropTypes from 'prop-types';
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import PropTypes from 'prop-types';
|
|
4
|
+
import { useIntl } from '@openedx/frontend-base';
|
|
5
|
+
import { useSelectSessionModal } from '../../../../data/context';
|
|
6
|
+
import useActionDisabledState from '../hooks';
|
|
7
|
+
import ActionButton from './ActionButton';
|
|
8
|
+
import messages from './messages';
|
|
9
|
+
export const SelectSessionButton = ({ cardId }) => {
|
|
10
|
+
const { formatMessage } = useIntl();
|
|
11
|
+
const { disableSelectSession } = useActionDisabledState(cardId);
|
|
12
|
+
const { updateSelectSessionModal } = useSelectSessionModal();
|
|
13
|
+
return (_jsx(ActionButton, { disabled: disableSelectSession, onClick: () => updateSelectSessionModal(cardId), children: formatMessage(messages.selectSession) }));
|
|
14
|
+
};
|
|
15
|
+
SelectSessionButton.propTypes = {
|
|
16
|
+
cardId: PropTypes.string.isRequired,
|
|
17
|
+
};
|
|
18
|
+
export default SelectSessionButton;
|
|
19
|
+
//# sourceMappingURL=SelectSessionButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectSessionButton.js","sourceRoot":"","sources":["../../../../../src/containers/CourseCard/components/CourseCardActions/SelectSessionButton.jsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,sBAAsB,MAAM,UAAU,CAAC;AAC9C,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;IAChD,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,EAAE,oBAAoB,EAAE,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAChE,MAAM,EAAE,wBAAwB,EAAE,GAAG,qBAAqB,EAAE,CAAC;IAC7D,OAAO,CACL,KAAC,YAAY,IACX,QAAQ,EAAE,oBAAoB,EAC9B,OAAO,EAAE,GAAG,EAAE,CAAC,wBAAwB,CAAC,MAAM,CAAC,YAE9C,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,GACzB,CAChB,CAAC;AACJ,CAAC,CAAC;AACF,mBAAmB,CAAC,SAAS,GAAG;IAC9B,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU;CACpC,CAAC;AACF,eAAe,mBAAmB,CAAC","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { useIntl } from '@openedx/frontend-base';\n\nimport { useSelectSessionModal } from '@src/data/context';\nimport useActionDisabledState from '../hooks';\nimport ActionButton from './ActionButton';\nimport messages from './messages';\n\nexport const SelectSessionButton = ({ cardId }) => {\n const { formatMessage } = useIntl();\n const { disableSelectSession } = useActionDisabledState(cardId);\n const { updateSelectSessionModal } = useSelectSessionModal();\n return (\n <ActionButton\n disabled={disableSelectSession}\n onClick={() => updateSelectSessionModal(cardId)}\n >\n {formatMessage(messages.selectSession)}\n </ActionButton>\n );\n};\nSelectSessionButton.propTypes = {\n cardId: PropTypes.string.isRequired,\n};\nexport default SelectSessionButton;\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export function ViewCourseButton({ cardId }: {
|
|
2
|
+
cardId: any;
|
|
3
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
export namespace ViewCourseButton {
|
|
5
|
+
namespace propTypes {
|
|
6
|
+
let cardId: PropTypes.Validator<string>;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export default ViewCourseButton;
|
|
10
|
+
import PropTypes from 'prop-types';
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import PropTypes from 'prop-types';
|
|
4
|
+
import { useIntl } from '@openedx/frontend-base';
|
|
5
|
+
import track from '../../../../tracking';
|
|
6
|
+
import { useCourseTrackingEvent, useCourseData } from '../../../../hooks';
|
|
7
|
+
import useActionDisabledState from '../hooks';
|
|
8
|
+
import ActionButton from './ActionButton';
|
|
9
|
+
import messages from './messages';
|
|
10
|
+
export const ViewCourseButton = ({ cardId }) => {
|
|
11
|
+
var _a;
|
|
12
|
+
const { formatMessage } = useIntl();
|
|
13
|
+
const courseData = useCourseData(cardId);
|
|
14
|
+
const homeUrl = (_a = courseData === null || courseData === void 0 ? void 0 : courseData.courseRun) === null || _a === void 0 ? void 0 : _a.homeUrl;
|
|
15
|
+
const { disableViewCourse } = useActionDisabledState(cardId);
|
|
16
|
+
const handleClick = useCourseTrackingEvent(track.course.enterCourseClicked, cardId, homeUrl);
|
|
17
|
+
return (_jsx(ActionButton, { disabled: disableViewCourse, as: "a", href: "#", onClick: handleClick, children: formatMessage(messages.viewCourse) }));
|
|
18
|
+
};
|
|
19
|
+
ViewCourseButton.propTypes = {
|
|
20
|
+
cardId: PropTypes.string.isRequired,
|
|
21
|
+
};
|
|
22
|
+
export default ViewCourseButton;
|
|
23
|
+
//# sourceMappingURL=ViewCourseButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ViewCourseButton.js","sourceRoot":"","sources":["../../../../../src/containers/CourseCard/components/CourseCardActions/ViewCourseButton.jsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,KAAK,MAAM,eAAe,CAAC;AAClC,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,sBAAsB,MAAM,UAAU,CAAC;AAC9C,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;;IAC7C,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,SAAS,0CAAE,OAAO,CAAC;IAC/C,MAAM,EAAE,iBAAiB,EAAE,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAE7D,MAAM,WAAW,GAAG,sBAAsB,CACxC,KAAK,CAAC,MAAM,CAAC,kBAAkB,EAC/B,MAAM,EACN,OAAO,CACR,CAAC;IACF,OAAO,CACL,KAAC,YAAY,IACX,QAAQ,EAAE,iBAAiB,EAC3B,EAAE,EAAC,GAAG,EACN,IAAI,EAAC,GAAG,EACR,OAAO,EAAE,WAAW,YAEnB,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC,GACtB,CAChB,CAAC;AACJ,CAAC,CAAC;AACF,gBAAgB,CAAC,SAAS,GAAG;IAC3B,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU;CACpC,CAAC;AACF,eAAe,gBAAgB,CAAC","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { useIntl } from '@openedx/frontend-base';\n\nimport track from '@src/tracking';\nimport { useCourseTrackingEvent, useCourseData } from '@src/hooks';\nimport useActionDisabledState from '../hooks';\nimport ActionButton from './ActionButton';\nimport messages from './messages';\n\nexport const ViewCourseButton = ({ cardId }) => {\n const { formatMessage } = useIntl();\n const courseData = useCourseData(cardId);\n const homeUrl = courseData?.courseRun?.homeUrl;\n const { disableViewCourse } = useActionDisabledState(cardId);\n\n const handleClick = useCourseTrackingEvent(\n track.course.enterCourseClicked,\n cardId,\n homeUrl,\n );\n return (\n <ActionButton\n disabled={disableViewCourse}\n as=\"a\"\n href=\"#\"\n onClick={handleClick}\n >\n {formatMessage(messages.viewCourse)}\n </ActionButton>\n );\n};\nViewCourseButton.propTypes = {\n cardId: PropTypes.string.isRequired,\n};\nexport default ViewCourseButton;\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export function CourseCardActions({ cardId, verifiedCourse }: {
|
|
2
|
+
cardId: any;
|
|
3
|
+
verifiedCourse: any;
|
|
4
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
5
|
+
export namespace CourseCardActions {
|
|
6
|
+
namespace propTypes {
|
|
7
|
+
let cardId: PropTypes.Validator<string>;
|
|
8
|
+
let verifiedCourse: PropTypes.Requireable<boolean>;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export default CourseCardActions;
|
|
12
|
+
import PropTypes from 'prop-types';
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import PropTypes from 'prop-types';
|
|
4
|
+
import { ActionRow, Row, Col, Badge } from '@openedx/paragon';
|
|
5
|
+
import { useIntl } from '@openedx/frontend-base';
|
|
6
|
+
import { useCourseData, useEntitlementInfo } from '../../../../hooks';
|
|
7
|
+
import CourseCardActionSlot from '../../../../slots/CourseCardActionSlot';
|
|
8
|
+
import SelectSessionButton from './SelectSessionButton';
|
|
9
|
+
import BeginCourseButton from './BeginCourseButton';
|
|
10
|
+
import ResumeButton from './ResumeButton';
|
|
11
|
+
import ViewCourseButton from './ViewCourseButton';
|
|
12
|
+
import messages from './messages';
|
|
13
|
+
export const CourseCardActions = ({ cardId, verifiedCourse }) => {
|
|
14
|
+
const cardData = useCourseData(cardId);
|
|
15
|
+
const { formatMessage } = useIntl();
|
|
16
|
+
const hasStarted = cardData.enrollment.hasStarted || false;
|
|
17
|
+
const { isEntitlement, isFulfilled } = useEntitlementInfo(cardData);
|
|
18
|
+
const isArchived = cardData.courseRun.isArchived || false;
|
|
19
|
+
return (_jsxs(Row, { className: "align-items-center mt-3", children: [_jsx(Col, { xs: 12, sm: 6, className: "mb-2 mb-lg-0", children: verifiedCourse ? (_jsx(Badge, { variant: "success", className: "px-3 py-2", children: formatMessage(messages.subsVerifiedCourseText) })) : (_jsx("span", { className: "small text-info", children: formatMessage(messages.subsIncludedCourseText) })) }), _jsx(Col, { xs: 12, className: "d-flex justify-content-end", sm: 6, children: _jsxs(ActionRow, { "data-test-id": "CourseCardActions", children: [_jsx(CourseCardActionSlot, { cardId: cardId }), isEntitlement && (isFulfilled
|
|
20
|
+
? _jsx(ViewCourseButton, { cardId: cardId })
|
|
21
|
+
: _jsx(SelectSessionButton, { cardId: cardId })), (isArchived && !isEntitlement) && (_jsx(ViewCourseButton, { cardId: cardId })), !(isArchived || isEntitlement) && (hasStarted
|
|
22
|
+
? _jsx(ResumeButton, { cardId: cardId })
|
|
23
|
+
: _jsx(BeginCourseButton, { cardId: cardId }))] }) })] }));
|
|
24
|
+
};
|
|
25
|
+
CourseCardActions.propTypes = {
|
|
26
|
+
cardId: PropTypes.string.isRequired,
|
|
27
|
+
verifiedCourse: PropTypes.bool,
|
|
28
|
+
};
|
|
29
|
+
export default CourseCardActions;
|
|
30
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/containers/CourseCard/components/CourseCardActions/index.jsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAG,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAE/D,OAAO,oBAAoB,MAAM,iCAAiC,CAAC;AACnE,OAAO,mBAAmB,MAAM,uBAAuB,CAAC;AACxD,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AACpD,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,EAAE;IAC9D,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC,UAAU,IAAI,KAAK,CAAC;IAC3D,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACpE,MAAM,UAAU,GAAG,QAAQ,CAAC,SAAS,CAAC,UAAU,IAAI,KAAK,CAAC;IAE1D,OAAO,CACL,MAAC,GAAG,IAAC,SAAS,EAAC,yBAAyB,aACpC,KAAC,GAAG,IAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,SAAS,EAAC,cAAc,YAKvC,cAAc,CAAC,CAAC,CAAC,CACd,KAAC,KAAK,IAAC,OAAO,EAAC,SAAS,EAAC,SAAS,EAAC,WAAW,YACzC,aAAa,CAAC,QAAQ,CAAC,sBAAsB,CAAC,GAC3C,CACX,CAAC,CAAC,CAAC,CACA,eAAM,SAAS,EAAC,iBAAiB,YAC5B,aAAa,CAAC,QAAQ,CAAC,sBAAsB,CAAC,GAC5C,CACV,GACC,EAEN,KAAC,GAAG,IAAC,EAAE,EAAE,EAAE,EAAE,SAAS,EAAC,4BAA4B,EAAC,EAAE,EAAE,CAAC,YACrD,MAAC,SAAS,oBAAc,mBAAmB,aACzC,KAAC,oBAAoB,IAAC,MAAM,EAAE,MAAM,GAAI,EACvC,aAAa,IAAI,CAAC,WAAW;4BAC5B,CAAC,CAAC,KAAC,gBAAgB,IAAC,MAAM,EAAE,MAAM,GAAI;4BACtC,CAAC,CAAC,KAAC,mBAAmB,IAAC,MAAM,EAAE,MAAM,GAAI,CAC1C,EACA,CAAC,UAAU,IAAI,CAAC,aAAa,CAAC,IAAI,CACjC,KAAC,gBAAgB,IAAC,MAAM,EAAE,MAAM,GAAI,CACrC,EACA,CAAC,CAAC,UAAU,IAAI,aAAa,CAAC,IAAI,CAAC,UAAU;4BAC5C,CAAC,CAAC,KAAC,YAAY,IAAC,MAAM,EAAE,MAAM,GAAI;4BAClC,CAAC,CAAC,KAAC,iBAAiB,IAAC,MAAM,EAAE,MAAM,GAAI,CACxC,IACS,GACV,IACJ,CAEP,CAAC;AACJ,CAAC,CAAC;AACF,iBAAiB,CAAC,SAAS,GAAG;IAC5B,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU;IACnC,cAAc,EAAE,SAAS,CAAC,IAAI;CAC/B,CAAC;AAEF,eAAe,iBAAiB,CAAC","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { ActionRow, Row, Col, Badge } from '@openedx/paragon';\nimport { useIntl } from '@openedx/frontend-base';\n\nimport { useCourseData, useEntitlementInfo } from '@src/hooks';\n\nimport CourseCardActionSlot from '@src/slots/CourseCardActionSlot';\nimport SelectSessionButton from './SelectSessionButton';\nimport BeginCourseButton from './BeginCourseButton';\nimport ResumeButton from './ResumeButton';\nimport ViewCourseButton from './ViewCourseButton';\nimport messages from './messages';\n\nexport const CourseCardActions = ({ cardId, verifiedCourse }) => {\n const cardData = useCourseData(cardId);\n const { formatMessage } = useIntl();\n const hasStarted = cardData.enrollment.hasStarted || false;\n const { isEntitlement, isFulfilled } = useEntitlementInfo(cardData);\n const isArchived = cardData.courseRun.isArchived || false;\n\n return (\n <Row className=\"align-items-center mt-3\">\n <Col xs={12} sm={6} className=\"mb-2 mb-lg-0\">\n {/* TODO [TEMP]: Showing 2 types of badges for now. After backend connection, can anticipate 3rd type of badge as well\n Reason: Development before backend connection\n Action: Revisit after backend connection and finalize badge types and conditions for each type\n */}\n {verifiedCourse ? (\n <Badge variant=\"success\" className=\"px-3 py-2\">\n {formatMessage(messages.subsVerifiedCourseText)}\n </Badge>\n ) : (\n <span className=\"small text-info\">\n {formatMessage(messages.subsIncludedCourseText)}\n </span>\n )}\n </Col>\n\n <Col xs={12} className=\"d-flex justify-content-end\" sm={6}>\n <ActionRow data-test-id=\"CourseCardActions\">\n <CourseCardActionSlot cardId={cardId} />\n {isEntitlement && (isFulfilled\n ? <ViewCourseButton cardId={cardId} />\n : <SelectSessionButton cardId={cardId} />\n )}\n {(isArchived && !isEntitlement) && (\n <ViewCourseButton cardId={cardId} />\n )}\n {!(isArchived || isEntitlement) && (hasStarted\n ? <ResumeButton cardId={cardId} />\n : <BeginCourseButton cardId={cardId} />\n )}\n </ActionRow>\n </Col>\n </Row>\n \n );\n};\nCourseCardActions.propTypes = {\n cardId: PropTypes.string.isRequired,\n verifiedCourse: PropTypes.bool,\n};\n\nexport default CourseCardActions;\n"]}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export default messages;
|
|
2
|
+
declare namespace messages {
|
|
3
|
+
namespace beginCourse {
|
|
4
|
+
let id: string;
|
|
5
|
+
let description: string;
|
|
6
|
+
let defaultMessage: string;
|
|
7
|
+
}
|
|
8
|
+
namespace resume {
|
|
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 viewCourse {
|
|
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 selectSession {
|
|
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 subsVerifiedCourseText {
|
|
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 subsIncludedCourseText {
|
|
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
|
+
beginCourse: {
|
|
4
|
+
id: 'learner-dash.courseCard.actions.beginCourse',
|
|
5
|
+
description: 'Course card begin-course button text',
|
|
6
|
+
defaultMessage: 'Begin Course',
|
|
7
|
+
},
|
|
8
|
+
resume: {
|
|
9
|
+
id: 'learner-dash.courseCard.actions.resume',
|
|
10
|
+
description: 'Course card resume button text',
|
|
11
|
+
defaultMessage: 'Resume',
|
|
12
|
+
},
|
|
13
|
+
viewCourse: {
|
|
14
|
+
id: 'learner-dash.courseCard.actions.viewCourse',
|
|
15
|
+
description: 'Course card view-course button text',
|
|
16
|
+
defaultMessage: 'View Course',
|
|
17
|
+
},
|
|
18
|
+
selectSession: {
|
|
19
|
+
id: 'learner-dash.courseCard.actions.selectSession',
|
|
20
|
+
description: 'Course card select-session button text',
|
|
21
|
+
defaultMessage: 'Select Session',
|
|
22
|
+
},
|
|
23
|
+
subsVerifiedCourseText: {
|
|
24
|
+
id: 'subs.learner-dash.courseCard.actions.verifiedText',
|
|
25
|
+
description: 'Text for verified courses included in edx Unlimited',
|
|
26
|
+
defaultMessage: 'Verified with edX Unlimited',
|
|
27
|
+
},
|
|
28
|
+
subsIncludedCourseText: {
|
|
29
|
+
id: 'subs.learner-dash.courseCard.actions.includedText',
|
|
30
|
+
description: 'Text for unverified (audited) courses included in edx Unlimited',
|
|
31
|
+
defaultMessage: 'Included in edX Unlimited',
|
|
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/CourseCardActions/messages.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,WAAW,EAAE;QACX,EAAE,EAAE,6CAA6C;QACjD,WAAW,EAAE,sCAAsC;QACnD,cAAc,EAAE,cAAc;KAC/B;IACD,MAAM,EAAE;QACN,EAAE,EAAE,wCAAwC;QAC5C,WAAW,EAAE,gCAAgC;QAC7C,cAAc,EAAE,QAAQ;KACzB;IACD,UAAU,EAAE;QACV,EAAE,EAAE,4CAA4C;QAChD,WAAW,EAAE,qCAAqC;QAClD,cAAc,EAAE,aAAa;KAC9B;IACD,aAAa,EAAE;QACb,EAAE,EAAE,+CAA+C;QACnD,WAAW,EAAE,wCAAwC;QACrD,cAAc,EAAE,gBAAgB;KACjC;IACD,sBAAsB,EAAE;QACtB,EAAE,EAAE,mDAAmD;QACvD,WAAW,EAAE,qDAAqD;QAClE,cAAc,EAAE,6BAA6B;KAC9C;IACD,sBAAsB,EAAE;QACtB,EAAE,EAAE,mDAAmD;QACvD,WAAW,EAAE,iEAAiE;QAC9E,cAAc,EAAE,2BAA2B;KAC5C;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n beginCourse: {\n id: 'learner-dash.courseCard.actions.beginCourse',\n description: 'Course card begin-course button text',\n defaultMessage: 'Begin Course',\n },\n resume: {\n id: 'learner-dash.courseCard.actions.resume',\n description: 'Course card resume button text',\n defaultMessage: 'Resume',\n },\n viewCourse: {\n id: 'learner-dash.courseCard.actions.viewCourse',\n description: 'Course card view-course button text',\n defaultMessage: 'View Course',\n },\n selectSession: {\n id: 'learner-dash.courseCard.actions.selectSession',\n description: 'Course card select-session button text',\n defaultMessage: 'Select Session',\n },\n subsVerifiedCourseText: {\n id: 'subs.learner-dash.courseCard.actions.verifiedText',\n description: 'Text for verified courses included in edx Unlimited',\n defaultMessage: 'Verified with edX Unlimited',\n },\n subsIncludedCourseText: {\n id: 'subs.learner-dash.courseCard.actions.includedText',\n description: 'Text for unverified (audited) courses included in edx Unlimited',\n defaultMessage: 'Included in edX Unlimited',\n },\n});\n\nexport default messages;\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export function CertificateBanner({ cardId }: {
|
|
2
|
+
cardId: any;
|
|
3
|
+
}): import("react/jsx-runtime").JSX.Element | null;
|
|
4
|
+
export namespace CertificateBanner {
|
|
5
|
+
namespace propTypes {
|
|
6
|
+
let cardId: PropTypes.Validator<string>;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export default CertificateBanner;
|
|
10
|
+
import PropTypes from 'prop-types';
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
/* eslint-disable max-len */
|
|
3
|
+
import React, { useMemo } from 'react';
|
|
4
|
+
import PropTypes from 'prop-types';
|
|
5
|
+
import { MailtoLink, Hyperlink } from '@openedx/paragon';
|
|
6
|
+
import { CheckCircle } from '@openedx/paragon/icons';
|
|
7
|
+
import { useIntl } from '@openedx/frontend-base';
|
|
8
|
+
import { baseAppUrl } from '../../../../data/services/lms/urls';
|
|
9
|
+
import { useInitializeLearnerHome } from '../../../../data/hooks';
|
|
10
|
+
import { utilHooks, useCourseData } from '../../../../hooks';
|
|
11
|
+
import Banner from '../../../../components/Banner';
|
|
12
|
+
import messages from './messages';
|
|
13
|
+
const { useFormatDate } = utilHooks;
|
|
14
|
+
export const CertificateBanner = ({ cardId }) => {
|
|
15
|
+
const { data: learnerHomeData } = useInitializeLearnerHome();
|
|
16
|
+
const courseData = useCourseData(cardId);
|
|
17
|
+
const { certificate = {}, isVerified = false, isAudit = false, isPassing = false, isArchived = false, minPassingGrade = 0, progressUrl = '', } = useMemo(() => {
|
|
18
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
19
|
+
return ({
|
|
20
|
+
isVerified: (_a = courseData === null || courseData === void 0 ? void 0 : courseData.enrollment) === null || _a === void 0 ? void 0 : _a.isVerified,
|
|
21
|
+
isAudit: (_b = courseData === null || courseData === void 0 ? void 0 : courseData.enrollment) === null || _b === void 0 ? void 0 : _b.isAudit,
|
|
22
|
+
certificate: (courseData === null || courseData === void 0 ? void 0 : courseData.certificate) || {},
|
|
23
|
+
isPassing: (_c = courseData === null || courseData === void 0 ? void 0 : courseData.gradeData) === null || _c === void 0 ? void 0 : _c.isPassing,
|
|
24
|
+
isArchived: (_d = courseData === null || courseData === void 0 ? void 0 : courseData.courseRun) === null || _d === void 0 ? void 0 : _d.isArchived,
|
|
25
|
+
minPassingGrade: Math.floor(((_f = (_e = courseData === null || courseData === void 0 ? void 0 : courseData.courseRun) === null || _e === void 0 ? void 0 : _e.minPassingGrade) !== null && _f !== void 0 ? _f : 0) * 100),
|
|
26
|
+
progressUrl: baseAppUrl(((_g = courseData === null || courseData === void 0 ? void 0 : courseData.courseRun) === null || _g === void 0 ? void 0 : _g.progressUrl) || ''),
|
|
27
|
+
});
|
|
28
|
+
}, [courseData]);
|
|
29
|
+
const { supportEmail, billingEmail } = useMemo(() => {
|
|
30
|
+
var _a, _b;
|
|
31
|
+
return ({
|
|
32
|
+
supportEmail: (_a = learnerHomeData === null || learnerHomeData === void 0 ? void 0 : learnerHomeData.platformSettings) === null || _a === void 0 ? void 0 : _a.supportEmail,
|
|
33
|
+
billingEmail: (_b = learnerHomeData === null || learnerHomeData === void 0 ? void 0 : learnerHomeData.platformSettings) === null || _b === void 0 ? void 0 : _b.billingEmail,
|
|
34
|
+
});
|
|
35
|
+
}, [learnerHomeData]);
|
|
36
|
+
const { formatMessage } = useIntl();
|
|
37
|
+
const formatDate = useFormatDate();
|
|
38
|
+
const emailLink = address => _jsx(MailtoLink, { to: address, children: address });
|
|
39
|
+
if (certificate.isRestricted) {
|
|
40
|
+
return (_jsxs(Banner, { variant: "danger", children: [supportEmail ? formatMessage(messages.certRestricted, { supportEmail: emailLink(supportEmail) }) : formatMessage(messages.certRestrictedNoEmail), isVerified && ' ', isVerified && (billingEmail ? formatMessage(messages.certRefundContactBilling, { billingEmail: emailLink(billingEmail) }) : formatMessage(messages.certRefundContactBillingNoEmail))] }));
|
|
41
|
+
}
|
|
42
|
+
if (certificate.isDownloadable) {
|
|
43
|
+
return (_jsxs(Banner, { variant: "success", icon: CheckCircle, children: [formatMessage(messages.certReady), certificate.certPreviewUrl && (_jsxs(_Fragment, { children: [' ', _jsx(Hyperlink, { isInline: true, destination: baseAppUrl(certificate.certPreviewUrl), children: formatMessage(messages.viewCertificate) })] }))] }));
|
|
44
|
+
}
|
|
45
|
+
if (!isPassing) {
|
|
46
|
+
if (isAudit) {
|
|
47
|
+
return (_jsx(Banner, { children: formatMessage(messages.passingGrade, { minPassingGrade }) }));
|
|
48
|
+
}
|
|
49
|
+
if (isArchived) {
|
|
50
|
+
return (_jsxs(Banner, { variant: "warning", children: [formatMessage(messages.notEligibleForCert), ' ', _jsx(Hyperlink, { isInline: true, destination: progressUrl, children: formatMessage(messages.viewGrades) })] }));
|
|
51
|
+
}
|
|
52
|
+
return (_jsx(Banner, { variant: "warning", children: formatMessage(messages.certMinGrade, { minPassingGrade }) }));
|
|
53
|
+
}
|
|
54
|
+
if (certificate.isEarned && new Date(certificate.availableDate) > new Date()) {
|
|
55
|
+
return (_jsx(Banner, { children: formatMessage(messages.gradeAndCertReadyAfter, { availableDate: formatDate(certificate.availableDate) }) }));
|
|
56
|
+
}
|
|
57
|
+
return null;
|
|
58
|
+
};
|
|
59
|
+
CertificateBanner.propTypes = {
|
|
60
|
+
cardId: PropTypes.string.isRequired,
|
|
61
|
+
};
|
|
62
|
+
export default CertificateBanner;
|
|
63
|
+
//# sourceMappingURL=CertificateBanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CertificateBanner.js","sourceRoot":"","sources":["../../../../../src/containers/CourseCard/components/CourseCardBanners/CertificateBanner.jsx"],"names":[],"mappings":";AAAA,4BAA4B;AAC5B,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAEzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,MAAM,MAAM,wBAAwB,CAAC;AAE5C,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,EAAE,aAAa,EAAE,GAAG,SAAS,CAAC;AAEpC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;IAC9C,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,wBAAwB,EAAE,CAAC;IAC7D,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,EACJ,WAAW,GAAG,EAAE,EAChB,UAAU,GAAG,KAAK,EAClB,OAAO,GAAG,KAAK,EACf,SAAS,GAAG,KAAK,EACjB,UAAU,GAAG,KAAK,EAClB,eAAe,GAAG,CAAC,EACnB,WAAW,GAAG,EAAE,GACjB,GAAG,OAAO,CAAC,GAAG,EAAE;;QAAC,OAAA,CAAC;YACjB,UAAU,EAAE,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,UAAU,0CAAE,UAAU;YAC9C,OAAO,EAAE,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,UAAU,0CAAE,OAAO;YACxC,WAAW,EAAE,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,WAAW,KAAI,EAAE;YAC1C,SAAS,EAAE,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,SAAS,0CAAE,SAAS;YAC3C,UAAU,EAAE,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,SAAS,0CAAE,UAAU;YAC7C,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,MAAA,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,SAAS,0CAAE,eAAe,mCAAI,CAAC,CAAC,GAAG,GAAG,CAAC;YAChF,WAAW,EAAE,UAAU,CAAC,CAAA,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,SAAS,0CAAE,WAAW,KAAI,EAAE,CAAC;SAClE,CAAC,CAAA;KAAA,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAClB,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,OAAO,CAC5C,GAAG,EAAE;;QAAC,OAAA,CAAC;YACL,YAAY,EAAE,MAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,gBAAgB,0CAAE,YAAY;YAC7D,YAAY,EAAE,MAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,gBAAgB,0CAAE,YAAY;SAC9D,CAAC,CAAA;KAAA,EACF,CAAC,eAAe,CAAC,CAClB,CAAC;IACF,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IAEnC,MAAM,SAAS,GAAG,OAAO,CAAC,EAAE,CAAC,KAAC,UAAU,IAAC,EAAE,EAAE,OAAO,YAAG,OAAO,GAAc,CAAC;IAE7E,IAAI,WAAW,CAAC,YAAY,EAAE,CAAC;QAC7B,OAAO,CACL,MAAC,MAAM,IAAC,OAAO,EAAC,QAAQ,aACpB,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,cAAc,EAAE,EAAE,YAAY,EAAE,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EACjJ,UAAU,IAAI,IAAI,EAClB,UAAU,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,wBAAwB,EAAE,EAAE,YAAY,EAAE,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,+BAA+B,CAAC,CAAC,IAC9K,CACV,CAAC;IACJ,CAAC;IACD,IAAI,WAAW,CAAC,cAAc,EAAE,CAAC;QAC/B,OAAO,CACL,MAAC,MAAM,IAAC,OAAO,EAAC,SAAS,EAAC,IAAI,EAAE,WAAW,aACxC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,EACjC,WAAW,CAAC,cAAc,IAAI,CAC7B,8BACG,IAAI,EACL,KAAC,SAAS,IAAC,QAAQ,QAAC,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC,YACpE,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAC,GAC9B,IACX,CACJ,IACM,CACV,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CACL,KAAC,MAAM,cACJ,aAAa,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,eAAe,EAAE,CAAC,GACnD,CACV,CAAC;QACJ,CAAC;QACD,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,CACL,MAAC,MAAM,IAAC,OAAO,EAAC,SAAS,aACtB,aAAa,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAC1C,IAAI,EACL,KAAC,SAAS,IAAC,QAAQ,QAAC,WAAW,EAAE,WAAW,YAAG,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAa,IACvF,CACV,CAAC;QACJ,CAAC;QACD,OAAO,CACL,KAAC,MAAM,IAAC,OAAO,EAAC,SAAS,YACtB,aAAa,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,eAAe,EAAE,CAAC,GACnD,CACV,CAAC;IACJ,CAAC;IACD,IAAI,WAAW,CAAC,QAAQ,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC;QAC7E,OAAO,CACL,KAAC,MAAM,cACJ,aAAa,CACZ,QAAQ,CAAC,sBAAsB,EAC/B,EAAE,aAAa,EAAE,UAAU,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE,CACzD,GACM,CACV,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AACF,iBAAiB,CAAC,SAAS,GAAG;IAC5B,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU;CACpC,CAAC;AAEF,eAAe,iBAAiB,CAAC","sourcesContent":["/* eslint-disable max-len */\nimport React, { useMemo } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { MailtoLink, Hyperlink } from '@openedx/paragon';\nimport { CheckCircle } from '@openedx/paragon/icons';\nimport { useIntl } from '@openedx/frontend-base';\nimport { baseAppUrl } from '@src/data/services/lms/urls';\n\nimport { useInitializeLearnerHome } from '@src/data/hooks';\nimport { utilHooks, useCourseData } from '@src/hooks';\nimport Banner from '@src/components/Banner';\n\nimport messages from './messages';\n\nconst { useFormatDate } = utilHooks;\n\nexport const CertificateBanner = ({ cardId }) => {\n const { data: learnerHomeData } = useInitializeLearnerHome();\n const courseData = useCourseData(cardId);\n const {\n certificate = {},\n isVerified = false,\n isAudit = false,\n isPassing = false,\n isArchived = false,\n minPassingGrade = 0,\n progressUrl = '',\n } = useMemo(() => ({\n isVerified: courseData?.enrollment?.isVerified,\n isAudit: courseData?.enrollment?.isAudit,\n certificate: courseData?.certificate || {},\n isPassing: courseData?.gradeData?.isPassing,\n isArchived: courseData?.courseRun?.isArchived,\n minPassingGrade: Math.floor((courseData?.courseRun?.minPassingGrade ?? 0) * 100),\n progressUrl: baseAppUrl(courseData?.courseRun?.progressUrl || ''),\n }), [courseData]);\n const { supportEmail, billingEmail } = useMemo(\n () => ({\n supportEmail: learnerHomeData?.platformSettings?.supportEmail,\n billingEmail: learnerHomeData?.platformSettings?.billingEmail,\n }),\n [learnerHomeData],\n );\n const { formatMessage } = useIntl();\n const formatDate = useFormatDate();\n\n const emailLink = address => <MailtoLink to={address}>{address}</MailtoLink>;\n\n if (certificate.isRestricted) {\n return (\n <Banner variant=\"danger\">\n { supportEmail ? formatMessage(messages.certRestricted, { supportEmail: emailLink(supportEmail) }) : formatMessage(messages.certRestrictedNoEmail)}\n {isVerified && ' '}\n {isVerified && (billingEmail ? formatMessage(messages.certRefundContactBilling, { billingEmail: emailLink(billingEmail) }) : formatMessage(messages.certRefundContactBillingNoEmail))}\n </Banner>\n );\n }\n if (certificate.isDownloadable) {\n return (\n <Banner variant=\"success\" icon={CheckCircle}>\n {formatMessage(messages.certReady)}\n {certificate.certPreviewUrl && (\n <>\n {' '}\n <Hyperlink isInline destination={baseAppUrl(certificate.certPreviewUrl)}>\n {formatMessage(messages.viewCertificate)}\n </Hyperlink>\n </>\n )}\n </Banner>\n );\n }\n if (!isPassing) {\n if (isAudit) {\n return (\n <Banner>\n {formatMessage(messages.passingGrade, { minPassingGrade })}\n </Banner>\n );\n }\n if (isArchived) {\n return (\n <Banner variant=\"warning\">\n {formatMessage(messages.notEligibleForCert)}\n {' '}\n <Hyperlink isInline destination={progressUrl}>{formatMessage(messages.viewGrades)}</Hyperlink>\n </Banner>\n );\n }\n return (\n <Banner variant=\"warning\">\n {formatMessage(messages.certMinGrade, { minPassingGrade })}\n </Banner>\n );\n }\n if (certificate.isEarned && new Date(certificate.availableDate) > new Date()) {\n return (\n <Banner>\n {formatMessage(\n messages.gradeAndCertReadyAfter,\n { availableDate: formatDate(certificate.availableDate) },\n )}\n </Banner>\n );\n }\n\n return null;\n};\nCertificateBanner.propTypes = {\n cardId: PropTypes.string.isRequired,\n};\n\nexport default CertificateBanner;\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export function CourseBanner({ cardId }: {
|
|
2
|
+
cardId: any;
|
|
3
|
+
}): import("react/jsx-runtime").JSX.Element | null;
|
|
4
|
+
export namespace CourseBanner {
|
|
5
|
+
namespace propTypes {
|
|
6
|
+
let cardId: PropTypes.Validator<string>;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export default CourseBanner;
|
|
10
|
+
import PropTypes from 'prop-types';
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
/* eslint-disable max-len */
|
|
3
|
+
import React, { useMemo } from 'react';
|
|
4
|
+
import PropTypes from 'prop-types';
|
|
5
|
+
import { Hyperlink } from '@openedx/paragon';
|
|
6
|
+
import { useIntl } from '@openedx/frontend-base';
|
|
7
|
+
import { utilHooks, useCourseData } from '../../../../hooks';
|
|
8
|
+
import Banner from '../../../../components/Banner';
|
|
9
|
+
import messages from './messages';
|
|
10
|
+
export const CourseBanner = ({ cardId }) => {
|
|
11
|
+
const { formatMessage } = useIntl();
|
|
12
|
+
const courseData = useCourseData(cardId);
|
|
13
|
+
const { isVerified = false, isAuditAccessExpired = false, coursewareAccess = {}, } = useMemo(() => {
|
|
14
|
+
var _a, _b, _c;
|
|
15
|
+
return ({
|
|
16
|
+
isVerified: (_a = courseData.enrollment) === null || _a === void 0 ? void 0 : _a.isVerified,
|
|
17
|
+
isAuditAccessExpired: (_b = courseData.enrollment) === null || _b === void 0 ? void 0 : _b.isAuditAccessExpired,
|
|
18
|
+
coursewareAccess: ((_c = courseData.enrollment) === null || _c === void 0 ? void 0 : _c.coursewareAccess) || {},
|
|
19
|
+
});
|
|
20
|
+
}, [courseData]);
|
|
21
|
+
const courseRun = (courseData === null || courseData === void 0 ? void 0 : courseData.courseRun) || {};
|
|
22
|
+
const formatDate = utilHooks.useFormatDate();
|
|
23
|
+
const { hasUnmetPrerequisites, isStaff, isTooEarly } = coursewareAccess;
|
|
24
|
+
if (isVerified) {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
return (_jsxs(_Fragment, { children: [isAuditAccessExpired
|
|
28
|
+
&& (_jsxs(Banner, { children: [formatMessage(messages.auditAccessExpired), ' ', _jsx(Hyperlink, { isInline: true, destination: "", children: formatMessage(messages.findAnotherCourse) })] })), (!isStaff && isTooEarly && courseRun.startDate) && (_jsx(Banner, { children: formatMessage(messages.courseHasNotStarted, {
|
|
29
|
+
startDate: formatDate(courseRun.startDate),
|
|
30
|
+
}) })), (!isStaff && hasUnmetPrerequisites) && (_jsx(Banner, { children: formatMessage(messages.prerequisitesNotMet) }))] }));
|
|
31
|
+
};
|
|
32
|
+
CourseBanner.propTypes = {
|
|
33
|
+
cardId: PropTypes.string.isRequired,
|
|
34
|
+
};
|
|
35
|
+
export default CourseBanner;
|
|
36
|
+
//# sourceMappingURL=CourseBanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CourseBanner.js","sourceRoot":"","sources":["../../../../../src/containers/CourseCard/components/CourseCardBanners/CourseBanner.jsx"],"names":[],"mappings":";AAAA,4BAA4B;AAC5B,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,MAAM,MAAM,wBAAwB,CAAC;AAC5C,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;IACzC,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,EACJ,UAAU,GAAG,KAAK,EAClB,oBAAoB,GAAG,KAAK,EAC5B,gBAAgB,GAAG,EAAE,GACtB,GAAG,OAAO,CAAC,GAAG,EAAE;;QAAC,OAAA,CAAC;YACjB,UAAU,EAAE,MAAA,UAAU,CAAC,UAAU,0CAAE,UAAU;YAC7C,oBAAoB,EAAE,MAAA,UAAU,CAAC,UAAU,0CAAE,oBAAoB;YACjE,gBAAgB,EAAE,CAAA,MAAA,UAAU,CAAC,UAAU,0CAAE,gBAAgB,KAAI,EAAE;SAChE,CAAC,CAAA;KAAA,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAClB,MAAM,SAAS,GAAG,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,SAAS,KAAI,EAAE,CAAC;IAC9C,MAAM,UAAU,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC;IAE7C,MAAM,EAAE,qBAAqB,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,gBAAgB,CAAC;IAExE,IAAI,UAAU,EAAE,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IAEhC,OAAO,CACL,8BACG,oBAAoB;mBAChB,CACD,MAAC,MAAM,eACJ,aAAa,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAC1C,IAAI,EACL,KAAC,SAAS,IAAC,QAAQ,QAAC,WAAW,EAAC,EAAE,YAC/B,aAAa,CAAC,QAAQ,CAAC,iBAAiB,CAAC,GAChC,IACL,CACV,EAEF,CAAC,CAAC,OAAO,IAAI,UAAU,IAAI,SAAS,CAAC,SAAS,CAAC,IAAI,CAClD,KAAC,MAAM,cACJ,aAAa,CAAC,QAAQ,CAAC,mBAAmB,EAAE;oBAC3C,SAAS,EAAE,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC;iBAC3C,CAAC,GACK,CACV,EAEA,CAAC,CAAC,OAAO,IAAI,qBAAqB,CAAC,IAAI,CACtC,KAAC,MAAM,cAAE,aAAa,CAAC,QAAQ,CAAC,mBAAmB,CAAC,GAAU,CAC/D,IACA,CACJ,CAAC;AACJ,CAAC,CAAC;AACF,YAAY,CAAC,SAAS,GAAG;IACvB,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU;CACpC,CAAC;AAEF,eAAe,YAAY,CAAC","sourcesContent":["/* eslint-disable max-len */\nimport React, { useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport { Hyperlink } from '@openedx/paragon';\nimport { useIntl } from '@openedx/frontend-base';\n\nimport { utilHooks, useCourseData } from '@src/hooks';\nimport Banner from '@src/components/Banner';\nimport messages from './messages';\n\nexport const CourseBanner = ({ cardId }) => {\n const { formatMessage } = useIntl();\n const courseData = useCourseData(cardId);\n const {\n isVerified = false,\n isAuditAccessExpired = false,\n coursewareAccess = {},\n } = useMemo(() => ({\n isVerified: courseData.enrollment?.isVerified,\n isAuditAccessExpired: courseData.enrollment?.isAuditAccessExpired,\n coursewareAccess: courseData.enrollment?.coursewareAccess || {},\n }), [courseData]);\n const courseRun = courseData?.courseRun || {};\n const formatDate = utilHooks.useFormatDate();\n\n const { hasUnmetPrerequisites, isStaff, isTooEarly } = coursewareAccess;\n\n if (isVerified) { return null; }\n\n return (\n <>\n {isAuditAccessExpired\n && (\n <Banner>\n {formatMessage(messages.auditAccessExpired)}\n {' '}\n <Hyperlink isInline destination=\"\">\n {formatMessage(messages.findAnotherCourse)}\n </Hyperlink>\n </Banner>\n )}\n\n {(!isStaff && isTooEarly && courseRun.startDate) && (\n <Banner>\n {formatMessage(messages.courseHasNotStarted, {\n startDate: formatDate(courseRun.startDate),\n })}\n </Banner>\n )}\n\n {(!isStaff && hasUnmetPrerequisites) && (\n <Banner>{formatMessage(messages.prerequisitesNotMet)}</Banner>\n )}\n </>\n );\n};\nCourseBanner.propTypes = {\n cardId: PropTypes.string.isRequired,\n};\n\nexport default CourseBanner;\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export const statusComponents: any;
|
|
2
|
+
export function useCreditBannerData(cardId: any): {
|
|
3
|
+
ContentComponent: {
|
|
4
|
+
({ cardId }: {
|
|
5
|
+
cardId: any;
|
|
6
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
propTypes: {
|
|
8
|
+
cardId: import("prop-types").Validator<string>;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
error: any;
|
|
12
|
+
supportEmail: any;
|
|
13
|
+
} | null;
|
|
14
|
+
declare namespace _default {
|
|
15
|
+
export { useCreditBannerData };
|
|
16
|
+
}
|
|
17
|
+
export default _default;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { useMemo } from 'react';
|
|
2
|
+
import { useInitializeLearnerHome } from '../../../../../data/hooks';
|
|
3
|
+
import { StrictDict } from '../../../../../utils';
|
|
4
|
+
import { useCourseData } from '../../../../../hooks';
|
|
5
|
+
import ApprovedContent from './views/ApprovedContent';
|
|
6
|
+
import EligibleContent from './views/EligibleContent';
|
|
7
|
+
import MustRequestContent from './views/MustRequestContent';
|
|
8
|
+
import PendingContent from './views/PendingContent';
|
|
9
|
+
import RejectedContent from './views/RejectedContent';
|
|
10
|
+
export const statusComponents = StrictDict({
|
|
11
|
+
pending: PendingContent,
|
|
12
|
+
approved: ApprovedContent,
|
|
13
|
+
rejected: RejectedContent,
|
|
14
|
+
});
|
|
15
|
+
export const useCreditBannerData = (cardId) => {
|
|
16
|
+
var _a;
|
|
17
|
+
const courseData = useCourseData(cardId);
|
|
18
|
+
const { data: learnerHomeData } = useInitializeLearnerHome();
|
|
19
|
+
const supportEmail = useMemo(() => { var _a; return ((_a = learnerHomeData === null || learnerHomeData === void 0 ? void 0 : learnerHomeData.platformSettings) === null || _a === void 0 ? void 0 : _a.supportEmail); }, [learnerHomeData]);
|
|
20
|
+
const credit = useMemo(() => {
|
|
21
|
+
const creditData = courseData === null || courseData === void 0 ? void 0 : courseData.credit;
|
|
22
|
+
if (!creditData || Object.keys(creditData).length === 0) {
|
|
23
|
+
return { isEligible: false };
|
|
24
|
+
}
|
|
25
|
+
return {
|
|
26
|
+
isEligible: true,
|
|
27
|
+
providerStatusUrl: creditData.providerStatusUrl,
|
|
28
|
+
providerName: creditData.providerName,
|
|
29
|
+
providerId: creditData.providerId,
|
|
30
|
+
error: creditData.error,
|
|
31
|
+
purchased: creditData.purchased,
|
|
32
|
+
requestStatus: creditData.requestStatus,
|
|
33
|
+
};
|
|
34
|
+
}, [courseData]);
|
|
35
|
+
if (!credit.isEligible || !((_a = courseData === null || courseData === void 0 ? void 0 : courseData.credit) === null || _a === void 0 ? void 0 : _a.isEligible)) {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
const { error, purchased, requestStatus } = credit;
|
|
39
|
+
let ContentComponent = EligibleContent;
|
|
40
|
+
if (purchased) {
|
|
41
|
+
if (requestStatus == null) {
|
|
42
|
+
ContentComponent = MustRequestContent;
|
|
43
|
+
}
|
|
44
|
+
else if (Object.keys(statusComponents).includes(requestStatus)) {
|
|
45
|
+
ContentComponent = statusComponents[requestStatus];
|
|
46
|
+
}
|
|
47
|
+
// Current behavior is to show Elligible State if unknown request status is returned
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
ContentComponent,
|
|
51
|
+
error,
|
|
52
|
+
supportEmail,
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
export default {
|
|
56
|
+
useCreditBannerData,
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../../../../src/containers/CourseCard/components/CourseCardBanners/CreditBanner/hooks.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,OAAO,eAAe,MAAM,yBAAyB,CAAC;AACtD,OAAO,eAAe,MAAM,yBAAyB,CAAC;AACtD,OAAO,kBAAkB,MAAM,4BAA4B,CAAC;AAC5D,OAAO,cAAc,MAAM,wBAAwB,CAAC;AACpD,OAAO,eAAe,MAAM,yBAAyB,CAAC;AAEtD,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAU,CAAC;IACzC,OAAO,EAAE,cAAc;IACvB,QAAQ,EAAE,eAAe;IACzB,QAAQ,EAAE,eAAe;CAC1B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,MAAM,EAAE,EAAE;;IAC5C,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,wBAAwB,EAAE,CAAC;IAC7D,MAAM,YAAY,GAAG,OAAO,CAC1B,GAAG,EAAE,WAAC,OAAA,CAAC,MAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,gBAAgB,0CAAE,YAAY,CAAC,CAAA,EAAA,EACvD,CAAC,eAAe,CAAC,CAClB,CAAC;IAEF,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE;QAC1B,MAAM,UAAU,GAAG,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,CAAC;QACtC,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxD,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;QAC/B,CAAC;QACD,OAAO;YACL,UAAU,EAAE,IAAI;YAChB,iBAAiB,EAAE,UAAU,CAAC,iBAAiB;YAC/C,YAAY,EAAE,UAAU,CAAC,YAAY;YACrC,UAAU,EAAE,UAAU,CAAC,UAAU;YACjC,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,SAAS,EAAE,UAAU,CAAC,SAAS;YAC/B,aAAa,EAAE,UAAU,CAAC,aAAa;SACxC,CAAC;IACJ,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IACjB,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,CAAA,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,0CAAE,UAAU,CAAA,EAAE,CAAC;QAC1D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC;IACnD,IAAI,gBAAgB,GAAG,eAAe,CAAC;IACvC,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,aAAa,IAAI,IAAI,EAAE,CAAC;YAC1B,gBAAgB,GAAG,kBAAkB,CAAC;QACxC,CAAC;aAAM,IAAI,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YACjE,gBAAgB,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;QACrD,CAAC;QACD,oFAAoF;IACtF,CAAC;IACD,OAAO;QACL,gBAAgB;QAChB,KAAK;QACL,YAAY;KACb,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe;IACb,mBAAmB;CACpB,CAAC","sourcesContent":["import { useMemo } from 'react';\nimport { useInitializeLearnerHome } from '@src/data/hooks';\nimport { StrictDict } from '@src/utils';\n\nimport { useCourseData } from '@src/hooks';\n\nimport ApprovedContent from './views/ApprovedContent';\nimport EligibleContent from './views/EligibleContent';\nimport MustRequestContent from './views/MustRequestContent';\nimport PendingContent from './views/PendingContent';\nimport RejectedContent from './views/RejectedContent';\n\nexport const statusComponents = StrictDict({\n pending: PendingContent,\n approved: ApprovedContent,\n rejected: RejectedContent,\n});\n\nexport const useCreditBannerData = (cardId) => {\n const courseData = useCourseData(cardId);\n const { data: learnerHomeData } = useInitializeLearnerHome();\n const supportEmail = useMemo(\n () => (learnerHomeData?.platformSettings?.supportEmail),\n [learnerHomeData],\n );\n\n const credit = useMemo(() => {\n const creditData = courseData?.credit;\n if (!creditData || Object.keys(creditData).length === 0) {\n return { isEligible: false };\n }\n return {\n isEligible: true,\n providerStatusUrl: creditData.providerStatusUrl,\n providerName: creditData.providerName,\n providerId: creditData.providerId,\n error: creditData.error,\n purchased: creditData.purchased,\n requestStatus: creditData.requestStatus,\n };\n }, [courseData]);\n if (!credit.isEligible || !courseData?.credit?.isEligible) {\n return null;\n }\n\n const { error, purchased, requestStatus } = credit;\n let ContentComponent = EligibleContent;\n if (purchased) {\n if (requestStatus == null) {\n ContentComponent = MustRequestContent;\n } else if (Object.keys(statusComponents).includes(requestStatus)) {\n ContentComponent = statusComponents[requestStatus];\n }\n // Current behavior is to show Elligible State if unknown request status is returned\n }\n return {\n ContentComponent,\n error,\n supportEmail,\n };\n};\n\nexport default {\n useCreditBannerData,\n};\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export function CreditBanner({ cardId }: {
|
|
2
|
+
cardId: any;
|
|
3
|
+
}): import("react/jsx-runtime").JSX.Element | null;
|
|
4
|
+
export namespace CreditBanner {
|
|
5
|
+
namespace propTypes {
|
|
6
|
+
let cardId: PropTypes.Validator<string>;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export default CreditBanner;
|
|
10
|
+
import PropTypes from 'prop-types';
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import PropTypes from 'prop-types';
|
|
4
|
+
import { useIntl } from '@openedx/frontend-base';
|
|
5
|
+
import Banner from '../../../../../components/Banner';
|
|
6
|
+
import { MailtoLink } from '@openedx/paragon';
|
|
7
|
+
import hooks from './hooks';
|
|
8
|
+
import messages from './messages';
|
|
9
|
+
export const CreditBanner = ({ cardId }) => {
|
|
10
|
+
const { formatMessage } = useIntl();
|
|
11
|
+
const hookData = hooks.useCreditBannerData(cardId);
|
|
12
|
+
if (hookData === null) {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
const { ContentComponent, error, supportEmail } = hookData;
|
|
16
|
+
const supportEmailLink = (_jsx(MailtoLink, { to: supportEmail, children: supportEmail }));
|
|
17
|
+
return (_jsxs(Banner, Object.assign({}, (error && { variant: 'danger' }), { children: [error && (_jsx("p", { className: "credit-error-msg", "data-testid": "credit-error-msg", children: supportEmail ? formatMessage(messages.error, { supportEmailLink }) : formatMessage(messages.errorNoEmail) })), _jsx(ContentComponent, { cardId: cardId })] })));
|
|
18
|
+
};
|
|
19
|
+
CreditBanner.propTypes = {
|
|
20
|
+
cardId: PropTypes.string.isRequired,
|
|
21
|
+
};
|
|
22
|
+
export default CreditBanner;
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/containers/CourseCard/components/CourseCardBanners/CreditBanner/index.jsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,MAAM,MAAM,wBAAwB,CAAC;AAE5C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,MAAM,SAAS,CAAC;AAC5B,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;IACzC,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAG,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACnD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,QAAQ,CAAC;IAC3D,MAAM,gBAAgB,GAAG,CAAC,KAAC,UAAU,IAAC,EAAE,EAAE,YAAY,YAAG,YAAY,GAAc,CAAC,CAAC;IACrF,OAAO,CACL,MAAC,MAAM,oBAAK,CAAC,KAAK,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,eACzC,KAAK,IAAI,CACR,YAAG,SAAS,EAAC,kBAAkB,iBAAa,kBAAkB,YAC3D,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC,GACxG,CACL,EACD,KAAC,gBAAgB,IAAC,MAAM,EAAE,MAAM,GAAI,KAC7B,CACV,CAAC;AACJ,CAAC,CAAC;AACF,YAAY,CAAC,SAAS,GAAG;IACvB,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU;CACpC,CAAC;AAEF,eAAe,YAAY,CAAC","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { useIntl } from '@openedx/frontend-base';\nimport Banner from '@src/components/Banner';\n\nimport { MailtoLink } from '@openedx/paragon';\nimport hooks from './hooks';\nimport messages from './messages';\n\nexport const CreditBanner = ({ cardId }) => {\n const { formatMessage } = useIntl();\n const hookData = hooks.useCreditBannerData(cardId);\n if (hookData === null) {\n return null;\n }\n\n const { ContentComponent, error, supportEmail } = hookData;\n const supportEmailLink = (<MailtoLink to={supportEmail}>{supportEmail}</MailtoLink>);\n return (\n <Banner {...(error && { variant: 'danger' })}>\n {error && (\n <p className=\"credit-error-msg\" data-testid=\"credit-error-msg\">\n {supportEmail ? formatMessage(messages.error, { supportEmailLink }) : formatMessage(messages.errorNoEmail)}\n </p>\n )}\n <ContentComponent cardId={cardId} />\n </Banner>\n );\n};\nCreditBanner.propTypes = {\n cardId: PropTypes.string.isRequired,\n};\n\nexport default CreditBanner;\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export default messages;
|
|
2
|
+
declare namespace messages {
|
|
3
|
+
namespace error {
|
|
4
|
+
let id: string;
|
|
5
|
+
let description: string;
|
|
6
|
+
let defaultMessage: string;
|
|
7
|
+
}
|
|
8
|
+
namespace errorNoEmail {
|
|
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
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { defineMessages } from '@openedx/frontend-base';
|
|
2
|
+
const messages = defineMessages({
|
|
3
|
+
error: {
|
|
4
|
+
id: 'learner-dash.courseCard.banners.credit.error',
|
|
5
|
+
description: 'Error message for credit transaction with support email link',
|
|
6
|
+
defaultMessage: 'An error occurred with this transaction. For help, contact {supportEmailLink}.',
|
|
7
|
+
},
|
|
8
|
+
errorNoEmail: {
|
|
9
|
+
id: 'learner-dash.courseCard.banners.credit.errorNoEmail',
|
|
10
|
+
description: 'Error message for credit transaction without support email',
|
|
11
|
+
defaultMessage: 'An error occurred with this transaction.',
|
|
12
|
+
},
|
|
13
|
+
});
|
|
14
|
+
export default messages;
|
|
15
|
+
//# sourceMappingURL=messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../../../../src/containers/CourseCard/components/CourseCardBanners/CreditBanner/messages.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,KAAK,EAAE;QACL,EAAE,EAAE,8CAA8C;QAClD,WAAW,EAAE,8DAA8D;QAC3E,cAAc,EAAE,iFAAiF;KAClG;IACD,YAAY,EAAE;QACZ,EAAE,EAAE,qDAAqD;QACzD,WAAW,EAAE,4DAA4D;QACzE,cAAc,EAAE,0CAA0C;KAC3D;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n error: {\n id: 'learner-dash.courseCard.banners.credit.error',\n description: 'Error message for credit transaction with support email link',\n defaultMessage: 'An error occurred with this transaction. For help, contact {supportEmailLink}.',\n },\n errorNoEmail: {\n id: 'learner-dash.courseCard.banners.credit.errorNoEmail',\n description: 'Error message for credit transaction without support email',\n defaultMessage: 'An error occurred with this transaction.',\n },\n});\n\nexport default messages;\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export function ApprovedContent({ cardId }: {
|
|
2
|
+
cardId: any;
|
|
3
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
export namespace ApprovedContent {
|
|
5
|
+
namespace propTypes {
|
|
6
|
+
let cardId: PropTypes.Validator<string>;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export default ApprovedContent;
|
|
10
|
+
import PropTypes from 'prop-types';
|