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": "Apelido do destinatário"
69
69
  },
70
+ "components.AddressesManagement.optionalFieldText": {
71
+ "description": "text Displayed below form elements that are optional",
72
+ "message": "(opcional)"
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": "Atualizar este endereço"
105
109
  },
106
- "components.AddressesManagement.validationSchema.mixedInvalid": {
107
- "description": "Error message displayed when a field value is invalid.",
108
- "message": "Este campo é inválido."
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": "Tem de definir um valor."
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": "Este campo é obrigatório."
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": "O tamanho máximo é de {max} {max, plural, one {caractere} other {caracteres}}."
122
+ "components.ContractStatus.waitingSignature": {
123
+ "description": "Label displayed when a training contract need to be signed by the learner",
124
+ "message": "Tem de assinar o contrato de formação para ter acesso à formação."
121
125
  },
122
- "components.AddressesManagement.validationSchema.stringMin": {
123
- "description": "Error message displayed when a field value is too short.",
124
- "message": "O tamanho mínimo é de {min} {min, plural, one {caractere} other {caracteres}}."
126
+ "components.CountrySelectField.label": {
127
+ "description": "label of the country select",
128
+ "message": "País"
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": "Organização"
157
161
  },
162
+ "components.CourseGlimpse.organizationsTitle": {
163
+ "description": "Organizations title for multiple organizations",
164
+ "message": "Produzido pelos parceiros {nbOrganizations}"
165
+ },
158
166
  "components.CourseGlimpseFooter.dateIconAlt": {
159
167
  "description": "Course date logo alternative text for screen reader users",
160
168
  "message": "Data do curso"
@@ -185,16 +193,28 @@
185
193
  },
186
194
  "components.CourseProductItem.availableIn": {
187
195
  "description": "Course run languages",
188
- "message": "Available in {languages}"
196
+ "message": "Disponível em {languages}"
197
+ },
198
+ "components.CourseProductItem.contractSignActionLabel": {
199
+ "description": "Label of \"sign contract\" action on the syllabus.",
200
+ "message": "Assine o seu contrato de formação"
189
201
  },
190
202
  "components.CourseProductItem.fromTo": {
191
203
  "description": "Course run date range",
192
- "message": "From {from} to {to}"
204
+ "message": "De {from} a {to}"
193
205
  },
194
206
  "components.CourseProductItem.loadingInitial": {
195
207
  "description": "Accessible text for the initial loading spinner displayed when product is fetching",
196
208
  "message": "A carregar informação do produto..."
197
209
  },
210
+ "components.CourseProductItem.nbSeatsAvailable": {
211
+ "description": "Message displayed when seats are available for the product",
212
+ "message": "{ nb, plural, =0 {Sem vagas disponíveis} one {Última vaga disponível!} other {# vagas disponíveis} }"
213
+ },
214
+ "components.CourseProductItem.noSeatsAvailable": {
215
+ "description": "Message displayed when no seats are available for the product",
216
+ "message": "Não existem vagas disponíveis por agora. Pedimos desculpa"
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": "Pendente"
@@ -203,6 +223,10 @@
203
223
  "description": "Message displayed when authenticated user owned the product",
204
224
  "message": "Comprado"
205
225
  },
226
+ "components.CourseProductItem.signatureNeeded": {
227
+ "description": "Banner displayed when the contract is not signed on the syllabus",
228
+ "message": "É necessário assinar o contrato de formação antes de se inscrever numa edição curso"
229
+ },
206
230
  "components.CourseProductsList.end": {
207
231
  "description": "End label displayed in the header of course run dates section",
208
232
  "message": "Fim"
@@ -211,6 +235,10 @@
211
235
  "description": "Start label displayed in the header of course run dates section",
212
236
  "message": "Início"
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": "Inscreva-se já"
@@ -261,11 +289,11 @@
261
289
  },
262
290
  "components.CourseRunItemWithEnrollment.enrolled": {
263
291
  "description": "Help text for users are enrolled in the course run.",
264
- "message": "Enrolled"
292
+ "message": "Inscrito"
265
293
  },
266
294
  "components.CourseRunItemWithEnrollment.enrolledAriaLabel": {
267
295
  "description": "Help text for users are enrolled in the course run.",
268
- "message": "You are enrolled in this course run"
296
+ "message": "Está inscrito nesta edição do curso"
269
297
  },
270
298
  "components.CourseRunItemWithEnrollment.goToCourse": {
271
299
  "description": "Link title for users to go to the course run in which they are enrolled.",
@@ -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": "de {from} a {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": "/certificados"
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": "/cursos/{code}"
@@ -321,7 +357,7 @@
321
357
  },
322
358
  "components.Dashboard.DashboardRoutes.order.runs.label": {
323
359
  "description": "Label of the order runs view used in navigation components.",
324
- "message": "General information"
360
+ "message": "Informação geral"
325
361
  },
326
362
  "components.Dashboard.DashboardRoutes.order.runs.path": {
327
363
  "description": "The path to display an order runs view.",
@@ -359,6 +395,22 @@
359
395
  "description": "The path to display the preferences view.",
360
396
  "message": "/preferências"
361
397
  },
398
+ "components.Dashboard.Signature.SignatureDummy.button": {
399
+ "description": "Button displayed below the dummy contract.",
400
+ "message": "Assinar"
401
+ },
402
+ "components.Dashboard.Signature.SignatureDummy.signing": {
403
+ "description": "Message displayed after signing the dummy contract.",
404
+ "message": "Assinando o contrato..."
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": "Ocorreu um erro ao assinar o contrato. Por favor, tente novamente mais tarde."
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": "Ocorreu um erro ao assinar o contrato com o seguinte status: {status}. Por favor, atualize para tentar novamente."
413
+ },
362
414
  "components.DashboardAddressBox.delete": {
363
415
  "description": "Delete address button on the dashboard addresses list",
364
416
  "message": "Eliminar"
@@ -395,25 +447,21 @@
395
447
  "description": "The dashboard's breadcrumb back button's label",
396
448
  "message": "Voltar"
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": "Emitido em {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": "Após obter aprovação no exame, poderá descarregar o seu certificado aqui."
457
+ },
458
+ "components.DashboardCertificate.noCertificateCredential": {
459
+ "description": "Label displayed when no certificate credential is available",
460
+ "message": "Após obter aprovação em todos os cursos, poderá descarregar o seu certificado aqui."
461
+ },
462
+ "components.DashboardCertificate.noCertificateUnknown": {
463
+ "description": "Label displayed when we dont have the product type and no certificate is available",
464
+ "message": "Quando todos os requisitos estiverem cumpridos, poderá descarregar o seu certificado aqui."
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": "Carregando os certificados..."
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": "Não tem inscrições nem pedidos."
@@ -523,22 +579,166 @@
523
579
  "description": "Label of the title input on the credit card edit page",
524
580
  "message": "Nome do cartão de crédito"
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": "A assinatura está a demorar mais tempo do que o esperado... por favor tente mais tarde."
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": "Seguinte"
597
+ },
598
+ "components.DashboardItem.Order.ContractFrame.finishedCaption": {
599
+ "description": "Title displayed inside the contract signin modal when the contract is signed.",
600
+ "message": "Parabéns!"
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": "A carregar o contrato ..."
609
+ },
610
+ "components.DashboardItem.Order.ContractFrame.polling": {
611
+ "description": "Message displayed inside the contract signin modal when polling the order.",
612
+ "message": "A verificar a assinatura ..."
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": "A carregar o pedido..."
529
713
  },
530
- "components.DashboardSidebar.responsiveNavLabel": {
531
- "description": "a11y related label for select input used to navigate on responsive",
532
- "message": "Navegar para"
714
+ "components.DashboardOrderLoader.signatureNeeded": {
715
+ "description": "Banner displayed when the contract is not signed",
716
+ "message": "É necessário assinar o contrato antes de se inscrever numa edição do curso"
533
717
  },
534
- "components.DashboardSidebar.settingsLinkLabel": {
535
- "description": "label of the settings link",
536
- "message": "Definições"
718
+ "components.DashboardOrderLoader.wrongLinkedProductError": {
719
+ "description": "Error message displayed when order's linked product type is not handle.",
720
+ "message": "Esta página não está disponível para este pedido."
537
721
  },
538
722
  "components.DesktopUserMenu.menuPurpose": {
539
723
  "description": "Accessible label for user menu button",
540
724
  "message": "Acesso às suas configurações de perfil"
541
725
  },
726
+ "components.DownloadCertificateButton.download": {
727
+ "description": "Label for the download button of a certificate",
728
+ "message": "Descarregar"
729
+ },
730
+ "components.DownloadCertificateButton.generatingCertificate": {
731
+ "description": "Accessible label displayed while certificate is being generated.",
732
+ "message": "O certificado está a ser gerado..."
733
+ },
734
+ "components.DownloadContractButton.contractDownloadActionLabel": {
735
+ "description": "Label of \"download contract\" action.",
736
+ "message": "Descarregar"
737
+ },
738
+ "components.DownloadContractButton.contractDownloadError": {
739
+ "description": "Message displayed when the order's contract download fails.",
740
+ "message": "Ocorreu um erro ao descarregar o contrato de formação. Por favor, tente mais tarde."
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": "Escolher edição do curso de {start} a {end}."
@@ -585,11 +785,31 @@
585
785
  },
586
786
  "components.EnrollmentDate.enrollFrom": {
587
787
  "description": "Text label for the enrollment dates when enrollment is not yet opened",
588
- "message": "Enrollment from {date}"
788
+ "message": "Inscrito desde {date}"
589
789
  },
590
790
  "components.EnrollmentDate.enrollUntil": {
591
791
  "description": "Text label for the enrollment dates when enrollment is opened",
592
- "message": "Enrollment until {date}"
792
+ "message": "Inscrito até {date}"
793
+ },
794
+ "components.Form.utils.errors.mixedInvalid": {
795
+ "description": "Error message displayed when a field value is invalid.",
796
+ "message": "Este campo é inválido."
797
+ },
798
+ "components.Form.utils.errors.mixedOneOf": {
799
+ "description": "Error message displayed when a field value must be one of a list.",
800
+ "message": "É necessário selecionar um valor."
801
+ },
802
+ "components.Form.utils.errors.mixedRequired": {
803
+ "description": "Error message displayed when a field is required.",
804
+ "message": "Este campo é obrigatório."
805
+ },
806
+ "components.Form.utils.errors.stringMax": {
807
+ "description": "Error message displayed when a field value is too long.",
808
+ "message": "O comprimento máximo é de {max} {max, plural, one {carácter} other {carácteres}}."
809
+ },
810
+ "components.Form.utils.errors.stringMin": {
811
+ "description": "Error message displayed when a field value is too short.",
812
+ "message": "O comprimento mínimo é de {min} {min, plural, one {carácter} other {carácteres}}."
593
813
  },
594
814
  "components.LanguageSelector.currentlySelected": {
595
815
  "description": "Accessible hint to mark the currently selected language in the language selector",
@@ -611,6 +831,14 @@
611
831
  "description": "Text for the button to close the modal",
612
832
  "message": "Fechar janela de diálogo"
613
833
  },
834
+ "components.NavigationSelect.responsiveNavLabel": {
835
+ "description": "a11y related label for select input used to navigate on responsive",
836
+ "message": "Navegar para"
837
+ },
838
+ "components.NavigationSelect.settingsLinkLabel": {
839
+ "description": "label of the settings link",
840
+ "message": "Definições"
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": "A ler a ú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": "Não existem lugares disponíveis neste produto."
661
889
  },
890
+ "components.PaymentButton.errorTerms": {
891
+ "description": "Error message shown when the user didn't check the terms checkbox.",
892
+ "message": "Têm de aceitar os termos para prosseguir."
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": "A processar pagamento"
673
905
  },
906
+ "components.PaymentButton.termsMessage": {
907
+ "description": "Message next to the checkbox in order to accept the terms",
908
+ "message": "Ao marcar esta caixa, aceita os"
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": "Expira a {expirationDate}"
@@ -691,9 +939,13 @@
691
939
  "description": "Label displayed inside the product's CTA when user is not logged in",
692
940
  "message": "Faça entrar para comprar {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": "A execução do curso não está ativa. Este produto não está atualmente disponível para venda."
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": "Pelo menos um curso não tem nenhuma edição. Este produto não está atualmente disponível para venda."
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": "Está prestes a concluir a compra"
721
973
  },
974
+ "components.SaleTunnelStepPayment.termsMessageLink": {
975
+ "description": "Clickable link included in the terms message",
976
+ "message": "Termos Gerais de Venda"
977
+ },
978
+ "components.SaleTunnelStepPayment.termsMessageLinkTitle": {
979
+ "description": "Title of clickable link included in the terms message",
980
+ "message": "Abrir um pré-visualização dos Termos Gerais de Venda"
981
+ },
722
982
  "components.SaleTunnelStepPayment.userBillingAddressAddLabel": {
723
983
  "description": "Label for the billing address add button",
724
984
  "message": "Adicionar um endereço"
@@ -751,10 +1011,18 @@
751
1011
  "description": "Label to the call to action to close sale tunnel",
752
1012
  "message": "Iniciar este curso agora!"
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": "Assine o seu contrato de formação"
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": "Dentro de instantes receberá a sua fatura por e-mail."
757
1021
  },
1022
+ "components.SaleTunnelStepResume.successDetailSignatureMessage": {
1023
+ "description": "Text to remind that order needs to be signed",
1024
+ "message": "Para se inscrever numa edição do curso, necessita primeiro de assinar o seu contrato de formação."
1025
+ },
758
1026
  "components.SaleTunnelStepResume.successMessage": {
759
1027
  "description": "Message to confirm that order has been created",
760
1028
  "message": "O seu pedido foi criado com sucesso."
@@ -773,11 +1041,11 @@
773
1041
  },
774
1042
  "components.SaleTunnelStepValidation.language": {
775
1043
  "description": "Label displayed before the list of languages",
776
- "message": "{ count, plural, one {Language:} other {Languages:} }"
1044
+ "message": "{ count, plural, one {Língua:} other {Línguas:} }"
777
1045
  },
778
1046
  "components.SaleTunnelStepValidation.noCourseRunAvailable": {
779
1047
  "description": "Text displayed when no course run are opened for the course",
780
- "message": "No session available for this course."
1048
+ "message": "Não existem sessões disponíveis para este curso."
781
1049
  },
782
1050
  "components.SaleTunnelStepValidation.proceedToPayment": {
783
1051
  "description": "CTA to go to payment step",
@@ -867,6 +1135,18 @@
867
1135
  "description": "Placeholder text displayed in the search field when it is empty.",
868
1136
  "message": "Pesquisar cursos, organizações, categorias"
869
1137
  },
1138
+ "components.SignContractButton.contractDownloadActionLabel": {
1139
+ "description": "Label of \"download contract\" action.",
1140
+ "message": "Descarregar"
1141
+ },
1142
+ "components.SignContractButton.contractDownloadError": {
1143
+ "description": "Message displayed when the order's contract download fails.",
1144
+ "message": "Ocorreu um erro ao descarregar o contrato de formação. Por favor, tente mais tarde."
1145
+ },
1146
+ "components.SignContractButton.contractSignActionLabel": {
1147
+ "description": "Label of \"sign contract\" action.",
1148
+ "message": "Assinar"
1149
+ },
870
1150
  "components.StepBreadcrumb.stepCount": {
871
1151
  "description": "Info about current step, not visible, only announced by screen readers",
872
1152
  "message": "Passo {current, number} de {total, number} {active, select, true {(ativo)} other {}}"
@@ -947,53 +1227,17 @@
947
1227
  "description": "Button displayed on the syllabus when not all course runs are displayed",
948
1228
  "message": "Ver Mais"
949
1229
  },
950
- "components.TeacherCourseDashboardLoader.errorNoCourse": {
951
- "description": "Message displayed when requested course is not found",
952
- "message": "Este curso não existe"
953
- },
954
- "components.TeacherCourseDashboardLoader.loading": {
955
- "description": "Message displayed while loading a course",
956
- "message": "A carregar o curso..."
1230
+ "components.TeacherDashboard.TeacherDashboardRoutes.course.contracts.label": {
1231
+ "description": "Label of the course contracts view.",
1232
+ "message": "Contratos"
957
1233
  },
958
- "components.TeacherCourseDashboardLoader.pageTitle": {
959
- "description": "Use for the page title of the course area",
960
- "message": "Área do curso"
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": "A carregar o curso..."
969
- },
970
- "components.TeacherCourseDashboardSidebar.subHeader": {
971
- "description": "Sub title of the course dashboard sidebar",
972
- "message": "Está no seu painel de controlo"
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": "Arquivado"
981
- },
982
- "components.TeacherCoursesDashboardLoader.title.filteredCourses": {
983
- "description": "Filtered courses title",
984
- "message": "Os seus cursos"
985
- },
986
- "components.TeacherCoursesDashboardLoader.title.incoming": {
987
- "description": "Incoming courses title",
988
- "message": "A receber"
989
- },
990
- "components.TeacherCoursesDashboardLoader.title.ongoing": {
991
- "description": "Ongoing courses title",
992
- "message": "A decorrer"
1234
+ "components.TeacherDashboard.TeacherDashboardRoutes.course.contracts.path": {
1235
+ "description": "The path to display a course contracts view.",
1236
+ "message": "/professor/cursos/{courseId}/contratos"
993
1237
  },
994
1238
  "components.TeacherDashboard.TeacherDashboardRoutes.course.generalInformation.path": {
995
1239
  "description": "The path to display the course general information view.",
996
- "message": "/teacher/courses/{courseId}/information"
1240
+ "message": "/professor/cursos/{courseId}/informação"
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": "/formador/cursos/{courseId}"
1248
+ "message": "/professor/cursos/{courseId}"
1249
+ },
1250
+ "components.TeacherDashboard.TeacherDashboardRoutes.course.product.contracts.label": {
1251
+ "description": "Label of the product contracts view.",
1252
+ "message": "Contratos"
1253
+ },
1254
+ "components.TeacherDashboard.TeacherDashboardRoutes.course.product.contracts.path": {
1255
+ "description": "The path to display a product contracts view.",
1256
+ "message": "/professor/cursos/{courseId}/produtos/{courseProductRelationId}/contratos"
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": "/teacher/courses/{courseId}/products/{courseProductRelationId}"
1264
+ "message": "/professor/cursos/{courseId}/produtos/{courseProductRelationId}"
1013
1265
  },
1014
1266
  "components.TeacherDashboard.TeacherDashboardRoutes.generalInformation.label": {
1015
1267
  "description": "Label of the course general information view.",
1016
- "message": "General information"
1268
+ "message": "Informação Geral"
1269
+ },
1270
+ "components.TeacherDashboard.TeacherDashboardRoutes.organization.contracts.label": {
1271
+ "description": "Label of the organization contracts view.",
1272
+ "message": "Contratos"
1273
+ },
1274
+ "components.TeacherDashboard.TeacherDashboardRoutes.organization.contracts.path": {
1275
+ "description": "The path to display the organization contracts view.",
1276
+ "message": "/professor/organizações/{organizationId}/contratos"
1277
+ },
1278
+ "components.TeacherDashboard.TeacherDashboardRoutes.organization.course.contracts.label": {
1279
+ "description": "Label of the organization course's contracts view.",
1280
+ "message": "Contratos"
1281
+ },
1282
+ "components.TeacherDashboard.TeacherDashboardRoutes.organization.course.contracts.path": {
1283
+ "description": "The path to display the organization course's contracts view.",
1284
+ "message": "/professor/organizações/{organizationId}/cursos/{courseId}/contratos"
1017
1285
  },
1018
1286
  "components.TeacherDashboard.TeacherDashboardRoutes.organization.course.generalInformation.label": {
1019
1287
  "description": "Label of the organization course general information view.",
1020
- "message": "General information"
1288
+ "message": "Informação Geral"
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": "/teacher/organizations/{organizationId}/courses/{courseId}/information"
1292
+ "message": "/professor/organizações/{organizationId}/cursos/{courseId}/informação"
1293
+ },
1294
+ "components.TeacherDashboard.TeacherDashboardRoutes.organization.course.product.contracts.label": {
1295
+ "description": "Label of the organization product's contracts view.",
1296
+ "message": "Contratos"
1297
+ },
1298
+ "components.TeacherDashboard.TeacherDashboardRoutes.organization.course.product.contracts.path": {
1299
+ "description": "The path to display the organization product's contracts view.",
1300
+ "message": "/professor/organizações/{organizationId}/cursos/{courseId}/produtos/{courseProductRelationId}/contratos"
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": "/teacher/organizations/{organizationId}/courses/{courseId}/products/{courseProductRelationId}"
1308
+ "message": "/professor/organizações/{organizationId}/cursos/{courseId}/produtos/{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": "/teacher/organizations/{organizationId}/courses"
1316
+ "message": "/professor/organizações/{organizationId}/cursos"
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": "/teacher/organizations/{organizationId}"
1324
+ "message": "/professor/organizações/{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": "/formador/cursos"
1332
+ "message": "/professor/cursos"
1057
1333
  },
1058
1334
  "components.TeacherDashboard.TeacherDashboardRoutes.root.label": {
1059
1335
  "description": "Label of the teacher dashboard root view.",
@@ -1075,43 +1351,87 @@
1075
1351
  "description": "Message displayed while loading trainings on the teacher's dashboard'",
1076
1352
  "message": "A carregar cursos..."
1077
1353
  },
1078
- "components.TeacherOrganizationCourseDashboardLoader.loading": {
1354
+ "components.TeacherDashboardCourseLoader.errorNoCourse": {
1355
+ "description": "Message displayed when requested course is not found",
1356
+ "message": "Este curso não existe"
1357
+ },
1358
+ "components.TeacherDashboardCourseLoader.loading": {
1359
+ "description": "Message displayed while loading a course",
1360
+ "message": "A carregar o curso..."
1361
+ },
1362
+ "components.TeacherDashboardCourseLoader.pageTitle": {
1363
+ "description": "Use for the page title of the course area",
1364
+ "message": "Área do curso"
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": "A carregar o curso..."
1373
+ },
1374
+ "components.TeacherDashboardCourseSidebar.subHeader": {
1375
+ "description": "Sub title of the course dashboard sidebar",
1376
+ "message": "Está no painel de controlo do curso"
1377
+ },
1378
+ "components.TeacherDashboardCourseSidebar.syllabusLinkLabel": {
1379
+ "description": "Syllabus link label",
1380
+ "message": "Ir para o programa de estudos"
1381
+ },
1382
+ "components.TeacherDashboardCoursesLoader.title.archived": {
1383
+ "description": "Archived courses title",
1384
+ "message": "Arquivado"
1385
+ },
1386
+ "components.TeacherDashboardCoursesLoader.title.filteredCourses": {
1387
+ "description": "Filtered courses title",
1388
+ "message": "Os seus cursos"
1389
+ },
1390
+ "components.TeacherDashboardCoursesLoader.title.incoming": {
1391
+ "description": "Incoming courses title",
1392
+ "message": "A receber"
1393
+ },
1394
+ "components.TeacherDashboardCoursesLoader.title.ongoing": {
1395
+ "description": "Ongoing courses title",
1396
+ "message": "A decorrer"
1397
+ },
1398
+ "components.TeacherDashboardOrganizationCourseLoader.loading": {
1079
1399
  "description": "Message displayed while loading an organization",
1080
- "message": "Carregando organização..."
1400
+ "message": "A carregar a organização ..."
1081
1401
  },
1082
- "components.TeacherOrganizationCourseDashboardLoader.title": {
1402
+ "components.TeacherDashboardOrganizationCourseLoader.title": {
1083
1403
  "description": "Message displayed as title of organization courses page",
1084
- "message": "Cursos da {organizationTitle}"
1404
+ "message": "Cursos de {organizationTitle}"
1085
1405
  },
1086
- "components.TeacherOrganizationDashboardSidebar.loading": {
1406
+ "components.TeacherDashboardOrganizationSidebar.loading": {
1087
1407
  "description": "Message displayed while loading an organization",
1088
1408
  "message": "A carregar a organização..."
1089
1409
  },
1090
- "components.TeacherOrganizationDashboardSidebar.subHeader": {
1410
+ "components.TeacherDashboardOrganizationSidebar.subHeader": {
1091
1411
  "description": "Sub title of the organization dashboard sidebar",
1092
1412
  "message": "Está no painel da organização"
1093
1413
  },
1094
- "components.TeacherProfileDashboardSidebar.OrganizationLinks.organizationLinkTitle": {
1414
+ "components.TeacherDashboardProfileSidebar.OrganizationLinks.organizationLinkTitle": {
1095
1415
  "description": "Organization link title",
1096
- "message": "Link para a organização \"{organizationTitle}\""
1416
+ "message": "Hiperligação para a organização \"{organizationTitle}\""
1097
1417
  },
1098
- "components.TeacherProfileDashboardSidebar.OrganizationLinks.organizationsTitle": {
1418
+ "components.TeacherDashboardProfileSidebar.OrganizationLinks.organizationsTitle": {
1099
1419
  "description": "Title of the organizations section",
1100
- "message": "Minhas universidades"
1420
+ "message": "As minhas universidades"
1101
1421
  },
1102
- "components.TeacherProfileDashboardSidebar.subHeader": {
1422
+ "components.TeacherDashboardProfileSidebar.subHeader": {
1103
1423
  "description": "Sub title of the dashboard sidebar",
1104
1424
  "message": "Está no seu painel de controlo do professor"
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": "Este produto não existe"
1109
1429
  },
1110
- "components.TeacherTrainingDashboardLoader.loading": {
1430
+ "components.TeacherDashboardTrainingLoader.loading": {
1111
1431
  "description": "Message displayed while loading a course",
1112
1432
  "message": "A carregar a formação..."
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": "Área de formação"
1117
1437
  },
@@ -1131,6 +1451,14 @@
1131
1451
  "description": "Accessibility text for the spinner in the login area.",
1132
1452
  "message": "A carregar estado do login..."
1133
1453
  },
1454
+ "components.form.messages.formOptionalFieldsText": {
1455
+ "description": "Text at the top of forms indicating what are optional fields",
1456
+ "message": "Todos os campos são obrigatórios, exceto se estiverem assinalados como facultativos"
1457
+ },
1458
+ "components.form.messages.optionalFieldText": {
1459
+ "description": "text display under form elements that are optional",
1460
+ "message": "(opcional)"
1461
+ },
1134
1462
  "components.useStaticFilters.courses": {
1135
1463
  "description": "localized human_name label for coursesConfig filter name",
1136
1464
  "message": "Cursos"
@@ -1179,21 +1507,37 @@
1179
1507
  "description": "Error message shown to the user when no certificate matches.",
1180
1508
  "message": "Não é possível encontrar o certificado"
1181
1509
  },
1510
+ "hooks.useContracts.errorNotFound": {
1511
+ "description": "Error message shown to the user when no contract matches.",
1512
+ "message": "Não foi possível encontrar o contrato"
1513
+ },
1514
+ "hooks.useContracts.errorSelect": {
1515
+ "description": "Error message shown to the user when contracts fetch request fails.",
1516
+ "message": "Ocorreu um erro durante o carregamento dos contratos. Por favor, tente novamente mais tarde."
1517
+ },
1182
1518
  "hooks.useCourseProductRelations.errorGet": {
1183
1519
  "description": "Error message shown to the user when course product relation fetch request fails.",
1184
- "message": "An error occurred while fetching trainings. Please retry later."
1520
+ "message": "Ocorreu um erro durante o carregamento das formações. Por favor, tente mais tarde."
1185
1521
  },
1186
1522
  "hooks.useCourseProductRelations.errorNotFound": {
1187
1523
  "description": "Error message shown to the user when no course product relation matches.",
1188
- "message": "Cannot find the training."
1524
+ "message": "Não foi possível encontrar a formação."
1189
1525
  },
1190
1526
  "hooks.useCourseProductUnion.errorGet": {
1191
1527
  "description": "Error message shown to the user when trainings fetch request fails.",
1192
1528
  "message": "Ocorreu um erro durante o processamento de formações. Por favor, tente mais tarde."
1193
1529
  },
1530
+ "hooks.useCourseProducts.errorGet": {
1531
+ "description": "Error message shown to the user when product fetch request fails.",
1532
+ "message": "Ocorreu um erro durante o carregamento do produto. Por favor, tente mais tarde."
1533
+ },
1534
+ "hooks.useCourseProducts.errorNotFound": {
1535
+ "description": "Error message shown to the user when no product matches.",
1536
+ "message": "Não foi possível encontrar o produto."
1537
+ },
1194
1538
  "hooks.useCourseRuns.errorGet": {
1195
1539
  "description": "Error message shown to the user when course runs fetch request fails.",
1196
- "message": "An error occurred while fetching course runs. Please retry later."
1540
+ "message": "Ocorreu um erro ao carregar as edições do curso. Por favor, tente mais tarde."
1197
1541
  },
1198
1542
  "hooks.useCourseRuns.errorNotFound": {
1199
1543
  "description": "Error message shown to the user when no course runs matches.",
@@ -1259,6 +1603,14 @@
1259
1603
  "description": "Error message shown to the user when enrollment update request fails.",
1260
1604
  "message": "Ocorreu um erro durante a atualização das inscrições. Por favor, tente mais tarde."
1261
1605
  },
1606
+ "hooks.useJoanieUserProfile.errorGet": {
1607
+ "description": "Error message shown to the user when user fetch request fails.",
1608
+ "message": "Ocorreu um erro durante o processamento do perfil do utilizador. Por favor, tente mais tarde."
1609
+ },
1610
+ "hooks.useJoanieUserProfile.errorNotFound": {
1611
+ "description": "Error message shown to the user when it isn't logged.",
1612
+ "message": "Não tem sessão iniciada."
1613
+ },
1262
1614
  "hooks.useOrders.errorGet": {
1263
1615
  "description": "Error message shown to the user when orders fetch request fails.",
1264
1616
  "message": "Ocorreu um erro durante o processamento das encomendas. Por favor, tente mais tarde."
@@ -1279,14 +1631,6 @@
1279
1631
  "description": "Error message shown to the user when organizations fetch request fails.",
1280
1632
  "message": "Ocorreu um erro durante a busca de organizações. Por favor, tente novamente mais tarde."
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": "Ocorreu um erro ao criar um recurso. Por favor, tente mais tarde."
@@ -1327,6 +1671,62 @@
1327
1671
  "description": "Error message shown to the user when no wishlist matches.",
1328
1672
  "message": "Não é possível encontrar a lista de desejos."
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": "e"