@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.
Files changed (390) hide show
  1. package/LICENSE +661 -0
  2. package/README.rst +300 -0
  3. package/dist/Main.d.ts +3 -0
  4. package/dist/Main.js +8 -0
  5. package/dist/Main.js.map +1 -0
  6. package/dist/app.d.ts +3 -0
  7. package/dist/app.js +22 -0
  8. package/dist/app.js.map +1 -0
  9. package/dist/assets/images/no-course-image.svg +4 -0
  10. package/dist/assets/scss/_animations.scss +23 -0
  11. package/dist/catalog/CatalogPage.d.ts +2 -0
  12. package/dist/catalog/CatalogPage.js +64 -0
  13. package/dist/catalog/CatalogPage.js.map +1 -0
  14. package/dist/catalog/hooks/types.d.ts +24 -0
  15. package/dist/catalog/hooks/types.js +2 -0
  16. package/dist/catalog/hooks/types.js.map +1 -0
  17. package/dist/catalog/hooks/useCatalog.d.ts +29 -0
  18. package/dist/catalog/hooks/useCatalog.js +52 -0
  19. package/dist/catalog/hooks/useCatalog.js.map +1 -0
  20. package/dist/catalog/hooks/useCourseData.d.ts +12 -0
  21. package/dist/catalog/hooks/useCourseData.js +21 -0
  22. package/dist/catalog/hooks/useCourseData.js.map +1 -0
  23. package/dist/catalog/hooks/useDebouncedSearchInput.d.ts +7 -0
  24. package/dist/catalog/hooks/useDebouncedSearchInput.js +26 -0
  25. package/dist/catalog/hooks/useDebouncedSearchInput.js.map +1 -0
  26. package/dist/catalog/hooks/useFilter.d.ts +18 -0
  27. package/dist/catalog/hooks/useFilter.js +58 -0
  28. package/dist/catalog/hooks/useFilter.js.map +1 -0
  29. package/dist/catalog/hooks/usePagination.d.ts +13 -0
  30. package/dist/catalog/hooks/usePagination.js +25 -0
  31. package/dist/catalog/hooks/usePagination.js.map +1 -0
  32. package/dist/catalog/hooks/useSearch.d.ts +16 -0
  33. package/dist/catalog/hooks/useSearch.js +63 -0
  34. package/dist/catalog/hooks/useSearch.js.map +1 -0
  35. package/dist/catalog/messages.d.ts +68 -0
  36. package/dist/catalog/messages.js +70 -0
  37. package/dist/catalog/messages.js.map +1 -0
  38. package/dist/catalog/types.d.ts +6 -0
  39. package/dist/catalog/types.js +2 -0
  40. package/dist/catalog/types.js.map +1 -0
  41. package/dist/catalog/utils.d.ts +25 -0
  42. package/dist/catalog/utils.js +82 -0
  43. package/dist/catalog/utils.js.map +1 -0
  44. package/dist/constants.d.ts +18 -0
  45. package/dist/constants.js +15 -0
  46. package/dist/constants.js.map +1 -0
  47. package/dist/course-about/CourseAboutPage.d.ts +2 -0
  48. package/dist/course-about/CourseAboutPage.js +39 -0
  49. package/dist/course-about/CourseAboutPage.js.map +1 -0
  50. package/dist/course-about/CourseAboutPage.scss +36 -0
  51. package/dist/course-about/course-intro/CourseIntro.d.ts +4 -0
  52. package/dist/course-about/course-intro/CourseIntro.js +19 -0
  53. package/dist/course-about/course-intro/CourseIntro.js.map +1 -0
  54. package/dist/course-about/course-intro/components/EnrolledStatus.d.ts +2 -0
  55. package/dist/course-about/course-intro/components/EnrolledStatus.js +13 -0
  56. package/dist/course-about/course-intro/components/EnrolledStatus.js.map +1 -0
  57. package/dist/course-about/course-intro/components/EnrollmentButton.d.ts +2 -0
  58. package/dist/course-about/course-intro/components/EnrollmentButton.js +12 -0
  59. package/dist/course-about/course-intro/components/EnrollmentButton.js.map +1 -0
  60. package/dist/course-about/course-intro/components/StatusMessage.d.ts +2 -0
  61. package/dist/course-about/course-intro/components/StatusMessage.js +12 -0
  62. package/dist/course-about/course-intro/components/StatusMessage.js.map +1 -0
  63. package/dist/course-about/course-intro/components/index.d.ts +3 -0
  64. package/dist/course-about/course-intro/components/index.js +4 -0
  65. package/dist/course-about/course-intro/components/index.js.map +1 -0
  66. package/dist/course-about/course-intro/components/types.d.ts +18 -0
  67. package/dist/course-about/course-intro/components/types.js +2 -0
  68. package/dist/course-about/course-intro/components/types.js.map +1 -0
  69. package/dist/course-about/course-intro/constants.d.ts +10 -0
  70. package/dist/course-about/course-intro/constants.js +12 -0
  71. package/dist/course-about/course-intro/constants.js.map +1 -0
  72. package/dist/course-about/course-intro/course-media/CourseMedia.d.ts +3 -0
  73. package/dist/course-about/course-intro/course-media/CourseMedia.js +17 -0
  74. package/dist/course-about/course-intro/course-media/CourseMedia.js.map +1 -0
  75. package/dist/course-about/course-intro/course-media/CourseMedia.scss +24 -0
  76. package/dist/course-about/course-intro/course-media/messages.d.ts +8 -0
  77. package/dist/course-about/course-intro/course-media/messages.js +10 -0
  78. package/dist/course-about/course-intro/course-media/messages.js.map +1 -0
  79. package/dist/course-about/course-intro/course-media/types.d.ts +8 -0
  80. package/dist/course-about/course-intro/course-media/types.js +2 -0
  81. package/dist/course-about/course-intro/course-media/types.js.map +1 -0
  82. package/dist/course-about/course-intro/course-media/utils.d.ts +12 -0
  83. package/dist/course-about/course-intro/course-media/utils.js +18 -0
  84. package/dist/course-about/course-intro/course-media/utils.js.map +1 -0
  85. package/dist/course-about/course-intro/hooks/index.d.ts +2 -0
  86. package/dist/course-about/course-intro/hooks/index.js +3 -0
  87. package/dist/course-about/course-intro/hooks/index.js.map +1 -0
  88. package/dist/course-about/course-intro/hooks/types.d.ts +16 -0
  89. package/dist/course-about/course-intro/hooks/types.js +2 -0
  90. package/dist/course-about/course-intro/hooks/types.js.map +1 -0
  91. package/dist/course-about/course-intro/hooks/useEnrollmentActions.d.ts +7 -0
  92. package/dist/course-about/course-intro/hooks/useEnrollmentActions.js +47 -0
  93. package/dist/course-about/course-intro/hooks/useEnrollmentActions.js.map +1 -0
  94. package/dist/course-about/course-intro/hooks/useEnrollmentStatus.d.ts +4 -0
  95. package/dist/course-about/course-intro/hooks/useEnrollmentStatus.js +35 -0
  96. package/dist/course-about/course-intro/hooks/useEnrollmentStatus.js.map +1 -0
  97. package/dist/course-about/course-intro/messages.d.ts +43 -0
  98. package/dist/course-about/course-intro/messages.js +45 -0
  99. package/dist/course-about/course-intro/messages.js.map +1 -0
  100. package/dist/course-about/course-intro/utils.d.ts +4 -0
  101. package/dist/course-about/course-intro/utils.js +7 -0
  102. package/dist/course-about/course-intro/utils.js.map +1 -0
  103. package/dist/course-about/course-overview/index.d.ts +2 -0
  104. package/dist/course-about/course-overview/index.js +21 -0
  105. package/dist/course-about/course-overview/index.js.map +1 -0
  106. package/dist/course-about/course-overview/types.d.ts +4 -0
  107. package/dist/course-about/course-overview/types.js +2 -0
  108. package/dist/course-about/course-overview/types.js.map +1 -0
  109. package/dist/course-about/course-overview/utils.d.ts +6 -0
  110. package/dist/course-about/course-overview/utils.js +12 -0
  111. package/dist/course-about/course-overview/utils.js.map +1 -0
  112. package/dist/course-about/course-sidebar/CourseSidebar.d.ts +5 -0
  113. package/dist/course-about/course-sidebar/CourseSidebar.js +7 -0
  114. package/dist/course-about/course-sidebar/CourseSidebar.js.map +1 -0
  115. package/dist/course-about/course-sidebar/sidebar-details/SidebarDetails.d.ts +5 -0
  116. package/dist/course-about/course-sidebar/sidebar-details/SidebarDetails.js +38 -0
  117. package/dist/course-about/course-sidebar/sidebar-details/SidebarDetails.js.map +1 -0
  118. package/dist/course-about/course-sidebar/sidebar-details/SidebarDetailsItem.d.ts +3 -0
  119. package/dist/course-about/course-sidebar/sidebar-details/SidebarDetailsItem.js +5 -0
  120. package/dist/course-about/course-sidebar/sidebar-details/SidebarDetailsItem.js.map +1 -0
  121. package/dist/course-about/course-sidebar/sidebar-details/constants.d.ts +7 -0
  122. package/dist/course-about/course-sidebar/sidebar-details/constants.js +8 -0
  123. package/dist/course-about/course-sidebar/sidebar-details/constants.js.map +1 -0
  124. package/dist/course-about/course-sidebar/sidebar-details/messages.d.ts +43 -0
  125. package/dist/course-about/course-sidebar/sidebar-details/messages.js +45 -0
  126. package/dist/course-about/course-sidebar/sidebar-details/messages.js.map +1 -0
  127. package/dist/course-about/course-sidebar/sidebar-details/types.d.ts +8 -0
  128. package/dist/course-about/course-sidebar/sidebar-details/types.js +2 -0
  129. package/dist/course-about/course-sidebar/sidebar-details/types.js.map +1 -0
  130. package/dist/course-about/course-sidebar/sidebar-details/utils.d.ts +37 -0
  131. package/dist/course-about/course-sidebar/sidebar-details/utils.js +49 -0
  132. package/dist/course-about/course-sidebar/sidebar-details/utils.js.map +1 -0
  133. package/dist/course-about/course-sidebar/sidebar-social/SidebarSocial.d.ts +5 -0
  134. package/dist/course-about/course-sidebar/sidebar-social/SidebarSocial.js +14 -0
  135. package/dist/course-about/course-sidebar/sidebar-social/SidebarSocial.js.map +1 -0
  136. package/dist/course-about/course-sidebar/sidebar-social/SocialLinks.d.ts +5 -0
  137. package/dist/course-about/course-sidebar/sidebar-social/SocialLinks.js +5 -0
  138. package/dist/course-about/course-sidebar/sidebar-social/SocialLinks.js.map +1 -0
  139. package/dist/course-about/course-sidebar/sidebar-social/messages.d.ts +43 -0
  140. package/dist/course-about/course-sidebar/sidebar-social/messages.js +45 -0
  141. package/dist/course-about/course-sidebar/sidebar-social/messages.js.map +1 -0
  142. package/dist/course-about/course-sidebar/sidebar-social/types.d.ts +7 -0
  143. package/dist/course-about/course-sidebar/sidebar-social/types.js +2 -0
  144. package/dist/course-about/course-sidebar/sidebar-social/types.js.map +1 -0
  145. package/dist/course-about/course-sidebar/sidebar-social/utils.d.ts +23 -0
  146. package/dist/course-about/course-sidebar/sidebar-social/utils.js +71 -0
  147. package/dist/course-about/course-sidebar/sidebar-social/utils.js.map +1 -0
  148. package/dist/course-about/data/api.d.ts +10 -0
  149. package/dist/course-about/data/api.js +36 -0
  150. package/dist/course-about/data/api.js.map +1 -0
  151. package/dist/course-about/data/hooks.d.ts +3 -0
  152. package/dist/course-about/data/hooks.js +35 -0
  153. package/dist/course-about/data/hooks.js.map +1 -0
  154. package/dist/course-about/data/types.d.ts +10 -0
  155. package/dist/course-about/data/types.js +2 -0
  156. package/dist/course-about/data/types.js.map +1 -0
  157. package/dist/course-about/data/urls.d.ts +8 -0
  158. package/dist/course-about/data/urls.js +10 -0
  159. package/dist/course-about/data/urls.js.map +1 -0
  160. package/dist/course-about/layout.d.ts +31 -0
  161. package/dist/course-about/layout.js +11 -0
  162. package/dist/course-about/layout.js.map +1 -0
  163. package/dist/course-about/messages.d.ts +18 -0
  164. package/dist/course-about/messages.js +20 -0
  165. package/dist/course-about/messages.js.map +1 -0
  166. package/dist/course-about/types.d.ts +125 -0
  167. package/dist/course-about/types.js +2 -0
  168. package/dist/course-about/types.js.map +1 -0
  169. package/dist/data/course-list-search/api.d.ts +6 -0
  170. package/dist/data/course-list-search/api.js +33 -0
  171. package/dist/data/course-list-search/api.js.map +1 -0
  172. package/dist/data/course-list-search/constants.d.ts +2 -0
  173. package/dist/data/course-list-search/constants.js +3 -0
  174. package/dist/data/course-list-search/constants.js.map +1 -0
  175. package/dist/data/course-list-search/hooks.d.ts +5 -0
  176. package/dist/data/course-list-search/hooks.js +47 -0
  177. package/dist/data/course-list-search/hooks.js.map +1 -0
  178. package/dist/data/course-list-search/types.d.ts +65 -0
  179. package/dist/data/course-list-search/types.js +2 -0
  180. package/dist/data/course-list-search/types.js.map +1 -0
  181. package/dist/data/course-list-search/urls.d.ts +2 -0
  182. package/dist/data/course-list-search/urls.js +4 -0
  183. package/dist/data/course-list-search/urls.js.map +1 -0
  184. package/dist/data/course-list-search/utils.d.ts +9 -0
  185. package/dist/data/course-list-search/utils.js +40 -0
  186. package/dist/data/course-list-search/utils.js.map +1 -0
  187. package/dist/generic/alert-notification/index.d.ts +2 -0
  188. package/dist/generic/alert-notification/index.js +5 -0
  189. package/dist/generic/alert-notification/index.js.map +1 -0
  190. package/dist/generic/alert-notification/types.d.ts +6 -0
  191. package/dist/generic/alert-notification/types.js +2 -0
  192. package/dist/generic/alert-notification/types.js.map +1 -0
  193. package/dist/generic/course-card/index.d.ts +2 -0
  194. package/dist/generic/course-card/index.js +27 -0
  195. package/dist/generic/course-card/index.js.map +1 -0
  196. package/dist/generic/course-card/messages.d.ts +8 -0
  197. package/dist/generic/course-card/messages.js +10 -0
  198. package/dist/generic/course-card/messages.js.map +1 -0
  199. package/dist/generic/course-card/types.d.ts +35 -0
  200. package/dist/generic/course-card/types.js +2 -0
  201. package/dist/generic/course-card/types.js.map +1 -0
  202. package/dist/generic/course-card/utils.d.ts +10 -0
  203. package/dist/generic/course-card/utils.js +24 -0
  204. package/dist/generic/course-card/utils.js.map +1 -0
  205. package/dist/generic/index.d.ts +5 -0
  206. package/dist/generic/index.js +6 -0
  207. package/dist/generic/index.js.map +1 -0
  208. package/dist/generic/loading-spinner/index.d.ts +3 -0
  209. package/dist/generic/loading-spinner/index.js +10 -0
  210. package/dist/generic/loading-spinner/index.js.map +1 -0
  211. package/dist/generic/loading-spinner/messages.d.ts +8 -0
  212. package/dist/generic/loading-spinner/messages.js +10 -0
  213. package/dist/generic/loading-spinner/messages.js.map +1 -0
  214. package/dist/generic/loading-spinner/types.d.ts +3 -0
  215. package/dist/generic/loading-spinner/types.js +2 -0
  216. package/dist/generic/loading-spinner/types.js.map +1 -0
  217. package/dist/generic/sub-header/index.d.ts +2 -0
  218. package/dist/generic/sub-header/index.js +4 -0
  219. package/dist/generic/sub-header/index.js.map +1 -0
  220. package/dist/generic/sub-header/types.d.ts +4 -0
  221. package/dist/generic/sub-header/types.js +2 -0
  222. package/dist/generic/sub-header/types.js.map +1 -0
  223. package/dist/generic/video-modal/index.d.ts +2 -0
  224. package/dist/generic/video-modal/index.js +10 -0
  225. package/dist/generic/video-modal/index.js.map +1 -0
  226. package/dist/generic/video-modal/messages.d.ts +13 -0
  227. package/dist/generic/video-modal/messages.js +15 -0
  228. package/dist/generic/video-modal/messages.js.map +1 -0
  229. package/dist/generic/video-modal/types.d.ts +6 -0
  230. package/dist/generic/video-modal/types.js +2 -0
  231. package/dist/generic/video-modal/types.js.map +1 -0
  232. package/dist/home/HomePage.d.ts +2 -0
  233. package/dist/home/HomePage.js +14 -0
  234. package/dist/home/HomePage.js.map +1 -0
  235. package/dist/home/components/courses-list/CoursesList.d.ts +2 -0
  236. package/dist/home/components/courses-list/CoursesList.js +50 -0
  237. package/dist/home/components/courses-list/CoursesList.js.map +1 -0
  238. package/dist/home/components/courses-list/messages.d.ts +23 -0
  239. package/dist/home/components/courses-list/messages.js +25 -0
  240. package/dist/home/components/courses-list/messages.js.map +1 -0
  241. package/dist/home/components/home-banner/HomeBanner.d.ts +2 -0
  242. package/dist/home/components/home-banner/HomeBanner.js +25 -0
  243. package/dist/home/components/home-banner/HomeBanner.js.map +1 -0
  244. package/dist/home/components/home-banner/HomePageOverlay.d.ts +2 -0
  245. package/dist/home/components/home-banner/HomePageOverlay.js +10 -0
  246. package/dist/home/components/home-banner/HomePageOverlay.js.map +1 -0
  247. package/dist/home/components/home-banner/HomePromoVideoBtn.d.ts +3 -0
  248. package/dist/home/components/home-banner/HomePromoVideoBtn.js +10 -0
  249. package/dist/home/components/home-banner/HomePromoVideoBtn.js.map +1 -0
  250. package/dist/home/components/home-banner/index.scss +20 -0
  251. package/dist/home/components/home-banner/messages.d.ts +28 -0
  252. package/dist/home/components/home-banner/messages.js +30 -0
  253. package/dist/home/components/home-banner/messages.js.map +1 -0
  254. package/dist/home/components/home-banner/types.d.ts +3 -0
  255. package/dist/home/components/home-banner/types.js +2 -0
  256. package/dist/home/components/home-banner/types.js.map +1 -0
  257. package/dist/home/components/index.d.ts +2 -0
  258. package/dist/home/components/index.js +3 -0
  259. package/dist/home/components/index.js.map +1 -0
  260. package/dist/home/constants.d.ts +1 -0
  261. package/dist/home/constants.js +2 -0
  262. package/dist/home/constants.js.map +1 -0
  263. package/dist/home/messages.d.ts +8 -0
  264. package/dist/home/messages.js +10 -0
  265. package/dist/home/messages.js.map +1 -0
  266. package/dist/i18n/index.d.ts +1 -0
  267. package/dist/i18n/index.js +2 -0
  268. package/dist/i18n/index.js.map +1 -0
  269. package/dist/index.d.ts +23 -0
  270. package/dist/index.js +3 -0
  271. package/dist/index.js.map +1 -0
  272. package/dist/routes.d.ts +28 -0
  273. package/dist/routes.js +62 -0
  274. package/dist/routes.js.map +1 -0
  275. package/dist/slots/CourseAboutCourseImageSlot/index.d.ts +6 -0
  276. package/dist/slots/CourseAboutCourseImageSlot/index.js +9 -0
  277. package/dist/slots/CourseAboutCourseImageSlot/index.js.map +1 -0
  278. package/dist/slots/CourseAboutCourseMediaSlot/index.d.ts +9 -0
  279. package/dist/slots/CourseAboutCourseMediaSlot/index.js +6 -0
  280. package/dist/slots/CourseAboutCourseMediaSlot/index.js.map +1 -0
  281. package/dist/slots/CourseAboutEnrollmentButtonSlot/index.d.ts +10 -0
  282. package/dist/slots/CourseAboutEnrollmentButtonSlot/index.js +6 -0
  283. package/dist/slots/CourseAboutEnrollmentButtonSlot/index.js.map +1 -0
  284. package/dist/slots/CourseAboutIntroSlot/index.d.ts +6 -0
  285. package/dist/slots/CourseAboutIntroSlot/index.js +6 -0
  286. package/dist/slots/CourseAboutIntroSlot/index.js.map +1 -0
  287. package/dist/slots/CourseAboutIntroVideoSlots/CourseAboutIntroVideoButtonSlot/index.d.ts +6 -0
  288. package/dist/slots/CourseAboutIntroVideoSlots/CourseAboutIntroVideoButtonSlot/index.js +11 -0
  289. package/dist/slots/CourseAboutIntroVideoSlots/CourseAboutIntroVideoButtonSlot/index.js.map +1 -0
  290. package/dist/slots/CourseAboutIntroVideoSlots/CourseAboutIntroVideoModalContentSlot/index.d.ts +6 -0
  291. package/dist/slots/CourseAboutIntroVideoSlots/CourseAboutIntroVideoModalContentSlot/index.js +9 -0
  292. package/dist/slots/CourseAboutIntroVideoSlots/CourseAboutIntroVideoModalContentSlot/index.js.map +1 -0
  293. package/dist/slots/CourseAboutIntroVideoSlots/CourseAboutIntroVideoModalSlot/index.d.ts +6 -0
  294. package/dist/slots/CourseAboutIntroVideoSlots/CourseAboutIntroVideoModalSlot/index.js +6 -0
  295. package/dist/slots/CourseAboutIntroVideoSlots/CourseAboutIntroVideoModalSlot/index.js.map +1 -0
  296. package/dist/slots/CourseAboutIntroVideoSlots/index.d.ts +4 -0
  297. package/dist/slots/CourseAboutIntroVideoSlots/index.js +5 -0
  298. package/dist/slots/CourseAboutIntroVideoSlots/index.js.map +1 -0
  299. package/dist/slots/CourseAboutOverviewSlot/index.d.ts +6 -0
  300. package/dist/slots/CourseAboutOverviewSlot/index.js +6 -0
  301. package/dist/slots/CourseAboutOverviewSlot/index.js.map +1 -0
  302. package/dist/slots/CourseAboutSidebarCoursePriceSlot/index.d.ts +6 -0
  303. package/dist/slots/CourseAboutSidebarCoursePriceSlot/index.js +11 -0
  304. package/dist/slots/CourseAboutSidebarCoursePriceSlot/index.js.map +1 -0
  305. package/dist/slots/CourseAboutSidebarSlot/index.d.ts +6 -0
  306. package/dist/slots/CourseAboutSidebarSlot/index.js +6 -0
  307. package/dist/slots/CourseAboutSidebarSlot/index.js.map +1 -0
  308. package/dist/slots/CourseAboutSidebarSocialSlot/index.d.ts +6 -0
  309. package/dist/slots/CourseAboutSidebarSocialSlot/index.js +22 -0
  310. package/dist/slots/CourseAboutSidebarSocialSlot/index.js.map +1 -0
  311. package/dist/slots/CourseCatalogDataTableSlots/CourseCatalogDataTableCardViewSlot/CourseCatalogDataTableCourseCardSlot/index.d.ts +16 -0
  312. package/dist/slots/CourseCatalogDataTableSlots/CourseCatalogDataTableCardViewSlot/CourseCatalogDataTableCourseCardSlot/index.js +18 -0
  313. package/dist/slots/CourseCatalogDataTableSlots/CourseCatalogDataTableCardViewSlot/CourseCatalogDataTableCourseCardSlot/index.js.map +1 -0
  314. package/dist/slots/CourseCatalogDataTableSlots/CourseCatalogDataTableCardViewSlot/index.d.ts +6 -0
  315. package/dist/slots/CourseCatalogDataTableSlots/CourseCatalogDataTableCardViewSlot/index.js +11 -0
  316. package/dist/slots/CourseCatalogDataTableSlots/CourseCatalogDataTableCardViewSlot/index.js.map +1 -0
  317. package/dist/slots/CourseCatalogDataTableSlots/CourseCatalogDataTableControlBarSlot/index.d.ts +6 -0
  318. package/dist/slots/CourseCatalogDataTableSlots/CourseCatalogDataTableControlBarSlot/index.js +6 -0
  319. package/dist/slots/CourseCatalogDataTableSlots/CourseCatalogDataTableControlBarSlot/index.js.map +1 -0
  320. package/dist/slots/CourseCatalogDataTableSlots/CourseCatalogDataTableSlot/index.d.ts +23 -0
  321. package/dist/slots/CourseCatalogDataTableSlots/CourseCatalogDataTableSlot/index.js +17 -0
  322. package/dist/slots/CourseCatalogDataTableSlots/CourseCatalogDataTableSlot/index.js.map +1 -0
  323. package/dist/slots/CourseCatalogDataTableSlots/CourseCatalogDataTableTableFooterSlot/index.d.ts +2 -0
  324. package/dist/slots/CourseCatalogDataTableSlots/CourseCatalogDataTableTableFooterSlot/index.js +6 -0
  325. package/dist/slots/CourseCatalogDataTableSlots/CourseCatalogDataTableTableFooterSlot/index.js.map +1 -0
  326. package/dist/slots/CourseCatalogDataTableSlots/index.d.ts +6 -0
  327. package/dist/slots/CourseCatalogDataTableSlots/index.js +7 -0
  328. package/dist/slots/CourseCatalogDataTableSlots/index.js.map +1 -0
  329. package/dist/slots/CourseCatalogIntroSlot/index.d.ts +6 -0
  330. package/dist/slots/CourseCatalogIntroSlot/index.js +17 -0
  331. package/dist/slots/CourseCatalogIntroSlot/index.js.map +1 -0
  332. package/dist/slots/CourseCatalogSearchFieldSlot/index.d.ts +7 -0
  333. package/dist/slots/CourseCatalogSearchFieldSlot/index.js +21 -0
  334. package/dist/slots/CourseCatalogSearchFieldSlot/index.js.map +1 -0
  335. package/dist/slots/HomeBannerSlot/index.d.ts +2 -0
  336. package/dist/slots/HomeBannerSlot/index.js +6 -0
  337. package/dist/slots/HomeBannerSlot/index.js.map +1 -0
  338. package/dist/slots/HomeCourseCardSlot/index.d.ts +16 -0
  339. package/dist/slots/HomeCourseCardSlot/index.js +18 -0
  340. package/dist/slots/HomeCourseCardSlot/index.js.map +1 -0
  341. package/dist/slots/HomeCoursesListSlot/index.d.ts +2 -0
  342. package/dist/slots/HomeCoursesListSlot/index.js +6 -0
  343. package/dist/slots/HomeCoursesListSlot/index.js.map +1 -0
  344. package/dist/slots/HomeOverlayHtmlSlot/index.d.ts +2 -0
  345. package/dist/slots/HomeOverlayHtmlSlot/index.js +6 -0
  346. package/dist/slots/HomeOverlayHtmlSlot/index.js.map +1 -0
  347. package/dist/slots/HomePromoVideoSlots/HomePromoVideoButtonSlot/index.d.ts +4 -0
  348. package/dist/slots/HomePromoVideoSlots/HomePromoVideoButtonSlot/index.js +8 -0
  349. package/dist/slots/HomePromoVideoSlots/HomePromoVideoButtonSlot/index.js.map +1 -0
  350. package/dist/slots/HomePromoVideoSlots/HomePromoVideoModalContentSlot/index.d.ts +6 -0
  351. package/dist/slots/HomePromoVideoSlots/HomePromoVideoModalContentSlot/index.js +9 -0
  352. package/dist/slots/HomePromoVideoSlots/HomePromoVideoModalContentSlot/index.js.map +1 -0
  353. package/dist/slots/HomePromoVideoSlots/HomePromoVideoModalSlot/index.d.ts +6 -0
  354. package/dist/slots/HomePromoVideoSlots/HomePromoVideoModalSlot/index.js +6 -0
  355. package/dist/slots/HomePromoVideoSlots/HomePromoVideoModalSlot/index.js.map +1 -0
  356. package/dist/slots/HomePromoVideoSlots/index.d.ts +4 -0
  357. package/dist/slots/HomePromoVideoSlots/index.js +5 -0
  358. package/dist/slots/HomePromoVideoSlots/index.js.map +1 -0
  359. package/dist/slots/LoaderSlot/index.d.ts +3 -0
  360. package/dist/slots/LoaderSlot/index.js +4 -0
  361. package/dist/slots/LoaderSlot/index.js.map +1 -0
  362. package/dist/slots.d.ts +3 -0
  363. package/dist/slots.js +7 -0
  364. package/dist/slots.js.map +1 -0
  365. package/dist/style.scss +4 -0
  366. package/dist/utils.d.ts +6 -0
  367. package/dist/utils.js +9 -0
  368. package/dist/utils.js.map +1 -0
  369. package/dist/widgets/CatalogHeader/CoursesLinkMenuItem.d.ts +3 -0
  370. package/dist/widgets/CatalogHeader/CoursesLinkMenuItem.js +9 -0
  371. package/dist/widgets/CatalogHeader/CoursesLinkMenuItem.js.map +1 -0
  372. package/dist/widgets/CatalogHeader/DiscoverLinkMenuItem.d.ts +3 -0
  373. package/dist/widgets/CatalogHeader/DiscoverLinkMenuItem.js +9 -0
  374. package/dist/widgets/CatalogHeader/DiscoverLinkMenuItem.js.map +1 -0
  375. package/dist/widgets/CatalogHeader/ExploreCoursesLinkMenuItem.d.ts +3 -0
  376. package/dist/widgets/CatalogHeader/ExploreCoursesLinkMenuItem.js +9 -0
  377. package/dist/widgets/CatalogHeader/ExploreCoursesLinkMenuItem.js.map +1 -0
  378. package/dist/widgets/CatalogHeader/ProgramsLinkMenuItem.d.ts +3 -0
  379. package/dist/widgets/CatalogHeader/ProgramsLinkMenuItem.js +9 -0
  380. package/dist/widgets/CatalogHeader/ProgramsLinkMenuItem.js.map +1 -0
  381. package/dist/widgets/CatalogHeader/app.d.ts +3 -0
  382. package/dist/widgets/CatalogHeader/app.js +55 -0
  383. package/dist/widgets/CatalogHeader/app.js.map +1 -0
  384. package/dist/widgets/CatalogHeader/index.d.ts +1 -0
  385. package/dist/widgets/CatalogHeader/index.js +2 -0
  386. package/dist/widgets/CatalogHeader/index.js.map +1 -0
  387. package/dist/widgets/CatalogHeader/messages.d.ts +32 -0
  388. package/dist/widgets/CatalogHeader/messages.js +25 -0
  389. package/dist/widgets/CatalogHeader/messages.js.map +1 -0
  390. package/package.json +86 -0
