From 172533bfcd01ffe81b9d193253939e65fc90ec36 Mon Sep 17 00:00:00 2001 From: "Adolfo R. Brandes" Date: Wed, 2 Sep 2026 06:50:17 -0300 Subject: [PATCH] feat: map frontend-app-catalog's legacy plugin slots Add a catalog slot map covering the 26 slots on frontend-app-catalog's legacy-mfe branch, plus its mfeId route entry. Co-Authored-By: Claude --- src/mappings/routeMap.ts | 5 ++ src/mappings/slotMaps/catalog.ts | 96 ++++++++++++++++++++++++++++++++ src/mappings/slotMaps/index.ts | 3 + 3 files changed, 104 insertions(+) create mode 100644 src/mappings/slotMaps/catalog.ts diff --git a/src/mappings/routeMap.ts b/src/mappings/routeMap.ts index 0ffec41..8c0728c 100644 --- a/src/mappings/routeMap.ts +++ b/src/mappings/routeMap.ts @@ -12,6 +12,11 @@ export const defaultRouteMap: RouteMap = { 'org.openedx.frontend.role.confirmPassword', 'org.openedx.frontend.role.welcome', ], + catalog: [ + 'org.openedx.frontend.role.catalog', + 'org.openedx.frontend.role.courses', + 'org.openedx.frontend.role.courseAbout', + ], 'learner-dashboard': [ 'org.openedx.frontend.role.dashboard', ], diff --git a/src/mappings/slotMaps/catalog.ts b/src/mappings/slotMaps/catalog.ts new file mode 100644 index 0000000..8286f04 --- /dev/null +++ b/src/mappings/slotMaps/catalog.ts @@ -0,0 +1,96 @@ +import { SlotMap } from '../../types'; + +/* + * frontend-app-catalog: `legacy-mfe` slot ids -> frontend-base port ids. + * A 1:1 rename, snake_case page paths to camelCase leaves. Every default comes + * from JSX children (the port registers no widgets on these slots), so + * synthetic-defaultContent removal is enough, and the legacy slots declare no + * `idAliases`. + */ +export const catalogSlotMap: SlotMap = { + /* ----- Course about page ----- */ + 'org.openedx.frontend.catalog.course_about_page.course_image': { + targetSlotId: 'org.openedx.frontend.slot.catalog.courseAboutCourseImage.v1', + }, + 'org.openedx.frontend.catalog.course_about_page.course_media': { + targetSlotId: 'org.openedx.frontend.slot.catalog.courseAboutCourseMedia.v1', + }, + 'org.openedx.frontend.catalog.course_about_page.enrollment_button': { + targetSlotId: 'org.openedx.frontend.slot.catalog.courseAboutEnrollmentButton.v1', + }, + 'org.openedx.frontend.catalog.course_about_page.intro': { + targetSlotId: 'org.openedx.frontend.slot.catalog.courseAboutIntro.v1', + }, + 'org.openedx.frontend.catalog.course_about_page.intro_video_button': { + targetSlotId: 'org.openedx.frontend.slot.catalog.courseAboutIntroVideoButton.v1', + }, + 'org.openedx.frontend.catalog.course_about_page.intro_video_modal': { + targetSlotId: 'org.openedx.frontend.slot.catalog.courseAboutIntroVideoModal.v1', + }, + 'org.openedx.frontend.catalog.course_about_page.intro_video_modal_content': { + targetSlotId: 'org.openedx.frontend.slot.catalog.courseAboutIntroVideoModalContent.v1', + }, + 'org.openedx.frontend.catalog.course_about_page.overview': { + targetSlotId: 'org.openedx.frontend.slot.catalog.courseAboutOverview.v1', + }, + 'org.openedx.frontend.catalog.course_about_page.sidebar': { + targetSlotId: 'org.openedx.frontend.slot.catalog.courseAboutSidebar.v1', + }, + 'org.openedx.frontend.catalog.course_about_page.sidebar.details.course_price': { + targetSlotId: 'org.openedx.frontend.slot.catalog.courseAboutSidebarCoursePrice.v1', + }, + 'org.openedx.frontend.catalog.course_about_page.sidebar.social': { + targetSlotId: 'org.openedx.frontend.slot.catalog.courseAboutSidebarSocial.v1', + }, + + /* ----- Course catalog page ----- */ + 'org.openedx.frontend.catalog.course_catalog_page.data_table': { + targetSlotId: 'org.openedx.frontend.slot.catalog.courseCatalogDataTable.v1', + }, + 'org.openedx.frontend.catalog.course_catalog_page.data_table.card_view': { + targetSlotId: 'org.openedx.frontend.slot.catalog.courseCatalogDataTableCardView.v1', + }, + 'org.openedx.frontend.catalog.course_catalog_page.data_table.control_bar': { + targetSlotId: 'org.openedx.frontend.slot.catalog.courseCatalogDataTableControlBar.v1', + }, + 'org.openedx.frontend.catalog.course_catalog_page.data_table.course_card': { + targetSlotId: 'org.openedx.frontend.slot.catalog.courseCatalogDataTableCourseCard.v1', + }, + 'org.openedx.frontend.catalog.course_catalog_page.data_table.table_footer': { + targetSlotId: 'org.openedx.frontend.slot.catalog.courseCatalogDataTableTableFooter.v1', + }, + 'org.openedx.frontend.catalog.course_catalog_page.intro': { + targetSlotId: 'org.openedx.frontend.slot.catalog.courseCatalogIntro.v1', + }, + 'org.openedx.frontend.catalog.course_catalog_page.search_field': { + targetSlotId: 'org.openedx.frontend.slot.catalog.courseCatalogSearchField.v1', + }, + + /* ----- Home page ----- */ + 'org.openedx.frontend.catalog.home_page.banner': { + targetSlotId: 'org.openedx.frontend.slot.catalog.homeBanner.v1', + }, + 'org.openedx.frontend.catalog.home_page.course_card': { + targetSlotId: 'org.openedx.frontend.slot.catalog.homeCourseCard.v1', + }, + 'org.openedx.frontend.catalog.home_page.courses_list': { + targetSlotId: 'org.openedx.frontend.slot.catalog.homeCoursesList.v1', + }, + 'org.openedx.frontend.catalog.home_page.overlay_html': { + targetSlotId: 'org.openedx.frontend.slot.catalog.homeOverlayHtml.v1', + }, + 'org.openedx.frontend.catalog.home_page.promo_video_button': { + targetSlotId: 'org.openedx.frontend.slot.catalog.homePromoVideoButton.v1', + }, + 'org.openedx.frontend.catalog.home_page.promo_video_modal': { + targetSlotId: 'org.openedx.frontend.slot.catalog.homePromoVideoModal.v1', + }, + 'org.openedx.frontend.catalog.home_page.promo_video_modal_content': { + targetSlotId: 'org.openedx.frontend.slot.catalog.homePromoVideoModalContent.v1', + }, + + /* ----- Generic ----- */ + 'org.openedx.frontend.catalog.generic.loader': { + targetSlotId: 'org.openedx.frontend.slot.catalog.loader.v1', + }, +}; diff --git a/src/mappings/slotMaps/index.ts b/src/mappings/slotMaps/index.ts index e075fe1..8b92e51 100644 --- a/src/mappings/slotMaps/index.ts +++ b/src/mappings/slotMaps/index.ts @@ -1,11 +1,13 @@ import { SlotMap } from '../../types'; import { authnSlotMap } from './authn'; +import { catalogSlotMap } from './catalog'; import { footerSlotMap } from './footer'; import { headerSlotMap } from './header'; import { learnerDashboardSlotMap } from './learnerDashboard'; export { authnSlotMap } from './authn'; +export { catalogSlotMap } from './catalog'; export { footerSlotMap } from './footer'; export { headerSlotMap } from './header'; export { learnerDashboardSlotMap } from './learnerDashboard'; @@ -16,4 +18,5 @@ export const slotMaps: SlotMap[] = [ footerSlotMap, authnSlotMap, learnerDashboardSlotMap, + catalogSlotMap, ];