richie-education 2.24.0 → 2.25.0-b2.dev101

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 (492) hide show
  1. package/.eslintignore +2 -0
  2. package/.nvmrc +1 -1
  3. package/.prettierignore +2 -0
  4. package/.storybook/preview-body.html +1 -1
  5. package/.storybook/preview.tsx +5 -2
  6. package/cunningham.cjs +52 -43
  7. package/i18n/locales/ar-SA.json +500 -100
  8. package/i18n/locales/es-ES.json +500 -100
  9. package/i18n/locales/fa-IR.json +500 -100
  10. package/i18n/locales/fr-CA.json +564 -164
  11. package/i18n/locales/fr-FR.json +517 -117
  12. package/i18n/locales/ko-KR.json +500 -100
  13. package/i18n/locales/pt-PT.json +526 -126
  14. package/i18n/locales/ru-RU.json +500 -100
  15. package/i18n/locales/vi-VN.json +1734 -0
  16. package/jest/setup.ts +11 -1
  17. package/js/api/enrollment.ts +1 -1
  18. package/js/api/joanie.spec.ts +63 -2
  19. package/js/api/joanie.ts +218 -141
  20. package/js/api/lms/dummy.spec.ts +9 -1
  21. package/js/api/lms/dummy.ts +63 -10
  22. package/js/api/lms/joanie.spec.ts +49 -31
  23. package/js/api/lms/joanie.ts +53 -35
  24. package/js/api/lms/openedx-hawthorn.spec.ts +27 -11
  25. package/js/api/lms/openedx-hawthorn.ts +7 -6
  26. package/js/components/AddressesManagement/AddressForm/index.spec.tsx +157 -0
  27. package/js/components/AddressesManagement/AddressForm/index.stories.tsx +36 -0
  28. package/js/components/AddressesManagement/AddressForm/index.tsx +163 -0
  29. package/js/components/AddressesManagement/{validationSchema.ts → AddressForm/validationSchema.ts} +1 -23
  30. package/js/components/AddressesManagement/_styles.scss +1 -1
  31. package/js/components/AddressesManagement/index.spec.tsx +171 -202
  32. package/js/components/AddressesManagement/index.stories.tsx +29 -0
  33. package/js/components/AddressesManagement/index.tsx +11 -3
  34. package/js/components/Badge/index.spec.tsx +17 -0
  35. package/js/components/Badge/index.stories.tsx +22 -0
  36. package/js/components/Badge/index.tsx +18 -0
  37. package/js/components/Banner/index.tsx +6 -1
  38. package/js/components/ContractFrame/AbstractContractFrame.spec.tsx +332 -0
  39. package/js/components/ContractFrame/AbstractContractFrame.tsx +289 -0
  40. package/js/components/ContractFrame/LearnerContractFrame.spec.tsx +125 -0
  41. package/js/components/ContractFrame/LearnerContractFrame.tsx +42 -0
  42. package/js/components/ContractFrame/OrganizationContractFrame.spec.tsx +167 -0
  43. package/js/components/ContractFrame/OrganizationContractFrame.tsx +70 -0
  44. package/js/components/ContractFrame/_styles.scss +62 -0
  45. package/js/components/ContractFrame/iframe-manager.js +158 -0
  46. package/js/components/ContractFrame/index.ts +5 -0
  47. package/js/components/ContractStatus/index.spec.tsx +120 -0
  48. package/js/components/ContractStatus/index.tsx +67 -0
  49. package/js/components/CourseGlimpse/CourseGlimpseFooter.tsx +7 -7
  50. package/js/components/CourseGlimpse/index.tsx +5 -1
  51. package/js/components/CourseGlimpse/utils.ts +24 -16
  52. package/js/components/CourseGlimpseList/index.spec.tsx +1 -1
  53. package/js/components/CourseGlimpseList/index.tsx +1 -1
  54. package/js/components/CourseGlimpseList/utils.ts +3 -2
  55. package/js/components/DjangoCMSTemplate/index.spec.tsx +2 -2
  56. package/js/components/DownloadCertificateButton/index.tsx +58 -0
  57. package/js/components/DownloadContractButton/index.spec.tsx +155 -0
  58. package/js/components/DownloadContractButton/index.tsx +48 -0
  59. package/js/components/Form/CountrySelectField.tsx +28 -16
  60. package/js/components/Form/Input/index.spec.tsx +76 -0
  61. package/js/components/Form/Input/index.tsx +47 -0
  62. package/js/components/Form/Select/index.spec.tsx +99 -0
  63. package/js/components/Form/Select/index.tsx +43 -0
  64. package/js/components/{AddressesManagement → Form}/ValidationErrors.ts +10 -5
  65. package/js/components/Form/index.ts +5 -1
  66. package/js/components/Form/messages.ts +14 -0
  67. package/js/components/Form/test-utils.ts +19 -0
  68. package/js/components/Form/utils.spec.ts +72 -0
  69. package/js/components/Form/utils.ts +37 -0
  70. package/js/components/Icon/index.stories.tsx +2 -1
  71. package/js/components/Modal/_styles.scss +0 -8
  72. package/js/components/Modal/index.spec.tsx +0 -6
  73. package/js/components/Modal/index.tsx +23 -17
  74. package/js/components/PaymentButton/_styles.scss +26 -0
  75. package/js/{widgets/CourseProductItem → components/PaymentButton}/components/PaymentInterfaces/Dummy.tsx +1 -1
  76. package/js/{widgets/CourseProductItem → components/PaymentButton}/components/PaymentInterfaces/PayplugLightbox.tsx +30 -7
  77. package/js/{widgets/CourseProductItem → components/PaymentButton}/components/PaymentInterfaces/__mocks__/index.tsx +1 -1
  78. package/js/{widgets/CourseProductItem → components/PaymentButton}/components/PaymentInterfaces/index.spec.tsx +5 -3
  79. package/js/{widgets/CourseProductItem → components/PaymentButton}/components/PaymentInterfaces/index.tsx +7 -5
  80. package/js/components/PaymentButton/hooks/useTerms.tsx +74 -0
  81. package/js/components/PaymentButton/index.spec.tsx +1038 -0
  82. package/js/{widgets/CourseProductItem/components → components}/PaymentButton/index.tsx +94 -41
  83. package/js/components/PurchaseButton/index.spec.tsx +377 -0
  84. package/js/components/PurchaseButton/index.stories.tsx +15 -0
  85. package/js/{widgets/CourseProductItem/components → components}/PurchaseButton/index.tsx +72 -23
  86. package/js/components/PurchaseButton/styles.scss +7 -0
  87. package/js/components/RegisteredAddress/_styles.scss +1 -3
  88. package/js/components/RegisteredAddress/index.spec.tsx +1 -1
  89. package/js/components/RegisteredAddress/index.stories.tsx +40 -0
  90. package/js/components/RegisteredAddress/index.tsx +17 -19
  91. package/js/components/SaleTunnel/_styles.scss +11 -0
  92. package/js/{widgets/CourseProductItem → components/SaleTunnel}/components/RegisteredCreditCard/index.tsx +4 -10
  93. package/js/{widgets/CourseProductItem → components/SaleTunnel}/components/SaleTunnelStepPayment/_styles.scss +7 -0
  94. package/js/{widgets/CourseProductItem → components/SaleTunnel}/components/SaleTunnelStepPayment/index.spec.tsx +85 -61
  95. package/js/{widgets/CourseProductItem → components/SaleTunnel}/components/SaleTunnelStepPayment/index.tsx +55 -57
  96. package/js/components/SaleTunnel/components/SaleTunnelStepResume/_styles.scss +63 -0
  97. package/js/components/SaleTunnel/components/SaleTunnelStepResume/index.spec.tsx +80 -0
  98. package/js/components/SaleTunnel/components/SaleTunnelStepResume/index.tsx +88 -0
  99. package/js/{widgets/CourseProductItem → components/SaleTunnel}/components/SaleTunnelStepValidation/CourseRunsList.tsx +6 -2
  100. package/js/{widgets/CourseProductItem → components/SaleTunnel}/components/SaleTunnelStepValidation/_styles.scss +5 -0
  101. package/js/components/SaleTunnel/components/SaleTunnelStepValidation/index.spec.tsx +170 -0
  102. package/js/{widgets/CourseProductItem → components/SaleTunnel}/components/SaleTunnelStepValidation/index.tsx +41 -10
  103. package/js/{widgets/CourseProductItem → components/SaleTunnel}/components/StepBreadcrumb/index.spec.tsx +1 -1
  104. package/js/{widgets/CourseProductItem → components/SaleTunnel}/components/StepBreadcrumb/index.tsx +1 -1
  105. package/js/components/SaleTunnel/context.tsx +44 -0
  106. package/js/{widgets/CourseProductItem/components → components}/SaleTunnel/index.spec.tsx +27 -22
  107. package/js/{widgets/CourseProductItem/components → components}/SaleTunnel/index.tsx +96 -24
  108. package/js/components/SignContractButton/index.omniscientOrders.spec.tsx +135 -0
  109. package/js/components/SignContractButton/index.spec.tsx +213 -0
  110. package/js/components/SignContractButton/index.tsx +97 -0
  111. package/js/components/SuccessIcon/_styles.scss +66 -0
  112. package/js/components/SuccessIcon/index.tsx +10 -0
  113. package/js/components/TeacherDashboardCourseList/_styles.scss +0 -1
  114. package/js/components/TeacherDashboardCourseList/index.spec.tsx +9 -9
  115. package/js/components/TeacherDashboardCourseList/index.tsx +25 -31
  116. package/js/contexts/JoanieApiContext/index.spec.tsx +1 -1
  117. package/js/contexts/SessionContext/BaseSessionProvider.tsx +12 -22
  118. package/js/contexts/SessionContext/JoanieSessionProvider.spec.tsx +14 -0
  119. package/js/contexts/SessionContext/JoanieSessionProvider.tsx +33 -34
  120. package/js/contexts/SessionContext/index.spec.tsx +6 -7
  121. package/js/hooks/useBreadcrumbsPlaceholders.tsx +1 -1
  122. package/js/hooks/useContractAbilities/index.spec.ts +27 -0
  123. package/js/hooks/useContractAbilities/index.ts +8 -0
  124. package/js/hooks/useContractArchive/index.download.spec.tsx +126 -0
  125. package/js/hooks/useContractArchive/index.spec.tsx +91 -0
  126. package/js/hooks/useContractArchive/index.ts +64 -0
  127. package/js/hooks/useContracts/index.tsx +68 -0
  128. package/js/hooks/useCourseProductRelation/index.ts +8 -5
  129. package/js/hooks/useCourseProductUnion/index.spec.tsx +14 -10
  130. package/js/hooks/useCourseProductUnion/index.ts +6 -2
  131. package/js/hooks/useCourseProducts.ts +45 -0
  132. package/js/hooks/useCourseSearchParams/computeNewFilterValue.ts +3 -3
  133. package/js/hooks/useCourses/index.spec.tsx +2 -2
  134. package/js/hooks/useCourses/index.ts +4 -4
  135. package/js/hooks/useCreditCards/index.spec.tsx +4 -4
  136. package/js/hooks/useDashboardAddressForm.tsx +85 -87
  137. package/js/hooks/useDownloadCertificate/index.spec.tsx +19 -6
  138. package/js/hooks/useDownloadCertificate/index.tsx +2 -20
  139. package/js/hooks/useEnrollments.ts +1 -1
  140. package/js/hooks/useJoanieUserAbilities/index.not.isJoanieEnabled.spec.tsx +17 -0
  141. package/js/hooks/useJoanieUserAbilities/index.spec.tsx +68 -0
  142. package/js/hooks/useJoanieUserAbilities/index.tsx +11 -0
  143. package/js/hooks/useJoanieUserProfile.tsx +34 -0
  144. package/js/hooks/useOrders.ts +69 -26
  145. package/js/hooks/useOrganizations/index.ts +1 -1
  146. package/js/hooks/useProductOrder/index.spec.tsx +113 -0
  147. package/js/hooks/useProductOrder/index.tsx +33 -0
  148. package/js/hooks/useQueryKeyInvalidateListener.tsx +16 -0
  149. package/js/hooks/useResources/index.spec.tsx +30 -29
  150. package/js/hooks/useResources/index.tsx +11 -4
  151. package/js/hooks/useResources/useResourcesOmniscient.ts +2 -2
  152. package/js/hooks/useResources/useResourcesRoot.ts +21 -17
  153. package/js/hooks/useTeacherPendingContractsCount/index.ts +34 -0
  154. package/js/hooks/useUnionResource/index.spec.tsx +5 -2
  155. package/js/hooks/useUnionResource/index.ts +20 -3
  156. package/js/hooks/useUnionResource/utils/fetchEntity.ts +5 -4
  157. package/js/index.tsx +2 -2
  158. package/js/pages/DashboardAddressesManagement/DashboardAddressBox.tsx +1 -1
  159. package/js/pages/DashboardAddressesManagement/DashboardCreateAddress.spec.tsx +79 -72
  160. package/js/pages/DashboardAddressesManagement/DashboardCreateAddress.tsx +4 -4
  161. package/js/pages/DashboardAddressesManagement/DashboardEditAddress.spec.tsx +32 -23
  162. package/js/pages/DashboardAddressesManagement/DashboardEditAddress.tsx +6 -6
  163. package/js/pages/DashboardAddressesManagement/DashboardEditAddressLoader.tsx +2 -2
  164. package/js/pages/DashboardAddressesManagement/index.spec.tsx +4 -3
  165. package/js/pages/DashboardAddressesManagement/index.tsx +5 -5
  166. package/js/pages/DashboardCertificates/index.spec.tsx +3 -2
  167. package/js/pages/DashboardCertificates/index.tsx +2 -1
  168. package/js/pages/DashboardContracts/_styles.scss +8 -0
  169. package/js/pages/DashboardContracts/index.spec.tsx +147 -0
  170. package/js/pages/DashboardContracts/index.tsx +76 -0
  171. package/js/pages/DashboardCourses/index.spec.tsx +81 -61
  172. package/js/pages/DashboardCourses/index.tsx +15 -12
  173. package/js/pages/DashboardCourses/useOrdersEnrollments.tsx +34 -8
  174. package/js/pages/DashboardCreditCardsManagement/DashboardCreditCardBox.tsx +1 -1
  175. package/js/pages/DashboardCreditCardsManagement/DashboardEditCreditCard.spec.tsx +7 -6
  176. package/js/pages/DashboardCreditCardsManagement/DashboardEditCreditCard.tsx +43 -45
  177. package/js/pages/DashboardCreditCardsManagement/DashboardEditCreditCardLoader.tsx +2 -2
  178. package/js/pages/DashboardCreditCardsManagement/index.spec.tsx +13 -12
  179. package/js/pages/DashboardCreditCardsManagement/index.tsx +3 -3
  180. package/js/pages/DashboardOrderLayout/_styles.scss +5 -0
  181. package/js/pages/DashboardOrderLayout/index.spec.tsx +8 -8
  182. package/js/pages/DashboardOrderLayout/index.tsx +11 -6
  183. package/js/pages/TeacherDashboardContractsLayout/TeacherDashboardContracts/index.spec.tsx +358 -0
  184. package/js/pages/TeacherDashboardContractsLayout/TeacherDashboardContracts/index.tsx +129 -0
  185. package/js/pages/TeacherDashboardContractsLayout/TeacherDashboardCourseContractsLayout/index.tsx +26 -0
  186. package/js/pages/TeacherDashboardContractsLayout/TeacherDashboardOrganizationContractsLayout/index.tsx +26 -0
  187. package/js/pages/TeacherDashboardContractsLayout/components/BulkDownloadContractButton/index.spec.tsx +136 -0
  188. package/js/pages/TeacherDashboardContractsLayout/components/BulkDownloadContractButton/index.timer.spec.tsx +144 -0
  189. package/js/pages/TeacherDashboardContractsLayout/components/BulkDownloadContractButton/index.tsx +73 -0
  190. package/js/pages/TeacherDashboardContractsLayout/components/ContractActionsBar/index.spec.tsx +185 -0
  191. package/js/pages/TeacherDashboardContractsLayout/components/ContractActionsBar/index.tsx +47 -0
  192. package/js/pages/TeacherDashboardContractsLayout/components/ContractFiltersBar/index.spec.tsx +179 -0
  193. package/js/pages/TeacherDashboardContractsLayout/components/ContractFiltersBar/index.tsx +86 -0
  194. package/js/pages/TeacherDashboardContractsLayout/components/SignOrganizationContractButton/index.spec.tsx +109 -0
  195. package/js/pages/TeacherDashboardContractsLayout/components/SignOrganizationContractButton/index.tsx +60 -0
  196. package/js/pages/TeacherDashboardContractsLayout/hooks/useCheckContractArchiveExists/index.spec.tsx +124 -0
  197. package/js/pages/TeacherDashboardContractsLayout/hooks/useCheckContractArchiveExists/index.tsx +73 -0
  198. package/js/pages/TeacherDashboardContractsLayout/hooks/useDefaultOrganizationId/index.spec.tsx +134 -0
  199. package/js/pages/TeacherDashboardContractsLayout/hooks/useDefaultOrganizationId/index.tsx +28 -0
  200. package/js/pages/TeacherDashboardContractsLayout/hooks/useDownloadContractArchive/contractArchiveLocalStorage.spec.ts +85 -0
  201. package/js/pages/TeacherDashboardContractsLayout/hooks/useDownloadContractArchive/contractArchiveLocalStorage.ts +50 -0
  202. package/js/pages/TeacherDashboardContractsLayout/hooks/useDownloadContractArchive/index.spec.tsx +266 -0
  203. package/js/pages/TeacherDashboardContractsLayout/hooks/useDownloadContractArchive/index.tsx +153 -0
  204. package/js/pages/TeacherDashboardContractsLayout/hooks/useHasContractToDownload/index.spec.tsx +100 -0
  205. package/js/pages/TeacherDashboardContractsLayout/hooks/useHasContractToDownload/index.tsx +27 -0
  206. package/js/pages/TeacherDashboardContractsLayout/hooks/useTeacherContractFilters/index.spec.tsx +193 -0
  207. package/js/pages/TeacherDashboardContractsLayout/hooks/useTeacherContractFilters/index.tsx +44 -0
  208. package/js/pages/TeacherDashboardContractsLayout/hooks/useTeacherContractsToSign.tsx +32 -0
  209. package/js/pages/TeacherDashboardContractsLayout/index.ts +2 -0
  210. package/js/pages/TeacherDashboardContractsLayout/styles.scss +15 -0
  211. package/js/pages/{TeacherCourseDashboardLoader → TeacherDashboardCourseLoader}/CourseRunList/CourseRunListCell/index.spec.tsx +1 -1
  212. package/js/pages/{TeacherCourseDashboardLoader → TeacherDashboardCourseLoader}/CourseRunList/_styles.scss +1 -2
  213. package/js/pages/{TeacherCourseDashboardLoader → TeacherDashboardCourseLoader}/CourseRunList/index.spec.tsx +2 -2
  214. package/js/pages/{TeacherCourseDashboardLoader → TeacherDashboardCourseLoader}/CourseRunList/utils.spec.tsx +1 -1
  215. package/js/pages/{TeacherCourseDashboardLoader → TeacherDashboardCourseLoader}/CourseRunList/utils.tsx +11 -10
  216. package/js/pages/{TeacherCourseDashboardLoader → TeacherDashboardCourseLoader}/index.tsx +9 -8
  217. package/js/pages/{TeacherCoursesDashboardLoader → TeacherDashboardCoursesLoader}/index.spec.tsx +17 -17
  218. package/js/pages/{TeacherCoursesDashboardLoader → TeacherDashboardCoursesLoader}/index.tsx +7 -7
  219. package/js/pages/{TeacherOrganizationCourseDashboardLoader → TeacherDashboardOrganizationCourseLoader}/index.tsx +5 -5
  220. package/js/pages/{TeacherTrainingDashboard/TeacherTrainingDashboardLoader.tsx → TeacherDashboardTraining/TeacherDashboardTrainingLoader.tsx} +10 -9
  221. package/js/pages/{TeacherTrainingDashboard → TeacherDashboardTraining}/index.spec.tsx +76 -6
  222. package/js/pages/{TeacherTrainingDashboard → TeacherDashboardTraining}/index.tsx +6 -6
  223. package/js/settings.dev.dist.ts +3 -0
  224. package/js/settings.ts +29 -1
  225. package/js/translations/ar-SA.json +1 -1
  226. package/js/translations/es-ES.json +1 -1
  227. package/js/translations/fa-IR.json +1 -1
  228. package/js/translations/fr-CA.json +1 -1
  229. package/js/translations/fr-FR.json +1 -1
  230. package/js/translations/ko-KR.json +1 -1
  231. package/js/translations/pt-PT.json +1 -1
  232. package/js/translations/ru-RU.json +1 -1
  233. package/js/translations/vi-VN.json +1 -0
  234. package/js/types/Joanie.ts +263 -80
  235. package/js/types/Suggestion.ts +2 -2
  236. package/js/types/User.ts +19 -1
  237. package/js/types/commonDataProps.ts +3 -0
  238. package/js/types/index.ts +1 -1
  239. package/js/utils/AbilitiesHelper/contractAbilities.spec.ts +35 -0
  240. package/js/utils/AbilitiesHelper/contractAbilities.ts +14 -0
  241. package/js/utils/AbilitiesHelper/index.ts +71 -0
  242. package/js/utils/AbilitiesHelper/joanieUserProfileAbilities.spec.ts +55 -0
  243. package/js/utils/AbilitiesHelper/joanieUserProfileAbilities.ts +16 -0
  244. package/js/utils/AbilitiesHelper/types.ts +36 -0
  245. package/js/utils/ContractHelper/index.spec.ts +73 -0
  246. package/js/utils/ContractHelper/index.ts +72 -0
  247. package/js/utils/CourseRuns/index.spec.tsx +20 -1
  248. package/js/utils/CourseRuns/index.ts +14 -2
  249. package/js/utils/CoursesHelper/index.spec.ts +45 -55
  250. package/js/utils/CoursesHelper/index.ts +6 -7
  251. package/js/utils/CreditCardHelper/index.spec.tsx +26 -22
  252. package/js/utils/CreditCardHelper/index.tsx +19 -6
  253. package/js/utils/ObjectHelper/index.spec.ts +18 -10
  254. package/js/utils/ObjectHelper/index.ts +9 -0
  255. package/js/utils/OrderHelper/index.ts +32 -0
  256. package/js/utils/ProductHelper/index.ts +5 -1
  257. package/js/utils/StringHelper/index.spec.tsx +11 -0
  258. package/js/utils/StringHelper/index.ts +8 -0
  259. package/js/utils/UserHelper/index.spec.ts +18 -0
  260. package/js/utils/UserHelper/index.ts +8 -0
  261. package/js/utils/download.ts +43 -0
  262. package/js/utils/errors/HttpError.ts +10 -0
  263. package/js/utils/indirection/window.ts +1 -1
  264. package/js/utils/react-query/createQueryClient.ts +12 -21
  265. package/js/utils/react-query/useLocalizedQueryKey.ts +1 -1
  266. package/js/utils/react-query/useSessionMutation/index.spec.tsx +8 -8
  267. package/js/utils/react-query/useSessionMutation/index.ts +6 -11
  268. package/js/utils/react-query/useSessionQuery/index.spec.tsx +36 -8
  269. package/js/utils/react-query/useSessionQuery/index.ts +14 -21
  270. package/js/utils/search/getSuggestionsSection/index.spec.ts +4 -3
  271. package/js/utils/search/getSuggestionsSection/index.ts +4 -1
  272. package/js/utils/search/index.tsx +8 -3
  273. package/js/utils/test/createTestQueryClient.ts +7 -7
  274. package/js/utils/test/expectBanner.ts +16 -3
  275. package/js/utils/test/factories/factories.ts +4 -4
  276. package/js/utils/test/factories/joanie.spec.ts +7 -0
  277. package/js/utils/test/factories/joanie.ts +214 -63
  278. package/js/utils/test/factories/reactQuery.ts +1 -1
  279. package/js/utils/test/factories/richie.ts +4 -2
  280. package/js/utils/test/mockCourseProductWithOrder.ts +28 -0
  281. package/js/utils/test/mockPaginatedResponse.ts +1 -1
  282. package/js/utils/test/render.tsx +72 -0
  283. package/js/utils/test/wrappers/IntlWrapper.tsx +23 -0
  284. package/js/utils/test/wrappers/JoanieAppWrapper.tsx +42 -0
  285. package/js/utils/test/wrappers/PresentationalAppWrapper.tsx +18 -0
  286. package/js/utils/test/wrappers/ReactQueryWrapper.tsx +16 -0
  287. package/js/utils/test/wrappers/RouterWrapper.tsx +29 -0
  288. package/js/utils/test/wrappers/types.ts +26 -0
  289. package/js/widgets/Dashboard/components/DashboardAvatar/_styles.scss +17 -5
  290. package/js/widgets/Dashboard/components/DashboardAvatar/index.spec.tsx +9 -2
  291. package/js/widgets/Dashboard/components/DashboardAvatar/index.tsx +16 -5
  292. package/js/widgets/Dashboard/components/DashboardBox/index.stories.tsx +1 -1
  293. package/js/widgets/Dashboard/components/DashboardBreadcrumbs/_styles.scss +1 -0
  294. package/js/widgets/Dashboard/components/DashboardBreadcrumbs/index.tsx +7 -4
  295. package/js/widgets/Dashboard/components/DashboardCard/index.spec.tsx +1 -1
  296. package/js/widgets/Dashboard/components/DashboardCard/index.stories.tsx +3 -3
  297. package/js/widgets/Dashboard/components/DashboardCard/index.tsx +2 -2
  298. package/js/widgets/Dashboard/components/DashboardItem/Certificate/index.spec.tsx +49 -9
  299. package/js/widgets/Dashboard/components/DashboardItem/Certificate/index.tsx +27 -73
  300. package/js/widgets/Dashboard/components/DashboardItem/CertificateStatus/index.spec.tsx +65 -0
  301. package/js/widgets/Dashboard/components/DashboardItem/CertificateStatus/index.tsx +59 -0
  302. package/js/widgets/Dashboard/components/DashboardItem/Contract/_styles.scss +29 -0
  303. package/js/widgets/Dashboard/components/DashboardItem/Contract/index.spec.tsx +197 -0
  304. package/js/widgets/Dashboard/components/DashboardItem/Contract/index.stories.tsx +34 -0
  305. package/js/widgets/Dashboard/components/DashboardItem/Contract/index.tsx +53 -0
  306. package/js/widgets/Dashboard/components/DashboardItem/CourseEnrolling/hooks/useCourseRunPeriodMessage.ts +76 -0
  307. package/js/widgets/Dashboard/components/DashboardItem/CourseEnrolling/index.spec.tsx +158 -0
  308. package/js/widgets/Dashboard/components/DashboardItem/{DashboardItemCourseEnrolling.stories.tsx → CourseEnrolling/index.stories.tsx} +6 -6
  309. package/js/widgets/Dashboard/components/DashboardItem/{DashboardItemCourseEnrolling.tsx → CourseEnrolling/index.tsx} +141 -84
  310. package/js/widgets/Dashboard/components/DashboardItem/Enrollment/DashboardItemEnrollment.spec.tsx +40 -37
  311. package/js/widgets/Dashboard/components/DashboardItem/Enrollment/DashboardItemEnrollment.tsx +29 -11
  312. package/js/widgets/Dashboard/components/DashboardItem/Enrollment/ProductCertificateFooter/index.spec.tsx +248 -0
  313. package/js/widgets/Dashboard/components/DashboardItem/Enrollment/ProductCertificateFooter/index.tsx +89 -0
  314. package/js/widgets/Dashboard/components/DashboardItem/Order/DashboardItemOrder.spec.tsx +188 -117
  315. package/js/widgets/Dashboard/components/DashboardItem/Order/DashboardItemOrder.tsx +124 -78
  316. package/js/widgets/Dashboard/components/DashboardItem/Order/DashboardItemOrderContract.spec.tsx +299 -0
  317. package/js/widgets/Dashboard/components/DashboardItem/Order/DashboardItemOrderContract.useUnionResource.cache.spec.tsx +286 -0
  318. package/js/widgets/Dashboard/components/DashboardItem/Order/DashboardItemOrderReadonly.stories.tsx +9 -5
  319. package/js/widgets/Dashboard/components/DashboardItem/Order/DashboardItemOrderWritable.stories.tsx +10 -6
  320. package/js/widgets/Dashboard/components/DashboardItem/Order/OrderStateMessage/index.spec.tsx +121 -0
  321. package/js/widgets/Dashboard/components/DashboardItem/Order/OrderStateMessage/index.tsx +98 -0
  322. package/js/widgets/Dashboard/components/DashboardItem/Order/_styles.scss +43 -0
  323. package/js/widgets/Dashboard/components/DashboardItem/_styles.scss +34 -37
  324. package/js/widgets/Dashboard/components/DashboardItem/index.spec.tsx +74 -4
  325. package/js/widgets/Dashboard/components/DashboardItem/index.stories.tsx +18 -0
  326. package/js/widgets/Dashboard/components/DashboardItem/index.tsx +91 -26
  327. package/js/widgets/Dashboard/components/DashboardItem/stories.mock.ts +4 -8
  328. package/js/widgets/Dashboard/components/DashboardLayout/_styles.scss +14 -5
  329. package/js/widgets/Dashboard/components/DashboardLayout/index.tsx +10 -3
  330. package/js/widgets/Dashboard/components/DashboardListAvatar/_styles.scss +8 -0
  331. package/js/widgets/Dashboard/components/DashboardListAvatar/index.tsx +11 -0
  332. package/js/widgets/Dashboard/components/DashboardOrderLoader/_styles.scss +5 -0
  333. package/js/widgets/Dashboard/components/DashboardOrderLoader/index.tsx +50 -14
  334. package/js/widgets/Dashboard/components/DashboardSidebar/_styles.scss +37 -24
  335. package/js/widgets/Dashboard/components/DashboardSidebar/components/ContractNavLink/index.spec.tsx +244 -0
  336. package/js/widgets/Dashboard/components/DashboardSidebar/components/ContractNavLink/index.tsx +49 -0
  337. package/js/widgets/Dashboard/components/DashboardSidebar/components/MenuNavLink/index.spec.tsx +40 -0
  338. package/js/widgets/Dashboard/components/DashboardSidebar/components/MenuNavLink/index.tsx +28 -0
  339. package/js/widgets/Dashboard/components/DashboardSidebar/components/NavigationSelect.tsx +58 -0
  340. package/js/widgets/Dashboard/components/DashboardSidebar/index.stories.tsx +11 -1
  341. package/js/widgets/Dashboard/components/DashboardSidebar/index.tsx +18 -69
  342. package/js/widgets/Dashboard/components/DashboardSidebar/utils.ts +6 -0
  343. package/js/widgets/Dashboard/components/FilterOrganization/index.tsx +58 -0
  344. package/js/widgets/Dashboard/components/FiltersBar/index.tsx +9 -0
  345. package/js/widgets/Dashboard/components/LearnerDashboardSidebar/index.tsx +4 -2
  346. package/js/widgets/Dashboard/components/NavigateWithParams/index.spec.tsx +31 -40
  347. package/js/widgets/Dashboard/components/RouterButton/index.tsx +2 -1
  348. package/js/widgets/Dashboard/components/Signature/DummyContractPlaceholder.tsx +25 -0
  349. package/js/widgets/Dashboard/components/Signature/SignatureDummy.tsx +58 -0
  350. package/js/widgets/Dashboard/components/Signature/SignatureLexPersona.tsx +72 -0
  351. package/js/widgets/Dashboard/components/TeacherDashboardCourseSidebar/index.spec.tsx +215 -0
  352. package/js/widgets/Dashboard/components/{TeacherCourseDashboardSidebar → TeacherDashboardCourseSidebar}/index.tsx +75 -31
  353. package/js/widgets/Dashboard/components/TeacherDashboardCourseSidebar/utils.ts +23 -0
  354. package/js/widgets/Dashboard/components/TeacherDashboardOrganizationSidebar/index.spec.tsx +154 -0
  355. package/js/widgets/Dashboard/components/TeacherDashboardOrganizationSidebar/index.stories.tsx +42 -0
  356. package/js/widgets/Dashboard/components/{TeacherOrganizationDashboardSidebar → TeacherDashboardOrganizationSidebar}/index.tsx +40 -29
  357. package/js/widgets/Dashboard/components/{TeacherProfileDashboardSidebar → TeacherDashboardProfileSidebar}/components/OrganizationLinks/_styles.scss +27 -10
  358. package/js/widgets/Dashboard/components/TeacherDashboardProfileSidebar/components/OrganizationLinks/index.spec.tsx +49 -0
  359. package/js/widgets/Dashboard/components/{TeacherProfileDashboardSidebar → TeacherDashboardProfileSidebar}/components/OrganizationLinks/index.tsx +18 -7
  360. package/js/widgets/Dashboard/components/{TeacherProfileDashboardSidebar → TeacherDashboardProfileSidebar}/index.spec.tsx +13 -39
  361. package/js/widgets/Dashboard/components/{TeacherProfileDashboardSidebar → TeacherDashboardProfileSidebar}/index.stories.tsx +5 -5
  362. package/js/widgets/Dashboard/components/{TeacherProfileDashboardSidebar → TeacherDashboardProfileSidebar}/index.tsx +4 -3
  363. package/js/widgets/Dashboard/hooks/useEnroll/index.ts +8 -8
  364. package/js/widgets/Dashboard/index.spec.tsx +22 -12
  365. package/js/widgets/Dashboard/utils/learnerRouteMessages.tsx +12 -1
  366. package/js/widgets/Dashboard/utils/learnerRoutes.tsx +6 -0
  367. package/js/widgets/Dashboard/utils/teacherRouteMessages.tsx +60 -4
  368. package/js/widgets/Dashboard/utils/teacherRoutes.tsx +87 -13
  369. package/js/widgets/LtiConsumer/index.spec.tsx +44 -33
  370. package/js/widgets/LtiConsumer/index.tsx +11 -15
  371. package/js/widgets/Search/components/SearchFilterGroup/index.spec.tsx +0 -5
  372. package/js/widgets/Search/components/SearchFilterGroupModal/_styles.scss +0 -9
  373. package/js/widgets/Search/components/SearchFilterGroupModal/index.spec.tsx +0 -5
  374. package/js/widgets/Search/components/SearchFilterGroupModal/index.tsx +86 -60
  375. package/js/widgets/Search/components/SearchFilterValueParent/index.stories.tsx +51 -0
  376. package/js/widgets/Search/components/SearchFilterValueParent/index.tsx +7 -7
  377. package/js/widgets/Search/components/SearchFiltersPane/_styles.scss +2 -16
  378. package/js/widgets/Search/components/SearchFiltersPane/index.tsx +9 -6
  379. package/js/widgets/Search/hooks/useCourseSearch/index.ts +13 -7
  380. package/js/widgets/Search/index.spec.tsx +3 -2
  381. package/js/widgets/Search/utils/getResourceList/index.spec.ts +12 -5
  382. package/js/widgets/Search/utils/getResourceList/index.ts +6 -2
  383. package/js/widgets/SyllabusCourseRunsList/components/CourseProductItem/CourseProductItemFooter/index.tsx +74 -0
  384. package/js/widgets/{CourseProductItem → SyllabusCourseRunsList/components/CourseProductItem}/_styles.scss +11 -14
  385. package/js/widgets/{CourseProductItem → SyllabusCourseRunsList/components/CourseProductItem}/components/CourseProductCertificateItem/_styles.scss +1 -1
  386. package/js/widgets/{CourseProductItem → SyllabusCourseRunsList/components/CourseProductItem}/components/CourseProductCertificateItem/index.spec.tsx +13 -2
  387. package/js/widgets/SyllabusCourseRunsList/components/CourseProductItem/components/CourseProductCertificateItem/index.stories.tsx +33 -0
  388. package/js/widgets/{CourseProductItem → SyllabusCourseRunsList/components/CourseProductItem}/components/CourseProductCertificateItem/index.tsx +5 -8
  389. package/js/widgets/{CourseProductItem → SyllabusCourseRunsList/components/CourseProductItem}/components/CourseProductCourseRuns/CourseRunList.tsx +1 -1
  390. package/js/widgets/{CourseProductItem → SyllabusCourseRunsList/components/CourseProductItem}/components/CourseProductCourseRuns/EnrollableCourseRunList.tsx +16 -8
  391. package/js/widgets/{CourseProductItem → SyllabusCourseRunsList/components/CourseProductItem}/components/CourseProductCourseRuns/EnrolledCourseRun.tsx +5 -3
  392. package/js/widgets/{CourseProductItem → SyllabusCourseRunsList/components/CourseProductItem}/components/CourseProductCourseRuns/_styles.scss +1 -0
  393. package/js/widgets/{CourseProductItem → SyllabusCourseRunsList/components/CourseProductItem}/components/CourseProductCourseRuns/index.spec.tsx +100 -35
  394. package/js/widgets/{CourseProductItem → SyllabusCourseRunsList/components/CourseProductItem}/components/CourseRunItem/index.spec.tsx +7 -4
  395. package/js/widgets/SyllabusCourseRunsList/components/CourseProductItem/components/CourseRunItem/index.stories.tsx +36 -0
  396. package/js/widgets/{CourseProductItem → SyllabusCourseRunsList/components/CourseProductItem}/components/CourseRunItem/index.tsx +5 -3
  397. package/js/widgets/SyllabusCourseRunsList/components/CourseProductItem/components/ProductSignatureHeader/index.tsx +40 -0
  398. package/js/widgets/SyllabusCourseRunsList/components/CourseProductItem/index.spec.tsx +898 -0
  399. package/js/widgets/SyllabusCourseRunsList/components/CourseProductItem/index.stories.tsx +83 -0
  400. package/js/widgets/SyllabusCourseRunsList/components/CourseProductItem/index.tsx +253 -0
  401. package/js/widgets/SyllabusCourseRunsList/components/CourseRunEnrollment/CourseRunUnenrollmentButton/index.tsx +3 -2
  402. package/js/widgets/SyllabusCourseRunsList/components/CourseRunEnrollment/_styles.scss +0 -25
  403. package/js/widgets/SyllabusCourseRunsList/components/CourseRunEnrollment/index.joanie.spec.tsx +73 -30
  404. package/js/widgets/SyllabusCourseRunsList/components/CourseRunEnrollment/index.openedx.spec.tsx +10 -5
  405. package/js/widgets/SyllabusCourseRunsList/components/CourseRunEnrollment/index.tsx +54 -26
  406. package/js/widgets/SyllabusCourseRunsList/components/CourseRunItemWithEnrollment/index.tsx +1 -0
  407. package/js/widgets/SyllabusCourseRunsList/components/CourseWishButton/_styles.scss +0 -3
  408. package/js/widgets/SyllabusCourseRunsList/components/CourseWishButton/hooks/useCourseWish/index.spec.tsx +12 -9
  409. package/js/widgets/SyllabusCourseRunsList/components/CourseWishButton/index.login.spec.tsx +14 -12
  410. package/js/widgets/SyllabusCourseRunsList/components/CourseWishButton/index.logout.spec.tsx +4 -6
  411. package/js/widgets/SyllabusCourseRunsList/components/CourseWishButton/index.tsx +5 -5
  412. package/js/widgets/SyllabusCourseRunsList/components/SyllabusAsideList/index.tsx +2 -2
  413. package/js/widgets/SyllabusCourseRunsList/components/SyllabusCourseRun/index.tsx +19 -13
  414. package/js/widgets/SyllabusCourseRunsList/components/SyllabusSimpleCourseRunsList/index.tsx +1 -0
  415. package/js/widgets/SyllabusCourseRunsList/hooks/useCourseEnrollment/index.spec.tsx +2 -1
  416. package/js/widgets/SyllabusCourseRunsList/hooks/useCourseEnrollment/index.ts +14 -19
  417. package/js/widgets/SyllabusCourseRunsList/index.spec.tsx +54 -14
  418. package/js/widgets/SyllabusCourseRunsList/index.tsx +5 -8
  419. package/js/widgets/UserLogin/components/UserMenu/DesktopUserMenu.tsx +2 -1
  420. package/js/widgets/UserLogin/components/UserMenu/MobileUserMenu.tsx +2 -1
  421. package/js/widgets/UserLogin/components/UserMenu/index.tsx +6 -5
  422. package/js/widgets/UserLogin/index.not.isJoanieEnabled.spec.tsx +120 -0
  423. package/js/widgets/UserLogin/index.spec.tsx +108 -43
  424. package/js/widgets/UserLogin/index.stories.tsx +29 -0
  425. package/js/widgets/UserLogin/index.tsx +33 -15
  426. package/js/widgets/index.tsx +3 -6
  427. package/mocks/browser.ts +1 -1
  428. package/mocks/handlers/contracts.ts +16 -0
  429. package/mocks/handlers.ts +3 -1
  430. package/package.json +82 -78
  431. package/scss/_main.scss +2 -0
  432. package/scss/colors/_palette.scss +2 -2
  433. package/scss/colors/_theme.scss +6 -16
  434. package/scss/components/_content.scss +1 -1
  435. package/scss/components/_index.scss +24 -14
  436. package/scss/generic/_type.scss +1 -1
  437. package/scss/objects/_characteristics.scss +7 -14
  438. package/scss/objects/_course_glimpses.scss +3 -7
  439. package/scss/objects/_dashboard.scss +28 -0
  440. package/scss/objects/_form.scss +14 -355
  441. package/scss/objects/_index.scss +1 -0
  442. package/scss/objects/_list.scss +8 -0
  443. package/scss/objects/_organization_glimpses.scss +2 -8
  444. package/scss/objects/_selector.scss +1 -0
  445. package/scss/trumps/_bootstrap.scss +4 -0
  446. package/scss/vendors/css/cunningham-tokens.css +89 -25
  447. package/scss/vendors/cunningham-tokens.scss +208 -128
  448. package/js/components/AddressesManagement/AddressForm.spec.tsx +0 -206
  449. package/js/components/AddressesManagement/AddressForm.tsx +0 -169
  450. package/js/components/Button/index.spec.tsx +0 -36
  451. package/js/components/Button/index.stories.tsx +0 -26
  452. package/js/components/Button/index.tsx +0 -38
  453. package/js/components/Form/CheckboxField.stories.tsx +0 -12
  454. package/js/components/Form/Field.stories.config.tsx +0 -24
  455. package/js/components/Form/Inputs.tsx +0 -295
  456. package/js/components/Form/RadioField.stories.tsx +0 -18
  457. package/js/components/Form/SelectField.stories.tsx +0 -27
  458. package/js/components/Form/TextAreaField.stories.tsx +0 -12
  459. package/js/components/Form/TextField.stories.tsx +0 -12
  460. package/js/components/Form/index.spec.tsx +0 -297
  461. package/js/hooks/useProduct.ts +0 -28
  462. package/js/utils/test/mockProductWithOrder.ts +0 -17
  463. package/js/widgets/CourseProductItem/components/PaymentButton/_styles.scss +0 -12
  464. package/js/widgets/CourseProductItem/components/PaymentButton/index.spec.tsx +0 -473
  465. package/js/widgets/CourseProductItem/components/PurchaseButton/index.spec.tsx +0 -259
  466. package/js/widgets/CourseProductItem/components/SaleTunnel/_styles.scss +0 -41
  467. package/js/widgets/CourseProductItem/components/SaleTunnelStepResume/_styles.scss +0 -130
  468. package/js/widgets/CourseProductItem/components/SaleTunnelStepResume/index.spec.tsx +0 -29
  469. package/js/widgets/CourseProductItem/components/SaleTunnelStepResume/index.tsx +0 -59
  470. package/js/widgets/CourseProductItem/components/SaleTunnelStepValidation/index.spec.tsx +0 -71
  471. package/js/widgets/CourseProductItem/contexts/CourseProductContext/index.spec.tsx +0 -35
  472. package/js/widgets/CourseProductItem/contexts/CourseProductContext/index.tsx +0 -45
  473. package/js/widgets/CourseProductItem/index.spec.tsx +0 -486
  474. package/js/widgets/CourseProductItem/index.tsx +0 -205
  475. package/js/widgets/Dashboard/components/DashboardItem/DashboardItemCourseEnrolling.spec.tsx +0 -64
  476. package/js/widgets/Dashboard/components/TeacherCourseDashboardSidebar/index.spec.tsx +0 -105
  477. package/js/widgets/Dashboard/components/TeacherOrganizationDashboardSidebar/index.stories.tsx +0 -28
  478. /package/js/components/AddressesManagement/{validationSchema.spec.ts → AddressForm/validationSchema.spec.ts} +0 -0
  479. /package/js/{widgets/CourseProductItem/components → components}/EnrollmentDate/index.tsx +0 -0
  480. /package/js/{widgets/CourseProductItem → components/SaleTunnel}/components/RegisteredCreditCard/_styles.scss +0 -0
  481. /package/js/{widgets/CourseProductItem → components/SaleTunnel}/components/RegisteredCreditCard/index.spec.tsx +0 -0
  482. /package/js/{widgets/CourseProductItem → components/SaleTunnel}/components/SaleTunnelStepValidation/TargetCourseDetail.tsx +0 -0
  483. /package/js/{widgets/CourseProductItem → components/SaleTunnel}/components/StepBreadcrumb/_styles.scss +0 -0
  484. /package/js/{widgets/CourseProductItem/hooks → hooks}/useStepManager/index.spec.ts +0 -0
  485. /package/js/{widgets/CourseProductItem/hooks → hooks}/useStepManager/index.ts +0 -0
  486. /package/js/pages/{TeacherCourseDashboardLoader → TeacherDashboardCourseLoader}/CourseRunList/CourseRunListCell/index.tsx +0 -0
  487. /package/js/pages/{TeacherCourseDashboardLoader → TeacherDashboardCourseLoader}/CourseRunList/index.tsx +0 -0
  488. /package/js/pages/{TeacherTrainingDashboard → TeacherDashboardTraining}/_styles.scss +0 -0
  489. /package/js/widgets/Dashboard/components/{TeacherCourseDashboardSidebar → TeacherDashboardCourseSidebar}/_styles.scss +0 -0
  490. /package/js/widgets/{CourseProductItem → SyllabusCourseRunsList/components/CourseProductItem}/components/CourseProductCourseRuns/CourseRunSection.tsx +0 -0
  491. /package/js/widgets/{CourseProductItem → SyllabusCourseRunsList/components/CourseProductItem}/components/CourseProductCourseRuns/index.tsx +0 -0
  492. /package/js/widgets/{CourseProductItem → SyllabusCourseRunsList/components/CourseProductItem}/types/payments/payplug.d.ts +0 -0