@@ -0,0 +1,45 @@
1
+ import { defineMessages } from '@openedx/frontend-base';
2
+ const messages = defineMessages({
3
+ socialSharingOptionsAriaLabel: {
4
+ id: 'category.course-about.sidebar-social.social-sharing-options-aria-label',
5
+ defaultMessage: 'Social sharing options',
6
+ description: 'Aria label for social sharing options.',
7
+ },
8
+ socialSharingTooltip: {
9
+ id: 'category.course-about.sidebar-social.social-sharing-tooltip',
10
+ defaultMessage: 'Share with friends and family!',
11
+ description: 'Tooltip for social sharing options.',
12
+ },
13
+ socialSharingTwitter: {
14
+ id: 'category.course-about.sidebar-social.social-sharing-twitter',
15
+ defaultMessage: 'Tweet that you\'ve enrolled in this course',
16
+ description: 'Twitter sharing option.',
17
+ },
18
+ socialSharingFacebook: {
19
+ id: 'category.course-about.sidebar-social.social-sharing-facebook',
20
+ defaultMessage: 'Post a Facebook message to say you\'ve enrolled in this course',
21
+ description: 'Facebook sharing option.',
22
+ },
23
+ socialSharingEmail: {
24
+ id: 'category.course-about.sidebar-social.social-sharing-email',
25
+ defaultMessage: 'Email someone to say you\'ve enrolled in this course',
26
+ description: 'Email sharing option.',
27
+ },
28
+ socialSharingEmailSubject: {
29
+ id: 'category.course-about.sidebar-social.social-sharing-email-subject',
30
+ defaultMessage: 'Take a course with {siteName} online',
31
+ description: 'Email subject for social sharing.',
32
+ },
33
+ socialSharingEmailBody: {
34
+ id: 'category.course-about.sidebar-social.social-sharing-email-body',
35
+ defaultMessage: 'I just enrolled in {courseNumber} {courseName} through {siteName} {url}',
36
+ description: 'Email body for social sharing.',
37
+ },
38
+ socialSharingTwitterText: {
39
+ id: 'category.course-about.sidebar-social.social-sharing-twitter-text',
40
+ defaultMessage: 'I just enrolled in {courseNumber} {courseName} through {platformTwitter} {url}',
41
+ description: 'Twitter text for social sharing.',
42
+ },
43
+ });
44
+ export default messages;
45
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../../src/course-about/course-sidebar/sidebar-social/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,6BAA6B,EAAE;QAC7B,EAAE,EAAE,wEAAwE;QAC5E,cAAc,EAAE,wBAAwB;QACxC,WAAW,EAAE,wCAAwC;KACtD;IACD,oBAAoB,EAAE;QACpB,EAAE,EAAE,6DAA6D;QACjE,cAAc,EAAE,gCAAgC;QAChD,WAAW,EAAE,qCAAqC;KACnD;IACD,oBAAoB,EAAE;QACpB,EAAE,EAAE,6DAA6D;QACjE,cAAc,EAAE,4CAA4C;QAC5D,WAAW,EAAE,yBAAyB;KACvC;IACD,qBAAqB,EAAE;QACrB,EAAE,EAAE,8DAA8D;QAClE,cAAc,EAAE,gEAAgE;QAChF,WAAW,EAAE,0BAA0B;KACxC;IACD,kBAAkB,EAAE;QAClB,EAAE,EAAE,2DAA2D;QAC/D,cAAc,EAAE,sDAAsD;QACtE,WAAW,EAAE,uBAAuB;KACrC;IACD,yBAAyB,EAAE;QACzB,EAAE,EAAE,mEAAmE;QACvE,cAAc,EAAE,sCAAsC;QACtD,WAAW,EAAE,mCAAmC;KACjD;IACD,sBAAsB,EAAE;QACtB,EAAE,EAAE,gEAAgE;QACpE,cAAc,EAAE,yEAAyE;QACzF,WAAW,EAAE,gCAAgC;KAC9C;IACD,wBAAwB,EAAE;QACxB,EAAE,EAAE,kEAAkE;QACtE,cAAc,EAAE,gFAAgF;QAChG,WAAW,EAAE,kCAAkC;KAChD;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n socialSharingOptionsAriaLabel: {\n id: 'category.course-about.sidebar-social.social-sharing-options-aria-label',\n defaultMessage: 'Social sharing options',\n description: 'Aria label for social sharing options.',\n },\n socialSharingTooltip: {\n id: 'category.course-about.sidebar-social.social-sharing-tooltip',\n defaultMessage: 'Share with friends and family!',\n description: 'Tooltip for social sharing options.',\n },\n socialSharingTwitter: {\n id: 'category.course-about.sidebar-social.social-sharing-twitter',\n defaultMessage: 'Tweet that you\\'ve enrolled in this course',\n description: 'Twitter sharing option.',\n },\n socialSharingFacebook: {\n id: 'category.course-about.sidebar-social.social-sharing-facebook',\n defaultMessage: 'Post a Facebook message to say you\\'ve enrolled in this course',\n description: 'Facebook sharing option.',\n },\n socialSharingEmail: {\n id: 'category.course-about.sidebar-social.social-sharing-email',\n defaultMessage: 'Email someone to say you\\'ve enrolled in this course',\n description: 'Email sharing option.',\n },\n socialSharingEmailSubject: {\n id: 'category.course-about.sidebar-social.social-sharing-email-subject',\n defaultMessage: 'Take a course with {siteName} online',\n description: 'Email subject for social sharing.',\n },\n socialSharingEmailBody: {\n id: 'category.course-about.sidebar-social.social-sharing-email-body',\n defaultMessage: 'I just enrolled in {courseNumber} {courseName} through {siteName} {url}',\n description: 'Email body for social sharing.',\n },\n socialSharingTwitterText: {\n id: 'category.course-about.sidebar-social.social-sharing-twitter-text',\n defaultMessage: 'I just enrolled in {courseNumber} {courseName} through {platformTwitter} {url}',\n description: 'Twitter text for social sharing.',\n },\n});\n\nexport default messages;\n"]}
@@ -0,0 +1,7 @@
1
+ import type { Icon } from '@openedx/paragon';
2
+ export interface SocialLink {
3
+ id: string;
4
+ destination: string;
5
+ icon: typeof Icon;
6
+ screenReaderText: string;
7
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/course-about/course-sidebar/sidebar-social/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Icon } from '@openedx/paragon';\n\nexport interface SocialLink {\n id: string,\n destination: string,\n icon: typeof Icon,\n screenReaderText: string,\n}\n"]}
@@ -0,0 +1,23 @@
1
+ import type { IntlShape } from '../../../utils';
2
+ import type { CourseAboutData } from '../../types';
3
+ /**
4
+ * Generates a Twitter share URL with formatted tweet text
5
+ */
6
+ export declare const getTwitterShareUrl: (data: CourseAboutData, intl: IntlShape) => string;
7
+ /**
8
+ * Generates a mailto URL for sharing course via email
9
+ */
10
+ export declare const getEmailShareUrl: (courseData: CourseAboutData, intl: IntlShape) => string;
11
+ /**
12
+ * Generates a Facebook share URL for the current page
13
+ */
14
+ export declare const getFacebookShareUrl: () => string;
15
+ /**
16
+ * Returns an array of social sharing link configurations
17
+ */
18
+ export declare const getSocialLinks: (intl: IntlShape) => {
19
+ id: string;
20
+ destination: (courseAboutData: CourseAboutData) => string;
21
+ icon: any;
22
+ screenReaderText: string;
23
+ }[];
@@ -0,0 +1,71 @@
1
+ import { getAppConfig, getSiteConfig } from '@openedx/frontend-base';
2
+ import { BsFacebook as BsFacebookIcon, BsTwitterX as BsTwitterXIcon, Email as EmailIcon, } from '@openedx/paragon/icons';
3
+ import { appId } from '../../../constants';
4
+ import messages from './messages';
5
+ /**
6
+ * Gets the formatted share text for different social sharing platforms
7
+ */
8
+ const getShareText = (intl, courseData) => ({
9
+ EMAIL_SUBJECT: intl.formatMessage(messages.socialSharingEmailSubject, {
10
+ siteName: getSiteConfig().siteName,
11
+ }),
12
+ EMAIL_BODY: intl.formatMessage(messages.socialSharingEmailBody, {
13
+ courseNumber: courseData.displayNumberWithDefault,
14
+ courseName: courseData.name,
15
+ siteName: getSiteConfig().siteName,
16
+ url: window.location.href,
17
+ }),
18
+ TWEET: intl.formatMessage(messages.socialSharingTwitterText, {
19
+ courseNumber: courseData.displayNumberWithDefault,
20
+ courseName: courseData.name,
21
+ platformTwitter: getAppConfig(appId).COURSE_ABOUT_TWITTER_ACCOUNT,
22
+ url: window.location.href,
23
+ }),
24
+ });
25
+ /**
26
+ * Generates a Twitter share URL with formatted tweet text
27
+ */
28
+ export const getTwitterShareUrl = (data, intl) => {
29
+ const tweetText = getShareText(intl, data).TWEET;
30
+ return `https://twitter.com/intent/tweet?text=${encodeURIComponent(tweetText)}`;
31
+ };
32
+ /**
33
+ * Generates a mailto URL for sharing course via email
34
+ */
35
+ export const getEmailShareUrl = (courseData, intl) => {
36
+ const { EMAIL_SUBJECT, EMAIL_BODY } = getShareText(intl, courseData);
37
+ return `mailto:?subject=${encodeURIComponent(EMAIL_SUBJECT)}&body=${encodeURIComponent(EMAIL_BODY)}`;
38
+ };
39
+ /**
40
+ * Generates a Facebook share URL for the current page
41
+ */
42
+ export const getFacebookShareUrl = () => {
43
+ if (!window.location.href) {
44
+ return '#';
45
+ }
46
+ return `https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(window.location.href)}`;
47
+ };
48
+ /**
49
+ * Returns an array of social sharing link configurations
50
+ */
51
+ export const getSocialLinks = (intl) => [
52
+ {
53
+ id: 'twitter',
54
+ destination: (courseAboutData) => getTwitterShareUrl(courseAboutData, intl),
55
+ icon: BsTwitterXIcon,
56
+ screenReaderText: intl.formatMessage(messages.socialSharingTwitter),
57
+ },
58
+ {
59
+ id: 'facebook',
60
+ destination: () => getFacebookShareUrl(),
61
+ icon: BsFacebookIcon,
62
+ screenReaderText: intl.formatMessage(messages.socialSharingFacebook),
63
+ },
64
+ {
65
+ id: 'email',
66
+ destination: (courseData) => getEmailShareUrl(courseData, intl),
67
+ icon: EmailIcon,
68
+ screenReaderText: intl.formatMessage(messages.socialSharingEmail),
69
+ },
70
+ ];
71
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/course-about/course-sidebar/sidebar-social/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EACL,UAAU,IAAI,cAAc,EAC5B,UAAU,IAAI,cAAc,EAC5B,KAAK,IAAI,SAAS,GACnB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEvC,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC;;GAEG;AACH,MAAM,YAAY,GAAG,CAAC,IAAe,EAAE,UAA2B,EAAE,EAAE,CAAC,CAAC;IACtE,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,yBAAyB,EAAE;QACpE,QAAQ,EAAE,aAAa,EAAE,CAAC,QAAQ;KACnC,CAAC;IACF,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,sBAAsB,EAAE;QAC9D,YAAY,EAAE,UAAU,CAAC,wBAAwB;QACjD,UAAU,EAAE,UAAU,CAAC,IAAI;QAC3B,QAAQ,EAAE,aAAa,EAAE,CAAC,QAAQ;QAClC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI;KAC1B,CAAC;IACF,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,wBAAwB,EAAE;QAC3D,YAAY,EAAE,UAAU,CAAC,wBAAwB;QACjD,UAAU,EAAE,UAAU,CAAC,IAAI;QAC3B,eAAe,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,4BAAsC;QAC3E,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI;KAC1B,CAAC;CACH,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,IAAqB,EAAE,IAAe,EAAE,EAAE;IAC3E,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC;IACjD,OAAO,yCAAyC,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC;AAClF,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,UAA2B,EAAE,IAAe,EAAE,EAAE;IAC/E,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACrE,OAAO,mBAAmB,kBAAkB,CAAC,aAAa,CAAC,SAAS,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC;AACvG,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,EAAE;IACtC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC1B,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,gDAAgD,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;AACpG,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,IAAe,EAAE,EAAE,CAAC;IACjD;QACE,EAAE,EAAE,SAAS;QACb,WAAW,EAAE,CAAC,eAAgC,EAAE,EAAE,CAAC,kBAAkB,CAAC,eAAe,EAAE,IAAI,CAAC;QAC5F,IAAI,EAAE,cAAc;QACpB,gBAAgB,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,oBAAoB,CAAC;KACpE;IACD;QACE,EAAE,EAAE,UAAU;QACd,WAAW,EAAE,GAAG,EAAE,CAAC,mBAAmB,EAAE;QACxC,IAAI,EAAE,cAAc;QACpB,gBAAgB,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,qBAAqB,CAAC;KACrE;IACD;QACE,EAAE,EAAE,OAAO;QACX,WAAW,EAAE,CAAC,UAA2B,EAAE,EAAE,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC;QAChF,IAAI,EAAE,SAAS;QACf,gBAAgB,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,kBAAkB,CAAC;KAClE;CACF,CAAC","sourcesContent":["import { getAppConfig, getSiteConfig } from '@openedx/frontend-base';\nimport {\n BsFacebook as BsFacebookIcon,\n BsTwitterX as BsTwitterXIcon,\n Email as EmailIcon,\n} from '@openedx/paragon/icons';\n\nimport type { IntlShape } from '@src/utils';\nimport { appId } from '@src/constants';\nimport type { CourseAboutData } from '../../types';\nimport messages from './messages';\n\n/**\n * Gets the formatted share text for different social sharing platforms\n */\nconst getShareText = (intl: IntlShape, courseData: CourseAboutData) => ({\n EMAIL_SUBJECT: intl.formatMessage(messages.socialSharingEmailSubject, {\n siteName: getSiteConfig().siteName,\n }),\n EMAIL_BODY: intl.formatMessage(messages.socialSharingEmailBody, {\n courseNumber: courseData.displayNumberWithDefault,\n courseName: courseData.name,\n siteName: getSiteConfig().siteName,\n url: window.location.href,\n }),\n TWEET: intl.formatMessage(messages.socialSharingTwitterText, {\n courseNumber: courseData.displayNumberWithDefault,\n courseName: courseData.name,\n platformTwitter: getAppConfig(appId).COURSE_ABOUT_TWITTER_ACCOUNT as string,\n url: window.location.href,\n }),\n});\n\n/**\n * Generates a Twitter share URL with formatted tweet text\n */\nexport const getTwitterShareUrl = (data: CourseAboutData, intl: IntlShape) => {\n const tweetText = getShareText(intl, data).TWEET;\n return `https://twitter.com/intent/tweet?text=${encodeURIComponent(tweetText)}`;\n};\n\n/**\n * Generates a mailto URL for sharing course via email\n */\nexport const getEmailShareUrl = (courseData: CourseAboutData, intl: IntlShape) => {\n const { EMAIL_SUBJECT, EMAIL_BODY } = getShareText(intl, courseData);\n return `mailto:?subject=${encodeURIComponent(EMAIL_SUBJECT)}&body=${encodeURIComponent(EMAIL_BODY)}`;\n};\n\n/**\n * Generates a Facebook share URL for the current page\n */\nexport const getFacebookShareUrl = () => {\n if (!window.location.href) {\n return '#';\n }\n return `https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(window.location.href)}`;\n};\n\n/**\n * Returns an array of social sharing link configurations\n */\nexport const getSocialLinks = (intl: IntlShape) => [\n {\n id: 'twitter',\n destination: (courseAboutData: CourseAboutData) => getTwitterShareUrl(courseAboutData, intl),\n icon: BsTwitterXIcon,\n screenReaderText: intl.formatMessage(messages.socialSharingTwitter),\n },\n {\n id: 'facebook',\n destination: () => getFacebookShareUrl(),\n icon: BsFacebookIcon,\n screenReaderText: intl.formatMessage(messages.socialSharingFacebook),\n },\n {\n id: 'email',\n destination: (courseData: CourseAboutData) => getEmailShareUrl(courseData, intl),\n icon: EmailIcon,\n screenReaderText: intl.formatMessage(messages.socialSharingEmail),\n },\n];\n"]}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Fetches course about data from the API.
3
+ * @async
4
+ */
5
+ export declare const fetchCourseAboutData: (courseId: string) => Promise<any>;
6
+ /**
7
+ * Changes the enrollment status for a course.
8
+ * @async
9
+ */
10
+ export declare const changeCourseEnrolment: (courseId: string) => Promise<any>;
@@ -0,0 +1,36 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { camelCaseObject } from '@openedx/frontend-base';
11
+ import { getAuthenticatedHttpClient } from '@openedx/frontend-base';
12
+ import { getChangeEnrollmentUrl, getCourseAboutDataUrl } from './urls';
13
+ /**
14
+ * Fetches course about data from the API.
15
+ * @async
16
+ */
17
+ export const fetchCourseAboutData = (courseId) => __awaiter(void 0, void 0, void 0, function* () {
18
+ const { data } = yield getAuthenticatedHttpClient().get(getCourseAboutDataUrl(courseId));
19
+ return camelCaseObject(data);
20
+ });
21
+ /**
22
+ * Changes the enrollment status for a course.
23
+ * @async
24
+ */
25
+ export const changeCourseEnrolment = (courseId) => __awaiter(void 0, void 0, void 0, function* () {
26
+ const { data } = yield getAuthenticatedHttpClient().post(getChangeEnrollmentUrl(), {
27
+ course_id: courseId,
28
+ enrollment_action: 'enroll',
29
+ }, {
30
+ headers: {
31
+ 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
32
+ },
33
+ });
34
+ return camelCaseObject(data);
35
+ });
36
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/course-about/data/api.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAEpE,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAC;AAEvE;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAO,QAAgB,EAAE,EAAE;IAC7D,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,0BAA0B,EAAE,CAAC,GAAG,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,CAAC;IACzF,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC,CAAA,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAO,QAAgB,EAAE,EAAE;IAC9D,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,0BAA0B,EAAE,CAAC,IAAI,CACtD,sBAAsB,EAAE,EACxB;QACE,SAAS,EAAE,QAAQ;QACnB,iBAAiB,EAAE,QAAQ;KAC5B,EACD;QACE,OAAO,EAAE;YACP,cAAc,EAAE,kDAAkD;SACnE;KACF,CACF,CAAC;IACF,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC,CAAA,CAAC","sourcesContent":["import { camelCaseObject } from '@openedx/frontend-base';\nimport { getAuthenticatedHttpClient } from '@openedx/frontend-base';\n\nimport { getChangeEnrollmentUrl, getCourseAboutDataUrl } from './urls';\n\n/**\n * Fetches course about data from the API.\n * @async\n */\nexport const fetchCourseAboutData = async (courseId: string) => {\n const { data } = await getAuthenticatedHttpClient().get(getCourseAboutDataUrl(courseId));\n return camelCaseObject(data);\n};\n\n/**\n * Changes the enrollment status for a course.\n * @async\n */\nexport const changeCourseEnrolment = async (courseId: string) => {\n const { data } = await getAuthenticatedHttpClient().post(\n getChangeEnrollmentUrl(),\n {\n course_id: courseId,\n enrollment_action: 'enroll',\n },\n {\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',\n },\n },\n );\n return camelCaseObject(data);\n};\n"]}
@@ -0,0 +1,3 @@
1
+ import type { EnrollmentFunctionTypes, UseEnrollmentParamsTypes } from './types';
2
+ export declare const useCourseAboutData: (courseId: string) => import("@tanstack/react-query").UseQueryResult<any, Error>;
3
+ export declare function useEnrollment({ onError, errorMessage }: UseEnrollmentParamsTypes): EnrollmentFunctionTypes;
@@ -0,0 +1,35 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { useCallback } from 'react';
11
+ import { useQuery } from '@tanstack/react-query';
12
+ import { getSiteConfig } from '@openedx/frontend-base';
13
+ import { fetchCourseAboutData, changeCourseEnrolment } from './api';
14
+ export const useCourseAboutData = (courseId) => useQuery({
15
+ queryKey: ['courseAboutData', courseId],
16
+ queryFn: () => fetchCourseAboutData(courseId),
17
+ });
18
+ export function useEnrollment({ onError, errorMessage }) {
19
+ return useCallback((courseId, redirectUrl) => __awaiter(this, void 0, void 0, function* () {
20
+ var _a;
21
+ try {
22
+ yield changeCourseEnrolment(courseId);
23
+ window.location.href = redirectUrl;
24
+ }
25
+ catch (error) {
26
+ if (((_a = error === null || error === void 0 ? void 0 : error.customAttributes) === null || _a === void 0 ? void 0 : _a.httpErrorStatus) === 403) {
27
+ const nextPath = `/courses/${courseId}/about`;
28
+ window.location.href = `${getSiteConfig().loginUrl}?next=${encodeURIComponent(nextPath)}`;
29
+ return;
30
+ }
31
+ onError(errorMessage);
32
+ }
33
+ }), [onError, errorMessage]);
34
+ }
35
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/course-about/data/hooks.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,OAAO,CAAC;AAGpE,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,QAAgB,EAAE,EAAE,CAAC,QAAQ,CAAC;IAC/D,QAAQ,EAAE,CAAC,iBAAiB,EAAE,QAAQ,CAAC;IACvC,OAAO,EAAE,GAAG,EAAE,CAAC,oBAAoB,CAAC,QAAQ,CAAC;CAC9C,CAAC,CAAC;AAEH,MAAM,UAAU,aAAa,CAAC,EAAE,OAAO,EAAE,YAAY,EAA4B;IAC/E,OAAO,WAAW,CAAC,CAAO,QAAQ,EAAE,WAAW,EAAE,EAAE;;QACjD,IAAI,CAAC;YACH,MAAM,qBAAqB,CAAC,QAAQ,CAAC,CAAC;YACtC,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,WAAW,CAAC;QACrC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAA,MAAC,KAAmB,aAAnB,KAAK,uBAAL,KAAK,CAAgB,gBAAgB,0CAAE,eAAe,MAAK,GAAG,EAAE,CAAC;gBACpE,MAAM,QAAQ,GAAG,YAAY,QAAQ,QAAQ,CAAC;gBAC9C,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,aAAa,EAAE,CAAC,QAAQ,SAAS,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC1F,OAAO;YACT,CAAC;YACD,OAAO,CAAC,YAAY,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,CAAA,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;AAC9B,CAAC","sourcesContent":["import { useCallback } from 'react';\nimport { useQuery } from '@tanstack/react-query';\nimport { getSiteConfig } from '@openedx/frontend-base';\n\nimport { fetchCourseAboutData, changeCourseEnrolment } from './api';\nimport type { EnrollmentFunctionTypes, UseEnrollmentParamsTypes, HttpError } from './types';\n\nexport const useCourseAboutData = (courseId: string) => useQuery({\n queryKey: ['courseAboutData', courseId],\n queryFn: () => fetchCourseAboutData(courseId),\n});\n\nexport function useEnrollment({ onError, errorMessage }: UseEnrollmentParamsTypes): EnrollmentFunctionTypes {\n return useCallback(async (courseId, redirectUrl) => {\n try {\n await changeCourseEnrolment(courseId);\n window.location.href = redirectUrl;\n } catch (error) {\n if ((error as HttpError)?.customAttributes?.httpErrorStatus === 403) {\n const nextPath = `/courses/${courseId}/about`;\n window.location.href = `${getSiteConfig().loginUrl}?next=${encodeURIComponent(nextPath)}`;\n return;\n }\n onError(errorMessage);\n }\n }, [onError, errorMessage]);\n}\n"]}
@@ -0,0 +1,10 @@
1
+ export interface UseEnrollmentParamsTypes {
2
+ onError: (msg: string) => void;
3
+ errorMessage: string;
4
+ }
5
+ export type EnrollmentFunctionTypes = (courseId: string, redirectUrl: string) => Promise<void>;
6
+ export interface HttpError {
7
+ customAttributes?: {
8
+ httpErrorStatus?: number;
9
+ };
10
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/course-about/data/types.ts"],"names":[],"mappings":"","sourcesContent":["export interface UseEnrollmentParamsTypes {\n onError: (msg: string) => void,\n errorMessage: string,\n}\n\nexport type EnrollmentFunctionTypes = (courseId: string, redirectUrl: string) => Promise<void>;\n\nexport interface HttpError {\n customAttributes?: {\n httpErrorStatus?: number,\n },\n}\n"]}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Generates the full API URL for fetching a course's "About" page data.
3
+ */
4
+ export declare const getCourseAboutDataUrl: (courseId: string) => string;
5
+ /**
6
+ * Generates the full URL for the page where a user can change their enrollment status.
7
+ */
8
+ export declare const getChangeEnrollmentUrl: () => string;
@@ -0,0 +1,10 @@
1
+ import { getSiteConfig } from '@openedx/frontend-base';
2
+ /**
3
+ * Generates the full API URL for fetching a course's "About" page data.
4
+ */
5
+ export const getCourseAboutDataUrl = (courseId) => `${getSiteConfig().lmsBaseUrl}/api/courseware/course/${courseId}`;
6
+ /**
7
+ * Generates the full URL for the page where a user can change their enrollment status.
8
+ */
9
+ export const getChangeEnrollmentUrl = () => `${getSiteConfig().lmsBaseUrl}/change_enrollment`;
10
+ //# sourceMappingURL=urls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"urls.js","sourceRoot":"","sources":["../../../src/course-about/data/urls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,QAAgB,EAChB,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,UAAU,0BAA0B,QAAQ,EAAE,CAAC;AAEvE;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,UAAU,oBAAoB,CAAC","sourcesContent":["import { getSiteConfig } from '@openedx/frontend-base';\n\n/**\n * Generates the full API URL for fetching a course's \"About\" page data.\n */\nexport const getCourseAboutDataUrl = (\n courseId: string,\n) => `${getSiteConfig().lmsBaseUrl}/api/courseware/course/${courseId}`;\n\n/**\n * Generates the full URL for the page where a user can change their enrollment status.\n */\nexport const getChangeEnrollmentUrl = () => `${getSiteConfig().lmsBaseUrl}/change_enrollment`;\n"]}
@@ -0,0 +1,31 @@
1
+ export declare const GRID_LAYOUT: {
2
+ xs: ({
3
+ span: number;
4
+ } | {
5
+ span: string;
6
+ })[];
7
+ sm: ({
8
+ span: number;
9
+ offset: number;
10
+ } | {
11
+ span: string;
12
+ offset?: undefined;
13
+ })[];
14
+ md: ({
15
+ span: number;
16
+ offset: number;
17
+ } | {
18
+ span: string;
19
+ offset?: undefined;
20
+ })[];
21
+ lg: ({
22
+ span: number;
23
+ offset: number;
24
+ } | {
25
+ span: string;
26
+ offset?: undefined;
27
+ })[];
28
+ xl: {
29
+ span: number;
30
+ }[];
31
+ };
@@ -0,0 +1,11 @@
1
+ const fullWidthSingleColumn = [{ span: 12 }, { span: 'auto' }];
2
+ const centeredSingleColumnWithMargins = [{ span: 10, offset: 1 }, { span: 'auto' }];
3
+ const twoColumns = [{ span: 9 }, { span: 3 }];
4
+ export const GRID_LAYOUT = {
5
+ xs: fullWidthSingleColumn,
6
+ sm: centeredSingleColumnWithMargins,
7
+ md: centeredSingleColumnWithMargins,
8
+ lg: centeredSingleColumnWithMargins,
9
+ xl: twoColumns,
10
+ };
11
+ //# sourceMappingURL=layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/course-about/layout.ts"],"names":[],"mappings":"AAAA,MAAM,qBAAqB,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;AAC/D,MAAM,+BAA+B,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;AACpF,MAAM,UAAU,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9C,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,EAAE,EAAE,qBAAqB;IACzB,EAAE,EAAE,+BAA+B;IACnC,EAAE,EAAE,+BAA+B;IACnC,EAAE,EAAE,+BAA+B;IACnC,EAAE,EAAE,UAAU;CACf,CAAC","sourcesContent":["const fullWidthSingleColumn = [{ span: 12 }, { span: 'auto' }];\nconst centeredSingleColumnWithMargins = [{ span: 10, offset: 1 }, { span: 'auto' }];\nconst twoColumns = [{ span: 9 }, { span: 3 }];\nexport const GRID_LAYOUT = {\n xs: fullWidthSingleColumn,\n sm: centeredSingleColumnWithMargins,\n md: centeredSingleColumnWithMargins,\n lg: centeredSingleColumnWithMargins,\n xl: twoColumns,\n};\n"]}
@@ -0,0 +1,18 @@
1
+ declare const messages: {
2
+ errorMessage: {
3
+ id: string;
4
+ defaultMessage: string;
5
+ description: string;
6
+ };
7
+ viewAboutPageInStudio: {
8
+ id: string;
9
+ defaultMessage: string;
10
+ description: string;
11
+ };
12
+ pageTitle: {
13
+ id: string;
14
+ defaultMessage: string;
15
+ description: string;
16
+ };
17
+ };
18
+ export default messages;
@@ -0,0 +1,20 @@
1
+ import { defineMessages } from '@openedx/frontend-base';
2
+ const messages = defineMessages({
3
+ errorMessage: {
4
+ id: 'category.catalog.error-page-message',
5
+ defaultMessage: 'If you experience repeated failures, please email support at {supportEmail}',
6
+ description: 'Error page message.',
7
+ },
8
+ viewAboutPageInStudio: {
9
+ id: 'catalog.course-about.view-about-page-in-studio',
10
+ defaultMessage: 'View About Page in Studio',
11
+ description: 'Link to view the Schedule and Details page in Studio.',
12
+ },
13
+ pageTitle: {
14
+ id: 'courseAbout.page.title',
15
+ defaultMessage: '{courseName} | {siteName}',
16
+ description: 'Document title for the course about page.',
17
+ },
18
+ });
19
+ export default messages;
20
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/course-about/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,YAAY,EAAE;QACZ,EAAE,EAAE,qCAAqC;QACzC,cAAc,EAAE,6EAA6E;QAC7F,WAAW,EAAE,qBAAqB;KACnC;IACD,qBAAqB,EAAE;QACrB,EAAE,EAAE,gDAAgD;QACpD,cAAc,EAAE,2BAA2B;QAC3C,WAAW,EAAE,uDAAuD;KACrE;IACD,SAAS,EAAE;QACT,EAAE,EAAE,wBAAwB;QAC5B,cAAc,EAAE,2BAA2B;QAC3C,WAAW,EAAE,2CAA2C;KACzD;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n errorMessage: {\n id: 'category.catalog.error-page-message',\n defaultMessage: 'If you experience repeated failures, please email support at {supportEmail}',\n description: 'Error page message.',\n },\n viewAboutPageInStudio: {\n id: 'catalog.course-about.view-about-page-in-studio',\n defaultMessage: 'View About Page in Studio',\n description: 'Link to view the Schedule and Details page in Studio.',\n },\n pageTitle: {\n id: 'courseAbout.page.title',\n defaultMessage: '{courseName} | {siteName}',\n description: 'Document title for the course about page.',\n },\n});\n\nexport default messages;\n"]}
@@ -0,0 +1,125 @@
1
+ export interface CourseGoals {
2
+ selectedGoal: string | null;
3
+ weeklyLearningGoalEnabled: boolean;
4
+ }
5
+ export interface Enrollment {
6
+ mode: string | null;
7
+ isActive: boolean;
8
+ }
9
+ export interface EntranceExamData {
10
+ entranceExamCurrentScore: number;
11
+ entranceExamEnabled: boolean;
12
+ entranceExamId: string;
13
+ entranceExamMinimumScorePct: number;
14
+ entranceExamPassed: boolean;
15
+ }
16
+ export interface CourseImage {
17
+ uri: string | null;
18
+ }
19
+ export interface CourseVideo {
20
+ uri: string | null;
21
+ }
22
+ export interface CourseImageUrls {
23
+ raw: string;
24
+ small: string;
25
+ large: string;
26
+ }
27
+ export interface CourseMedia {
28
+ courseImage: CourseImage;
29
+ courseVideo: CourseVideo;
30
+ image: CourseImageUrls;
31
+ }
32
+ export interface CertificateData {
33
+ certStatus: string;
34
+ certWebViewUrl: string | null;
35
+ downloadUrl: string | null;
36
+ certificateAvailableDate: string | null;
37
+ }
38
+ export interface Celebrations {
39
+ firstSection: boolean;
40
+ streakLengthToCelebrate: number | null;
41
+ streakDiscountEnabled: boolean;
42
+ weeklyGoal: boolean;
43
+ }
44
+ export interface Notes {
45
+ enabled: boolean;
46
+ visible: boolean;
47
+ }
48
+ export type SinglePaidMode = Record<string, any>;
49
+ export interface PrerequisiteCourse {
50
+ key: string;
51
+ display: string;
52
+ shortDescription?: string;
53
+ }
54
+ export interface OCWLink {
55
+ title: string;
56
+ url: string;
57
+ description?: string;
58
+ }
59
+ export interface CourseAboutData {
60
+ accessExpiration: string | null;
61
+ contentTypeGatingEnabled: boolean;
62
+ courseGoals: CourseGoals;
63
+ effort: string | null;
64
+ end: string | null;
65
+ enrollment: Enrollment;
66
+ enrollmentStart: string | null;
67
+ enrollmentEnd: string | null;
68
+ entranceExamData: EntranceExamData;
69
+ id: string;
70
+ license: string | null;
71
+ language: string;
72
+ media: CourseMedia;
73
+ name: string;
74
+ offer: any | null;
75
+ relatedPrograms: any[] | null;
76
+ shortDescription: string;
77
+ start: string;
78
+ startDisplay: string | null;
79
+ startType: string;
80
+ pacing: string;
81
+ userTimezone: string | null;
82
+ showCalculator: boolean;
83
+ canAccessProctoredExams: boolean;
84
+ notes: Notes;
85
+ marketingUrl: string | null;
86
+ celebrations: Celebrations;
87
+ userHasPassingGrade: boolean;
88
+ courseExitPageIsActive: boolean;
89
+ certificateData: CertificateData;
90
+ verifyIdentityUrl: string | null;
91
+ verificationStatus: string;
92
+ linkedinAddToProfileUrl: string | null;
93
+ isIntegritySignatureEnabled: boolean;
94
+ userNeedsIntegritySignature: boolean;
95
+ learningAssistantEnabled: boolean;
96
+ showCoursewareLink: boolean;
97
+ isCourseFull: boolean;
98
+ canEnroll: boolean;
99
+ invitationOnly: boolean;
100
+ isShibCourse: boolean;
101
+ allowAnonymous: boolean;
102
+ ecommerceCheckout: boolean;
103
+ singlePaidMode: SinglePaidMode;
104
+ ecommerceCheckoutLink: string | null;
105
+ courseImageUrls: string[];
106
+ startDateIsStillDefault: boolean;
107
+ advertisedStart: string | null;
108
+ coursePrice: string;
109
+ preRequisiteCourses: PrerequisiteCourse[];
110
+ aboutSidebarHtml: string | null;
111
+ displayNumberWithDefault: string;
112
+ displayOrgWithDefault: string;
113
+ overview: string;
114
+ ocwLinks: OCWLink[];
115
+ prerequisites: string[];
116
+ requirements: string;
117
+ }
118
+ export type CourseAboutDataPartial = Omit<Pick<CourseAboutData, 'id' | 'name' | 'displayOrgWithDefault' | 'shortDescription' | 'enrollment' | 'isCourseFull' | 'invitationOnly' | 'canEnroll' | 'isShibCourse' | 'allowAnonymous' | 'showCoursewareLink' | 'singlePaidMode' | 'ecommerceCheckout' | 'ecommerceCheckoutLink'>, 'enrollment'> & {
119
+ enrollment: EnrollmentPartial;
120
+ };
121
+ export interface CourseMediaPartial {
122
+ courseImage: CourseImage;
123
+ courseVideo?: CourseVideo;
124
+ }
125
+ export type EnrollmentPartial = Pick<Enrollment, 'isActive'>;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/course-about/types.ts"],"names":[],"mappings":"","sourcesContent":["export interface CourseGoals {\n selectedGoal: string | null,\n weeklyLearningGoalEnabled: boolean,\n}\n\nexport interface Enrollment {\n mode: string | null,\n isActive: boolean,\n}\n\nexport interface EntranceExamData {\n entranceExamCurrentScore: number,\n entranceExamEnabled: boolean,\n entranceExamId: string,\n entranceExamMinimumScorePct: number,\n entranceExamPassed: boolean,\n}\n\nexport interface CourseImage {\n uri: string | null,\n}\n\nexport interface CourseVideo {\n uri: string | null,\n}\n\nexport interface CourseImageUrls {\n raw: string,\n small: string,\n large: string,\n}\n\nexport interface CourseMedia {\n courseImage: CourseImage,\n courseVideo: CourseVideo,\n image: CourseImageUrls,\n}\n\nexport interface CertificateData {\n certStatus: string,\n certWebViewUrl: string | null,\n downloadUrl: string | null,\n certificateAvailableDate: string | null,\n}\n\nexport interface Celebrations {\n firstSection: boolean,\n streakLengthToCelebrate: number | null,\n streakDiscountEnabled: boolean,\n weeklyGoal: boolean,\n}\n\nexport interface Notes {\n enabled: boolean,\n visible: boolean,\n}\n\nexport type SinglePaidMode = Record<string, any>;\n\nexport interface PrerequisiteCourse {\n key: string,\n display: string,\n shortDescription?: string,\n}\n\nexport interface OCWLink {\n title: string,\n url: string,\n description?: string,\n}\n\nexport interface CourseAboutData {\n accessExpiration: string | null,\n contentTypeGatingEnabled: boolean,\n courseGoals: CourseGoals,\n effort: string | null,\n end: string | null,\n enrollment: Enrollment,\n enrollmentStart: string | null,\n enrollmentEnd: string | null,\n entranceExamData: EntranceExamData,\n id: string,\n license: string | null,\n language: string,\n media: CourseMedia,\n name: string,\n offer: any | null,\n relatedPrograms: any[] | null,\n shortDescription: string,\n start: string,\n startDisplay: string | null,\n startType: string,\n pacing: string,\n userTimezone: string | null,\n showCalculator: boolean,\n canAccessProctoredExams: boolean,\n notes: Notes,\n marketingUrl: string | null,\n celebrations: Celebrations,\n userHasPassingGrade: boolean,\n courseExitPageIsActive: boolean,\n certificateData: CertificateData,\n verifyIdentityUrl: string | null,\n verificationStatus: string,\n linkedinAddToProfileUrl: string | null,\n isIntegritySignatureEnabled: boolean,\n userNeedsIntegritySignature: boolean,\n learningAssistantEnabled: boolean,\n showCoursewareLink: boolean,\n isCourseFull: boolean,\n canEnroll: boolean,\n invitationOnly: boolean,\n isShibCourse: boolean,\n allowAnonymous: boolean,\n ecommerceCheckout: boolean,\n singlePaidMode: SinglePaidMode,\n ecommerceCheckoutLink: string | null,\n courseImageUrls: string[],\n startDateIsStillDefault: boolean,\n advertisedStart: string | null,\n coursePrice: string,\n preRequisiteCourses: PrerequisiteCourse[],\n aboutSidebarHtml: string | null,\n displayNumberWithDefault: string,\n displayOrgWithDefault: string,\n overview: string,\n ocwLinks: OCWLink[],\n prerequisites: string[],\n requirements: string,\n}\n\nexport type CourseAboutDataPartial = Omit<Pick<CourseAboutData,\n | 'id'\n | 'name'\n | 'displayOrgWithDefault'\n | 'shortDescription'\n | 'enrollment'\n | 'isCourseFull'\n | 'invitationOnly'\n | 'canEnroll'\n | 'isShibCourse'\n | 'allowAnonymous'\n | 'showCoursewareLink'\n | 'singlePaidMode'\n | 'ecommerceCheckout'\n | 'ecommerceCheckoutLink'\n>, 'enrollment'> & {\n enrollment: EnrollmentPartial,\n};\n\nexport interface CourseMediaPartial {\n courseImage: CourseImage,\n courseVideo?: CourseVideo,\n}\n\nexport type EnrollmentPartial = Pick<Enrollment, 'isActive'>;\n"]}
@@ -0,0 +1,6 @@
1
+ import type { CourseListSearchResponse } from './types';
2
+ /**
3
+ * Fetches course list search data from the API.
4
+ * @async
5
+ */
6
+ export declare const fetchCourseListSearch: (params: any) => Promise<CourseListSearchResponse>;
@@ -0,0 +1,33 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { camelCaseObject } from '@openedx/frontend-base';
11
+ import { getAuthenticatedHttpClient } from '@openedx/frontend-base';
12
+ import { DEFAULT_PAGE_SIZE, DEFAULT_PAGE_INDEX } from './constants';
13
+ import { getCourseListSearchUrl } from './urls';
14
+ import { addFiltersToFormData } from './utils';
15
+ /**
16
+ * Fetches course list search data from the API.
17
+ * @async
18
+ */
19
+ export const fetchCourseListSearch = (params) => __awaiter(void 0, void 0, void 0, function* () {
20
+ const { pageSize = DEFAULT_PAGE_SIZE, pageIndex = DEFAULT_PAGE_INDEX, enableCourseSortingByStartDate = false, filters = {}, searchString = '', } = params;
21
+ const formData = new FormData();
22
+ formData.append('page_size', String(pageSize));
23
+ formData.append('page_index', String(pageIndex));
24
+ formData.append('enable_course_sorting_by_start_date', String(enableCourseSortingByStartDate));
25
+ if (searchString) {
26
+ formData.append('search_string', searchString);
27
+ }
28
+ addFiltersToFormData(formData, filters);
29
+ const { data } = yield getAuthenticatedHttpClient()
30
+ .post(getCourseListSearchUrl(), formData);
31
+ return camelCaseObject(data);
32
+ });
33
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/data/course-list-search/api.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAEpE,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAI/C;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAO,MAAM,EAAqC,EAAE;IACvF,MAAM,EACJ,QAAQ,GAAG,iBAAiB,EAC5B,SAAS,GAAG,kBAAkB,EAC9B,8BAA8B,GAAG,KAAK,EACtC,OAAO,GAAG,EAAE,EACZ,YAAY,GAAG,EAAE,GAClB,GAAG,MAAM,CAAC;IAEX,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;IAEhC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC/C,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IACjD,QAAQ,CAAC,MAAM,CAAC,qCAAqC,EAAE,MAAM,CAAC,8BAA8B,CAAC,CAAC,CAAC;IAE/F,IAAI,YAAY,EAAE,CAAC;QACjB,QAAQ,CAAC,MAAM,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;IACjD,CAAC;IAED,oBAAoB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAExC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,0BAA0B,EAAE;SAChD,IAAI,CAAC,sBAAsB,EAAE,EAAE,QAAQ,CAAC,CAAC;IAE5C,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC,CAAA,CAAC","sourcesContent":["import { camelCaseObject } from '@openedx/frontend-base';\nimport { getAuthenticatedHttpClient } from '@openedx/frontend-base';\n\nimport { DEFAULT_PAGE_SIZE, DEFAULT_PAGE_INDEX } from './constants';\nimport { getCourseListSearchUrl } from './urls';\nimport { addFiltersToFormData } from './utils';\n\nimport type { CourseListSearchResponse } from './types';\n\n/**\n * Fetches course list search data from the API.\n * @async\n */\nexport const fetchCourseListSearch = async (params): Promise<CourseListSearchResponse> => {\n const {\n pageSize = DEFAULT_PAGE_SIZE,\n pageIndex = DEFAULT_PAGE_INDEX,\n enableCourseSortingByStartDate = false,\n filters = {},\n searchString = '',\n } = params;\n\n const formData = new FormData();\n\n formData.append('page_size', String(pageSize));\n formData.append('page_index', String(pageIndex));\n formData.append('enable_course_sorting_by_start_date', String(enableCourseSortingByStartDate));\n\n if (searchString) {\n formData.append('search_string', searchString);\n }\n\n addFiltersToFormData(formData, filters);\n\n const { data } = await getAuthenticatedHttpClient()\n .post(getCourseListSearchUrl(), formData);\n\n return camelCaseObject(data);\n};\n"]}
@@ -0,0 +1,2 @@
1
+ export declare const DEFAULT_PAGE_SIZE = 20;
2
+ export declare const DEFAULT_PAGE_INDEX = 0;
@@ -0,0 +1,3 @@
1
+ export const DEFAULT_PAGE_SIZE = 20;
2
+ export const DEFAULT_PAGE_INDEX = 0;
3
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/data/course-list-search/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AACpC,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC","sourcesContent":["export const DEFAULT_PAGE_SIZE = 20;\nexport const DEFAULT_PAGE_INDEX = 0;\n"]}
@@ -0,0 +1,5 @@
1
+ import type { CourseListSearchParams, CourseListSearchHook } from './types';
2
+ /**
3
+ * A React Query hook that fetches course list search data.
4
+ */
5
+ export declare const useCourseListSearch: ({ pageSize, pageIndex, enableCourseSortingByStartDate, filters, searchString, }?: Partial<CourseListSearchParams>) => CourseListSearchHook;