@openedx/frontend-app-authn 1.0.0-alpha.5 → 1.0.0-alpha.7

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 (480) hide show
  1. package/dist/Main.d.ts +3 -0
  2. package/dist/Main.js +10 -0
  3. package/dist/Main.js.map +1 -0
  4. package/dist/app.d.ts +3 -0
  5. package/dist/app.js +41 -0
  6. package/dist/app.js.map +1 -0
  7. package/{src → dist}/app.scss +1 -1
  8. package/dist/base-container/components/default-layout/LargeLayout.d.ts +2 -0
  9. package/dist/base-container/components/default-layout/LargeLayout.js +11 -0
  10. package/dist/base-container/components/default-layout/LargeLayout.js.map +1 -0
  11. package/dist/base-container/components/default-layout/MediumLayout.d.ts +2 -0
  12. package/dist/base-container/components/default-layout/MediumLayout.js +11 -0
  13. package/dist/base-container/components/default-layout/MediumLayout.js.map +1 -0
  14. package/dist/base-container/components/default-layout/SmallLayout.d.ts +2 -0
  15. package/dist/base-container/components/default-layout/SmallLayout.js +11 -0
  16. package/dist/base-container/components/default-layout/SmallLayout.js.map +1 -0
  17. package/dist/base-container/components/default-layout/index.d.ts +3 -0
  18. package/{src/base-container/components/default-layout/index.jsx → dist/base-container/components/default-layout/index.js} +1 -0
  19. package/dist/base-container/components/default-layout/index.js.map +1 -0
  20. package/dist/base-container/components/default-layout/messages.d.ts +13 -0
  21. package/dist/base-container/components/default-layout/messages.js +15 -0
  22. package/dist/base-container/components/default-layout/messages.js.map +1 -0
  23. package/dist/base-container/components/image-layout/ExtraSmallLayout.d.ts +2 -0
  24. package/dist/base-container/components/image-layout/ExtraSmallLayout.js +10 -0
  25. package/dist/base-container/components/image-layout/ExtraSmallLayout.js.map +1 -0
  26. package/dist/base-container/components/image-layout/LargeLayout.d.ts +2 -0
  27. package/dist/base-container/components/image-layout/LargeLayout.js +11 -0
  28. package/dist/base-container/components/image-layout/LargeLayout.js.map +1 -0
  29. package/dist/base-container/components/image-layout/MediumLayout.d.ts +2 -0
  30. package/dist/base-container/components/image-layout/MediumLayout.js +11 -0
  31. package/dist/base-container/components/image-layout/MediumLayout.js.map +1 -0
  32. package/dist/base-container/components/image-layout/SmallLayout.d.ts +2 -0
  33. package/dist/base-container/components/image-layout/SmallLayout.js +10 -0
  34. package/dist/base-container/components/image-layout/SmallLayout.js.map +1 -0
  35. package/dist/base-container/components/image-layout/index.d.ts +4 -0
  36. package/{src/base-container/components/image-layout/index.jsx → dist/base-container/components/image-layout/index.js} +1 -0
  37. package/dist/base-container/components/image-layout/index.js.map +1 -0
  38. package/dist/base-container/components/image-layout/messages.d.ts +13 -0
  39. package/dist/base-container/components/image-layout/messages.js +15 -0
  40. package/dist/base-container/components/image-layout/messages.js.map +1 -0
  41. package/dist/base-container/components/welcome-page-layout/LargeLayout.d.ts +10 -0
  42. package/dist/base-container/components/welcome-page-layout/LargeLayout.js +14 -0
  43. package/dist/base-container/components/welcome-page-layout/LargeLayout.js.map +1 -0
  44. package/dist/base-container/components/welcome-page-layout/MediumLayout.d.ts +10 -0
  45. package/dist/base-container/components/welcome-page-layout/MediumLayout.js +14 -0
  46. package/dist/base-container/components/welcome-page-layout/MediumLayout.js.map +1 -0
  47. package/dist/base-container/components/welcome-page-layout/SmallLayout.d.ts +10 -0
  48. package/dist/base-container/components/welcome-page-layout/SmallLayout.js +14 -0
  49. package/dist/base-container/components/welcome-page-layout/SmallLayout.js.map +1 -0
  50. package/dist/base-container/components/welcome-page-layout/index.d.ts +3 -0
  51. package/{src/base-container/components/welcome-page-layout/index.jsx → dist/base-container/components/welcome-page-layout/index.js} +1 -0
  52. package/dist/base-container/components/welcome-page-layout/index.js.map +1 -0
  53. package/dist/base-container/components/welcome-page-layout/messages.d.ts +18 -0
  54. package/dist/base-container/components/welcome-page-layout/messages.js +20 -0
  55. package/dist/base-container/components/welcome-page-layout/messages.js.map +1 -0
  56. package/dist/base-container/index.d.ts +20 -0
  57. package/dist/base-container/index.js +27 -0
  58. package/dist/base-container/index.js.map +1 -0
  59. package/dist/common-components/EmbeddedRegistrationRoute.d.ts +14 -0
  60. package/dist/common-components/EmbeddedRegistrationRoute.js +22 -0
  61. package/dist/common-components/EmbeddedRegistrationRoute.js.map +1 -0
  62. package/dist/common-components/EnterpriseSSO.d.ts +29 -0
  63. package/dist/common-components/EnterpriseSSO.js +58 -0
  64. package/dist/common-components/EnterpriseSSO.js.map +1 -0
  65. package/dist/common-components/FormGroup.d.ts +60 -0
  66. package/dist/common-components/FormGroup.js +66 -0
  67. package/dist/common-components/FormGroup.js.map +1 -0
  68. package/dist/common-components/InstitutionLogistration.d.ts +34 -0
  69. package/dist/common-components/InstitutionLogistration.js +38 -0
  70. package/dist/common-components/InstitutionLogistration.js.map +1 -0
  71. package/dist/common-components/NotFoundPage.d.ts +2 -0
  72. package/dist/common-components/NotFoundPage.js +5 -0
  73. package/dist/common-components/NotFoundPage.js.map +1 -0
  74. package/dist/common-components/PasswordField.d.ts +47 -0
  75. package/dist/common-components/PasswordField.js +98 -0
  76. package/dist/common-components/PasswordField.js.map +1 -0
  77. package/dist/common-components/RedirectLogistration.d.ts +39 -0
  78. package/dist/common-components/RedirectLogistration.js +72 -0
  79. package/dist/common-components/RedirectLogistration.js.map +1 -0
  80. package/dist/common-components/RegisterFaIcons.d.ts +1 -0
  81. package/dist/common-components/RegisterFaIcons.js +6 -0
  82. package/dist/common-components/RegisterFaIcons.js.map +1 -0
  83. package/dist/common-components/SocialAuthProviders.d.ts +23 -0
  84. package/dist/common-components/SocialAuthProviders.js +43 -0
  85. package/dist/common-components/SocialAuthProviders.js.map +1 -0
  86. package/dist/common-components/ThirdPartyAuth.d.ts +42 -0
  87. package/dist/common-components/ThirdPartyAuth.js +57 -0
  88. package/dist/common-components/ThirdPartyAuth.js.map +1 -0
  89. package/dist/common-components/ThirdPartyAuthAlert.d.ts +15 -0
  90. package/dist/common-components/ThirdPartyAuthAlert.js +32 -0
  91. package/dist/common-components/ThirdPartyAuthAlert.js.map +1 -0
  92. package/dist/common-components/UnAuthOnlyRoute.d.ts +14 -0
  93. package/dist/common-components/UnAuthOnlyRoute.js +32 -0
  94. package/dist/common-components/UnAuthOnlyRoute.js.map +1 -0
  95. package/dist/common-components/components/ThirdPartyAuthContext.d.ts +31 -0
  96. package/dist/common-components/components/ThirdPartyAuthContext.js +84 -0
  97. package/dist/common-components/components/ThirdPartyAuthContext.js.map +1 -0
  98. package/dist/common-components/data/api.d.ts +6 -0
  99. package/dist/common-components/data/api.js +26 -0
  100. package/dist/common-components/data/api.js.map +1 -0
  101. package/dist/common-components/data/apiHook.d.ts +9 -0
  102. package/dist/common-components/data/apiHook.js +14 -0
  103. package/dist/common-components/data/apiHook.js.map +1 -0
  104. package/dist/common-components/data/queryKeys.d.ts +4 -0
  105. package/dist/common-components/data/queryKeys.js +6 -0
  106. package/dist/common-components/data/queryKeys.js.map +1 -0
  107. package/dist/common-components/index.d.ts +10 -0
  108. package/{src/common-components/index.jsx → dist/common-components/index.js} +1 -3
  109. package/dist/common-components/index.js.map +1 -0
  110. package/dist/common-components/messages.d.ts +113 -0
  111. package/dist/common-components/messages.js +126 -0
  112. package/dist/common-components/messages.js.map +1 -0
  113. package/dist/constants.d.ts +14 -0
  114. package/dist/constants.js +17 -0
  115. package/dist/constants.js.map +1 -0
  116. package/dist/data/constants.d.ts +16 -0
  117. package/{src → dist}/data/constants.js +4 -17
  118. package/dist/data/constants.js.map +1 -0
  119. package/dist/data/countries.d.ts +26 -0
  120. package/{src/data/countries.ts → dist/data/countries.js} +6 -9
  121. package/dist/data/countries.js.map +1 -0
  122. package/dist/data/oneTrust.d.ts +2 -0
  123. package/dist/data/oneTrust.js +3 -0
  124. package/dist/data/oneTrust.js.map +1 -0
  125. package/dist/data/utils/cookies.d.ts +1 -0
  126. package/dist/data/utils/cookies.js +12 -0
  127. package/dist/data/utils/cookies.js.map +1 -0
  128. package/dist/data/utils/dataUtils.d.ts +12 -0
  129. package/dist/data/utils/dataUtils.js +81 -0
  130. package/dist/data/utils/dataUtils.js.map +1 -0
  131. package/dist/data/utils/index.d.ts +2 -0
  132. package/dist/data/utils/index.js +3 -0
  133. package/dist/data/utils/index.js.map +1 -0
  134. package/dist/data/utils/useMobileResponsive.d.ts +7 -0
  135. package/dist/data/utils/useMobileResponsive.js +22 -0
  136. package/dist/data/utils/useMobileResponsive.js.map +1 -0
  137. package/dist/field-renderer/FieldRenderer.d.ts +34 -0
  138. package/dist/field-renderer/FieldRenderer.js +70 -0
  139. package/dist/field-renderer/FieldRenderer.js.map +1 -0
  140. package/dist/field-renderer/index.d.ts +1 -0
  141. package/{src/field-renderer/index.jsx → dist/field-renderer/index.js} +1 -0
  142. package/dist/field-renderer/index.js.map +1 -0
  143. package/dist/forgot-password/ForgotPasswordAlert.d.ts +16 -0
  144. package/dist/forgot-password/ForgotPasswordAlert.js +66 -0
  145. package/dist/forgot-password/ForgotPasswordAlert.js.map +1 -0
  146. package/dist/forgot-password/ForgotPasswordPage.d.ts +2 -0
  147. package/dist/forgot-password/ForgotPasswordPage.js +92 -0
  148. package/dist/forgot-password/ForgotPasswordPage.js.map +1 -0
  149. package/dist/forgot-password/data/api.d.ts +2 -0
  150. package/dist/forgot-password/data/api.js +25 -0
  151. package/dist/forgot-password/data/api.js.map +1 -0
  152. package/dist/forgot-password/data/apiHook.d.ts +16 -0
  153. package/dist/forgot-password/data/apiHook.js +26 -0
  154. package/dist/forgot-password/data/apiHook.js.map +1 -0
  155. package/dist/forgot-password/index.d.ts +1 -0
  156. package/dist/forgot-password/index.js +2 -0
  157. package/dist/forgot-password/index.js.map +1 -0
  158. package/dist/forgot-password/messages.d.ts +123 -0
  159. package/dist/forgot-password/messages.js +128 -0
  160. package/dist/forgot-password/messages.js.map +1 -0
  161. package/dist/i18n/index.d.ts +25 -0
  162. package/dist/i18n/index.js +26 -0
  163. package/dist/i18n/index.js.map +1 -0
  164. package/dist/index.js +4 -0
  165. package/dist/index.js.map +1 -0
  166. package/dist/login/AccountActivationMessage.d.ts +14 -0
  167. package/dist/login/AccountActivationMessage.js +49 -0
  168. package/dist/login/AccountActivationMessage.js.map +1 -0
  169. package/dist/login/ChangePasswordPrompt.d.ts +18 -0
  170. package/dist/login/ChangePasswordPrompt.js +51 -0
  171. package/dist/login/ChangePasswordPrompt.js.map +1 -0
  172. package/dist/login/LoginFailure.d.ts +25 -0
  173. package/dist/login/LoginFailure.js +109 -0
  174. package/dist/login/LoginFailure.js.map +1 -0
  175. package/dist/login/LoginPage.d.ts +12 -0
  176. package/dist/login/LoginPage.js +174 -0
  177. package/dist/login/LoginPage.js.map +1 -0
  178. package/dist/login/components/LoginContext.d.ts +21 -0
  179. package/dist/login/components/LoginContext.js +28 -0
  180. package/dist/login/components/LoginContext.js.map +1 -0
  181. package/dist/login/data/api.d.ts +2 -0
  182. package/dist/login/data/api.js +27 -0
  183. package/dist/login/data/api.js.map +1 -0
  184. package/dist/login/data/apiHook.d.ts +13 -0
  185. package/dist/login/data/apiHook.js +57 -0
  186. package/dist/login/data/apiHook.js.map +1 -0
  187. package/dist/login/data/constants.d.ts +17 -0
  188. package/{src → dist}/login/data/constants.js +4 -4
  189. package/dist/login/data/constants.js.map +1 -0
  190. package/dist/login/index.d.ts +1 -0
  191. package/dist/login/index.js +2 -0
  192. package/dist/login/index.js.map +1 -0
  193. package/dist/login/messages.d.ts +198 -0
  194. package/dist/login/messages.js +210 -0
  195. package/dist/login/messages.js.map +1 -0
  196. package/dist/logistration/Logistration.d.ts +5 -0
  197. package/dist/logistration/Logistration.js +80 -0
  198. package/dist/logistration/Logistration.js.map +1 -0
  199. package/dist/progressive-profiling/ProgressiveProfiling.d.ts +2 -0
  200. package/dist/progressive-profiling/ProgressiveProfiling.js +143 -0
  201. package/dist/progressive-profiling/ProgressiveProfiling.js.map +1 -0
  202. package/dist/progressive-profiling/ProgressiveProfilingPageModal.d.ts +13 -0
  203. package/dist/progressive-profiling/ProgressiveProfilingPageModal.js +31 -0
  204. package/dist/progressive-profiling/ProgressiveProfilingPageModal.js.map +1 -0
  205. package/dist/progressive-profiling/components/ProgressiveProfilingContext.d.ts +18 -0
  206. package/dist/progressive-profiling/components/ProgressiveProfilingContext.js +52 -0
  207. package/dist/progressive-profiling/components/ProgressiveProfilingContext.js.map +1 -0
  208. package/dist/progressive-profiling/data/api.d.ts +2 -0
  209. package/dist/progressive-profiling/data/api.js +22 -0
  210. package/dist/progressive-profiling/data/api.js.map +1 -0
  211. package/dist/progressive-profiling/data/apiHook.d.ts +10 -0
  212. package/dist/progressive-profiling/data/apiHook.js +36 -0
  213. package/dist/progressive-profiling/data/apiHook.js.map +1 -0
  214. package/dist/progressive-profiling/index.d.ts +2 -0
  215. package/{src → dist}/progressive-profiling/index.js +1 -3
  216. package/dist/progressive-profiling/index.js.map +1 -0
  217. package/dist/progressive-profiling/messages.d.ts +53 -0
  218. package/dist/progressive-profiling/messages.js +57 -0
  219. package/dist/progressive-profiling/messages.js.map +1 -0
  220. package/dist/register/RegistrationFields/CountryField/CountryField.d.ts +38 -0
  221. package/dist/register/RegistrationFields/CountryField/CountryField.js +93 -0
  222. package/dist/register/RegistrationFields/CountryField/CountryField.js.map +1 -0
  223. package/dist/register/RegistrationFields/CountryField/validator.d.ts +8 -0
  224. package/dist/register/RegistrationFields/CountryField/validator.js +29 -0
  225. package/dist/register/RegistrationFields/CountryField/validator.js.map +1 -0
  226. package/dist/register/RegistrationFields/EmailField/EmailField.d.ts +30 -0
  227. package/dist/register/RegistrationFields/EmailField/EmailField.js +88 -0
  228. package/dist/register/RegistrationFields/EmailField/EmailField.js.map +1 -0
  229. package/dist/register/RegistrationFields/EmailField/constants.d.ts +3 -0
  230. package/dist/register/RegistrationFields/EmailField/constants.js +130 -0
  231. package/dist/register/RegistrationFields/EmailField/constants.js.map +1 -0
  232. package/dist/register/RegistrationFields/EmailField/validator.d.ts +17 -0
  233. package/dist/register/RegistrationFields/EmailField/validator.js +107 -0
  234. package/dist/register/RegistrationFields/EmailField/validator.js.map +1 -0
  235. package/dist/register/RegistrationFields/HonorCodeField/HonorCode.d.ts +21 -0
  236. package/dist/register/RegistrationFields/HonorCodeField/HonorCode.js +40 -0
  237. package/dist/register/RegistrationFields/HonorCodeField/HonorCode.js.map +1 -0
  238. package/dist/register/RegistrationFields/NameField/NameField.d.ts +29 -0
  239. package/dist/register/RegistrationFields/NameField/NameField.js +59 -0
  240. package/dist/register/RegistrationFields/NameField/NameField.js.map +1 -0
  241. package/dist/register/RegistrationFields/NameField/validator.d.ts +6 -0
  242. package/dist/register/RegistrationFields/NameField/validator.js +23 -0
  243. package/dist/register/RegistrationFields/NameField/validator.js.map +1 -0
  244. package/dist/register/RegistrationFields/TermsOfServiceField/TermsOfService.d.ts +16 -0
  245. package/dist/register/RegistrationFields/TermsOfServiceField/TermsOfService.js +24 -0
  246. package/dist/register/RegistrationFields/TermsOfServiceField/TermsOfService.js.map +1 -0
  247. package/dist/register/RegistrationFields/UsernameField/UsernameField.d.ts +31 -0
  248. package/dist/register/RegistrationFields/UsernameField/UsernameField.js +119 -0
  249. package/dist/register/RegistrationFields/UsernameField/UsernameField.js.map +1 -0
  250. package/dist/register/RegistrationFields/UsernameField/validator.d.ts +4 -0
  251. package/dist/register/RegistrationFields/UsernameField/validator.js +15 -0
  252. package/dist/register/RegistrationFields/UsernameField/validator.js.map +1 -0
  253. package/dist/register/RegistrationFields/index.d.ts +6 -0
  254. package/{src → dist}/register/RegistrationFields/index.js +1 -0
  255. package/dist/register/RegistrationFields/index.js.map +1 -0
  256. package/dist/register/RegistrationPage.d.ts +18 -0
  257. package/dist/register/RegistrationPage.js +259 -0
  258. package/dist/register/RegistrationPage.js.map +1 -0
  259. package/dist/register/components/ConfigurableRegistrationForm.d.ts +37 -0
  260. package/dist/register/components/ConfigurableRegistrationForm.js +145 -0
  261. package/dist/register/components/ConfigurableRegistrationForm.js.map +1 -0
  262. package/dist/register/components/RegisterContext.d.ts +8 -0
  263. package/dist/register/components/RegisterContext.js +167 -0
  264. package/dist/register/components/RegisterContext.js.map +1 -0
  265. package/dist/register/components/RegistrationFailure.d.ts +19 -0
  266. package/dist/register/components/RegistrationFailure.js +60 -0
  267. package/dist/register/components/RegistrationFailure.js.map +1 -0
  268. package/dist/register/data/api.d.ts +9 -0
  269. package/dist/register/data/api.js +45 -0
  270. package/dist/register/data/api.js.map +1 -0
  271. package/dist/register/data/apiHook.d.ts +33 -0
  272. package/dist/register/data/apiHook.js +66 -0
  273. package/dist/register/data/apiHook.js.map +1 -0
  274. package/dist/register/data/constants.d.ts +11 -0
  275. package/{src → dist}/register/data/constants.js +5 -4
  276. package/dist/register/data/constants.js.map +1 -0
  277. package/dist/register/data/utils.d.ts +6 -0
  278. package/dist/register/data/utils.js +128 -0
  279. package/dist/register/data/utils.js.map +1 -0
  280. package/dist/register/index.d.ts +1 -0
  281. package/dist/register/index.js +2 -0
  282. package/dist/register/index.js.map +1 -0
  283. package/dist/register/messages.d.ts +203 -0
  284. package/dist/register/messages.js +215 -0
  285. package/dist/register/messages.js.map +1 -0
  286. package/dist/register/types.d.ts +74 -0
  287. package/dist/register/types.js +2 -0
  288. package/dist/register/types.js.map +1 -0
  289. package/dist/reset-password/ResetPasswordFailure.d.ts +15 -0
  290. package/dist/reset-password/ResetPasswordFailure.js +44 -0
  291. package/dist/reset-password/ResetPasswordFailure.js.map +1 -0
  292. package/dist/reset-password/ResetPasswordPage.d.ts +2 -0
  293. package/dist/reset-password/ResetPasswordPage.js +182 -0
  294. package/dist/reset-password/ResetPasswordPage.js.map +1 -0
  295. package/dist/reset-password/ResetPasswordSuccess.d.ts +2 -0
  296. package/dist/reset-password/ResetPasswordSuccess.js +10 -0
  297. package/dist/reset-password/ResetPasswordSuccess.js.map +1 -0
  298. package/dist/reset-password/data/api.d.ts +4 -0
  299. package/dist/reset-password/data/api.js +57 -0
  300. package/dist/reset-password/data/api.js.map +1 -0
  301. package/dist/reset-password/data/apiHook.d.ts +31 -0
  302. package/dist/reset-password/data/apiHook.js +74 -0
  303. package/dist/reset-password/data/apiHook.js.map +1 -0
  304. package/dist/reset-password/data/constants.d.ts +13 -0
  305. package/{src → dist}/reset-password/data/constants.js +6 -7
  306. package/dist/reset-password/data/constants.js.map +1 -0
  307. package/dist/reset-password/index.d.ts +1 -0
  308. package/dist/reset-password/index.js +2 -0
  309. package/dist/reset-password/index.js.map +1 -0
  310. package/dist/reset-password/messages.d.ts +83 -0
  311. package/dist/reset-password/messages.js +87 -0
  312. package/dist/reset-password/messages.js.map +1 -0
  313. package/dist/routes.d.ts +19 -0
  314. package/dist/routes.js +76 -0
  315. package/dist/routes.js.map +1 -0
  316. package/{src → dist}/sass/_registration.scss +8 -10
  317. package/dist/slots/LoginComponentSlot/index.d.ts +12 -0
  318. package/dist/slots/LoginComponentSlot/index.js +11 -0
  319. package/dist/slots/LoginComponentSlot/index.js.map +1 -0
  320. package/package.json +26 -15
  321. package/src/Main.tsx +0 -23
  322. package/src/__mocks__/file.js +0 -1
  323. package/src/__mocks__/svg.js +0 -1
  324. package/src/app.ts +0 -43
  325. package/src/base-container/components/default-layout/DefaultLayout.test.jsx +0 -48
  326. package/src/base-container/components/default-layout/LargeLayout.jsx +0 -42
  327. package/src/base-container/components/default-layout/MediumLayout.jsx +0 -49
  328. package/src/base-container/components/default-layout/SmallLayout.jsx +0 -37
  329. package/src/base-container/components/default-layout/messages.js +0 -16
  330. package/src/base-container/components/image-layout/ExtraSmallLayout.jsx +0 -31
  331. package/src/base-container/components/image-layout/LargeLayout.jsx +0 -32
  332. package/src/base-container/components/image-layout/MediumLayout.jsx +0 -32
  333. package/src/base-container/components/image-layout/SmallLayout.jsx +0 -31
  334. package/src/base-container/components/image-layout/messages.js +0 -16
  335. package/src/base-container/components/welcome-page-layout/LargeLayout.jsx +0 -46
  336. package/src/base-container/components/welcome-page-layout/MediumLayout.jsx +0 -49
  337. package/src/base-container/components/welcome-page-layout/SmallLayout.jsx +0 -38
  338. package/src/base-container/components/welcome-page-layout/messages.js +0 -21
  339. package/src/base-container/index.jsx +0 -70
  340. package/src/base-container/tests/BaseContainer.test.jsx +0 -44
  341. package/src/common-components/EmbeddedRegistrationRoute.jsx +0 -26
  342. package/src/common-components/EnterpriseSSO.jsx +0 -110
  343. package/src/common-components/FormGroup.jsx +0 -106
  344. package/src/common-components/InstitutionLogistration.jsx +0 -102
  345. package/src/common-components/NotFoundPage.jsx +0 -15
  346. package/src/common-components/PasswordField.jsx +0 -175
  347. package/src/common-components/RedirectLogistration.jsx +0 -94
  348. package/src/common-components/RegisterFaIcons.jsx +0 -8
  349. package/src/common-components/SocialAuthProviders.jsx +0 -75
  350. package/src/common-components/ThirdPartyAuth.jsx +0 -123
  351. package/src/common-components/ThirdPartyAuthAlert.jsx +0 -49
  352. package/src/common-components/UnAuthOnlyRoute.jsx +0 -41
  353. package/src/common-components/data/actions.js +0 -27
  354. package/src/common-components/data/reducers.js +0 -63
  355. package/src/common-components/data/sagas.js +0 -32
  356. package/src/common-components/data/selectors.js +0 -28
  357. package/src/common-components/data/service.js +0 -23
  358. package/src/common-components/data/tests/reducer.test.js +0 -82
  359. package/src/common-components/data/tests/sagas.test.js +0 -71
  360. package/src/common-components/messages.jsx +0 -127
  361. package/src/common-components/tests/EmbeddedRegistrationRoute.test.jsx +0 -76
  362. package/src/common-components/tests/FormField.test.jsx +0 -289
  363. package/src/common-components/tests/SocialAuthProviders.test.jsx +0 -75
  364. package/src/common-components/tests/ThirdPartyAuthAlert.test.jsx +0 -39
  365. package/src/common-components/tests/UnAuthOnlyRoute.test.jsx +0 -73
  366. package/src/common-components/tests/__snapshots__/SocialAuthProviders.test.jsx.snap +0 -156
  367. package/src/common-components/tests/__snapshots__/ThirdPartyAuthAlert.test.jsx.snap +0 -53
  368. package/src/constants.ts +0 -1
  369. package/src/data/configureStore.js +0 -33
  370. package/src/data/oneTrust.js +0 -3
  371. package/src/data/reducers.js +0 -36
  372. package/src/data/sagas.js +0 -19
  373. package/src/data/tests/cookies.test.js +0 -42
  374. package/src/data/tests/dataUtils.test.js +0 -19
  375. package/src/data/tests/reduxUtils.test.js +0 -14
  376. package/src/data/utils/cookies.js +0 -12
  377. package/src/data/utils/dataUtils.js +0 -81
  378. package/src/data/utils/index.js +0 -11
  379. package/src/data/utils/reduxUtils.js +0 -34
  380. package/src/data/utils/useMobileResponsive.js +0 -24
  381. package/src/field-renderer/FieldRenderer.jsx +0 -156
  382. package/src/field-renderer/tests/FieldRenderer.test.jsx +0 -201
  383. package/src/forgot-password/ForgotPasswordAlert.jsx +0 -97
  384. package/src/forgot-password/ForgotPasswordPage.jsx +0 -193
  385. package/src/forgot-password/data/actions.js +0 -32
  386. package/src/forgot-password/data/reducers.js +0 -58
  387. package/src/forgot-password/data/sagas.js +0 -35
  388. package/src/forgot-password/data/selectors.js +0 -10
  389. package/src/forgot-password/data/service.js +0 -21
  390. package/src/forgot-password/data/tests/reducers.test.js +0 -34
  391. package/src/forgot-password/data/tests/sagas.test.js +0 -67
  392. package/src/forgot-password/index.js +0 -5
  393. package/src/forgot-password/messages.js +0 -128
  394. package/src/forgot-password/tests/ForgotPasswordPage.test.jsx +0 -269
  395. package/src/i18n/index.js +0 -25
  396. package/src/login/AccountActivationMessage.jsx +0 -78
  397. package/src/login/ChangePasswordPrompt.jsx +0 -91
  398. package/src/login/LoginFailure.jsx +0 -231
  399. package/src/login/LoginPage.jsx +0 -368
  400. package/src/login/data/actions.js +0 -39
  401. package/src/login/data/reducers.js +0 -76
  402. package/src/login/data/sagas.js +0 -45
  403. package/src/login/data/service.js +0 -27
  404. package/src/login/data/tests/reducers.test.js +0 -155
  405. package/src/login/data/tests/sagas.test.js +0 -110
  406. package/src/login/index.js +0 -5
  407. package/src/login/messages.jsx +0 -211
  408. package/src/login/tests/AccountActivationMessage.test.jsx +0 -122
  409. package/src/login/tests/ChangePasswordPrompt.test.jsx +0 -75
  410. package/src/login/tests/LoginFailure.test.jsx +0 -323
  411. package/src/login/tests/LoginPage.test.jsx +0 -839
  412. package/src/logistration/Logistration.jsx +0 -189
  413. package/src/logistration/Logistration.test.jsx +0 -275
  414. package/src/progressive-profiling/ProgressiveProfiling.jsx +0 -313
  415. package/src/progressive-profiling/ProgressiveProfilingPageModal.jsx +0 -56
  416. package/src/progressive-profiling/data/actions.js +0 -22
  417. package/src/progressive-profiling/data/reducers.js +0 -38
  418. package/src/progressive-profiling/data/sagas.js +0 -24
  419. package/src/progressive-profiling/data/selectors.js +0 -14
  420. package/src/progressive-profiling/data/service.js +0 -17
  421. package/src/progressive-profiling/messages.jsx +0 -57
  422. package/src/progressive-profiling/tests/ProgressiveProfiling.test.jsx +0 -322
  423. package/src/register/RegistrationFields/CountryField/CountryField.jsx +0 -164
  424. package/src/register/RegistrationFields/CountryField/CountryField.test.jsx +0 -204
  425. package/src/register/RegistrationFields/CountryField/validator.js +0 -32
  426. package/src/register/RegistrationFields/EmailField/EmailField.jsx +0 -140
  427. package/src/register/RegistrationFields/EmailField/EmailField.test.jsx +0 -236
  428. package/src/register/RegistrationFields/EmailField/constants.js +0 -131
  429. package/src/register/RegistrationFields/EmailField/validator.js +0 -126
  430. package/src/register/RegistrationFields/EmailField/validator.test.js +0 -39
  431. package/src/register/RegistrationFields/HonorCodeField/HonorCode.jsx +0 -104
  432. package/src/register/RegistrationFields/HonorCodeField/HonorCode.test.jsx +0 -70
  433. package/src/register/RegistrationFields/NameField/NameField.jsx +0 -68
  434. package/src/register/RegistrationFields/NameField/NameField.test.jsx +0 -146
  435. package/src/register/RegistrationFields/NameField/validator.js +0 -22
  436. package/src/register/RegistrationFields/TermsOfServiceField/TermsOfService.jsx +0 -58
  437. package/src/register/RegistrationFields/TermsOfServiceField/TermsOfService.test.jsx +0 -55
  438. package/src/register/RegistrationFields/UsernameField/UsernameField.jsx +0 -162
  439. package/src/register/RegistrationFields/UsernameField/UsernameField.test.jsx +0 -319
  440. package/src/register/RegistrationFields/UsernameField/validator.js +0 -16
  441. package/src/register/RegistrationPage.jsx +0 -428
  442. package/src/register/RegistrationPage.test.jsx +0 -854
  443. package/src/register/components/ConfigurableRegistrationForm.jsx +0 -244
  444. package/src/register/components/RegistrationFailure.jsx +0 -80
  445. package/src/register/components/tests/ConfigurableRegistrationForm.test.jsx +0 -401
  446. package/src/register/components/tests/RegistrationFailure.test.jsx +0 -212
  447. package/src/register/components/tests/ThirdPartyAuth.test.jsx +0 -439
  448. package/src/register/data/actions.js +0 -85
  449. package/src/register/data/reducers.js +0 -140
  450. package/src/register/data/sagas.js +0 -58
  451. package/src/register/data/selectors.js +0 -34
  452. package/src/register/data/service.js +0 -45
  453. package/src/register/data/tests/reducers.test.js +0 -277
  454. package/src/register/data/tests/sagas.test.js +0 -239
  455. package/src/register/data/tests/utils.test.js +0 -98
  456. package/src/register/data/utils.js +0 -147
  457. package/src/register/index.js +0 -4
  458. package/src/register/messages.jsx +0 -206
  459. package/src/reset-password/ResetPasswordFailure.jsx +0 -55
  460. package/src/reset-password/ResetPasswordPage.jsx +0 -224
  461. package/src/reset-password/ResetPasswordSuccess.jsx +0 -19
  462. package/src/reset-password/data/actions.js +0 -50
  463. package/src/reset-password/data/reducers.js +0 -44
  464. package/src/reset-password/data/sagas.js +0 -67
  465. package/src/reset-password/data/selectors.js +0 -10
  466. package/src/reset-password/data/service.js +0 -61
  467. package/src/reset-password/data/tests/sagas.test.js +0 -185
  468. package/src/reset-password/index.js +0 -5
  469. package/src/reset-password/messages.js +0 -88
  470. package/src/reset-password/tests/ResetPasswordPage.test.jsx +0 -241
  471. package/src/routes.jsx +0 -79
  472. package/src/setupTest.js +0 -68
  473. /package/{src → dist}/base-container/components/image-layout/index.scss +0 -0
  474. /package/{src/index.ts → dist/index.d.ts} +0 -0
  475. /package/{src → dist}/sass/_base_component.scss +0 -0
  476. /package/{src → dist}/sass/_forgot_password.scss +0 -0
  477. /package/{src → dist}/sass/_login_page.scss +0 -0
  478. /package/{src → dist}/sass/_progressive_profiling_page.scss +0 -0
  479. /package/{src → dist}/sass/_reset_password.scss +0 -0
  480. /package/{src → dist}/sass/_style.scss +0 -0