@@ -9,21 +9,19 @@ import { Spinner } from 'components/Spinner';
9
9
  import ErrorBoundary from 'utils/errors/ErrorBoundary';
10
10
  import context from 'utils/context';
11
11
 
12
- const CourseProductItem = lazy(() => import('widgets/CourseProductItem'));
12
+ const Dashboard = lazy(() => import('widgets/Dashboard'));
13
13
  const LanguageSelector = lazy(() => import('widgets/LanguageSelector'));
14
14
  const LtiConsumer = lazy(() => import('widgets/LtiConsumer'));
15
15
  const RootSearchSuggestField = lazy(() => import('widgets/RootSearchSuggestField'));
16
16
  const Search = lazy(() => import('widgets/Search'));
17
17
  const SearchSuggestField = lazy(() => import('widgets/SearchSuggestField'));
18
- const UserLogin = lazy(() => import('widgets/UserLogin'));
19
- const Dashboard = lazy(() => import('widgets/Dashboard'));
20
18
  const SyllabusCourseRunsList = lazy(() => import('widgets/SyllabusCourseRunsList'));
19
+ const UserLogin = lazy(() => import('widgets/UserLogin'));
21
20
 
22
21
  // List the top-level components that can be directly called from the Django templates in an interface
23
22
  // for type-safety when we call them. This will let us use the props for any top-level component in a
