@openedx/frontend-app-learner-dashboard 1.0.0-alpha.6 → 1.0.0-alpha.8

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 (282) hide show
  1. package/dist/Main.js +2 -3
  2. package/dist/Main.js.map +1 -1
  3. package/dist/app.js +1 -2
  4. package/dist/app.js.map +1 -1
  5. package/dist/containers/CourseCard/components/CourseCardActions/BeginCourseButton.js +14 -5
  6. package/dist/containers/CourseCard/components/CourseCardActions/BeginCourseButton.js.map +1 -1
  7. package/dist/containers/CourseCard/components/CourseCardActions/ResumeButton.js +14 -5
  8. package/dist/containers/CourseCard/components/CourseCardActions/ResumeButton.js.map +1 -1
  9. package/dist/containers/CourseCard/components/CourseCardActions/SelectSessionButton.js +3 -3
  10. package/dist/containers/CourseCard/components/CourseCardActions/SelectSessionButton.js.map +1 -1
  11. package/dist/containers/CourseCard/components/CourseCardActions/ViewCourseButton.js +5 -3
  12. package/dist/containers/CourseCard/components/CourseCardActions/ViewCourseButton.js.map +1 -1
  13. package/dist/containers/CourseCard/components/CourseCardActions/index.js +5 -4
  14. package/dist/containers/CourseCard/components/CourseCardActions/index.js.map +1 -1
  15. package/dist/containers/CourseCard/components/CourseCardBanners/CertificateBanner.js +26 -9
  16. package/dist/containers/CourseCard/components/CourseCardBanners/CertificateBanner.js.map +1 -1
  17. package/dist/containers/CourseCard/components/CourseCardBanners/CourseBanner.js +12 -4
  18. package/dist/containers/CourseCard/components/CourseCardBanners/CourseBanner.js.map +1 -1
  19. package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/hooks.js +23 -4
  20. package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/hooks.js.map +1 -1
  21. package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/ApprovedContent.js +11 -5
  22. package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/ApprovedContent.js.map +1 -1
  23. package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/EligibleContent.js +5 -3
  24. package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/EligibleContent.js.map +1 -1
  25. package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/MustRequestContent.js +3 -3
  26. package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/MustRequestContent.js.map +1 -1
  27. package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/PendingContent.js +5 -5
  28. package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/PendingContent.js.map +1 -1
  29. package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/RejectedContent.js +4 -3
  30. package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/RejectedContent.js.map +1 -1
  31. package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/components/ProviderLink.js +3 -2
  32. package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/components/ProviderLink.js.map +1 -1
  33. package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/hooks.js +13 -5
  34. package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/hooks.js.map +1 -1
  35. package/dist/containers/CourseCard/components/CourseCardBanners/EntitlementBanner.js +10 -6
  36. package/dist/containers/CourseCard/components/CourseCardBanners/EntitlementBanner.js.map +1 -1
  37. package/dist/containers/CourseCard/components/CourseCardBanners/RelatedProgramsBanner/index.js +5 -4
  38. package/dist/containers/CourseCard/components/CourseCardBanners/RelatedProgramsBanner/index.js.map +1 -1
  39. package/dist/containers/CourseCard/components/CourseCardBanners/index.d.ts +1 -1
  40. package/dist/containers/CourseCard/components/CourseCardBanners/index.js +6 -2
  41. package/dist/containers/CourseCard/components/CourseCardBanners/index.js.map +1 -1
  42. package/dist/containers/CourseCard/components/CourseCardDetails/hooks.d.ts +3 -3
  43. package/dist/containers/CourseCard/components/CourseCardDetails/hooks.js +14 -12
  44. package/dist/containers/CourseCard/components/CourseCardDetails/hooks.js.map +1 -1
  45. package/dist/containers/CourseCard/components/CourseCardImage.js +7 -6
  46. package/dist/containers/CourseCard/components/CourseCardImage.js.map +1 -1
  47. package/dist/containers/CourseCard/components/CourseCardMenu/SocialShareMenu.js +14 -11
  48. package/dist/containers/CourseCard/components/CourseCardMenu/SocialShareMenu.js.map +1 -1
  49. package/dist/containers/CourseCard/components/CourseCardMenu/hooks.d.ts +10 -0
  50. package/dist/containers/CourseCard/components/CourseCardMenu/hooks.js +26 -6
  51. package/dist/containers/CourseCard/components/CourseCardMenu/hooks.js.map +1 -1
  52. package/dist/containers/CourseCard/components/CourseCardMenu/index.js +5 -5
  53. package/dist/containers/CourseCard/components/CourseCardMenu/index.js.map +1 -1
  54. package/dist/containers/CourseCard/components/CourseCardTitle.js +6 -4
  55. package/dist/containers/CourseCard/components/CourseCardTitle.js.map +1 -1
  56. package/dist/containers/CourseCard/components/RelatedProgramsBadge/hooks.js +4 -2
  57. package/dist/containers/CourseCard/components/RelatedProgramsBadge/hooks.js.map +1 -1
  58. package/dist/containers/CourseCard/components/hooks.d.ts +1 -1
  59. package/dist/containers/CourseCard/components/hooks.js +9 -7
  60. package/dist/containers/CourseCard/components/hooks.js.map +1 -1
  61. package/dist/containers/CourseCard/hooks.d.ts +0 -12
  62. package/dist/containers/CourseCard/hooks.js +0 -14
  63. package/dist/containers/CourseCard/hooks.js.map +1 -1
  64. package/dist/containers/CourseFilterControls/ActiveCourseFilters.d.ts +1 -11
  65. package/dist/containers/CourseFilterControls/ActiveCourseFilters.js +4 -9
  66. package/dist/containers/CourseFilterControls/ActiveCourseFilters.js.map +1 -1
  67. package/dist/containers/CourseFilterControls/CourseFilterControls.d.ts +1 -13
  68. package/dist/containers/CourseFilterControls/CourseFilterControls.js +26 -16
  69. package/dist/containers/CourseFilterControls/CourseFilterControls.js.map +1 -1
  70. package/dist/containers/CoursesPanel/CourseList/index.d.ts +0 -1
  71. package/dist/containers/CoursesPanel/CourseList/index.js +2 -3
  72. package/dist/containers/CoursesPanel/CourseList/index.js.map +1 -1
  73. package/dist/containers/CoursesPanel/NoCoursesView/index.js +4 -2
  74. package/dist/containers/CoursesPanel/NoCoursesView/index.js.map +1 -1
  75. package/dist/containers/CoursesPanel/index.js +27 -6
  76. package/dist/containers/CoursesPanel/index.js.map +1 -1
  77. package/dist/containers/Dashboard/hooks.js.map +1 -1
  78. package/dist/containers/Dashboard/index.js +7 -4
  79. package/dist/containers/Dashboard/index.js.map +1 -1
  80. package/dist/containers/EmailSettingsModal/hooks.js +8 -5
  81. package/dist/containers/EmailSettingsModal/hooks.js.map +1 -1
  82. package/dist/containers/RelatedProgramsModal/index.js +5 -3
  83. package/dist/containers/RelatedProgramsModal/index.js.map +1 -1
  84. package/dist/containers/SelectSessionModal/hooks.d.ts +1 -1
  85. package/dist/containers/SelectSessionModal/hooks.js +25 -15
  86. package/dist/containers/SelectSessionModal/hooks.js.map +1 -1
  87. package/dist/containers/UnenrollConfirmModal/components/ConfirmPane.d.ts +3 -1
  88. package/dist/containers/UnenrollConfirmModal/components/ConfirmPane.js +9 -3
  89. package/dist/containers/UnenrollConfirmModal/components/ConfirmPane.js.map +1 -1
  90. package/dist/containers/UnenrollConfirmModal/components/FinishedPane.d.ts +3 -3
  91. package/dist/containers/UnenrollConfirmModal/components/FinishedPane.js +9 -4
  92. package/dist/containers/UnenrollConfirmModal/components/FinishedPane.js.map +1 -1
  93. package/dist/containers/UnenrollConfirmModal/components/ReasonPane.d.ts +3 -2
  94. package/dist/containers/UnenrollConfirmModal/components/ReasonPane.js +3 -3
  95. package/dist/containers/UnenrollConfirmModal/components/ReasonPane.js.map +1 -1
  96. package/dist/containers/UnenrollConfirmModal/components/messages.d.ts +7 -7
  97. package/dist/containers/UnenrollConfirmModal/components/messages.js +12 -12
  98. package/dist/containers/UnenrollConfirmModal/components/messages.js.map +1 -1
  99. package/dist/containers/UnenrollConfirmModal/constants.d.ts +5 -0
  100. package/dist/containers/UnenrollConfirmModal/constants.js +7 -1
  101. package/dist/containers/UnenrollConfirmModal/constants.js.map +1 -1
  102. package/dist/containers/UnenrollConfirmModal/hooks/index.d.ts +1 -3
  103. package/dist/containers/UnenrollConfirmModal/hooks/index.js +18 -13
  104. package/dist/containers/UnenrollConfirmModal/hooks/index.js.map +1 -1
  105. package/dist/containers/UnenrollConfirmModal/hooks/reasons.d.ts +0 -2
  106. package/dist/containers/UnenrollConfirmModal/hooks/reasons.js +13 -15
  107. package/dist/containers/UnenrollConfirmModal/hooks/reasons.js.map +1 -1
  108. package/dist/containers/UnenrollConfirmModal/index.js +1 -1
  109. package/dist/containers/UnenrollConfirmModal/index.js.map +1 -1
  110. package/dist/data/constants/files.js +1 -1
  111. package/dist/data/constants/files.js.map +1 -1
  112. package/dist/data/constants/htmlKeys.js +1 -1
  113. package/dist/data/constants/htmlKeys.js.map +1 -1
  114. package/dist/data/context/FiltersProvider.d.ts +18 -0
  115. package/dist/data/context/FiltersProvider.js +37 -0
  116. package/dist/data/context/FiltersProvider.js.map +1 -0
  117. package/dist/data/context/MasqueradeProvider.d.ts +11 -0
  118. package/dist/data/context/MasqueradeProvider.js +19 -0
  119. package/dist/data/context/MasqueradeProvider.js.map +1 -0
  120. package/dist/data/context/SelectSessionProvider.d.ts +15 -0
  121. package/dist/data/context/SelectSessionProvider.js +40 -0
  122. package/dist/data/context/SelectSessionProvider.js.map +1 -0
  123. package/dist/data/context/index.d.ts +10 -0
  124. package/dist/data/context/index.js +8 -0
  125. package/dist/data/context/index.js.map +1 -0
  126. package/dist/data/contexts/GlobalDataContext.d.ts +15 -11
  127. package/dist/data/contexts/GlobalDataContext.js.map +1 -1
  128. package/dist/data/hooks/index.d.ts +3 -0
  129. package/dist/data/hooks/index.js +4 -0
  130. package/dist/data/hooks/index.js.map +1 -0
  131. package/dist/data/hooks/mutationHooks.d.ts +26 -0
  132. package/dist/data/hooks/mutationHooks.js +84 -0
  133. package/dist/data/hooks/mutationHooks.js.map +1 -0
  134. package/dist/data/hooks/queryHooks.d.ts +164 -0
  135. package/dist/data/hooks/queryHooks.js +57 -0
  136. package/dist/data/hooks/queryHooks.js.map +1 -0
  137. package/dist/data/hooks/queryKeys.d.ts +13 -0
  138. package/dist/data/hooks/queryKeys.js +15 -0
  139. package/dist/data/hooks/queryKeys.js.map +1 -0
  140. package/dist/data/services/lms/api.d.ts +18 -27
  141. package/dist/data/services/lms/api.js +77 -38
  142. package/dist/data/services/lms/api.js.map +1 -1
  143. package/dist/data/services/lms/index.js +1 -1
  144. package/dist/data/services/lms/index.js.map +1 -1
  145. package/dist/data/services/lms/urls.d.ts +0 -1
  146. package/dist/data/services/lms/urls.js +6 -2
  147. package/dist/data/services/lms/urls.js.map +1 -1
  148. package/dist/data/services/segment/utils.d.ts +1 -1
  149. package/dist/hooks/index.d.ts +5 -4
  150. package/dist/hooks/index.js +8 -4
  151. package/dist/hooks/index.js.map +1 -1
  152. package/dist/hooks/useCourseData.d.ts +2 -0
  153. package/dist/hooks/useCourseData.js +8 -0
  154. package/dist/hooks/useCourseData.js.map +1 -0
  155. package/dist/hooks/useCourseTrackingEvent.d.ts +2 -0
  156. package/dist/hooks/useCourseTrackingEvent.js +13 -0
  157. package/dist/hooks/useCourseTrackingEvent.js.map +1 -0
  158. package/dist/hooks/useEntitlementInfo.d.ts +22 -0
  159. package/dist/hooks/useEntitlementInfo.js +29 -0
  160. package/dist/hooks/useEntitlementInfo.js.map +1 -0
  161. package/dist/hooks/useIsMasquerading.d.ts +2 -0
  162. package/dist/hooks/useIsMasquerading.js +9 -0
  163. package/dist/hooks/useIsMasquerading.js.map +1 -0
  164. package/dist/i18n/index.d.ts +1 -25
  165. package/dist/i18n/index.js +1 -25
  166. package/dist/i18n/index.js.map +1 -1
  167. package/dist/providers.js +2 -2
  168. package/dist/providers.js.map +1 -1
  169. package/dist/routes.d.ts +2 -0
  170. package/dist/routes.js +3 -1
  171. package/dist/routes.js.map +1 -1
  172. package/dist/tracking/trackers/findCourses.d.ts +1 -1
  173. package/dist/tracking/trackers/socialShare.js +2 -2
  174. package/dist/tracking/trackers/socialShare.js.map +1 -1
  175. package/dist/utils/dataTransformers.d.ts +7 -0
  176. package/dist/utils/dataTransformers.js +58 -0
  177. package/dist/utils/dataTransformers.js.map +1 -0
  178. package/dist/widgets/LearnerDashboardHeader/ConfirmEmailBanner/hooks.d.ts +5 -6
  179. package/dist/widgets/LearnerDashboardHeader/ConfirmEmailBanner/hooks.js +9 -14
  180. package/dist/widgets/LearnerDashboardHeader/ConfirmEmailBanner/hooks.js.map +1 -1
  181. package/dist/widgets/LearnerDashboardHeader/MasqueradeBar/hooks.d.ts +12 -14
  182. package/dist/widgets/LearnerDashboardHeader/MasqueradeBar/hooks.js +24 -34
  183. package/dist/widgets/LearnerDashboardHeader/MasqueradeBar/hooks.js.map +1 -1
  184. package/dist/widgets/LearnerDashboardHeader/MasqueradeBar/index.js +1 -1
  185. package/dist/widgets/LearnerDashboardHeader/MasqueradeBar/index.js.map +1 -1
  186. package/dist/widgets/LearnerDashboardHeader/hooks.js +1 -1
  187. package/dist/widgets/LearnerDashboardHeader/hooks.js.map +1 -1
  188. package/dist/widgets/LookingForChallengeWidget/index.js +4 -2
  189. package/dist/widgets/LookingForChallengeWidget/index.js.map +1 -1
  190. package/dist/widgets/LookingForChallengeWidget/track.d.ts +1 -1
  191. package/package.json +26 -18
  192. package/dist/containers/CourseFilterControls/hooks.d.ts +0 -3
  193. package/dist/containers/CourseFilterControls/hooks.js +0 -48
  194. package/dist/containers/CourseFilterControls/hooks.js.map +0 -1
  195. package/dist/containers/CoursesPanel/hooks.d.ts +0 -15
  196. package/dist/containers/CoursesPanel/hooks.js +0 -45
  197. package/dist/containers/CoursesPanel/hooks.js.map +0 -1
  198. package/dist/containers/RelatedProgramsModal/hooks.d.ts +0 -7
  199. package/dist/containers/RelatedProgramsModal/hooks.js +0 -7
  200. package/dist/containers/RelatedProgramsModal/hooks.js.map +0 -1
  201. package/dist/data/contexts/MasqueradeUserContext.d.ts +0 -13
  202. package/dist/data/contexts/MasqueradeUserContext.js +0 -15
  203. package/dist/data/contexts/MasqueradeUserContext.js.map +0 -1
  204. package/dist/data/contexts/MasqueradeUserProvider.d.ts +0 -3
  205. package/dist/data/contexts/MasqueradeUserProvider.js +0 -24
  206. package/dist/data/contexts/MasqueradeUserProvider.js.map +0 -1
  207. package/dist/data/redux/app/index.d.ts +0 -2
  208. package/dist/data/redux/app/index.js +0 -3
  209. package/dist/data/redux/app/index.js.map +0 -1
  210. package/dist/data/redux/app/reducer.d.ts +0 -25
  211. package/dist/data/redux/app/reducer.js +0 -42
  212. package/dist/data/redux/app/reducer.js.map +0 -1
  213. package/dist/data/redux/app/selectors/appSelectors.d.ts +0 -17
  214. package/dist/data/redux/app/selectors/appSelectors.js +0 -13
  215. package/dist/data/redux/app/selectors/appSelectors.js.map +0 -1
  216. package/dist/data/redux/app/selectors/courseCard.d.ts +0 -3
  217. package/dist/data/redux/app/selectors/courseCard.js +0 -114
  218. package/dist/data/redux/app/selectors/courseCard.js.map +0 -1
  219. package/dist/data/redux/app/selectors/currentList.d.ts +0 -24
  220. package/dist/data/redux/app/selectors/currentList.js +0 -45
  221. package/dist/data/redux/app/selectors/currentList.js.map +0 -1
  222. package/dist/data/redux/app/selectors/index.d.ts +0 -2
  223. package/dist/data/redux/app/selectors/index.js +0 -8
  224. package/dist/data/redux/app/selectors/index.js.map +0 -1
  225. package/dist/data/redux/app/selectors/simpleSelectors.d.ts +0 -5
  226. package/dist/data/redux/app/selectors/simpleSelectors.js +0 -31
  227. package/dist/data/redux/app/selectors/simpleSelectors.js.map +0 -1
  228. package/dist/data/redux/hooks/app.d.ts +0 -42
  229. package/dist/data/redux/hooks/app.js +0 -99
  230. package/dist/data/redux/hooks/app.js.map +0 -1
  231. package/dist/data/redux/hooks/index.d.ts +0 -2
  232. package/dist/data/redux/hooks/index.js +0 -3
  233. package/dist/data/redux/hooks/index.js.map +0 -1
  234. package/dist/data/redux/hooks/requests.d.ts +0 -16
  235. package/dist/data/redux/hooks/requests.js +0 -38
  236. package/dist/data/redux/hooks/requests.js.map +0 -1
  237. package/dist/data/redux/index.d.ts +0 -6
  238. package/dist/data/redux/index.js +0 -26
  239. package/dist/data/redux/index.js.map +0 -1
  240. package/dist/data/redux/requests/index.d.ts +0 -2
  241. package/dist/data/redux/requests/index.js +0 -3
  242. package/dist/data/redux/requests/index.js.map +0 -1
  243. package/dist/data/redux/requests/reducer.d.ts +0 -36
  244. package/dist/data/redux/requests/reducer.js +0 -32
  245. package/dist/data/redux/requests/reducer.js.map +0 -1
  246. package/dist/data/redux/requests/selectors.d.ts +0 -21
  247. package/dist/data/redux/requests/selectors.js +0 -24
  248. package/dist/data/redux/requests/selectors.js.map +0 -1
  249. package/dist/data/services/lms/fakeData/courses.d.ts +0 -788
  250. package/dist/data/services/lms/fakeData/courses.js +0 -744
  251. package/dist/data/services/lms/fakeData/courses.js.map +0 -1
  252. package/dist/data/services/lms/fakeData/testUtils.d.ts +0 -18
  253. package/dist/data/services/lms/fakeData/testUtils.js +0 -31
  254. package/dist/data/services/lms/fakeData/testUtils.js.map +0 -1
  255. package/dist/data/store.d.ts +0 -12
  256. package/dist/data/store.js +0 -14
  257. package/dist/data/store.js.map +0 -1
  258. package/dist/data/utils.d.ts +0 -10
  259. package/dist/data/utils.js +0 -14
  260. package/dist/data/utils.js.map +0 -1
  261. package/dist/hooks/api.d.ts +0 -9
  262. package/dist/hooks/api.js +0 -96
  263. package/dist/hooks/api.js.map +0 -1
  264. package/dist/slots/CourseBannerSlot/images/course_banner_slot_default.png +0 -0
  265. package/dist/slots/CourseBannerSlot/images/custom_course_banner.png +0 -0
  266. package/dist/slots/CourseCardActionSlot/images/post_course_card_action.png +0 -0
  267. package/dist/slots/CourseListSlot/images/course_list_slot.png +0 -0
  268. package/dist/slots/CourseListSlot/images/readme_custom_course_list.png +0 -0
  269. package/dist/slots/DashboardModalSlot/images/dashboard_modal_slot.png +0 -0
  270. package/dist/slots/NoCoursesViewSlot/images/no_course_view_slot.png +0 -0
  271. package/dist/slots/NoCoursesViewSlot/images/readme_custom_no_courses.png +0 -0
  272. package/dist/slots/WidgetSidebarSlot/images/readme_custom_sidebar.png +0 -0
  273. package/dist/slots/WidgetSidebarSlot/images/widget_sidebar_slot.png +0 -0
  274. package/dist/test/inspector.d.ts +0 -28
  275. package/dist/test/inspector.js +0 -38
  276. package/dist/test/inspector.js.map +0 -1
  277. package/dist/test/messages.d.ts +0 -8
  278. package/dist/test/messages.js +0 -18
  279. package/dist/test/messages.js.map +0 -1
  280. package/dist/test/utils.d.ts +0 -2
  281. package/dist/test/utils.js +0 -3
  282. package/dist/test/utils.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataTransformers.js","sourceRoot":"","sources":["../../src/utils/dataTransformers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,GAAG,EAAE,CAAC;AAEtC,MAAM,mBAAmB,GAAG,CAAC,OAAO,EAAE,EAAE;IACtC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,OAAO,OAAO,CAAC,MAAM,CACnB,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;;QACnB,MAAM,GAAG,mCAAQ,IAAI,KAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,GAAE,CAAC;QAC/C,IAAI,CAAA,MAAA,GAAG,CAAC,UAAU,0CAAE,YAAY,MAAK,IAAI,EAAE,CAAC;YAC1C,GAAG,CAAC,UAAU,CAAC,YAAY,GAAG,GAAG,CAAC;QACpC,CAAC;QACD,uCAAY,GAAG,KAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,IAAG;IAC1C,CAAC,EACD,EAAE,CACH,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,8BAA8B,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAEjF,MAAM,4BAA4B,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC;AAE9F,MAAM,cAAc,GAAG,CAAC,OAAc,EAAE,OAAiB,EAAE,MAAc,EAAE,UAAkB,EAAE,EAAE;IAC/F,MAAM,aAAa,GAAG,UAAU,CAAC;QAC/B,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU;QACnE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,KAAK,IAAI,IAAI,MAAM,CAAC,SAAS,CAAC,UAAU;QACvF,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU;QAC/D,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU;QACjE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU;KACnE,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,UAAU,CAAC;QAC5B,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,YAAY,CAAC;QAC3E,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE;KAClE,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,MAAM;QACvD,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC;QAC/F,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAEhB,MAAM,MAAM,GAAG,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;QACpD,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACZ,OAAO,CAAC,CAAC;QACX,CAAC;QACD,OAAO,CAAC,CAAE,CAAS,GAAI,CAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,OAAO;SACjB,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;SAC/B,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,KAAK,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAE/E,MAAM,WAAW,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChE,MAAM,iBAAiB,GAAG,WAAW,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;IAEpE,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO;YACL,WAAW,EAAE,IAAI;YACjB,QAAQ,EAAE,CAAC;SACZ,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG;QACb,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,QAAQ,EAAE,UAAU,GAAG,QAAQ,CAAC;QAC3E,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;KAC5C,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,4BAA4B,EAAE,8BAA8B,EAAE,CAAC","sourcesContent":["import { FilterKeys, ListPageSize, SortKeys } from '@src/data/constants/app';\nimport StrictDict from './StrictDict';\n\nconst cardId = (val) => `card-${val}`;\n\nconst transformCourseData = (courses) => {\n const now = Date.now();\n return courses.reduce(\n (obj, curr, index) => {\n const out = { ...curr, cardId: cardId(index) };\n if (out.enrollment?.lastEnrolled === null) {\n out.enrollment.lastEnrolled = now;\n }\n return { ...obj, [cardId(index)]: out };\n },\n {},\n );\n};\n\nconst getTransformedCourseDataObject = (courses) => transformCourseData(courses);\n\nconst getTransformedCourseDataList = (courses) => Object.values(transformCourseData(courses));\n\nconst getVisibleList = (courses: any[], filters: string[], sortBy: string, pageNumber: number) => {\n const courseFilters = StrictDict({\n [FilterKeys.notEnrolled]: (course) => !course.enrollment.isEnrolled,\n [FilterKeys.done]: (course) => course.courseRun !== null && course.courseRun.isArchived,\n [FilterKeys.upgraded]: (course) => course.enrollment.isVerified,\n [FilterKeys.inProgress]: (course) => course.enrollment.hasStarted,\n [FilterKeys.notStarted]: (course) => !course.enrollment.hasStarted,\n });\n\n const transforms = StrictDict({\n [SortKeys.enrolled]: ({ enrollment }) => new Date(enrollment?.lastEnrolled),\n [SortKeys.title]: ({ course }) => course.courseName.toLowerCase(),\n });\n\n const courseFilterFn = filtersList => (filtersList.length\n ? course => filtersList.reduce((match, filter) => match && courseFilters[filter](course), true)\n : () => true);\n\n const sortFn = (transform, { reverse }) => (v1, v2) => {\n const [a, b] = [v1, v2].map(transform);\n if (a === b) {\n return 0;\n }\n return (((a as any) > (b as any)) ? 1 : -1) * (reverse ? -1 : 1);\n };\n\n const list = courses\n .filter(courseFilterFn(filters))\n .sort(sortFn(transforms[sortBy], { reverse: sortBy === SortKeys.enrolled }));\n\n const querySearch = new URLSearchParams(window.location.search);\n const disablePagination = querySearch.get('disable_pagination');\n const pageSize = Number(disablePagination) === 1 ? 0 : ListPageSize;\n\n if (pageSize === 0) {\n return {\n visibleList: list,\n numPages: 1,\n };\n }\n const result = {\n visibleList: list.slice((pageNumber - 1) * pageSize, pageNumber * pageSize),\n numPages: Math.ceil(list.length / pageSize),\n };\n return result;\n};\n\nexport { getVisibleList, getTransformedCourseDataList, getTransformedCourseDataObject };\n"]}