@@ -0,0 +1,6 @@
1
+ export { default as NameField } from "./NameField/NameField";
2
+ export { default as EmailField } from "./EmailField/EmailField";
3
+ export { default as UsernameField } from "./UsernameField/UsernameField";
4
+ export { default as CountryField } from "./CountryField/CountryField";
5
+ export { default as HonorCode } from "./HonorCodeField/HonorCode";
6
+ export { default as TermsOfService } from "./TermsOfServiceField/TermsOfService";
@@ -4,3 +4,4 @@ export { default as UsernameField } from './UsernameField/UsernameField';
4
4
  export { default as CountryField } from './CountryField/CountryField';
5
5
  export { default as HonorCode } from './HonorCodeField/HonorCode';
6
6
  export { default as TermsOfService } from './TermsOfServiceField/TermsOfService';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/register/RegistrationFields/index.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,sCAAsC,CAAC","sourcesContent":["export { default as NameField } from './NameField/NameField';\nexport { default as EmailField } from './EmailField/EmailField';\nexport { default as UsernameField } from './UsernameField/UsernameField';\nexport { default as CountryField } from './CountryField/CountryField';\nexport { default as HonorCode } from './HonorCodeField/HonorCode';\nexport { default as TermsOfService } from './TermsOfServiceField/TermsOfService';\n"]}