24
23
  // way TypeScript understand and accepts
25
24
  interface ComponentLibrary {
26
- CourseProductItem: typeof CourseProductItem;
27
25
  Dashboard: typeof Dashboard;
28
26
  LanguageSelector: typeof LanguageSelector;
29
27
  LtiConsumer: typeof LtiConsumer;
@@ -35,15 +33,14 @@ interface ComponentLibrary {
35
33
  }
36
34
  // Actually create the component map that we'll use below to access our component classes
37
35
  const componentLibrary: ComponentLibrary = {
38
- CourseProductItem,
39
36
  Dashboard,
40
37
  LanguageSelector,
41
38
  LtiConsumer,
42
39
  RootSearchSuggestField,
43
40
  Search,
44
41
  SearchSuggestField,
45
- UserLogin,
46
42
  SyllabusCourseRunsList,
43
+ UserLogin,
47
44
  };
48
45
  // Type guard: ensures a given string (candidate) is indeed a proper key of the componentLibrary with a corresponding
49
46
  // component. This is a runtime check but it allows TS to check the component prop types at compile time
package/mocks/browser.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { setupWorker } from 'msw';
1
+ import { setupWorker } from 'msw/browser';
2
2
 
3
3
  import { handlers } from './handlers';
4
4
 
@@ -0,0 +1,16 @@
1
+ import { http, HttpResponse } from 'msw';
2
+ import { getAPIEndpoint } from 'api/joanie';
3
+ import { Contract, PaginatedResponse } from 'types/Joanie';
4
+ import { ContractFactory } from 'utils/test/factories/joanie';
5
+ import { PER_PAGE } from 'settings';
6
+
7
+ export default [
8
+ http.get(`${getAPIEndpoint()}/contracts/`, () => {
9
+ return HttpResponse.json<PaginatedResponse<Contract>>({
10
+ count: 250,
11
+ results: ContractFactory().many(PER_PAGE.teacherContractList),
12
+ next: null,
13
+ previous: null,
14
+ });
15
+ }),
16
+ ];
package/mocks/handlers.ts CHANGED
@@ -1 +1,3 @@
1
- export const handlers = [];
1
+ import contractHandlers from './handlers/contracts';
2
+
3
+ export const handlers = [...contractHandlers];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "richie-education",
3
- "version": "2.24.0",
3
+ "version": "2.25.0-b2.dev101",
4
4
  "description": "A CMS to build learning portals for Open Education",
5
5
  "main": "sandbox/manage.py",
6
6
  "scripts": {
@@ -38,111 +38,115 @@
38
38
  "not dead"
39
39
  ],
40
40
  "dependencies": {
41
- "@babel/core": "7.22.9",
41
+ "@babel/core": "7.23.9",
42
42
  "@babel/plugin-syntax-dynamic-import": "7.8.3",
43
- "@babel/plugin-transform-modules-commonjs": "7.22.5",
44
- "@babel/preset-env": "7.22.9",
45
- "@babel/preset-react": "7.22.5",
46
- "@babel/preset-typescript": "7.22.5",
47
- "@faker-js/faker": "8.0.2",
48
- "@formatjs/cli": "6.1.3",
49
- "@formatjs/intl-relativetimeformat": "11.2.4",
50
- "@hookform/resolvers": "3.1.1",
51
- "@openfun/cunningham-react": "0.10.0",
52
- "@openfun/cunningham-tokens": "0.7.0",
53
- "@sentry/browser": "7.60.0",
54
- "@sentry/types": "7.60.0",
55
- "@storybook/addon-actions": "7.1.0",
56
- "@storybook/addon-essentials": "7.1.0",
57
- "@storybook/addon-interactions": "7.1.0",
58
- "@storybook/addon-links": "7.1.0",
59
- "@storybook/react": "7.1.0",
60
- "@storybook/react-webpack5": "7.1.0",
61
- "@storybook/testing-library": "0.2.0",
62
- "@tanstack/query-core": "4.32.0",
63
- "@tanstack/query-sync-storage-persister": "4.32.0",
64
- "@tanstack/react-query": "4.32.0",
65
- "@tanstack/react-query-persist-client": "4.32.0",
66
- "@testing-library/dom": "9.3.1",
67
- "@testing-library/jest-dom": "5.17.0",
68
- "@testing-library/react": "14.0.0",
69
- "@testing-library/user-event": "14.4.3",
70
- "@types/fetch-mock": "7.3.5",
71
- "@types/iframe-resizer": "3.5.9",
72
- "@types/jest": "29.5.3",
73
- "@types/js-cookie": "3.0.3",
74
- "@types/lodash-es": "4.17.8",
75
- "@types/node-fetch": "2.6.4",
43
+ "@babel/plugin-transform-modules-commonjs": "7.23.3",
44
+ "@babel/preset-env": "7.23.9",
45
+ "@babel/preset-react": "7.23.3",
46
+ "@babel/preset-typescript": "7.23.3",
47
+ "@faker-js/faker": "8.4.1",
48
+ "@formatjs/cli": "6.2.7",
49
+ "@formatjs/intl-relativetimeformat": "11.2.12",
50
+ "@hookform/resolvers": "3.3.4",
51
+ "@openfun/cunningham-react": "2.4.0",
52
+ "@openfun/cunningham-tokens": "2.1.0",
53
+ "@sentry/browser": "7.101.1",
54
+ "@sentry/types": "7.101.1",
55
+ "@storybook/addon-actions": "7.6.16",
56
+ "@storybook/addon-essentials": "7.6.16",
57
+ "@storybook/addon-interactions": "7.6.16",
58
+ "@storybook/addon-links": "7.6.16",
59
+ "@storybook/react": "7.6.16",
60
+ "@storybook/react-webpack5": "7.6.16",
61
+ "@storybook/testing-library": "0.2.2",
62
+ "@tanstack/query-core": "5.21.7",
63
+ "@tanstack/query-sync-storage-persister": "5.21.7",
64
+ "@tanstack/react-query": "5.21.7",
65
+ "@tanstack/react-query-persist-client": "5.21.7",
66
+ "@testing-library/dom": "9.3.4",
67
+ "@testing-library/jest-dom": "6.4.2",
68
+ "@testing-library/react": "14.2.1",
69
+ "@testing-library/user-event": "14.5.2",
70
+ "@types/fetch-mock": "7.3.8",
71
+ "@types/iframe-resizer": "3.5.13",
72
+ "@types/jest": "29.5.12",
73
+ "@types/js-cookie": "3.0.6",
74
+ "@types/lodash-es": "4.17.12",
75
+ "@types/node-fetch": "2.6.11",
76
76
  "@types/query-string": "6.3.0",
77
- "@types/react": "18.2.15",
78
- "@types/react-autosuggest": "10.1.6",
79
- "@types/react-dom": "18.2.7",
80
- "@types/react-modal": "3.16.0",
81
- "@types/uuid": "9.0.2",
82
- "@typescript-eslint/eslint-plugin": "6.1.0",
83
- "@typescript-eslint/parser": "6.1.0",
84
- "babel-jest": "29.6.1",
77
+ "@types/react": "18.2.56",
78
+ "@types/react-autosuggest": "10.1.11",
79
+ "@types/react-dom": "18.2.19",
80
+ "@types/react-modal": "3.16.3",
81
+ "@types/uuid": "9.0.8",
82
+ "@typescript-eslint/eslint-plugin": "7.0.1",
83
+ "@typescript-eslint/parser": "7.0.1",
84
+ "babel-jest": "29.7.0",
85
85
  "babel-loader": "9.1.3",
86
86
  "babel-plugin-react-intl": "8.2.25",
87
87
  "bootstrap": ">=4.6.0 <5",
88
- "classnames": "2.3.2",
88
+ "classnames": "2.5.1",
89
89
  "cljs-merge": "1.1.1",
90
- "core-js": "3.31.1",
91
- "downshift": "8.0.0",
92
- "eslint": "8.45.0",
90
+ "core-js": "3.36.0",
91
+ "downshift": "8.3.1",
92
+ "eslint": "8.56.0",
93
93
  "eslint-config-airbnb": "19.0.4",
94
94
  "eslint-config-airbnb-typescript": "17.1.0",
95
- "eslint-config-prettier": "8.8.0",
96
- "eslint-import-resolver-webpack": "0.13.2",
97
- "eslint-plugin-compat": "4.1.4",
98
- "eslint-plugin-formatjs": "4.10.3",
99
- "eslint-plugin-import": "2.27.5",
100
- "eslint-plugin-jsx-a11y": "6.7.1",
101
- "eslint-plugin-prettier": "5.0.0",
102
- "eslint-plugin-react": "7.33.0",
95
+ "eslint-config-prettier": "9.1.0",
96
+ "eslint-import-resolver-webpack": "0.13.8",
97
+ "eslint-plugin-compat": "4.2.0",
98
+ "eslint-plugin-formatjs": "4.12.2",
99
+ "eslint-plugin-import": "2.29.1",
100
+ "eslint-plugin-jsx-a11y": "6.8.0",
101
+ "eslint-plugin-prettier": "5.1.3",
102
+ "eslint-plugin-react": "7.33.2",
103
103
  "eslint-plugin-react-hooks": "4.6.0",
104
- "eslint-plugin-storybook": "0.6.13",
104
+ "eslint-plugin-storybook": "0.8.0",
105
105
  "fetch-mock": "9.11.0",
106
106
  "file-loader": "6.2.0",
107
- "glob": "10.3.3",
108
- "i18n-iso-countries": "7.6.0",
109
- "iframe-resizer": "4.3.6",
107
+ "glob": "10.3.10",
108
+ "i18n-iso-countries": "7.10.0",
109
+ "iframe-resizer": "4.3.9",
110
110
  "intl-pluralrules": "2.0.1",
111
- "jest": "29.6.1",
112
- "jest-environment-jsdom": "29.6.1",
111
+ "jest": "29.7.0",
112
+ "jest-environment-jsdom": "29.7.0",
113
113
  "js-cookie": "3.0.5",
114
114
  "lodash-es": "4.17.21",
115
115
  "mdn-polyfills": "5.20.0",
116
- "msw": "1.2.3",
116
+ "msw": "2.2.1",
117
117
  "node-fetch": ">2.6.6 <3",
118
- "nodemon": "3.0.1",
119
- "prettier": "3.0.0",
120
- "query-string": "8.1.0",
118
+ "nodemon": "3.0.3",
119
+ "prettier": "3.2.5",
120
+ "query-string": "8.2.0",
121
121
  "react": "18.2.0",
122
122
  "react-autosuggest": "10.1.0",
123
123
  "react-dom": "18.2.0",
124
- "react-hook-form": "7.45.2",
125
- "react-intl": "6.4.4",
124
+ "react-hook-form": "7.50.1",
125
+ "react-intl": "6.6.2",
126
126
  "react-modal": "3.16.1",
127
- "react-router-dom": "6.14.2",
128
- "sass": "1.64.1",
129
- "source-map-loader": "4.0.1",
130
- "storybook": "7.1.0",
127
+ "react-router-dom": "6.22.1",
128
+ "sass": "1.71.0",
129
+ "source-map-loader": "5.0.0",
130
+ "storybook": "7.6.16",
131
131
  "tsconfig-paths-webpack-plugin": "4.1.0",
132
- "typescript": "<5",
133
- "uuid": "9.0.0",
134
- "webpack": "5.88.2",
132
+ "typescript": "5.3.3",
133
+ "uuid": "9.0.1",
134
+ "webpack": "5.90.2",
135
135
  "webpack-cli": "5.1.4",
136
- "whatwg-fetch": "3.6.17",
136
+ "whatwg-fetch": "3.6.20",
137
137
  "xhr-mock": "2.5.1",
138
138
  "yargs": "17.7.2",
139
- "yup": "1.2.0"
139
+ "yup": "1.3.3"
140
140
  },
141
141
  "resolutions": {
142
- "@types/react": "18.2.15",
143
- "@types/react-dom": "18.2.7"
142
+ "@testing-library/dom": "9.3.4",
143
+ "@types/react": "18.2.56",
144
+ "@types/react-dom": "18.2.19"
144
145
  },
145
146
  "msw": {
146
147
  "workerDirectory": "../richie/static/richie/js"
148
+ },
149
+ "volta": {
150
+ "node": "20.11.0"
147
151
  }
148
152
  }
