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
@@ -67,6 +67,10 @@
67
67
  "description": "Label of the \"last_name\" input",
68
68
  "message": "Nom du destinataire"
69
69
  },
70
+ "components.AddressesManagement.optionalFieldText": {
71
+ "description": "text Displayed below form elements that are optional",
72
+ "message": "(optionnel)"
73
+ },
70
74
  "components.AddressesManagement.postcodeInput": {
71
75
  "description": "Label of the \"postcode\" input",
72
76
  "message": "Code postal"
@@ -103,25 +107,25 @@
103
107
  "description": "Label of the update button",
104
108
  "message": "Mettre à jour cette adresse"
105
109
  },
106
- "components.AddressesManagement.validationSchema.mixedInvalid": {
107
- "description": "Error message displayed when a field value is invalid.",
108
- "message": "Ce champ n'est pas valide."
110
+ "components.ContractStatus.learnerSignedOn": {
111
+ "description": "Label for the date of sign of a training contract by the learner",
112
+ "message": "Vous avez signé cette convention de formation. Signée le {date}"
109
113
  },
110
- "components.AddressesManagement.validationSchema.mixedOneOf": {
111
- "description": "Error message displayed when a field value must be one of a list.",
112
- "message": "Vous devez sélectionner une valeur."
114
+ "components.ContractStatus.organizationSignedOn": {
115
+ "description": "Label for the date of sign of a training contract by the organization",
116
+ "message": "L'établissement a signé cette convention de formation. Signée le {date}"
113
117
  },
114
- "components.AddressesManagement.validationSchema.mixedRequired": {
115
- "description": "Error message displayed when a field is required.",
116
- "message": "Ce champ est obligatoire."
118
+ "components.ContractStatus.waitingOrganization": {
119
+ "description": "Label displayed when a training contract need to be signed by the organization",
120
+ "message": "Vous ne pouvez pas télécharger votre convention de formation tant qu'elle n'a pas été signée par l'établissement."
117
121
  },
118
- "components.AddressesManagement.validationSchema.stringMax": {
119
- "description": "Error message displayed when a field value is too long.",
120
- "message": "La longueur maximale est de {max} {max, plural, one {caractère} other {caractères}}."
122
+ "components.ContractStatus.waitingSignature": {
123
+ "description": "Label displayed when a training contract need to be signed by the learner",
124
+ "message": "Vous devez signer cette convention de formation pour accéder à votre formation."
121
125
  },
122
- "components.AddressesManagement.validationSchema.stringMin": {
123
- "description": "Error message displayed when a field value is too short.",
124
- "message": "La longueur minimale est de {min} {min, plural, one {caractère} other {caractères}}."
126
+ "components.CountrySelectField.label": {
127
+ "description": "label of the country select",
128
+ "message": "Pays"
125
129
  },
126
130
  "components.CourseAddToWishlist.labelAdd": {
127
131
  "description": "Label to proceed to add a course to user wishlist.",
@@ -155,6 +159,10 @@
155
159
  "description": "Organization logo alternative text for screen reader users",
156
160
  "message": "Établissement"
157
161
  },
162
+ "components.CourseGlimpse.organizationsTitle": {
163
+ "description": "Organizations title for multiple organizations",
164
+ "message": "Produit par {nbOrganizations} partenaires"
165
+ },
158
166
  "components.CourseGlimpseFooter.dateIconAlt": {
159
167
  "description": "Course date logo alternative text for screen reader users",
160
168
  "message": "Date du cours"
@@ -187,6 +195,10 @@
187
195
  "description": "Course run languages",
188
196
  "message": "Disponible en {languages}"
189
197
  },
198
+ "components.CourseProductItem.contractSignActionLabel": {
199
+ "description": "Label of \"sign contract\" action on the syllabus.",
200
+ "message": "Signer votre convention de formation"
201
+ },
190
202
  "components.CourseProductItem.fromTo": {
191
203
  "description": "Course run date range",
192
204
  "message": "Du {from} au {to}"
@@ -195,6 +207,14 @@
195
207
  "description": "Accessible text for the initial loading spinner displayed when product is fetching",
196
208
  "message": "Chargement des informations produit..."
197
209
  },
210
+ "components.CourseProductItem.nbSeatsAvailable": {
211
+ "description": "Message displayed when seats are available for the product",
212
+ "message": "{ nb, plural, =0 {Aucune place restante} one {Dernière place restante!} other {# places restantes} }"
213
+ },
214
+ "components.CourseProductItem.noSeatsAvailable": {
215
+ "description": "Message displayed when no seats are available for the product",
216
+ "message": "Désolé, aucune place disponible pour le moment"
217
+ },
198
218
  "components.CourseProductItem.pending": {
199
219
  "description": "Message displayed when authenticated user has purchased the product but order is still pending",
200
220
  "message": "En attente"
@@ -203,6 +223,10 @@
203
223
  "description": "Message displayed when authenticated user owned the product",
204
224
  "message": "Acheté"
205
225
  },
226
+ "components.CourseProductItem.signatureNeeded": {
227
+ "description": "Banner displayed when the contract is not signed on the syllabus",
228
+ "message": "Vous devez signer votre convention de formation afin de pouvoir vous inscrire aux sessions de cours"
229
+ },
206
230
  "components.CourseProductsList.end": {
207
231
  "description": "End label displayed in the header of course run dates section",
208
232
  "message": "Fin"
@@ -211,6 +235,10 @@
211
235
  "description": "Start label displayed in the header of course run dates section",
212
236
  "message": "Début"
213
237
  },
238
+ "components.CourseRunEnrollment.courseRunStartIn": {
239
+ "description": "Message displayed when user is enrolled but the course run is not started",
240
+ "message": "Le cours commence dans {relativeStartDate}"
241
+ },
214
242
  "components.CourseRunEnrollment.enroll": {
215
243
  "description": "CTA for users who can enroll in the course run or could enroll if they logged in.",
216
244
  "message": "S’inscrire maintenant"
@@ -273,11 +301,11 @@
273
301
  },
274
302
  "components.CourseRunList.dataCourseRunLink": {
275
303
  "description": "Message displayed in course run datagrid for course run link",
276
- "message": "accéder à l'espace cours"
304
+ "message": "Accéder à l'espace cours"
277
305
  },
278
306
  "components.CourseRunList.dataCourseRunPeriod": {
279
307
  "description": "Message displayed in course run datagrid for course run period",
280
- "message": "du {from} au {to}"
308
+ "message": "Du {from} au {to}"
281
309
  },
282
310
  "components.CourseRunList.noCourseRunAvailable": {
283
311
  "description": "Text displayed when no course run are opened for the course",
@@ -295,6 +323,14 @@
295
323
  "description": "The path to display the certificates view.",
296
324
  "message": "/certificats"
297
325
  },
326
+ "components.Dashboard.DashboardRoutes.contracts.label": {
327
+ "description": "Label of the training contracts view used in navigation components.",
328
+ "message": "Mes conventions de formation"
329
+ },
330
+ "components.Dashboard.DashboardRoutes.contracts.path": {
331
+ "description": "The path to display the training contracts view.",
332
+ "message": "/conventions-de-formation"
333
+ },
298
334
  "components.Dashboard.DashboardRoutes.course.path": {
299
335
  "description": "The path to display a course detail view.",
300
336
  "message": "/cours/{code}"
@@ -359,6 +395,22 @@
359
395
  "description": "The path to display the preferences view.",
360
396
  "message": "/preferences"
361
397
  },
398
+ "components.Dashboard.Signature.SignatureDummy.button": {
399
+ "description": "Button displayed below the dummy contract.",
400
+ "message": "Signer"
401
+ },
402
+ "components.Dashboard.Signature.SignatureDummy.signing": {
403
+ "description": "Message displayed after signing the dummy contract.",
404
+ "message": "Signature de la convention de formation ..."
405
+ },
406
+ "components.Dashboard.Signature.SignatureLexPersona.error": {
407
+ "description": "Message displayed inside the contract signin modal when Lex Persona iframe returned an error.",
408
+ "message": "Une erreur s'est produite lors de la signature de la convention de formation. Veuillez réessayer plus tard."
409
+ },
410
+ "components.Dashboard.Signature.SignatureLexPersona.errorStatus": {
411
+ "description": "Message displayed inside the contract signin modal when Lex Persona iframe returned a non null status.",
412
+ "message": "Une erreur s'est produite lors de la signature de la convention de formation avec le statut suivant : {status}. Veuillez actualiser afin de réessayer."
413
+ },
362
414
  "components.DashboardAddressBox.delete": {
363
415
  "description": "Delete address button on the dashboard addresses list",
364
416
  "message": "Supprimer"
@@ -395,25 +447,21 @@
395
447
  "description": "The dashboard's breadcrumb back button's label",
396
448
  "message": "Retour"
397
449
  },
398
- "components.DashboardCertificate.details": {
399
- "description": "Label for the details button of a certificate",
400
- "message": "Détails"
401
- },
402
- "components.DashboardCertificate.download": {
403
- "description": "Label for the download button of a certificate",
404
- "message": "Télécharger"
405
- },
406
- "components.DashboardCertificate.generatingCertificate": {
407
- "description": "Accessible label displayed while certificate is being generated on the dashboard.",
408
- "message": "Certificat en cours de génération..."
409
- },
410
450
  "components.DashboardCertificate.issuedOn": {
411
451
  "description": "Label for the date of issue of a certificate",
412
452
  "message": "Émis le {date}"
413
453
  },
414
- "components.DashboardCertificate.noCertificate": {
415
- "description": "Label displayed when no certificate is available",
416
- "message": "Lorsque vous aurez réussi tous les cours, vous pourrez télécharger votre certificat ici."
454
+ "components.DashboardCertificate.noCertificateCertificate": {
455
+ "description": "Label displayed when no certificate certificate is available",
456
+ "message": "Lorsque vous aurez réussi tous les examens, vous pourrez télécharger votre certificat ici."
457
+ },
458
+ "components.DashboardCertificate.noCertificateCredential": {
459
+ "description": "Label displayed when no certificate credential is available",
460
+ "message": "Lorsque vous aurez réussi tous les examens, vous pourrez télécharger votre certificat ici."
461
+ },
462
+ "components.DashboardCertificate.noCertificateUnknown": {
463
+ "description": "Label displayed when we dont have the product type and no certificate is available",
464
+ "message": "Lorsque vous aurez réussi tous les examens, vous pourrez télécharger votre certificat ici."
417
465
  },
418
466
  "components.DashboardCertificates.empty": {
419
467
  "description": "Message displayed when there are no certificates",
@@ -423,6 +471,14 @@
423
471
  "description": "Message displayed while loading certificates",
424
472
  "message": "Chargement des certificats..."
425
473
  },
474
+ "components.DashboardContracts.empty": {
475
+ "description": "Message displayed when there are no training contracts",
476
+ "message": "Vous n'avez pas encore de conventions de formation."
477
+ },
478
+ "components.DashboardContracts.loading": {
479
+ "description": "Message displayed while loading training contracts",
480
+ "message": "Chargement des conventions de formation..."
481
+ },
426
482
  "components.DashboardCourses.emptyList": {
427
483
  "description": "Empty placeholder of the dashboard's list of orders and enrollments",
428
484
  "message": "Vous n'avez pas encore d'inscriptions ni de commandes."
@@ -523,22 +579,166 @@
523
579
  "description": "Label of the title input on the credit card edit page",
524
580
  "message": "Nom de la carte de crédit"
525
581
  },
582
+ "components.DashboardItem.Order.ContractFrame.errorMaxPolling": {
583
+ "description": "Message displayed inside the contract signin modal if the order polling has reached its maximum attempts.",
584
+ "message": "La signature prend plus de temps que prévu ... veuillez revenir plus tard."
585
+ },
586
+ "components.DashboardItem.Order.ContractFrame.errorPolling": {
587
+ "description": "Message displayed inside the contract signin modal if the order polling failed a request.",
588
+ "message": "Une erreur s'est produite lors de la vérification de la signature. Veuillez revenir plus tard."
589
+ },
590
+ "components.DashboardItem.Order.ContractFrame.errorSubmitForSignature": {
591
+ "description": "Message displayed inside the contract signin modal while an error occurred.",
592
+ "message": "Une erreur s'est produite lors de l'initialisation du processus de signature. Veuillez réessayer plus tard."
593
+ },
594
+ "components.DashboardItem.Order.ContractFrame.finishedButton": {
595
+ "description": "Button displayed inside the contract signin modal when the contract is signed.",
596
+ "message": "Suivant"
597
+ },
598
+ "components.DashboardItem.Order.ContractFrame.finishedCaption": {
599
+ "description": "Title displayed inside the contract signin modal when the contract is signed.",
600
+ "message": "Félicitations !"
601
+ },
602
+ "components.DashboardItem.Order.ContractFrame.finishedDescription": {
603
+ "description": "Message displayed inside the contract signin modal when the contract is signed.",
604
+ "message": "Vous recevrez un email une fois que votre contrat sera entièrement signé. Vous pouvez dès à présent vous inscrire aux sessions de cours !"
605
+ },
606
+ "components.DashboardItem.Order.ContractFrame.loadingContract": {
607
+ "description": "Message displayed inside the contract signin modal when loading the contract.",
608
+ "message": "Chargement de votre convention de formation..."
609
+ },
610
+ "components.DashboardItem.Order.ContractFrame.polling": {
611
+ "description": "Message displayed inside the contract signin modal when polling the order.",
612
+ "message": "Vérification de la signature ..."
613
+ },
614
+ "components.DashboardItem.Order.OrderStateMessage.statusCanceled": {
615
+ "description": "Status shown on the dashboard order item when order is canceled",
616
+ "message": "Annulée"
617
+ },
618
+ "components.DashboardItem.Order.OrderStateMessage.statusCompleted": {
619
+ "description": "Status shown on the dashboard order item when order is validated with certificate",
620
+ "message": "Terminée"
621
+ },
622
+ "components.DashboardItem.Order.OrderStateMessage.statusDraft": {
623
+ "description": "Status shown on the dashboard order item when order is draft.",
624
+ "message": "Brouillon"
625
+ },
626
+ "components.DashboardItem.Order.OrderStateMessage.statusOnGoing": {
627
+ "description": "Status shown on the dashboard order item when order is validated with no certificate",
628
+ "message": "En cours"
629
+ },
630
+ "components.DashboardItem.Order.OrderStateMessage.statusOther": {
631
+ "description": "Status shown on the dashboard order item when order status is unknown",
632
+ "message": "{state}"
633
+ },
634
+ "components.DashboardItem.Order.OrderStateMessage.statusPending": {
635
+ "description": "Status shown on the dashboard order item when order is pending.",
636
+ "message": "En attente"
637
+ },
638
+ "components.DashboardItem.Order.OrderStateMessage.statusSubmitted": {
639
+ "description": "Status shown on the dashboard order item when order is submitted.",
640
+ "message": "En attente de paiement"
641
+ },
642
+ "components.DashboardItem.Order.OrderStateMessage.statusWaitingSignature": {
643
+ "description": "Status shown on the dashboard order item when order is validated with contract's learner signature missing.",
644
+ "message": "Signature requise"
645
+ },
646
+ "components.DashboardItemCourseEnrollingRun.contractUnsigned": {
647
+ "description": "Message displayed as disabled button title when a contract needs to be signed.",
648
+ "message": "Vous devez signer votre convention de formation afin de pouvoir vous inscrire aux sessions du cours."
649
+ },
650
+ "components.DashboardItemCourseEnrollingRun.courseRunsLoading": {
651
+ "description": "Text displayed when course runs list is loading",
652
+ "message": "Chargement des sessions de cours..."
653
+ },
654
+ "components.DashboardItemCourseEnrollingRun.enrollmentNotYetOpened": {
655
+ "description": "Disclaimer that informs the user that enrollment is not yet opened",
656
+ "message": "Les inscriptions ouvriront le {enrollment_start}"
657
+ },
658
+ "components.DashboardItemCourseEnrollingRun.noCourseRunAvailable": {
659
+ "description": "Text displayed when no course runs are opened for the course",
660
+ "message": "Aucune session disponible pour ce cours."
661
+ },
662
+ "components.DashboardItemEnrollment.changeEnrollCourseConfirmation": {
663
+ "description": "The confirmation message shown to the user when he wants to change its enrolled course run",
664
+ "message": "Êtes-vous sûr de vouloir vous inscrire à une autre session ? Vous serez désinscrit de l'autre session !"
665
+ },
666
+ "components.DashboardItemEnrollment.enrollCourse": {
667
+ "description": "Button shown on a read-only not-enrolled target course that redirects to the details view",
668
+ "message": "S'inscrire"
669
+ },
670
+ "components.DashboardItemEnrollment.enrollRun": {
671
+ "description": "Button to enroll in a course run",
672
+ "message": "S'inscrire"
673
+ },
674
+ "components.DashboardItemEnrollment.enrolled": {
675
+ "description": "Text shown when user is enrolled in a course run",
676
+ "message": "Inscrit"
677
+ },
678
+ "components.DashboardItemEnrollment.enrolledRunPeriod": {
679
+ "description": "Text to display the period of a course run",
680
+ "message": "Vous êtes inscrit à la session du {startDate} au {endDate}"
681
+ },
682
+ "components.DashboardItemEnrollment.firstEnrollCourseConfirmation": {
683
+ "description": "The confirmation message shown to the user when he wants to enroll for the first time ( no existing enrollments )",
684
+ "message": "Êtes-vous sûr de vouloir vous inscrire à cette session ?"
685
+ },
686
+ "components.DashboardItemEnrollment.gotoCourse": {
687
+ "description": "Button to access course when the user is enrolled",
688
+ "message": "Accéder au cours"
689
+ },
690
+ "components.DashboardItemEnrollment.notEnrolled": {
691
+ "description": "Text shown on a read-only not-enrolled target course",
692
+ "message": "Vous n'êtes pas inscrit à ce cours"
693
+ },
694
+ "components.DashboardItemEnrollment.runPeriod": {
695
+ "description": "Text to display the period of a course run",
696
+ "message": "Du {startDate} au {endDate}"
697
+ },
698
+ "components.DashboardItemEnrollment.statusNotActive": {
699
+ "description": "Text shown when a course run is not active",
700
+ "message": "Non inscrit"
701
+ },
702
+ "components.DashboardItemOrder.gotoCourse": {
703
+ "description": "Button that redirects to the order details",
704
+ "message": "Voir le détail"
705
+ },
706
+ "components.DashboardItemOrder.loadingCertificate": {
707
+ "description": "Accessible label displayed while certificate is being fetched on the dashboard.",
708
+ "message": "Chargement du certificat..."
709
+ },
526
710
  "components.DashboardOrderLoader.loading": {
527
711
  "description": "Message displayed while loading an order",
528
712
  "message": "Chargement de la commande..."
529
713
  },
530
- "components.DashboardSidebar.responsiveNavLabel": {
531
- "description": "a11y related label for select input used to navigate on responsive",
532
- "message": "Naviguer vers"
714
+ "components.DashboardOrderLoader.signatureNeeded": {
715
+ "description": "Banner displayed when the contract is not signed",
716
+ "message": "Vous devez signer votre convention de formation afin de pouvoir vous inscrire à une session de cours"
533
717
  },
534
- "components.DashboardSidebar.settingsLinkLabel": {
535
- "description": "label of the settings link",
536
- "message": "Paramètres"
718
+ "components.DashboardOrderLoader.wrongLinkedProductError": {
719
+ "description": "Error message displayed when order's linked product type is not handle.",
720
+ "message": "Cette page n'est pas disponible pour cette commande."
537
721
  },
538
722
  "components.DesktopUserMenu.menuPurpose": {
539
723
  "description": "Accessible label for user menu button",
540
724
  "message": "Accéder aux préférences de votre profil"
541
725
  },
726
+ "components.DownloadCertificateButton.download": {
727
+ "description": "Label for the download button of a certificate",
728
+ "message": "Télécharger"
729
+ },
730
+ "components.DownloadCertificateButton.generatingCertificate": {
731
+ "description": "Accessible label displayed while certificate is being generated.",
732
+ "message": "Le certificat est en cours de génération..."
733
+ },
734
+ "components.DownloadContractButton.contractDownloadActionLabel": {
735
+ "description": "Label of \"download contract\" action.",
736
+ "message": "Télécharger"
737
+ },
738
+ "components.DownloadContractButton.contractDownloadError": {
739
+ "description": "Message displayed when the order's contract download fails.",
740
+ "message": "Une erreur est survenue lors du téléchargement de la convention de formation. Veuillez réessayer plus tard."
741
+ },
542
742
  "components.EnrollableCourseRunList.ariaSelectCourseRun": {
543
743
  "description": "Accessible label used by screen reader when user checked a course run radio input.",
544
744
  "message": "Sélectionnez le cours se déroulant du {start} au {end}."
@@ -591,6 +791,26 @@
591
791
  "description": "Text label for the enrollment dates when enrollment is opened",
592
792
  "message": "Inscription jusqu'au {date}"
593
793
  },
794
+ "components.Form.utils.errors.mixedInvalid": {
795
+ "description": "Error message displayed when a field value is invalid.",
796
+ "message": "Ce champ est invalide."
797
+ },
798
+ "components.Form.utils.errors.mixedOneOf": {
799
+ "description": "Error message displayed when a field value must be one of a list.",
800
+ "message": "Vous devez sélectionner une valeur."
801
+ },
802
+ "components.Form.utils.errors.mixedRequired": {
803
+ "description": "Error message displayed when a field is required.",
804
+ "message": "Ce champ est obligatoire."
805
+ },
806
+ "components.Form.utils.errors.stringMax": {
807
+ "description": "Error message displayed when a field value is too long.",
808
+ "message": "La longueur maximale est de {max} {max, plural, one {caractère} other {caractères}}."
809
+ },
810
+ "components.Form.utils.errors.stringMin": {
811
+ "description": "Error message displayed when a field value is too short.",
812
+ "message": "La longueur minimale est de {min} {min, plural, one {caractère} other {caractères}}."
813
+ },
594
814
  "components.LanguageSelector.currentlySelected": {
595
815
  "description": "Accessible hint to mark the currently selected language in the language selector",
596
816
  "message": "(actuellement sélectionné)"
@@ -611,6 +831,14 @@
611
831
  "description": "Text for the button to close the modal",
612
832
  "message": "Fermer la fenêtre de dialogue"
613
833
  },
834
+ "components.NavigationSelect.responsiveNavLabel": {
835
+ "description": "a11y related label for select input used to navigate on responsive",
836
+ "message": "Accéder à"
837
+ },
838
+ "components.NavigationSelect.settingsLinkLabel": {
839
+ "description": "label of the settings link",
840
+ "message": "Paramètres"
841
+ },
614
842
  "components.PaginateCourseSearch.currentlyReadingLastPageN": {
615
843
  "description": "Accessibility helper in pagination, shown next to the current page number when it is the last page.",
616
844
  "message": "Actuellement sur la dernière page: {page}"
@@ -659,6 +887,10 @@
659
887
  "description": "Error message shown when payment creation request failed because there is no remaining available seat for the product.",
660
888
  "message": "Il n'y a pas plus de places disponibles pour ce produit."
661
889
  },
890
+ "components.PaymentButton.errorTerms": {
891
+ "description": "Error message shown when the user didn't check the terms checkbox.",
892
+ "message": "Vous devez accepter les conditions."
893
+ },
662
894
  "components.PaymentButton.pay": {
663
895
  "description": "CTA label to proceed to the payment of the product",
664
896
  "message": "Payer {price}"
@@ -671,6 +903,22 @@
671
903
  "description": "Label for screen reader when a payment is in progress.",
672
904
  "message": "Paiement en cours"
673
905
  },
906
+ "components.PaymentButton.termsMessage": {
907
+ "description": "Message next to the checkbox in order to accept the terms",
908
+ "message": "En cochant cette case, vous acceptez les"
909
+ },
910
+ "components.ProductCertificateFooter.buyProductCertificateLabel": {
911
+ "description": "Label on the enrollement row that propose to buy a product of type certificate",
912
+ "message": "Un examen qui délivre un certificat peut être acheté pour ce cours."
913
+ },
914
+ "components.ProductCertificateFooter.downloadProductCertificateLabel": {
915
+ "description": "Label on the enrollement row that propose to download a certificate",
916
+ "message": "Un certificat est disponible en téléchargement."
917
+ },
918
+ "components.ProductCertificateFooter.pendingProductCertificateLabel": {
919
+ "description": "Label on the enrollement when a product of type certificate have been bought",
920
+ "message": "Terminez ce cours pour obtenir votre certificat."
921
+ },
674
922
  "components.RegisteredCreditCard.expirationDate": {
675
923
  "description": "Credit card expiration date label",
676
924
  "message": "Date d'expiration : {expirationDate}"
@@ -691,9 +939,13 @@
691
939
  "description": "Label displayed inside the product's CTA when user is not logged in",
692
940
  "message": "Connectez-vous pour acheter {product}"
693
941
  },
694
- "components.SaleTunnel.noCourseRunToPurchase": {
942
+ "components.SaleTunnel.noCourseRunToPurchaseCertificate": {
943
+ "description": "Label displayed below the product's CTA when there is no courseRun",
944
+ "message": "Cette session n'est pas active. Ce produit n'est pas actuellement disponible à la vente."
945
+ },
946
+ "components.SaleTunnel.noCourseRunToPurchaseCredential": {
695
947
  "description": "Label displayed below the product's CTA when there is no courseRun",
696
- "message": "Au moins un cours n'a aucune session, ce produit n'est pas disponible à la vente actuellement"
948
+ "message": "Au moins un cours n'a aucune session ouverte, ce produit n'est pas disponible à la vente actuellement."
697
949
  },
698
950
  "components.SaleTunnel.noRemainingOrder": {
699
951
  "description": "Label displayed below the product's CTA when there is no remaining available seat for the product",
@@ -719,6 +971,14 @@
719
971
  "description": "Label for the resume tile",
720
972
  "message": "Vous êtes sur le point d'acheter"
721
973
  },
974
+ "components.SaleTunnelStepPayment.termsMessageLink": {
975
+ "description": "Clickable link included in the terms message",
976
+ "message": "Conditions générales de vente"
977
+ },
978
+ "components.SaleTunnelStepPayment.termsMessageLinkTitle": {
979
+ "description": "Title of clickable link included in the terms message",
980
+ "message": "Ouvrir un aperçu des Conditions Générales de Vente"
981
+ },
722
982
  "components.SaleTunnelStepPayment.userBillingAddressAddLabel": {
723
983
  "description": "Label for the billing address add button",
724
984
  "message": "Ajouter une adresse"
@@ -751,10 +1011,18 @@
751
1011
  "description": "Label to the call to action to close sale tunnel",
752
1012
  "message": "Commencer ce cours dès maintenant !"
753
1013
  },
1014
+ "components.SaleTunnelStepResume.ctaSignature": {
1015
+ "description": "Label to the call to action to close sale tunnel if there is a pending signature",
1016
+ "message": "Signer la convention de formation"
1017
+ },
754
1018
  "components.SaleTunnelStepResume.successDetailMessage": {
755
1019
  "description": "Text to remind that order's invoice will be send by email soon",
756
1020
  "message": "Vous allez recevoir votre facture par mail dans quelques instants."
757
1021
  },
1022
+ "components.SaleTunnelStepResume.successDetailSignatureMessage": {
1023
+ "description": "Text to remind that order needs to be signed",
1024
+ "message": "Pour vous inscrire aux sessions de cours, vous devez d'abord signer la convention de formation."
1025
+ },
758
1026
  "components.SaleTunnelStepResume.successMessage": {
759
1027
  "description": "Message to confirm that order has been created",
760
1028
  "message": "Votre commande a été créée avec succès."
@@ -865,7 +1133,19 @@
865
1133
  },
866
1134
  "components.SearchSuggestField.searchFieldPlaceholder": {
867
1135
  "description": "Placeholder text displayed in the search field when it is empty.",
868
- "message": "Recherche des cours, des organisations, des catégories"
1136
+ "message": "Recherche des cours, des établissements, des catégories"
1137
+ },
1138
+ "components.SignContractButton.contractDownloadActionLabel": {
1139
+ "description": "Label of \"download contract\" action.",
1140
+ "message": "Télécharger"
1141
+ },
1142
+ "components.SignContractButton.contractDownloadError": {
1143
+ "description": "Message displayed when the order's contract download fails.",
1144
+ "message": "Une erreur est survenue lors du téléchargement de la convention de formation. Veuillez réessayer plus tard."
1145
+ },
1146
+ "components.SignContractButton.contractSignActionLabel": {
1147
+ "description": "Label of \"sign contract\" action.",
1148
+ "message": "Signer"
869
1149
  },
870
1150
  "components.StepBreadcrumb.stepCount": {
871
1151
  "description": "Info about current step, not visible, only announced by screen readers",
@@ -947,53 +1227,17 @@
947
1227
  "description": "Button displayed on the syllabus when not all course runs are displayed",
948
1228
  "message": "Voir plus"
949
1229
  },
950
- "components.TeacherCourseDashboardLoader.errorNoCourse": {
951
- "description": "Message displayed when requested course is not found",
952
- "message": "Ce cours n'existe pas"
1230
+ "components.TeacherDashboard.TeacherDashboardRoutes.course.contracts.label": {
1231
+ "description": "Label of the course contracts view.",
1232
+ "message": "Conventions de formation"
953
1233
  },
954
- "components.TeacherCourseDashboardLoader.loading": {
955
- "description": "Message displayed while loading a course",
956
- "message": "Chargement du cours..."
957
- },
958
- "components.TeacherCourseDashboardLoader.pageTitle": {
959
- "description": "Use for the page title of the course area",
960
- "message": "Espace de cours"
961
- },
962
- "components.TeacherCourseDashboardSidebar.header": {
963
- "description": "Title of the course dashboard sidebar",
964
- "message": "{courseTitle}"
965
- },
966
- "components.TeacherCourseDashboardSidebar.loading": {
967
- "description": "Message displayed while loading a course",
968
- "message": "Chargement du cours..."
969
- },
970
- "components.TeacherCourseDashboardSidebar.subHeader": {
971
- "description": "Sub title of the course dashboard sidebar",
972
- "message": "Vous êtes sur le tableau de bord du cours"
973
- },
974
- "components.TeacherCourseDashboardSidebar.syllabusLinkLabel": {
975
- "description": "Syllabus link label",
976
- "message": "Accéder au syllabus"
977
- },
978
- "components.TeacherCoursesDashboardLoader.title.archived": {
979
- "description": "Archived courses title",
980
- "message": "Archivé"
981
- },
982
- "components.TeacherCoursesDashboardLoader.title.filteredCourses": {
983
- "description": "Filtered courses title",
984
- "message": "Vos cours"
985
- },
986
- "components.TeacherCoursesDashboardLoader.title.incoming": {
987
- "description": "Incoming courses title",
988
- "message": "À venir"
989
- },
990
- "components.TeacherCoursesDashboardLoader.title.ongoing": {
991
- "description": "Ongoing courses title",
992
- "message": "En cours"
1234
+ "components.TeacherDashboard.TeacherDashboardRoutes.course.contracts.path": {
1235
+ "description": "The path to display a course contracts view.",
1236
+ "message": "/teacher/cours/{courseId}/conventions-de-formation"
993
1237
  },
994
1238
  "components.TeacherDashboard.TeacherDashboardRoutes.course.generalInformation.path": {
995
1239
  "description": "The path to display the course general information view.",
996
- "message": "/enseignant/cours/{courseId}/informations"
1240
+ "message": "/teacher/cours/{courseId}/informations"
997
1241
  },
998
1242
  "components.TeacherDashboard.TeacherDashboardRoutes.course.label": {
999
1243
  "description": "Label of the course root view.",
@@ -1001,7 +1245,15 @@
1001
1245
  },
1002
1246
  "components.TeacherDashboard.TeacherDashboardRoutes.course.path": {
1003
1247
  "description": "The path to display the course view.",
1004
- "message": "/enseignant/cours/{courseId}"
1248
+ "message": "/teacher/cours/{courseId}"
1249
+ },
1250
+ "components.TeacherDashboard.TeacherDashboardRoutes.course.product.contracts.label": {
1251
+ "description": "Label of the product contracts view.",
1252
+ "message": "Conventions de formation"
1253
+ },
1254
+ "components.TeacherDashboard.TeacherDashboardRoutes.course.product.contracts.path": {
1255
+ "description": "The path to display a product contracts view.",
1256
+ "message": "/teacher/cours/{courseId}/produits/{courseProductRelationId}/conventions-de-formation"
1005
1257
  },
1006
1258
  "components.TeacherDashboard.TeacherDashboardRoutes.course.product.label": {
1007
1259
  "description": "Label of the product view.",
@@ -1009,19 +1261,43 @@
1009
1261
  },
1010
1262
  "components.TeacherDashboard.TeacherDashboardRoutes.course.product.path": {
1011
1263
  "description": "The path to display the product view.",
1012
- "message": "/enseignant/cours/{courseId}/produit/{courseProductRelationId}"
1264
+ "message": "/teacher/cours/{courseId}/produits/{courseProductRelationId}"
1013
1265
  },
1014
1266
  "components.TeacherDashboard.TeacherDashboardRoutes.generalInformation.label": {
1015
1267
  "description": "Label of the course general information view.",
1016
1268
  "message": "Informations générales"
1017
1269
  },
1270
+ "components.TeacherDashboard.TeacherDashboardRoutes.organization.contracts.label": {
1271
+ "description": "Label of the organization contracts view.",
1272
+ "message": "Conventions de formation"
1273
+ },
1274
+ "components.TeacherDashboard.TeacherDashboardRoutes.organization.contracts.path": {
1275
+ "description": "The path to display the organization contracts view.",
1276
+ "message": "/teacher/etablissements/{organizationId}/conventions-de-formation"
1277
+ },
1278
+ "components.TeacherDashboard.TeacherDashboardRoutes.organization.course.contracts.label": {
1279
+ "description": "Label of the organization course's contracts view.",
1280
+ "message": "Conventions de formation"
1281
+ },
1282
+ "components.TeacherDashboard.TeacherDashboardRoutes.organization.course.contracts.path": {
1283
+ "description": "The path to display the organization course's contracts view.",
1284
+ "message": "/teacher/etablissements/{organizationId}/cours/{courseId}/conventions-de-formation"
1285
+ },
1018
1286
  "components.TeacherDashboard.TeacherDashboardRoutes.organization.course.generalInformation.label": {
1019
1287
  "description": "Label of the organization course general information view.",
1020
1288
  "message": "Informations générales"
1021
1289
  },
1022
1290
  "components.TeacherDashboard.TeacherDashboardRoutes.organization.course.generalInformation.path": {
1023
1291
  "description": "The path to display the organization course general information view.",
1024
- "message": "/enseignant/organisations/{organizationId}/cours/{courseId}/informations"
1292
+ "message": "/teacher/etablissements/{organizationId}/cours/{courseId}/informations"
1293
+ },
1294
+ "components.TeacherDashboard.TeacherDashboardRoutes.organization.course.product.contracts.label": {
1295
+ "description": "Label of the organization product's contracts view.",
1296
+ "message": "Conventions de formation"
1297
+ },
1298
+ "components.TeacherDashboard.TeacherDashboardRoutes.organization.course.product.contracts.path": {
1299
+ "description": "The path to display the organization product's contracts view.",
1300
+ "message": "/teacher/etablissements/{organizationId}/cours/{courseId}/produits/{courseProductRelationId}/conventions-de-formation"
1025
1301
  },
1026
1302
  "components.TeacherDashboard.TeacherDashboardRoutes.organization.course.product.label": {
1027
1303
  "description": "Label of the organization product view.",
@@ -1029,7 +1305,7 @@
1029
1305
  },
1030
1306
  "components.TeacherDashboard.TeacherDashboardRoutes.organization.course.product.path": {
1031
1307
  "description": "The path to display the organization product view.",
1032
- "message": "/enseignant/organisations/{organizationId}/cours/{courseId}/produits/{courseProductRelationId}"
1308
+ "message": "/teacher/etablissements/{organizationId}/cours/{courseId}/produits/{courseProductRelationId}"
1033
1309
  },
1034
1310
  "components.TeacherDashboard.TeacherDashboardRoutes.organization.courses.label": {
1035
1311
  "description": "Label of the organization courses view.",
@@ -1037,7 +1313,7 @@
1037
1313
  },
1038
1314
  "components.TeacherDashboard.TeacherDashboardRoutes.organization.courses.path": {
1039
1315
  "description": "The path to display the organization courses view.",
1040
- "message": "/enseignant/organisations/{organizationId}/cours"
1316
+ "message": "/teacher/etablissements/{organizationId}/cours"
1041
1317
  },
1042
1318
  "components.TeacherDashboard.TeacherDashboardRoutes.organization.label": {
1043
1319
  "description": "Label of the organization view.",
@@ -1045,7 +1321,7 @@
1045
1321
  },
1046
1322
  "components.TeacherDashboard.TeacherDashboardRoutes.organization.path": {
1047
1323
  "description": "The path to display the organization view.",
1048
- "message": "/enseignant/organisations/{organizationId}"
1324
+ "message": "/teacher/etablissements/{organizationId}"
1049
1325
  },
1050
1326
  "components.TeacherDashboard.TeacherDashboardRoutes.profile.courses.label": {
1051
1327
  "description": "Label of the teacher courses liste view.",
@@ -1053,7 +1329,7 @@
1053
1329
  },
1054
1330
  "components.TeacherDashboard.TeacherDashboardRoutes.profile.courses.path": {
1055
1331
  "description": "The path to display the teacher courses liste view.",
1056
- "message": "/enseignant/cours"
1332
+ "message": "/teacher/cours"
1057
1333
  },
1058
1334
  "components.TeacherDashboard.TeacherDashboardRoutes.root.label": {
1059
1335
  "description": "Label of the teacher dashboard root view.",
@@ -1061,7 +1337,7 @@
1061
1337
  },
1062
1338
  "components.TeacherDashboard.TeacherDashboardRoutes.root.path": {
1063
1339
  "description": "The path to display the teacher dashboard root view.",
1064
- "message": "/enseignant"
1340
+ "message": "/teacher"
1065
1341
  },
1066
1342
  "components.TeacherDashboardCourseList.emptyList": {
1067
1343
  "description": "Empty placeholder of the dashboard's list of trainings",
@@ -1075,43 +1351,87 @@
1075
1351
  "description": "Message displayed while loading trainings on the teacher's dashboard'",
1076
1352
  "message": "Chargement des cours..."
1077
1353
  },
1078
- "components.TeacherOrganizationCourseDashboardLoader.loading": {
1354
+ "components.TeacherDashboardCourseLoader.errorNoCourse": {
1355
+ "description": "Message displayed when requested course is not found",
1356
+ "message": "Ce cours n'existe pas"
1357
+ },
1358
+ "components.TeacherDashboardCourseLoader.loading": {
1359
+ "description": "Message displayed while loading a course",
1360
+ "message": "Chargement du cours..."
1361
+ },
1362
+ "components.TeacherDashboardCourseLoader.pageTitle": {
1363
+ "description": "Use for the page title of the course area",
1364
+ "message": "Espace de cours"
1365
+ },
1366
+ "components.TeacherDashboardCourseSidebar.header": {
1367
+ "description": "Title of the course dashboard sidebar",
1368
+ "message": "{courseTitle}"
1369
+ },
1370
+ "components.TeacherDashboardCourseSidebar.loading": {
1371
+ "description": "Message displayed while loading a course",
1372
+ "message": "Chargement du cours..."
1373
+ },
1374
+ "components.TeacherDashboardCourseSidebar.subHeader": {
1375
+ "description": "Sub title of the course dashboard sidebar",
1376
+ "message": "Vous êtes sur le tableau de bord du cours"
1377
+ },
1378
+ "components.TeacherDashboardCourseSidebar.syllabusLinkLabel": {
1379
+ "description": "Syllabus link label",
1380
+ "message": "Accéder au syllabus"
1381
+ },
1382
+ "components.TeacherDashboardCoursesLoader.title.archived": {
1383
+ "description": "Archived courses title",
1384
+ "message": "Archivé"
1385
+ },
1386
+ "components.TeacherDashboardCoursesLoader.title.filteredCourses": {
1387
+ "description": "Filtered courses title",
1388
+ "message": "Vos cours"
1389
+ },
1390
+ "components.TeacherDashboardCoursesLoader.title.incoming": {
1391
+ "description": "Incoming courses title",
1392
+ "message": "À venir"
1393
+ },
1394
+ "components.TeacherDashboardCoursesLoader.title.ongoing": {
1395
+ "description": "Ongoing courses title",
1396
+ "message": "En cours"
1397
+ },
1398
+ "components.TeacherDashboardOrganizationCourseLoader.loading": {
1079
1399
  "description": "Message displayed while loading an organization",
1080
- "message": "Chargement de l'organisation..."
1400
+ "message": "Chargement de l'établissement..."
1081
1401
  },
1082
- "components.TeacherOrganizationCourseDashboardLoader.title": {
1402
+ "components.TeacherDashboardOrganizationCourseLoader.title": {
1083
1403
  "description": "Message displayed as title of organization courses page",
1084
1404
  "message": "Cours de {organizationTitle}"
1085
1405
  },
1086
- "components.TeacherOrganizationDashboardSidebar.loading": {
1406
+ "components.TeacherDashboardOrganizationSidebar.loading": {
1087
1407
  "description": "Message displayed while loading an organization",
1088
- "message": "Chargement de l'organisation..."
1408
+ "message": "Chargement de l'établissement..."
1089
1409
  },
1090
- "components.TeacherOrganizationDashboardSidebar.subHeader": {
1410
+ "components.TeacherDashboardOrganizationSidebar.subHeader": {
1091
1411
  "description": "Sub title of the organization dashboard sidebar",
1092
- "message": "Vous êtes sur le tableau de bord de l'organisation"
1412
+ "message": "Vous êtes sur le tableau de bord de l'établissement"
1093
1413
  },
1094
- "components.TeacherProfileDashboardSidebar.OrganizationLinks.organizationLinkTitle": {
1414
+ "components.TeacherDashboardProfileSidebar.OrganizationLinks.organizationLinkTitle": {
1095
1415
  "description": "Organization link title",
1096
- "message": "Lien vers l'organisation \"{organizationTitle}\""
1416
+ "message": "Lien vers l'établissement \"{organizationTitle}\""
1097
1417
  },
1098
- "components.TeacherProfileDashboardSidebar.OrganizationLinks.organizationsTitle": {
1418
+ "components.TeacherDashboardProfileSidebar.OrganizationLinks.organizationsTitle": {
1099
1419
  "description": "Title of the organizations section",
1100
- "message": "Mes universités"
1420
+ "message": "Mes établissements"
1101
1421
  },
1102
- "components.TeacherProfileDashboardSidebar.subHeader": {
1422
+ "components.TeacherDashboardProfileSidebar.subHeader": {
1103
1423
  "description": "Sub title of the dashboard sidebar",
1104
1424
  "message": "Vous êtes sur votre tableau de bord enseignant"
1105
1425
  },
1106
- "components.TeacherTrainingDashboard.errorNoCourseProductRelation": {
1426
+ "components.TeacherDashboardTraining.errorNoCourseProductRelation": {
1107
1427
  "description": "Message displayed when requested course product relation is not found",
1108
1428
  "message": "Ce produit n’existe pas"
1109
1429
  },
1110
- "components.TeacherTrainingDashboardLoader.loading": {
1430
+ "components.TeacherDashboardTrainingLoader.loading": {
1111
1431
  "description": "Message displayed while loading a course",
1112
1432
  "message": "Chargement de la formation..."
1113
1433
  },
1114
- "components.TeacherTrainingDashboardLoader.pageTitle": {
1434
+ "components.TeacherDashboardTrainingLoader.pageTitle": {
1115
1435
  "description": "Use for the page title of the training area",
1116
1436
  "message": "Espace de formation"
1117
1437
  },
@@ -1131,6 +1451,14 @@
1131
1451
  "description": "Accessibility text for the spinner in the login area.",
1132
1452
  "message": "Vérification de l'état de connexion..."
1133
1453
  },
1454
+ "components.form.messages.formOptionalFieldsText": {
1455
+ "description": "Text at the top of forms indicating what are optional fields",
1456
+ "message": "Tous les champs sont obligatoires sauf s'ils sont marqués comme optionnel"
1457
+ },
1458
+ "components.form.messages.optionalFieldText": {
1459
+ "description": "text display under form elements that are optional",
1460
+ "message": "(optionnel)"
1461
+ },
1134
1462
  "components.useStaticFilters.courses": {
1135
1463
  "description": "localized human_name label for coursesConfig filter name",
1136
1464
  "message": "Cours"
@@ -1179,6 +1507,14 @@
1179
1507
  "description": "Error message shown to the user when no certificate matches.",
1180
1508
  "message": "Certificat introuvable"
1181
1509
  },
1510
+ "hooks.useContracts.errorNotFound": {
1511
+ "description": "Error message shown to the user when no contract matches.",
1512
+ "message": "Convention de formation introuvable"
1513
+ },
1514
+ "hooks.useContracts.errorSelect": {
1515
+ "description": "Error message shown to the user when contracts fetch request fails.",
1516
+ "message": "Une erreur s'est produite lors de la récupération des conventions de formation. Veuillez réessayer plus tard."
1517
+ },
1182
1518
  "hooks.useCourseProductRelations.errorGet": {
1183
1519
  "description": "Error message shown to the user when course product relation fetch request fails.",
1184
1520
  "message": "Une erreur s'est produite lors de la récupération des formations. Veuillez réessayer plus tard."
@@ -1191,6 +1527,14 @@
1191
1527
  "description": "Error message shown to the user when trainings fetch request fails.",
1192
1528
  "message": "Une erreur s'est produite lors de la récupération des formations. Veuillez réessayer plus tard."
1193
1529
  },
1530
+ "hooks.useCourseProducts.errorGet": {
1531
+ "description": "Error message shown to the user when product fetch request fails.",
1532
+ "message": "Une erreur s'est produite lors de la récupération du produit. Veuillez réessayer plus tard."
1533
+ },
1534
+ "hooks.useCourseProducts.errorNotFound": {
1535
+ "description": "Error message shown to the user when no product matches.",
1536
+ "message": "Produit introuvable."
1537
+ },
1194
1538
  "hooks.useCourseRuns.errorGet": {
1195
1539
  "description": "Error message shown to the user when course runs fetch request fails.",
1196
1540
  "message": "Une erreur s'est produite lors de la récupération des sessions de cours. Veuillez réessayer plus tard."
@@ -1259,6 +1603,14 @@
1259
1603
  "description": "Error message shown to the user when enrollment update request fails.",
1260
1604
  "message": "Une erreur s'est produite lors de la modification de votre inscription. Veuillez réessayer plus tard."
1261
1605
  },
1606
+ "hooks.useJoanieUserProfile.errorGet": {
1607
+ "description": "Error message shown to the user when user fetch request fails.",
1608
+ "message": "Une erreur s'est produite lors de la récupération des informations utilisateur. Veuillez réessayer plus tard."
1609
+ },
1610
+ "hooks.useJoanieUserProfile.errorNotFound": {
1611
+ "description": "Error message shown to the user when it isn't logged.",
1612
+ "message": "Vous n'êtes pas connecté."
1613
+ },
1262
1614
  "hooks.useOrders.errorGet": {
1263
1615
  "description": "Error message shown to the user when orders fetch request fails.",
1264
1616
  "message": "Une erreur s'est produite lors de la récupération de vos commandes. Veuillez réessayer plus tard."
@@ -1273,19 +1625,11 @@
1273
1625
  },
1274
1626
  "hooks.useOrganizations.errorNotFound": {
1275
1627
  "description": "Error message shown to the user when no organizations matches.",
1276
- "message": "Impossible de trouver l'organisation"
1628
+ "message": "Impossible de trouver l'établissement"
1277
1629
  },
1278
1630
  "hooks.useOrganizations.errorSelect": {
1279
1631
  "description": "Error message shown to the user when organizations fetch request fails.",
1280
- "message": "Une erreur s'est produite lors de la récupération des organisations. Veuillez réessayer plus tard."
1281
- },
1282
- "hooks.useProduct.errorGet": {
1283
- "description": "Error message shown to the user when product fetch request fails.",
1284
- "message": "Une erreur s'est produite lors de la récupération du produit. Veuillez réessayer plus tard."
1285
- },
1286
- "hooks.useProduct.errorNotFound": {
1287
- "description": "Error message shown to the user when no product matches.",
1288
- "message": "Produit introuvable."
1632
+ "message": "Une erreur s'est produite lors de la récupération des établissements. Veuillez réessayer plus tard."
1289
1633
  },
1290
1634
  "hooks.useResources.errorCreate": {
1291
1635
  "description": "Error message shown to the user when resource creation request fails.",
@@ -1327,6 +1671,62 @@
1327
1671
  "description": "Error message shown to the user when no wishlist matches.",
1328
1672
  "message": "Liste de souhaits introuvable."
1329
1673
  },
1674
+ "pages.TeacherDashboardContractsLayout.ContractFilters.contractSignatureStateFilterLabel": {
1675
+ "description": "Contract signature state filter label",
1676
+ "message": "État de la signature"
1677
+ },
1678
+ "pages.TeacherDashboardContractsLayout.ContractFilters.organizationFilterLabel": {
1679
+ "description": "Use as organization filter label",
1680
+ "message": "Établissement"
1681
+ },
1682
+ "pages.TeacherDashboardCourseContractsLayout.pageTitle": {
1683
+ "description": "Use for the page title of the course's contracts page",
1684
+ "message": "Conventions de formation"
1685
+ },
1686
+ "pages.TeacherDashboardOrganizationContractsLayout.columnLearnerName": {
1687
+ "description": "Label for learnerName column",
1688
+ "message": "Apprenant"
1689
+ },
1690
+ "pages.TeacherDashboardOrganizationContractsLayout.columnProductTitle": {
1691
+ "description": "Label for productTitle column",
1692
+ "message": "Formation"
1693
+ },
1694
+ "pages.TeacherDashboardOrganizationContractsLayout.columnState": {
1695
+ "description": "Label for state column",
1696
+ "message": "État"
1697
+ },
1698
+ "pages.TeacherDashboardOrganizationContractsLayout.pageTitle": {
1699
+ "description": "Use for the page title of the organization contracts area",
1700
+ "message": "Conventions de formation"
1701
+ },
1702
+ "pages.TeacherDashboardOrganizationContractsLayout.signAllPendingContracts": {
1703
+ "description": "Button to sign all pending contracts",
1704
+ "message": "Signer toutes les conventions en attente ({ count })"
1705
+ },
1706
+ "utils.ContractHelper.learnerHalfSigned": {
1707
+ "description": "Label for unsigned contract status in learner point of view",
1708
+ "message": "En attente de la signature de l'établissement"
1709
+ },
1710
+ "utils.ContractHelper.learnerSigned": {
1711
+ "description": "Label for signed contract status in learner point of view",
1712
+ "message": "Signée"
1713
+ },
1714
+ "utils.ContractHelper.learnerUnsigned": {
1715
+ "description": "Label for unsigned contract status in learner point of view",
1716
+ "message": "En attente de signature"
1717
+ },
1718
+ "utils.ContractHelper.organizationHalfSigned": {
1719
+ "description": "Label for half signed contract status in organization point of view",
1720
+ "message": "En attente de signature"
1721
+ },
1722
+ "utils.ContractHelper.organizationSigned": {
1723
+ "description": "Label for signed contract status in organization point of view",
1724
+ "message": "Signée"
1725
+ },
1726
+ "utils.ContractHelper.organizationUnsigned": {
1727
+ "description": "Label for unsigned contract status in organization point of view",
1728
+ "message": "En attente de la signature de l'apprenant"
1729
+ },
1330
1730
  "utils.joinAnd.and": {
1331
1731
  "description": "The and word",
1332
1732
  "message": "et"