@@ -0,0 +1,18 @@
1
+ export default RegistrationPage;
2
+ /**
3
+ * Inner Registration Page component that uses the context
4
+ */
5
+ declare function RegistrationPage(props: any): import("react/jsx-runtime").JSX.Element | null;
6
+ declare namespace RegistrationPage {
7
+ namespace propTypes {
8
+ let institutionLogin: PropTypes.Requireable<boolean>;
9
+ let handleInstitutionLogin: PropTypes.Requireable<(...args: any[]) => any>;
10
+ }
11
+ namespace defaultProps {
12
+ let handleInstitutionLogin_1: null;
13
+ export { handleInstitutionLogin_1 as handleInstitutionLogin };
14
+ let institutionLogin_1: boolean;
15
+ export { institutionLogin_1 as institutionLogin };
16
+ }
17
+ }
18
+ import PropTypes from 'prop-types';
@@ -0,0 +1,259 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
11
+ import { useEffect, useMemo, useState } from 'react';
12
+ import { fetchAuthenticatedUser, hydrateAuthenticatedUser, useAppConfig, getSiteConfig, sendPageEvent, sendTrackEvent, useIntl, } from '@openedx/frontend-base';
13
+ import { Form, Spinner, StatefulButton } from '@openedx/paragon';
14
+ import classNames from 'classnames';
15
+ import PropTypes from 'prop-types';
16
+ import { Helmet } from 'react-helmet';
17
+ import Skeleton from 'react-loading-skeleton';
18
+ import ConfigurableRegistrationForm from './components/ConfigurableRegistrationForm';
19
+ import { useRegisterContext } from './components/RegisterContext';
20
+ import RegistrationFailure from './components/RegistrationFailure';
21
+ import { useFieldValidations, useRegistration } from './data/apiHook';
22
+ import { FORM_SUBMISSION_ERROR, TPA_AUTHENTICATION_FAILURE, } from './data/constants';
23
+ import { isFormValid, prepareRegistrationPayload, } from './data/utils';
24
+ import messages from './messages';
25
+ import { EmailField, NameField, UsernameField } from './RegistrationFields';
26
+ import { InstitutionLogistration, PasswordField, RedirectLogistration, ThirdPartyAuthAlert, } from '../common-components';
27
+ import { useThirdPartyAuthContext } from '../common-components/components/ThirdPartyAuthContext';
28
+ import { useThirdPartyAuthHook } from '../common-components/data/apiHook';
29
+ import EnterpriseSSO from '../common-components/EnterpriseSSO';
30
+ import ThirdPartyAuth from '../common-components/ThirdPartyAuth';
31
+ import { registerPath } from '../constants';
32
+ import { COMPLETE_STATE, DEFAULT_STATE, PENDING_STATE } from '../data/constants';
33
+ import { getAllPossibleQueryParams, getTpaHint, getTpaProvider, isHostAvailableInQueryParams, setCookie, } from '../data/utils';
34
+ /**
35
+ * Inner Registration Page component that uses the context
36
+ */
37
+ const RegistrationPage = (props) => {
38
+ var _a;
39
+ const { formatMessage } = useIntl();
40
+ const { fieldDescriptions, optionalFields, thirdPartyAuthApiStatus, thirdPartyAuthContext, setThirdPartyAuthContextBegin, setThirdPartyAuthContextSuccess, setThirdPartyAuthContextFailure, } = useThirdPartyAuthContext();
41
+ const { autoSubmitRegForm, currentProvider, finishAuthUrl, pipelineUserDetails, providers, secondaryProviders, errorMessage: thirdPartyAuthErrorMessage, } = thirdPartyAuthContext;
42
+ const { clearRegistrationBackendError, registrationFormData, registrationResult, registrationError, setEmailSuggestionContext, updateRegistrationFormData, setRegistrationError, setRegistrationResult, setValidationsSuccess, setValidationsFailure, validationApiRateLimited, backendValidations, setBackendCountryCode, } = useRegisterContext();
43
+ const fieldValidationsMutation = useFieldValidations({
44
+ onSuccess: (data) => { setValidationsSuccess(data); },
45
+ onError: () => { setValidationsFailure(); },
46
+ });
47
+ const registrationEmbedded = isHostAvailableInQueryParams();
48
+ const platformName = getSiteConfig().siteName;
49
+ const { handleInstitutionLogin, institutionLogin, } = props;
50
+ const { ENABLE_AUTO_GENERATED_USERNAME, ENABLE_PROGRESSIVE_PROFILING_ON_AUTHN, MARKETING_EMAILS_OPT_IN, USER_RETENTION_COOKIE_NAME, SESSION_COOKIE_DOMAIN, } = useAppConfig();
51
+ const flags = {
52
+ showMarketingEmailOptInCheckbox: MARKETING_EMAILS_OPT_IN,
53
+ autoGeneratedUsernameEnabled: ENABLE_AUTO_GENERATED_USERNAME,
54
+ };
55
+ const backendRegistrationError = registrationError;
56
+ const registrationMutation = useRegistration({
57
+ onSuccess: (data) => __awaiter(void 0, void 0, void 0, function* () {
58
+ const redirectUrl = localNextPath || data.redirectUrl || '';
59
+ if (redirectUrl.startsWith('/')) {
60
+ yield fetchAuthenticatedUser({ forceRefresh: true });
61
+ // Hydrate in the background — publishes AUTHENTICATED_USER_CHANGED after
62
+ // SPA navigation, so the header picks up the full user profile (avatar, etc.)
63
+ hydrateAuthenticatedUser();
64
+ }
65
+ setRegistrationResult(Object.assign(Object.assign({}, data), { redirectUrl }));
66
+ setRegistrationError({});
67
+ }),
68
+ onError: (errorData) => {
69
+ setRegistrationError(errorData);
70
+ },
71
+ });
72
+ const [userPipelineDataLoaded, setUserPipelineDataLoaded] = useState(false);
73
+ const registrationErrorCode = (registrationError === null || registrationError === void 0 ? void 0 : registrationError.errorCode) || (backendRegistrationError === null || backendRegistrationError === void 0 ? void 0 : backendRegistrationError.errorCode);
74
+ const submitState = registrationMutation.isPending ? PENDING_STATE : DEFAULT_STATE;
75
+ const queryParams = useMemo(() => getAllPossibleQueryParams(), []);
76
+ const localNextPath = ((_a = queryParams.next) === null || _a === void 0 ? void 0 : _a.startsWith('/')) ? queryParams.next : null;
77
+ const tpaHint = useMemo(() => getTpaHint(), []);
78
+ // Initialize form state from local backedUpFormData
79
+ const backedUpFormData = registrationFormData;
80
+ const [formFields, setFormFields] = useState(Object.assign({}, backedUpFormData.formFields));
81
+ const [configurableFormFields, setConfigurableFormFields] = useState(Object.assign({}, backedUpFormData.configurableFormFields));
82
+ const [errors, setErrors] = useState(Object.assign({}, backedUpFormData.errors));
83
+ const [errorCode, setErrorCode] = useState({ type: '', count: 0 });
84
+ const [formStartTime, setFormStartTime] = useState(null);
85
+ // temporary error state for embedded experience because we don't want to show errors on blur
86
+ const [temporaryErrors, setTemporaryErrors] = useState(Object.assign({}, backedUpFormData.errors));
87
+ const { cta, host } = queryParams;
88
+ const buttonLabel = cta
89
+ ? formatMessage(messages['create.account.cta.button'], { label: cta })
90
+ : formatMessage(messages['create.account.for.free.button']);
91
+ /**
92
+ * Set the userPipelineDetails data in formFields for only first time
93
+ */
94
+ useEffect(() => {
95
+ if (!userPipelineDataLoaded && thirdPartyAuthApiStatus === COMPLETE_STATE) {
96
+ if (thirdPartyAuthErrorMessage) {
97
+ setErrorCode(prevState => ({ type: TPA_AUTHENTICATION_FAILURE, count: prevState.count + 1 }));
98
+ }
99
+ if (pipelineUserDetails && Object.keys(pipelineUserDetails).length !== 0) {
100
+ const { name = '', username = '', email = '' } = pipelineUserDetails;
101
+ setFormFields(prevState => (Object.assign(Object.assign({}, prevState), { name, username, email })));
102
+ setUserPipelineDataLoaded(true);
103
+ }
104
+ }
105
+ }, [
106
+ thirdPartyAuthApiStatus,
107
+ thirdPartyAuthErrorMessage,
108
+ pipelineUserDetails,
109
+ userPipelineDataLoaded,
110
+ ]);
111
+ const params = Object.assign(Object.assign({}, queryParams), { is_register_page: true });
112
+ if (tpaHint) {
113
+ params.tpa_hint = tpaHint;
114
+ }
115
+ const { data, isSuccess, error } = useThirdPartyAuthHook(registerPath, params);
116
+ useEffect(() => {
117
+ if (!formStartTime) {
118
+ sendPageEvent('login_and_registration', 'register');
119
+ setThirdPartyAuthContextBegin();
120
+ setFormStartTime(Date.now());
121
+ }
122
+ if (formStartTime) {
123
+ if (isSuccess && data) {
124
+ setThirdPartyAuthContextSuccess(data.fieldDescriptions, data.optionalFields, data.thirdPartyAuthContext);
125
+ setBackendCountryCode(data.thirdPartyAuthContext.countryCode);
126
+ }
127
+ if (error) {
128
+ setThirdPartyAuthContextFailure();
129
+ }
130
+ }
131
+ }, [formStartTime, isSuccess, data, error,
132
+ setThirdPartyAuthContextBegin, setThirdPartyAuthContextSuccess,
133
+ setBackendCountryCode, setThirdPartyAuthContextFailure]);
134
+ // Handle backend validation errors from context
135
+ useEffect(() => {
136
+ if (backendValidations) {
137
+ if (registrationEmbedded) {
138
+ setTemporaryErrors(prevErrors => (Object.assign(Object.assign({}, prevErrors), backendValidations)));
139
+ }
140
+ else {
141
+ setErrors(prevErrors => (Object.assign(Object.assign({}, prevErrors), backendValidations)));
142
+ }
143
+ }
144
+ }, [backendValidations, registrationEmbedded]);
145
+ useEffect(() => {
146
+ if (registrationErrorCode) {
147
+ setErrorCode(prevState => ({ type: registrationErrorCode, count: prevState.count + 1 }));
148
+ }
149
+ }, [registrationErrorCode]);
150
+ useEffect(() => {
151
+ if (registrationResult.success) {
152
+ // This event is used by GTM
153
+ sendTrackEvent('edx.bi.user.account.registered.client', {});
154
+ // This is used by the "User Retention Rate Event" on GTM
155
+ setCookie(USER_RETENTION_COOKIE_NAME, true, SESSION_COOKIE_DOMAIN);
156
+ }
157
+ }, [registrationResult, USER_RETENTION_COOKIE_NAME, SESSION_COOKIE_DOMAIN]);
158
+ const handleOnChange = (event) => {
159
+ const { name } = event.target;
160
+ const value = event.target.type === 'checkbox' ? event.target.checked : event.target.value;
161
+ if (backendRegistrationError[name]) {
162
+ clearRegistrationBackendError(name);
163
+ }
164
+ // Clear context registration errors
165
+ if (registrationError.errorCode) {
166
+ setRegistrationError({});
167
+ }
168
+ setErrors(prevErrors => (Object.assign(Object.assign({}, prevErrors), { [name]: '' })));
169
+ // Update local state
170
+ const newFormFields = Object.assign(Object.assign({}, formFields), { [name]: value });
171
+ setFormFields(newFormFields);
172
+ // Save to context for persistence across tab switches
173
+ updateRegistrationFormData({
174
+ formFields: newFormFields,
175
+ errors,
176
+ configurableFormFields,
177
+ });
178
+ };
179
+ const handleErrorChange = (fieldName, errorMessage) => {
180
+ if (registrationEmbedded) {
181
+ setTemporaryErrors(prevErrors => (Object.assign(Object.assign({}, prevErrors), { [fieldName]: errorMessage })));
182
+ if (errorMessage === '' && errors[fieldName] !== '') {
183
+ setErrors(prevErrors => (Object.assign(Object.assign({}, prevErrors), { [fieldName]: errorMessage })));
184
+ }
185
+ }
186
+ else {
187
+ setErrors(prevErrors => (Object.assign(Object.assign({}, prevErrors), { [fieldName]: errorMessage })));
188
+ }
189
+ };
190
+ const registerUser = () => {
191
+ const totalRegistrationTime = (Date.now() - formStartTime) / 1000;
192
+ let payload = Object.assign({}, formFields);
193
+ if (currentProvider) {
194
+ delete payload.password;
195
+ payload.social_auth_provider = currentProvider;
196
+ }
197
+ if (flags.autoGeneratedUsernameEnabled) {
198
+ delete payload.username;
199
+ }
200
+ // Validating form data before submitting
201
+ const { isValid, fieldErrors, emailSuggestion } = isFormValid(payload, registrationEmbedded ? temporaryErrors : errors, configurableFormFields, fieldDescriptions, formatMessage);
202
+ setErrors(Object.assign({}, fieldErrors));
203
+ updateRegistrationFormData({
204
+ formFields,
205
+ errors: fieldErrors,
206
+ configurableFormFields,
207
+ });
208
+ setEmailSuggestionContext(emailSuggestion.suggestion, emailSuggestion.type);
209
+ // returning if not valid
210
+ if (!isValid) {
211
+ setErrorCode(prevState => ({ type: FORM_SUBMISSION_ERROR, count: prevState.count + 1 }));
212
+ return;
213
+ }
214
+ // Preparing payload for submission
215
+ payload = prepareRegistrationPayload(payload, configurableFormFields, flags.showMarketingEmailOptInCheckbox, totalRegistrationTime, queryParams);
216
+ // making register call with React Query
217
+ registrationMutation.mutate(payload);
218
+ };
219
+ const handleSubmit = (e) => {
220
+ e.preventDefault();
221
+ registerUser();
222
+ };
223
+ useEffect(() => {
224
+ if (autoSubmitRegForm && userPipelineDataLoaded) {
225
+ registerUser();
226
+ }
227
+ }, [autoSubmitRegForm, userPipelineDataLoaded]); // eslint-disable-line react-hooks/exhaustive-deps
228
+ const renderForm = () => {
229
+ if (institutionLogin) {
230
+ return (_jsx(InstitutionLogistration, { secondaryProviders: secondaryProviders, headingTitle: formatMessage(messages['register.institution.login.page.title']) }));
231
+ }
232
+ return (_jsxs(_Fragment, { children: [_jsx(Helmet, { children: _jsx("title", { children: formatMessage(messages['register.page.title'], { siteName: getSiteConfig().siteName }) }) }), _jsx(RedirectLogistration, { host: host, authenticatedUser: registrationResult.authenticatedUser, success: registrationResult.success, redirectUrl: registrationResult.redirectUrl, finishAuthUrl: finishAuthUrl, optionalFields: optionalFields, registrationEmbedded: registrationEmbedded, redirectToProgressiveProfilingPage: ENABLE_PROGRESSIVE_PROFILING_ON_AUTHN && !!Object.keys(optionalFields.fields).length }), autoSubmitRegForm && !errorCode.type ? (_jsx("div", { className: "mw-xs mt-5 text-center", children: _jsx(Spinner, { animation: "border", variant: "primary", id: "tpa-spinner" }) })) : (_jsxs("div", { className: classNames('mw-xs mt-3', { 'w-100 m-auto pt-4 main-content': registrationEmbedded }), children: [_jsx(ThirdPartyAuthAlert, { currentProvider: currentProvider, platformName: platformName, referrer: registerPath }), _jsx(RegistrationFailure, { errorCode: errorCode.type, failureCount: errorCode.count, context: { provider: currentProvider, errorMessage: thirdPartyAuthErrorMessage } }), _jsxs(Form, { id: "registration-form", name: "registration-form", children: [_jsx(NameField, { name: "name", value: formFields.name, shouldFetchUsernameSuggestions: !formFields.username.trim(), handleChange: handleOnChange, handleErrorChange: handleErrorChange, errorMessage: errors.name, helpText: [formatMessage(messages['help.text.name'])], floatingLabel: formatMessage(messages['registration.fullname.label']) }), _jsx(EmailField, { name: "email", value: formFields.email, confirmEmailValue: configurableFormFields === null || configurableFormFields === void 0 ? void 0 : configurableFormFields.confirm_email, handleErrorChange: handleErrorChange, handleChange: handleOnChange, errorMessage: errors.email, helpText: [formatMessage(messages['help.text.email'])], floatingLabel: formatMessage(messages['registration.email.label']) }), !flags.autoGeneratedUsernameEnabled && (_jsx(UsernameField, { name: "username", spellCheck: "false", value: formFields.username, handleChange: handleOnChange, handleErrorChange: handleErrorChange, errorMessage: errors.username, helpText: [formatMessage(messages['help.text.username.1']), formatMessage(messages['help.text.username.2'])], floatingLabel: formatMessage(messages['registration.username.label']) })), !currentProvider && (_jsx(PasswordField, { name: "password", value: formFields.password, handleChange: handleOnChange, handleErrorChange: handleErrorChange, errorMessage: errors.password, floatingLabel: formatMessage(messages['registration.password.label']), clearRegistrationBackendError: clearRegistrationBackendError, validateField: fieldValidationsMutation.mutate, validationApiRateLimited: validationApiRateLimited })), _jsx(ConfigurableRegistrationForm, { email: formFields.email, fieldErrors: errors, formFields: configurableFormFields, setFieldErrors: registrationEmbedded ? setTemporaryErrors : setErrors, setFormFields: setConfigurableFormFields, autoSubmitRegisterForm: autoSubmitRegForm, fieldDescriptions: fieldDescriptions }), _jsx(StatefulButton, { id: "register-user", name: "register-user", type: "submit", variant: "brand", className: "register-button mt-4 mb-4", state: submitState, labels: {
233
+ default: buttonLabel,
234
+ pending: '',
235
+ }, onClick: handleSubmit, onMouseDown: (e) => e.preventDefault() }), !registrationEmbedded && (_jsx(ThirdPartyAuth, { currentProvider: currentProvider, providers: providers, secondaryProviders: secondaryProviders, handleInstitutionLogin: handleInstitutionLogin, thirdPartyAuthApiStatus: thirdPartyAuthApiStatus }))] })] }))] }));
236
+ };
237
+ if (tpaHint) {
238
+ if (thirdPartyAuthApiStatus === PENDING_STATE) {
239
+ return _jsx(Skeleton, { height: 36 });
240
+ }
241
+ const { provider, skipHintedLogin } = getTpaProvider(tpaHint, providers, secondaryProviders);
242
+ if (skipHintedLogin) {
243
+ window.location.href = getSiteConfig().lmsBaseUrl + provider.registerUrl;
244
+ return null;
245
+ }
246
+ return provider ? _jsx(EnterpriseSSO, { provider: provider }) : renderForm();
247
+ }
248
+ return (renderForm());
249
+ };
250
+ RegistrationPage.propTypes = {
251
+ institutionLogin: PropTypes.bool,
252
+ handleInstitutionLogin: PropTypes.func,
253
+ };
254
+ RegistrationPage.defaultProps = {
255
+ handleInstitutionLogin: null,
256
+ institutionLogin: false,
257
+ };
258
+ export default RegistrationPage;
259
+ //# sourceMappingURL=RegistrationPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RegistrationPage.js","sourceRoot":"","sources":["../../src/register/RegistrationPage.jsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useMemo, useState } from 'react';\n\nimport {\n fetchAuthenticatedUser,\n hydrateAuthenticatedUser,\n useAppConfig,\n getSiteConfig,\n sendPageEvent, sendTrackEvent,\n useIntl,\n} from '@openedx/frontend-base';\nimport { Form, Spinner, StatefulButton } from '@openedx/paragon';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { Helmet } from 'react-helmet';\nimport Skeleton from 'react-loading-skeleton';\n\nimport ConfigurableRegistrationForm from './components/ConfigurableRegistrationForm';\nimport { useRegisterContext } from './components/RegisterContext';\nimport RegistrationFailure from './components/RegistrationFailure';\nimport { useFieldValidations, useRegistration } from './data/apiHook';\nimport {\n FORM_SUBMISSION_ERROR,\n TPA_AUTHENTICATION_FAILURE,\n} from './data/constants';\nimport {\n isFormValid, prepareRegistrationPayload,\n} from './data/utils';\nimport messages from './messages';\nimport { EmailField, NameField, UsernameField } from './RegistrationFields';\nimport {\n InstitutionLogistration,\n PasswordField,\n RedirectLogistration,\n ThirdPartyAuthAlert,\n} from '../common-components';\nimport { useThirdPartyAuthContext } from '../common-components/components/ThirdPartyAuthContext';\nimport { useThirdPartyAuthHook } from '../common-components/data/apiHook';\nimport EnterpriseSSO from '../common-components/EnterpriseSSO';\nimport ThirdPartyAuth from '../common-components/ThirdPartyAuth';\nimport { registerPath } from '../constants';\nimport { COMPLETE_STATE, DEFAULT_STATE, PENDING_STATE } from '../data/constants';\nimport {\n getAllPossibleQueryParams, getTpaHint, getTpaProvider, isHostAvailableInQueryParams, setCookie,\n} from '../data/utils';\n\n/**\n * Inner Registration Page component that uses the context\n */\nconst RegistrationPage = (props) => {\n const { formatMessage } = useIntl();\n const {\n fieldDescriptions,\n optionalFields,\n thirdPartyAuthApiStatus,\n thirdPartyAuthContext,\n setThirdPartyAuthContextBegin,\n setThirdPartyAuthContextSuccess,\n setThirdPartyAuthContextFailure,\n } = useThirdPartyAuthContext();\n\n const {\n autoSubmitRegForm,\n currentProvider,\n finishAuthUrl,\n pipelineUserDetails,\n providers,\n secondaryProviders,\n errorMessage: thirdPartyAuthErrorMessage,\n } = thirdPartyAuthContext;\n\n const {\n clearRegistrationBackendError,\n registrationFormData,\n registrationResult,\n registrationError,\n setEmailSuggestionContext,\n updateRegistrationFormData,\n setRegistrationError,\n setRegistrationResult,\n setValidationsSuccess,\n setValidationsFailure,\n validationApiRateLimited,\n backendValidations,\n setBackendCountryCode,\n } = useRegisterContext();\n\n const fieldValidationsMutation = useFieldValidations({\n onSuccess: (data) => { setValidationsSuccess(data); },\n onError: () => { setValidationsFailure(); },\n });\n\n const registrationEmbedded = isHostAvailableInQueryParams();\n const platformName = getSiteConfig().siteName;\n const {\n handleInstitutionLogin,\n institutionLogin,\n } = props;\n const {\n ENABLE_AUTO_GENERATED_USERNAME,\n ENABLE_PROGRESSIVE_PROFILING_ON_AUTHN,\n MARKETING_EMAILS_OPT_IN,\n USER_RETENTION_COOKIE_NAME,\n SESSION_COOKIE_DOMAIN,\n } = useAppConfig();\n const flags = {\n showMarketingEmailOptInCheckbox: MARKETING_EMAILS_OPT_IN,\n autoGeneratedUsernameEnabled: ENABLE_AUTO_GENERATED_USERNAME,\n };\n\n const backendRegistrationError = registrationError;\n const registrationMutation = useRegistration({\n onSuccess: async (data) => {\n const redirectUrl = localNextPath || data.redirectUrl || '';\n if (redirectUrl.startsWith('/')) {\n await fetchAuthenticatedUser({ forceRefresh: true });\n // Hydrate in the background — publishes AUTHENTICATED_USER_CHANGED after\n // SPA navigation, so the header picks up the full user profile (avatar, etc.)\n hydrateAuthenticatedUser();\n }\n setRegistrationResult({ ...data, redirectUrl });\n setRegistrationError({});\n },\n onError: (errorData) => {\n setRegistrationError(errorData);\n },\n });\n\n const [userPipelineDataLoaded, setUserPipelineDataLoaded] = useState(false);\n const registrationErrorCode = registrationError?.errorCode || backendRegistrationError?.errorCode;\n const submitState = registrationMutation.isPending ? PENDING_STATE : DEFAULT_STATE;\n const queryParams = useMemo(() => getAllPossibleQueryParams(), []);\n const localNextPath = queryParams.next?.startsWith('/') ? queryParams.next : null;\n const tpaHint = useMemo(() => getTpaHint(), []);\n // Initialize form state from local backedUpFormData\n const backedUpFormData = registrationFormData;\n const [formFields, setFormFields] = useState({ ...backedUpFormData.formFields });\n const [configurableFormFields, setConfigurableFormFields] = useState({ ...backedUpFormData.configurableFormFields });\n const [errors, setErrors] = useState({ ...backedUpFormData.errors });\n const [errorCode, setErrorCode] = useState({ type: '', count: 0 });\n const [formStartTime, setFormStartTime] = useState(null);\n // temporary error state for embedded experience because we don't want to show errors on blur\n const [temporaryErrors, setTemporaryErrors] = useState({ ...backedUpFormData.errors });\n const { cta, host } = queryParams;\n const buttonLabel = cta\n ? formatMessage(messages['create.account.cta.button'], { label: cta })\n : formatMessage(messages['create.account.for.free.button']);\n\n /**\n * Set the userPipelineDetails data in formFields for only first time\n */\n useEffect(() => {\n if (!userPipelineDataLoaded && thirdPartyAuthApiStatus === COMPLETE_STATE) {\n if (thirdPartyAuthErrorMessage) {\n setErrorCode(prevState => ({ type: TPA_AUTHENTICATION_FAILURE, count: prevState.count + 1 }));\n }\n if (pipelineUserDetails && Object.keys(pipelineUserDetails).length !== 0) {\n const { name = '', username = '', email = '' } = pipelineUserDetails;\n setFormFields(prevState => ({\n ...prevState, name, username, email,\n }));\n setUserPipelineDataLoaded(true);\n }\n }\n }, [\n thirdPartyAuthApiStatus,\n thirdPartyAuthErrorMessage,\n pipelineUserDetails,\n userPipelineDataLoaded,\n ]);\n\n const params = { ...queryParams, is_register_page: true };\n if (tpaHint) {\n params.tpa_hint = tpaHint;\n }\n const { data, isSuccess, error } = useThirdPartyAuthHook(registerPath, params);\n useEffect(() => {\n if (!formStartTime) {\n sendPageEvent('login_and_registration', 'register');\n setThirdPartyAuthContextBegin();\n setFormStartTime(Date.now());\n }\n if (formStartTime) {\n if (isSuccess && data) {\n setThirdPartyAuthContextSuccess(\n data.fieldDescriptions,\n data.optionalFields,\n data.thirdPartyAuthContext,\n );\n setBackendCountryCode(data.thirdPartyAuthContext.countryCode);\n }\n\n if (error) {\n setThirdPartyAuthContextFailure();\n }\n }\n }, [formStartTime, isSuccess, data, error,\n setThirdPartyAuthContextBegin, setThirdPartyAuthContextSuccess,\n setBackendCountryCode, setThirdPartyAuthContextFailure]);\n\n // Handle backend validation errors from context\n useEffect(() => {\n if (backendValidations) {\n if (registrationEmbedded) {\n setTemporaryErrors(prevErrors => ({ ...prevErrors, ...backendValidations }));\n } else {\n setErrors(prevErrors => ({ ...prevErrors, ...backendValidations }));\n }\n }\n }, [backendValidations, registrationEmbedded]);\n\n useEffect(() => {\n if (registrationErrorCode) {\n setErrorCode(prevState => ({ type: registrationErrorCode, count: prevState.count + 1 }));\n }\n }, [registrationErrorCode]);\n\n useEffect(() => {\n if (registrationResult.success) {\n // This event is used by GTM\n sendTrackEvent('edx.bi.user.account.registered.client', {});\n\n // This is used by the \"User Retention Rate Event\" on GTM\n setCookie(USER_RETENTION_COOKIE_NAME, true, SESSION_COOKIE_DOMAIN);\n }\n }, [registrationResult, USER_RETENTION_COOKIE_NAME, SESSION_COOKIE_DOMAIN]);\n\n const handleOnChange = (event) => {\n const { name } = event.target;\n const value = event.target.type === 'checkbox' ? event.target.checked : event.target.value;\n if (backendRegistrationError[name]) {\n clearRegistrationBackendError(name);\n }\n // Clear context registration errors\n if (registrationError.errorCode) {\n setRegistrationError({});\n }\n setErrors(prevErrors => ({ ...prevErrors, [name]: '' }));\n // Update local state\n const newFormFields = { ...formFields, [name]: value };\n setFormFields(newFormFields);\n // Save to context for persistence across tab switches\n updateRegistrationFormData({\n formFields: newFormFields,\n errors,\n configurableFormFields,\n });\n };\n\n const handleErrorChange = (fieldName, errorMessage) => {\n if (registrationEmbedded) {\n setTemporaryErrors(prevErrors => ({\n ...prevErrors,\n [fieldName]: errorMessage,\n }));\n if (errorMessage === '' && errors[fieldName] !== '') {\n setErrors(prevErrors => ({\n ...prevErrors,\n [fieldName]: errorMessage,\n }));\n }\n } else {\n setErrors(prevErrors => ({\n ...prevErrors,\n [fieldName]: errorMessage,\n }));\n }\n };\n\n const registerUser = () => {\n const totalRegistrationTime = (Date.now() - formStartTime) / 1000;\n let payload = { ...formFields };\n\n if (currentProvider) {\n delete payload.password;\n payload.social_auth_provider = currentProvider;\n }\n if (flags.autoGeneratedUsernameEnabled) {\n delete payload.username;\n }\n\n // Validating form data before submitting\n const { isValid, fieldErrors, emailSuggestion } = isFormValid(\n payload,\n registrationEmbedded ? temporaryErrors : errors,\n configurableFormFields,\n fieldDescriptions,\n formatMessage,\n );\n setErrors({ ...fieldErrors });\n updateRegistrationFormData({\n formFields,\n errors: fieldErrors,\n configurableFormFields,\n });\n setEmailSuggestionContext(emailSuggestion.suggestion, emailSuggestion.type);\n\n // returning if not valid\n if (!isValid) {\n setErrorCode(prevState => ({ type: FORM_SUBMISSION_ERROR, count: prevState.count + 1 }));\n return;\n }\n\n // Preparing payload for submission\n payload = prepareRegistrationPayload(\n payload,\n configurableFormFields,\n flags.showMarketingEmailOptInCheckbox,\n totalRegistrationTime,\n queryParams,\n );\n // making register call with React Query\n registrationMutation.mutate(payload);\n };\n\n const handleSubmit = (e) => {\n e.preventDefault();\n registerUser();\n };\n\n useEffect(() => {\n if (autoSubmitRegForm && userPipelineDataLoaded) {\n registerUser();\n }\n }, [autoSubmitRegForm, userPipelineDataLoaded]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const renderForm = () => {\n if (institutionLogin) {\n return (\n <InstitutionLogistration\n secondaryProviders={secondaryProviders}\n headingTitle={formatMessage(messages['register.institution.login.page.title'])}\n />\n );\n }\n return (\n <>\n <Helmet>\n <title>{formatMessage(messages['register.page.title'], { siteName: getSiteConfig().siteName })}</title>\n </Helmet>\n <RedirectLogistration\n host={host}\n authenticatedUser={registrationResult.authenticatedUser}\n success={registrationResult.success}\n redirectUrl={registrationResult.redirectUrl}\n finishAuthUrl={finishAuthUrl}\n optionalFields={optionalFields}\n registrationEmbedded={registrationEmbedded}\n redirectToProgressiveProfilingPage={\n ENABLE_PROGRESSIVE_PROFILING_ON_AUTHN && !!Object.keys(optionalFields.fields).length\n }\n />\n {autoSubmitRegForm && !errorCode.type ? (\n <div className=\"mw-xs mt-5 text-center\">\n <Spinner animation=\"border\" variant=\"primary\" id=\"tpa-spinner\" />\n </div>\n ) : (\n <div\n className={classNames(\n 'mw-xs mt-3',\n { 'w-100 m-auto pt-4 main-content': registrationEmbedded },\n )}\n >\n <ThirdPartyAuthAlert\n currentProvider={currentProvider}\n platformName={platformName}\n referrer={registerPath}\n />\n <RegistrationFailure\n errorCode={errorCode.type}\n failureCount={errorCode.count}\n context={{ provider: currentProvider, errorMessage: thirdPartyAuthErrorMessage }}\n />\n <Form id=\"registration-form\" name=\"registration-form\">\n <NameField\n name=\"name\"\n value={formFields.name}\n shouldFetchUsernameSuggestions={!formFields.username.trim()}\n handleChange={handleOnChange}\n handleErrorChange={handleErrorChange}\n errorMessage={errors.name}\n helpText={[formatMessage(messages['help.text.name'])]}\n floatingLabel={formatMessage(messages['registration.fullname.label'])}\n />\n <EmailField\n name=\"email\"\n value={formFields.email}\n confirmEmailValue={configurableFormFields?.confirm_email}\n handleErrorChange={handleErrorChange}\n handleChange={handleOnChange}\n errorMessage={errors.email}\n helpText={[formatMessage(messages['help.text.email'])]}\n floatingLabel={formatMessage(messages['registration.email.label'])}\n />\n {!flags.autoGeneratedUsernameEnabled && (\n <UsernameField\n name=\"username\"\n spellCheck=\"false\"\n value={formFields.username}\n handleChange={handleOnChange}\n handleErrorChange={handleErrorChange}\n errorMessage={errors.username}\n helpText={[formatMessage(messages['help.text.username.1']), formatMessage(messages['help.text.username.2'])]}\n floatingLabel={formatMessage(messages['registration.username.label'])}\n />\n )}\n {!currentProvider && (\n <PasswordField\n name=\"password\"\n value={formFields.password}\n handleChange={handleOnChange}\n handleErrorChange={handleErrorChange}\n errorMessage={errors.password}\n floatingLabel={formatMessage(messages['registration.password.label'])}\n clearRegistrationBackendError={clearRegistrationBackendError}\n validateField={fieldValidationsMutation.mutate}\n validationApiRateLimited={validationApiRateLimited}\n />\n )}\n <ConfigurableRegistrationForm\n email={formFields.email}\n fieldErrors={errors}\n formFields={configurableFormFields}\n setFieldErrors={registrationEmbedded ? setTemporaryErrors : setErrors}\n setFormFields={setConfigurableFormFields}\n autoSubmitRegisterForm={autoSubmitRegForm}\n fieldDescriptions={fieldDescriptions}\n />\n <StatefulButton\n id=\"register-user\"\n name=\"register-user\"\n type=\"submit\"\n variant=\"brand\"\n className=\"register-button mt-4 mb-4\"\n state={submitState}\n labels={{\n default: buttonLabel,\n pending: '',\n }}\n onClick={handleSubmit}\n onMouseDown={(e) => e.preventDefault()}\n />\n {!registrationEmbedded && (\n <ThirdPartyAuth\n currentProvider={currentProvider}\n providers={providers}\n secondaryProviders={secondaryProviders}\n handleInstitutionLogin={handleInstitutionLogin}\n thirdPartyAuthApiStatus={thirdPartyAuthApiStatus}\n />\n )}\n </Form>\n </div>\n )}\n </>\n );\n };\n\n if (tpaHint) {\n if (thirdPartyAuthApiStatus === PENDING_STATE) {\n return <Skeleton height={36} />;\n }\n const { provider, skipHintedLogin } = getTpaProvider(tpaHint, providers, secondaryProviders);\n if (skipHintedLogin) {\n window.location.href = getSiteConfig().lmsBaseUrl + provider.registerUrl;\n return null;\n }\n return provider ? <EnterpriseSSO provider={provider} /> : renderForm();\n }\n return (\n renderForm()\n );\n};\n\nRegistrationPage.propTypes = {\n institutionLogin: PropTypes.bool,\n handleInstitutionLogin: PropTypes.func,\n};\n\nRegistrationPage.defaultProps = {\n handleInstitutionLogin: null,\n institutionLogin: false,\n};\n\nexport default RegistrationPage;\n"]}
@@ -0,0 +1,37 @@
1
+ export default ConfigurableRegistrationForm;
2
+ /**
3
+ * Fields on registration page that are not the default required fields (name, email, username, password).
4
+ * These configurable required fields are defined on the backend using REGISTRATION_EXTRA_FIELDS setting.
5
+ *
6
+ * Country and Honor Code/Terms of Services (if enabled) will appear at the bottom of the form, even if they
7
+ * appear higher in order returned by backend. This is to make the user experience better.
8
+ *
9
+ * */
10
+ declare function ConfigurableRegistrationForm(props: any): import("react/jsx-runtime").JSX.Element;
11
+ declare namespace ConfigurableRegistrationForm {
12
+ namespace propTypes {
13
+ let email: PropTypes.Validator<string>;
14
+ let fieldDescriptions: PropTypes.Requireable<PropTypes.InferProps<{}>>;
15
+ let fieldErrors: PropTypes.Validator<NonNullable<PropTypes.InferProps<{
16
+ country: PropTypes.Requireable<string>;
17
+ }>>>;
18
+ let formFields: PropTypes.Validator<NonNullable<PropTypes.InferProps<{
19
+ country: PropTypes.Requireable<PropTypes.InferProps<{
20
+ displayValue: PropTypes.Requireable<string>;
21
+ countryCode: PropTypes.Requireable<string>;
22
+ }>>;
23
+ honor_code: PropTypes.Requireable<boolean>;
24
+ marketingEmailsOptIn: PropTypes.Requireable<boolean>;
25
+ }>>>;
26
+ let setFieldErrors: PropTypes.Validator<(...args: any[]) => any>;
27
+ let setFormFields: PropTypes.Validator<(...args: any[]) => any>;
28
+ let autoSubmitRegistrationForm: PropTypes.Requireable<boolean>;
29
+ }
30
+ namespace defaultProps {
31
+ let fieldDescriptions_1: {};
32
+ export { fieldDescriptions_1 as fieldDescriptions };
33
+ let autoSubmitRegistrationForm_1: boolean;
34
+ export { autoSubmitRegistrationForm_1 as autoSubmitRegistrationForm };
35
+ }
36
+ }
37
+ import PropTypes from 'prop-types';
@@ -0,0 +1,145 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useMemo } from 'react';
3
+ import { useAppConfig, getSiteConfig, getLocale, useIntl } from '@openedx/frontend-base';
4
+ import PropTypes from 'prop-types';
5
+ import { getCountryList } from '../../data/countries';
6
+ import { FormFieldRenderer } from '../../field-renderer';
7
+ import { FIELDS } from '../data/constants';
8
+ import messages from '../messages';
9
+ import { CountryField, HonorCode, TermsOfService } from '../RegistrationFields';
10
+ /**
11
+ * Fields on registration page that are not the default required fields (name, email, username, password).
12
+ * These configurable required fields are defined on the backend using REGISTRATION_EXTRA_FIELDS setting.
13
+ *
14
+ * Country and Honor Code/Terms of Services (if enabled) will appear at the bottom of the form, even if they
15
+ * appear higher in order returned by backend. This is to make the user experience better.
16
+ *
17
+ * */
18
+ const ConfigurableRegistrationForm = (props) => {
19
+ const { formatMessage } = useIntl();
20
+ const { email, fieldDescriptions, fieldErrors, formFields, setFieldErrors, setFormFields, autoSubmitRegistrationForm, } = props;
21
+ const { ENABLE_DYNAMIC_REGISTRATION_FIELDS, MARKETING_EMAILS_OPT_IN, } = useAppConfig();
22
+ /**
23
+ * The reason for adding the entry 'United States' is that Chrome auto-fills the form with 'United
24
+ * States' instead of 'United States of America', which does not exist in the country dropdown list.
25
+ * So we added the United States entry in the dropdown list.
26
+ */
27
+ const countryList = useMemo(() => getCountryList(getLocale()).concat([{ code: 'US', name: 'United States' }]), []);
28
+ let showTermsOfServiceAndHonorCode = false;
29
+ let showCountryField = false;
30
+ const formFieldDescriptions = [];
31
+ const honorCode = [];
32
+ const flags = {
33
+ showConfigurableRegistrationFields: ENABLE_DYNAMIC_REGISTRATION_FIELDS,
34
+ showMarketingEmailOptInCheckbox: MARKETING_EMAILS_OPT_IN,
35
+ };
36
+ /**
37
+ * If auto submitting register form, we will check tos and honor code fields if they exist for feature parity.
38
+ */
39
+ useEffect(() => {
40
+ if (autoSubmitRegistrationForm) {
41
+ if (Object.keys(fieldDescriptions).includes(FIELDS.HONOR_CODE)) {
42
+ setFormFields(prevState => (Object.assign(Object.assign({}, prevState), { [FIELDS.HONOR_CODE]: true })));
43
+ }
44
+ if (Object.keys(fieldDescriptions).includes(FIELDS.TERMS_OF_SERVICE)) {
45
+ setFormFields(prevState => (Object.assign(Object.assign({}, prevState), { [FIELDS.TERMS_OF_SERVICE]: true })));
46
+ }
47
+ }
48
+ }, [autoSubmitRegistrationForm]); // eslint-disable-line react-hooks/exhaustive-deps
49
+ const handleErrorChange = (fieldName, error) => {
50
+ if (fieldName) {
51
+ setFieldErrors(prevErrors => (Object.assign(Object.assign({}, prevErrors), { [fieldName]: error })));
52
+ }
53
+ };
54
+ const handleOnChange = (event, countryValue = null) => {
55
+ const { name } = event.target;
56
+ let value;
57
+ if (countryValue) {
58
+ value = Object.assign({}, countryValue);
59
+ }
60
+ else {
61
+ value = event.target.type === 'checkbox' ? event.target.checked : event.target.value;
62
+ if (event.target.type === 'checkbox') {
63
+ setFieldErrors(prevErrors => (Object.assign(Object.assign({}, prevErrors), { [name]: '' })));
64
+ }
65
+ }
66
+ setFormFields(prevState => (Object.assign(Object.assign({}, prevState), { [name]: value })));
67
+ };
68
+ const handleOnBlur = (event) => {
69
+ var _a;
70
+ const { name, value } = event.target;
71
+ let error = '';
72
+ if ((!value || !value.trim()) && ((_a = fieldDescriptions[name]) === null || _a === void 0 ? void 0 : _a.error_message)) {
73
+ error = fieldDescriptions[name].error_message;
74
+ }
75
+ else if (name === 'confirm_email' && value !== email) {
76
+ error = formatMessage(messages['email.do.not.match']);
77
+ }
78
+ setFieldErrors(prevErrors => (Object.assign(Object.assign({}, prevErrors), { [name]: error })));
79
+ };
80
+ const handleOnFocus = (event) => {
81
+ const { name } = event.target;
82
+ setFieldErrors(prevErrors => (Object.assign(Object.assign({}, prevErrors), { [name]: '' })));
83
+ };
84
+ if (flags.showConfigurableRegistrationFields) {
85
+ Object.keys(fieldDescriptions).forEach(fieldName => {
86
+ const fieldData = fieldDescriptions[fieldName];
87
+ switch (fieldData.name) {
88
+ case FIELDS.COUNTRY:
89
+ showCountryField = true;
90
+ break;
91
+ case FIELDS.HONOR_CODE:
92
+ if (fieldData.type === 'tos_and_honor_code') {
93
+ showTermsOfServiceAndHonorCode = true;
94
+ }
95
+ else {
96
+ honorCode.push(_jsx("span", { children: _jsx(HonorCode, { fieldType: fieldData.type, value: formFields[fieldData.name], onChangeHandler: handleOnChange, errorMessage: fieldErrors[fieldData.name] }) }, fieldData.name));
97
+ }
98
+ break;
99
+ case FIELDS.TERMS_OF_SERVICE:
100
+ honorCode.push(_jsx("span", { children: _jsx(TermsOfService, { value: formFields[fieldData.name], onChangeHandler: handleOnChange, errorMessage: fieldErrors[fieldData.name] }) }, fieldData.name));
101
+ break;
102
+ default:
103
+ formFieldDescriptions.push(_jsx("span", { children: _jsx(FormFieldRenderer, { fieldData: fieldData, value: formFields[fieldData.name], onChangeHandler: handleOnChange, handleBlur: handleOnBlur, handleFocus: handleOnFocus, errorMessage: fieldErrors[fieldData.name], isRequired: true }) }, fieldData.name));
104
+ }
105
+ });
106
+ }
107
+ if (showCountryField) {
108
+ formFieldDescriptions.push(_jsx("span", { children: _jsx(CountryField, { countryList: countryList, selectedCountry: formFields.country, errorMessage: fieldErrors.country || '', onChangeHandler: handleOnChange, handleErrorChange: handleErrorChange, onBlurHandler: handleOnBlur, onFocusHandler: handleOnFocus }) }, "country"));
109
+ }
110
+ if (flags.showMarketingEmailOptInCheckbox) {
111
+ formFieldDescriptions.push(_jsx("span", { children: _jsx(FormFieldRenderer, { fieldData: {
112
+ type: 'checkbox',
113
+ label: formatMessage(messages['registration.opt.in.label'], { siteName: getSiteConfig().siteName }),
114
+ name: 'marketingEmailsOptIn',
115
+ }, value: formFields.marketingEmailsOptIn, className: "form-field--checkbox", onChangeHandler: handleOnChange, handleBlur: handleOnBlur, handleFocus: handleOnFocus }) }, "marketing_email_opt_in"));
116
+ }
117
+ if (showTermsOfServiceAndHonorCode) {
118
+ formFieldDescriptions.push(_jsx("span", { children: _jsx(HonorCode, { fieldType: "tos_and_honor_code", onChangeHandler: handleOnChange, value: formFields.honor_code }) }, "honor_code"));
119
+ }
120
+ return (_jsxs(_Fragment, { children: [formFieldDescriptions, _jsx("div", { children: honorCode })] }));
121
+ };
122
+ ConfigurableRegistrationForm.propTypes = {
123
+ email: PropTypes.string.isRequired,
124
+ fieldDescriptions: PropTypes.shape({}),
125
+ fieldErrors: PropTypes.shape({
126
+ country: PropTypes.string,
127
+ }).isRequired,
128
+ formFields: PropTypes.shape({
129
+ country: PropTypes.shape({
130
+ displayValue: PropTypes.string,
131
+ countryCode: PropTypes.string,
132
+ }),
133
+ honor_code: PropTypes.bool,
134
+ marketingEmailsOptIn: PropTypes.bool,
135
+ }).isRequired,
136
+ setFieldErrors: PropTypes.func.isRequired,
137
+ setFormFields: PropTypes.func.isRequired,
138
+ autoSubmitRegistrationForm: PropTypes.bool,
139
+ };
140
+ ConfigurableRegistrationForm.defaultProps = {
141
+ fieldDescriptions: {},
142
+ autoSubmitRegistrationForm: false,
143
+ };
144
+ export default ConfigurableRegistrationForm;
145
+ //# sourceMappingURL=ConfigurableRegistrationForm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfigurableRegistrationForm.js","sourceRoot":"","sources":["../../../src/register/components/ConfigurableRegistrationForm.jsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useMemo } from 'react';\n\nimport {\n useAppConfig,\n getSiteConfig, getLocale, useIntl\n} from '@openedx/frontend-base';\nimport PropTypes from 'prop-types';\n\nimport { getCountryList } from '../../data/countries';\nimport { FormFieldRenderer } from '../../field-renderer';\nimport { FIELDS } from '../data/constants';\nimport messages from '../messages';\nimport { CountryField, HonorCode, TermsOfService } from '../RegistrationFields';\n\n/**\n * Fields on registration page that are not the default required fields (name, email, username, password).\n * These configurable required fields are defined on the backend using REGISTRATION_EXTRA_FIELDS setting.\n *\n * Country and Honor Code/Terms of Services (if enabled) will appear at the bottom of the form, even if they\n * appear higher in order returned by backend. This is to make the user experience better.\n *\n * */\nconst ConfigurableRegistrationForm = (props) => {\n const { formatMessage } = useIntl();\n const {\n email,\n fieldDescriptions,\n fieldErrors,\n formFields,\n setFieldErrors,\n setFormFields,\n autoSubmitRegistrationForm,\n } = props;\n const {\n ENABLE_DYNAMIC_REGISTRATION_FIELDS,\n MARKETING_EMAILS_OPT_IN,\n } = useAppConfig();\n\n /**\n * The reason for adding the entry 'United States' is that Chrome auto-fills the form with 'United\n * States' instead of 'United States of America', which does not exist in the country dropdown list.\n * So we added the United States entry in the dropdown list.\n */\n const countryList = useMemo(() => getCountryList(getLocale()).concat([{ code: 'US', name: 'United States' }]), []);\n\n let showTermsOfServiceAndHonorCode = false;\n let showCountryField = false;\n\n const formFieldDescriptions = [];\n const honorCode = [];\n const flags = {\n showConfigurableRegistrationFields: ENABLE_DYNAMIC_REGISTRATION_FIELDS,\n showMarketingEmailOptInCheckbox: MARKETING_EMAILS_OPT_IN,\n };\n\n /**\n * If auto submitting register form, we will check tos and honor code fields if they exist for feature parity.\n */\n useEffect(() => {\n if (autoSubmitRegistrationForm) {\n if (Object.keys(fieldDescriptions).includes(FIELDS.HONOR_CODE)) {\n setFormFields(prevState => ({\n ...prevState,\n [FIELDS.HONOR_CODE]: true,\n }));\n }\n if (Object.keys(fieldDescriptions).includes(FIELDS.TERMS_OF_SERVICE)) {\n setFormFields(prevState => ({\n ...prevState,\n [FIELDS.TERMS_OF_SERVICE]: true,\n }));\n }\n }\n }, [autoSubmitRegistrationForm]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const handleErrorChange = (fieldName, error) => {\n if (fieldName) {\n setFieldErrors(prevErrors => ({\n ...prevErrors,\n [fieldName]: error,\n }));\n }\n };\n\n const handleOnChange = (event, countryValue = null) => {\n const { name } = event.target;\n let value;\n if (countryValue) {\n value = { ...countryValue };\n } else {\n value = event.target.type === 'checkbox' ? event.target.checked : event.target.value;\n if (event.target.type === 'checkbox') {\n setFieldErrors(prevErrors => ({ ...prevErrors, [name]: '' }));\n }\n }\n setFormFields(prevState => ({ ...prevState, [name]: value }));\n };\n\n const handleOnBlur = (event) => {\n const { name, value } = event.target;\n let error = '';\n if ((!value || !value.trim()) && fieldDescriptions[name]?.error_message) {\n error = fieldDescriptions[name].error_message;\n } else if (name === 'confirm_email' && value !== email) {\n error = formatMessage(messages['email.do.not.match']);\n }\n setFieldErrors(prevErrors => ({ ...prevErrors, [name]: error }));\n };\n\n const handleOnFocus = (event) => {\n const { name } = event.target;\n setFieldErrors(prevErrors => ({ ...prevErrors, [name]: '' }));\n };\n\n if (flags.showConfigurableRegistrationFields) {\n Object.keys(fieldDescriptions).forEach(fieldName => {\n const fieldData = fieldDescriptions[fieldName];\n switch (fieldData.name) {\n case FIELDS.COUNTRY:\n showCountryField = true;\n break;\n case FIELDS.HONOR_CODE:\n if (fieldData.type === 'tos_and_honor_code') {\n showTermsOfServiceAndHonorCode = true;\n } else {\n honorCode.push(\n <span key={fieldData.name}>\n <HonorCode\n fieldType={fieldData.type}\n value={formFields[fieldData.name]}\n onChangeHandler={handleOnChange}\n errorMessage={fieldErrors[fieldData.name]}\n />\n </span>,\n );\n }\n break;\n case FIELDS.TERMS_OF_SERVICE:\n honorCode.push(\n <span key={fieldData.name}>\n <TermsOfService\n value={formFields[fieldData.name]}\n onChangeHandler={handleOnChange}\n errorMessage={fieldErrors[fieldData.name]}\n />\n </span>,\n );\n break;\n default:\n formFieldDescriptions.push(\n <span key={fieldData.name}>\n <FormFieldRenderer\n fieldData={fieldData}\n value={formFields[fieldData.name]}\n onChangeHandler={handleOnChange}\n handleBlur={handleOnBlur}\n handleFocus={handleOnFocus}\n errorMessage={fieldErrors[fieldData.name]}\n isRequired\n />\n </span>,\n );\n }\n });\n }\n\n if (showCountryField) {\n formFieldDescriptions.push(\n <span key=\"country\">\n <CountryField\n countryList={countryList}\n selectedCountry={formFields.country}\n errorMessage={fieldErrors.country || ''}\n onChangeHandler={handleOnChange}\n handleErrorChange={handleErrorChange}\n onBlurHandler={handleOnBlur}\n onFocusHandler={handleOnFocus}\n />\n </span>,\n );\n }\n\n if (flags.showMarketingEmailOptInCheckbox) {\n formFieldDescriptions.push(\n <span key=\"marketing_email_opt_in\">\n <FormFieldRenderer\n fieldData={{\n type: 'checkbox',\n label: formatMessage(messages['registration.opt.in.label'], { siteName: getSiteConfig().siteName }),\n name: 'marketingEmailsOptIn',\n }}\n value={formFields.marketingEmailsOptIn}\n className=\"form-field--checkbox\"\n onChangeHandler={handleOnChange}\n handleBlur={handleOnBlur}\n handleFocus={handleOnFocus}\n />\n </span>,\n );\n }\n\n if (showTermsOfServiceAndHonorCode) {\n formFieldDescriptions.push(\n <span key=\"honor_code\">\n <HonorCode fieldType=\"tos_and_honor_code\" onChangeHandler={handleOnChange} value={formFields.honor_code} />\n </span>,\n );\n }\n\n return (\n <>\n {formFieldDescriptions}\n <div>\n {honorCode}\n </div>\n </>\n );\n};\n\nConfigurableRegistrationForm.propTypes = {\n email: PropTypes.string.isRequired,\n fieldDescriptions: PropTypes.shape({}),\n fieldErrors: PropTypes.shape({\n country: PropTypes.string,\n }).isRequired,\n formFields: PropTypes.shape({\n country: PropTypes.shape({\n displayValue: PropTypes.string,\n countryCode: PropTypes.string,\n }),\n honor_code: PropTypes.bool,\n marketingEmailsOptIn: PropTypes.bool,\n }).isRequired,\n setFieldErrors: PropTypes.func.isRequired,\n setFormFields: PropTypes.func.isRequired,\n autoSubmitRegistrationForm: PropTypes.bool,\n};\n\nConfigurableRegistrationForm.defaultProps = {\n fieldDescriptions: {},\n autoSubmitRegistrationForm: false,\n};\n\nexport default ConfigurableRegistrationForm;\n"]}
@@ -0,0 +1,8 @@
1
+ import { FC, ReactNode } from 'react';
2
+ import { RegisterContextType } from '../types';
3
+ interface RegisterProviderProps {
4
+ children: ReactNode;
5
+ }
6
+ export declare const RegisterProvider: FC<RegisterProviderProps>;
7
+ export declare const useRegisterContext: () => RegisterContextType;
8
+ export {};