package/scss/_main.scss CHANGED
@@ -44,3 +44,5 @@
44
44
  @import './trumps/cms';
45
45
  // IE11 patchs
46
46
  @import './trumps/ie11-fixes';
47
+ // Bootstrap patchs
48
+ @import './trumps/bootstrap';
@@ -4,5 +4,5 @@
4
4
 
5
5
  // Named colors
6
6
  // ---------
7
- @warn "[DEPRECATION] - $palette will be removed on the next major release. Use map-get($theme, 'colors') instead.";
8
- $palette: map-get($theme, 'colors') !default;
7
+ @warn "[DEPRECATION] - $palette will be removed on the next major release. Use $palette: map-get(map-get(map-get($themes, 'default'), 'theme'), 'colors') instead.";
8
+ $palette: map-get(map-get(map-get($themes, 'default'), 'theme'), 'colors') !default;
@@ -247,9 +247,6 @@ $r-theme: (
247
247
  text-hover-color: r-color('grey59'),
248
248
  base-border: r-color('azure2'),
249
249
  ),
250
- dashboard-course-list: (
251
- title-color: r-color('indianred3'),
252
- ),
253
250
  dashboard-credit-cards: (
254
251
  empty-color: r-color(slate-grey),
255
252
  ),
@@ -277,7 +274,7 @@ $r-theme: (
277
274
  sub-title-color: r-color('slate-grey'),
278
275
  active-color: r-color('indianred3'),
279
276
  base-border: r-color('light-grey'),
280
- menu-link-left-padding: 25px,
277
+ menu-link-inline-padding: 16px,
281
278
  ),
