@openedx/frontend-app-authn 1.0.0-alpha.5 → 1.0.0-alpha.6
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.
- package/dist/Main.d.ts +3 -0
- package/{src/Main.tsx → dist/Main.js} +4 -15
- package/dist/Main.js.map +1 -0
- package/dist/app.d.ts +3 -0
- package/dist/app.js +41 -0
- package/dist/app.js.map +1 -0
- package/{src → dist}/app.scss +1 -1
- package/dist/base-container/components/default-layout/LargeLayout.d.ts +2 -0
- package/dist/base-container/components/default-layout/LargeLayout.js +11 -0
- package/dist/base-container/components/default-layout/LargeLayout.js.map +1 -0
- package/dist/base-container/components/default-layout/MediumLayout.d.ts +2 -0
- package/dist/base-container/components/default-layout/MediumLayout.js +11 -0
- package/dist/base-container/components/default-layout/MediumLayout.js.map +1 -0
- package/dist/base-container/components/default-layout/SmallLayout.d.ts +2 -0
- package/dist/base-container/components/default-layout/SmallLayout.js +11 -0
- package/dist/base-container/components/default-layout/SmallLayout.js.map +1 -0
- package/dist/base-container/components/default-layout/index.d.ts +3 -0
- package/{src/base-container/components/default-layout/index.jsx → dist/base-container/components/default-layout/index.js} +1 -0
- package/dist/base-container/components/default-layout/index.js.map +1 -0
- package/dist/base-container/components/default-layout/messages.d.ts +13 -0
- package/dist/base-container/components/default-layout/messages.js +15 -0
- package/dist/base-container/components/default-layout/messages.js.map +1 -0
- package/dist/base-container/components/image-layout/ExtraSmallLayout.d.ts +2 -0
- package/dist/base-container/components/image-layout/ExtraSmallLayout.js +10 -0
- package/dist/base-container/components/image-layout/ExtraSmallLayout.js.map +1 -0
- package/dist/base-container/components/image-layout/LargeLayout.d.ts +2 -0
- package/dist/base-container/components/image-layout/LargeLayout.js +11 -0
- package/dist/base-container/components/image-layout/LargeLayout.js.map +1 -0
- package/dist/base-container/components/image-layout/MediumLayout.d.ts +2 -0
- package/dist/base-container/components/image-layout/MediumLayout.js +11 -0
- package/dist/base-container/components/image-layout/MediumLayout.js.map +1 -0
- package/dist/base-container/components/image-layout/SmallLayout.d.ts +2 -0
- package/dist/base-container/components/image-layout/SmallLayout.js +10 -0
- package/dist/base-container/components/image-layout/SmallLayout.js.map +1 -0
- package/dist/base-container/components/image-layout/index.d.ts +4 -0
- package/{src/base-container/components/image-layout/index.jsx → dist/base-container/components/image-layout/index.js} +1 -0
- package/dist/base-container/components/image-layout/index.js.map +1 -0
- package/dist/base-container/components/image-layout/messages.d.ts +13 -0
- package/dist/base-container/components/image-layout/messages.js +15 -0
- package/dist/base-container/components/image-layout/messages.js.map +1 -0
- package/dist/base-container/components/welcome-page-layout/LargeLayout.d.ts +10 -0
- package/dist/base-container/components/welcome-page-layout/LargeLayout.js +14 -0
- package/dist/base-container/components/welcome-page-layout/LargeLayout.js.map +1 -0
- package/dist/base-container/components/welcome-page-layout/MediumLayout.d.ts +10 -0
- package/dist/base-container/components/welcome-page-layout/MediumLayout.js +14 -0
- package/dist/base-container/components/welcome-page-layout/MediumLayout.js.map +1 -0
- package/dist/base-container/components/welcome-page-layout/SmallLayout.d.ts +10 -0
- package/dist/base-container/components/welcome-page-layout/SmallLayout.js +14 -0
- package/dist/base-container/components/welcome-page-layout/SmallLayout.js.map +1 -0
- package/dist/base-container/components/welcome-page-layout/index.d.ts +3 -0
- package/{src/base-container/components/welcome-page-layout/index.jsx → dist/base-container/components/welcome-page-layout/index.js} +1 -0
- package/dist/base-container/components/welcome-page-layout/index.js.map +1 -0
- package/dist/base-container/components/welcome-page-layout/messages.d.ts +18 -0
- package/dist/base-container/components/welcome-page-layout/messages.js +20 -0
- package/dist/base-container/components/welcome-page-layout/messages.js.map +1 -0
- package/dist/base-container/index.d.ts +20 -0
- package/dist/base-container/index.js +27 -0
- package/dist/base-container/index.js.map +1 -0
- package/dist/common-components/EmbeddedRegistrationRoute.d.ts +14 -0
- package/{src/common-components/EmbeddedRegistrationRoute.jsx → dist/common-components/EmbeddedRegistrationRoute.js} +9 -13
- package/dist/common-components/EmbeddedRegistrationRoute.js.map +1 -0
- package/dist/common-components/EnterpriseSSO.d.ts +29 -0
- package/dist/common-components/EnterpriseSSO.js +55 -0
- package/dist/common-components/EnterpriseSSO.js.map +1 -0
- package/dist/common-components/FormGroup.d.ts +60 -0
- package/dist/common-components/FormGroup.js +66 -0
- package/dist/common-components/FormGroup.js.map +1 -0
- package/dist/common-components/InstitutionLogistration.d.ts +34 -0
- package/dist/common-components/InstitutionLogistration.js +38 -0
- package/dist/common-components/InstitutionLogistration.js.map +1 -0
- package/dist/common-components/NotFoundPage.d.ts +2 -0
- package/dist/common-components/NotFoundPage.js +5 -0
- package/dist/common-components/NotFoundPage.js.map +1 -0
- package/dist/common-components/PasswordField.d.ts +39 -0
- package/dist/common-components/PasswordField.js +94 -0
- package/dist/common-components/PasswordField.js.map +1 -0
- package/dist/common-components/RedirectLogistration.d.ts +39 -0
- package/dist/common-components/RedirectLogistration.js +68 -0
- package/dist/common-components/RedirectLogistration.js.map +1 -0
- package/dist/common-components/RegisterFaIcons.d.ts +1 -0
- package/dist/common-components/RegisterFaIcons.js +6 -0
- package/dist/common-components/RegisterFaIcons.js.map +1 -0
- package/dist/common-components/SocialAuthProviders.d.ts +23 -0
- package/dist/common-components/SocialAuthProviders.js +42 -0
- package/dist/common-components/SocialAuthProviders.js.map +1 -0
- package/dist/common-components/ThirdPartyAuth.d.ts +42 -0
- package/dist/common-components/ThirdPartyAuth.js +56 -0
- package/dist/common-components/ThirdPartyAuth.js.map +1 -0
- package/dist/common-components/ThirdPartyAuthAlert.d.ts +15 -0
- package/dist/common-components/ThirdPartyAuthAlert.js +32 -0
- package/dist/common-components/ThirdPartyAuthAlert.js.map +1 -0
- package/dist/common-components/UnAuthOnlyRoute.d.ts +14 -0
- package/dist/common-components/UnAuthOnlyRoute.js +31 -0
- package/dist/common-components/UnAuthOnlyRoute.js.map +1 -0
- package/dist/common-components/data/actions.d.ts +26 -0
- package/{src → dist}/common-components/data/actions.js +8 -13
- package/dist/common-components/data/actions.js.map +1 -0
- package/dist/common-components/data/reducers.d.ts +62 -0
- package/dist/common-components/data/reducers.js +39 -0
- package/dist/common-components/data/reducers.js.map +1 -0
- package/dist/common-components/data/sagas.d.ts +12 -0
- package/dist/common-components/data/sagas.js +21 -0
- package/dist/common-components/data/sagas.js.map +1 -0
- package/dist/common-components/data/selectors.d.ts +98 -0
- package/dist/common-components/data/selectors.js +11 -0
- package/dist/common-components/data/selectors.js.map +1 -0
- package/dist/common-components/data/service.d.ts +5 -0
- package/dist/common-components/data/service.js +31 -0
- package/dist/common-components/data/service.js.map +1 -0
- package/dist/common-components/index.d.ts +13 -0
- package/{src/common-components/index.jsx → dist/common-components/index.js} +1 -0
- package/dist/common-components/index.js.map +1 -0
- package/dist/common-components/messages.d.ts +113 -0
- package/dist/common-components/messages.js +126 -0
- package/dist/common-components/messages.js.map +1 -0
- package/dist/constants.d.ts +1 -0
- package/{src/constants.ts → dist/constants.js} +1 -0
- package/dist/constants.js.map +1 -0
- package/dist/data/configureStore.d.ts +3 -0
- package/{src → dist}/data/configureStore.js +11 -20
- package/dist/data/configureStore.js.map +1 -0
- package/dist/data/constants.d.ts +24 -0
- package/{src → dist}/data/constants.js +4 -8
- package/dist/data/constants.js.map +1 -0
- package/dist/data/countries.d.ts +26 -0
- package/{src/data/countries.ts → dist/data/countries.js} +6 -9
- package/dist/data/countries.js.map +1 -0
- package/dist/data/oneTrust.d.ts +2 -0
- package/dist/data/oneTrust.js +3 -0
- package/dist/data/oneTrust.js.map +1 -0
- package/dist/data/reducers.d.ts +254 -0
- package/dist/data/reducers.js +17 -0
- package/dist/data/reducers.js.map +1 -0
- package/dist/data/sagas.d.ts +1 -0
- package/{src → dist}/data/sagas.js +9 -10
- package/dist/data/sagas.js.map +1 -0
- package/dist/data/utils/cookies.d.ts +1 -0
- package/dist/data/utils/cookies.js +12 -0
- package/dist/data/utils/cookies.js.map +1 -0
- package/dist/data/utils/dataUtils.d.ts +11 -0
- package/dist/data/utils/dataUtils.js +67 -0
- package/dist/data/utils/dataUtils.js.map +1 -0
- package/dist/data/utils/index.d.ts +3 -0
- package/dist/data/utils/index.js +4 -0
- package/dist/data/utils/index.js.map +1 -0
- package/dist/data/utils/reduxUtils.d.ts +15 -0
- package/dist/data/utils/reduxUtils.js +29 -0
- package/dist/data/utils/reduxUtils.js.map +1 -0
- package/dist/data/utils/useMobileResponsive.d.ts +7 -0
- package/dist/data/utils/useMobileResponsive.js +22 -0
- package/dist/data/utils/useMobileResponsive.js.map +1 -0
- package/dist/field-renderer/FieldRenderer.d.ts +34 -0
- package/dist/field-renderer/FieldRenderer.js +70 -0
- package/dist/field-renderer/FieldRenderer.js.map +1 -0
- package/dist/field-renderer/index.d.ts +1 -0
- package/{src/field-renderer/index.jsx → dist/field-renderer/index.js} +1 -0
- package/dist/field-renderer/index.js.map +1 -0
- package/dist/forgot-password/ForgotPasswordAlert.d.ts +16 -0
- package/dist/forgot-password/ForgotPasswordAlert.js +66 -0
- package/dist/forgot-password/ForgotPasswordAlert.js.map +1 -0
- package/dist/forgot-password/ForgotPasswordPage.d.ts +36 -0
- package/dist/forgot-password/ForgotPasswordPage.js +91 -0
- package/dist/forgot-password/ForgotPasswordPage.js.map +1 -0
- package/dist/forgot-password/data/actions.d.ts +30 -0
- package/{src → dist}/forgot-password/data/actions.js +10 -16
- package/dist/forgot-password/data/actions.js.map +1 -0
- package/dist/forgot-password/data/reducers.d.ts +13 -0
- package/dist/forgot-password/data/reducers.js +46 -0
- package/dist/forgot-password/data/reducers.js.map +1 -0
- package/dist/forgot-password/data/sagas.d.ts +4 -0
- package/dist/forgot-password/data/sagas.js +28 -0
- package/dist/forgot-password/data/sagas.js.map +1 -0
- package/dist/forgot-password/data/selectors.d.ts +23 -0
- package/dist/forgot-password/data/selectors.js +5 -0
- package/dist/forgot-password/data/selectors.js.map +1 -0
- package/dist/forgot-password/data/service.d.ts +1 -0
- package/dist/forgot-password/data/service.js +26 -0
- package/dist/forgot-password/data/service.js.map +1 -0
- package/dist/forgot-password/index.d.ts +5 -0
- package/{src → dist}/forgot-password/index.js +1 -0
- package/dist/forgot-password/index.js.map +1 -0
- package/dist/forgot-password/messages.d.ts +123 -0
- package/dist/forgot-password/messages.js +128 -0
- package/dist/forgot-password/messages.js.map +1 -0
- package/dist/i18n/index.d.ts +25 -0
- package/dist/i18n/index.js +26 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/login/AccountActivationMessage.d.ts +14 -0
- package/dist/login/AccountActivationMessage.js +49 -0
- package/dist/login/AccountActivationMessage.js.map +1 -0
- package/dist/login/ChangePasswordPrompt.d.ts +18 -0
- package/dist/login/ChangePasswordPrompt.js +45 -0
- package/dist/login/ChangePasswordPrompt.js.map +1 -0
- package/dist/login/LoginFailure.d.ts +25 -0
- package/dist/login/LoginFailure.js +109 -0
- package/dist/login/LoginFailure.js.map +1 -0
- package/dist/login/LoginPage.d.ts +10 -0
- package/dist/login/LoginPage.js +216 -0
- package/dist/login/LoginPage.js.map +1 -0
- package/dist/login/data/actions.d.ts +36 -0
- package/{src → dist}/login/data/actions.js +12 -19
- package/dist/login/data/actions.js.map +1 -0
- package/dist/login/data/constants.d.ts +17 -0
- package/{src → dist}/login/data/constants.js +4 -4
- package/dist/login/data/constants.js.map +1 -0
- package/dist/login/data/reducers.d.ts +82 -0
- package/dist/login/data/reducers.js +44 -0
- package/dist/login/data/reducers.js.map +1 -0
- package/dist/login/data/sagas.d.ts +10 -0
- package/dist/login/data/sagas.js +34 -0
- package/dist/login/data/sagas.js.map +1 -0
- package/dist/login/data/service.d.ts +4 -0
- package/dist/login/data/service.js +32 -0
- package/dist/login/data/service.js.map +1 -0
- package/dist/login/index.d.ts +4 -0
- package/{src → dist}/login/index.js +1 -1
- package/dist/login/index.js.map +1 -0
- package/dist/login/messages.d.ts +198 -0
- package/dist/login/messages.js +210 -0
- package/dist/login/messages.js.map +1 -0
- package/dist/logistration/Logistration.d.ts +32 -0
- package/dist/logistration/Logistration.js +106 -0
- package/dist/logistration/Logistration.js.map +1 -0
- package/dist/progressive-profiling/ProgressiveProfiling.d.ts +46 -0
- package/dist/progressive-profiling/ProgressiveProfiling.js +167 -0
- package/dist/progressive-profiling/ProgressiveProfiling.js.map +1 -0
- package/dist/progressive-profiling/ProgressiveProfilingPageModal.d.ts +13 -0
- package/dist/progressive-profiling/ProgressiveProfilingPageModal.js +24 -0
- package/dist/progressive-profiling/ProgressiveProfilingPageModal.js.map +1 -0
- package/dist/progressive-profiling/data/actions.d.ts +19 -0
- package/{src → dist}/progressive-profiling/data/actions.js +6 -10
- package/dist/progressive-profiling/data/actions.js.map +1 -0
- package/dist/progressive-profiling/data/reducers.d.ts +22 -0
- package/dist/progressive-profiling/data/reducers.js +23 -0
- package/dist/progressive-profiling/data/reducers.js.map +1 -0
- package/dist/progressive-profiling/data/sagas.d.ts +4 -0
- package/dist/progressive-profiling/data/sagas.js +17 -0
- package/dist/progressive-profiling/data/sagas.js.map +1 -0
- package/dist/progressive-profiling/data/selectors.d.ts +39 -0
- package/{src → dist}/progressive-profiling/data/selectors.js +4 -9
- package/dist/progressive-profiling/data/selectors.js.map +1 -0
- package/dist/progressive-profiling/data/service.d.ts +1 -0
- package/dist/progressive-profiling/data/service.js +23 -0
- package/dist/progressive-profiling/data/service.js.map +1 -0
- package/dist/progressive-profiling/index.d.ts +4 -0
- package/{src → dist}/progressive-profiling/index.js +1 -1
- package/dist/progressive-profiling/index.js.map +1 -0
- package/dist/progressive-profiling/messages.d.ts +53 -0
- package/dist/progressive-profiling/messages.js +57 -0
- package/dist/progressive-profiling/messages.js.map +1 -0
- package/dist/register/RegistrationFields/CountryField/CountryField.d.ts +38 -0
- package/dist/register/RegistrationFields/CountryField/CountryField.js +95 -0
- package/dist/register/RegistrationFields/CountryField/CountryField.js.map +1 -0
- package/dist/register/RegistrationFields/CountryField/validator.d.ts +8 -0
- package/dist/register/RegistrationFields/CountryField/validator.js +29 -0
- package/dist/register/RegistrationFields/CountryField/validator.js.map +1 -0
- package/dist/register/RegistrationFields/EmailField/EmailField.d.ts +30 -0
- package/dist/register/RegistrationFields/EmailField/EmailField.js +80 -0
- package/dist/register/RegistrationFields/EmailField/EmailField.js.map +1 -0
- package/dist/register/RegistrationFields/EmailField/constants.d.ts +3 -0
- package/dist/register/RegistrationFields/EmailField/constants.js +130 -0
- package/dist/register/RegistrationFields/EmailField/constants.js.map +1 -0
- package/dist/register/RegistrationFields/EmailField/validator.d.ts +17 -0
- package/dist/register/RegistrationFields/EmailField/validator.js +107 -0
- package/dist/register/RegistrationFields/EmailField/validator.js.map +1 -0
- package/dist/register/RegistrationFields/HonorCodeField/HonorCode.d.ts +21 -0
- package/dist/register/RegistrationFields/HonorCodeField/HonorCode.js +40 -0
- package/dist/register/RegistrationFields/HonorCodeField/HonorCode.js.map +1 -0
- package/dist/register/RegistrationFields/NameField/NameField.d.ts +29 -0
- package/dist/register/RegistrationFields/NameField/NameField.js +52 -0
- package/dist/register/RegistrationFields/NameField/NameField.js.map +1 -0
- package/dist/register/RegistrationFields/NameField/validator.d.ts +5 -0
- package/{src → dist}/register/RegistrationFields/NameField/validator.js +9 -12
- package/dist/register/RegistrationFields/NameField/validator.js.map +1 -0
- package/dist/register/RegistrationFields/TermsOfServiceField/TermsOfService.d.ts +16 -0
- package/dist/register/RegistrationFields/TermsOfServiceField/TermsOfService.js +24 -0
- package/dist/register/RegistrationFields/TermsOfServiceField/TermsOfService.js.map +1 -0
- package/dist/register/RegistrationFields/UsernameField/UsernameField.d.ts +31 -0
- package/dist/register/RegistrationFields/UsernameField/UsernameField.js +113 -0
- package/dist/register/RegistrationFields/UsernameField/UsernameField.js.map +1 -0
- package/dist/register/RegistrationFields/UsernameField/validator.d.ts +4 -0
- package/dist/register/RegistrationFields/UsernameField/validator.js +15 -0
- package/dist/register/RegistrationFields/UsernameField/validator.js.map +1 -0
- package/dist/register/RegistrationFields/index.d.ts +6 -0
- package/{src → dist}/register/RegistrationFields/index.js +1 -0
- package/dist/register/RegistrationFields/index.js.map +1 -0
- package/dist/register/RegistrationPage.d.ts +18 -0
- package/dist/register/RegistrationPage.js +216 -0
- package/dist/register/RegistrationPage.js.map +1 -0
- package/dist/register/components/ConfigurableRegistrationForm.d.ts +37 -0
- package/dist/register/components/ConfigurableRegistrationForm.js +145 -0
- package/dist/register/components/ConfigurableRegistrationForm.js.map +1 -0
- package/dist/register/components/RegistrationFailure.d.ts +19 -0
- package/dist/register/components/RegistrationFailure.js +57 -0
- package/dist/register/components/RegistrationFailure.js.map +1 -0
- package/dist/register/data/actions.d.ts +80 -0
- package/{src → dist}/register/data/actions.js +26 -42
- package/dist/register/data/actions.js.map +1 -0
- package/dist/register/data/constants.d.ts +10 -0
- package/{src → dist}/register/data/constants.js +4 -4
- package/dist/register/data/constants.js.map +1 -0
- package/dist/register/data/reducers.d.ts +237 -0
- package/dist/register/data/reducers.js +86 -0
- package/dist/register/data/reducers.js.map +1 -0
- package/dist/register/data/sagas.d.ts +19 -0
- package/dist/register/data/sagas.js +45 -0
- package/dist/register/data/sagas.js.map +1 -0
- package/dist/register/data/selectors.d.ts +26 -0
- package/dist/register/data/selectors.js +25 -0
- package/dist/register/data/selectors.js.map +1 -0
- package/dist/register/data/service.d.ts +8 -0
- package/dist/register/data/service.js +46 -0
- package/dist/register/data/service.js.map +1 -0
- package/dist/register/data/utils.d.ts +6 -0
- package/dist/register/data/utils.js +128 -0
- package/dist/register/data/utils.js.map +1 -0
- package/dist/register/index.d.ts +3 -0
- package/{src → dist}/register/index.js +1 -0
- package/dist/register/index.js.map +1 -0
- package/dist/register/messages.d.ts +193 -0
- package/dist/register/messages.js +205 -0
- package/dist/register/messages.js.map +1 -0
- package/dist/reset-password/ResetPasswordFailure.d.ts +15 -0
- package/dist/reset-password/ResetPasswordFailure.js +44 -0
- package/dist/reset-password/ResetPasswordFailure.js.map +1 -0
- package/dist/reset-password/ResetPasswordPage.d.ts +32 -0
- package/dist/reset-password/ResetPasswordPage.js +150 -0
- package/dist/reset-password/ResetPasswordPage.js.map +1 -0
- package/dist/reset-password/ResetPasswordSuccess.d.ts +2 -0
- package/dist/reset-password/ResetPasswordSuccess.js +10 -0
- package/dist/reset-password/ResetPasswordSuccess.js.map +1 -0
- package/dist/reset-password/data/actions.d.ts +56 -0
- package/{src → dist}/reset-password/data/actions.js +17 -26
- package/dist/reset-password/data/actions.js.map +1 -0
- package/dist/reset-password/data/constants.d.ts +13 -0
- package/{src → dist}/reset-password/data/constants.js +6 -7
- package/dist/reset-password/data/constants.js.map +1 -0
- package/dist/reset-password/data/reducers.d.ts +19 -0
- package/dist/reset-password/data/reducers.js +25 -0
- package/dist/reset-password/data/reducers.js.map +1 -0
- package/dist/reset-password/data/sagas.d.ts +7 -0
- package/dist/reset-password/data/sagas.js +63 -0
- package/dist/reset-password/data/sagas.js.map +1 -0
- package/dist/reset-password/data/selectors.d.ts +23 -0
- package/dist/reset-password/data/selectors.js +5 -0
- package/dist/reset-password/data/selectors.js.map +1 -0
- package/dist/reset-password/data/service.d.ts +3 -0
- package/dist/reset-password/data/service.js +62 -0
- package/dist/reset-password/data/service.js.map +1 -0
- package/dist/reset-password/index.d.ts +5 -0
- package/{src → dist}/reset-password/index.js +1 -0
- package/dist/reset-password/index.js.map +1 -0
- package/dist/reset-password/messages.d.ts +83 -0
- package/dist/reset-password/messages.js +87 -0
- package/dist/reset-password/messages.js.map +1 -0
- package/dist/routes.d.ts +18 -0
- package/dist/routes.js +75 -0
- package/dist/routes.js.map +1 -0
- package/package.json +12 -5
- package/src/__mocks__/file.js +0 -1
- package/src/__mocks__/svg.js +0 -1
- package/src/app.ts +0 -43
- package/src/base-container/components/default-layout/DefaultLayout.test.jsx +0 -48
- package/src/base-container/components/default-layout/LargeLayout.jsx +0 -42
- package/src/base-container/components/default-layout/MediumLayout.jsx +0 -49
- package/src/base-container/components/default-layout/SmallLayout.jsx +0 -37
- package/src/base-container/components/default-layout/messages.js +0 -16
- package/src/base-container/components/image-layout/ExtraSmallLayout.jsx +0 -31
- package/src/base-container/components/image-layout/LargeLayout.jsx +0 -32
- package/src/base-container/components/image-layout/MediumLayout.jsx +0 -32
- package/src/base-container/components/image-layout/SmallLayout.jsx +0 -31
- package/src/base-container/components/image-layout/messages.js +0 -16
- package/src/base-container/components/welcome-page-layout/LargeLayout.jsx +0 -46
- package/src/base-container/components/welcome-page-layout/MediumLayout.jsx +0 -49
- package/src/base-container/components/welcome-page-layout/SmallLayout.jsx +0 -38
- package/src/base-container/components/welcome-page-layout/messages.js +0 -21
- package/src/base-container/index.jsx +0 -70
- package/src/base-container/tests/BaseContainer.test.jsx +0 -44
- package/src/common-components/EnterpriseSSO.jsx +0 -110
- package/src/common-components/FormGroup.jsx +0 -106
- package/src/common-components/InstitutionLogistration.jsx +0 -102
- package/src/common-components/NotFoundPage.jsx +0 -15
- package/src/common-components/PasswordField.jsx +0 -175
- package/src/common-components/RedirectLogistration.jsx +0 -94
- package/src/common-components/RegisterFaIcons.jsx +0 -8
- package/src/common-components/SocialAuthProviders.jsx +0 -75
- package/src/common-components/ThirdPartyAuth.jsx +0 -123
- package/src/common-components/ThirdPartyAuthAlert.jsx +0 -49
- package/src/common-components/UnAuthOnlyRoute.jsx +0 -41
- package/src/common-components/data/reducers.js +0 -63
- package/src/common-components/data/sagas.js +0 -32
- package/src/common-components/data/selectors.js +0 -28
- package/src/common-components/data/service.js +0 -23
- package/src/common-components/data/tests/reducer.test.js +0 -82
- package/src/common-components/data/tests/sagas.test.js +0 -71
- package/src/common-components/messages.jsx +0 -127
- package/src/common-components/tests/EmbeddedRegistrationRoute.test.jsx +0 -76
- package/src/common-components/tests/FormField.test.jsx +0 -289
- package/src/common-components/tests/SocialAuthProviders.test.jsx +0 -75
- package/src/common-components/tests/ThirdPartyAuthAlert.test.jsx +0 -39
- package/src/common-components/tests/UnAuthOnlyRoute.test.jsx +0 -73
- package/src/common-components/tests/__snapshots__/SocialAuthProviders.test.jsx.snap +0 -156
- package/src/common-components/tests/__snapshots__/ThirdPartyAuthAlert.test.jsx.snap +0 -53
- package/src/data/oneTrust.js +0 -3
- package/src/data/reducers.js +0 -36
- package/src/data/tests/cookies.test.js +0 -42
- package/src/data/tests/dataUtils.test.js +0 -19
- package/src/data/tests/reduxUtils.test.js +0 -14
- package/src/data/utils/cookies.js +0 -12
- package/src/data/utils/dataUtils.js +0 -81
- package/src/data/utils/index.js +0 -11
- package/src/data/utils/reduxUtils.js +0 -34
- package/src/data/utils/useMobileResponsive.js +0 -24
- package/src/field-renderer/FieldRenderer.jsx +0 -156
- package/src/field-renderer/tests/FieldRenderer.test.jsx +0 -201
- package/src/forgot-password/ForgotPasswordAlert.jsx +0 -97
- package/src/forgot-password/ForgotPasswordPage.jsx +0 -193
- package/src/forgot-password/data/reducers.js +0 -58
- package/src/forgot-password/data/sagas.js +0 -35
- package/src/forgot-password/data/selectors.js +0 -10
- package/src/forgot-password/data/service.js +0 -21
- package/src/forgot-password/data/tests/reducers.test.js +0 -34
- package/src/forgot-password/data/tests/sagas.test.js +0 -67
- package/src/forgot-password/messages.js +0 -128
- package/src/forgot-password/tests/ForgotPasswordPage.test.jsx +0 -269
- package/src/i18n/index.js +0 -25
- package/src/login/AccountActivationMessage.jsx +0 -78
- package/src/login/ChangePasswordPrompt.jsx +0 -91
- package/src/login/LoginFailure.jsx +0 -231
- package/src/login/LoginPage.jsx +0 -368
- package/src/login/data/reducers.js +0 -76
- package/src/login/data/sagas.js +0 -45
- package/src/login/data/service.js +0 -27
- package/src/login/data/tests/reducers.test.js +0 -155
- package/src/login/data/tests/sagas.test.js +0 -110
- package/src/login/messages.jsx +0 -211
- package/src/login/tests/AccountActivationMessage.test.jsx +0 -122
- package/src/login/tests/ChangePasswordPrompt.test.jsx +0 -75
- package/src/login/tests/LoginFailure.test.jsx +0 -323
- package/src/login/tests/LoginPage.test.jsx +0 -839
- package/src/logistration/Logistration.jsx +0 -189
- package/src/logistration/Logistration.test.jsx +0 -275
- package/src/progressive-profiling/ProgressiveProfiling.jsx +0 -313
- package/src/progressive-profiling/ProgressiveProfilingPageModal.jsx +0 -56
- package/src/progressive-profiling/data/reducers.js +0 -38
- package/src/progressive-profiling/data/sagas.js +0 -24
- package/src/progressive-profiling/data/service.js +0 -17
- package/src/progressive-profiling/messages.jsx +0 -57
- package/src/progressive-profiling/tests/ProgressiveProfiling.test.jsx +0 -322
- package/src/register/RegistrationFields/CountryField/CountryField.jsx +0 -164
- package/src/register/RegistrationFields/CountryField/CountryField.test.jsx +0 -204
- package/src/register/RegistrationFields/CountryField/validator.js +0 -32
- package/src/register/RegistrationFields/EmailField/EmailField.jsx +0 -140
- package/src/register/RegistrationFields/EmailField/EmailField.test.jsx +0 -236
- package/src/register/RegistrationFields/EmailField/constants.js +0 -131
- package/src/register/RegistrationFields/EmailField/validator.js +0 -126
- package/src/register/RegistrationFields/EmailField/validator.test.js +0 -39
- package/src/register/RegistrationFields/HonorCodeField/HonorCode.jsx +0 -104
- package/src/register/RegistrationFields/HonorCodeField/HonorCode.test.jsx +0 -70
- package/src/register/RegistrationFields/NameField/NameField.jsx +0 -68
- package/src/register/RegistrationFields/NameField/NameField.test.jsx +0 -146
- package/src/register/RegistrationFields/TermsOfServiceField/TermsOfService.jsx +0 -58
- package/src/register/RegistrationFields/TermsOfServiceField/TermsOfService.test.jsx +0 -55
- package/src/register/RegistrationFields/UsernameField/UsernameField.jsx +0 -162
- package/src/register/RegistrationFields/UsernameField/UsernameField.test.jsx +0 -319
- package/src/register/RegistrationFields/UsernameField/validator.js +0 -16
- package/src/register/RegistrationPage.jsx +0 -428
- package/src/register/RegistrationPage.test.jsx +0 -854
- package/src/register/components/ConfigurableRegistrationForm.jsx +0 -244
- package/src/register/components/RegistrationFailure.jsx +0 -80
- package/src/register/components/tests/ConfigurableRegistrationForm.test.jsx +0 -401
- package/src/register/components/tests/RegistrationFailure.test.jsx +0 -212
- package/src/register/components/tests/ThirdPartyAuth.test.jsx +0 -439
- package/src/register/data/reducers.js +0 -140
- package/src/register/data/sagas.js +0 -58
- package/src/register/data/selectors.js +0 -34
- package/src/register/data/service.js +0 -45
- package/src/register/data/tests/reducers.test.js +0 -277
- package/src/register/data/tests/sagas.test.js +0 -239
- package/src/register/data/tests/utils.test.js +0 -98
- package/src/register/data/utils.js +0 -147
- package/src/register/messages.jsx +0 -206
- package/src/reset-password/ResetPasswordFailure.jsx +0 -55
- package/src/reset-password/ResetPasswordPage.jsx +0 -224
- package/src/reset-password/ResetPasswordSuccess.jsx +0 -19
- package/src/reset-password/data/reducers.js +0 -44
- package/src/reset-password/data/sagas.js +0 -67
- package/src/reset-password/data/selectors.js +0 -10
- package/src/reset-password/data/service.js +0 -61
- package/src/reset-password/data/tests/sagas.test.js +0 -185
- package/src/reset-password/messages.js +0 -88
- package/src/reset-password/tests/ResetPasswordPage.test.jsx +0 -241
- package/src/routes.jsx +0 -79
- package/src/setupTest.js +0 -68
- /package/{src → dist}/base-container/components/image-layout/index.scss +0 -0
- /package/{src/index.ts → dist/index.d.ts} +0 -0
- /package/{src → dist}/sass/_base_component.scss +0 -0
- /package/{src → dist}/sass/_forgot_password.scss +0 -0
- /package/{src → dist}/sass/_login_page.scss +0 -0
- /package/{src → dist}/sass/_progressive_profiling_page.scss +0 -0
- /package/{src → dist}/sass/_registration.scss +0 -0
- /package/{src → dist}/sass/_reset_password.scss +0 -0
- /package/{src → dist}/sass/_style.scss +0 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { useEffect, useState } from 'react';
|
|
2
|
+
import { breakpoints } from '@openedx/paragon';
|
|
3
|
+
/**
|
|
4
|
+
* A react hook used to determine if the current window is mobile or not.
|
|
5
|
+
* returns true if the window is of mobile size.
|
|
6
|
+
* Code source: https://github.com/edx/prospectus/blob/master/src/utils/useMobileResponsive.js
|
|
7
|
+
*/
|
|
8
|
+
const useMobileResponsive = (breakpoint) => {
|
|
9
|
+
const [isMobileWindow, setIsMobileWindow] = useState();
|
|
10
|
+
const checkForMobile = () => {
|
|
11
|
+
setIsMobileWindow(window.matchMedia(`(max-width: ${breakpoint !== null && breakpoint !== void 0 ? breakpoint : breakpoints.small.maxWidth}px)`).matches);
|
|
12
|
+
};
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
checkForMobile();
|
|
15
|
+
window.addEventListener('resize', checkForMobile);
|
|
16
|
+
// return this function here to clean up the event listener
|
|
17
|
+
return () => window.removeEventListener('resize', checkForMobile);
|
|
18
|
+
});
|
|
19
|
+
return isMobileWindow;
|
|
20
|
+
};
|
|
21
|
+
export default useMobileResponsive;
|
|
22
|
+
//# sourceMappingURL=useMobileResponsive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMobileResponsive.js","sourceRoot":"","sources":["../../../src/data/utils/useMobileResponsive.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE5C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C;;;;GAIG;AACH,MAAM,mBAAmB,GAAG,CAAC,UAAU,EAAE,EAAE;IACzC,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,EAAE,CAAC;IACvD,MAAM,cAAc,GAAG,GAAG,EAAE;QAC1B,iBAAiB,CAAC,MAAM,CAAC,UAAU,CAAC,eAAe,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,WAAW,CAAC,KAAK,CAAC,QAAQ,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC;IAC7G,CAAC,CAAC;IACF,SAAS,CAAC,GAAG,EAAE;QACb,cAAc,EAAE,CAAC;QACjB,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QAClD,2DAA2D;QAC3D,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IACH,OAAO,cAAc,CAAC;AACxB,CAAC,CAAC;AAEF,eAAe,mBAAmB,CAAC","sourcesContent":["import { useEffect, useState } from 'react';\n\nimport { breakpoints } from '@openedx/paragon';\n\n/**\n * A react hook used to determine if the current window is mobile or not.\n * returns true if the window is of mobile size.\n * Code source: https://github.com/edx/prospectus/blob/master/src/utils/useMobileResponsive.js\n */\nconst useMobileResponsive = (breakpoint) => {\n const [isMobileWindow, setIsMobileWindow] = useState();\n const checkForMobile = () => {\n setIsMobileWindow(window.matchMedia(`(max-width: ${breakpoint ?? breakpoints.small.maxWidth}px)`).matches);\n };\n useEffect(() => {\n checkForMobile();\n window.addEventListener('resize', checkForMobile);\n // return this function here to clean up the event listener\n return () => window.removeEventListener('resize', checkForMobile);\n });\n return isMobileWindow;\n};\n\nexport default useMobileResponsive;\n"]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export default FormFieldRenderer;
|
|
2
|
+
declare function FormFieldRenderer(props: any): import("react/jsx-runtime").JSX.Element | null;
|
|
3
|
+
declare namespace FormFieldRenderer {
|
|
4
|
+
namespace defaultProps {
|
|
5
|
+
let className: string;
|
|
6
|
+
let value: string;
|
|
7
|
+
let handleBlur: null;
|
|
8
|
+
let handleFocus: null;
|
|
9
|
+
let errorMessage: string;
|
|
10
|
+
let isRequired: boolean;
|
|
11
|
+
}
|
|
12
|
+
namespace propTypes {
|
|
13
|
+
let className_1: PropTypes.Requireable<string>;
|
|
14
|
+
export { className_1 as className };
|
|
15
|
+
export let fieldData: PropTypes.Validator<NonNullable<PropTypes.InferProps<{
|
|
16
|
+
type: PropTypes.Requireable<string>;
|
|
17
|
+
label: PropTypes.Requireable<string>;
|
|
18
|
+
name: PropTypes.Requireable<string>;
|
|
19
|
+
options: PropTypes.Requireable<((string | null | undefined)[] | null | undefined)[]>;
|
|
20
|
+
}>>>;
|
|
21
|
+
export let onChangeHandler: PropTypes.Validator<(...args: any[]) => any>;
|
|
22
|
+
let handleBlur_1: PropTypes.Requireable<(...args: any[]) => any>;
|
|
23
|
+
export { handleBlur_1 as handleBlur };
|
|
24
|
+
let handleFocus_1: PropTypes.Requireable<(...args: any[]) => any>;
|
|
25
|
+
export { handleFocus_1 as handleFocus };
|
|
26
|
+
let errorMessage_1: PropTypes.Requireable<string>;
|
|
27
|
+
export { errorMessage_1 as errorMessage };
|
|
28
|
+
let isRequired_1: PropTypes.Requireable<boolean>;
|
|
29
|
+
export { isRequired_1 as isRequired };
|
|
30
|
+
let value_1: PropTypes.Requireable<NonNullable<string | boolean | null | undefined>>;
|
|
31
|
+
export { value_1 as value };
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
import PropTypes from 'prop-types';
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Form, Icon } from '@openedx/paragon';
|
|
3
|
+
import { ExpandMore } from '@openedx/paragon/icons';
|
|
4
|
+
import PropTypes from 'prop-types';
|
|
5
|
+
const FormFieldRenderer = (props) => {
|
|
6
|
+
let formField = null;
|
|
7
|
+
const { className, errorMessage, fieldData, onChangeHandler, isRequired, value, } = props;
|
|
8
|
+
const handleFocus = (e) => {
|
|
9
|
+
if (props.handleFocus) {
|
|
10
|
+
props.handleFocus(e);
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
const handleOnBlur = (e) => {
|
|
14
|
+
if (props.handleBlur) {
|
|
15
|
+
props.handleBlur(e);
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
switch (fieldData.type) {
|
|
19
|
+
case 'select': {
|
|
20
|
+
if (!fieldData.options) {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
formField = (_jsxs(Form.Group, { controlId: fieldData.name, isInvalid: !!(isRequired && errorMessage), children: [_jsxs(Form.Control, { className: className, as: "select", name: fieldData.name, value: value, "aria-invalid": isRequired && Boolean(errorMessage), onChange: (e) => onChangeHandler(e), trailingElement: _jsx(Icon, { src: ExpandMore }), floatingLabel: fieldData.label, onBlur: handleOnBlur, onFocus: handleFocus, children: [_jsx("option", { value: "", children: fieldData.label }, "default"), fieldData.options.map(option => (_jsx("option", { className: "data-hj-suppress", value: option[0], children: option[1] }, option[0])))] }), isRequired && errorMessage && (_jsx(Form.Control.Feedback, { id: `${fieldData.name}-error`, type: "invalid", className: "form-text-size", hasIcon: false, children: errorMessage }))] }));
|
|
24
|
+
break;
|
|
25
|
+
}
|
|
26
|
+
case 'textarea': {
|
|
27
|
+
formField = (_jsxs(Form.Group, { controlId: fieldData.name, isInvalid: !!(isRequired && errorMessage), children: [_jsx(Form.Control, { className: className, as: "textarea", name: fieldData.name, value: value, "aria-invalid": isRequired && Boolean(errorMessage), onChange: (e) => onChangeHandler(e), floatingLabel: fieldData.label, onBlur: handleOnBlur, onFocus: handleFocus }), isRequired && errorMessage && (_jsx(Form.Control.Feedback, { id: `${fieldData.name}-error`, type: "invalid", className: "form-text-size", hasIcon: false, children: errorMessage }))] }));
|
|
28
|
+
break;
|
|
29
|
+
}
|
|
30
|
+
case 'text': {
|
|
31
|
+
formField = (_jsxs(Form.Group, { controlId: fieldData.name, isInvalid: !!(isRequired && errorMessage), children: [_jsx(Form.Control, { className: className, name: fieldData.name, value: value, "aria-invalid": isRequired && Boolean(errorMessage), onChange: (e) => onChangeHandler(e), floatingLabel: fieldData.label, onBlur: handleOnBlur, onFocus: handleFocus }), isRequired && errorMessage && (_jsx(Form.Control.Feedback, { id: `${fieldData.name}-error`, type: "invalid", className: "form-text-size", hasIcon: false, children: errorMessage }))] }));
|
|
32
|
+
break;
|
|
33
|
+
}
|
|
34
|
+
case 'checkbox': {
|
|
35
|
+
formField = (_jsxs(Form.Group, { isInvalid: !!(isRequired && errorMessage), children: [_jsx(Form.Checkbox, { className: className, id: fieldData.name, checked: !!value, name: fieldData.name, value: value, "aria-invalid": isRequired && Boolean(errorMessage), onChange: (e) => onChangeHandler(e), onBlur: handleOnBlur, onFocus: handleFocus, children: fieldData.label }), isRequired && errorMessage && (_jsx(Form.Control.Feedback, { id: `${fieldData.name}-error`, type: "invalid", className: "form-text-size", hasIcon: false, children: errorMessage }))] }));
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
default:
|
|
39
|
+
break;
|
|
40
|
+
}
|
|
41
|
+
return formField;
|
|
42
|
+
};
|
|
43
|
+
FormFieldRenderer.defaultProps = {
|
|
44
|
+
className: '',
|
|
45
|
+
value: '',
|
|
46
|
+
handleBlur: null,
|
|
47
|
+
handleFocus: null,
|
|
48
|
+
errorMessage: '',
|
|
49
|
+
isRequired: false,
|
|
50
|
+
};
|
|
51
|
+
FormFieldRenderer.propTypes = {
|
|
52
|
+
className: PropTypes.string,
|
|
53
|
+
fieldData: PropTypes.shape({
|
|
54
|
+
type: PropTypes.string,
|
|
55
|
+
label: PropTypes.string,
|
|
56
|
+
name: PropTypes.string,
|
|
57
|
+
options: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.string)),
|
|
58
|
+
}).isRequired,
|
|
59
|
+
onChangeHandler: PropTypes.func.isRequired,
|
|
60
|
+
handleBlur: PropTypes.func,
|
|
61
|
+
handleFocus: PropTypes.func,
|
|
62
|
+
errorMessage: PropTypes.string,
|
|
63
|
+
isRequired: PropTypes.bool,
|
|
64
|
+
value: PropTypes.oneOfType([
|
|
65
|
+
PropTypes.string,
|
|
66
|
+
PropTypes.bool,
|
|
67
|
+
]),
|
|
68
|
+
};
|
|
69
|
+
export default FormFieldRenderer;
|
|
70
|
+
//# sourceMappingURL=FieldRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FieldRenderer.js","sourceRoot":"","sources":["../../src/field-renderer/FieldRenderer.jsx"],"names":[],"mappings":"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","sourcesContent":["import { Form, Icon } from '@openedx/paragon';\nimport { ExpandMore } from '@openedx/paragon/icons';\nimport PropTypes from 'prop-types';\n\nconst FormFieldRenderer = (props) => {\n let formField = null;\n const {\n className, errorMessage, fieldData, onChangeHandler, isRequired, value,\n } = props;\n\n const handleFocus = (e) => {\n if (props.handleFocus) { props.handleFocus(e); }\n };\n\n const handleOnBlur = (e) => {\n if (props.handleBlur) { props.handleBlur(e); }\n };\n\n switch (fieldData.type) {\n case 'select': {\n if (!fieldData.options) {\n return null;\n }\n formField = (\n <Form.Group controlId={fieldData.name} isInvalid={!!(isRequired && errorMessage)}>\n <Form.Control\n className={className}\n as=\"select\"\n name={fieldData.name}\n value={value}\n aria-invalid={isRequired && Boolean(errorMessage)}\n onChange={(e) => onChangeHandler(e)}\n trailingElement={<Icon src={ExpandMore} />}\n floatingLabel={fieldData.label}\n onBlur={handleOnBlur}\n onFocus={handleFocus}\n >\n <option key=\"default\" value=\"\">{fieldData.label}</option>\n {fieldData.options.map(option => (\n <option className=\"data-hj-suppress\" key={option[0]} value={option[0]}>{option[1]}</option>\n ))}\n </Form.Control>\n {isRequired && errorMessage && (\n <Form.Control.Feedback id={`${fieldData.name}-error`} type=\"invalid\" className=\"form-text-size\" hasIcon={false}>\n {errorMessage}\n </Form.Control.Feedback>\n )}\n </Form.Group>\n );\n break;\n }\n case 'textarea': {\n formField = (\n <Form.Group controlId={fieldData.name} isInvalid={!!(isRequired && errorMessage)}>\n <Form.Control\n className={className}\n as=\"textarea\"\n name={fieldData.name}\n value={value}\n aria-invalid={isRequired && Boolean(errorMessage)}\n onChange={(e) => onChangeHandler(e)}\n floatingLabel={fieldData.label}\n onBlur={handleOnBlur}\n onFocus={handleFocus}\n />\n {isRequired && errorMessage && (\n <Form.Control.Feedback id={`${fieldData.name}-error`} type=\"invalid\" className=\"form-text-size\" hasIcon={false}>\n {errorMessage}\n </Form.Control.Feedback>\n )}\n </Form.Group>\n );\n break;\n }\n case 'text': {\n formField = (\n <Form.Group controlId={fieldData.name} isInvalid={!!(isRequired && errorMessage)}>\n <Form.Control\n className={className}\n name={fieldData.name}\n value={value}\n aria-invalid={isRequired && Boolean(errorMessage)}\n onChange={(e) => onChangeHandler(e)}\n floatingLabel={fieldData.label}\n onBlur={handleOnBlur}\n onFocus={handleFocus}\n />\n {isRequired && errorMessage && (\n <Form.Control.Feedback id={`${fieldData.name}-error`} type=\"invalid\" className=\"form-text-size\" hasIcon={false}>\n {errorMessage}\n </Form.Control.Feedback>\n )}\n </Form.Group>\n );\n break;\n }\n case 'checkbox': {\n formField = (\n <Form.Group isInvalid={!!(isRequired && errorMessage)}>\n <Form.Checkbox\n className={className}\n id={fieldData.name}\n checked={!!value}\n name={fieldData.name}\n value={value}\n aria-invalid={isRequired && Boolean(errorMessage)}\n onChange={(e) => onChangeHandler(e)}\n onBlur={handleOnBlur}\n onFocus={handleFocus}\n >\n {fieldData.label}\n </Form.Checkbox>\n {isRequired && errorMessage && (\n <Form.Control.Feedback id={`${fieldData.name}-error`} type=\"invalid\" className=\"form-text-size\" hasIcon={false}>\n {errorMessage}\n </Form.Control.Feedback>\n )}\n </Form.Group>\n );\n break;\n }\n default:\n break;\n }\n\n return formField;\n};\nFormFieldRenderer.defaultProps = {\n className: '',\n value: '',\n handleBlur: null,\n handleFocus: null,\n errorMessage: '',\n isRequired: false,\n};\n\nFormFieldRenderer.propTypes = {\n className: PropTypes.string,\n fieldData: PropTypes.shape({\n type: PropTypes.string,\n label: PropTypes.string,\n name: PropTypes.string,\n options: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.string)),\n }).isRequired,\n onChangeHandler: PropTypes.func.isRequired,\n handleBlur: PropTypes.func,\n handleFocus: PropTypes.func,\n errorMessage: PropTypes.string,\n isRequired: PropTypes.bool,\n value: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.bool,\n ]),\n};\n\nexport default FormFieldRenderer;\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as FormFieldRenderer } from "./FieldRenderer";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/field-renderer/index.jsx"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,iBAAiB,CAAC","sourcesContent":["/* eslint-disable import/prefer-default-export */\nexport { default as FormFieldRenderer } from './FieldRenderer';\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export default ForgotPasswordAlert;
|
|
2
|
+
declare function ForgotPasswordAlert(props: any): import("react/jsx-runtime").JSX.Element | null;
|
|
3
|
+
declare namespace ForgotPasswordAlert {
|
|
4
|
+
namespace defaultProps {
|
|
5
|
+
let email: string;
|
|
6
|
+
let emailError: string;
|
|
7
|
+
}
|
|
8
|
+
namespace propTypes {
|
|
9
|
+
export let status: PropTypes.Validator<string>;
|
|
10
|
+
let email_1: PropTypes.Requireable<string>;
|
|
11
|
+
export { email_1 as email };
|
|
12
|
+
let emailError_1: PropTypes.Requireable<string>;
|
|
13
|
+
export { emailError_1 as emailError };
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
import PropTypes from 'prop-types';
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { FormattedMessage, useAppConfig, useIntl } from '@openedx/frontend-base';
|
|
3
|
+
import { Alert } from '@openedx/paragon';
|
|
4
|
+
import { CheckCircle, Error } from '@openedx/paragon/icons';
|
|
5
|
+
import PropTypes from 'prop-types';
|
|
6
|
+
import { COMPLETE_STATE, FORBIDDEN_STATE, FORM_SUBMISSION_ERROR, INTERNAL_SERVER_ERROR, } from '../data/constants';
|
|
7
|
+
import { PASSWORD_RESET } from '../reset-password/data/constants';
|
|
8
|
+
import messages from './messages';
|
|
9
|
+
const ForgotPasswordAlert = (props) => {
|
|
10
|
+
const { formatMessage } = useIntl();
|
|
11
|
+
const { email, emailError } = props;
|
|
12
|
+
let message = '';
|
|
13
|
+
let heading = formatMessage(messages['forgot.password.error.alert.title']);
|
|
14
|
+
let { status } = props;
|
|
15
|
+
if (emailError) {
|
|
16
|
+
status = FORM_SUBMISSION_ERROR;
|
|
17
|
+
}
|
|
18
|
+
switch (status) {
|
|
19
|
+
case COMPLETE_STATE:
|
|
20
|
+
heading = formatMessage(messages['confirmation.message.title']);
|
|
21
|
+
message = (_jsx(FormattedMessage, { id: "forgot.password.confirmation.message", defaultMessage: "We sent an email to {email} with instructions to reset your password.\n If you do not receive a password reset message after 1 minute, verify that you entered\n the correct email address, or check your spam folder. If you need further assistance, {supportLink}.", description: "Forgot password confirmation message", values: {
|
|
22
|
+
email: _jsx("span", { className: "data-hj-suppress", children: email }),
|
|
23
|
+
supportLink: (_jsx(Alert.Link, { href: useAppConfig().PASSWORD_RESET_SUPPORT_LINK, target: "_blank", children: formatMessage(messages['confirmation.support.link']) })),
|
|
24
|
+
} }));
|
|
25
|
+
break;
|
|
26
|
+
case INTERNAL_SERVER_ERROR:
|
|
27
|
+
message = formatMessage(messages['internal.server.error']);
|
|
28
|
+
break;
|
|
29
|
+
case FORBIDDEN_STATE:
|
|
30
|
+
heading = formatMessage(messages['forgot.password.error.message.title']);
|
|
31
|
+
message = formatMessage(messages['forgot.password.request.in.progress.message']);
|
|
32
|
+
break;
|
|
33
|
+
case FORM_SUBMISSION_ERROR:
|
|
34
|
+
message = formatMessage(messages['extend.field.errors'], { emailError });
|
|
35
|
+
break;
|
|
36
|
+
case PASSWORD_RESET.INVALID_TOKEN:
|
|
37
|
+
heading = formatMessage(messages['invalid.token.heading']);
|
|
38
|
+
message = formatMessage(messages['invalid.token.error.message']);
|
|
39
|
+
break;
|
|
40
|
+
case PASSWORD_RESET.FORBIDDEN_REQUEST:
|
|
41
|
+
heading = formatMessage(messages['token.validation.rate.limit.error.heading']);
|
|
42
|
+
message = formatMessage(messages['token.validation.rate.limit.error']);
|
|
43
|
+
break;
|
|
44
|
+
case PASSWORD_RESET.INTERNAL_SERVER_ERROR:
|
|
45
|
+
heading = formatMessage(messages['token.validation.internal.sever.error.heading']);
|
|
46
|
+
message = formatMessage(messages['token.validation.internal.sever.error']);
|
|
47
|
+
break;
|
|
48
|
+
default:
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
if (message) {
|
|
52
|
+
return (_jsxs(Alert, { id: "validation-errors", className: "mb-4", variant: `${status === 'complete' ? 'success' : 'danger'}`, icon: status === 'complete' ? CheckCircle : Error, children: [_jsx(Alert.Heading, { children: heading }), _jsx("p", { children: message })] }));
|
|
53
|
+
}
|
|
54
|
+
return null;
|
|
55
|
+
};
|
|
56
|
+
ForgotPasswordAlert.defaultProps = {
|
|
57
|
+
email: '',
|
|
58
|
+
emailError: '',
|
|
59
|
+
};
|
|
60
|
+
ForgotPasswordAlert.propTypes = {
|
|
61
|
+
status: PropTypes.string.isRequired,
|
|
62
|
+
email: PropTypes.string,
|
|
63
|
+
emailError: PropTypes.string,
|
|
64
|
+
};
|
|
65
|
+
export default ForgotPasswordAlert;
|
|
66
|
+
//# sourceMappingURL=ForgotPasswordAlert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ForgotPasswordAlert.js","sourceRoot":"","sources":["../../src/forgot-password/ForgotPasswordAlert.jsx"],"names":[],"mappings":"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","sourcesContent":["import { FormattedMessage, useAppConfig, useIntl } from '@openedx/frontend-base';\nimport { Alert } from '@openedx/paragon';\nimport { CheckCircle, Error } from '@openedx/paragon/icons';\nimport PropTypes from 'prop-types';\n\nimport {\n COMPLETE_STATE, FORBIDDEN_STATE, FORM_SUBMISSION_ERROR, INTERNAL_SERVER_ERROR,\n} from '../data/constants';\nimport { PASSWORD_RESET } from '../reset-password/data/constants';\nimport messages from './messages';\n\nconst ForgotPasswordAlert = (props) => {\n const { formatMessage } = useIntl();\n const { email, emailError } = props;\n let message = '';\n let heading = formatMessage(messages['forgot.password.error.alert.title']);\n let { status } = props;\n\n if (emailError) {\n status = FORM_SUBMISSION_ERROR;\n }\n\n switch (status) {\n case COMPLETE_STATE:\n heading = formatMessage(messages['confirmation.message.title']);\n message = (\n <FormattedMessage\n id=\"forgot.password.confirmation.message\"\n defaultMessage=\"We sent an email to {email} with instructions to reset your password.\n If you do not receive a password reset message after 1 minute, verify that you entered\n the correct email address, or check your spam folder. If you need further assistance, {supportLink}.\"\n description=\"Forgot password confirmation message\"\n values={{\n email: <span className=\"data-hj-suppress\">{email}</span>,\n supportLink: (\n <Alert.Link href={useAppConfig().PASSWORD_RESET_SUPPORT_LINK} target=\"_blank\">\n {formatMessage(messages['confirmation.support.link'])}\n </Alert.Link>\n ),\n }}\n />\n );\n break;\n case INTERNAL_SERVER_ERROR:\n message = formatMessage(messages['internal.server.error']);\n break;\n case FORBIDDEN_STATE:\n heading = formatMessage(messages['forgot.password.error.message.title']);\n message = formatMessage(messages['forgot.password.request.in.progress.message']);\n break;\n case FORM_SUBMISSION_ERROR:\n message = formatMessage(messages['extend.field.errors'], { emailError });\n break;\n case PASSWORD_RESET.INVALID_TOKEN:\n heading = formatMessage(messages['invalid.token.heading']);\n message = formatMessage(messages['invalid.token.error.message']);\n break;\n case PASSWORD_RESET.FORBIDDEN_REQUEST:\n heading = formatMessage(messages['token.validation.rate.limit.error.heading']);\n message = formatMessage(messages['token.validation.rate.limit.error']);\n break;\n case PASSWORD_RESET.INTERNAL_SERVER_ERROR:\n heading = formatMessage(messages['token.validation.internal.sever.error.heading']);\n message = formatMessage(messages['token.validation.internal.sever.error']);\n break;\n default:\n break;\n }\n\n if (message) {\n return (\n <Alert\n id=\"validation-errors\"\n className=\"mb-4\"\n variant={`${status === 'complete' ? 'success' : 'danger'}`}\n icon={status === 'complete' ? CheckCircle : Error}\n >\n <Alert.Heading>{heading}</Alert.Heading>\n <p>{message}</p>\n </Alert>\n );\n }\n return null;\n};\n\nForgotPasswordAlert.defaultProps = {\n email: '',\n emailError: '',\n};\n\nForgotPasswordAlert.propTypes = {\n status: PropTypes.string.isRequired,\n email: PropTypes.string,\n emailError: PropTypes.string,\n};\n\nexport default ForgotPasswordAlert;\n"]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
declare const _default: import("react-redux").ConnectedComponent<{
|
|
2
|
+
(props: any): import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
propTypes: {
|
|
4
|
+
email: PropTypes.Requireable<string>;
|
|
5
|
+
emailValidationError: PropTypes.Requireable<string>;
|
|
6
|
+
forgotPassword: PropTypes.Validator<(...args: any[]) => any>;
|
|
7
|
+
setForgotPasswordFormData: PropTypes.Validator<(...args: any[]) => any>;
|
|
8
|
+
status: PropTypes.Requireable<string>;
|
|
9
|
+
submitState: PropTypes.Requireable<string>;
|
|
10
|
+
};
|
|
11
|
+
defaultProps: {
|
|
12
|
+
email: string;
|
|
13
|
+
emailValidationError: string;
|
|
14
|
+
status: null;
|
|
15
|
+
submitState: string;
|
|
16
|
+
};
|
|
17
|
+
}, {
|
|
18
|
+
email?: string | null | undefined;
|
|
19
|
+
forgotPassword: (...args: any[]) => any;
|
|
20
|
+
status?: string | null | undefined;
|
|
21
|
+
setForgotPasswordFormData: (...args: any[]) => any;
|
|
22
|
+
emailValidationError?: string | null | undefined;
|
|
23
|
+
submitState?: string | null | undefined;
|
|
24
|
+
context?: import("react-redux/es/components/Context").ReactReduxContextInstance | undefined;
|
|
25
|
+
store?: import("redux").Store | undefined;
|
|
26
|
+
} | {
|
|
27
|
+
email?: string | null | undefined;
|
|
28
|
+
forgotPassword: (...args: any[]) => any;
|
|
29
|
+
status?: string | null | undefined;
|
|
30
|
+
setForgotPasswordFormData: (...args: any[]) => any;
|
|
31
|
+
emailValidationError?: string | null | undefined;
|
|
32
|
+
submitState?: string | null | undefined;
|
|
33
|
+
store?: import("redux").Store | undefined;
|
|
34
|
+
}>;
|
|
35
|
+
export default _default;
|
|
36
|
+
import PropTypes from 'prop-types';
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useState } from 'react';
|
|
3
|
+
import { connect } from 'react-redux';
|
|
4
|
+
import { useAppConfig, getSiteConfig, sendPageEvent, sendTrackEvent, useIntl } from '@openedx/frontend-base';
|
|
5
|
+
import { Form, Hyperlink, Icon, StatefulButton, Tab, Tabs, } from '@openedx/paragon';
|
|
6
|
+
import { ChevronLeft } from '@openedx/paragon/icons';
|
|
7
|
+
import PropTypes from 'prop-types';
|
|
8
|
+
import { Helmet } from 'react-helmet';
|
|
9
|
+
import { useNavigate } from 'react-router-dom';
|
|
10
|
+
import BaseContainer from '../base-container';
|
|
11
|
+
import { FormGroup } from '../common-components';
|
|
12
|
+
import { DEFAULT_STATE, LOGIN_PAGE, VALID_EMAIL_REGEX } from '../data/constants';
|
|
13
|
+
import { updatePathWithQueryParams, windowScrollTo } from '../data/utils';
|
|
14
|
+
import { forgotPassword, setForgotPasswordFormData } from './data/actions';
|
|
15
|
+
import { forgotPasswordResultSelector } from './data/selectors';
|
|
16
|
+
import ForgotPasswordAlert from './ForgotPasswordAlert';
|
|
17
|
+
import messages from './messages';
|
|
18
|
+
const ForgotPasswordPage = (props) => {
|
|
19
|
+
const platformName = getSiteConfig().siteName;
|
|
20
|
+
const emailRegex = new RegExp(VALID_EMAIL_REGEX, 'i');
|
|
21
|
+
const { status, submitState, emailValidationError, } = props;
|
|
22
|
+
const { formatMessage } = useIntl();
|
|
23
|
+
const [email, setEmail] = useState(props.email);
|
|
24
|
+
const [bannerEmail, setBannerEmail] = useState('');
|
|
25
|
+
const [formErrors, setFormErrors] = useState('');
|
|
26
|
+
const [validationError, setValidationError] = useState(emailValidationError);
|
|
27
|
+
const navigate = useNavigate();
|
|
28
|
+
useEffect(() => {
|
|
29
|
+
sendPageEvent('login_and_registration', 'reset');
|
|
30
|
+
sendTrackEvent('edx.bi.password_reset_form.viewed', { category: 'user-engagement' });
|
|
31
|
+
}, []);
|
|
32
|
+
useEffect(() => {
|
|
33
|
+
setValidationError(emailValidationError);
|
|
34
|
+
}, [emailValidationError]);
|
|
35
|
+
useEffect(() => {
|
|
36
|
+
if (status === 'complete') {
|
|
37
|
+
setEmail('');
|
|
38
|
+
}
|
|
39
|
+
}, [status]);
|
|
40
|
+
const getValidationMessage = (value) => {
|
|
41
|
+
let error = '';
|
|
42
|
+
if (value === '') {
|
|
43
|
+
error = formatMessage(messages['forgot.password.empty.email.field.error']);
|
|
44
|
+
}
|
|
45
|
+
else if (!emailRegex.test(value)) {
|
|
46
|
+
error = formatMessage(messages['forgot.password.page.invalid.email.message']);
|
|
47
|
+
}
|
|
48
|
+
return error;
|
|
49
|
+
};
|
|
50
|
+
const handleBlur = () => {
|
|
51
|
+
props.setForgotPasswordFormData({ email, emailValidationError: getValidationMessage(email) });
|
|
52
|
+
};
|
|
53
|
+
const handleFocus = () => props.setForgotPasswordFormData({ emailValidationError: '' });
|
|
54
|
+
const handleSubmit = (e) => {
|
|
55
|
+
e.preventDefault();
|
|
56
|
+
setBannerEmail(email);
|
|
57
|
+
const error = getValidationMessage(email);
|
|
58
|
+
if (error) {
|
|
59
|
+
setFormErrors(error);
|
|
60
|
+
props.setForgotPasswordFormData({ email, emailValidationError: error });
|
|
61
|
+
windowScrollTo({ left: 0, top: 0, behavior: 'smooth' });
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
props.forgotPassword(email);
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
const tabTitle = (_jsxs("div", { className: "d-inline-flex flex-wrap align-items-center", children: [_jsx(Icon, { src: ChevronLeft }), _jsx("span", { className: "ml-2", children: formatMessage(messages['sign.in.text']) })] }));
|
|
68
|
+
return (_jsxs(BaseContainer, { children: [_jsx(Helmet, { children: _jsx("title", { children: formatMessage(messages['forgot.password.page.title'], { siteName: getSiteConfig().siteName }) }) }), _jsxs("div", { children: [_jsx(Tabs, { activeKey: "", id: "controlled-tab", onSelect: (key) => navigate(updatePathWithQueryParams(key)), children: _jsx(Tab, { title: tabTitle, eventKey: LOGIN_PAGE }) }), _jsx("div", { id: "main-content", className: "main-content", children: _jsxs(Form, { id: "forget-password-form", name: "forget-password-form", className: "mw-xs", children: [_jsx(ForgotPasswordAlert, { email: bannerEmail, emailError: formErrors, status: status }), _jsx("h2", { className: "h4", children: formatMessage(messages['forgot.password.page.heading']) }), _jsx("p", { className: "mb-4", children: formatMessage(messages['forgot.password.page.instructions']) }), _jsx(FormGroup, { floatingLabel: formatMessage(messages['forgot.password.page.email.field.label']), name: "email", value: email, autoComplete: "on", errorMessage: validationError, handleChange: (e) => setEmail(e.target.value), handleBlur: handleBlur, handleFocus: handleFocus, helpText: [formatMessage(messages['forgot.password.email.help.text'], { platformName })] }), _jsx(StatefulButton, { id: "submit-forget-password", name: "submit-forget-password", type: "submit", variant: "brand", className: "forgot-password--button", state: submitState, labels: {
|
|
69
|
+
default: formatMessage(messages['forgot.password.page.submit.button']),
|
|
70
|
+
pending: '',
|
|
71
|
+
}, onClick: handleSubmit, onMouseDown: (e) => e.preventDefault() }), (useAppConfig().LOGIN_ISSUE_SUPPORT_LINK) && (_jsx(Hyperlink, { id: "forgot-password", name: "forgot-password", className: "ml-4 font-weight-500 text-body", destination: useAppConfig().LOGIN_ISSUE_SUPPORT_LINK, target: "_blank", showLaunchIcon: false, children: formatMessage(messages['need.help.sign.in.text']) })), _jsxs("p", { className: "mt-5.5 small text-gray-700", children: [formatMessage(messages['additional.help.text'], { platformName }), _jsx("span", { children: _jsx(Hyperlink, { isInline: true, destination: `mailto:${useAppConfig().INFO_EMAIL}`, children: useAppConfig().INFO_EMAIL }) })] })] }) })] })] }));
|
|
72
|
+
};
|
|
73
|
+
ForgotPasswordPage.propTypes = {
|
|
74
|
+
email: PropTypes.string,
|
|
75
|
+
emailValidationError: PropTypes.string,
|
|
76
|
+
forgotPassword: PropTypes.func.isRequired,
|
|
77
|
+
setForgotPasswordFormData: PropTypes.func.isRequired,
|
|
78
|
+
status: PropTypes.string,
|
|
79
|
+
submitState: PropTypes.string,
|
|
80
|
+
};
|
|
81
|
+
ForgotPasswordPage.defaultProps = {
|
|
82
|
+
email: '',
|
|
83
|
+
emailValidationError: '',
|
|
84
|
+
status: null,
|
|
85
|
+
submitState: DEFAULT_STATE,
|
|
86
|
+
};
|
|
87
|
+
export default connect(forgotPasswordResultSelector, {
|
|
88
|
+
forgotPassword,
|
|
89
|
+
setForgotPasswordFormData,
|
|
90
|
+
})(ForgotPasswordPage);
|
|
91
|
+
//# sourceMappingURL=ForgotPasswordPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ForgotPasswordPage.js","sourceRoot":"","sources":["../../src/forgot-password/ForgotPasswordPage.jsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,OAAO,EACL,YAAY,EACZ,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,OAAO,EACtD,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,IAAI,EACJ,SAAS,EACT,IAAI,EACJ,cAAc,EACd,GAAG,EACH,IAAI,GACL,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,aAAa,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACjF,OAAO,EAAE,yBAAyB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,mBAAmB,MAAM,uBAAuB,CAAC;AACxD,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,EAAE;IACnC,MAAM,YAAY,GAAG,aAAa,EAAE,CAAC,QAAQ,CAAC;IAC9C,MAAM,UAAU,GAAG,IAAI,MAAM,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;IACtD,MAAM,EACJ,MAAM,EAAE,WAAW,EAAE,oBAAoB,GAC1C,GAAG,KAAK,CAAC;IAEV,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACnD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACjD,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IAC7E,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAE/B,SAAS,CAAC,GAAG,EAAE;QACb,aAAa,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAC;QACjD,cAAc,CAAC,mCAAmC,EAAE,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC,CAAC;IACvF,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,CAAC,GAAG,EAAE;QACb,kBAAkB,CAAC,oBAAoB,CAAC,CAAC;IAC3C,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAE3B,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;YAC1B,QAAQ,CAAC,EAAE,CAAC,CAAC;QACf,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,EAAE;QACrC,IAAI,KAAK,GAAG,EAAE,CAAC;QAEf,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;YACjB,KAAK,GAAG,aAAa,CAAC,QAAQ,CAAC,yCAAyC,CAAC,CAAC,CAAC;QAC7E,CAAC;aAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACnC,KAAK,GAAG,aAAa,CAAC,QAAQ,CAAC,4CAA4C,CAAC,CAAC,CAAC;QAChF,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,KAAK,CAAC,yBAAyB,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAChG,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,yBAAyB,CAAC,EAAE,oBAAoB,EAAE,EAAE,EAAE,CAAC,CAAC;IAExF,MAAM,YAAY,GAAG,CAAC,CAAC,EAAE,EAAE;QACzB,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,cAAc,CAAC,KAAK,CAAC,CAAC;QAEtB,MAAM,KAAK,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,KAAK,EAAE,CAAC;YACV,aAAa,CAAC,KAAK,CAAC,CAAC;YACrB,KAAK,CAAC,yBAAyB,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC,CAAC;YACxE,cAAc,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC1D,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,CACf,eAAK,SAAS,EAAC,4CAA4C,aACzD,KAAC,IAAI,IAAC,GAAG,EAAE,WAAW,GAAI,EAC1B,eAAM,SAAS,EAAC,MAAM,YAAE,aAAa,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,GAAQ,IACnE,CACP,CAAC;IAEF,OAAO,CACL,MAAC,aAAa,eACZ,KAAC,MAAM,cACL,0BACG,aAAa,CACZ,QAAQ,CAAC,4BAA4B,CAAC,EACtC,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,QAAQ,EAAE,CACvC,GACK,GACD,EACT,0BACE,KAAC,IAAI,IAAC,SAAS,EAAC,EAAE,EAAC,EAAE,EAAC,gBAAgB,EAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC,YAChG,KAAC,GAAG,IAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,GAAI,GACzC,EACP,cAAK,EAAE,EAAC,cAAc,EAAC,SAAS,EAAC,cAAc,YAC7C,MAAC,IAAI,IAAC,EAAE,EAAC,sBAAsB,EAAC,IAAI,EAAC,sBAAsB,EAAC,SAAS,EAAC,OAAO,aAC3E,KAAC,mBAAmB,IAAC,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAI,EACnF,aAAI,SAAS,EAAC,IAAI,YACf,aAAa,CAAC,QAAQ,CAAC,8BAA8B,CAAC,CAAC,GACrD,EACL,YAAG,SAAS,EAAC,MAAM,YAChB,aAAa,CAAC,QAAQ,CAAC,mCAAmC,CAAC,CAAC,GAC3D,EACJ,KAAC,SAAS,IACR,aAAa,EAAE,aAAa,CAAC,QAAQ,CAAC,wCAAwC,CAAC,CAAC,EAChF,IAAI,EAAC,OAAO,EACZ,KAAK,EAAE,KAAK,EACZ,YAAY,EAAC,IAAI,EACjB,YAAY,EAAE,eAAe,EAC7B,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAC7C,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,iCAAiC,CAAC,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,GACxF,EACF,KAAC,cAAc,IACb,EAAE,EAAC,wBAAwB,EAC3B,IAAI,EAAC,wBAAwB,EAC7B,IAAI,EAAC,QAAQ,EACb,OAAO,EAAC,OAAO,EACf,SAAS,EAAC,yBAAyB,EACnC,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE;wCACN,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,oCAAoC,CAAC,CAAC;wCACtE,OAAO,EAAE,EAAE;qCACZ,EACD,OAAO,EAAE,YAAY,EACrB,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE,GACtC,EACD,CAAC,YAAY,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAC5C,KAAC,SAAS,IACR,EAAE,EAAC,iBAAiB,EACpB,IAAI,EAAC,iBAAiB,EACtB,SAAS,EAAC,gCAAgC,EAC1C,WAAW,EAAE,YAAY,EAAE,CAAC,wBAAwB,EACpD,MAAM,EAAC,QAAQ,EACf,cAAc,EAAE,KAAK,YAEpB,aAAa,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,GACxC,CACb,EACD,aAAG,SAAS,EAAC,4BAA4B,aACtC,aAAa,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,EAAE,YAAY,EAAE,CAAC,EAClE,yBACE,KAAC,SAAS,IAAC,QAAQ,QAAC,WAAW,EAAE,UAAU,YAAY,EAAE,CAAC,UAAU,EAAE,YAAG,YAAY,EAAE,CAAC,UAAU,GAAa,GAC1G,IACL,IACC,GACH,IACF,IACQ,CACjB,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAkB,CAAC,SAAS,GAAG;IAC7B,KAAK,EAAE,SAAS,CAAC,MAAM;IACvB,oBAAoB,EAAE,SAAS,CAAC,MAAM;IACtC,cAAc,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU;IACzC,yBAAyB,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU;IACpD,MAAM,EAAE,SAAS,CAAC,MAAM;IACxB,WAAW,EAAE,SAAS,CAAC,MAAM;CAC9B,CAAC;AAEF,kBAAkB,CAAC,YAAY,GAAG;IAChC,KAAK,EAAE,EAAE;IACT,oBAAoB,EAAE,EAAE;IACxB,MAAM,EAAE,IAAI;IACZ,WAAW,EAAE,aAAa;CAC3B,CAAC;AAEF,eAAe,OAAO,CACpB,4BAA4B,EAC5B;IACE,cAAc;IACd,yBAAyB;CAC1B,CACF,CAAC,kBAAkB,CAAC,CAAC","sourcesContent":["import { useEffect, useState } from 'react';\nimport { connect } from 'react-redux';\n\nimport {\n useAppConfig,\n getSiteConfig, sendPageEvent, sendTrackEvent, useIntl\n} from '@openedx/frontend-base';\nimport {\n Form,\n Hyperlink,\n Icon,\n StatefulButton,\n Tab,\n Tabs,\n} from '@openedx/paragon';\nimport { ChevronLeft } from '@openedx/paragon/icons';\nimport PropTypes from 'prop-types';\nimport { Helmet } from 'react-helmet';\nimport { useNavigate } from 'react-router-dom';\n\nimport BaseContainer from '../base-container';\nimport { FormGroup } from '../common-components';\nimport { DEFAULT_STATE, LOGIN_PAGE, VALID_EMAIL_REGEX } from '../data/constants';\nimport { updatePathWithQueryParams, windowScrollTo } from '../data/utils';\nimport { forgotPassword, setForgotPasswordFormData } from './data/actions';\nimport { forgotPasswordResultSelector } from './data/selectors';\nimport ForgotPasswordAlert from './ForgotPasswordAlert';\nimport messages from './messages';\n\nconst ForgotPasswordPage = (props) => {\n const platformName = getSiteConfig().siteName;\n const emailRegex = new RegExp(VALID_EMAIL_REGEX, 'i');\n const {\n status, submitState, emailValidationError,\n } = props;\n\n const { formatMessage } = useIntl();\n const [email, setEmail] = useState(props.email);\n const [bannerEmail, setBannerEmail] = useState('');\n const [formErrors, setFormErrors] = useState('');\n const [validationError, setValidationError] = useState(emailValidationError);\n const navigate = useNavigate();\n\n useEffect(() => {\n sendPageEvent('login_and_registration', 'reset');\n sendTrackEvent('edx.bi.password_reset_form.viewed', { category: 'user-engagement' });\n }, []);\n\n useEffect(() => {\n setValidationError(emailValidationError);\n }, [emailValidationError]);\n\n useEffect(() => {\n if (status === 'complete') {\n setEmail('');\n }\n }, [status]);\n\n const getValidationMessage = (value) => {\n let error = '';\n\n if (value === '') {\n error = formatMessage(messages['forgot.password.empty.email.field.error']);\n } else if (!emailRegex.test(value)) {\n error = formatMessage(messages['forgot.password.page.invalid.email.message']);\n }\n\n return error;\n };\n\n const handleBlur = () => {\n props.setForgotPasswordFormData({ email, emailValidationError: getValidationMessage(email) });\n };\n\n const handleFocus = () => props.setForgotPasswordFormData({ emailValidationError: '' });\n\n const handleSubmit = (e) => {\n e.preventDefault();\n setBannerEmail(email);\n\n const error = getValidationMessage(email);\n if (error) {\n setFormErrors(error);\n props.setForgotPasswordFormData({ email, emailValidationError: error });\n windowScrollTo({ left: 0, top: 0, behavior: 'smooth' });\n } else {\n props.forgotPassword(email);\n }\n };\n\n const tabTitle = (\n <div className=\"d-inline-flex flex-wrap align-items-center\">\n <Icon src={ChevronLeft} />\n <span className=\"ml-2\">{formatMessage(messages['sign.in.text'])}</span>\n </div>\n );\n\n return (\n <BaseContainer>\n <Helmet>\n <title>\n {formatMessage(\n messages['forgot.password.page.title'],\n { siteName: getSiteConfig().siteName }\n )}\n </title>\n </Helmet>\n <div>\n <Tabs activeKey=\"\" id=\"controlled-tab\" onSelect={(key) => navigate(updatePathWithQueryParams(key))}>\n <Tab title={tabTitle} eventKey={LOGIN_PAGE} />\n </Tabs>\n <div id=\"main-content\" className=\"main-content\">\n <Form id=\"forget-password-form\" name=\"forget-password-form\" className=\"mw-xs\">\n <ForgotPasswordAlert email={bannerEmail} emailError={formErrors} status={status} />\n <h2 className=\"h4\">\n {formatMessage(messages['forgot.password.page.heading'])}\n </h2>\n <p className=\"mb-4\">\n {formatMessage(messages['forgot.password.page.instructions'])}\n </p>\n <FormGroup\n floatingLabel={formatMessage(messages['forgot.password.page.email.field.label'])}\n name=\"email\"\n value={email}\n autoComplete=\"on\"\n errorMessage={validationError}\n handleChange={(e) => setEmail(e.target.value)}\n handleBlur={handleBlur}\n handleFocus={handleFocus}\n helpText={[formatMessage(messages['forgot.password.email.help.text'], { platformName })]}\n />\n <StatefulButton\n id=\"submit-forget-password\"\n name=\"submit-forget-password\"\n type=\"submit\"\n variant=\"brand\"\n className=\"forgot-password--button\"\n state={submitState}\n labels={{\n default: formatMessage(messages['forgot.password.page.submit.button']),\n pending: '',\n }}\n onClick={handleSubmit}\n onMouseDown={(e) => e.preventDefault()}\n />\n {(useAppConfig().LOGIN_ISSUE_SUPPORT_LINK) && (\n <Hyperlink\n id=\"forgot-password\"\n name=\"forgot-password\"\n className=\"ml-4 font-weight-500 text-body\"\n destination={useAppConfig().LOGIN_ISSUE_SUPPORT_LINK}\n target=\"_blank\"\n showLaunchIcon={false}\n >\n {formatMessage(messages['need.help.sign.in.text'])}\n </Hyperlink>\n )}\n <p className=\"mt-5.5 small text-gray-700\">\n {formatMessage(messages['additional.help.text'], { platformName })}\n <span>\n <Hyperlink isInline destination={`mailto:${useAppConfig().INFO_EMAIL}`}>{useAppConfig().INFO_EMAIL}</Hyperlink>\n </span>\n </p>\n </Form>\n </div>\n </div>\n </BaseContainer>\n );\n};\n\nForgotPasswordPage.propTypes = {\n email: PropTypes.string,\n emailValidationError: PropTypes.string,\n forgotPassword: PropTypes.func.isRequired,\n setForgotPasswordFormData: PropTypes.func.isRequired,\n status: PropTypes.string,\n submitState: PropTypes.string,\n};\n\nForgotPasswordPage.defaultProps = {\n email: '',\n emailValidationError: '',\n status: null,\n submitState: DEFAULT_STATE,\n};\n\nexport default connect(\n forgotPasswordResultSelector,\n {\n forgotPassword,\n setForgotPasswordFormData,\n },\n)(ForgotPasswordPage);\n"]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export const FORGOT_PASSWORD: AsyncActionType;
|
|
2
|
+
export const FORGOT_PASSWORD_PERSIST_FORM_DATA: "FORGOT_PASSWORD_PERSIST_FORM_DATA";
|
|
3
|
+
export function forgotPassword(email: any): {
|
|
4
|
+
type: string;
|
|
5
|
+
payload: {
|
|
6
|
+
email: any;
|
|
7
|
+
};
|
|
8
|
+
};
|
|
9
|
+
export function forgotPasswordBegin(): {
|
|
10
|
+
type: string;
|
|
11
|
+
};
|
|
12
|
+
export function forgotPasswordSuccess(email: any): {
|
|
13
|
+
type: string;
|
|
14
|
+
payload: {
|
|
15
|
+
email: any;
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
export function forgotPasswordForbidden(): {
|
|
19
|
+
type: string;
|
|
20
|
+
};
|
|
21
|
+
export function forgotPasswordServerError(): {
|
|
22
|
+
type: string;
|
|
23
|
+
};
|
|
24
|
+
export function setForgotPasswordFormData(forgotPasswordFormData: any): {
|
|
25
|
+
type: string;
|
|
26
|
+
payload: {
|
|
27
|
+
forgotPasswordFormData: any;
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
import { AsyncActionType } from '../../data/utils';
|
|
@@ -1,32 +1,26 @@
|
|
|
1
1
|
import { AsyncActionType } from '../../data/utils';
|
|
2
|
-
|
|
3
2
|
export const FORGOT_PASSWORD = new AsyncActionType('FORGOT', 'PASSWORD');
|
|
4
3
|
export const FORGOT_PASSWORD_PERSIST_FORM_DATA = 'FORGOT_PASSWORD_PERSIST_FORM_DATA';
|
|
5
|
-
|
|
6
4
|
// Forgot Password
|
|
7
5
|
export const forgotPassword = email => ({
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
type: FORGOT_PASSWORD.BASE,
|
|
7
|
+
payload: { email },
|
|
10
8
|
});
|
|
11
|
-
|
|
12
9
|
export const forgotPasswordBegin = () => ({
|
|
13
|
-
|
|
10
|
+
type: FORGOT_PASSWORD.BEGIN,
|
|
14
11
|
});
|
|
15
|
-
|
|
16
12
|
export const forgotPasswordSuccess = email => ({
|
|
17
|
-
|
|
18
|
-
|
|
13
|
+
type: FORGOT_PASSWORD.SUCCESS,
|
|
14
|
+
payload: { email },
|
|
19
15
|
});
|
|
20
|
-
|
|
21
16
|
export const forgotPasswordForbidden = () => ({
|
|
22
|
-
|
|
17
|
+
type: FORGOT_PASSWORD.FORBIDDEN,
|
|
23
18
|
});
|
|
24
|
-
|
|
25
19
|
export const forgotPasswordServerError = () => ({
|
|
26
|
-
|
|
20
|
+
type: FORGOT_PASSWORD.FAILURE,
|
|
27
21
|
});
|
|
28
|
-
|
|
29
22
|
export const setForgotPasswordFormData = (forgotPasswordFormData) => ({
|
|
30
|
-
|
|
31
|
-
|
|
23
|
+
type: FORGOT_PASSWORD_PERSIST_FORM_DATA,
|
|
24
|
+
payload: { forgotPasswordFormData },
|
|
32
25
|
});
|
|
26
|
+
//# sourceMappingURL=actions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../../src/forgot-password/data/actions.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,eAAe,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AACzE,MAAM,CAAC,MAAM,iCAAiC,GAAG,mCAAmC,CAAC;AAErF,kBAAkB;AAClB,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;IACtC,IAAI,EAAE,eAAe,CAAC,IAAI;IAC1B,OAAO,EAAE,EAAE,KAAK,EAAE;CACnB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,EAAE,CAAC,CAAC;IACxC,IAAI,EAAE,eAAe,CAAC,KAAK;CAC5B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;IAC7C,IAAI,EAAE,eAAe,CAAC,OAAO;IAC7B,OAAO,EAAE,EAAE,KAAK,EAAE;CACnB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,EAAE,CAAC,CAAC;IAC5C,IAAI,EAAE,eAAe,CAAC,SAAS;CAChC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,EAAE,CAAC,CAAC;IAC9C,IAAI,EAAE,eAAe,CAAC,OAAO;CAC9B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC;IACpE,IAAI,EAAE,iCAAiC;IACvC,OAAO,EAAE,EAAE,sBAAsB,EAAE;CACpC,CAAC,CAAC","sourcesContent":["import { AsyncActionType } from '../../data/utils';\n\nexport const FORGOT_PASSWORD = new AsyncActionType('FORGOT', 'PASSWORD');\nexport const FORGOT_PASSWORD_PERSIST_FORM_DATA = 'FORGOT_PASSWORD_PERSIST_FORM_DATA';\n\n// Forgot Password\nexport const forgotPassword = email => ({\n type: FORGOT_PASSWORD.BASE,\n payload: { email },\n});\n\nexport const forgotPasswordBegin = () => ({\n type: FORGOT_PASSWORD.BEGIN,\n});\n\nexport const forgotPasswordSuccess = email => ({\n type: FORGOT_PASSWORD.SUCCESS,\n payload: { email },\n});\n\nexport const forgotPasswordForbidden = () => ({\n type: FORGOT_PASSWORD.FORBIDDEN,\n});\n\nexport const forgotPasswordServerError = () => ({\n type: FORGOT_PASSWORD.FAILURE,\n});\n\nexport const setForgotPasswordFormData = (forgotPasswordFormData) => ({\n type: FORGOT_PASSWORD_PERSIST_FORM_DATA,\n payload: { forgotPasswordFormData },\n});\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export namespace defaultState {
|
|
2
|
+
let status: string;
|
|
3
|
+
let submitState: string;
|
|
4
|
+
let email: string;
|
|
5
|
+
let emailValidationError: string;
|
|
6
|
+
}
|
|
7
|
+
export default reducer;
|
|
8
|
+
declare function reducer(state?: {
|
|
9
|
+
status: string;
|
|
10
|
+
submitState: string;
|
|
11
|
+
email: string;
|
|
12
|
+
emailValidationError: string;
|
|
13
|
+
}, action?: null): any;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { FORGOT_PASSWORD, FORGOT_PASSWORD_PERSIST_FORM_DATA } from './actions';
|
|
2
|
+
import { INTERNAL_SERVER_ERROR, PENDING_STATE } from '../../data/constants';
|
|
3
|
+
import { PASSWORD_RESET_FAILURE } from '../../reset-password/data/actions';
|
|
4
|
+
export const defaultState = {
|
|
5
|
+
status: '',
|
|
6
|
+
submitState: '',
|
|
7
|
+
email: '',
|
|
8
|
+
emailValidationError: '',
|
|
9
|
+
};
|
|
10
|
+
const reducer = (state = defaultState, action = null) => {
|
|
11
|
+
if (action !== null) {
|
|
12
|
+
switch (action.type) {
|
|
13
|
+
case FORGOT_PASSWORD.BEGIN:
|
|
14
|
+
return {
|
|
15
|
+
email: state.email,
|
|
16
|
+
status: 'pending',
|
|
17
|
+
submitState: PENDING_STATE,
|
|
18
|
+
};
|
|
19
|
+
case FORGOT_PASSWORD.SUCCESS:
|
|
20
|
+
return Object.assign(Object.assign({}, defaultState), { status: 'complete' });
|
|
21
|
+
case FORGOT_PASSWORD.FORBIDDEN:
|
|
22
|
+
return {
|
|
23
|
+
email: state.email,
|
|
24
|
+
status: 'forbidden',
|
|
25
|
+
};
|
|
26
|
+
case FORGOT_PASSWORD.FAILURE:
|
|
27
|
+
return {
|
|
28
|
+
email: state.email,
|
|
29
|
+
status: INTERNAL_SERVER_ERROR,
|
|
30
|
+
};
|
|
31
|
+
case PASSWORD_RESET_FAILURE:
|
|
32
|
+
return {
|
|
33
|
+
status: action.payload.errorCode,
|
|
34
|
+
};
|
|
35
|
+
case FORGOT_PASSWORD_PERSIST_FORM_DATA: {
|
|
36
|
+
const { forgotPasswordFormData } = action.payload;
|
|
37
|
+
return Object.assign(Object.assign({}, state), forgotPasswordFormData);
|
|
38
|
+
}
|
|
39
|
+
default:
|
|
40
|
+
return Object.assign(Object.assign({}, defaultState), { email: state.email, emailValidationError: state.emailValidationError });
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return state;
|
|
44
|
+
};
|
|
45
|
+
export default reducer;
|
|
46
|
+
//# sourceMappingURL=reducers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reducers.js","sourceRoot":"","sources":["../../../src/forgot-password/data/reducers.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,iCAAiC,EAAE,MAAM,WAAW,CAAC;AAC/E,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAE3E,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,MAAM,EAAE,EAAE;IACV,WAAW,EAAE,EAAE;IACf,KAAK,EAAE,EAAE;IACT,oBAAoB,EAAE,EAAE;CACzB,CAAC;AAEF,MAAM,OAAO,GAAG,CAAC,KAAK,GAAG,YAAY,EAAE,MAAM,GAAG,IAAI,EAAE,EAAE;IACtD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,KAAK,eAAe,CAAC,KAAK;gBACxB,OAAO;oBACL,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,MAAM,EAAE,SAAS;oBACjB,WAAW,EAAE,aAAa;iBAC3B,CAAC;YACJ,KAAK,eAAe,CAAC,OAAO;gBAC1B,uCACK,YAAY,KACf,MAAM,EAAE,UAAU,IAClB;YACJ,KAAK,eAAe,CAAC,SAAS;gBAC5B,OAAO;oBACL,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,MAAM,EAAE,WAAW;iBACpB,CAAC;YACJ,KAAK,eAAe,CAAC,OAAO;gBAC1B,OAAO;oBACL,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,MAAM,EAAE,qBAAqB;iBAC9B,CAAC;YACJ,KAAK,sBAAsB;gBACzB,OAAO;oBACL,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS;iBACjC,CAAC;YACJ,KAAK,iCAAiC,CAAC,CAAC,CAAC;gBACvC,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC;gBAClD,uCACK,KAAK,GACL,sBAAsB,EACzB;YACJ,CAAC;YACD;gBACE,uCACK,YAAY,KACf,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,oBAAoB,EAAE,KAAK,CAAC,oBAAoB,IAChD;QACN,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,eAAe,OAAO,CAAC","sourcesContent":["import { FORGOT_PASSWORD, FORGOT_PASSWORD_PERSIST_FORM_DATA } from './actions';\nimport { INTERNAL_SERVER_ERROR, PENDING_STATE } from '../../data/constants';\nimport { PASSWORD_RESET_FAILURE } from '../../reset-password/data/actions';\n\nexport const defaultState = {\n status: '',\n submitState: '',\n email: '',\n emailValidationError: '',\n};\n\nconst reducer = (state = defaultState, action = null) => {\n if (action !== null) {\n switch (action.type) {\n case FORGOT_PASSWORD.BEGIN:\n return {\n email: state.email,\n status: 'pending',\n submitState: PENDING_STATE,\n };\n case FORGOT_PASSWORD.SUCCESS:\n return {\n ...defaultState,\n status: 'complete',\n };\n case FORGOT_PASSWORD.FORBIDDEN:\n return {\n email: state.email,\n status: 'forbidden',\n };\n case FORGOT_PASSWORD.FAILURE:\n return {\n email: state.email,\n status: INTERNAL_SERVER_ERROR,\n };\n case PASSWORD_RESET_FAILURE:\n return {\n status: action.payload.errorCode,\n };\n case FORGOT_PASSWORD_PERSIST_FORM_DATA: {\n const { forgotPasswordFormData } = action.payload;\n return {\n ...state,\n ...forgotPasswordFormData,\n };\n }\n default:\n return {\n ...defaultState,\n email: state.email,\n emailValidationError: state.emailValidationError,\n };\n }\n }\n return state;\n};\n\nexport default reducer;\n"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export function handleForgotPassword(action: any): Generator<import("redux-saga/effects").PutEffect<{
|
|
2
|
+
type: string;
|
|
3
|
+
}> | import("redux-saga/effects").CallEffect<any>, void, unknown>;
|
|
4
|
+
export default function saga(): Generator<import("redux-saga/effects").ForkEffect<never>, void, unknown>;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { logError, logInfo } from '@openedx/frontend-base';
|
|
2
|
+
import { call, put, takeEvery } from 'redux-saga/effects';
|
|
3
|
+
// Actions
|
|
4
|
+
import { FORGOT_PASSWORD, forgotPasswordBegin, forgotPasswordForbidden, forgotPasswordServerError, forgotPasswordSuccess, } from './actions';
|
|
5
|
+
import { forgotPassword } from './service';
|
|
6
|
+
// Services
|
|
7
|
+
export function* handleForgotPassword(action) {
|
|
8
|
+
var _a;
|
|
9
|
+
try {
|
|
10
|
+
yield put(forgotPasswordBegin());
|
|
11
|
+
yield call(forgotPassword, action.payload.email);
|
|
12
|
+
yield put(forgotPasswordSuccess(action.payload.email));
|
|
13
|
+
}
|
|
14
|
+
catch (e) {
|
|
15
|
+
if (((_a = e.response) === null || _a === void 0 ? void 0 : _a.status) === 403) {
|
|
16
|
+
yield put(forgotPasswordForbidden());
|
|
17
|
+
logInfo(e);
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
yield put(forgotPasswordServerError());
|
|
21
|
+
logError(e);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export default function* saga() {
|
|
26
|
+
yield takeEvery(FORGOT_PASSWORD.BASE, handleForgotPassword);
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=sagas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sagas.js","sourceRoot":"","sources":["../../../src/forgot-password/data/sagas.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE1D,UAAU;AACV,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,uBAAuB,EACvB,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,WAAW;AACX,MAAM,SAAS,CAAC,CAAC,oBAAoB,CAAC,MAAM;;IAC1C,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,mBAAmB,EAAE,CAAC,CAAC;QAEjC,MAAM,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAEjD,MAAM,GAAG,CAAC,qBAAqB,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IACzD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAA,MAAA,CAAC,CAAC,QAAQ,0CAAE,MAAM,MAAK,GAAG,EAAE,CAAC;YAC/B,MAAM,GAAG,CAAC,uBAAuB,EAAE,CAAC,CAAC;YACrC,OAAO,CAAC,CAAC,CAAC,CAAC;QACb,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,CAAC,yBAAyB,EAAE,CAAC,CAAC;YACvC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACd,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,OAAO,SAAS,CAAC,CAAC,IAAI;IAC3B,MAAM,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;AAC9D,CAAC","sourcesContent":["import { logError, logInfo } from '@openedx/frontend-base';\nimport { call, put, takeEvery } from 'redux-saga/effects';\n\n// Actions\nimport {\n FORGOT_PASSWORD,\n forgotPasswordBegin,\n forgotPasswordForbidden,\n forgotPasswordServerError,\n forgotPasswordSuccess,\n} from './actions';\nimport { forgotPassword } from './service';\n\n// Services\nexport function* handleForgotPassword(action) {\n try {\n yield put(forgotPasswordBegin());\n\n yield call(forgotPassword, action.payload.email);\n\n yield put(forgotPasswordSuccess(action.payload.email));\n } catch (e) {\n if (e.response?.status === 403) {\n yield put(forgotPasswordForbidden());\n logInfo(e);\n } else {\n yield put(forgotPasswordServerError());\n logError(e);\n }\n }\n}\n\nexport default function* saga() {\n yield takeEvery(FORGOT_PASSWORD.BASE, handleForgotPassword);\n}\n"]}
|