@openedx/frontend-app-catalog 1.0.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +661 -0
- package/README.rst +300 -0
- package/dist/Main.d.ts +3 -0
- package/dist/Main.js +8 -0
- package/dist/Main.js.map +1 -0
- package/dist/app.d.ts +3 -0
- package/dist/app.js +22 -0
- package/dist/app.js.map +1 -0
- package/dist/assets/images/no-course-image.svg +4 -0
- package/dist/assets/scss/_animations.scss +23 -0
- package/dist/catalog/CatalogPage.d.ts +2 -0
- package/dist/catalog/CatalogPage.js +64 -0
- package/dist/catalog/CatalogPage.js.map +1 -0
- package/dist/catalog/hooks/types.d.ts +24 -0
- package/dist/catalog/hooks/types.js +2 -0
- package/dist/catalog/hooks/types.js.map +1 -0
- package/dist/catalog/hooks/useCatalog.d.ts +29 -0
- package/dist/catalog/hooks/useCatalog.js +52 -0
- package/dist/catalog/hooks/useCatalog.js.map +1 -0
- package/dist/catalog/hooks/useCourseData.d.ts +12 -0
- package/dist/catalog/hooks/useCourseData.js +21 -0
- package/dist/catalog/hooks/useCourseData.js.map +1 -0
- package/dist/catalog/hooks/useDebouncedSearchInput.d.ts +7 -0
- package/dist/catalog/hooks/useDebouncedSearchInput.js +26 -0
- package/dist/catalog/hooks/useDebouncedSearchInput.js.map +1 -0
- package/dist/catalog/hooks/useFilter.d.ts +18 -0
- package/dist/catalog/hooks/useFilter.js +58 -0
- package/dist/catalog/hooks/useFilter.js.map +1 -0
- package/dist/catalog/hooks/usePagination.d.ts +13 -0
- package/dist/catalog/hooks/usePagination.js +25 -0
- package/dist/catalog/hooks/usePagination.js.map +1 -0
- package/dist/catalog/hooks/useSearch.d.ts +16 -0
- package/dist/catalog/hooks/useSearch.js +63 -0
- package/dist/catalog/hooks/useSearch.js.map +1 -0
- package/dist/catalog/messages.d.ts +68 -0
- package/dist/catalog/messages.js +70 -0
- package/dist/catalog/messages.js.map +1 -0
- package/dist/catalog/types.d.ts +6 -0
- package/dist/catalog/types.js +2 -0
- package/dist/catalog/types.js.map +1 -0
- package/dist/catalog/utils.d.ts +25 -0
- package/dist/catalog/utils.js +82 -0
- package/dist/catalog/utils.js.map +1 -0
- package/dist/constants.d.ts +18 -0
- package/dist/constants.js +15 -0
- package/dist/constants.js.map +1 -0
- package/dist/course-about/CourseAboutPage.d.ts +2 -0
- package/dist/course-about/CourseAboutPage.js +39 -0
- package/dist/course-about/CourseAboutPage.js.map +1 -0
- package/dist/course-about/CourseAboutPage.scss +36 -0
- package/dist/course-about/course-intro/CourseIntro.d.ts +4 -0
- package/dist/course-about/course-intro/CourseIntro.js +19 -0
- package/dist/course-about/course-intro/CourseIntro.js.map +1 -0
- package/dist/course-about/course-intro/components/EnrolledStatus.d.ts +2 -0
- package/dist/course-about/course-intro/components/EnrolledStatus.js +13 -0
- package/dist/course-about/course-intro/components/EnrolledStatus.js.map +1 -0
- package/dist/course-about/course-intro/components/EnrollmentButton.d.ts +2 -0
- package/dist/course-about/course-intro/components/EnrollmentButton.js +12 -0
- package/dist/course-about/course-intro/components/EnrollmentButton.js.map +1 -0
- package/dist/course-about/course-intro/components/StatusMessage.d.ts +2 -0
- package/dist/course-about/course-intro/components/StatusMessage.js +12 -0
- package/dist/course-about/course-intro/components/StatusMessage.js.map +1 -0
- package/dist/course-about/course-intro/components/index.d.ts +3 -0
- package/dist/course-about/course-intro/components/index.js +4 -0
- package/dist/course-about/course-intro/components/index.js.map +1 -0
- package/dist/course-about/course-intro/components/types.d.ts +18 -0
- package/dist/course-about/course-intro/components/types.js +2 -0
- package/dist/course-about/course-intro/components/types.js.map +1 -0
- package/dist/course-about/course-intro/constants.d.ts +10 -0
- package/dist/course-about/course-intro/constants.js +12 -0
- package/dist/course-about/course-intro/constants.js.map +1 -0
- package/dist/course-about/course-intro/course-media/CourseMedia.d.ts +3 -0
- package/dist/course-about/course-intro/course-media/CourseMedia.js +17 -0
- package/dist/course-about/course-intro/course-media/CourseMedia.js.map +1 -0
- package/dist/course-about/course-intro/course-media/CourseMedia.scss +24 -0
- package/dist/course-about/course-intro/course-media/messages.d.ts +8 -0
- package/dist/course-about/course-intro/course-media/messages.js +10 -0
- package/dist/course-about/course-intro/course-media/messages.js.map +1 -0
- package/dist/course-about/course-intro/course-media/types.d.ts +8 -0
- package/dist/course-about/course-intro/course-media/types.js +2 -0
- package/dist/course-about/course-intro/course-media/types.js.map +1 -0
- package/dist/course-about/course-intro/course-media/utils.d.ts +12 -0
- package/dist/course-about/course-intro/course-media/utils.js +18 -0
- package/dist/course-about/course-intro/course-media/utils.js.map +1 -0
- package/dist/course-about/course-intro/hooks/index.d.ts +2 -0
- package/dist/course-about/course-intro/hooks/index.js +3 -0
- package/dist/course-about/course-intro/hooks/index.js.map +1 -0
- package/dist/course-about/course-intro/hooks/types.d.ts +16 -0
- package/dist/course-about/course-intro/hooks/types.js +2 -0
- package/dist/course-about/course-intro/hooks/types.js.map +1 -0
- package/dist/course-about/course-intro/hooks/useEnrollmentActions.d.ts +7 -0
- package/dist/course-about/course-intro/hooks/useEnrollmentActions.js +47 -0
- package/dist/course-about/course-intro/hooks/useEnrollmentActions.js.map +1 -0
- package/dist/course-about/course-intro/hooks/useEnrollmentStatus.d.ts +4 -0
- package/dist/course-about/course-intro/hooks/useEnrollmentStatus.js +35 -0
- package/dist/course-about/course-intro/hooks/useEnrollmentStatus.js.map +1 -0
- package/dist/course-about/course-intro/messages.d.ts +43 -0
- package/dist/course-about/course-intro/messages.js +45 -0
- package/dist/course-about/course-intro/messages.js.map +1 -0
- package/dist/course-about/course-intro/utils.d.ts +4 -0
- package/dist/course-about/course-intro/utils.js +7 -0
- package/dist/course-about/course-intro/utils.js.map +1 -0
- package/dist/course-about/course-overview/index.d.ts +2 -0
- package/dist/course-about/course-overview/index.js +21 -0
- package/dist/course-about/course-overview/index.js.map +1 -0
- package/dist/course-about/course-overview/types.d.ts +4 -0
- package/dist/course-about/course-overview/types.js +2 -0
- package/dist/course-about/course-overview/types.js.map +1 -0
- package/dist/course-about/course-overview/utils.d.ts +6 -0
- package/dist/course-about/course-overview/utils.js +12 -0
- package/dist/course-about/course-overview/utils.js.map +1 -0
- package/dist/course-about/course-sidebar/CourseSidebar.d.ts +5 -0
- package/dist/course-about/course-sidebar/CourseSidebar.js +7 -0
- package/dist/course-about/course-sidebar/CourseSidebar.js.map +1 -0
- package/dist/course-about/course-sidebar/sidebar-details/SidebarDetails.d.ts +5 -0
- package/dist/course-about/course-sidebar/sidebar-details/SidebarDetails.js +38 -0
- package/dist/course-about/course-sidebar/sidebar-details/SidebarDetails.js.map +1 -0
- package/dist/course-about/course-sidebar/sidebar-details/SidebarDetailsItem.d.ts +3 -0
- package/dist/course-about/course-sidebar/sidebar-details/SidebarDetailsItem.js +5 -0
- package/dist/course-about/course-sidebar/sidebar-details/SidebarDetailsItem.js.map +1 -0
- package/dist/course-about/course-sidebar/sidebar-details/constants.d.ts +7 -0
- package/dist/course-about/course-sidebar/sidebar-details/constants.js +8 -0
- package/dist/course-about/course-sidebar/sidebar-details/constants.js.map +1 -0
- package/dist/course-about/course-sidebar/sidebar-details/messages.d.ts +43 -0
- package/dist/course-about/course-sidebar/sidebar-details/messages.js +45 -0
- package/dist/course-about/course-sidebar/sidebar-details/messages.js.map +1 -0
- package/dist/course-about/course-sidebar/sidebar-details/types.d.ts +8 -0
- package/dist/course-about/course-sidebar/sidebar-details/types.js +2 -0
- package/dist/course-about/course-sidebar/sidebar-details/types.js.map +1 -0
- package/dist/course-about/course-sidebar/sidebar-details/utils.d.ts +37 -0
- package/dist/course-about/course-sidebar/sidebar-details/utils.js +49 -0
- package/dist/course-about/course-sidebar/sidebar-details/utils.js.map +1 -0
- package/dist/course-about/course-sidebar/sidebar-social/SidebarSocial.d.ts +5 -0
- package/dist/course-about/course-sidebar/sidebar-social/SidebarSocial.js +14 -0
- package/dist/course-about/course-sidebar/sidebar-social/SidebarSocial.js.map +1 -0
- package/dist/course-about/course-sidebar/sidebar-social/SocialLinks.d.ts +5 -0
- package/dist/course-about/course-sidebar/sidebar-social/SocialLinks.js +5 -0
- package/dist/course-about/course-sidebar/sidebar-social/SocialLinks.js.map +1 -0
- package/dist/course-about/course-sidebar/sidebar-social/messages.d.ts +43 -0
- package/dist/course-about/course-sidebar/sidebar-social/messages.js +45 -0
- package/dist/course-about/course-sidebar/sidebar-social/messages.js.map +1 -0
- package/dist/course-about/course-sidebar/sidebar-social/types.d.ts +7 -0
- package/dist/course-about/course-sidebar/sidebar-social/types.js +2 -0
- package/dist/course-about/course-sidebar/sidebar-social/types.js.map +1 -0
- package/dist/course-about/course-sidebar/sidebar-social/utils.d.ts +23 -0
- package/dist/course-about/course-sidebar/sidebar-social/utils.js +71 -0
- package/dist/course-about/course-sidebar/sidebar-social/utils.js.map +1 -0
- package/dist/course-about/data/api.d.ts +10 -0
- package/dist/course-about/data/api.js +36 -0
- package/dist/course-about/data/api.js.map +1 -0
- package/dist/course-about/data/hooks.d.ts +3 -0
- package/dist/course-about/data/hooks.js +35 -0
- package/dist/course-about/data/hooks.js.map +1 -0
- package/dist/course-about/data/types.d.ts +10 -0
- package/dist/course-about/data/types.js +2 -0
- package/dist/course-about/data/types.js.map +1 -0
- package/dist/course-about/data/urls.d.ts +8 -0
- package/dist/course-about/data/urls.js +10 -0
- package/dist/course-about/data/urls.js.map +1 -0
- package/dist/course-about/layout.d.ts +31 -0
- package/dist/course-about/layout.js +11 -0
- package/dist/course-about/layout.js.map +1 -0
- package/dist/course-about/messages.d.ts +18 -0
- package/dist/course-about/messages.js +20 -0
- package/dist/course-about/messages.js.map +1 -0
- package/dist/course-about/types.d.ts +125 -0
- package/dist/course-about/types.js +2 -0
- package/dist/course-about/types.js.map +1 -0
- package/dist/data/course-list-search/api.d.ts +6 -0
- package/dist/data/course-list-search/api.js +33 -0
- package/dist/data/course-list-search/api.js.map +1 -0
- package/dist/data/course-list-search/constants.d.ts +2 -0
- package/dist/data/course-list-search/constants.js +3 -0
- package/dist/data/course-list-search/constants.js.map +1 -0
- package/dist/data/course-list-search/hooks.d.ts +5 -0
- package/dist/data/course-list-search/hooks.js +47 -0
- package/dist/data/course-list-search/hooks.js.map +1 -0
- package/dist/data/course-list-search/types.d.ts +65 -0
- package/dist/data/course-list-search/types.js +2 -0
- package/dist/data/course-list-search/types.js.map +1 -0
- package/dist/data/course-list-search/urls.d.ts +2 -0
- package/dist/data/course-list-search/urls.js +4 -0
- package/dist/data/course-list-search/urls.js.map +1 -0
- package/dist/data/course-list-search/utils.d.ts +9 -0
- package/dist/data/course-list-search/utils.js +40 -0
- package/dist/data/course-list-search/utils.js.map +1 -0
- package/dist/generic/alert-notification/index.d.ts +2 -0
- package/dist/generic/alert-notification/index.js +5 -0
- package/dist/generic/alert-notification/index.js.map +1 -0
- package/dist/generic/alert-notification/types.d.ts +6 -0
- package/dist/generic/alert-notification/types.js +2 -0
- package/dist/generic/alert-notification/types.js.map +1 -0
- package/dist/generic/course-card/index.d.ts +2 -0
- package/dist/generic/course-card/index.js +27 -0
- package/dist/generic/course-card/index.js.map +1 -0
- package/dist/generic/course-card/messages.d.ts +8 -0
- package/dist/generic/course-card/messages.js +10 -0
- package/dist/generic/course-card/messages.js.map +1 -0
- package/dist/generic/course-card/types.d.ts +35 -0
- package/dist/generic/course-card/types.js +2 -0
- package/dist/generic/course-card/types.js.map +1 -0
- package/dist/generic/course-card/utils.d.ts +10 -0
- package/dist/generic/course-card/utils.js +24 -0
- package/dist/generic/course-card/utils.js.map +1 -0
- package/dist/generic/index.d.ts +5 -0
- package/dist/generic/index.js +6 -0
- package/dist/generic/index.js.map +1 -0
- package/dist/generic/loading-spinner/index.d.ts +3 -0
- package/dist/generic/loading-spinner/index.js +10 -0
- package/dist/generic/loading-spinner/index.js.map +1 -0
- package/dist/generic/loading-spinner/messages.d.ts +8 -0
- package/dist/generic/loading-spinner/messages.js +10 -0
- package/dist/generic/loading-spinner/messages.js.map +1 -0
- package/dist/generic/loading-spinner/types.d.ts +3 -0
- package/dist/generic/loading-spinner/types.js +2 -0
- package/dist/generic/loading-spinner/types.js.map +1 -0
- package/dist/generic/sub-header/index.d.ts +2 -0
- package/dist/generic/sub-header/index.js +4 -0
- package/dist/generic/sub-header/index.js.map +1 -0
- package/dist/generic/sub-header/types.d.ts +4 -0
- package/dist/generic/sub-header/types.js +2 -0
- package/dist/generic/sub-header/types.js.map +1 -0
- package/dist/generic/video-modal/index.d.ts +2 -0
- package/dist/generic/video-modal/index.js +10 -0
- package/dist/generic/video-modal/index.js.map +1 -0
- package/dist/generic/video-modal/messages.d.ts +13 -0
- package/dist/generic/video-modal/messages.js +15 -0
- package/dist/generic/video-modal/messages.js.map +1 -0
- package/dist/generic/video-modal/types.d.ts +6 -0
- package/dist/generic/video-modal/types.js +2 -0
- package/dist/generic/video-modal/types.js.map +1 -0
- package/dist/home/HomePage.d.ts +2 -0
- package/dist/home/HomePage.js +14 -0
- package/dist/home/HomePage.js.map +1 -0
- package/dist/home/components/courses-list/CoursesList.d.ts +2 -0
- package/dist/home/components/courses-list/CoursesList.js +50 -0
- package/dist/home/components/courses-list/CoursesList.js.map +1 -0
- package/dist/home/components/courses-list/messages.d.ts +23 -0
- package/dist/home/components/courses-list/messages.js +25 -0
- package/dist/home/components/courses-list/messages.js.map +1 -0
- package/dist/home/components/home-banner/HomeBanner.d.ts +2 -0
- package/dist/home/components/home-banner/HomeBanner.js +25 -0
- package/dist/home/components/home-banner/HomeBanner.js.map +1 -0
- package/dist/home/components/home-banner/HomePageOverlay.d.ts +2 -0
- package/dist/home/components/home-banner/HomePageOverlay.js +10 -0
- package/dist/home/components/home-banner/HomePageOverlay.js.map +1 -0
- package/dist/home/components/home-banner/HomePromoVideoBtn.d.ts +3 -0
- package/dist/home/components/home-banner/HomePromoVideoBtn.js +10 -0
- package/dist/home/components/home-banner/HomePromoVideoBtn.js.map +1 -0
- package/dist/home/components/home-banner/index.scss +20 -0
- package/dist/home/components/home-banner/messages.d.ts +28 -0
- package/dist/home/components/home-banner/messages.js +30 -0
- package/dist/home/components/home-banner/messages.js.map +1 -0
- package/dist/home/components/home-banner/types.d.ts +3 -0
- package/dist/home/components/home-banner/types.js +2 -0
- package/dist/home/components/home-banner/types.js.map +1 -0
- package/dist/home/components/index.d.ts +2 -0
- package/dist/home/components/index.js +3 -0
- package/dist/home/components/index.js.map +1 -0
- package/dist/home/constants.d.ts +1 -0
- package/dist/home/constants.js +2 -0
- package/dist/home/constants.js.map +1 -0
- package/dist/home/messages.d.ts +8 -0
- package/dist/home/messages.js +10 -0
- package/dist/home/messages.js.map +1 -0
- package/dist/i18n/index.d.ts +1 -0
- package/dist/i18n/index.js +2 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/routes.d.ts +28 -0
- package/dist/routes.js +62 -0
- package/dist/routes.js.map +1 -0
- package/dist/slots/CourseAboutCourseImageSlot/index.d.ts +6 -0
- package/dist/slots/CourseAboutCourseImageSlot/index.js +9 -0
- package/dist/slots/CourseAboutCourseImageSlot/index.js.map +1 -0
- package/dist/slots/CourseAboutCourseMediaSlot/index.d.ts +9 -0
- package/dist/slots/CourseAboutCourseMediaSlot/index.js +6 -0
- package/dist/slots/CourseAboutCourseMediaSlot/index.js.map +1 -0
- package/dist/slots/CourseAboutEnrollmentButtonSlot/index.d.ts +10 -0
- package/dist/slots/CourseAboutEnrollmentButtonSlot/index.js +6 -0
- package/dist/slots/CourseAboutEnrollmentButtonSlot/index.js.map +1 -0
- package/dist/slots/CourseAboutIntroSlot/index.d.ts +6 -0
- package/dist/slots/CourseAboutIntroSlot/index.js +6 -0
- package/dist/slots/CourseAboutIntroSlot/index.js.map +1 -0
- package/dist/slots/CourseAboutIntroVideoSlots/CourseAboutIntroVideoButtonSlot/index.d.ts +6 -0
- package/dist/slots/CourseAboutIntroVideoSlots/CourseAboutIntroVideoButtonSlot/index.js +11 -0
- package/dist/slots/CourseAboutIntroVideoSlots/CourseAboutIntroVideoButtonSlot/index.js.map +1 -0
- package/dist/slots/CourseAboutIntroVideoSlots/CourseAboutIntroVideoModalContentSlot/index.d.ts +6 -0
- package/dist/slots/CourseAboutIntroVideoSlots/CourseAboutIntroVideoModalContentSlot/index.js +9 -0
- package/dist/slots/CourseAboutIntroVideoSlots/CourseAboutIntroVideoModalContentSlot/index.js.map +1 -0
- package/dist/slots/CourseAboutIntroVideoSlots/CourseAboutIntroVideoModalSlot/index.d.ts +6 -0
- package/dist/slots/CourseAboutIntroVideoSlots/CourseAboutIntroVideoModalSlot/index.js +6 -0
- package/dist/slots/CourseAboutIntroVideoSlots/CourseAboutIntroVideoModalSlot/index.js.map +1 -0
- package/dist/slots/CourseAboutIntroVideoSlots/index.d.ts +4 -0
- package/dist/slots/CourseAboutIntroVideoSlots/index.js +5 -0
- package/dist/slots/CourseAboutIntroVideoSlots/index.js.map +1 -0
- package/dist/slots/CourseAboutOverviewSlot/index.d.ts +6 -0
- package/dist/slots/CourseAboutOverviewSlot/index.js +6 -0
- package/dist/slots/CourseAboutOverviewSlot/index.js.map +1 -0
- package/dist/slots/CourseAboutSidebarCoursePriceSlot/index.d.ts +6 -0
- package/dist/slots/CourseAboutSidebarCoursePriceSlot/index.js +11 -0
- package/dist/slots/CourseAboutSidebarCoursePriceSlot/index.js.map +1 -0
- package/dist/slots/CourseAboutSidebarSlot/index.d.ts +6 -0
- package/dist/slots/CourseAboutSidebarSlot/index.js +6 -0
- package/dist/slots/CourseAboutSidebarSlot/index.js.map +1 -0
- package/dist/slots/CourseAboutSidebarSocialSlot/index.d.ts +6 -0
- package/dist/slots/CourseAboutSidebarSocialSlot/index.js +22 -0
- package/dist/slots/CourseAboutSidebarSocialSlot/index.js.map +1 -0
- package/dist/slots/CourseCatalogDataTableSlots/CourseCatalogDataTableCardViewSlot/CourseCatalogDataTableCourseCardSlot/index.d.ts +16 -0
- package/dist/slots/CourseCatalogDataTableSlots/CourseCatalogDataTableCardViewSlot/CourseCatalogDataTableCourseCardSlot/index.js +18 -0
- package/dist/slots/CourseCatalogDataTableSlots/CourseCatalogDataTableCardViewSlot/CourseCatalogDataTableCourseCardSlot/index.js.map +1 -0
- package/dist/slots/CourseCatalogDataTableSlots/CourseCatalogDataTableCardViewSlot/index.d.ts +6 -0
- package/dist/slots/CourseCatalogDataTableSlots/CourseCatalogDataTableCardViewSlot/index.js +11 -0
- package/dist/slots/CourseCatalogDataTableSlots/CourseCatalogDataTableCardViewSlot/index.js.map +1 -0
- package/dist/slots/CourseCatalogDataTableSlots/CourseCatalogDataTableControlBarSlot/index.d.ts +6 -0
- package/dist/slots/CourseCatalogDataTableSlots/CourseCatalogDataTableControlBarSlot/index.js +6 -0
- package/dist/slots/CourseCatalogDataTableSlots/CourseCatalogDataTableControlBarSlot/index.js.map +1 -0
- package/dist/slots/CourseCatalogDataTableSlots/CourseCatalogDataTableSlot/index.d.ts +23 -0
- package/dist/slots/CourseCatalogDataTableSlots/CourseCatalogDataTableSlot/index.js +17 -0
- package/dist/slots/CourseCatalogDataTableSlots/CourseCatalogDataTableSlot/index.js.map +1 -0
- package/dist/slots/CourseCatalogDataTableSlots/CourseCatalogDataTableTableFooterSlot/index.d.ts +2 -0
- package/dist/slots/CourseCatalogDataTableSlots/CourseCatalogDataTableTableFooterSlot/index.js +6 -0
- package/dist/slots/CourseCatalogDataTableSlots/CourseCatalogDataTableTableFooterSlot/index.js.map +1 -0
- package/dist/slots/CourseCatalogDataTableSlots/index.d.ts +6 -0
- package/dist/slots/CourseCatalogDataTableSlots/index.js +7 -0
- package/dist/slots/CourseCatalogDataTableSlots/index.js.map +1 -0
- package/dist/slots/CourseCatalogIntroSlot/index.d.ts +6 -0
- package/dist/slots/CourseCatalogIntroSlot/index.js +17 -0
- package/dist/slots/CourseCatalogIntroSlot/index.js.map +1 -0
- package/dist/slots/CourseCatalogSearchFieldSlot/index.d.ts +7 -0
- package/dist/slots/CourseCatalogSearchFieldSlot/index.js +21 -0
- package/dist/slots/CourseCatalogSearchFieldSlot/index.js.map +1 -0
- package/dist/slots/HomeBannerSlot/index.d.ts +2 -0
- package/dist/slots/HomeBannerSlot/index.js +6 -0
- package/dist/slots/HomeBannerSlot/index.js.map +1 -0
- package/dist/slots/HomeCourseCardSlot/index.d.ts +16 -0
- package/dist/slots/HomeCourseCardSlot/index.js +18 -0
- package/dist/slots/HomeCourseCardSlot/index.js.map +1 -0
- package/dist/slots/HomeCoursesListSlot/index.d.ts +2 -0
- package/dist/slots/HomeCoursesListSlot/index.js +6 -0
- package/dist/slots/HomeCoursesListSlot/index.js.map +1 -0
- package/dist/slots/HomeOverlayHtmlSlot/index.d.ts +2 -0
- package/dist/slots/HomeOverlayHtmlSlot/index.js +6 -0
- package/dist/slots/HomeOverlayHtmlSlot/index.js.map +1 -0
- package/dist/slots/HomePromoVideoSlots/HomePromoVideoButtonSlot/index.d.ts +4 -0
- package/dist/slots/HomePromoVideoSlots/HomePromoVideoButtonSlot/index.js +8 -0
- package/dist/slots/HomePromoVideoSlots/HomePromoVideoButtonSlot/index.js.map +1 -0
- package/dist/slots/HomePromoVideoSlots/HomePromoVideoModalContentSlot/index.d.ts +6 -0
- package/dist/slots/HomePromoVideoSlots/HomePromoVideoModalContentSlot/index.js +9 -0
- package/dist/slots/HomePromoVideoSlots/HomePromoVideoModalContentSlot/index.js.map +1 -0
- package/dist/slots/HomePromoVideoSlots/HomePromoVideoModalSlot/index.d.ts +6 -0
- package/dist/slots/HomePromoVideoSlots/HomePromoVideoModalSlot/index.js +6 -0
- package/dist/slots/HomePromoVideoSlots/HomePromoVideoModalSlot/index.js.map +1 -0
- package/dist/slots/HomePromoVideoSlots/index.d.ts +4 -0
- package/dist/slots/HomePromoVideoSlots/index.js +5 -0
- package/dist/slots/HomePromoVideoSlots/index.js.map +1 -0
- package/dist/slots/LoaderSlot/index.d.ts +3 -0
- package/dist/slots/LoaderSlot/index.js +4 -0
- package/dist/slots/LoaderSlot/index.js.map +1 -0
- package/dist/slots.d.ts +3 -0
- package/dist/slots.js +7 -0
- package/dist/slots.js.map +1 -0
- package/dist/style.scss +4 -0
- package/dist/utils.d.ts +6 -0
- package/dist/utils.js +9 -0
- package/dist/utils.js.map +1 -0
- package/dist/widgets/CatalogHeader/CoursesLinkMenuItem.d.ts +3 -0
- package/dist/widgets/CatalogHeader/CoursesLinkMenuItem.js +9 -0
- package/dist/widgets/CatalogHeader/CoursesLinkMenuItem.js.map +1 -0
- package/dist/widgets/CatalogHeader/DiscoverLinkMenuItem.d.ts +3 -0
- package/dist/widgets/CatalogHeader/DiscoverLinkMenuItem.js +9 -0
- package/dist/widgets/CatalogHeader/DiscoverLinkMenuItem.js.map +1 -0
- package/dist/widgets/CatalogHeader/ExploreCoursesLinkMenuItem.d.ts +3 -0
- package/dist/widgets/CatalogHeader/ExploreCoursesLinkMenuItem.js +9 -0
- package/dist/widgets/CatalogHeader/ExploreCoursesLinkMenuItem.js.map +1 -0
- package/dist/widgets/CatalogHeader/ProgramsLinkMenuItem.d.ts +3 -0
- package/dist/widgets/CatalogHeader/ProgramsLinkMenuItem.js +9 -0
- package/dist/widgets/CatalogHeader/ProgramsLinkMenuItem.js.map +1 -0
- package/dist/widgets/CatalogHeader/app.d.ts +3 -0
- package/dist/widgets/CatalogHeader/app.js +55 -0
- package/dist/widgets/CatalogHeader/app.js.map +1 -0
- package/dist/widgets/CatalogHeader/index.d.ts +1 -0
- package/dist/widgets/CatalogHeader/index.js +2 -0
- package/dist/widgets/CatalogHeader/index.js.map +1 -0
- package/dist/widgets/CatalogHeader/messages.d.ts +32 -0
- package/dist/widgets/CatalogHeader/messages.js +25 -0
- package/dist/widgets/CatalogHeader/messages.js.map +1 -0
- package/package.json +86 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { useQuery } from '@tanstack/react-query';
|
|
2
|
+
import { useState, useCallback } from 'react';
|
|
3
|
+
import { fetchCourseListSearch } from './api';
|
|
4
|
+
import { DEFAULT_PAGE_SIZE, DEFAULT_PAGE_INDEX } from './constants';
|
|
5
|
+
import { transformDataTableFilters } from './utils';
|
|
6
|
+
/**
|
|
7
|
+
* A React Query hook that fetches course list search data.
|
|
8
|
+
*/
|
|
9
|
+
export const useCourseListSearch = ({ pageSize = DEFAULT_PAGE_SIZE, pageIndex = DEFAULT_PAGE_INDEX, enableCourseSortingByStartDate = false, filters = {}, searchString = '', } = {}) => {
|
|
10
|
+
const [params, setParams] = useState({
|
|
11
|
+
pageSize,
|
|
12
|
+
pageIndex,
|
|
13
|
+
enableCourseSortingByStartDate,
|
|
14
|
+
filters,
|
|
15
|
+
searchString,
|
|
16
|
+
});
|
|
17
|
+
const { data, isLoading, isError, error, isFetching, } = useQuery({
|
|
18
|
+
queryKey: ['courseListSearch', params],
|
|
19
|
+
queryFn: () => fetchCourseListSearch(params),
|
|
20
|
+
placeholderData: (previousData) => previousData,
|
|
21
|
+
});
|
|
22
|
+
/**
|
|
23
|
+
* Updates query params and triggers data refetch if params have changed.
|
|
24
|
+
*/
|
|
25
|
+
const fetchData = useCallback((newParams) => {
|
|
26
|
+
const transformedFilters = transformDataTableFilters(newParams.filters);
|
|
27
|
+
const transformedParams = {
|
|
28
|
+
pageSize: newParams.pageSize,
|
|
29
|
+
pageIndex: newParams.pageIndex,
|
|
30
|
+
filters: transformedFilters,
|
|
31
|
+
searchString: newParams.searchString || '',
|
|
32
|
+
};
|
|
33
|
+
setParams(prevParams => {
|
|
34
|
+
const hasChanged = JSON.stringify(prevParams) !== JSON.stringify(transformedParams);
|
|
35
|
+
return hasChanged ? transformedParams : prevParams;
|
|
36
|
+
});
|
|
37
|
+
}, []);
|
|
38
|
+
return {
|
|
39
|
+
data,
|
|
40
|
+
isLoading,
|
|
41
|
+
isError,
|
|
42
|
+
error,
|
|
43
|
+
fetchData,
|
|
44
|
+
isFetching,
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/data/course-list-search/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAE9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAIpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAC;AAEpD;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,EAClC,QAAQ,GAAG,iBAAiB,EAC5B,SAAS,GAAG,kBAAkB,EAC9B,8BAA8B,GAAG,KAAK,EACtC,OAAO,GAAG,EAAE,EACZ,YAAY,GAAG,EAAE,MACkB,EAAE,EAAwB,EAAE;IAC/D,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAyB;QAC3D,QAAQ;QACR,SAAS;QACT,8BAA8B;QAC9B,OAAO;QACP,YAAY;KACb,CAAC,CAAC;IAEH,MAAM,EACJ,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,GAC5C,GAAG,QAAQ,CAAkC;QAC5C,QAAQ,EAAE,CAAC,kBAAkB,EAAE,MAAM,CAAC;QACtC,OAAO,EAAE,GAAG,EAAE,CAAC,qBAAqB,CAAC,MAAM,CAAC;QAC5C,eAAe,EAAE,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY;KAChD,CAAC,CAAC;IAEH;;OAEG;IACH,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,SAAsD,EAAE,EAAE;QACvF,MAAM,kBAAkB,GAAG,yBAAyB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAExE,MAAM,iBAAiB,GAA2B;YAChD,QAAQ,EAAE,SAAS,CAAC,QAAQ;YAC5B,SAAS,EAAE,SAAS,CAAC,SAAS;YAC9B,OAAO,EAAE,kBAAkB;YAC3B,YAAY,EAAE,SAAS,CAAC,YAAY,IAAI,EAAE;SAC3C,CAAC;QAEF,SAAS,CAAC,UAAU,CAAC,EAAE;YACrB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;YACpF,OAAO,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,UAAU,CAAC;QACrD,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO;QACL,IAAI;QACJ,SAAS;QACT,OAAO;QACP,KAAK;QACL,SAAS;QACT,UAAU;KACX,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { useQuery } from '@tanstack/react-query';\nimport { useState, useCallback } from 'react';\n\nimport { fetchCourseListSearch } from './api';\nimport { DEFAULT_PAGE_SIZE, DEFAULT_PAGE_INDEX } from './constants';\nimport type {\n CourseListSearchResponse, CourseListSearchParams, CourseListSearchHook, DataTableParams,\n} from './types';\nimport { transformDataTableFilters } from './utils';\n\n/**\n * A React Query hook that fetches course list search data.\n */\nexport const useCourseListSearch = ({\n pageSize = DEFAULT_PAGE_SIZE,\n pageIndex = DEFAULT_PAGE_INDEX,\n enableCourseSortingByStartDate = false,\n filters = {},\n searchString = '',\n}: Partial<CourseListSearchParams> = {}): CourseListSearchHook => {\n const [params, setParams] = useState<CourseListSearchParams>({\n pageSize,\n pageIndex,\n enableCourseSortingByStartDate,\n filters,\n searchString,\n });\n\n const {\n data, isLoading, isError, error, isFetching,\n } = useQuery<CourseListSearchResponse, Error>({\n queryKey: ['courseListSearch', params],\n queryFn: () => fetchCourseListSearch(params),\n placeholderData: (previousData) => previousData,\n });\n\n /**\n * Updates query params and triggers data refetch if params have changed.\n */\n const fetchData = useCallback((newParams: DataTableParams & { searchString?: string }) => {\n const transformedFilters = transformDataTableFilters(newParams.filters);\n\n const transformedParams: CourseListSearchParams = {\n pageSize: newParams.pageSize,\n pageIndex: newParams.pageIndex,\n filters: transformedFilters,\n searchString: newParams.searchString || '',\n };\n\n setParams(prevParams => {\n const hasChanged = JSON.stringify(prevParams) !== JSON.stringify(transformedParams);\n return hasChanged ? transformedParams : prevParams;\n });\n }, []);\n\n return {\n data,\n isLoading,\n isError,\n error,\n fetchData,\n isFetching,\n };\n};\n"]}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
export interface CourseListSearchResponse {
|
|
2
|
+
took: number;
|
|
3
|
+
total: number;
|
|
4
|
+
results: {
|
|
5
|
+
id: string;
|
|
6
|
+
index: string;
|
|
7
|
+
type: string;
|
|
8
|
+
title: string;
|
|
9
|
+
data: {
|
|
10
|
+
id: string;
|
|
11
|
+
course: string;
|
|
12
|
+
start: string;
|
|
13
|
+
imageUrl: string;
|
|
14
|
+
org: string;
|
|
15
|
+
orgImageUrl?: string;
|
|
16
|
+
advertisedStart?: string;
|
|
17
|
+
content: {
|
|
18
|
+
displayName: string;
|
|
19
|
+
overview?: string;
|
|
20
|
+
number?: string;
|
|
21
|
+
};
|
|
22
|
+
number: string;
|
|
23
|
+
modes: string[];
|
|
24
|
+
language: string;
|
|
25
|
+
catalogVisibility: string;
|
|
26
|
+
};
|
|
27
|
+
}[];
|
|
28
|
+
aggs: Record<string, {
|
|
29
|
+
terms: Record<string, number>;
|
|
30
|
+
total: number;
|
|
31
|
+
other: number;
|
|
32
|
+
}>;
|
|
33
|
+
maxScore: number;
|
|
34
|
+
}
|
|
35
|
+
export type Aggregations = Record<string, {
|
|
36
|
+
terms: Record<string, number>;
|
|
37
|
+
}>;
|
|
38
|
+
export interface CourseListSearchParams {
|
|
39
|
+
pageSize?: number;
|
|
40
|
+
pageIndex?: number;
|
|
41
|
+
filters?: Record<string, string[]>;
|
|
42
|
+
enableCourseSortingByStartDate?: boolean;
|
|
43
|
+
searchString?: string;
|
|
44
|
+
}
|
|
45
|
+
export interface DataTableParams {
|
|
46
|
+
pageSize?: number;
|
|
47
|
+
pageIndex?: number;
|
|
48
|
+
filters?: {
|
|
49
|
+
id: string;
|
|
50
|
+
value: string | string[];
|
|
51
|
+
}[];
|
|
52
|
+
searchString?: string;
|
|
53
|
+
}
|
|
54
|
+
export interface CourseListSearchHook {
|
|
55
|
+
data: CourseListSearchResponse | undefined;
|
|
56
|
+
isLoading: boolean;
|
|
57
|
+
isFetching: boolean;
|
|
58
|
+
isError: boolean;
|
|
59
|
+
error: Error | null;
|
|
60
|
+
fetchData: (params: DataTableParams) => void;
|
|
61
|
+
}
|
|
62
|
+
export interface DataTableFilter {
|
|
63
|
+
id: string;
|
|
64
|
+
value: string | string[];
|
|
65
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/data/course-list-search/types.ts"],"names":[],"mappings":"","sourcesContent":["export interface CourseListSearchResponse {\n took: number,\n total: number,\n results: {\n id: string,\n index: string,\n type: string,\n title: string,\n data: {\n id: string,\n course: string,\n start: string,\n imageUrl: string,\n org: string,\n orgImageUrl?: string,\n advertisedStart?: string,\n content: {\n displayName: string,\n overview?: string,\n number?: string,\n },\n number: string,\n modes: string[],\n language: string,\n catalogVisibility: string,\n },\n }[],\n aggs: Record<string, {\n terms: Record<string, number>,\n total: number,\n other: number,\n }>,\n maxScore: number,\n}\n\nexport type Aggregations = Record<string, {\n terms: Record<string, number>,\n}>;\n\nexport interface CourseListSearchParams {\n pageSize?: number,\n pageIndex?: number,\n filters?: Record<string, string[]>,\n enableCourseSortingByStartDate?: boolean,\n searchString?: string,\n}\n\nexport interface DataTableParams {\n pageSize?: number,\n pageIndex?: number,\n filters?: {\n id: string,\n value: string | string[],\n }[],\n searchString?: string,\n}\n\nexport interface CourseListSearchHook {\n data: CourseListSearchResponse | undefined,\n isLoading: boolean,\n isFetching: boolean,\n isError: boolean,\n error: Error | null,\n fetchData: (params: DataTableParams) => void,\n}\n\nexport interface DataTableFilter {\n id: string,\n value: string | string[],\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"urls.js","sourceRoot":"","sources":["../../../src/data/course-list-search/urls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,aAAa,EAAE,CAAC,UAAU,CAAC;AAE9D,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,EAAE,CAAC,GAAG,aAAa,EAAE,yCAAyC,CAAC","sourcesContent":["import { getSiteConfig } from '@openedx/frontend-base';\n\nexport const getApiBaseUrl = () => getSiteConfig().lmsBaseUrl;\n\nexport const getCourseListSearchUrl = () => `${getApiBaseUrl()}/search/unstable/v0/course_list_search/`;\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { DataTableFilter } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Appends filters to the FormData object for backend requests.
|
|
4
|
+
*/
|
|
5
|
+
export declare const addFiltersToFormData: (formData: FormData, filters: Record<string, string[]>) => void;
|
|
6
|
+
/**
|
|
7
|
+
* Transforms DataTable filters array into a Record<string, string[]> for API.
|
|
8
|
+
*/
|
|
9
|
+
export declare const transformDataTableFilters: (filters?: DataTableFilter[]) => Record<string, string[]>;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Checks if a value is valid.
|
|
3
|
+
*/
|
|
4
|
+
const isValidValue = (value) => value !== undefined && value !== null && value !== '';
|
|
5
|
+
/**
|
|
6
|
+
* Appends filters to the FormData object for backend requests.
|
|
7
|
+
*/
|
|
8
|
+
export const addFiltersToFormData = (formData, filters) => {
|
|
9
|
+
if (!filters || typeof filters !== 'object') {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
Object.entries(filters).forEach(([filterKey, filterValues]) => {
|
|
13
|
+
if (Array.isArray(filterValues)) {
|
|
14
|
+
filterValues
|
|
15
|
+
.filter(isValidValue)
|
|
16
|
+
.forEach(value => formData.append(filterKey, value));
|
|
17
|
+
}
|
|
18
|
+
else if (isValidValue(filterValues)) {
|
|
19
|
+
formData.append(filterKey, filterValues);
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Transforms DataTable filters array into a Record<string, string[]> for API.
|
|
25
|
+
*/
|
|
26
|
+
export const transformDataTableFilters = (filters) => {
|
|
27
|
+
if (!filters) {
|
|
28
|
+
return {};
|
|
29
|
+
}
|
|
30
|
+
const grouped = {};
|
|
31
|
+
filters.forEach(({ id, value }) => {
|
|
32
|
+
if (!grouped[id]) {
|
|
33
|
+
grouped[id] = new Set();
|
|
34
|
+
}
|
|
35
|
+
const values = Array.isArray(value) ? value : [value];
|
|
36
|
+
values.filter(isValidValue).forEach(v => grouped[id].add(v));
|
|
37
|
+
});
|
|
38
|
+
return Object.fromEntries(Object.entries(grouped).map(([id, set]) => [id, Array.from(set)]));
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/data/course-list-search/utils.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,YAAY,GAAG,CACnB,KAAqC,EAC5B,EAAE,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;AAEpE;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,QAAkB,EAClB,OAAiC,EAC3B,EAAE;IACR,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC5C,OAAO;IACT,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,EAAE;QAC5D,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,YAAY;iBACT,MAAM,CAAC,YAAY,CAAC;iBACpB,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;QACzD,CAAC;aAAM,IAAI,YAAY,CAAC,YAAY,CAAC,EAAE,CAAC;YACtC,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACvC,OAA2B,EACD,EAAE;IAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAgC,EAAE,CAAC;IAEhD,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QAChC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;YACjB,OAAO,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;QAC1B,CAAC;QAED,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACtD,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAClE,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import type { DataTableFilter } from './types';\n\n/**\n * Checks if a value is valid.\n */\nconst isValidValue = (\n value: string | undefined | null | '',\n): boolean => value !== undefined && value !== null && value !== '';\n\n/**\n * Appends filters to the FormData object for backend requests.\n */\nexport const addFiltersToFormData = (\n formData: FormData,\n filters: Record<string, string[]>,\n): void => {\n if (!filters || typeof filters !== 'object') {\n return;\n }\n\n Object.entries(filters).forEach(([filterKey, filterValues]) => {\n if (Array.isArray(filterValues)) {\n filterValues\n .filter(isValidValue)\n .forEach(value => formData.append(filterKey, value));\n } else if (isValidValue(filterValues)) {\n formData.append(filterKey, filterValues);\n }\n });\n};\n\n/**\n * Transforms DataTable filters array into a Record<string, string[]> for API.\n */\nexport const transformDataTableFilters = (\n filters?: DataTableFilter[],\n): Record<string, string[]> => {\n if (!filters) {\n return {};\n }\n\n const grouped: Record<string, Set<string>> = {};\n\n filters.forEach(({ id, value }) => {\n if (!grouped[id]) {\n grouped[id] = new Set();\n }\n\n const values = Array.isArray(value) ? value : [value];\n values.filter(isValidValue).forEach(v => grouped[id].add(v));\n });\n\n return Object.fromEntries(\n Object.entries(grouped).map(([id, set]) => [id, Array.from(set)]),\n );\n};\n"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Alert as BaseAlert } from '@openedx/paragon';
|
|
3
|
+
import { Info as InfoIcon } from '@openedx/paragon/icons';
|
|
4
|
+
export const AlertNotification = ({ variant = 'info', title, message, className = '', }) => (_jsxs(BaseAlert, { variant: variant, icon: InfoIcon, className: className, children: [_jsx(BaseAlert.Heading, { children: title }), _jsx("p", { children: message })] }));
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/generic/alert-notification/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAI1D,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAChC,OAAO,GAAG,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,GAAG,EAAE,GACzB,EAAE,EAAE,CAAC,CAC5B,MAAC,SAAS,IAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,aAC/D,KAAC,SAAS,CAAC,OAAO,cAAE,KAAK,GAAqB,EAC9C,sBAAI,OAAO,GAAK,IACN,CACb,CAAC","sourcesContent":["import { Alert as BaseAlert } from '@openedx/paragon';\nimport { Info as InfoIcon } from '@openedx/paragon/icons';\n\nimport type { AlertNotificationProps } from './types';\n\nexport const AlertNotification = ({\n variant = 'info', title, message, className = '',\n}: AlertNotificationProps) => (\n <BaseAlert variant={variant} icon={InfoIcon} className={className}>\n <BaseAlert.Heading>{title}</BaseAlert.Heading>\n <p>{message}</p>\n </BaseAlert>\n);\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/generic/alert-notification/types.ts"],"names":[],"mappings":"","sourcesContent":["export interface AlertNotificationProps {\n variant?: 'info' | 'warning',\n title: string,\n message: string,\n className?: string,\n}\n"]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Link } from 'react-router-dom';
|
|
3
|
+
import { Card, useMediaQuery, breakpoints, Badge, } from '@openedx/paragon';
|
|
4
|
+
import { getUrlByRouteRole, useIntl } from '@openedx/frontend-base';
|
|
5
|
+
import noCourseImg from '../../assets/images/no-course-image.svg';
|
|
6
|
+
import { courseAboutRole } from '../../constants';
|
|
7
|
+
import messages from './messages';
|
|
8
|
+
import { getFullImageUrl, getStartDateDisplay } from './utils';
|
|
9
|
+
export const CourseCard = ({ isLoading, courseId, courseOrg, courseName, courseNumber, courseImageUrl, courseStartDate, courseAdvertisedStart, }) => {
|
|
10
|
+
var _a;
|
|
11
|
+
const intl = useIntl();
|
|
12
|
+
const isExtraSmall = useMediaQuery({ maxWidth: breakpoints.small.maxWidth });
|
|
13
|
+
const startDateDisplay = (courseStartDate || courseAdvertisedStart) ? getStartDateDisplay({
|
|
14
|
+
start: courseStartDate,
|
|
15
|
+
advertisedStart: courseAdvertisedStart,
|
|
16
|
+
}, intl) : null;
|
|
17
|
+
const courseAboutUrl = courseId
|
|
18
|
+
? (_a = getUrlByRouteRole(courseAboutRole)) === null || _a === void 0 ? void 0 : _a.replace(':courseId', courseId)
|
|
19
|
+
: undefined;
|
|
20
|
+
return (_jsxs(Card, { as: courseAboutUrl ? Link : 'div', to: courseAboutUrl,
|
|
21
|
+
// TODO: Temporary use of `d-flex` to fix alignment. Remove once the related Paragon issue
|
|
22
|
+
// (https://github.com/openedx/paragon/issues/3792) is resolved.
|
|
23
|
+
className: `course-card d-flex ${isExtraSmall ? 'w-100' : 'course-card-desktop'}`, isClickable: !isLoading, isLoading: isLoading, "data-testid": "course-card", children: [_jsx(Card.ImageCap, { src: getFullImageUrl(courseImageUrl), fallbackSrc: noCourseImg, srcAlt: `${courseName} ${courseNumber}`, skeletonDuringImageLoad: true }), _jsx(Card.Header, { title: courseName, subtitle: (_jsxs(_Fragment, { children: [_jsx("div", { children: courseNumber }), _jsx(Badge, { variant: "light", children: courseOrg })] })), size: "sm" }), _jsx(Card.Section, {}), _jsx(Card.Footer, { textElement: startDateDisplay && intl.formatMessage(messages.startDate, {
|
|
24
|
+
startDate: startDateDisplay,
|
|
25
|
+
}) })] }));
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/generic/course-card/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EACL,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,KAAK,GACxC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEpE,OAAO,WAAW,MAAM,wCAAwC,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGjD,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAE/D,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EACzB,SAAS,EACT,QAAQ,EACR,SAAS,EACT,UAAU,EACV,YAAY,EACZ,cAAc,EACd,eAAe,EACf,qBAAqB,GACL,EAAE,EAAE;;IACpB,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,YAAY,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAE7E,MAAM,gBAAgB,GAAG,CAAC,eAAe,IAAI,qBAAqB,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC;QACxF,KAAK,EAAE,eAAe;QACtB,eAAe,EAAE,qBAAqB;KACvC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAEhB,MAAM,cAAc,GAAG,QAAQ;QAC7B,CAAC,CAAC,MAAA,iBAAiB,CAAC,eAAe,CAAC,0CAAE,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC;QACpE,CAAC,CAAC,SAAS,CAAC;IAEd,OAAO,CACL,MAAC,IAAI,IACH,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EACjC,EAAE,EAAE,cAAc;QAClB,0FAA0F;QAC1F,gEAAgE;QAChE,SAAS,EAAE,sBAAsB,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,EAAE,EACjF,WAAW,EAAE,CAAC,SAAS,EACvB,SAAS,EAAE,SAAS,iBACR,aAAa,aAEzB,KAAC,IAAI,CAAC,QAAQ,IACZ,GAAG,EAAE,eAAe,CAAC,cAAc,CAAC,EACpC,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,GAAG,UAAU,IAAI,YAAY,EAAE,EACvC,uBAAuB,SACvB,EACF,KAAC,IAAI,CAAC,MAAM,IACV,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,CACR,8BACE,wBAAM,YAAY,GAAO,EACzB,KAAC,KAAK,IAAC,OAAO,EAAC,OAAO,YAAE,SAAS,GAAS,IACzC,CACJ,EACD,IAAI,EAAC,IAAI,GACT,EACF,KAAC,IAAI,CAAC,OAAO,KAAG,EAChB,KAAC,IAAI,CAAC,MAAM,IAAC,WAAW,EAAE,gBAAgB,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,EAAE;oBACnF,SAAS,EAAE,gBAAgB;iBAC5B,CAAC,GACA,IACG,CACR,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { Link } from 'react-router-dom';\nimport {\n Card, useMediaQuery, breakpoints, Badge,\n} from '@openedx/paragon';\nimport { getUrlByRouteRole, useIntl } from '@openedx/frontend-base';\n\nimport noCourseImg from '@src/assets/images/no-course-image.svg';\nimport { courseAboutRole } from '@src/constants';\n\nimport type { CourseCardProps } from './types';\nimport messages from './messages';\nimport { getFullImageUrl, getStartDateDisplay } from './utils';\n\nexport const CourseCard = ({\n isLoading,\n courseId,\n courseOrg,\n courseName,\n courseNumber,\n courseImageUrl,\n courseStartDate,\n courseAdvertisedStart,\n}: CourseCardProps) => {\n const intl = useIntl();\n const isExtraSmall = useMediaQuery({ maxWidth: breakpoints.small.maxWidth });\n\n const startDateDisplay = (courseStartDate || courseAdvertisedStart) ? getStartDateDisplay({\n start: courseStartDate,\n advertisedStart: courseAdvertisedStart,\n }, intl) : null;\n\n const courseAboutUrl = courseId\n ? getUrlByRouteRole(courseAboutRole)?.replace(':courseId', courseId)\n : undefined;\n\n return (\n <Card\n as={courseAboutUrl ? Link : 'div'}\n to={courseAboutUrl}\n // TODO: Temporary use of `d-flex` to fix alignment. Remove once the related Paragon issue\n // (https://github.com/openedx/paragon/issues/3792) is resolved.\n className={`course-card d-flex ${isExtraSmall ? 'w-100' : 'course-card-desktop'}`}\n isClickable={!isLoading}\n isLoading={isLoading}\n data-testid=\"course-card\"\n >\n <Card.ImageCap\n src={getFullImageUrl(courseImageUrl)}\n fallbackSrc={noCourseImg}\n srcAlt={`${courseName} ${courseNumber}`}\n skeletonDuringImageLoad\n />\n <Card.Header\n title={courseName}\n subtitle={(\n <>\n <div>{courseNumber}</div>\n <Badge variant=\"light\">{courseOrg}</Badge>\n </>\n )}\n size=\"sm\"\n />\n <Card.Section />\n <Card.Footer textElement={startDateDisplay && intl.formatMessage(messages.startDate, {\n startDate: startDateDisplay,\n })}\n />\n </Card>\n );\n};\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { defineMessages } from '@openedx/frontend-base';
|
|
2
|
+
const messages = defineMessages({
|
|
3
|
+
startDate: {
|
|
4
|
+
id: 'generic.course-card.start-date',
|
|
5
|
+
defaultMessage: 'Starts: {startDate}',
|
|
6
|
+
description: 'Start date.',
|
|
7
|
+
},
|
|
8
|
+
});
|
|
9
|
+
export default messages;
|
|
10
|
+
//# sourceMappingURL=messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../src/generic/course-card/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,SAAS,EAAE;QACT,EAAE,EAAE,gCAAgC;QACpC,cAAc,EAAE,qBAAqB;QACrC,WAAW,EAAE,aAAa;KAC3B;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n startDate: {\n id: 'generic.course-card.start-date',\n defaultMessage: 'Starts: {startDate}',\n description: 'Start date.',\n },\n});\n\nexport default messages;\n"]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export interface CourseContent {
|
|
2
|
+
displayName: string;
|
|
3
|
+
overview?: string;
|
|
4
|
+
number?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface CourseData {
|
|
7
|
+
id: string;
|
|
8
|
+
course: string;
|
|
9
|
+
start: string;
|
|
10
|
+
imageUrl: string;
|
|
11
|
+
org: string;
|
|
12
|
+
orgImageUrl?: string;
|
|
13
|
+
advertisedStart?: string;
|
|
14
|
+
content: CourseContent;
|
|
15
|
+
number: string;
|
|
16
|
+
modes: string[];
|
|
17
|
+
language: string;
|
|
18
|
+
catalogVisibility: string;
|
|
19
|
+
}
|
|
20
|
+
export interface Course {
|
|
21
|
+
id: string;
|
|
22
|
+
index?: string;
|
|
23
|
+
type?: string;
|
|
24
|
+
data: CourseData;
|
|
25
|
+
}
|
|
26
|
+
export interface CourseCardProps {
|
|
27
|
+
isLoading?: boolean;
|
|
28
|
+
courseId?: string;
|
|
29
|
+
courseOrg?: string;
|
|
30
|
+
courseName?: string;
|
|
31
|
+
courseNumber?: string;
|
|
32
|
+
courseImageUrl?: string;
|
|
33
|
+
courseStartDate?: string;
|
|
34
|
+
courseAdvertisedStart?: string;
|
|
35
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/generic/course-card/types.ts"],"names":[],"mappings":"","sourcesContent":["export interface CourseContent {\n displayName: string,\n overview?: string,\n number?: string,\n}\n\nexport interface CourseData {\n id: string,\n course: string,\n start: string,\n imageUrl: string,\n org: string,\n orgImageUrl?: string,\n advertisedStart?: string,\n content: CourseContent,\n number: string,\n modes: string[],\n language: string,\n catalogVisibility: string,\n}\n\nexport interface Course {\n id: string,\n index?: string,\n type?: string,\n data: CourseData,\n}\n\nexport interface CourseCardProps {\n isLoading?: boolean,\n courseId?: string,\n courseOrg?: string,\n courseName?: string,\n courseNumber?: string,\n courseImageUrl?: string,\n courseStartDate?: string,\n courseAdvertisedStart?: string,\n}\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type IntlShape } from '../../utils';
|
|
2
|
+
import type { Course } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* Constructs a full URL for an image by combining the LMS base URL with the provided image path.
|
|
5
|
+
*/
|
|
6
|
+
export declare const getFullImageUrl: (path?: string) => string;
|
|
7
|
+
/**
|
|
8
|
+
* Constructs a start date display for a course by combining the advertised start date and the start date.
|
|
9
|
+
*/
|
|
10
|
+
export declare const getStartDateDisplay: (courseData: Partial<Pick<Course["data"], "advertisedStart" | "start">>, intl: IntlShape) => string;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { getSiteConfig } from '@openedx/frontend-base';
|
|
2
|
+
import { formatDate } from '../../utils';
|
|
3
|
+
/**
|
|
4
|
+
* Constructs a full URL for an image by combining the LMS base URL with the provided image path.
|
|
5
|
+
*/
|
|
6
|
+
export const getFullImageUrl = (path) => {
|
|
7
|
+
if (!path) {
|
|
8
|
+
return '';
|
|
9
|
+
}
|
|
10
|
+
return `${getSiteConfig().lmsBaseUrl}${path}`;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Constructs a start date display for a course by combining the advertised start date and the start date.
|
|
14
|
+
*/
|
|
15
|
+
export const getStartDateDisplay = (courseData, intl) => {
|
|
16
|
+
if (courseData === null || courseData === void 0 ? void 0 : courseData.advertisedStart) {
|
|
17
|
+
return courseData.advertisedStart;
|
|
18
|
+
}
|
|
19
|
+
if (courseData === null || courseData === void 0 ? void 0 : courseData.start) {
|
|
20
|
+
return formatDate(courseData.start, intl);
|
|
21
|
+
}
|
|
22
|
+
return '';
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/generic/course-card/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,OAAO,EAAE,UAAU,EAAkB,MAAM,YAAY,CAAC;AAGxD;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAAa,EAAE,EAAE;IAC/C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,GAAG,aAAa,EAAE,CAAC,UAAU,GAAG,IAAI,EAAE,CAAC;AAChD,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,UAAsE,EACtE,IAAe,EACf,EAAE;IACF,IAAI,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,eAAe,EAAE,CAAC;QAChC,OAAO,UAAU,CAAC,eAAe,CAAC;IACpC,CAAC;IAED,IAAI,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,KAAK,EAAE,CAAC;QACtB,OAAO,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC","sourcesContent":["import { getSiteConfig } from '@openedx/frontend-base';\n\nimport { formatDate, type IntlShape } from '@src/utils';\nimport type { Course } from './types';\n\n/**\n * Constructs a full URL for an image by combining the LMS base URL with the provided image path.\n */\nexport const getFullImageUrl = (path?: string) => {\n if (!path) {\n return '';\n }\n return `${getSiteConfig().lmsBaseUrl}${path}`;\n};\n\n/**\n * Constructs a start date display for a course by combining the advertised start date and the start date.\n */\nexport const getStartDateDisplay = (\n courseData: Partial<Pick<Course['data'], 'advertisedStart' | 'start'>>,\n intl: IntlShape,\n) => {\n if (courseData?.advertisedStart) {\n return courseData.advertisedStart;\n }\n\n if (courseData?.start) {\n return formatDate(courseData.start, intl);\n }\n\n return '';\n};\n"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { CourseCard } from './course-card';
|
|
2
|
+
export { AlertNotification } from './alert-notification';
|
|
3
|
+
export { VideoModal } from './video-modal';
|
|
4
|
+
export { Loading, LoadingSpinner } from './loading-spinner';
|
|
5
|
+
export { SubHeader } from './sub-header';
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generic/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC","sourcesContent":["export { CourseCard } from './course-card';\nexport { AlertNotification } from './alert-notification';\nexport { VideoModal } from './video-modal';\nexport { Loading, LoadingSpinner } from './loading-spinner';\nexport { SubHeader } from './sub-header';\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Spinner } from '@openedx/paragon';
|
|
3
|
+
import { useIntl } from '@openedx/frontend-base';
|
|
4
|
+
import messages from './messages';
|
|
5
|
+
export const LoadingSpinner = ({ size }) => {
|
|
6
|
+
const intl = useIntl();
|
|
7
|
+
return (_jsx(Spinner, { animation: "border", role: "status", size: size, screenReaderText: intl.formatMessage(messages.screenReaderText) }));
|
|
8
|
+
};
|
|
9
|
+
export const Loading = () => (_jsx("div", { className: "d-flex justify-content-center align-items-center flex-column vh-100", children: _jsx(LoadingSpinner, {}) }));
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/generic/loading-spinner/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,QAAQ,MAAM,YAAY,CAAC;AAGlC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAAE,IAAI,EAAuB,EAAE,EAAE;IAC9D,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IAEvB,OAAO,CACL,KAAC,OAAO,IACN,SAAS,EAAC,QAAQ,EAClB,IAAI,EAAC,QAAQ,EACb,IAAI,EAAE,IAAI,EACV,gBAAgB,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAC/D,CACH,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,CAC3B,cAAK,SAAS,EAAC,qEAAqE,YAClF,KAAC,cAAc,KAAG,GACd,CACP,CAAC","sourcesContent":["import { Spinner } from '@openedx/paragon';\nimport { useIntl } from '@openedx/frontend-base';\n\nimport messages from './messages';\nimport type { LoadingSpinnerProps } from './types';\n\nexport const LoadingSpinner = ({ size }: LoadingSpinnerProps) => {\n const intl = useIntl();\n\n return (\n <Spinner\n animation=\"border\"\n role=\"status\"\n size={size}\n screenReaderText={intl.formatMessage(messages.screenReaderText)}\n />\n );\n};\n\nexport const Loading = () => (\n <div className=\"d-flex justify-content-center align-items-center flex-column vh-100\">\n <LoadingSpinner />\n </div>\n);\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { defineMessages } from '@openedx/frontend-base';
|
|
2
|
+
const messages = defineMessages({
|
|
3
|
+
screenReaderText: {
|
|
4
|
+
id: 'category.generic.loading',
|
|
5
|
+
defaultMessage: 'Loading...',
|
|
6
|
+
description: 'Screen-reader message for when a page is loading.',
|
|
7
|
+
},
|
|
8
|
+
});
|
|
9
|
+
export default messages;
|
|
10
|
+
//# sourceMappingURL=messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../src/generic/loading-spinner/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,gBAAgB,EAAE;QAChB,EAAE,EAAE,0BAA0B;QAC9B,cAAc,EAAE,YAAY;QAC5B,WAAW,EAAE,mDAAmD;KACjE;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n screenReaderText: {\n id: 'category.generic.loading',\n defaultMessage: 'Loading...',\n description: 'Screen-reader message for when a page is loading.',\n },\n});\n\nexport default messages;\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/generic/loading-spinner/types.ts"],"names":[],"mappings":"","sourcesContent":["export interface LoadingSpinnerProps {\n size?: 'sm' | undefined,\n}\n"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import classNames from 'classnames';
|
|
3
|
+
export const SubHeader = ({ title, className }) => (_jsx("header", { className: classNames('mb-5 d-flex justify-content-between', className), children: _jsx("h1", { className: "mb-0", children: title }) }));
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/generic/sub-header/index.tsx"],"names":[],"mappings":";AAAA,OAAO,UAAU,MAAM,YAAY,CAAC;AAIpC,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,EAAE,KAAK,EAAE,SAAS,EAAkB,EAAE,EAAE,CAAC,CACjE,iBAAQ,SAAS,EAAE,UAAU,CAAC,qCAAqC,EAAE,SAAS,CAAC,YAC7E,aAAI,SAAS,EAAC,MAAM,YAAE,KAAK,GAAM,GAC1B,CACV,CAAC","sourcesContent":["import classNames from 'classnames';\n\nimport type { SubHeaderProps } from './types';\n\nexport const SubHeader = ({ title, className }: SubHeaderProps) => (\n <header className={classNames('mb-5 d-flex justify-content-between', className)}>\n <h1 className=\"mb-0\">{title}</h1>\n </header>\n);\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/generic/sub-header/types.ts"],"names":[],"mappings":"","sourcesContent":["export interface SubHeaderProps {\n title: string,\n className?: string,\n}\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useIntl } from '@openedx/frontend-base';
|
|
3
|
+
import { ModalDialog } from '@openedx/paragon';
|
|
4
|
+
import { DEFAULT_VIDEO_MODAL_SIZE } from '../../constants';
|
|
5
|
+
import messages from './messages';
|
|
6
|
+
export const VideoModal = ({ isOpen, close, size = DEFAULT_VIDEO_MODAL_SIZE, children, }) => {
|
|
7
|
+
const intl = useIntl();
|
|
8
|
+
return (_jsx(ModalDialog, { title: intl.formatMessage(messages.videoModalTitle), size: size, isOpen: isOpen || false, onClose: close, hasCloseButton: false, isOverflowVisible: false, className: "bg-transparent shadow-none", children: children }));
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/generic/video-modal/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAE1D,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EACzB,MAAM,EAAE,KAAK,EAAE,IAAI,GAAG,wBAAwB,EAAE,QAAQ,GACxC,EAAE,EAAE;IACpB,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IAEvB,OAAO,CACL,KAAC,WAAW,IACV,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAC,EACnD,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,IAAI,KAAK,EACvB,OAAO,EAAE,KAAK,EACd,cAAc,EAAE,KAAK,EACrB,iBAAiB,EAAE,KAAK,EACxB,SAAS,EAAC,4BAA4B,YAErC,QAAQ,GACG,CACf,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { useIntl } from '@openedx/frontend-base';\nimport { ModalDialog } from '@openedx/paragon';\n\nimport { DEFAULT_VIDEO_MODAL_SIZE } from '@src/constants';\nimport type { VideoModalProps } from './types';\nimport messages from './messages';\n\nexport const VideoModal = ({\n isOpen, close, size = DEFAULT_VIDEO_MODAL_SIZE, children,\n}: VideoModalProps) => {\n const intl = useIntl();\n\n return (\n <ModalDialog\n title={intl.formatMessage(messages.videoModalTitle)}\n size={size}\n isOpen={isOpen || false}\n onClose={close}\n hasCloseButton={false}\n isOverflowVisible={false}\n className=\"bg-transparent shadow-none\"\n >\n {children}\n </ModalDialog>\n );\n};\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { defineMessages } from '@openedx/frontend-base';
|
|
2
|
+
const messages = defineMessages({
|
|
3
|
+
videoModalTitle: {
|
|
4
|
+
id: 'catalog.home-page.video-modal-title',
|
|
5
|
+
defaultMessage: 'Video modal',
|
|
6
|
+
description: 'Title text displayed inside the modal when the promo video is opened.',
|
|
7
|
+
},
|
|
8
|
+
videoIframeTitle: {
|
|
9
|
+
id: 'catalog.home-page.video-iframe-title',
|
|
10
|
+
defaultMessage: 'YouTube video player',
|
|
11
|
+
description: 'Title attribute for the embedded YouTube iframe video player.',
|
|
12
|
+
},
|
|
13
|
+
});
|
|
14
|
+
export default messages;
|
|
15
|
+
//# sourceMappingURL=messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../src/generic/video-modal/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,eAAe,EAAE;QACf,EAAE,EAAE,qCAAqC;QACzC,cAAc,EAAE,aAAa;QAC7B,WAAW,EAAE,uEAAuE;KACrF;IACD,gBAAgB,EAAE;QAChB,EAAE,EAAE,sCAAsC;QAC1C,cAAc,EAAE,sBAAsB;QACtC,WAAW,EAAE,+DAA+D;KAC7E;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n videoModalTitle: {\n id: 'catalog.home-page.video-modal-title',\n defaultMessage: 'Video modal',\n description: 'Title text displayed inside the modal when the promo video is opened.',\n },\n videoIframeTitle: {\n id: 'catalog.home-page.video-iframe-title',\n defaultMessage: 'YouTube video player',\n description: 'Title attribute for the embedded YouTube iframe video player.',\n },\n});\n\nexport default messages;\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/generic/video-modal/types.ts"],"names":[],"mappings":"","sourcesContent":["export interface VideoModalProps {\n children: React.ReactNode,\n isOpen: boolean,\n close: () => void,\n size?: 'sm' | 'md' | 'lg',\n}\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Helmet } from 'react-helmet';
|
|
3
|
+
import { getSiteConfig, useIntl } from '@openedx/frontend-base';
|
|
4
|
+
import HomeBannerSlot from '../slots/HomeBannerSlot';
|
|
5
|
+
import HomeCoursesListSlot from '../slots/HomeCoursesListSlot';
|
|
6
|
+
import messages from './messages';
|
|
7
|
+
const HomePage = () => {
|
|
8
|
+
const { formatMessage } = useIntl();
|
|
9
|
+
return (_jsxs(_Fragment, { children: [_jsx(Helmet, { children: _jsx("title", { children: formatMessage(messages.pageTitle, {
|
|
10
|
+
siteName: getSiteConfig().siteName,
|
|
11
|
+
}) }) }), _jsx(HomeBannerSlot, {}), _jsx(HomeCoursesListSlot, {})] }));
|
|
12
|
+
};
|
|
13
|
+
export default HomePage;
|
|
14
|
+
//# sourceMappingURL=HomePage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HomePage.js","sourceRoot":"","sources":["../../src/home/HomePage.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEhE,OAAO,cAAc,MAAM,2BAA2B,CAAC;AACvD,OAAO,mBAAmB,MAAM,gCAAgC,CAAC;AAEjE,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,QAAQ,GAAG,GAAG,EAAE;IACpB,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IAEpC,OAAO,CACL,8BACE,KAAC,MAAM,cACL,0BACG,aAAa,CAAC,QAAQ,CAAC,SAAS,EAAE;wBACjC,QAAQ,EAAE,aAAa,EAAE,CAAC,QAAQ;qBACnC,CAAC,GACI,GACD,EACT,KAAC,cAAc,KAAG,EAClB,KAAC,mBAAmB,KAAG,IACtB,CACJ,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,QAAQ,CAAC","sourcesContent":["import { Helmet } from 'react-helmet';\nimport { getSiteConfig, useIntl } from '@openedx/frontend-base';\n\nimport HomeBannerSlot from '@src/slots/HomeBannerSlot';\nimport HomeCoursesListSlot from '@src/slots/HomeCoursesListSlot';\n\nimport messages from './messages';\n\nconst HomePage = () => {\n const { formatMessage } = useIntl();\n\n return (\n <>\n <Helmet>\n <title>\n {formatMessage(messages.pageTitle, {\n siteName: getSiteConfig().siteName,\n })}\n </title>\n </Helmet>\n <HomeBannerSlot />\n <HomeCoursesListSlot />\n </>\n );\n};\n\nexport default HomePage;\n"]}
|