282
279
  dashboard-list: (
283
280
  background-color-loading: r-color('smoke'),
@@ -322,7 +319,7 @@ $r-theme: (
322
319
  hover-title-color: r-color('firebrick6'),
323
320
  ),
324
321
  dashboard-sidebar-organization-link-title: (
325
- base-color: r-color('firebrick6'),
322
+ base-color: r-color('battleship-grey'),
326
323
  ),
327
324
  pagination: (
328
325
  item-color: r-color('slate-grey'),
@@ -456,14 +453,6 @@ $r-theme: (
456
453
  title-color: r-color('charcoal'),
457
454
  base-color: r-color('purplish-grey'),
458
455
  ),
459
- sale-tunnel: (
460
- primary-button-scheme: $firebrick6-scheme,
461
- primary-button-is-outlined: false,
462
- secondary-button-scheme: $purplish-grey-scheme,
463
- secondary-button-is-outlined: true,
464
- tertiary-button-scheme: $smoke-scheme,
465
- tertiary-button-is-outlined: false,
466
- ),
467
456
  search-results: (
468
457
  overlay: r-color('black'),
469
458
  color: r-color('light-grey'),
@@ -486,9 +475,6 @@ $r-theme: (
486
475
  base-background: r-color('white'),
487
476
  base-border: r-color('slate-grey'),
488
477
  base-color: r-color('slate-grey'),
489
- close-background: transparent,
490
- close-border: null,
491
- close-color: r-color('slate-grey'),
492
478
  overlay-background: rgba(r-color('black'), 0.75),
493
479
  ),
494
480
  search-filters-group-modal: (
@@ -567,6 +553,10 @@ $r-theme: (
567
553
  background-color: r-color('white'),
568
554
  overlay-background-color: r-color('smoke'),
569
555
  ),
556
+ contract-frame: (
557
+ content-color: r-color(purplish-grey),
558
+ title-color: r-color('charcoal'),
559
+ ),
570
560
  ) !default;
571
561
 
572
562
  // On a Richie child project you can easily change a specific value using:
@@ -40,5 +40,5 @@ body {
40
40
  // Enforce this block to take at least full body height
41
41
  display: flex;
42
42
  flex-direction: column;
43
- min-height: 100%;
43
+ height: 100%;
44
44
  }
@@ -1,41 +1,51 @@
1
1
  @import '../../js/components/AddressesManagement/styles';
2
+ @import '../../js/components/ContractFrame/styles';
2
3
  @import '../../js/components/TeacherDashboardCourseList/styles';
3
4
  @import '../../js/components/Modal/styles';
5
+ @import '../../js/components/PaymentButton/styles';
6
+ @import '../../js/components/PurchaseButton/styles';
7
+ @import '../../js/components/SaleTunnel/styles';
8
+ @import '../../js/components/SaleTunnel/components/RegisteredCreditCard/styles';
9
+ @import '../../js/components/SaleTunnel/components/SaleTunnelStepPayment/styles';
10
+ @import '../../js/components/SaleTunnel/components/SaleTunnelStepResume/styles';
11
+ @import '../../js/components/SaleTunnel/components/SaleTunnelStepValidation/styles';
12
+ @import '../../js/components/SaleTunnel/components/StepBreadcrumb/styles';
13
+ @import '../../js/components/SuccessIcon/styles';
4
14
  @import '../../js/components/RegisteredAddress/styles';
5
15
  @import '../../js/components/SearchInput/styles';
6
16
  @import '../../js/components/Spinner/styles';
7
17
  @import '../../js/pages/DashboardAddressesManagement/styles';
8
18
  @import '../../js/pages/DashboardCertificates/styles';
9
19
  @import '../../js/pages/DashboardCourses/styles';
20
+ @import '../../js/pages/DashboardContracts/_styles';
10
21
  @import '../../js/pages/DashboardCreditCardsManagement/styles';
22
+ @import '../../js/pages/DashboardOrderLayout/styles';
11
23
  @import '../../js/pages/DashboardPreferences/styles';
12
- @import '../../js/pages/TeacherCourseDashboardLoader/CourseRunList/styles';
13
- @import '../../js/pages/TeacherTrainingDashboard/styles.scss';
14
- @import '../../js/widgets/CourseProductItem/components/CourseProductCertificateItem/styles';
15
- @import '../../js/widgets/CourseProductItem/components/CourseProductCourseRuns/styles';
16
- @import '../../js/widgets/CourseProductItem/components/PaymentButton/styles';
17
- @import '../../js/widgets/CourseProductItem/components/RegisteredCreditCard/styles';
18
- @import '../../js/widgets/CourseProductItem/components/SaleTunnel/styles';
19
- @import '../../js/widgets/CourseProductItem/components/SaleTunnelStepPayment/styles';
20
- @import '../../js/widgets/CourseProductItem/components/SaleTunnelStepResume/styles';
21
- @import '../../js/widgets/CourseProductItem/components/SaleTunnelStepValidation/styles';
22
- @import '../../js/widgets/CourseProductItem/components/StepBreadcrumb/styles';
23
- @import '../../js/widgets/CourseProductItem/styles';
24
+ @import '../../js/pages/TeacherDashboardContractsLayout/styles';
25
+ @import '../../js/pages/TeacherDashboardCourseLoader/CourseRunList/styles';
26
+ @import '../../js/pages/TeacherDashboardTraining/styles.scss';
24
27
  @import '../../js/widgets/Dashboard/styles';
25
28
  @import '../../js/widgets/Dashboard/components/DashboardAvatar/styles';
26
29
  @import '../../js/widgets/Dashboard/components/DashboardBox/styles';
27
30
  @import '../../js/widgets/Dashboard/components/DashboardCard/styles';
28
31
  @import '../../js/widgets/Dashboard/components/DashboardItem/Certificate/styles';
32
+ @import '../../js/widgets/Dashboard/components/DashboardItem/Order/styles';
33
+ @import '../../js/widgets/Dashboard/components/DashboardItem/Contract/_styles';
29
34
  @import '../../js/widgets/Dashboard/components/DashboardItem/styles';
30
35
  @import '../../js/widgets/Dashboard/components/DashboardLayout/styles';
36
+ @import '../../js/widgets/Dashboard/components/DashboardListAvatar/styles';
37
+ @import '../../js/widgets/Dashboard/components/DashboardOrderLoader/styles';
31
38
  @import '../../js/widgets/Dashboard/components/DashboardBreadcrumbs/styles';
32
39
  @import '../../js/widgets/Dashboard/components/DashboardSidebar/styles';
33
- @import '../../js/widgets/Dashboard/components/TeacherCourseDashboardSidebar/styles';
34
- @import '../../js/widgets/Dashboard/components/TeacherProfileDashboardSidebar/components/OrganizationLinks/styles';
40
+ @import '../../js/widgets/Dashboard/components/TeacherDashboardCourseSidebar/styles';
41
+ @import '../../js/widgets/Dashboard/components/TeacherDashboardProfileSidebar/components/OrganizationLinks/styles';
35
42
  @import '../../js/widgets/LtiConsumer/styles';
36
43
  @import '../../js/widgets/Search/components/SearchFilterGroup/styles';
37
44
  @import '../../js/widgets/Search/components/SearchFilterGroupModal/styles';
38
45
  @import '../../js/widgets/Search/components/SearchFiltersPane/styles';
46
+ @import '../../js/widgets/SyllabusCourseRunsList/components/CourseProductItem/components/CourseProductCertificateItem/styles';
47
+ @import '../../js/widgets/SyllabusCourseRunsList/components/CourseProductItem/components/CourseProductCourseRuns/styles';
48
+ @import '../../js/widgets/SyllabusCourseRunsList/components/CourseProductItem/styles';
39
49
  @import '../../js/widgets/SyllabusCourseRunsList/components/CourseRunEnrollment/CourseRunUnenrollmentButton/styles';
40
50
  @import '../../js/widgets/SyllabusCourseRunsList/components/CourseRunEnrollment/styles';
41
51
  @import '../../js/widgets/SyllabusCourseRunsList/components/CourseWishButton/styles';
@@ -8,7 +8,7 @@ $r-fonts: () !default;
8
8
  }
9
9
 
10
10
  // Build text color helpers
11
- @each $name, $value in map-get($theme, 'colors') {
11
+ @each $name, $value in map-get(map-get(map-get($themes, 'default'), 'theme'), 'colors') {
12
12
  @if type-of($value) == 'map' {
13
13
  @each $sub-name, $sub-value in $value {
14
14
  .text-#{($name + '-' + $sub-name)} {
@@ -5,22 +5,22 @@
5
5
  // Simple inline with optional color scheme features
6
6
  .characteristics {
7
7
  @include feature-list($margin: 0.5rem 0 0.5rem 0);
8
-
9
8
  color: inherit;
10
9
 
11
- &__row {
12
- text-align: center;
13
- }
14
-
15
10
  &__item {
16
- @include feature-item($parent_selector: '.characteristics');
11
+ @include feature-item($parent_selector: '.characteristics', $valign: flex-start, $expand: true);
17
12
  color: inherit;
13
+ margin-bottom: 0.5rem;
14
+
15
+ &--full-width {
16
+ width: 100%;
17
+ }
18
18
  }
19
19
 
20
20
  &__term {
21
21
  align-items: center;
22
22
  color: inherit;
23
- padding-top: 0.2125rem; // Fine tune vertical alignment with icons
23
+ margin-top: rem-calc(-2px); // Fine tune vertical alignment with icons
24
24
  }
25
25
 
26
26
  // When using through a color scheme, item adopt button behaviors
@@ -44,11 +44,4 @@
44
44
  @include r-button-colors(r-theme-val(characteristics, tertiary-item), $apply-border: true);
45
45
  }
46
46
  }
47
-
48
- &__enrollment-count {
49
- @include make-container();
50
- padding-left: 0;
51
- padding-right: 0;
52
- font-size: 1rem;
53
- }
54
47
  }
@@ -28,14 +28,7 @@ $r-course-glimpse-gutter: 0.8rem !default;
28
28
 
29
29
  &__count {
30
30
  margin-right: $r-course-glimpse-gutter;
31
- padding: 0;
32
- flex-basis: 100%; // Should not wrap with actual course glimpses
33
- color: r-theme-val(course-glimpse-list, count-color);
34
- text-align: right;
35
-
36
31
  @include media-breakpoint-up(lg) {
37
- padding: 0;
38
-
39
32
  &:first-child {
40
33
  margin-top: -1rem; // Cancel out top padding
41
34
  }
@@ -75,6 +68,9 @@ $course-glimpse-content-padding-sides: 0.7rem !default;
75
68
  @include media-breakpoint-up(lg) {
76
69
  @include sv-flex(1, 0, calc(25% - #{$r-course-glimpse-gutter * 2}));
77
70
  }
71
+ @include media-breakpoint-down(lg) {
72
+ max-width: 100%;
73
+ }
78
74
 
79
75
  // We want to trigger the card shadow on hovering links inside the card,
80
76
  // but not when hovering non-interactive text.
@@ -52,4 +52,32 @@
52
52
  &__text_icon_left {
53
53
  margin-left: rem-calc(8px);
54
54
  }
55
+
56
+ &__page__actions {
57
+ display: flex;
58
+ flex-direction: column;
59
+ gap: 1rem;
60
+ margin-bottom: 1rem;
61
+
62
+ &-row {
63
+ display: flex;
64
+ gap: 1rem;
65
+
66
+ &--start {
67
+ justify-content: flex-start;
68
+ }
69
+ &--center {
70
+ justify-content: center;
71
+ }
72
+ &--end {
73
+ justify-content: flex-end;
74
+ }
75
+ &--space-between {
76
+ justify-content: space-between;
77
+ }
78
+ &--space-around {
79
+ justify-content: space-around;
80
+ }
81
+ }
82
+ }
55
83
  }