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": "Apellido del destinatario"
69
69
  },
70
+ "components.AddressesManagement.optionalFieldText": {
71
+ "description": "text Displayed below form elements that are optional",
72
+ "message": "(optional)"
73
+ },
70
74
  "components.AddressesManagement.postcodeInput": {
71
75
  "description": "Label of the \"postcode\" input",
72
76
  "message": "Código postal"
@@ -103,25 +107,25 @@
103
107
  "description": "Label of the update button",
104
108
  "message": "Actualizar esta dirección"
105
109
  },
106
- "components.AddressesManagement.validationSchema.mixedInvalid": {
107
- "description": "Error message displayed when a field value is invalid.",
108
- "message": "This field is invalid."
110
+ "components.ContractStatus.learnerSignedOn": {
111
+ "description": "Label for the date of sign of a training contract by the learner",
112
+ "message": "You signed this training contract. Signed on {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": "You must select a value."
114
+ "components.ContractStatus.organizationSignedOn": {
115
+ "description": "Label for the date of sign of a training contract by the organization",
116
+ "message": "The organization have signed this training contract. Signed on {date}"
113
117
  },
114
- "components.AddressesManagement.validationSchema.mixedRequired": {
115
- "description": "Error message displayed when a field is required.",
116
- "message": "This field is required."
118
+ "components.ContractStatus.waitingOrganization": {
119
+ "description": "Label displayed when a training contract need to be signed by the organization",
120
+ "message": "You cannot download your training contract until it had been signed by the organization."
117
121
  },
118
- "components.AddressesManagement.validationSchema.stringMax": {
119
- "description": "Error message displayed when a field value is too long.",
120
- "message": "The maximum length is {max} {max, plural, one {char} other {chars}}."
122
+ "components.ContractStatus.waitingSignature": {
123
+ "description": "Label displayed when a training contract need to be signed by the learner",
124
+ "message": "You have to sign this training contract to access your training."
121
125
  },
122
- "components.AddressesManagement.validationSchema.stringMin": {
123
- "description": "Error message displayed when a field value is too short.",
124
- "message": "The minimum length is {min} {min, plural, one {char} other {chars}}."
126
+ "components.CountrySelectField.label": {
127
+ "description": "label of the country select",
128
+ "message": "Country"
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": "Organización"
157
161
  },
162
+ "components.CourseGlimpse.organizationsTitle": {
163
+ "description": "Organizations title for multiple organizations",
164
+ "message": "Produced by {nbOrganizations} partners"
165
+ },
158
166
  "components.CourseGlimpseFooter.dateIconAlt": {
159
167
  "description": "Course date logo alternative text for screen reader users",
160
168
  "message": "Fecha del curso"
@@ -187,6 +195,10 @@
187
195
  "description": "Course run languages",
188
196
  "message": "Available in {languages}"
189
197
  },
198
+ "components.CourseProductItem.contractSignActionLabel": {
199
+ "description": "Label of \"sign contract\" action on the syllabus.",
200
+ "message": "Sign your training contract"
201
+ },
190
202
  "components.CourseProductItem.fromTo": {
191
203
  "description": "Course run date range",
192
204
  "message": "From {from} to {to}"
@@ -195,6 +207,14 @@
195
207
  "description": "Accessible text for the initial loading spinner displayed when product is fetching",
196
208
  "message": "Loading product information..."
197
209
  },
210
+ "components.CourseProductItem.nbSeatsAvailable": {
211
+ "description": "Message displayed when seats are available for the product",
212
+ "message": "{ nb, plural, =0 {No remaining seat} one {Last remaining seat!} other {# remaining seats} }"
213
+ },
214
+ "components.CourseProductItem.noSeatsAvailable": {
215
+ "description": "Message displayed when no seats are available for the product",
216
+ "message": "Sorry, no seats available for now"
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": "Pending"
@@ -203,6 +223,10 @@
203
223
  "description": "Message displayed when authenticated user owned the product",
204
224
  "message": "Purchased"
205
225
  },
226
+ "components.CourseProductItem.signatureNeeded": {
227
+ "description": "Banner displayed when the contract is not signed on the syllabus",
228
+ "message": "You need to sign your training contract before enrolling to course runs"
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": "Inicio"
213
237
  },
238
+ "components.CourseRunEnrollment.courseRunStartIn": {
239
+ "description": "Message displayed when user is enrolled but the course run is not started",
240
+ "message": "The course starts {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": "Inscribirse ahora"
@@ -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": "go to course area"
304
+ "message": "Go to course area"
277
305
  },
278
306
  "components.CourseRunList.dataCourseRunPeriod": {
279
307
  "description": "Message displayed in course run datagrid for course run period",
280
- "message": "from {from} to {to}"
308
+ "message": "From {from} to {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": "/certificates"
297
325
  },
326
+ "components.Dashboard.DashboardRoutes.contracts.label": {
327
+ "description": "Label of the training contracts view used in navigation components.",
328
+ "message": "My training contracts"
329
+ },
330
+ "components.Dashboard.DashboardRoutes.contracts.path": {
331
+ "description": "The path to display the training contracts view.",
332
+ "message": "/training-contracts"
333
+ },
298
334
  "components.Dashboard.DashboardRoutes.course.path": {
299
335
  "description": "The path to display a course detail view.",
300
336
  "message": "/courses/{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": "Sign"
401
+ },
402
+ "components.Dashboard.Signature.SignatureDummy.signing": {
403
+ "description": "Message displayed after signing the dummy contract.",
404
+ "message": "Signing the contract ..."
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": "An error happened while signing the contract. Please try again later."
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": "An error happened while signing the contract with the following status: {status}. Please refresh to try again."
413
+ },
362
414
  "components.DashboardAddressBox.delete": {
363
415
  "description": "Delete address button on the dashboard addresses list",
364
416
  "message": "Delete"
@@ -395,25 +447,21 @@
395
447
  "description": "The dashboard's breadcrumb back button's label",
396
448
  "message": "Back"
397
449
  },
398
- "components.DashboardCertificate.details": {
399
- "description": "Label for the details button of a certificate",
400
- "message": "Details"
401
- },
402
- "components.DashboardCertificate.download": {
403
- "description": "Label for the download button of a certificate",
404
- "message": "Download"
405
- },
406
- "components.DashboardCertificate.generatingCertificate": {
407
- "description": "Accessible label displayed while certificate is being generated on the dashboard.",
408
- "message": "Certificate is being generated..."
409
- },
410
450
  "components.DashboardCertificate.issuedOn": {
411
451
  "description": "Label for the date of issue of a certificate",
412
452
  "message": "Issued on {date}"
413
453
  },
414
- "components.DashboardCertificate.noCertificate": {
415
- "description": "Label displayed when no certificate is available",
416
- "message": "When all your courses will be passed, you will be able to download your certificate here."
454
+ "components.DashboardCertificate.noCertificateCertificate": {
455
+ "description": "Label displayed when no certificate certificate is available",
456
+ "message": "When you pass your exam, you will be able to download your certificate here."
457
+ },
458
+ "components.DashboardCertificate.noCertificateCredential": {
459
+ "description": "Label displayed when no certificate credential is available",
460
+ "message": "When all your courses have been passed, you will be able to download your certificate here."
461
+ },
462
+ "components.DashboardCertificate.noCertificateUnknown": {
463
+ "description": "Label displayed when we dont have the product type and no certificate is available",
464
+ "message": "When all requirements are met, you will be able to download your certificate here."
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": "Loading certificates..."
425
473
  },
474
+ "components.DashboardContracts.empty": {
475
+ "description": "Message displayed when there are no training contracts",
476
+ "message": "You have no training contract yet."
477
+ },
478
+ "components.DashboardContracts.loading": {
479
+ "description": "Message displayed while loading training contracts",
480
+ "message": "Loading training contracts..."
481
+ },
426
482
  "components.DashboardCourses.emptyList": {
427
483
  "description": "Empty placeholder of the dashboard's list of orders and enrollments",
428
484
  "message": "You have no enrollments nor orders yet."
@@ -523,22 +579,166 @@
523
579
  "description": "Label of the title input on the credit card edit page",
524
580
  "message": "Name of the credit card"
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": "The signature is taking more time than expected ... please come back later."
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": "An error happened while verifying signature. Please come back later."
589
+ },
590
+ "components.DashboardItem.Order.ContractFrame.errorSubmitForSignature": {
591
+ "description": "Message displayed inside the contract signin modal while an error occurred.",
592
+ "message": "An error happened while initializing the signature process. Please retry later."
593
+ },
594
+ "components.DashboardItem.Order.ContractFrame.finishedButton": {
595
+ "description": "Button displayed inside the contract signin modal when the contract is signed.",
596
+ "message": "Next"
597
+ },
598
+ "components.DashboardItem.Order.ContractFrame.finishedCaption": {
599
+ "description": "Title displayed inside the contract signin modal when the contract is signed.",
600
+ "message": "Congratulations!"
601
+ },
602
+ "components.DashboardItem.Order.ContractFrame.finishedDescription": {
603
+ "description": "Message displayed inside the contract signin modal when the contract is signed.",
604
+ "message": "You will receive an email once your contract will be fully signed. You can now enroll in your course runs!"
605
+ },
606
+ "components.DashboardItem.Order.ContractFrame.loadingContract": {
607
+ "description": "Message displayed inside the contract signin modal when loading the contract.",
608
+ "message": "Loading your contract ..."
609
+ },
610
+ "components.DashboardItem.Order.ContractFrame.polling": {
611
+ "description": "Message displayed inside the contract signin modal when polling the order.",
612
+ "message": "Verifying signature ..."
613
+ },
614
+ "components.DashboardItem.Order.OrderStateMessage.statusCanceled": {
615
+ "description": "Status shown on the dashboard order item when order is canceled",
616
+ "message": "Canceled"
617
+ },
618
+ "components.DashboardItem.Order.OrderStateMessage.statusCompleted": {
619
+ "description": "Status shown on the dashboard order item when order is validated with certificate",
620
+ "message": "Completed"
621
+ },
622
+ "components.DashboardItem.Order.OrderStateMessage.statusDraft": {
623
+ "description": "Status shown on the dashboard order item when order is draft.",
624
+ "message": "Draft"
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": "On going"
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": "Pending"
637
+ },
638
+ "components.DashboardItem.Order.OrderStateMessage.statusSubmitted": {
639
+ "description": "Status shown on the dashboard order item when order is submitted.",
640
+ "message": "Submitted"
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 required"
645
+ },
646
+ "components.DashboardItemCourseEnrollingRun.contractUnsigned": {
647
+ "description": "Message displayed as disabled button title when a contract needs to be signed.",
648
+ "message": "You have to sign the training contract before enrolling to your course."
649
+ },
650
+ "components.DashboardItemCourseEnrollingRun.courseRunsLoading": {
651
+ "description": "Text displayed when course runs list is loading",
652
+ "message": "Loading course runs..."
653
+ },
654
+ "components.DashboardItemCourseEnrollingRun.enrollmentNotYetOpened": {
655
+ "description": "Disclaimer that informs the user that enrollment is not yet opened",
656
+ "message": "Enrollment will open on {enrollment_start}"
657
+ },
658
+ "components.DashboardItemCourseEnrollingRun.noCourseRunAvailable": {
659
+ "description": "Text displayed when no course runs are opened for the course",
660
+ "message": "No session available for this course."
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": "Are you sure you want to change your session? You will be unrolled from the other 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": "Enroll"
669
+ },
670
+ "components.DashboardItemEnrollment.enrollRun": {
671
+ "description": "Button to enroll in a course run",
672
+ "message": "Enroll"
673
+ },
674
+ "components.DashboardItemEnrollment.enrolled": {
675
+ "description": "Text shown when user is enrolled in a course run",
676
+ "message": "Enrolled"
677
+ },
678
+ "components.DashboardItemEnrollment.enrolledRunPeriod": {
679
+ "description": "Text to display the period of a course run",
680
+ "message": "You are enrolled for the session from {startDate} to {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": "Are you sure that you want to enroll in this session?"
685
+ },
686
+ "components.DashboardItemEnrollment.gotoCourse": {
687
+ "description": "Button to access course when the user is enrolled",
688
+ "message": "Access course"
689
+ },
690
+ "components.DashboardItemEnrollment.notEnrolled": {
691
+ "description": "Text shown on a read-only not-enrolled target course",
692
+ "message": "You are not enrolled in this course"
693
+ },
694
+ "components.DashboardItemEnrollment.runPeriod": {
695
+ "description": "Text to display the period of a course run",
696
+ "message": "From {startDate} to {endDate}"
697
+ },
698
+ "components.DashboardItemEnrollment.statusNotActive": {
699
+ "description": "Text shown when a course run is not active",
700
+ "message": "Not enrolled"
701
+ },
702
+ "components.DashboardItemOrder.gotoCourse": {
703
+ "description": "Button that redirects to the order details",
704
+ "message": "View details"
705
+ },
706
+ "components.DashboardItemOrder.loadingCertificate": {
707
+ "description": "Accessible label displayed while certificate is being fetched on the dashboard.",
708
+ "message": "Loading certificate..."
709
+ },
526
710
  "components.DashboardOrderLoader.loading": {
527
711
  "description": "Message displayed while loading an order",
528
712
  "message": "Loading order ..."
529
713
  },
530
- "components.DashboardSidebar.responsiveNavLabel": {
531
- "description": "a11y related label for select input used to navigate on responsive",
532
- "message": "Navigate to"
714
+ "components.DashboardOrderLoader.signatureNeeded": {
715
+ "description": "Banner displayed when the contract is not signed",
716
+ "message": "You need to sign your contract before enrolling in a course run"
533
717
  },
534
- "components.DashboardSidebar.settingsLinkLabel": {
535
- "description": "label of the settings link",
536
- "message": "Settings"
718
+ "components.DashboardOrderLoader.wrongLinkedProductError": {
719
+ "description": "Error message displayed when order's linked product type is not handle.",
720
+ "message": "This page is not available for this order."
537
721
  },
538
722
  "components.DesktopUserMenu.menuPurpose": {
539
723
  "description": "Accessible label for user menu button",
540
724
  "message": "Acceso a la configuración de su perfil"
541
725
  },
726
+ "components.DownloadCertificateButton.download": {
727
+ "description": "Label for the download button of a certificate",
728
+ "message": "Download"
729
+ },
730
+ "components.DownloadCertificateButton.generatingCertificate": {
731
+ "description": "Accessible label displayed while certificate is being generated.",
732
+ "message": "Certificate is being generated..."
733
+ },
734
+ "components.DownloadContractButton.contractDownloadActionLabel": {
735
+ "description": "Label of \"download contract\" action.",
736
+ "message": "Download"
737
+ },
738
+ "components.DownloadContractButton.contractDownloadError": {
739
+ "description": "Message displayed when the order's contract download fails.",
740
+ "message": "An error happened while downloading the training contract. Please try again later."
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": "Select course run from {start} to {end}."
@@ -591,6 +791,26 @@
591
791
  "description": "Text label for the enrollment dates when enrollment is opened",
592
792
  "message": "Enrollment until {date}"
593
793
  },
794
+ "components.Form.utils.errors.mixedInvalid": {
795
+ "description": "Error message displayed when a field value is invalid.",
796
+ "message": "This field is invalid."
797
+ },
798
+ "components.Form.utils.errors.mixedOneOf": {
799
+ "description": "Error message displayed when a field value must be one of a list.",
800
+ "message": "You must select a value."
801
+ },
802
+ "components.Form.utils.errors.mixedRequired": {
803
+ "description": "Error message displayed when a field is required.",
804
+ "message": "This field is required."
805
+ },
806
+ "components.Form.utils.errors.stringMax": {
807
+ "description": "Error message displayed when a field value is too long.",
808
+ "message": "The maximum length is {max} {max, plural, one {char} other {chars}}."
809
+ },
810
+ "components.Form.utils.errors.stringMin": {
811
+ "description": "Error message displayed when a field value is too short.",
812
+ "message": "The minimum length is {min} {min, plural, one {char} other {chars}}."
813
+ },
594
814
  "components.LanguageSelector.currentlySelected": {
595
815
  "description": "Accessible hint to mark the currently selected language in the language selector",
596
816
  "message": "(actualmente seleccionado)"
@@ -611,6 +831,14 @@
611
831
  "description": "Text for the button to close the modal",
612
832
  "message": "Close dialog"
613
833
  },
834
+ "components.NavigationSelect.responsiveNavLabel": {
835
+ "description": "a11y related label for select input used to navigate on responsive",
836
+ "message": "Navigate to"
837
+ },
838
+ "components.NavigationSelect.settingsLinkLabel": {
839
+ "description": "label of the settings link",
840
+ "message": "Settings"
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": "Leyendo la última página {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": "There are no more places available for this product."
661
889
  },
890
+ "components.PaymentButton.errorTerms": {
891
+ "description": "Error message shown when the user didn't check the terms checkbox.",
892
+ "message": "You must accept the terms."
893
+ },
662
894
  "components.PaymentButton.pay": {
663
895
  "description": "CTA label to proceed to the payment of the product",
664
896
  "message": "Pagar {price}€"
@@ -671,6 +903,22 @@
671
903
  "description": "Label for screen reader when a payment is in progress.",
672
904
  "message": "Pago en curso"
673
905
  },
906
+ "components.PaymentButton.termsMessage": {
907
+ "description": "Message next to the checkbox in order to accept the terms",
908
+ "message": "By checking this box, you accept the"
909
+ },
910
+ "components.ProductCertificateFooter.buyProductCertificateLabel": {
911
+ "description": "Label on the enrollement row that propose to buy a product of type certificate",
912
+ "message": "An exam which delivers a certificate can be purchased for this course."
913
+ },
914
+ "components.ProductCertificateFooter.downloadProductCertificateLabel": {
915
+ "description": "Label on the enrollement row that propose to download a certificate",
916
+ "message": "A certificate is available for download."
917
+ },
918
+ "components.ProductCertificateFooter.pendingProductCertificateLabel": {
919
+ "description": "Label on the enrollement when a product of type certificate have been bought",
920
+ "message": "Finish this course to obtain your certificate."
921
+ },
674
922
  "components.RegisteredCreditCard.expirationDate": {
675
923
  "description": "Credit card expiration date label",
676
924
  "message": "Expiration date: {expirationDate}"
@@ -691,9 +939,13 @@
691
939
  "description": "Label displayed inside the product's CTA when user is not logged in",
692
940
  "message": "Login to purchase {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": "The course run is not active. This product is not currently available for sale."
945
+ },
946
+ "components.SaleTunnel.noCourseRunToPurchaseCredential": {
695
947
  "description": "Label displayed below the product's CTA when there is no courseRun",
696
- "message": "At least one course has no course runs, this product is not currently available for sale"
948
+ "message": "At least one course has no course runs. This product is not currently available for sale."
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": "You are about to purchase"
721
973
  },
974
+ "components.SaleTunnelStepPayment.termsMessageLink": {
975
+ "description": "Clickable link included in the terms message",
976
+ "message": "General Terms of Sale"
977
+ },
978
+ "components.SaleTunnelStepPayment.termsMessageLinkTitle": {
979
+ "description": "Title of clickable link included in the terms message",
980
+ "message": "Open a preview of the General Terms of Sale"
981
+ },
722
982
  "components.SaleTunnelStepPayment.userBillingAddressAddLabel": {
723
983
  "description": "Label for the billing address add button",
724
984
  "message": "Add an address"
@@ -751,10 +1011,18 @@
751
1011
  "description": "Label to the call to action to close sale tunnel",
752
1012
  "message": "Start this course now!"
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": "Sign the training contract"
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": "You will receive your invoice by email in a few moments."
757
1021
  },
1022
+ "components.SaleTunnelStepResume.successDetailSignatureMessage": {
1023
+ "description": "Text to remind that order needs to be signed",
1024
+ "message": "In order to enroll to course runs you first need to sign the training contract."
1025
+ },
758
1026
  "components.SaleTunnelStepResume.successMessage": {
759
1027
  "description": "Message to confirm that order has been created",
760
1028
  "message": "Your order has been successfully created."
@@ -867,6 +1135,18 @@
867
1135
  "description": "Placeholder text displayed in the search field when it is empty.",
868
1136
  "message": "Buscar cursos, organizaciones, categorías"
869
1137
  },
1138
+ "components.SignContractButton.contractDownloadActionLabel": {
1139
+ "description": "Label of \"download contract\" action.",
1140
+ "message": "Download"
1141
+ },
1142
+ "components.SignContractButton.contractDownloadError": {
1143
+ "description": "Message displayed when the order's contract download fails.",
1144
+ "message": "An error happened while downloading the training contract. Please try again later."
1145
+ },
1146
+ "components.SignContractButton.contractSignActionLabel": {
1147
+ "description": "Label of \"sign contract\" action.",
1148
+ "message": "Sign"
1149
+ },
870
1150
  "components.StepBreadcrumb.stepCount": {
871
1151
  "description": "Info about current step, not visible, only announced by screen readers",
872
1152
  "message": "Step {current, number} of {total, number} {active, select, true {(active)} other {}}"
@@ -947,49 +1227,13 @@
947
1227
  "description": "Button displayed on the syllabus when not all course runs are displayed",
948
1228
  "message": "View more"
949
1229
  },
950
- "components.TeacherCourseDashboardLoader.errorNoCourse": {
951
- "description": "Message displayed when requested course is not found",
952
- "message": "This course doesn't exist"
1230
+ "components.TeacherDashboard.TeacherDashboardRoutes.course.contracts.label": {
1231
+ "description": "Label of the course contracts view.",
1232
+ "message": "Contracts"
953
1233
  },
954
- "components.TeacherCourseDashboardLoader.loading": {
955
- "description": "Message displayed while loading a course",
956
- "message": "Loading course..."
957
- },
958
- "components.TeacherCourseDashboardLoader.pageTitle": {
959
- "description": "Use for the page title of the course area",
960
- "message": "Course area"
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": "Loading course..."
969
- },
970
- "components.TeacherCourseDashboardSidebar.subHeader": {
971
- "description": "Sub title of the course dashboard sidebar",
972
- "message": "You are on the course dashboard"
973
- },
974
- "components.TeacherCourseDashboardSidebar.syllabusLinkLabel": {
975
- "description": "Syllabus link label",
976
- "message": "Go to syllabus"
977
- },
978
- "components.TeacherCoursesDashboardLoader.title.archived": {
979
- "description": "Archived courses title",
980
- "message": "Archived"
981
- },
982
- "components.TeacherCoursesDashboardLoader.title.filteredCourses": {
983
- "description": "Filtered courses title",
984
- "message": "Your courses"
985
- },
986
- "components.TeacherCoursesDashboardLoader.title.incoming": {
987
- "description": "Incoming courses title",
988
- "message": "Incoming"
989
- },
990
- "components.TeacherCoursesDashboardLoader.title.ongoing": {
991
- "description": "Ongoing courses title",
992
- "message": "Ongoing"
1234
+ "components.TeacherDashboard.TeacherDashboardRoutes.course.contracts.path": {
1235
+ "description": "The path to display a course contracts view.",
1236
+ "message": "/teacher/courses/{courseId}/contracts"
993
1237
  },
994
1238
  "components.TeacherDashboard.TeacherDashboardRoutes.course.generalInformation.path": {
995
1239
  "description": "The path to display the course general information view.",
@@ -1003,6 +1247,14 @@
1003
1247
  "description": "The path to display the course view.",
1004
1248
  "message": "/teacher/courses/{courseId}"
1005
1249
  },
1250
+ "components.TeacherDashboard.TeacherDashboardRoutes.course.product.contracts.label": {
1251
+ "description": "Label of the product contracts view.",
1252
+ "message": "Contracts"
1253
+ },
1254
+ "components.TeacherDashboard.TeacherDashboardRoutes.course.product.contracts.path": {
1255
+ "description": "The path to display a product contracts view.",
1256
+ "message": "/teacher/courses/{courseId}/products/{courseProductRelationId}/contracts"
1257
+ },
1006
1258
  "components.TeacherDashboard.TeacherDashboardRoutes.course.product.label": {
1007
1259
  "description": "Label of the product view.",
1008
1260
  "message": "Training"
@@ -1015,6 +1267,22 @@
1015
1267
  "description": "Label of the course general information view.",
1016
1268
  "message": "General information"
1017
1269
  },
1270
+ "components.TeacherDashboard.TeacherDashboardRoutes.organization.contracts.label": {
1271
+ "description": "Label of the organization contracts view.",
1272
+ "message": "Contracts"
1273
+ },
1274
+ "components.TeacherDashboard.TeacherDashboardRoutes.organization.contracts.path": {
1275
+ "description": "The path to display the organization contracts view.",
1276
+ "message": "/teacher/organizations/{organizationId}/contracts"
1277
+ },
1278
+ "components.TeacherDashboard.TeacherDashboardRoutes.organization.course.contracts.label": {
1279
+ "description": "Label of the organization course's contracts view.",
1280
+ "message": "Contracts"
1281
+ },
1282
+ "components.TeacherDashboard.TeacherDashboardRoutes.organization.course.contracts.path": {
1283
+ "description": "The path to display the organization course's contracts view.",
1284
+ "message": "/teacher/organizations/{organizationId}/courses/{courseId}/contracts"
1285
+ },
1018
1286
  "components.TeacherDashboard.TeacherDashboardRoutes.organization.course.generalInformation.label": {
1019
1287
  "description": "Label of the organization course general information view.",
1020
1288
  "message": "General information"
@@ -1023,6 +1291,14 @@
1023
1291
  "description": "The path to display the organization course general information view.",
1024
1292
  "message": "/teacher/organizations/{organizationId}/courses/{courseId}/information"
1025
1293
  },
1294
+ "components.TeacherDashboard.TeacherDashboardRoutes.organization.course.product.contracts.label": {
1295
+ "description": "Label of the organization product's contracts view.",
1296
+ "message": "Contracts"
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/organizations/{organizationId}/courses/{courseId}/products/{courseProductRelationId}/contracts"
1301
+ },
1026
1302
  "components.TeacherDashboard.TeacherDashboardRoutes.organization.course.product.label": {
1027
1303
  "description": "Label of the organization product view.",
1028
1304
  "message": "Training"
@@ -1075,43 +1351,87 @@
1075
1351
  "description": "Message displayed while loading trainings on the teacher's dashboard'",
1076
1352
  "message": "Loading courses..."
1077
1353
  },
1078
- "components.TeacherOrganizationCourseDashboardLoader.loading": {
1354
+ "components.TeacherDashboardCourseLoader.errorNoCourse": {
1355
+ "description": "Message displayed when requested course is not found",
1356
+ "message": "This course doesn't exist"
1357
+ },
1358
+ "components.TeacherDashboardCourseLoader.loading": {
1359
+ "description": "Message displayed while loading a course",
1360
+ "message": "Loading course..."
1361
+ },
1362
+ "components.TeacherDashboardCourseLoader.pageTitle": {
1363
+ "description": "Use for the page title of the course area",
1364
+ "message": "Course area"
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": "Loading course..."
1373
+ },
1374
+ "components.TeacherDashboardCourseSidebar.subHeader": {
1375
+ "description": "Sub title of the course dashboard sidebar",
1376
+ "message": "You are on the course dashboard"
1377
+ },
1378
+ "components.TeacherDashboardCourseSidebar.syllabusLinkLabel": {
1379
+ "description": "Syllabus link label",
1380
+ "message": "Go to syllabus"
1381
+ },
1382
+ "components.TeacherDashboardCoursesLoader.title.archived": {
1383
+ "description": "Archived courses title",
1384
+ "message": "Archived"
1385
+ },
1386
+ "components.TeacherDashboardCoursesLoader.title.filteredCourses": {
1387
+ "description": "Filtered courses title",
1388
+ "message": "Your courses"
1389
+ },
1390
+ "components.TeacherDashboardCoursesLoader.title.incoming": {
1391
+ "description": "Incoming courses title",
1392
+ "message": "Incoming"
1393
+ },
1394
+ "components.TeacherDashboardCoursesLoader.title.ongoing": {
1395
+ "description": "Ongoing courses title",
1396
+ "message": "Ongoing"
1397
+ },
1398
+ "components.TeacherDashboardOrganizationCourseLoader.loading": {
1079
1399
  "description": "Message displayed while loading an organization",
1080
1400
  "message": "Loading organization ..."
1081
1401
  },
1082
- "components.TeacherOrganizationCourseDashboardLoader.title": {
1402
+ "components.TeacherDashboardOrganizationCourseLoader.title": {
1083
1403
  "description": "Message displayed as title of organization courses page",
1084
1404
  "message": "Courses of {organizationTitle}"
1085
1405
  },
1086
- "components.TeacherOrganizationDashboardSidebar.loading": {
1406
+ "components.TeacherDashboardOrganizationSidebar.loading": {
1087
1407
  "description": "Message displayed while loading an organization",
1088
1408
  "message": "Loading organization..."
1089
1409
  },
1090
- "components.TeacherOrganizationDashboardSidebar.subHeader": {
1410
+ "components.TeacherDashboardOrganizationSidebar.subHeader": {
1091
1411
  "description": "Sub title of the organization dashboard sidebar",
1092
1412
  "message": "You are on the organization dashboard"
1093
1413
  },
1094
- "components.TeacherProfileDashboardSidebar.OrganizationLinks.organizationLinkTitle": {
1414
+ "components.TeacherDashboardProfileSidebar.OrganizationLinks.organizationLinkTitle": {
1095
1415
  "description": "Organization link title",
1096
1416
  "message": "Link to organization \"{organizationTitle}\""
1097
1417
  },
1098
- "components.TeacherProfileDashboardSidebar.OrganizationLinks.organizationsTitle": {
1418
+ "components.TeacherDashboardProfileSidebar.OrganizationLinks.organizationsTitle": {
1099
1419
  "description": "Title of the organizations section",
1100
1420
  "message": "My universities"
1101
1421
  },
1102
- "components.TeacherProfileDashboardSidebar.subHeader": {
1422
+ "components.TeacherDashboardProfileSidebar.subHeader": {
1103
1423
  "description": "Sub title of the dashboard sidebar",
1104
1424
  "message": "You are on your teacher dashboard"
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": "This product doesn't exist"
1109
1429
  },
1110
- "components.TeacherTrainingDashboardLoader.loading": {
1430
+ "components.TeacherDashboardTrainingLoader.loading": {
1111
1431
  "description": "Message displayed while loading a course",
1112
1432
  "message": "Loading training..."
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": "Training area"
1117
1437
  },
@@ -1131,6 +1451,14 @@
1131
1451
  "description": "Accessibility text for the spinner in the login area.",
1132
1452
  "message": "Cargando estado de inicio de sesión..."
1133
1453
  },
1454
+ "components.form.messages.formOptionalFieldsText": {
1455
+ "description": "Text at the top of forms indicating what are optional fields",
1456
+ "message": "All fields are required unless marked optional"
1457
+ },
1458
+ "components.form.messages.optionalFieldText": {
1459
+ "description": "text display under form elements that are optional",
1460
+ "message": "(optional)"
1461
+ },
1134
1462
  "components.useStaticFilters.courses": {
1135
1463
  "description": "localized human_name label for coursesConfig filter name",
1136
1464
  "message": "Cursos"
@@ -1179,6 +1507,14 @@
1179
1507
  "description": "Error message shown to the user when no certificate matches.",
1180
1508
  "message": "Cannot find the certificate"
1181
1509
  },
1510
+ "hooks.useContracts.errorNotFound": {
1511
+ "description": "Error message shown to the user when no contract matches.",
1512
+ "message": "Cannot find the contract"
1513
+ },
1514
+ "hooks.useContracts.errorSelect": {
1515
+ "description": "Error message shown to the user when contracts fetch request fails.",
1516
+ "message": "An error occurred while fetching contracts. Please retry later."
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": "An error occurred while fetching trainings. Please retry later."
@@ -1191,6 +1527,14 @@
1191
1527
  "description": "Error message shown to the user when trainings fetch request fails.",
1192
1528
  "message": "An error occurred while fetching trainings. Please retry later."
1193
1529
  },
1530
+ "hooks.useCourseProducts.errorGet": {
1531
+ "description": "Error message shown to the user when product fetch request fails.",
1532
+ "message": "An error occurred while fetching product. Please retry later."
1533
+ },
1534
+ "hooks.useCourseProducts.errorNotFound": {
1535
+ "description": "Error message shown to the user when no product matches.",
1536
+ "message": "Cannot find the product."
1537
+ },
1194
1538
  "hooks.useCourseRuns.errorGet": {
1195
1539
  "description": "Error message shown to the user when course runs fetch request fails.",
1196
1540
  "message": "An error occurred while fetching course runs. Please retry later."
@@ -1259,6 +1603,14 @@
1259
1603
  "description": "Error message shown to the user when enrollment update request fails.",
1260
1604
  "message": "An error occurred while updating the enrollment. Please retry later."
1261
1605
  },
1606
+ "hooks.useJoanieUserProfile.errorGet": {
1607
+ "description": "Error message shown to the user when user fetch request fails.",
1608
+ "message": "An error occurred while fetching user profile information. Please retry later."
1609
+ },
1610
+ "hooks.useJoanieUserProfile.errorNotFound": {
1611
+ "description": "Error message shown to the user when it isn't logged.",
1612
+ "message": "You aren't logged in."
1613
+ },
1262
1614
  "hooks.useOrders.errorGet": {
1263
1615
  "description": "Error message shown to the user when orders fetch request fails.",
1264
1616
  "message": "An error occurred while fetching orders. Please retry later."
@@ -1279,14 +1631,6 @@
1279
1631
  "description": "Error message shown to the user when organizations fetch request fails.",
1280
1632
  "message": "An error occurred while fetching organizations. Please retry later."
1281
1633
  },
1282
- "hooks.useProduct.errorGet": {
1283
- "description": "Error message shown to the user when product fetch request fails.",
1284
- "message": "An error occurred while fetching product. Please retry later."
1285
- },
1286
- "hooks.useProduct.errorNotFound": {
1287
- "description": "Error message shown to the user when no product matches.",
1288
- "message": "Cannot find the product."
1289
- },
1290
1634
  "hooks.useResources.errorCreate": {
1291
1635
  "description": "Error message shown to the user when resource creation request fails.",
1292
1636
  "message": "An error occurred while creating a resource. Please retry later."
@@ -1327,6 +1671,62 @@
1327
1671
  "description": "Error message shown to the user when no wishlist matches.",
1328
1672
  "message": "Cannot find the wishlist."
1329
1673
  },
1674
+ "pages.TeacherDashboardContractsLayout.ContractFilters.contractSignatureStateFilterLabel": {
1675
+ "description": "Contract signature state filter label",
1676
+ "message": "Signature state"
1677
+ },
1678
+ "pages.TeacherDashboardContractsLayout.ContractFilters.organizationFilterLabel": {
1679
+ "description": "Use as organization filter label",
1680
+ "message": "Organization"
1681
+ },
1682
+ "pages.TeacherDashboardCourseContractsLayout.pageTitle": {
1683
+ "description": "Use for the page title of the course's contracts page",
1684
+ "message": "Contracts"
1685
+ },
1686
+ "pages.TeacherDashboardOrganizationContractsLayout.columnLearnerName": {
1687
+ "description": "Label for learnerName column",
1688
+ "message": "Learner"
1689
+ },
1690
+ "pages.TeacherDashboardOrganizationContractsLayout.columnProductTitle": {
1691
+ "description": "Label for productTitle column",
1692
+ "message": "Training"
1693
+ },
1694
+ "pages.TeacherDashboardOrganizationContractsLayout.columnState": {
1695
+ "description": "Label for state column",
1696
+ "message": "State"
1697
+ },
1698
+ "pages.TeacherDashboardOrganizationContractsLayout.pageTitle": {
1699
+ "description": "Use for the page title of the organization contracts area",
1700
+ "message": "Contracts"
1701
+ },
1702
+ "pages.TeacherDashboardOrganizationContractsLayout.signAllPendingContracts": {
1703
+ "description": "Button to sign all pending contracts",
1704
+ "message": "Sign all pending contracts ({ count })"
1705
+ },
1706
+ "utils.ContractHelper.learnerHalfSigned": {
1707
+ "description": "Label for unsigned contract status in learner point of view",
1708
+ "message": "Pending for organization signature"
1709
+ },
1710
+ "utils.ContractHelper.learnerSigned": {
1711
+ "description": "Label for signed contract status in learner point of view",
1712
+ "message": "Signed"
1713
+ },
1714
+ "utils.ContractHelper.learnerUnsigned": {
1715
+ "description": "Label for unsigned contract status in learner point of view",
1716
+ "message": "Pending for signature"
1717
+ },
1718
+ "utils.ContractHelper.organizationHalfSigned": {
1719
+ "description": "Label for half signed contract status in organization point of view",
1720
+ "message": "Pending for signature"
1721
+ },
1722
+ "utils.ContractHelper.organizationSigned": {
1723
+ "description": "Label for signed contract status in organization point of view",
1724
+ "message": "Signed"
1725
+ },
1726
+ "utils.ContractHelper.organizationUnsigned": {
1727
+ "description": "Label for unsigned contract status in organization point of view",
1728
+ "message": "Pending for learner signature"
1729
+ },
1330
1730
  "utils.joinAnd.and": {
1331
1731
  "description": "The and word",
1332
1732
  "message": "and"