@@ -1,11 +1,10 @@
1
- export const state: any;
2
1
  export function useConfirmEmailBannerData(): {
3
- isNeeded: boolean;
2
+ isNeeded: any;
4
3
  showPageBanner: any;
5
- closePageBanner: () => any;
6
- showConfirmModal: any;
7
- closeConfirmModal: () => any;
4
+ closePageBanner: () => void;
5
+ showConfirmModal: boolean;
6
+ closeConfirmModal: () => void;
8
7
  openConfirmModalButtonClick: () => void;
9
8
  userConfirmEmailButtonClick: () => void;
10
9
  };
11
- export default module.useConfirmEmailBannerData;
10
+ export default useConfirmEmailBannerData;
@@ -1,21 +1,16 @@
1
- import { useContext, useState } from 'react';
2
- import GlobalDataContext from '../../../data/contexts/GlobalDataContext';
3
- import { StrictDict } from '../../../utils';
4
- import { apiHooks } from '../../../hooks';
5
- import * as module from './hooks';
6
- export const state = StrictDict({
7
- showPageBanner: (val) => useState(val), // eslint-disable-line
8
- showConfirmModal: (val) => useState(val), // eslint-disable-line
9
- });
1
+ import { useState } from 'react';
2
+ import { useInitializeLearnerHome, useSendConfirmEmail } from '../../../data/hooks';
10
3
  export const useConfirmEmailBannerData = () => {
11
- const { emailConfirmation } = useContext(GlobalDataContext);
12
- const { isNeeded } = emailConfirmation;
13
- const [showPageBanner, setShowPageBanner] = module.state.showPageBanner(isNeeded);
14
- const [showConfirmModal, setShowConfirmModal] = module.state.showConfirmModal(false);
4
+ var _a, _b;
5
+ const { data: learnerData } = useInitializeLearnerHome();
6
+ const isNeeded = ((_a = learnerData === null || learnerData === void 0 ? void 0 : learnerData.emailConfirmation) === null || _a === void 0 ? void 0 : _a.isNeeded) || false;
7
+ const sendEmailUrl = ((_b = learnerData === null || learnerData === void 0 ? void 0 : learnerData.emailConfirmation) === null || _b === void 0 ? void 0 : _b.sendEmailUrl) || '';
8
+ const { mutate: sendConfirmEmail } = useSendConfirmEmail(sendEmailUrl);
9
+ const [showPageBanner, setShowPageBanner] = useState(isNeeded);
10
+ const [showConfirmModal, setShowConfirmModal] = useState(false);
15
11
  const closePageBanner = () => setShowPageBanner(false);
16
12
  const closeConfirmModal = () => setShowConfirmModal(false);
17
13
  const openConfirmModal = () => setShowConfirmModal(true);
18
- const sendConfirmEmail = apiHooks.useSendConfirmEmail();
19
14
  const openConfirmModalButtonClick = () => {
20
15
  sendConfirmEmail();
21
16
  openConfirmModal();
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../../src/widgets/LearnerDashboardHeader/ConfirmEmailBanner/hooks.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE7C,OAAO,iBAAiB,MAAM,0CAA0C,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,KAAK,MAAM,MAAM,SAAS,CAAC;AAElC,MAAM,CAAC,MAAM,KAAK,GAAG,UAAU,CAAC;IAC9B,cAAc,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,sBAAsB;IAC9D,gBAAgB,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,sBAAsB;CACjE,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,EAAE;IAC5C,MAAM,EAAE,iBAAiB,EAAE,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAC;IAC5D,MAAM,EAAE,QAAQ,EAAE,GAAG,iBAAiB,CAAC;IACvC,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAClF,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACrF,MAAM,eAAe,GAAG,GAAG,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACvD,MAAM,iBAAiB,GAAG,GAAG,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC3D,MAAM,gBAAgB,GAAG,GAAG,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACzD,MAAM,gBAAgB,GAAG,QAAQ,CAAC,mBAAmB,EAAE,CAAC;IAExD,MAAM,2BAA2B,GAAG,GAAG,EAAE;QACvC,gBAAgB,EAAE,CAAC;QACnB,gBAAgB,EAAE,CAAC;QACnB,eAAe,EAAE,CAAC;IACpB,CAAC,CAAC;IAEF,MAAM,2BAA2B,GAAG,GAAG,EAAE;QACvC,iBAAiB,EAAE,CAAC;QACpB,eAAe,EAAE,CAAC;IACpB,CAAC,CAAC;IACF,OAAO;QACL,QAAQ;QACR,cAAc;QACd,eAAe;QACf,gBAAgB;QAChB,iBAAiB;QACjB,2BAA2B;QAC3B,2BAA2B;KAC5B,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,yBAAyB,CAAC","sourcesContent":["import { useContext, useState } from 'react';\n\nimport GlobalDataContext from '../../../data/contexts/GlobalDataContext';\nimport { StrictDict } from '../../../utils';\nimport { apiHooks } from '../../../hooks';\n\nimport * as module from './hooks';\n\nexport const state = StrictDict({\n showPageBanner: (val) => useState(val), // eslint-disable-line\n showConfirmModal: (val) => useState(val), // eslint-disable-line\n});\n\nexport const useConfirmEmailBannerData = () => {\n const { emailConfirmation } = useContext(GlobalDataContext);\n const { isNeeded } = emailConfirmation;\n const [showPageBanner, setShowPageBanner] = module.state.showPageBanner(isNeeded);\n const [showConfirmModal, setShowConfirmModal] = module.state.showConfirmModal(false);\n const closePageBanner = () => setShowPageBanner(false);\n const closeConfirmModal = () => setShowConfirmModal(false);\n const openConfirmModal = () => setShowConfirmModal(true);\n const sendConfirmEmail = apiHooks.useSendConfirmEmail();\n\n const openConfirmModalButtonClick = () => {\n sendConfirmEmail();\n openConfirmModal();\n closePageBanner();\n };\n\n const userConfirmEmailButtonClick = () => {\n closeConfirmModal();\n closePageBanner();\n };\n return {\n isNeeded,\n showPageBanner,\n closePageBanner,\n showConfirmModal,\n closeConfirmModal,\n openConfirmModalButtonClick,\n userConfirmEmailButtonClick,\n };\n};\n\nexport default useConfirmEmailBannerData;\n"]}
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../../src/widgets/LearnerDashboardHeader/ConfirmEmailBanner/hooks.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjC,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEhF,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,EAAE;;IAC5C,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,wBAAwB,EAAE,CAAC;IACzD,MAAM,QAAQ,GAAG,CAAA,MAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,iBAAiB,0CAAE,QAAQ,KAAI,KAAK,CAAC;IACnE,MAAM,YAAY,GAAG,CAAA,MAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,iBAAiB,0CAAE,YAAY,KAAI,EAAE,CAAC;IACxE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAC;IACvE,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC/D,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChE,MAAM,eAAe,GAAG,GAAG,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACvD,MAAM,iBAAiB,GAAG,GAAG,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC3D,MAAM,gBAAgB,GAAG,GAAG,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAEzD,MAAM,2BAA2B,GAAG,GAAG,EAAE;QACvC,gBAAgB,EAAE,CAAC;QACnB,gBAAgB,EAAE,CAAC;QACnB,eAAe,EAAE,CAAC;IACpB,CAAC,CAAC;IAEF,MAAM,2BAA2B,GAAG,GAAG,EAAE;QACvC,iBAAiB,EAAE,CAAC;QACpB,eAAe,EAAE,CAAC;IACpB,CAAC,CAAC;IACF,OAAO;QACL,QAAQ;QACR,cAAc;QACd,eAAe;QACf,gBAAgB;QAChB,iBAAiB;QACjB,2BAA2B;QAC3B,2BAA2B;KAC5B,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,yBAAyB,CAAC","sourcesContent":["import { useState } from 'react';\n\nimport { useInitializeLearnerHome, useSendConfirmEmail } from '@src/data/hooks';\n\nexport const useConfirmEmailBannerData = () => {\n const { data: learnerData } = useInitializeLearnerHome();\n const isNeeded = learnerData?.emailConfirmation?.isNeeded || false;\n const sendEmailUrl = learnerData?.emailConfirmation?.sendEmailUrl || '';\n const { mutate: sendConfirmEmail } = useSendConfirmEmail(sendEmailUrl);\n const [showPageBanner, setShowPageBanner] = useState(isNeeded);\n const [showConfirmModal, setShowConfirmModal] = useState(false);\n const closePageBanner = () => setShowPageBanner(false);\n const closeConfirmModal = () => setShowConfirmModal(false);\n const openConfirmModal = () => setShowConfirmModal(true);\n\n const openConfirmModalButtonClick = () => {\n sendConfirmEmail();\n openConfirmModal();\n closePageBanner();\n };\n\n const userConfirmEmailButtonClick = () => {\n closeConfirmModal();\n closePageBanner();\n };\n return {\n isNeeded,\n showPageBanner,\n closePageBanner,\n showConfirmModal,\n closeConfirmModal,\n openConfirmModalButtonClick,\n userConfirmEmailButtonClick,\n };\n};\n\nexport default useConfirmEmailBannerData;\n"]}
@@ -1,24 +1,22 @@
1
- export const state: any;
2
- export function useMasqueradeInput(): {
3
- handleMasqueradeInputChange: (e: any) => any;
4
- masqueradeInput: any;
5
- };
6
- export function getMasqueradeErrorMessage(errorStatus: any): any;
7
1
  export function useMasqueradeBarData({ authenticatedUser, }: {
8
2
  authenticatedUser: any;
9
3
  }): {
10
4
  canMasquerade: any;
11
- isMasquerading: undefined;
12
- isMasqueradingFailed: undefined;
13
- isMasqueradingPending: undefined;
14
- masqueradeErrorMessage: any;
15
- masqueradeInput: any;
5
+ isMasquerading: boolean;
6
+ isMasqueradingFailed: boolean;
7
+ isMasqueradingPending: boolean;
8
+ masqueradeErrorMessage: {
9
+ id: string;
10
+ defaultMessage: string;
11
+ description: string;
12
+ } | null;
13
+ masqueradeInput: string;
16
14
  handleMasqueradeSubmit: (user: any) => (e: any) => void;
17
- handleClearMasquerade: () => any;
18
- handleMasqueradeInputChange: (e: any) => any;
15
+ handleClearMasquerade: () => void;
16
+ handleMasqueradeInputChange: (e: any) => void;
19
17
  formatMessage: {
20
18
  (this: void, descriptor: import("react-intl").MessageDescriptor, values?: Record<string, import("intl-messageformat").PrimitiveType | import("intl-messageformat").FormatXMLElementFn<string, string>>, opts?: import("intl-messageformat").Options): string;
21
19
  (this: void, descriptor: import("react-intl").MessageDescriptor, values?: Record<string, React.ReactNode | import("intl-messageformat").PrimitiveType | import("intl-messageformat").FormatXMLElementFn<string, React.ReactNode>>, opts?: import("intl-messageformat").Options): Array<React.ReactNode>;
22
20
  };
23
21
  };
24
- export default module.useMasqueradeBarData;
22
+ export default useMasqueradeBarData;
@@ -1,47 +1,37 @@
1
- import { useState, useContext } from 'react';
1
+ import { useState, useMemo } from 'react';
2
2
  import { useIntl } from '@openedx/frontend-base';
3
- import MasqueradeUserContext from '../../../data/contexts/MasqueradeUserContext';
4
- import { StrictDict } from '../../../utils';
5
- import * as module from './hooks';
3
+ import { useMasquerade } from '../../../data/context';
4
+ import { useInitializeLearnerHome } from '../../../data/hooks';
6
5
  import messages from './messages';
7
- export const state = StrictDict({
8
- masqueradeInput: (val) => useState(val), // eslint-disable-line
9
- });
10
- export const useMasqueradeInput = () => {
11
- const [masqueradeInput, setMasqueradeInput] = module.state.masqueradeInput('');
12
- const handleMasqueradeInputChange = (e) => setMasqueradeInput(e.target.value);
13
- return {
14
- handleMasqueradeInputChange,
15
- masqueradeInput,
16
- };
17
- };
18
- const masqueradeErrorMessageMap = {
19
- 404: messages.NoStudentFound,
20
- };
21
- export const getMasqueradeErrorMessage = (errorStatus) => {
22
- var _a;
23
- if (errorStatus == null) {
24
- return null;
25
- }
26
- return (_a = masqueradeErrorMessageMap[errorStatus]) !== null && _a !== void 0 ? _a : messages.UnknownError;
27
- };
28
6
  export const useMasqueradeBarData = ({ authenticatedUser, }) => {
29
- var _a;
30
7
  const { formatMessage } = useIntl();
31
- const { setMasqueradeUser } = useContext(MasqueradeUserContext);
32
- const handleClearMasquerade = () => setMasqueradeUser(null);
33
- const { masqueradeIsSuccess, masqueradeIsPending, masqueradeIsError, masqueradeError, } = useContext(MasqueradeUserContext);
34
- const { masqueradeInput, handleMasqueradeInputChange } = module.useMasqueradeInput();
35
- const masqueradeErrorMessage = getMasqueradeErrorMessage((_a = masqueradeError === null || masqueradeError === void 0 ? void 0 : masqueradeError.customAttributes) === null || _a === void 0 ? void 0 : _a.httpErrorStatus);
8
+ const [masqueradeInput, setMasqueradeInput] = useState('');
9
+ const { masqueradeUser, setMasqueradeUser } = useMasquerade();
10
+ const { isError, error, isPending, } = useInitializeLearnerHome();
11
+ const handleMasqueradeInputChange = (e) => setMasqueradeInput(e.target.value);
12
+ const handleClearMasquerade = () => {
13
+ setMasqueradeUser(undefined);
14
+ setMasqueradeInput('');
15
+ };
36
16
  const handleMasqueradeSubmit = (user) => (e) => {
37
17
  setMasqueradeUser(user);
38
18
  e.preventDefault();
39
19
  };
20
+ const isMasqueradingFailed = !!masqueradeUser && !!masqueradeInput && isError;
21
+ const isMasqueradingPending = !!masqueradeUser && isPending;
22
+ const isMasquerading = !!masqueradeUser && !isError && !isPending;
23
+ const masqueradeErrorMessage = useMemo(() => {
24
+ var _a;
25
+ if (masqueradeUser && error) {
26
+ return (((_a = error.customAttributes) === null || _a === void 0 ? void 0 : _a.httpErrorStatus) === 404 ? messages.NoStudentFound : messages.UnknownError);
27
+ }
28
+ return null;
29
+ }, [error, masqueradeUser]);
40
30
  return {
41
31
  canMasquerade: authenticatedUser === null || authenticatedUser === void 0 ? void 0 : authenticatedUser.administrator,
42
- isMasquerading: masqueradeIsSuccess,
43
- isMasqueradingFailed: masqueradeIsError,
44
- isMasqueradingPending: masqueradeIsPending,
32
+ isMasquerading,
33
+ isMasqueradingFailed,
34
+ isMasqueradingPending,
45
35
  masqueradeErrorMessage,
46
36
  masqueradeInput,
47
37
  handleMasqueradeSubmit,
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../../src/widgets/LearnerDashboardHeader/MasqueradeBar/hooks.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,qBAAqB,MAAM,8CAA8C,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,KAAK,MAAM,MAAM,SAAS,CAAC;AAClC,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,CAAC,MAAM,KAAK,GAAG,UAAU,CAAC;IAC9B,eAAe,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,sBAAsB;CAChE,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,EAAE;IACrC,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;IAC/E,MAAM,2BAA2B,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9E,OAAO;QACL,2BAA2B;QAC3B,eAAe;KAChB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,yBAAyB,GAAG;IAChC,GAAG,EAAE,QAAQ,CAAC,cAAc;CAC7B,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,WAAW,EAAE,EAAE;;IACvD,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,MAAA,yBAAyB,CAAC,WAAW,CAAC,mCAAI,QAAQ,CAAC,YAAY,CAAC;AACzE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,EACnC,iBAAiB,GAClB,EAAE,EAAE;;IACH,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,EAAE,iBAAiB,EAAE,GAAG,UAAU,CAAC,qBAAqB,CAAC,CAAC;IAChE,MAAM,qBAAqB,GAAG,GAAG,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAE5D,MAAM,EACJ,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,GAChB,GAAG,UAAU,CAAC,qBAAqB,CAAC,CAAC;IACtC,MAAM,EAAE,eAAe,EAAE,2BAA2B,EAAE,GAAG,MAAM,CAAC,kBAAkB,EAAE,CAAC;IAErF,MAAM,sBAAsB,GAAG,yBAAyB,CAAC,MAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,gBAAgB,0CAAE,eAAe,CAAC,CAAC;IAC7G,MAAM,sBAAsB,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;QAC7C,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC,CAAC,cAAc,EAAE,CAAC;IACrB,CAAC,CAAC;IAEF,OAAO;QACL,aAAa,EAAE,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,aAAa;QAC/C,cAAc,EAAE,mBAAmB;QACnC,oBAAoB,EAAE,iBAAiB;QACvC,qBAAqB,EAAE,mBAAmB;QAC1C,sBAAsB;QACtB,eAAe;QACf,sBAAsB;QACtB,qBAAqB;QACrB,2BAA2B;QAC3B,aAAa;KACd,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,oBAAoB,CAAC","sourcesContent":["import { useState, useContext } from 'react';\nimport { useIntl } from '@openedx/frontend-base';\n\nimport MasqueradeUserContext from '../../../data/contexts/MasqueradeUserContext';\nimport { StrictDict } from '../../../utils';\n\nimport * as module from './hooks';\nimport messages from './messages';\n\nexport const state = StrictDict({\n masqueradeInput: (val) => useState(val), // eslint-disable-line\n});\n\nexport const useMasqueradeInput = () => {\n const [masqueradeInput, setMasqueradeInput] = module.state.masqueradeInput('');\n const handleMasqueradeInputChange = (e) => setMasqueradeInput(e.target.value);\n return {\n handleMasqueradeInputChange,\n masqueradeInput,\n };\n};\n\nconst masqueradeErrorMessageMap = {\n 404: messages.NoStudentFound,\n};\n\nexport const getMasqueradeErrorMessage = (errorStatus) => {\n if (errorStatus == null) {\n return null;\n }\n return masqueradeErrorMessageMap[errorStatus] ?? messages.UnknownError;\n};\n\nexport const useMasqueradeBarData = ({\n authenticatedUser,\n}) => {\n const { formatMessage } = useIntl();\n const { setMasqueradeUser } = useContext(MasqueradeUserContext);\n const handleClearMasquerade = () => setMasqueradeUser(null);\n\n const {\n masqueradeIsSuccess,\n masqueradeIsPending,\n masqueradeIsError,\n masqueradeError,\n } = useContext(MasqueradeUserContext);\n const { masqueradeInput, handleMasqueradeInputChange } = module.useMasqueradeInput();\n\n const masqueradeErrorMessage = getMasqueradeErrorMessage(masqueradeError?.customAttributes?.httpErrorStatus);\n const handleMasqueradeSubmit = (user) => (e) => {\n setMasqueradeUser(user);\n e.preventDefault();\n };\n\n return {\n canMasquerade: authenticatedUser?.administrator,\n isMasquerading: masqueradeIsSuccess,\n isMasqueradingFailed: masqueradeIsError,\n isMasqueradingPending: masqueradeIsPending,\n masqueradeErrorMessage,\n masqueradeInput,\n handleMasqueradeSubmit,\n handleClearMasquerade,\n handleMasqueradeInputChange,\n formatMessage,\n };\n};\n\nexport default useMasqueradeBarData;\n"]}
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../../src/widgets/LearnerDashboardHeader/MasqueradeBar/hooks.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,EACnC,iBAAiB,GAClB,EAAE,EAAE;IACH,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC3D,MAAM,EAAE,cAAc,EAAE,iBAAiB,EAAE,GAAG,aAAa,EAAE,CAAC;IAC9D,MAAM,EACJ,OAAO,EAAE,KAAK,EAAE,SAAS,GAC1B,GAAG,wBAAwB,EAAE,CAAC;IAE/B,MAAM,2BAA2B,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9E,MAAM,qBAAqB,GAAG,GAAG,EAAE;QACjC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAC7B,kBAAkB,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC,CAAC;IACF,MAAM,sBAAsB,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;QAC7C,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC,CAAC,cAAc,EAAE,CAAC;IACrB,CAAC,CAAC;IAEF,MAAM,oBAAoB,GAAG,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,eAAe,IAAI,OAAO,CAAC;IAC9E,MAAM,qBAAqB,GAAG,CAAC,CAAC,cAAc,IAAI,SAAS,CAAC;IAC5D,MAAM,cAAc,GAAG,CAAC,CAAC,cAAc,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC;IAClE,MAAM,sBAAsB,GAAG,OAAO,CAAC,GAAG,EAAE;;QAC1C,IAAI,cAAc,IAAI,KAAK,EAAE,CAAC;YAC5B,OAAO,CAAC,CAAA,MAAA,KAAK,CAAC,gBAAgB,0CAAE,eAAe,MAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAC7G,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC;IAE5B,OAAO;QACL,aAAa,EAAE,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,aAAa;QAC/C,cAAc;QACd,oBAAoB;QACpB,qBAAqB;QACrB,sBAAsB;QACtB,eAAe;QACf,sBAAsB;QACtB,qBAAqB;QACrB,2BAA2B;QAC3B,aAAa;KACd,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,oBAAoB,CAAC","sourcesContent":["import { useState, useMemo } from 'react';\nimport { useIntl } from '@openedx/frontend-base';\n\nimport { useMasquerade } from '../../../data/context';\nimport { useInitializeLearnerHome } from '../../../data/hooks';\n\nimport messages from './messages';\n\nexport const useMasqueradeBarData = ({\n authenticatedUser,\n}) => {\n const { formatMessage } = useIntl();\n const [masqueradeInput, setMasqueradeInput] = useState('');\n const { masqueradeUser, setMasqueradeUser } = useMasquerade();\n const {\n isError, error, isPending,\n } = useInitializeLearnerHome();\n\n const handleMasqueradeInputChange = (e) => setMasqueradeInput(e.target.value);\n const handleClearMasquerade = () => {\n setMasqueradeUser(undefined);\n setMasqueradeInput('');\n };\n const handleMasqueradeSubmit = (user) => (e) => {\n setMasqueradeUser(user);\n e.preventDefault();\n };\n\n const isMasqueradingFailed = !!masqueradeUser && !!masqueradeInput && isError;\n const isMasqueradingPending = !!masqueradeUser && isPending;\n const isMasquerading = !!masqueradeUser && !isError && !isPending;\n const masqueradeErrorMessage = useMemo(() => {\n if (masqueradeUser && error) {\n return (error.customAttributes?.httpErrorStatus === 404 ? messages.NoStudentFound : messages.UnknownError);\n }\n return null;\n }, [error, masqueradeUser]);\n\n return {\n canMasquerade: authenticatedUser?.administrator,\n isMasquerading,\n isMasqueradingFailed,\n isMasqueradingPending,\n masqueradeErrorMessage,\n masqueradeInput,\n handleMasqueradeSubmit,\n handleClearMasquerade,\n handleMasqueradeInputChange,\n formatMessage,\n };\n};\n\nexport default useMasqueradeBarData;\n"]}
@@ -12,7 +12,7 @@ export const MasqueradeBar = () => {
12
12
  if (!canMasquerade) {
13
13
  return null;
14
14
  }
15
- return (_jsx("div", { className: "w-100 shadow-sm px-2", children: _jsx(Form, { className: "masquerade-bar w-100", children: isMasquerading ? (_jsxs(_Fragment, { children: [_jsxs(FormLabel, { inline: "true", className: "masquerade-form-label", children: [_jsx(Icon, { src: PersonSearch }), formatMessage(messages.ViewingAs)] }), _jsx(Chip, { className: "masquerade-chip", iconAfter: Close, onClick: handleClearMasquerade, children: masqueradeInput })] })) : (_jsxs(_Fragment, { children: [_jsxs(FormLabel, { inline: "true", id: "masquerade-form-label", className: "masquerade-form-label", children: [_jsx(Icon, { src: PersonSearch }), formatMessage(messages.ViewAs)] }), _jsxs(FormGroup, { isInvalid: isMasqueradingFailed, className: "masquerade-form-input", children: [_jsx(FormControl, { value: masqueradeInput, onChange: handleMasqueradeInputChange, floatingLabel: formatMessage(messages.StudentNameInput), "aria-labelledby": "masquerade-form-label" }), isMasqueradingFailed && (_jsx(FormControlFeedback, { type: "invalid", hasIcon: false, children: formatMessage(masqueradeErrorMessage) }))] }), _jsx(StatefulButton, { disabled: !masqueradeInput.length, variant: "brand", onClick: handleMasqueradeSubmit(masqueradeInput), labels: {
15
+ return (_jsx("div", { className: "w-100 shadow-sm px-2", children: _jsx(Form, { className: "masquerade-bar w-100", children: isMasquerading ? (_jsxs(_Fragment, { children: [_jsxs(FormLabel, { inline: "true", className: "masquerade-form-label", children: [_jsx(Icon, { src: PersonSearch }), formatMessage(messages.ViewingAs)] }), _jsx(Chip, { className: "masquerade-chip", iconAfter: Close, onClick: handleClearMasquerade, children: masqueradeInput })] })) : (_jsxs(_Fragment, { children: [_jsxs(FormLabel, { inline: "true", id: "masquerade-form-label", className: "masquerade-form-label", children: [_jsx(Icon, { src: PersonSearch }), formatMessage(messages.ViewAs)] }), _jsxs(FormGroup, { isInvalid: isMasqueradingFailed, className: "masquerade-form-input", children: [_jsx(FormControl, { value: masqueradeInput, onChange: handleMasqueradeInputChange, floatingLabel: formatMessage(messages.StudentNameInput), "aria-labelledby": "masquerade-form-label" }), isMasqueradingFailed && (_jsx(FormControlFeedback, { type: "invalid", hasIcon: false, children: formatMessage(masqueradeErrorMessage) }))] }), _jsx(StatefulButton, { disabled: !(masqueradeInput === null || masqueradeInput === void 0 ? void 0 : masqueradeInput.length), variant: "brand", onClick: handleMasqueradeSubmit(masqueradeInput), labels: {
16
16
  default: formatMessage(messages.SubmitButton),
17
17
  }, className: "mr-3", state: isMasqueradingPending ? 'pending' : 'default', type: "submit" })] })) }) }));
18
18
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/widgets/LearnerDashboardHeader/MasqueradeBar/index.jsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,EACL,IAAI,EACJ,IAAI,EACJ,WAAW,EACX,mBAAmB,EACnB,SAAS,EACT,SAAS,EACT,cAAc,EACd,IAAI,GACL,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE7D,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,cAAc,CAAC;AAEtB,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,EAAE;IAChC,MAAM,EAAE,iBAAiB,EAAE,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IAEtD,MAAM,EACJ,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,qBAAqB,EACrB,eAAe,EACf,sBAAsB,EACtB,2BAA2B,EAC3B,qBAAqB,EACrB,sBAAsB,EACtB,aAAa,GACd,GAAG,oBAAoB,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAEhD,IAAI,CAAC,aAAa,EAAE,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IAEpC,OAAO,CACL,cAAK,SAAS,EAAC,sBAAsB,YACnC,KAAC,IAAI,IAAC,SAAS,EAAC,sBAAsB,YACnC,cAAc,CAAC,CAAC,CAAC,CAChB,8BACE,MAAC,SAAS,IAAC,MAAM,EAAC,MAAM,EAAC,SAAS,EAAC,uBAAuB,aACxD,KAAC,IAAI,IAAC,GAAG,EAAE,YAAY,GAAI,EAC1B,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,IACxB,EACZ,KAAC,IAAI,IACH,SAAS,EAAC,iBAAiB,EAC3B,SAAS,EAAE,KAAK,EAChB,OAAO,EAAE,qBAAqB,YAE7B,eAAe,GACX,IACN,CACJ,CAAC,CAAC,CAAC,CACF,8BACE,MAAC,SAAS,IAAC,MAAM,EAAC,MAAM,EAAC,EAAE,EAAC,uBAAuB,EAAC,SAAS,EAAC,uBAAuB,aACnF,KAAC,IAAI,IAAC,GAAG,EAAE,YAAY,GAAI,EAC1B,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,IACrB,EACZ,MAAC,SAAS,IAAC,SAAS,EAAE,oBAAoB,EAAE,SAAS,EAAC,uBAAuB,aAC3E,KAAC,WAAW,IACV,KAAK,EAAE,eAAe,EACtB,QAAQ,EAAE,2BAA2B,EACrC,aAAa,EAAE,aAAa,CAAC,QAAQ,CAAC,gBAAgB,CAAC,qBACvC,uBAAuB,GACvC,EACD,oBAAoB,IAAI,CACvB,KAAC,mBAAmB,IAAC,IAAI,EAAC,SAAS,EAAC,OAAO,EAAE,KAAK,YAC/C,aAAa,CAAC,sBAAsB,CAAC,GAClB,CACvB,IACS,EACZ,KAAC,cAAc,IACb,QAAQ,EAAE,CAAC,eAAe,CAAC,MAAM,EACjC,OAAO,EAAC,OAAO,EACf,OAAO,EAAE,sBAAsB,CAAC,eAAe,CAAC,EAChD,MAAM,EAAE;4BACN,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC;yBAC9C,EACD,SAAS,EAAC,MAAM,EAChB,KAAK,EAAE,qBAAqB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EACpD,IAAI,EAAC,QAAQ,GACb,IACD,CACJ,GACI,GACH,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,aAAa,CAAC","sourcesContent":["import { useContext } from 'react';\nimport { SiteContext } from '@openedx/frontend-base';\n\nimport {\n Chip,\n Form,\n FormControl,\n FormControlFeedback,\n FormLabel,\n FormGroup,\n StatefulButton,\n Icon,\n} from '@openedx/paragon';\nimport { Close, PersonSearch } from '@openedx/paragon/icons';\n\nimport messages from './messages';\nimport { useMasqueradeBarData } from './hooks';\nimport './index.scss';\n\nexport const MasqueradeBar = () => {\n const { authenticatedUser } = useContext(SiteContext);\n\n const {\n canMasquerade,\n isMasquerading,\n isMasqueradingFailed,\n isMasqueradingPending,\n masqueradeInput,\n masqueradeErrorMessage,\n handleMasqueradeInputChange,\n handleClearMasquerade,\n handleMasqueradeSubmit,\n formatMessage,\n } = useMasqueradeBarData({ authenticatedUser });\n\n if (!canMasquerade) { return null; }\n\n return (\n <div className=\"w-100 shadow-sm px-2\">\n <Form className=\"masquerade-bar w-100\">\n {isMasquerading ? (\n <>\n <FormLabel inline=\"true\" className=\"masquerade-form-label\">\n <Icon src={PersonSearch} />\n {formatMessage(messages.ViewingAs)}\n </FormLabel>\n <Chip\n className=\"masquerade-chip\"\n iconAfter={Close}\n onClick={handleClearMasquerade}\n >\n {masqueradeInput}\n </Chip>\n </>\n ) : (\n <>\n <FormLabel inline=\"true\" id=\"masquerade-form-label\" className=\"masquerade-form-label\">\n <Icon src={PersonSearch} />\n {formatMessage(messages.ViewAs)}\n </FormLabel>\n <FormGroup isInvalid={isMasqueradingFailed} className=\"masquerade-form-input\">\n <FormControl\n value={masqueradeInput}\n onChange={handleMasqueradeInputChange}\n floatingLabel={formatMessage(messages.StudentNameInput)}\n aria-labelledby=\"masquerade-form-label\"\n />\n {isMasqueradingFailed && (\n <FormControlFeedback type=\"invalid\" hasIcon={false}>\n {formatMessage(masqueradeErrorMessage)}\n </FormControlFeedback>\n )}\n </FormGroup>\n <StatefulButton\n disabled={!masqueradeInput.length}\n variant=\"brand\"\n onClick={handleMasqueradeSubmit(masqueradeInput)}\n labels={{\n default: formatMessage(messages.SubmitButton),\n }}\n className=\"mr-3\"\n state={isMasqueradingPending ? 'pending' : 'default'}\n type=\"submit\"\n />\n </>\n )}\n </Form>\n </div>\n );\n};\n\nexport default MasqueradeBar;\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/widgets/LearnerDashboardHeader/MasqueradeBar/index.jsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,EACL,IAAI,EACJ,IAAI,EACJ,WAAW,EACX,mBAAmB,EACnB,SAAS,EACT,SAAS,EACT,cAAc,EACd,IAAI,GACL,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE7D,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,cAAc,CAAC;AAEtB,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,EAAE;IAChC,MAAM,EAAE,iBAAiB,EAAE,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IAEtD,MAAM,EACJ,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,qBAAqB,EACrB,eAAe,EACf,sBAAsB,EACtB,2BAA2B,EAC3B,qBAAqB,EACrB,sBAAsB,EACtB,aAAa,GACd,GAAG,oBAAoB,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAEhD,IAAI,CAAC,aAAa,EAAE,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IAEpC,OAAO,CACL,cAAK,SAAS,EAAC,sBAAsB,YACnC,KAAC,IAAI,IAAC,SAAS,EAAC,sBAAsB,YACnC,cAAc,CAAC,CAAC,CAAC,CAChB,8BACE,MAAC,SAAS,IAAC,MAAM,EAAC,MAAM,EAAC,SAAS,EAAC,uBAAuB,aACxD,KAAC,IAAI,IAAC,GAAG,EAAE,YAAY,GAAI,EAC1B,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,IACxB,EACZ,KAAC,IAAI,IACH,SAAS,EAAC,iBAAiB,EAC3B,SAAS,EAAE,KAAK,EAChB,OAAO,EAAE,qBAAqB,YAE7B,eAAe,GACX,IACN,CACJ,CAAC,CAAC,CAAC,CACF,8BACE,MAAC,SAAS,IAAC,MAAM,EAAC,MAAM,EAAC,EAAE,EAAC,uBAAuB,EAAC,SAAS,EAAC,uBAAuB,aACnF,KAAC,IAAI,IAAC,GAAG,EAAE,YAAY,GAAI,EAC1B,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,IACrB,EACZ,MAAC,SAAS,IAAC,SAAS,EAAE,oBAAoB,EAAE,SAAS,EAAC,uBAAuB,aAC3E,KAAC,WAAW,IACV,KAAK,EAAE,eAAe,EACtB,QAAQ,EAAE,2BAA2B,EACrC,aAAa,EAAE,aAAa,CAAC,QAAQ,CAAC,gBAAgB,CAAC,qBACvC,uBAAuB,GACvC,EACD,oBAAoB,IAAI,CACvB,KAAC,mBAAmB,IAAC,IAAI,EAAC,SAAS,EAAC,OAAO,EAAE,KAAK,YAC/C,aAAa,CAAC,sBAAsB,CAAC,GAClB,CACvB,IACS,EACZ,KAAC,cAAc,IACb,QAAQ,EAAE,CAAC,CAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,MAAM,CAAA,EAClC,OAAO,EAAC,OAAO,EACf,OAAO,EAAE,sBAAsB,CAAC,eAAe,CAAC,EAChD,MAAM,EAAE;4BACN,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC;yBAC9C,EACD,SAAS,EAAC,MAAM,EAChB,KAAK,EAAE,qBAAqB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EACpD,IAAI,EAAC,QAAQ,GACb,IACD,CACJ,GACI,GACH,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,aAAa,CAAC","sourcesContent":["import { useContext } from 'react';\nimport { SiteContext } from '@openedx/frontend-base';\n\nimport {\n Chip,\n Form,\n FormControl,\n FormControlFeedback,\n FormLabel,\n FormGroup,\n StatefulButton,\n Icon,\n} from '@openedx/paragon';\nimport { Close, PersonSearch } from '@openedx/paragon/icons';\n\nimport messages from './messages';\nimport { useMasqueradeBarData } from './hooks';\nimport './index.scss';\n\nexport const MasqueradeBar = () => {\n const { authenticatedUser } = useContext(SiteContext);\n\n const {\n canMasquerade,\n isMasquerading,\n isMasqueradingFailed,\n isMasqueradingPending,\n masqueradeInput,\n masqueradeErrorMessage,\n handleMasqueradeInputChange,\n handleClearMasquerade,\n handleMasqueradeSubmit,\n formatMessage,\n } = useMasqueradeBarData({ authenticatedUser });\n\n if (!canMasquerade) { return null; }\n\n return (\n <div className=\"w-100 shadow-sm px-2\">\n <Form className=\"masquerade-bar w-100\">\n {isMasquerading ? (\n <>\n <FormLabel inline=\"true\" className=\"masquerade-form-label\">\n <Icon src={PersonSearch} />\n {formatMessage(messages.ViewingAs)}\n </FormLabel>\n <Chip\n className=\"masquerade-chip\"\n iconAfter={Close}\n onClick={handleClearMasquerade}\n >\n {masqueradeInput}\n </Chip>\n </>\n ) : (\n <>\n <FormLabel inline=\"true\" id=\"masquerade-form-label\" className=\"masquerade-form-label\">\n <Icon src={PersonSearch} />\n {formatMessage(messages.ViewAs)}\n </FormLabel>\n <FormGroup isInvalid={isMasqueradingFailed} className=\"masquerade-form-input\">\n <FormControl\n value={masqueradeInput}\n onChange={handleMasqueradeInputChange}\n floatingLabel={formatMessage(messages.StudentNameInput)}\n aria-labelledby=\"masquerade-form-label\"\n />\n {isMasqueradingFailed && (\n <FormControlFeedback type=\"invalid\" hasIcon={false}>\n {formatMessage(masqueradeErrorMessage)}\n </FormControlFeedback>\n )}\n </FormGroup>\n <StatefulButton\n disabled={!masqueradeInput?.length}\n variant=\"brand\"\n onClick={handleMasqueradeSubmit(masqueradeInput)}\n labels={{\n default: formatMessage(messages.SubmitButton),\n }}\n className=\"mr-3\"\n state={isMasqueradingPending ? 'pending' : 'default'}\n type=\"submit\"\n />\n </>\n )}\n </Form>\n </div>\n );\n};\n\nexport default MasqueradeBar;\n"]}
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { useIntl } from '@openedx/frontend-base';
3
- import { StrictDict } from 'utils';
3
+ import { StrictDict } from '../../utils';
4
4
  import getLearnerHeaderMenu from './LearnerDashboardMenu';
5
5
  export const state = StrictDict({
6
6
  isOpen: (val) => React.useState(val), // eslint-disable-line
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/widgets/LearnerDashboardHeader/hooks.js"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,oBAAoB,MAAM,wBAAwB,CAAC;AAE1D,MAAM,CAAC,MAAM,KAAK,GAAG,UAAU,CAAC;IAC9B,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,sBAAsB;CAC7D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,EAC5C,eAAe,EAAE,iBAAiB,GACnC,EAAE,EAAE;IACH,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,OAAO,oBAAoB,CAAC,aAAa,EAAE,eAAe,EAAE,iBAAiB,CAAC,CAAC;AACjF,CAAC,CAAC;AAEF,eAAe;IACb,6BAA6B;CAC9B,CAAC","sourcesContent":["import React from 'react';\nimport { useIntl } from '@openedx/frontend-base';\nimport { StrictDict } from 'utils';\n\nimport getLearnerHeaderMenu from './LearnerDashboardMenu';\n\nexport const state = StrictDict({\n isOpen: (val) => React.useState(val), // eslint-disable-line\n});\n\nexport const useLearnerDashboardHeaderMenu = ({\n courseSearchUrl, authenticatedUser,\n}) => {\n const { formatMessage } = useIntl();\n return getLearnerHeaderMenu(formatMessage, courseSearchUrl, authenticatedUser);\n};\n\nexport default {\n useLearnerDashboardHeaderMenu,\n};\n"]}
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/widgets/LearnerDashboardHeader/hooks.js"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,OAAO,oBAAoB,MAAM,wBAAwB,CAAC;AAE1D,MAAM,CAAC,MAAM,KAAK,GAAG,UAAU,CAAC;IAC9B,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,sBAAsB;CAC7D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,EAC5C,eAAe,EAAE,iBAAiB,GACnC,EAAE,EAAE;IACH,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,OAAO,oBAAoB,CAAC,aAAa,EAAE,eAAe,EAAE,iBAAiB,CAAC,CAAC;AACjF,CAAC,CAAC;AAEF,eAAe;IACb,6BAA6B;CAC9B,CAAC","sourcesContent":["import React from 'react';\nimport { useIntl } from '@openedx/frontend-base';\nimport { StrictDict } from '@src/utils';\n\nimport getLearnerHeaderMenu from './LearnerDashboardMenu';\n\nexport const state = StrictDict({\n isOpen: (val) => React.useState(val), // eslint-disable-line\n});\n\nexport const useLearnerDashboardHeaderMenu = ({\n courseSearchUrl, authenticatedUser,\n}) => {\n const { formatMessage } = useIntl();\n return getLearnerHeaderMenu(formatMessage, courseSearchUrl, authenticatedUser);\n};\n\nexport default {\n useLearnerDashboardHeaderMenu,\n};\n"]}
@@ -2,7 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useIntl } from '@openedx/frontend-base';
3
3
  import { Card, Hyperlink, Icon } from '@openedx/paragon';
4
4
  import { ArrowForward } from '@openedx/paragon/icons';
5
- import { reduxHooks } from '../../hooks';
5
+ import { useInitializeLearnerHome } from '../../data/hooks';
6
6
  import moreCoursesSVG from '../../assets/more-courses-sidewidget.svg';
7
7
  import { baseAppUrl } from '../../data/services/lms/urls';
8
8
  import { findCoursesWidgetClicked } from './track';
@@ -10,8 +10,10 @@ import messages from './messages';
10
10
  import './index.scss';
11
11
  export const arrowIcon = (_jsx(Icon, { className: "mx-1", src: ArrowForward }));
12
12
  export const LookingForChallengeWidget = () => {
13
+ var _a;
13
14
  const { formatMessage } = useIntl();
14
- const { courseSearchUrl } = reduxHooks.usePlatformSettingsData();
15
+ const { data: learnerData } = useInitializeLearnerHome();
16
+ const courseSearchUrl = ((_a = learnerData === null || learnerData === void 0 ? void 0 : learnerData.platformSettings) === null || _a === void 0 ? void 0 : _a.courseSearchUrl) || '';
15
17
  const hyperlinkDestination = baseAppUrl(courseSearchUrl) || '';
16
18
  return (_jsxs(Card, { orientation: "horizontal", id: "looking-for-challenge-widget", children: [_jsx(Card.ImageCap, { src: moreCoursesSVG, srcAlt: "course side widget" }), _jsxs(Card.Body, { className: "m-auto pr-2", children: [_jsx("h4", { children: formatMessage(messages.lookingForChallengePrompt) }), _jsx("h5", { children: _jsx(Hyperlink, { variant: "brand", destination: hyperlinkDestination, onClick: findCoursesWidgetClicked(hyperlinkDestination), className: "d-flex align-items-center", children: formatMessage(messages.findCoursesButton, { arrow: arrowIcon }) }) })] })] }));
17
19
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/widgets/LookingForChallengeWidget/index.jsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,cAAc,MAAM,0CAA0C,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,cAAc,CAAC;AAEtB,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAC,IAAI,IAAC,SAAS,EAAC,MAAM,EAAC,GAAG,EAAE,YAAY,GAAI,CAAC,CAAC;AAExE,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,EAAE;IAC5C,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,EAAE,eAAe,EAAE,GAAG,UAAU,CAAC,uBAAuB,EAAE,CAAC;IACjE,MAAM,oBAAoB,GAAG,UAAU,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;IAE/D,OAAO,CACL,MAAC,IAAI,IAAC,WAAW,EAAC,YAAY,EAAC,EAAE,EAAC,8BAA8B,aAC9D,KAAC,IAAI,CAAC,QAAQ,IACZ,GAAG,EAAE,cAAc,EACnB,MAAM,EAAC,oBAAoB,GAC3B,EACF,MAAC,IAAI,CAAC,IAAI,IAAC,SAAS,EAAC,aAAa,aAChC,uBACG,aAAa,CAAC,QAAQ,CAAC,yBAAyB,CAAC,GAC/C,EACL,uBACE,KAAC,SAAS,IACR,OAAO,EAAC,OAAO,EACf,WAAW,EAAE,oBAAoB,EACjC,OAAO,EAAE,wBAAwB,CAAC,oBAAoB,CAAC,EACvD,SAAS,EAAC,2BAA2B,YAEpC,aAAa,CAAC,QAAQ,CAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,GACtD,GACT,IACK,IACP,CACR,CAAC;AACJ,CAAC,CAAC;AAEF,yBAAyB,CAAC,SAAS,GAAG,EAAE,CAAC;AAEzC,eAAe,yBAAyB,CAAC","sourcesContent":["import { useIntl } from '@openedx/frontend-base';\nimport { Card, Hyperlink, Icon } from '@openedx/paragon';\nimport { ArrowForward } from '@openedx/paragon/icons';\n\nimport { reduxHooks } from '../../hooks';\nimport moreCoursesSVG from '../../assets/more-courses-sidewidget.svg';\nimport { baseAppUrl } from '../../data/services/lms/urls';\n\nimport { findCoursesWidgetClicked } from './track';\nimport messages from './messages';\nimport './index.scss';\n\nexport const arrowIcon = (<Icon className=\"mx-1\" src={ArrowForward} />);\n\nexport const LookingForChallengeWidget = () => {\n const { formatMessage } = useIntl();\n const { courseSearchUrl } = reduxHooks.usePlatformSettingsData();\n const hyperlinkDestination = baseAppUrl(courseSearchUrl) || '';\n\n return (\n <Card orientation=\"horizontal\" id=\"looking-for-challenge-widget\">\n <Card.ImageCap\n src={moreCoursesSVG}\n srcAlt=\"course side widget\"\n />\n <Card.Body className=\"m-auto pr-2\">\n <h4>\n {formatMessage(messages.lookingForChallengePrompt)}\n </h4>\n <h5>\n <Hyperlink\n variant=\"brand\"\n destination={hyperlinkDestination}\n onClick={findCoursesWidgetClicked(hyperlinkDestination)}\n className=\"d-flex align-items-center\"\n >\n {formatMessage(messages.findCoursesButton, { arrow: arrowIcon })}\n </Hyperlink>\n </h5>\n </Card.Body>\n </Card>\n );\n};\n\nLookingForChallengeWidget.propTypes = {};\n\nexport default LookingForChallengeWidget;\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/widgets/LookingForChallengeWidget/index.jsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,cAAc,MAAM,0CAA0C,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,cAAc,CAAC;AAEtB,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAC,IAAI,IAAC,SAAS,EAAC,MAAM,EAAC,GAAG,EAAE,YAAY,GAAI,CAAC,CAAC;AAExE,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,EAAE;;IAC5C,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,wBAAwB,EAAE,CAAC;IACzD,MAAM,eAAe,GAAG,CAAA,MAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,gBAAgB,0CAAE,eAAe,KAAI,EAAE,CAAC;IAC7E,MAAM,oBAAoB,GAAG,UAAU,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;IAE/D,OAAO,CACL,MAAC,IAAI,IAAC,WAAW,EAAC,YAAY,EAAC,EAAE,EAAC,8BAA8B,aAC9D,KAAC,IAAI,CAAC,QAAQ,IACZ,GAAG,EAAE,cAAc,EACnB,MAAM,EAAC,oBAAoB,GAC3B,EACF,MAAC,IAAI,CAAC,IAAI,IAAC,SAAS,EAAC,aAAa,aAChC,uBACG,aAAa,CAAC,QAAQ,CAAC,yBAAyB,CAAC,GAC/C,EACL,uBACE,KAAC,SAAS,IACR,OAAO,EAAC,OAAO,EACf,WAAW,EAAE,oBAAoB,EACjC,OAAO,EAAE,wBAAwB,CAAC,oBAAoB,CAAC,EACvD,SAAS,EAAC,2BAA2B,YAEpC,aAAa,CAAC,QAAQ,CAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,GACtD,GACT,IACK,IACP,CACR,CAAC;AACJ,CAAC,CAAC;AAEF,yBAAyB,CAAC,SAAS,GAAG,EAAE,CAAC;AAEzC,eAAe,yBAAyB,CAAC","sourcesContent":["import { useIntl } from '@openedx/frontend-base';\nimport { Card, Hyperlink, Icon } from '@openedx/paragon';\nimport { ArrowForward } from '@openedx/paragon/icons';\n\nimport { useInitializeLearnerHome } from '@src/data/hooks';\nimport moreCoursesSVG from '../../assets/more-courses-sidewidget.svg';\nimport { baseAppUrl } from '../../data/services/lms/urls';\n\nimport { findCoursesWidgetClicked } from './track';\nimport messages from './messages';\nimport './index.scss';\n\nexport const arrowIcon = (<Icon className=\"mx-1\" src={ArrowForward} />);\n\nexport const LookingForChallengeWidget = () => {\n const { formatMessage } = useIntl();\n const { data: learnerData } = useInitializeLearnerHome();\n const courseSearchUrl = learnerData?.platformSettings?.courseSearchUrl || '';\n const hyperlinkDestination = baseAppUrl(courseSearchUrl) || '';\n\n return (\n <Card orientation=\"horizontal\" id=\"looking-for-challenge-widget\">\n <Card.ImageCap\n src={moreCoursesSVG}\n srcAlt=\"course side widget\"\n />\n <Card.Body className=\"m-auto pr-2\">\n <h4>\n {formatMessage(messages.lookingForChallengePrompt)}\n </h4>\n <h5>\n <Hyperlink\n variant=\"brand\"\n destination={hyperlinkDestination}\n onClick={findCoursesWidgetClicked(hyperlinkDestination)}\n className=\"d-flex align-items-center\"\n >\n {formatMessage(messages.findCoursesButton, { arrow: arrowIcon })}\n </Hyperlink>\n </h5>\n </Card.Body>\n </Card>\n );\n};\n\nLookingForChallengeWidget.propTypes = {};\n\nexport default LookingForChallengeWidget;\n"]}
@@ -1,5 +1,5 @@
1
1
  export const linkNames: any;
2
- export function findCoursesWidgetClicked(href: any): (e: any) => NodeJS.Timeout;
2
+ export function findCoursesWidgetClicked(href: any): (e: any) => number;
3
3
  declare namespace _default {
4
4
  export { linkNames };
5
5
  export { findCoursesWidgetClicked };
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@openedx/frontend-app-learner-dashboard",
3
- "version": "1.0.0-alpha.6",
3
+ "version": "1.0.0-alpha.8",
4
4
  "description": "",
5
5
  "repository": {
6
6
  "type": "git",
7
- "url": "git+https://github.com/edx/frontend-app-learner-dashboard.git"
7
+ "url": "git+https://github.com/openedx/frontend-app-learner-dashboard.git"
8
8
  },
9
9
  "exports": {
10
10
  ".": "./dist/index.js",
@@ -13,6 +13,9 @@
13
13
  "files": [
14
14
  "/dist"
15
15
  ],
16
+ "workspaces": [
17
+ "packages/*"
18
+ ],
16
19
  "browserslist": [
17
20
  "extends @edx/browserslist-config"
18
21
  ],
@@ -20,15 +23,27 @@
20
23
  "*.css",
21
24
  "*.scss"
22
25
  ],
26
+ "atlasTranslations": {
27
+ "path": "translations/frontend-app-learner-dashboard/src/i18n/messages",
28
+ "dependencies": [
29
+ "@openedx/frontend-base"
30
+ ]
31
+ },
23
32
  "scripts": {
24
33
  "build": "make build",
34
+ "build:packages": "make build-packages",
25
35
  "clean": "make clean",
36
+ "clean:packages": "make clean-packages",
26
37
  "dev": "PORT=1996 PUBLIC_PATH=/learner-dashboard openedx dev",
38
+ "dev:site": "make dev-site",
39
+ "dev:packages": "make dev-packages",
27
40
  "i18n_extract": "openedx formatjs extract",
28
41
  "lint": "openedx lint .",
29
42
  "lint:fix": "openedx lint --fix .",
30
- "prepack": "npm run build",
31
- "test": "openedx test --coverage --passWithNoTests"
43
+ "prepack": "npm run clean && npm run build",
44
+ "test": "openedx test --coverage --passWithNoTests",
45
+ "translations:pull": "openedx translations:pull",
46
+ "watch:build": "nodemon --exec 'npm run build'"
32
47
  },
33
48
  "author": "Open edX",
34
49
  "license": "AGPL-3.0",
@@ -46,45 +61,38 @@
46
61
  "@fortawesome/free-brands-svg-icons": "^5.15.4",
47
62
  "@fortawesome/free-solid-svg-icons": "^5.15.4",
48
63
  "@fortawesome/react-fontawesome": "^0.2.0",
49
- "@redux-devtools/extension": "3.3.0",
50
- "@reduxjs/toolkit": "^2.0.0",
51
64
  "classnames": "^2.3.1",
52
- "filesize": "^10.0.0",
53
65
  "font-awesome": "4.7.0",
54
66
  "lodash": "^4.17.21",
55
67
  "moment": "^2.29.4",
56
68
  "prop-types": "15.8.1",
57
- "react-share": "^4.4.0",
58
- "redux-logger": "3.0.6",
59
- "redux-thunk": "2.4.2",
60
- "reselect": "^4.0.0"
69
+ "react-share": "^5.2.2"
61
70
  },
62
71
  "devDependencies": {
63
72
  "@edx/browserslist-config": "^1.5.0",
64
73
  "@testing-library/jest-dom": "^6.6.3",
65
74
  "@testing-library/react": "^16.3.0",
66
75
  "@testing-library/user-event": "^14.6.1",
76
+ "@types/jest": "^29.5.14",
67
77
  "identity-obj-proxy": "^3.0.0",
68
78
  "jest": "^29.7.0",
69
79
  "jest-environment-jsdom": "^29.7.0",
70
80
  "jest-expect-message": "^1.1.3",
71
81
  "jest-when": "^3.6.0",
82
+ "nodemon": "^3.1.14",
72
83
  "react-dev-utils": "^12.0.0",
73
- "react-test-renderer": "^18.3.1",
74
- "redux-mock-store": "^1.5.4",
75
- "tsc-alias": "^1.8.16"
84
+ "tsc-alias": "^1.8.16",
85
+ "turbo": "^2.8.20"
76
86
  },
77
87
  "peerDependencies": {
78
- "@openedx/frontend-base": "^1.0.0-alpha.13",
88
+ "@openedx/frontend-base": "^1.0.0-alpha || 0.0.0-dev",
79
89
  "@openedx/paragon": "^23",
80
90
  "@tanstack/react-query": "^5",
81
91
  "@types/react": "^18",
82
92
  "@types/react-dom": "^18",
83
93
  "react": "^18",
84
94
  "react-dom": "^18",
85
- "react-redux": "^8",
86
95
  "react-router": "^6",
87
- "react-router-dom": "^6",
88
- "redux": "^4"
96
+ "react-router-dom": "^6"
89
97
  }
90
98
  }
@@ -1,3 +0,0 @@
1
- export const state: any;
2
- export function useCourseFilterControlsData({ filters, setSortBy, }: any[]): object;
3
- export default module.useCourseFilterControlsData;
@@ -1,48 +0,0 @@
1
- import React from 'react';
2
- import { useToggle } from '@openedx/paragon';
3
- import { StrictDict } from '../../utils';
4
- import track from '../../tracking';
5
- import { reduxHooks } from '../../hooks';
6
- import * as module from './hooks';
7
- export const state = StrictDict({
8
- target: (val) => React.useState(val), // eslint-disable-line
9
- });
10
- /**
11
- * Sets up a toggle for the modal as well as helper functions for handling changes to the form controls.
12
- *
13
- * @param {array} filters Currently active course filters
14
- * @param {function} setSortBy Set function for sorting the course list
15
- * @returns {object} data and functions for managing the CourseFilterControls component
16
- */
17
- export const useCourseFilterControlsData = ({ filters, setSortBy, }) => {
18
- const [isOpen, toggleOpen, toggleClose] = useToggle(false);
19
- const [target, setTarget] = module.state.target(null);
20
- const addFilter = reduxHooks.useAddFilter();
21
- const removeFilter = reduxHooks.useRemoveFilter();
22
- const handleFilterChange = ({ target: { checked, value } }) => {
23
- const update = checked ? addFilter : removeFilter;
24
- update(value);
25
- };
26
- const handleSortChange = ({ target: { value } }) => {
27
- setSortBy(value);
28
- };
29
- const open = () => {
30
- track.filter.filterClicked();
31
- toggleOpen();
32
- };
33
- const close = () => {
34
- track.filter.filterOptionSelected(filters);
35
- toggleClose();
36
- };
37
- return {
38
- isOpen,
39
- open,
40
- close,
41
- target,
42
- setTarget,
43
- handleFilterChange,
44
- handleSortChange,
45
- };
46
- };
47
- export default useCourseFilterControlsData;
48
- //# sourceMappingURL=hooks.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/containers/CourseFilterControls/hooks.js"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,MAAM,gBAAgB,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,KAAK,MAAM,MAAM,SAAS,CAAC;AAElC,MAAM,CAAC,MAAM,KAAK,GAAG,UAAU,CAAC;IAC9B,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,sBAAsB;CAC7D,CAAC,CAAC;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,EAC1C,OAAO,EACP,SAAS,GACV,EAAE,EAAE;IACH,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAC3D,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAEtD,MAAM,SAAS,GAAG,UAAU,CAAC,YAAY,EAAE,CAAC;IAC5C,MAAM,YAAY,GAAG,UAAU,CAAC,eAAe,EAAE,CAAC;IAElD,MAAM,kBAAkB,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;QAC5D,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC;QAClD,MAAM,CAAC,KAAK,CAAC,CAAC;IAChB,CAAC,CAAC;IACF,MAAM,gBAAgB,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;QACjD,SAAS,CAAC,KAAK,CAAC,CAAC;IACnB,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,GAAG,EAAE;QAChB,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;QAC7B,UAAU,EAAE,CAAC;IACf,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,KAAK,CAAC,MAAM,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC3C,WAAW,EAAE,CAAC;IAChB,CAAC,CAAC;IAEF,OAAO;QACL,MAAM;QACN,IAAI;QACJ,KAAK;QACL,MAAM;QACN,SAAS;QACT,kBAAkB;QAClB,gBAAgB;KACjB,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,2BAA2B,CAAC","sourcesContent":["import React from 'react';\nimport { useToggle } from '@openedx/paragon';\n\nimport { StrictDict } from '../../utils';\nimport track from '../../tracking';\nimport { reduxHooks } from '../../hooks';\n\nimport * as module from './hooks';\n\nexport const state = StrictDict({\n target: (val) => React.useState(val), // eslint-disable-line\n});\n\n/**\n * Sets up a toggle for the modal as well as helper functions for handling changes to the form controls.\n *\n * @param {array} filters Currently active course filters\n * @param {function} setSortBy Set function for sorting the course list\n * @returns {object} data and functions for managing the CourseFilterControls component\n */\nexport const useCourseFilterControlsData = ({\n filters,\n setSortBy,\n}) => {\n const [isOpen, toggleOpen, toggleClose] = useToggle(false);\n const [target, setTarget] = module.state.target(null);\n\n const addFilter = reduxHooks.useAddFilter();\n const removeFilter = reduxHooks.useRemoveFilter();\n\n const handleFilterChange = ({ target: { checked, value } }) => {\n const update = checked ? addFilter : removeFilter;\n update(value);\n };\n const handleSortChange = ({ target: { value } }) => {\n setSortBy(value);\n };\n\n const open = () => {\n track.filter.filterClicked();\n toggleOpen();\n };\n\n const close = () => {\n track.filter.filterOptionSelected(filters);\n toggleClose();\n };\n\n return {\n isOpen,\n open,\n close,\n target,\n setTarget,\n handleFilterChange,\n handleSortChange,\n };\n};\n\nexport default useCourseFilterControlsData;\n"]}
@@ -1,15 +0,0 @@
1
- export const state: any;
2
- export function useCourseListData(): {
3
- pageNumber: unknown;
4
- numPages: any;
5
- setPageNumber: (value: any) => any;
6
- visibleList: any;
7
- filterOptions: {
8
- sortBy: any;
9
- setSortBy: any;
10
- filters: unknown;
11
- handleRemoveFilter: (filter: any) => () => any;
12
- };
13
- showFilters: boolean;
14
- };
15
- export default module.useCourseListData;
@@ -1,45 +0,0 @@
1
- import React from 'react';
2
- import { ListPageSize, SortKeys } from '../../data/constants/app';
3
- import { reduxHooks } from '../../hooks';
4
- import { StrictDict } from '../../utils';
5
- import * as module from './hooks';
6
- export const state = StrictDict({
7
- sortBy: (val) => React.useState(val), // eslint-disable-line
8
- });
9
- /**
10
- * Filters are fetched from the store and used to generate a list of "visible" courses.
11
- * Other values returned and used for the layout of the CoursesPanel component are:
12
- * the current page number, the sorting method, and whether or not to enable filters and pagination.
13
- *
14
- * @returns data for the CoursesPanel component
15
- */
16
- export const useCourseListData = () => {
17
- const filters = reduxHooks.useFilters();
18
- const removeFilter = reduxHooks.useRemoveFilter();
19
- const pageNumber = reduxHooks.usePageNumber();
20
- const setPageNumber = reduxHooks.useSetPageNumber();
21
- const [sortBy, setSortBy] = module.state.sortBy(SortKeys.enrolled);
22
- const querySearch = new URLSearchParams(window.location.search);
23
- const disablePagination = querySearch.get('disable_pagination');
24
- const { numPages, visibleList } = reduxHooks.useCurrentCourseList({
25
- sortBy,
26
- filters,
27
- pageSize: Number(disablePagination) === 1 ? 0 : ListPageSize,
28
- });
29
- const handleRemoveFilter = (filter) => () => removeFilter(filter);
30
- return {
31
- pageNumber,
32
- numPages,
33
- setPageNumber,
34
- visibleList,
35
- filterOptions: {
36
- sortBy,
37
- setSortBy,
38
- filters,
39
- handleRemoveFilter,
40
- },
41
- showFilters: filters.length > 0,
42
- };
43
- };
44
- export default useCourseListData;
45
- //# sourceMappingURL=hooks.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/containers/CoursesPanel/hooks.js"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,KAAK,MAAM,MAAM,SAAS,CAAC;AAElC,MAAM,CAAC,MAAM,KAAK,GAAG,UAAU,CAAC;IAC9B,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,sBAAsB;CAC7D,CAAC,CAAC;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,EAAE;IACpC,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,EAAE,CAAC;IACxC,MAAM,YAAY,GAAG,UAAU,CAAC,eAAe,EAAE,CAAC;IAClD,MAAM,UAAU,GAAG,UAAU,CAAC,aAAa,EAAE,CAAC;IAC9C,MAAM,aAAa,GAAG,UAAU,CAAC,gBAAgB,EAAE,CAAC;IAEpD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAEnE,MAAM,WAAW,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChE,MAAM,iBAAiB,GAAG,WAAW,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAEhE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,UAAU,CAAC,oBAAoB,CAAC;QAChE,MAAM;QACN,OAAO;QACP,QAAQ,EAAE,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY;KAC7D,CAAC,CAAC;IAEH,MAAM,kBAAkB,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAElE,OAAO;QACL,UAAU;QACV,QAAQ;QACR,aAAa;QACb,WAAW;QACX,aAAa,EAAE;YACb,MAAM;YACN,SAAS;YACT,OAAO;YACP,kBAAkB;SACnB;QACD,WAAW,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC;KAChC,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,iBAAiB,CAAC","sourcesContent":["import React from 'react';\n\nimport { ListPageSize, SortKeys } from '../../data/constants/app';\nimport { reduxHooks } from '../../hooks';\nimport { StrictDict } from '../../utils';\n\nimport * as module from './hooks';\n\nexport const state = StrictDict({\n sortBy: (val) => React.useState(val), // eslint-disable-line\n});\n\n/**\n * Filters are fetched from the store and used to generate a list of \"visible\" courses.\n * Other values returned and used for the layout of the CoursesPanel component are:\n * the current page number, the sorting method, and whether or not to enable filters and pagination.\n *\n * @returns data for the CoursesPanel component\n */\nexport const useCourseListData = () => {\n const filters = reduxHooks.useFilters();\n const removeFilter = reduxHooks.useRemoveFilter();\n const pageNumber = reduxHooks.usePageNumber();\n const setPageNumber = reduxHooks.useSetPageNumber();\n\n const [sortBy, setSortBy] = module.state.sortBy(SortKeys.enrolled);\n\n const querySearch = new URLSearchParams(window.location.search);\n const disablePagination = querySearch.get('disable_pagination');\n\n const { numPages, visibleList } = reduxHooks.useCurrentCourseList({\n sortBy,\n filters,\n pageSize: Number(disablePagination) === 1 ? 0 : ListPageSize,\n });\n\n const handleRemoveFilter = (filter) => () => removeFilter(filter);\n\n return {\n pageNumber,\n numPages,\n setPageNumber,\n visibleList,\n filterOptions: {\n sortBy,\n setSortBy,\n filters,\n handleRemoveFilter,\n },\n showFilters: filters.length > 0,\n };\n};\n\nexport default useCourseListData;\n"]}
@@ -1,7 +0,0 @@
1
- export function useProgramData({ cardId, }: {
2
- cardId: any;
3
- }): {
4
- courseTitle: any;
5
- relatedPrograms: any;
6
- };
7
- export default useProgramData;
@@ -1,7 +0,0 @@
1
- import { reduxHooks } from 'hooks';
2
- export const useProgramData = ({ cardId, }) => ({
3
- courseTitle: reduxHooks.useCardCourseData(cardId).title,
4
- relatedPrograms: reduxHooks.useCardRelatedProgramsData(cardId).list,
5
- });
6
- export default useProgramData;
7
- //# sourceMappingURL=hooks.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/containers/RelatedProgramsModal/hooks.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAEnC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAC7B,MAAM,GACP,EAAE,EAAE,CAAC,CAAC;IACL,WAAW,EAAE,UAAU,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,KAAK;IACvD,eAAe,EAAE,UAAU,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC,IAAI;CACpE,CAAC,CAAC;AAEH,eAAe,cAAc,CAAC","sourcesContent":["import { reduxHooks } from 'hooks';\n\nexport const useProgramData = ({\n cardId,\n}) => ({\n courseTitle: reduxHooks.useCardCourseData(cardId).title,\n relatedPrograms: reduxHooks.useCardRelatedProgramsData(cardId).list,\n});\n\nexport default useProgramData;\n"]}
@@ -1,13 +0,0 @@
1
- export default MasqueradeUserContext;
2
- declare const MasqueradeUserContext: import("react").Context<{
3
- masqueradeUser: undefined;
4
- masqueradeIsSuccess: undefined;
5
- masqueradeIsPending: undefined;
6
- masqueradeIsError: undefined;
7
- masqueradeError: undefined;
8
- setMasqueradeUser: undefined;
9
- setMasqueradeIsSuccess: undefined;
10
- setMasqueradeIsPending: undefined;
11
- setMasqueradeIsError: undefined;
12
- setMasqueradeError: undefined;
13
- }>;