{"version":3,"file":"app.da44bba66f90cb4d6560.js","mappings":"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","sources":["webpack://@edx/frontend-app-authn/./src/i18n/index.jsx","webpack://@edx/frontend-app-authn/./src/data/constants.js","webpack://@edx/frontend-app-authn/./src/data/utils/dataUtils.js","webpack://@edx/frontend-app-authn/./src/data/utils/reduxUtils.js","webpack://@edx/frontend-app-authn/./src/data/utils/cookies.js","webpack://@edx/frontend-app-authn/./src/common-components/RedirectLogistration.jsx","webpack://@edx/frontend-app-authn/./src/common-components/UnAuthOnlyRoute.jsx","webpack://@edx/frontend-app-authn/./src/common-components/NotFoundPage.jsx","webpack://@edx/frontend-app-authn/./src/common-components/messages.jsx","webpack://@edx/frontend-app-authn/./src/common-components/SocialAuthProviders.jsx","webpack://@edx/frontend-app-authn/./src/common-components/ThirdPartyAuthAlert.jsx","webpack://@edx/frontend-app-authn/./src/common-components/InstitutionLogistration.jsx","webpack://@edx/frontend-app-authn/./src/common-components/data/actions.js","webpack://@edx/frontend-app-authn/./src/common-components/data/reducers.js","webpack://@edx/frontend-app-authn/./src/register/data/actions.js","webpack://@edx/frontend-app-authn/./src/common-components/data/service.js","webpack://@edx/frontend-app-authn/./src/common-components/data/sagas.js","webpack://@edx/frontend-app-authn/./src/common-components/data/selectors.js","webpack://@edx/frontend-app-authn/./src/common-components/FormGroup.jsx","webpack://@edx/frontend-app-authn/./src/common-components/PasswordField.jsx","webpack://@edx/frontend-app-authn/./src/base-component/messages.jsx","webpack://@edx/frontend-app-authn/./src/base-component/AuthLargeLayout.jsx","webpack://@edx/frontend-app-authn/./src/base-component/AuthMediumLayout.jsx","webpack://@edx/frontend-app-authn/./src/base-component/AuthSmallLayout.jsx","webpack://@edx/frontend-app-authn/./src/base-component/LargeLayout.jsx","webpack://@edx/frontend-app-authn/./src/base-component/MediumLayout.jsx","webpack://@edx/frontend-app-authn/./src/base-component/SmallLayout.jsx","webpack://@edx/frontend-app-authn/./src/base-component/BaseComponent.jsx","webpack://@edx/frontend-app-authn/./src/common-components/EnterpriseSSO.jsx","webpack://@edx/frontend-app-authn/./src/reset-password/messages.js","webpack://@edx/frontend-app-authn/./src/reset-password/ResetPasswordSuccess.jsx","webpack://@edx/frontend-app-authn/./src/login/data/constants.js","webpack://@edx/frontend-app-authn/./src/login/messages.jsx","webpack://@edx/frontend-app-authn/./src/login/AccountActivationMessage.jsx","webpack://@edx/frontend-app-authn/./src/login/data/actions.js","webpack://@edx/frontend-app-authn/./src/login/data/selectors.js","webpack://@edx/frontend-app-authn/./src/data/utils/useMobileResponsive.js","webpack://@edx/frontend-app-authn/./src/login/ChangePasswordPrompt.jsx","webpack://@edx/frontend-app-authn/./src/login/LoginFailure.jsx","webpack://@edx/frontend-app-authn/./src/login/LoginPage.jsx","webpack://@edx/frontend-app-authn/./src/reset-password/data/actions.js","webpack://@edx/frontend-app-authn/./src/reset-password/data/constants.js","webpack://@edx/frontend-app-authn/./src/reset-password/data/selectors.js","webpack://@edx/frontend-app-authn/./src/reset-password/data/service.js","webpack://@edx/frontend-app-authn/./src/reset-password/ResetPasswordFailure.jsx","webpack://@edx/frontend-app-authn/./src/reset-password/ResetPasswordPage.jsx","webpack://@edx/frontend-app-authn/./src/reset-password/data/reducers.js","webpack://@edx/frontend-app-authn/./src/reset-password/data/sagas.js","webpack://@edx/frontend-app-authn/./src/login/data/reducers.js","webpack://@edx/frontend-app-authn/./src/login/data/service.js","webpack://@edx/frontend-app-authn/./src/login/data/sagas.js","webpack://@edx/frontend-app-authn/./src/field-renderer/FieldRenderer.jsx","webpack://@edx/frontend-app-authn/./src/register/data/constants.js","webpack://@edx/frontend-app-authn/./src/register/CountryDropdown.jsx","webpack://@edx/frontend-app-authn/./src/register/data/selectors.js","webpack://@edx/frontend-app-authn/./src/register/messages.jsx","webpack://@edx/frontend-app-authn/./src/register/HonorCode.jsx","webpack://@edx/frontend-app-authn/./src/register/RegistrationFailure.jsx","webpack://@edx/frontend-app-authn/./src/register/TermsOfService.jsx","webpack://@edx/frontend-app-authn/./src/register/UsernameField.jsx","webpack://@edx/frontend-app-authn/./src/register/utils.js","webpack://@edx/frontend-app-authn/./src/register/RegistrationPage.jsx","webpack://@edx/frontend-app-authn/./src/register/data/reducers.js","webpack://@edx/frontend-app-authn/./src/register/data/service.js","webpack://@edx/frontend-app-authn/./src/register/data/sagas.js","webpack://@edx/frontend-app-authn/./src/common-components/Logistration.jsx","webpack://@edx/frontend-app-authn/./src/forgot-password/data/actions.js","webpack://@edx/frontend-app-authn/./src/forgot-password/data/selectors.js","webpack://@edx/frontend-app-authn/./src/forgot-password/messages.js","webpack://@edx/frontend-app-authn/./src/forgot-password/ForgotPasswordAlert.jsx","webpack://@edx/frontend-app-authn/./src/forgot-password/ForgotPasswordPage.jsx","webpack://@edx/frontend-app-authn/./src/forgot-password/data/reducers.js","webpack://@edx/frontend-app-authn/./src/forgot-password/data/service.js","webpack://@edx/frontend-app-authn/./src/forgot-password/data/sagas.js","webpack://@edx/frontend-app-authn/./src/welcome/data/actions.js","webpack://@edx/frontend-app-authn/./src/welcome/data/selectors.js","webpack://@edx/frontend-app-authn/./src/welcome/messages.jsx","webpack://@edx/frontend-app-authn/./src/welcome/WelcomePageModal.jsx","webpack://@edx/frontend-app-authn/./src/welcome/ProgressiveProfiling.jsx","webpack://@edx/frontend-app-authn/./src/welcome/data/reducers.js","webpack://@edx/frontend-app-authn/./src/welcome/data/service.js","webpack://@edx/frontend-app-authn/./src/welcome/data/sagas.js","webpack://@edx/frontend-app-authn/./src/data/reducers.js","webpack://@edx/frontend-app-authn/./src/data/sagas.js","webpack://@edx/frontend-app-authn/./src/data/configureStore.js","webpack://@edx/frontend-app-authn/./src/common-components/RegisterFaIcons.jsx","webpack://@edx/frontend-app-authn/./src/MainApp.jsx","webpack://@edx/frontend-app-authn/./src/index.jsx"],"sourcesContent":["import arMessages from './messages/ar.json';\nimport caMessages from './messages/ca.json';\n// no need to import en messages-- they are in the defaultMessage field\nimport dedeMessages from './messages/de_DE.json';\nimport es419Messages from './messages/es_419.json';\nimport frMessages from './messages/fr.json';\nimport heMessages from './messages/he.json';\nimport hiMessages from './messages/hi.json';\nimport idMessages from './messages/id.json';\nimport ititMessages from './messages/it_IT.json';\nimport kokrMessages from './messages/ko_kr.json';\nimport plMessages from './messages/pl.json';\nimport ptbrMessages from './messages/pt_br.json';\nimport ptptMessages from './messages/pt_PT.json';\nimport ruMessages from './messages/ru.json';\nimport thMessages from './messages/th.json';\nimport ukMessages from './messages/uk.json';\nimport zhcnMessages from './messages/zh_CN.json';\n\nconst messages = {\n ar: arMessages,\n es: es419Messages, // Prospectus uses es language code for spanish, added `es` option and pointed to es-419 strings.\n 'es-419': es419Messages,\n fr: frMessages,\n 'zh-cn': zhcnMessages,\n 'it-it': ititMessages,\n 'pt-pt': ptptMessages,\n 'de-de': dedeMessages,\n ca: caMessages,\n he: heMessages,\n id: idMessages,\n 'ko-kr': kokrMessages,\n pl: plMessages,\n 'pt-br': ptbrMessages,\n ru: ruMessages,\n th: thMessages,\n uk: ukMessages,\n hi: hiMessages,\n};\n\nexport default messages;\n","// URL Paths\nexport const LOGIN_PAGE = '/login';\nexport const REGISTER_PAGE = '/register';\nexport const RESET_PAGE = '/reset';\nexport const WELCOME_PAGE = '/welcome';\nexport const DEFAULT_REDIRECT_URL = '/dashboard';\nexport const PASSWORD_RESET_CONFIRM = '/password_reset_confirm/:token/';\nexport const PAGE_NOT_FOUND = '/notfound';\nexport const ENTERPRISE_LOGIN_URL = '/enterprise/login';\n\n// Constants\nexport const SUPPORTED_ICON_CLASSES = ['apple', 'facebook', 'google', 'microsoft'];\n\n// Error Codes\nexport const FORM_SUBMISSION_ERROR = 'form-submission-error';\nexport const INTERNAL_SERVER_ERROR = 'internal-server-error';\nexport const API_RATELIMIT_ERROR = 'api-ratelimit-error';\n\n// Common States\nexport const DEFAULT_STATE = 'default';\nexport const PENDING_STATE = 'pending';\nexport const COMPLETE_STATE = 'complete';\nexport const FAILURE_STATE = 'failure';\nexport const FORBIDDEN_STATE = 'forbidden';\n\n// Regex\nexport const VALID_EMAIL_REGEX = '(^[-!#$%&\\'*+/=?^_`{}|~0-9A-Z]+(\\\\.[-!#$%&\\'*+/=?^_`{}|~0-9A-Z]+)*'\n + '|^\"([\\\\001-\\\\010\\\\013\\\\014\\\\016-\\\\037!#-\\\\[\\\\]-\\\\177]|\\\\\\\\[\\\\001-\\\\011\\\\013\\\\014\\\\016-\\\\177])*\"'\n + ')@((?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\\\\.)+)(?:[A-Z0-9-]{2,63})'\n + '|\\\\[(25[0-5]|2[0-4]\\\\d|[0-1]?\\\\d?\\\\d)(\\\\.(25[0-5]|2[0-4]\\\\d|[0-1]?\\\\d?\\\\d)){3}\\\\]$';\nexport const LETTER_REGEX = /[a-zA-Z]/;\nexport const NUMBER_REGEX = /\\d/;\nexport const VALID_NAME_REGEX = /[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_\\+.~#?&//=]*)?/gi; // eslint-disable-line no-useless-escape\n\n// Query string parameters that can be passed to LMS to manage\n// things like auto-enrollment upon login and registration.\nexport const AUTH_PARAMS = ['course_id', 'enrollment_action', 'course_mode', 'email_opt_in', 'purchase_workflow', 'next', 'save_for_later', 'register_for_free'];\n","// Utility functions\nimport * as QueryString from 'query-string';\n\nimport { AUTH_PARAMS } from '../constants';\n\nexport const getTpaProvider = (tpaHintProvider, primaryProviders, secondaryProviders) => {\n let tpaProvider = null;\n let skipHintedLogin = false;\n [...primaryProviders, ...secondaryProviders].forEach((provider) => {\n if (provider.id === tpaHintProvider) {\n tpaProvider = provider;\n if (provider.skipHintedLogin) {\n skipHintedLogin = true;\n }\n }\n });\n return { provider: tpaProvider, skipHintedLogin };\n};\n\nexport const getTpaHint = () => {\n const params = QueryString.parse(window.location.search);\n let tpaHint = null;\n tpaHint = params.tpa_hint;\n if (!tpaHint) {\n const { next } = params;\n if (next) {\n const index = next.indexOf('tpa_hint=');\n if (index !== -1) {\n tpaHint = next.substring(index + 'tpa_hint='.length, next.length);\n }\n }\n }\n return tpaHint;\n};\n\nexport const updatePathWithQueryParams = (path) => {\n let queryParams = window.location.search;\n\n if (!queryParams) {\n return path;\n }\n\n if (queryParams.indexOf('track=pwreset') > -1) {\n queryParams = queryParams.replace(\n '?track=pwreset&', '?',\n ).replace('?track=pwreset', '').replace('&track=pwreset', '').replace('?&', '?');\n }\n\n return `${path}${queryParams}`;\n};\n\nexport const getAllPossibleQueryParam = () => {\n const urlParams = QueryString.parse(window.location.search);\n const params = {};\n Object.entries(urlParams).forEach(([key, value]) => {\n if (AUTH_PARAMS.indexOf(key) > -1) {\n params[key] = value;\n }\n });\n\n return params;\n};\n\nexport const getActivationStatus = () => {\n const params = QueryString.parse(window.location.search);\n\n return params.account_activation_status;\n};\n\nexport const isScrollBehaviorSupported = () => 'scrollBehavior' in document.documentElement.style;\n\nexport const windowScrollTo = (options) => {\n if (isScrollBehaviorSupported()) {\n return window.scrollTo(options);\n }\n\n return window.scrollTo(options.top, options.left);\n};\n","/**\n * Helper class to save time when writing out action types for asynchronous methods. Also helps\n * ensure that actions are namespaced.\n */\nexport default class AsyncActionType {\n constructor(topic, name) {\n this.topic = topic;\n this.name = name;\n }\n\n get BASE() {\n return `${this.topic}__${this.name}`;\n }\n\n get BEGIN() {\n return `${this.topic}__${this.name}__BEGIN`;\n }\n\n get SUCCESS() {\n return `${this.topic}__${this.name}__SUCCESS`;\n }\n\n get FAILURE() {\n return `${this.topic}__${this.name}__FAILURE`;\n }\n\n get RESET() {\n return `${this.topic}__${this.name}__RESET`;\n }\n\n get FORBIDDEN() {\n return `${this.topic}__${this.name}__FORBIDDEN`;\n }\n}\n","import { getConfig } from '@edx/frontend-platform';\nimport Cookies from 'universal-cookie';\n\nexport function setCookie(cookieName, cookieValue, cookieExpiry) {\n const cookies = new Cookies();\n const options = { domain: getConfig().COOKIE_DOMAIN, path: '/' };\n if (cookieExpiry) {\n options.expires = cookieExpiry;\n }\n cookies.set(cookieName, cookieValue, options);\n}\n\nexport default function setSurveyCookie(surveyType) {\n const cookieName = getConfig().USER_SURVEY_COOKIE_NAME;\n if (cookieName) {\n const signupTimestamp = (new Date()).getTime();\n // set expiry to exactly 24 hours from now\n const cookieExpiry = new Date(signupTimestamp + 1 * 864e5);\n setCookie(cookieName, surveyType, cookieExpiry);\n }\n}\n","import React from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport PropTypes from 'prop-types';\nimport { Redirect } from 'react-router-dom';\n\nimport { WELCOME_PAGE } from '../data/constants';\nimport { setCookie } from '../data/utils';\n\nfunction RedirectLogistration(props) {\n const {\n finishAuthUrl, redirectUrl, redirectToWelcomePage, success, optionalFields,\n } = props;\n let finalRedirectUrl = '';\n\n if (success) {\n // If we're in a third party auth pipeline, we must complete the pipeline\n // once user has successfully logged in. Otherwise, redirect to the specified redirect url.\n // Note: For multiple enterprise use case, we need to make sure that user first visits the\n // enterprise selection page and then complete the auth workflow\n if (finishAuthUrl && !redirectUrl.includes(finishAuthUrl)) {\n finalRedirectUrl = getConfig().LMS_BASE_URL + finishAuthUrl;\n } else {\n finalRedirectUrl = redirectUrl;\n }\n\n if (redirectToWelcomePage) {\n setCookie('van-504-returning-user', true);\n // use this component to redirect WelcomePage after successful registration\n // return ;\n const registrationResult = { redirectUrl: finalRedirectUrl, success };\n return (\n \n );\n }\n\n window.location.href = finalRedirectUrl;\n }\n return <>;\n}\n\nRedirectLogistration.defaultProps = {\n finishAuthUrl: null,\n success: false,\n redirectUrl: '',\n redirectToWelcomePage: false,\n optionalFields: {},\n};\n\nRedirectLogistration.propTypes = {\n finishAuthUrl: PropTypes.string,\n success: PropTypes.bool,\n redirectUrl: PropTypes.string,\n redirectToWelcomePage: PropTypes.bool,\n optionalFields: PropTypes.shape({}),\n};\n\nexport default RedirectLogistration;\n","import React, { useEffect, useState } from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { fetchAuthenticatedUser, getAuthenticatedUser } from '@edx/frontend-platform/auth';\nimport { Route } from 'react-router-dom';\n\nimport { DEFAULT_REDIRECT_URL } from '../data/constants';\n\n/**\n * This wrapper redirects the requester to our default redirect url if they are\n * already authenticated.\n */\nconst UnAuthOnlyRoute = (props) => {\n const [authUser, setAuthUser] = useState({});\n const [isReady, setIsReady] = useState(false);\n\n useEffect(() => {\n fetchAuthenticatedUser({ forceRefresh: !!getAuthenticatedUser() }).then((authenticatedUser) => {\n setAuthUser(authenticatedUser);\n setIsReady(true);\n });\n }, []);\n\n if (isReady) {\n if (authUser && authUser.username) {\n global.location.href = getConfig().LMS_BASE_URL.concat(DEFAULT_REDIRECT_URL);\n return null;\n }\n\n return ;\n }\n\n return <>;\n};\n\nexport default UnAuthOnlyRoute;\n","import React from 'react';\n\nimport { FormattedMessage } from '@edx/frontend-platform/i18n';\n\nexport default function NotFoundPage() {\n return (\n
\n

\n \n

\n
\n );\n}\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n 'institution.login.page.sub.heading': {\n id: 'institution.login.page.sub.heading',\n defaultMessage: 'Choose your institution from the list below',\n description: 'Heading of the institutions list',\n },\n // Confirmation Alert Message\n 'forgot.password.confirmation.title': {\n id: 'forgot.password.confirmation.title',\n defaultMessage: 'Check your email',\n description: 'Forgot password confirmation message title',\n },\n 'forgot.password.confirmation.support.link': {\n id: 'forgot.password.confirmation.support.link',\n defaultMessage: 'contact technical support',\n description: 'Technical support link text',\n },\n 'forgot.password.confirmation.info': {\n id: 'forgot.password.confirmation.info',\n defaultMessage: 'If you do not receive a password reset message after 1 minute, verify that you entered the correct '\n + 'email address, or check your spam folder.',\n description: 'Part of message that appears after user requests password change',\n },\n // Logistration strinsg\n 'logistration.sign.in': {\n id: 'logistration.sign.in',\n defaultMessage: 'Sign in',\n description: 'Text that appears on the tab to switch between login and register',\n },\n 'logistration.register': {\n id: 'logistration.register',\n defaultMessage: 'Register',\n description: 'Text that appears on the tab to switch between login and register',\n },\n 'internal.server.error.message': {\n id: 'internal.server.error.message',\n defaultMessage: 'An error has occurred. Try refreshing the page, or check your internet connection.',\n description: 'Error message that appears when server responds with 500 error code',\n },\n 'server.ratelimit.error.message': {\n id: 'server.ratelimit.error.message',\n defaultMessage: 'An error has occurred because of too many requests. Please try again after some time.',\n description: 'Error message that appears when server responds with 429 error code',\n },\n // enterprise sso strings\n 'enterprisetpa.title.heading': {\n id: 'enterprisetpa.title.heading',\n defaultMessage: 'Would you like to sign in using your {providerName} credentials?',\n description: 'Header text used in enterprise third party authentication',\n },\n 'enterprisetpa.sso.button.title': {\n id: 'enterprisetpa.sso.button.title',\n defaultMessage: 'Sign in using {providerName}',\n description: 'Text for third party auth provider buttons',\n },\n 'enterprisetpa.login.button.text': {\n id: 'enterprisetpa.login.button.text',\n defaultMessage: 'Show me other ways to sign in or register',\n description: 'Button text for login',\n },\n 'enterprisetpa.login.button.text.public.account.creation.disabled': {\n id: 'enterprisetpa.login.button.text.public.account.creation.disabled',\n defaultMessage: 'Show me other ways to sign in',\n description: 'Button text for login when account creation is disabled',\n },\n // social auth providers\n 'sso.sign.in.with': {\n id: 'sso.sign.in.with',\n defaultMessage: 'Sign in with {providerName}',\n description: 'Screen reader text that appears before social auth provider name',\n },\n 'sso.create.account.using': {\n id: 'sso.create.account.using',\n defaultMessage: 'Create account using {providerName}',\n description: 'Screen reader text that appears before social auth provider name',\n },\n // password field strings\n 'show.password': {\n id: 'show.password',\n defaultMessage: 'Show password',\n description: 'aria label for show password icon on password field',\n },\n 'hide.password': {\n id: 'hide.password',\n defaultMessage: 'Hide password',\n description: 'aria label for hide password icon on password field',\n },\n 'one.letter': {\n id: 'one.letter',\n defaultMessage: '1 letter',\n description: 'password requirement to have 1 letter',\n },\n 'one.number': {\n id: 'one.number',\n defaultMessage: '1 number',\n description: 'password requirement to have 1 number',\n },\n 'eight.characters': {\n id: 'eight.characters',\n defaultMessage: '8 characters',\n description: 'password requirement to have a minimum of 8 characters',\n },\n 'password.sr.only.helping.text': {\n id: 'password.sr.only.helping.text',\n defaultMessage: 'Password must contain at least 8 characters, at least one letter, and at least one number',\n description: 'Password helping text for the sr-only class',\n },\n // third party auth\n 'tpa.alert.heading': {\n id: 'tpa.alert.heading',\n defaultMessage: 'Almost done!',\n description: 'Success alert heading after user has successfully signed in with social auth',\n },\n 'login.third.party.auth.account.not.linked': {\n id: 'login.third.party.auth.account.not.linked',\n defaultMessage: 'You have successfully signed into {currentProvider}, but your {currentProvider} '\n + 'account does not have a linked {platformName} account. To link your accounts, '\n + 'sign in now using your {platformName} password.',\n description: 'Message that appears on login page if user has successfully authenticated with social '\n + 'auth but no associated platform account exists',\n },\n 'register.third.party.auth.account.not.linked': {\n id: 'register.third.party.auth.account.not.linked',\n defaultMessage: 'You\\'ve successfully signed into {currentProvider}! We just need a little more information '\n + 'before you start learning with {platformName}.',\n description: 'Message that appears on register page if user has successfully authenticated with TPA '\n + 'but no associated platform account exists',\n },\n});\n\nexport default messages;\n","import React from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { faSignInAlt } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport PropTypes from 'prop-types';\n\nimport { LOGIN_PAGE, SUPPORTED_ICON_CLASSES } from '../data/constants';\nimport messages from './messages';\n\nfunction SocialAuthProviders(props) {\n const { intl, referrer, socialAuthProviders } = props;\n\n function handleSubmit(e) {\n e.preventDefault();\n\n const url = e.currentTarget.dataset.providerUrl;\n window.location.href = getConfig().LMS_BASE_URL + url;\n }\n\n const socialAuth = socialAuthProviders.map((provider, index) => (\n \n {provider.iconImage ? (\n
\n {`icon\n
\n )\n : (\n <>\n
\n \n
\n \n )}\n {provider.name}\n \n {referrer === LOGIN_PAGE\n ? intl.formatMessage(messages['sso.sign.in.with'], { providerName: provider.name })\n : intl.formatMessage(messages['sso.create.account.using'], { providerName: provider.name })}\n \n \n ));\n\n return <>{socialAuth};\n}\n\nSocialAuthProviders.defaultProps = {\n referrer: LOGIN_PAGE,\n socialAuthProviders: [],\n};\n\nSocialAuthProviders.propTypes = {\n intl: intlShape.isRequired,\n referrer: PropTypes.string,\n socialAuthProviders: PropTypes.arrayOf(PropTypes.shape({\n id: PropTypes.string,\n name: PropTypes.string,\n iconClass: PropTypes.string,\n iconImage: PropTypes.string,\n loginUrl: PropTypes.string,\n registerUrl: PropTypes.string,\n })),\n};\n\nexport default injectIntl(SocialAuthProviders);\n","import React from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Alert } from '@edx/paragon';\nimport PropTypes from 'prop-types';\n\nimport { LOGIN_PAGE, REGISTER_PAGE } from '../data/constants';\nimport messages from './messages';\n\nconst ThirdPartyAuthAlert = (props) => {\n const { currentProvider, intl, referrer } = props;\n const platformName = getConfig().SITE_NAME;\n let message;\n\n if (referrer === LOGIN_PAGE) {\n message = intl.formatMessage(messages['login.third.party.auth.account.not.linked'], { currentProvider, platformName });\n } else {\n message = intl.formatMessage(messages['register.third.party.auth.account.not.linked'], { currentProvider, platformName });\n }\n\n return (\n \n {referrer === REGISTER_PAGE ? (\n {intl.formatMessage(messages['tpa.alert.heading'])}\n ) : null}\n

{ message }

\n
\n );\n};\n\nThirdPartyAuthAlert.defaultProps = {\n referrer: LOGIN_PAGE,\n};\n\nThirdPartyAuthAlert.propTypes = {\n currentProvider: PropTypes.string.isRequired,\n intl: intlShape.isRequired,\n referrer: PropTypes.string,\n};\n\nexport default injectIntl(ThirdPartyAuthAlert);\n","import React from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Button, Hyperlink, Icon } from '@edx/paragon';\nimport { Institution } from '@edx/paragon/icons';\nimport PropTypes from 'prop-types';\n\nimport messages from './messages';\n\nexport const RenderInstitutionButton = props => {\n const { onSubmitHandler, buttonTitle } = props;\n\n return (\n \n \n {buttonTitle}\n \n );\n};\n\nconst InstitutionLogistration = props => {\n const lmsBaseUrl = getConfig().LMS_BASE_URL;\n const {\n intl,\n secondaryProviders,\n headingTitle,\n } = props;\n\n return (\n <>\n
\n
\n

\n {headingTitle}\n

\n

\n {intl.formatMessage(messages['institution.login.page.sub.heading'])}\n

\n
\n
\n
\n \n \n {secondaryProviders.map(provider => (\n \n \n \n ))}\n \n
\n \n {provider.name}\n \n
\n
\n \n );\n};\n\nconst LogistrationDefaultProps = {\n secondaryProviders: [],\n buttonTitle: '',\n};\nconst LogistrationProps = {\n secondaryProviders: PropTypes.arrayOf(PropTypes.shape({\n name: PropTypes.string.isRequired,\n loginUrl: PropTypes.string.isRequired,\n })),\n};\n\nRenderInstitutionButton.propTypes = {\n ...LogistrationProps,\n buttonTitle: PropTypes.string,\n onSubmitHandler: PropTypes.func.isRequired,\n\n};\nRenderInstitutionButton.defaultProps = {\n ...LogistrationDefaultProps,\n};\n\nInstitutionLogistration.propTypes = {\n ...LogistrationProps,\n intl: intlShape.isRequired,\n headingTitle: PropTypes.string,\n};\nInstitutionLogistration.defaultProps = {\n ...LogistrationDefaultProps,\n headingTitle: '',\n};\n\nexport default injectIntl(InstitutionLogistration);\n","import { AsyncActionType } from '../../data/utils';\n\nexport const THIRD_PARTY_AUTH_CONTEXT = new AsyncActionType('THIRD_PARTY_AUTH', 'GET_THIRD_PARTY_AUTH_CONTEXT');\n\n// Third party auth context\nexport const getThirdPartyAuthContext = (urlParams) => ({\n type: THIRD_PARTY_AUTH_CONTEXT.BASE,\n payload: { urlParams },\n});\n\nexport const getThirdPartyAuthContextBegin = () => ({\n type: THIRD_PARTY_AUTH_CONTEXT.BEGIN,\n});\n\nexport const getThirdPartyAuthContextSuccess = (fieldDescriptions, optionalFields, thirdPartyAuthContext) => ({\n type: THIRD_PARTY_AUTH_CONTEXT.SUCCESS,\n payload: { fieldDescriptions, optionalFields, thirdPartyAuthContext },\n});\n\nexport const getThirdPartyAuthContextFailure = () => ({\n type: THIRD_PARTY_AUTH_CONTEXT.FAILURE,\n});\n","import { COMPLETE_STATE, PENDING_STATE } from '../../data/constants';\nimport { THIRD_PARTY_AUTH_CONTEXT } from './actions';\n\nexport const defaultState = {\n extendedProfile: [],\n fieldDescriptions: {},\n optionalFields: {},\n thirdPartyAuthApiStatus: null,\n};\n\nconst reducer = (state = defaultState, action) => {\n switch (action.type) {\n case THIRD_PARTY_AUTH_CONTEXT.BEGIN:\n return {\n ...state,\n thirdPartyAuthApiStatus: PENDING_STATE,\n };\n case THIRD_PARTY_AUTH_CONTEXT.SUCCESS:\n return {\n ...state,\n extendedProfile: action.payload.fieldDescriptions.extendedProfile,\n fieldDescriptions: action.payload.fieldDescriptions.fields,\n optionalFields: action.payload.optionalFields,\n thirdPartyAuthContext: action.payload.thirdPartyAuthContext,\n thirdPartyAuthApiStatus: COMPLETE_STATE,\n };\n case THIRD_PARTY_AUTH_CONTEXT.FAILURE:\n return {\n ...state,\n thirdPartyAuthApiStatus: COMPLETE_STATE,\n };\n default:\n return state;\n }\n};\n\nexport default reducer;\n","import { AsyncActionType } from '../../data/utils';\n\nexport const REGISTER_NEW_USER = new AsyncActionType('REGISTRATION', 'REGISTER_NEW_USER');\nexport const REGISTER_FORM_VALIDATIONS = new AsyncActionType('REGISTRATION', 'GET_FORM_VALIDATIONS');\nexport const REGISTRATION_FORM = new AsyncActionType('REGISTRATION', 'REGISTRATION_FORM');\nexport const REGISTER_CLEAR_USERNAME_SUGGESTIONS = 'REGISTRATION_CLEAR_USERNAME_SUGGESTIONS';\nexport const REGISTER_PERSIST_FORM_DATA = 'REGISTER_PERSIST_FORM_DATA';\nexport const REGISTER_SET_COUNTRY_CODE = 'REGISTER_SET_COUNTRY_CODE';\n\n// Reset Form\nexport const resetRegistrationForm = () => ({\n type: REGISTRATION_FORM.RESET,\n});\n\n// Register\nexport const registerNewUser = registrationInfo => ({\n type: REGISTER_NEW_USER.BASE,\n payload: { registrationInfo },\n});\n\nexport const registerNewUserBegin = () => ({\n type: REGISTER_NEW_USER.BEGIN,\n});\n\nexport const registerNewUserSuccess = (redirectUrl, success) => ({\n type: REGISTER_NEW_USER.SUCCESS,\n payload: { redirectUrl, success },\n\n});\n\nexport const registerNewUserFailure = (error) => ({\n type: REGISTER_NEW_USER.FAILURE,\n payload: { ...error },\n});\n\n// Realtime Field validations\nexport const fetchRealtimeValidations = (formPayload) => ({\n type: REGISTER_FORM_VALIDATIONS.BASE,\n payload: { formPayload },\n});\n\nexport const fetchRealtimeValidationsBegin = () => ({\n type: REGISTER_FORM_VALIDATIONS.BEGIN,\n});\n\nexport const fetchRealtimeValidationsSuccess = (validations) => ({\n type: REGISTER_FORM_VALIDATIONS.SUCCESS,\n payload: { validations },\n});\n\nexport const fetchRealtimeValidationsFailure = () => ({\n type: REGISTER_FORM_VALIDATIONS.FAILURE,\n});\n\nexport const clearUsernameSuggestions = () => ({\n type: REGISTER_CLEAR_USERNAME_SUGGESTIONS,\n});\n\nexport const setRegistrationFormData = (formData, clearRegistrationError = false) => ({\n type: REGISTER_PERSIST_FORM_DATA,\n payload: { formData, clearRegistrationError },\n});\n\nexport const setCountryFromThirdPartyAuthContext = (countryCode) => ({\n type: REGISTER_SET_COUNTRY_CODE,\n payload: { countryCode },\n});\n","import { camelCaseObject, convertKeyNames, getConfig } from '@edx/frontend-platform';\nimport { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth';\n\n// eslint-disable-next-line import/prefer-default-export\nexport async function getThirdPartyAuthContext(urlParams) {\n const requestConfig = {\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n params: urlParams,\n isPublic: true,\n };\n\n const { data } = await getAuthenticatedHttpClient()\n .get(\n `${getConfig().LMS_BASE_URL}/api/mfe_context`,\n requestConfig,\n )\n .catch((e) => {\n throw (e);\n });\n return {\n fieldDescriptions: data.registration_fields || {},\n optionalFields: data.optional_fields || {},\n // For backward compatibility with the API, once https://github.com/openedx/edx-platform/pull/30198 is merged\n // and deployed update it to use data.context_data\n thirdPartyAuthContext: camelCaseObject(\n convertKeyNames(data.context_data || data, { fullname: 'name' }),\n ),\n };\n}\n","import { logError } from '@edx/frontend-platform/logging';\nimport { call, put, takeEvery } from 'redux-saga/effects';\n\nimport { setCountryFromThirdPartyAuthContext } from '../../register/data/actions';\nimport {\n getThirdPartyAuthContextBegin,\n getThirdPartyAuthContextFailure,\n getThirdPartyAuthContextSuccess,\n THIRD_PARTY_AUTH_CONTEXT,\n} from './actions';\nimport {\n getThirdPartyAuthContext,\n} from './service';\n\nexport function* fetchThirdPartyAuthContext(action) {\n try {\n yield put(getThirdPartyAuthContextBegin());\n const { fieldDescriptions, optionalFields, thirdPartyAuthContext } = yield call(\n getThirdPartyAuthContext, action.payload.urlParams,\n );\n\n yield put(setCountryFromThirdPartyAuthContext(thirdPartyAuthContext.countryCode));\n yield put(getThirdPartyAuthContextSuccess(\n fieldDescriptions, optionalFields, thirdPartyAuthContext,\n ));\n } catch (e) {\n yield put(getThirdPartyAuthContextFailure());\n logError(e);\n }\n}\n\nexport default function* saga() {\n yield takeEvery(THIRD_PARTY_AUTH_CONTEXT.BASE, fetchThirdPartyAuthContext);\n}\n","import { createSelector } from 'reselect';\n\nexport const storeName = 'commonComponents';\n\nexport const commonComponentsSelector = state => ({ ...state[storeName] });\n\nexport const thirdPartyAuthContextSelector = createSelector(\n commonComponentsSelector,\n commonComponents => commonComponents.thirdPartyAuthContext,\n);\n\nexport const fieldDescriptionSelector = createSelector(\n commonComponentsSelector,\n commonComponents => commonComponents.fieldDescriptions,\n);\n\nexport const extendedProfileSelector = createSelector(\n commonComponentsSelector,\n commonComponents => commonComponents.extendedProfile,\n);\n\nexport const optionalFieldsSelector = createSelector(\n commonComponentsSelector,\n commonComponents => commonComponents.optionalFields,\n);\n","import React, { useState } from 'react';\n\nimport {\n Form, TransitionReplace,\n} from '@edx/paragon';\nimport PropTypes from 'prop-types';\n\nconst FormGroup = (props) => {\n const [hasFocus, setHasFocus] = useState(false);\n\n const handleFocus = (e) => {\n setHasFocus(true);\n if (props.handleFocus) { props.handleFocus(e); }\n };\n const handleClick = (e) => {\n if (props.handleClick) { props.handleClick(e); }\n };\n const handleOnBlur = (e) => {\n setHasFocus(false);\n if (props.handleBlur) { props.handleBlur(e); }\n };\n\n return (\n \n \n {props.options ? props.options() : null}\n \n \n {hasFocus && props.helpText ? (\n \n {props.helpText.map((message, index) => (\n \n {message}\n
\n
\n ))}\n
\n ) :
}\n \n {props.errorMessage !== '' && (\n {props.errorMessage}\n )}\n {props.children}\n \n );\n};\n\nFormGroup.defaultProps = {\n as: 'input',\n autoComplete: null,\n borderClass: '',\n children: null,\n className: '',\n errorMessage: '',\n handleBlur: null,\n handleChange: () => {},\n handleClick: null,\n handleFocus: null,\n helpText: [],\n options: null,\n readOnly: false,\n spellCheck: null,\n trailingElement: null,\n type: 'text',\n};\n\nFormGroup.propTypes = {\n as: PropTypes.string,\n autoComplete: PropTypes.string,\n borderClass: PropTypes.string,\n children: PropTypes.element,\n className: PropTypes.string,\n errorMessage: PropTypes.string,\n floatingLabel: PropTypes.string.isRequired,\n handleBlur: PropTypes.func,\n handleChange: PropTypes.func,\n handleClick: PropTypes.func,\n handleFocus: PropTypes.func,\n helpText: PropTypes.arrayOf(PropTypes.string),\n name: PropTypes.string.isRequired,\n options: PropTypes.func,\n readOnly: PropTypes.bool,\n spellCheck: PropTypes.string,\n trailingElement: PropTypes.element,\n type: PropTypes.string,\n value: PropTypes.string.isRequired,\n};\n\nexport default FormGroup;\n","import React, { useState } from 'react';\n\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport {\n Form, Icon, IconButton, OverlayTrigger, Tooltip, useToggle,\n} from '@edx/paragon';\nimport {\n Check, Remove, Visibility, VisibilityOff,\n} from '@edx/paragon/icons';\nimport PropTypes from 'prop-types';\n\nimport { LETTER_REGEX, NUMBER_REGEX } from '../data/constants';\nimport messages from './messages';\n\nconst PasswordField = (props) => {\n const { formatMessage } = props.intl;\n const [isPasswordHidden, setHiddenTrue, setHiddenFalse] = useToggle(true);\n const [showTooltip, setShowTooltip] = useState(false);\n\n const handleBlur = (e) => {\n if (props.handleBlur) { props.handleBlur(e); }\n setShowTooltip(props.showRequirements && false);\n };\n\n const handleFocus = (e) => {\n if (props.handleFocus) {\n props.handleFocus(e);\n }\n setTimeout(() => setShowTooltip(props.showRequirements && true), 150);\n };\n\n const HideButton = (\n \n );\n\n const ShowButton = (\n \n );\n const placement = window.innerWidth < 768 ? 'top' : 'left';\n const tooltip = (\n \n \n {LETTER_REGEX.test(props.value) ? : }\n {formatMessage(messages['one.letter'])}\n \n \n {NUMBER_REGEX.test(props.value) ? : }\n {formatMessage(messages['one.number'])}\n \n \n {props.value.length >= 8 ? : }\n {formatMessage(messages['eight.characters'])}\n \n \n );\n\n return (\n \n \n \n \n {props.errorMessage !== '' && (\n \n {props.errorMessage}\n {formatMessage(messages['password.sr.only.helping.text'])}\n \n )}\n \n );\n};\n\nPasswordField.defaultProps = {\n borderClass: '',\n errorMessage: '',\n handleBlur: null,\n handleFocus: null,\n handleChange: () => {},\n showRequirements: true,\n autoComplete: null,\n};\n\nPasswordField.propTypes = {\n borderClass: PropTypes.string,\n errorMessage: PropTypes.string,\n floatingLabel: PropTypes.string.isRequired,\n handleBlur: PropTypes.func,\n handleFocus: PropTypes.func,\n handleChange: PropTypes.func,\n intl: intlShape.isRequired,\n name: PropTypes.string.isRequired,\n showRequirements: PropTypes.bool,\n value: PropTypes.string.isRequired,\n autoComplete: PropTypes.string,\n};\n\nexport default injectIntl(PasswordField);\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n 'start.learning': {\n id: 'start.learning',\n defaultMessage: 'Start learning',\n description: 'Header text for logistration MFE pages',\n },\n 'with.site.name': {\n id: 'with.site.name',\n defaultMessage: 'with {siteName}',\n description: 'Header text with site name for logistration MFE pages',\n },\n // authenticated user base component text\n 'complete.your.profile.1': {\n id: 'complete.your.profile.1',\n defaultMessage: 'Complete',\n description: 'part of text \"complete your profile\"',\n },\n 'complete.your.profile.2': {\n id: 'complete.your.profile.2',\n defaultMessage: 'your profile',\n description: 'part of text \"complete your profile\"',\n },\n 'welcome.to.platform': {\n id: 'welcome.to.platform',\n defaultMessage: 'Welcome to {siteName}, {username}!',\n description: 'Welcome message that appears on progressive profile page',\n },\n});\n\nexport default messages;\n","import React from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Hyperlink, Image } from '@edx/paragon';\nimport PropTypes from 'prop-types';\n\nimport messages from './messages';\n\nconst AuthLargeLayout = ({ intl, username }) => (\n
\n
\n \n {getConfig().SITE_NAME}\n \n
\n
\n
\n

\n {intl.formatMessage(messages['welcome.to.platform'], { siteName: getConfig().SITE_NAME, username })}\n

\n

\n {intl.formatMessage(messages['complete.your.profile.1'])}\n
\n {intl.formatMessage(messages['complete.your.profile.2'])}\n
\n

\n
\n
\n
\n
\n \n \n \n \n \n
\n
\n);\n\nAuthLargeLayout.propTypes = {\n intl: intlShape.isRequired,\n username: PropTypes.string.isRequired,\n};\n\nexport default injectIntl(AuthLargeLayout);\n","import React from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Hyperlink, Image } from '@edx/paragon';\nimport PropTypes from 'prop-types';\n\nimport messages from './messages';\n\nconst AuthMediumLayout = ({ intl, username }) => (\n <>\n
\n
\n
\n \n {getConfig().SITE_NAME}\n \n
\n
\n
\n

\n {intl.formatMessage(messages['welcome.to.platform'], { siteName: getConfig().SITE_NAME, username })}\n

\n

\n {intl.formatMessage(messages['complete.your.profile.1'])}\n
\n {intl.formatMessage(messages['complete.your.profile.2'])}\n
\n

\n
\n
\n
\n
\n \n \n \n \n \n
\n
\n \n);\n\nAuthMediumLayout.propTypes = {\n intl: intlShape.isRequired,\n username: PropTypes.string.isRequired,\n};\n\nexport default injectIntl(AuthMediumLayout);\n","import React from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Hyperlink, Image } from '@edx/paragon';\nimport PropTypes from 'prop-types';\n\nimport messages from './messages';\n\nconst AuthSmallLayout = ({ intl, username }) => (\n
\n
\n \n {getConfig().SITE_NAME}\n \n
\n
\n
\n

\n {intl.formatMessage(messages['welcome.to.platform'], { siteName: getConfig().SITE_NAME, username })}\n

\n

\n {intl.formatMessage(messages['complete.your.profile.1'])}\n
\n {intl.formatMessage(messages['complete.your.profile.2'])}\n
\n

\n
\n
\n
\n);\n\nAuthSmallLayout.propTypes = {\n intl: intlShape.isRequired,\n username: PropTypes.string.isRequired,\n};\n\nexport default injectIntl(AuthSmallLayout);\n","import React from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Hyperlink, Image } from '@edx/paragon';\nimport classNames from 'classnames';\n\nimport messages from './messages';\n\nconst LargeLayout = ({ intl }) => (\n
\n
\n \n {getConfig().SITE_NAME}\n \n
\n
\n \n {intl.formatMessage(messages['start.learning'])}\n
\n {intl.formatMessage(messages['with.site.name'], { siteName: getConfig().SITE_NAME })}\n
\n \n
\n
\n
\n \n \n \n \n \n
\n
\n);\n\nLargeLayout.propTypes = {\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(LargeLayout);\n","import React from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Hyperlink, Image } from '@edx/paragon';\nimport classNames from 'classnames';\n\nimport messages from './messages';\n\nconst MediumLayout = ({ intl }) => (\n <>\n
\n
\n
\n \n {getConfig().SITE_NAME}\n \n
\n
\n
\n \n {intl.formatMessage(messages['start.learning'])}\n \n {intl.formatMessage(messages['with.site.name'], { siteName: getConfig().SITE_NAME })}\n \n \n
\n
\n
\n
\n \n \n \n \n \n
\n
\n \n);\n\nMediumLayout.propTypes = {\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(MediumLayout);\n","import React from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Hyperlink, Image } from '@edx/paragon';\nimport classNames from 'classnames';\n\nimport messages from './messages';\n\nconst SmallLayout = ({ intl }) => (\n \n
\n
\n \n {getConfig().SITE_NAME}\n \n
\n
\n \n {intl.formatMessage(messages['start.learning'])}\n \n {intl.formatMessage(messages['with.site.name'], { siteName: getConfig().SITE_NAME })}\n \n \n
\n
\n \n);\n\nSmallLayout.propTypes = {\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(SmallLayout);\n","import React from 'react';\n\nimport CookiePolicyBanner from '@edx/frontend-component-cookie-policy-banner';\nimport { getConfig } from '@edx/frontend-platform';\nimport { getAuthenticatedUser } from '@edx/frontend-platform/auth';\nimport { getLocale } from '@edx/frontend-platform/i18n';\nimport { breakpoints } from '@edx/paragon';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport MediaQuery from 'react-responsive';\n\nimport AuthLargeLayout from './AuthLargeLayout';\nimport AuthMediumLayout from './AuthMediumLayout';\nimport AuthSmallLayout from './AuthSmallLayout';\nimport LargeLayout from './LargeLayout';\nimport MediumLayout from './MediumLayout';\nimport SmallLayout from './SmallLayout';\n\nconst BaseComponent = ({ children, showWelcomeBanner }) => {\n const authenticatedUser = showWelcomeBanner ? getAuthenticatedUser() : null;\n const username = authenticatedUser ? authenticatedUser.username : null;\n\n return (\n <>\n {getConfig().ENABLE_COOKIE_POLICY_BANNER ? : null}\n
\n
\n \n {authenticatedUser ? : }\n \n \n {authenticatedUser ? : }\n \n \n {authenticatedUser ? : }\n \n\n
\n {children}\n
\n
\n \n );\n};\n\nBaseComponent.defaultProps = {\n showWelcomeBanner: false,\n};\n\nBaseComponent.propTypes = {\n children: PropTypes.node.isRequired,\n showWelcomeBanner: PropTypes.bool,\n};\n\nexport default BaseComponent;\n","import React from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport {\n Button, Form,\n} from '@edx/paragon';\nimport { faSignInAlt } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport PropTypes from 'prop-types';\n\nimport { LOGIN_PAGE, SUPPORTED_ICON_CLASSES } from '../data/constants';\nimport messages from './messages';\n\nconst EnterpriseSSO = (props) => {\n const { intl } = props;\n const tpaProvider = props.provider;\n const disablePublicAccountCreation = getConfig().ALLOW_PUBLIC_ACCOUNT_CREATION === false;\n\n const handleSubmit = (e, url) => {\n e.preventDefault();\n window.location.href = getConfig().LMS_BASE_URL + url;\n };\n\n const handleClick = (e) => {\n e.preventDefault();\n window.location.href = LOGIN_PAGE;\n };\n\n if (tpaProvider) {\n return (\n
\n
\n
\n
\n

{intl.formatMessage(messages['enterprisetpa.title.heading'], { providerName: tpaProvider.name })}

\n handleSubmit(e, tpaProvider.loginUrl)}\n >\n {tpaProvider.iconImage ? (\n
\n {`icon\n { tpaProvider.name }\n
\n )\n : (\n <>\n
\n \n
\n { tpaProvider.name }\n \n )}\n \n
\n handleClick(e)}\n >\n {disablePublicAccountCreation\n ? intl.formatMessage(messages['enterprisetpa.login.button.text.public.account.creation.disabled'])\n : intl.formatMessage(messages['enterprisetpa.login.button.text'])}\n \n \n
\n
\n
\n );\n }\n return
;\n};\n\nEnterpriseSSO.defaultProps = {\n provider: {\n id: '',\n name: '',\n iconClass: '',\n iconImage: '',\n loginUrl: '',\n registerUrl: '',\n },\n};\n\nEnterpriseSSO.propTypes = {\n provider: PropTypes.shape({\n id: PropTypes.string,\n name: PropTypes.string,\n iconClass: PropTypes.string,\n iconImage: PropTypes.string,\n loginUrl: PropTypes.string,\n registerUrl: PropTypes.string,\n }),\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(EnterpriseSSO);\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n 'sign.in': {\n id: 'sign.in',\n defaultMessage: 'Sign in',\n description: 'Sign in toggle text',\n },\n 'reset.password.page.title': {\n id: 'reset.password.page.title',\n defaultMessage: 'Reset Password | {siteName}',\n description: 'page title',\n },\n 'reset.password': {\n id: 'reset.password',\n defaultMessage: 'Reset password',\n description: 'The page heading and button text for reset password page.',\n },\n 'reset.password.page.instructions': {\n id: 'reset.password.page.instructions',\n defaultMessage: 'Enter and confirm your new password.',\n description: 'Instructions message for reset password page.',\n },\n 'new.password.label': {\n id: 'new.password.label',\n defaultMessage: 'New password',\n description: 'New password field label for the reset password page.',\n },\n 'confirm.password.label': {\n id: 'confirm.password.label',\n defaultMessage: 'Confirm password',\n description: 'Confirm password field label for the reset password page.',\n },\n // validation errors\n 'password.validation.message': {\n id: 'password.validation.message',\n defaultMessage: 'Password criteria has not been met',\n description: 'Error message for empty or invalid password',\n },\n 'passwords.do.not.match': {\n id: 'passwords.do.not.match',\n defaultMessage: 'Passwords do not match',\n description: 'Password format error.',\n },\n 'confirm.your.password': {\n id: 'confirm.your.password',\n defaultMessage: 'Confirm your password',\n description: 'Field validation message when confirm password is empty',\n },\n 'forgot.password.confirmation.sign.in.link': {\n id: 'forgot.password.confirmation.sign.in.link',\n defaultMessage: 'sign in',\n description: 'link text used in message to refer to sign in page',\n },\n 'reset.password.request.forgot.password.text': {\n id: 'reset.password.request.forgot.password.text',\n defaultMessage: 'Forgot password',\n description: 'Forgot password text',\n },\n 'reset.password.request.invalid.token.header': {\n id: 'reset.password.request.invalid.token.header',\n defaultMessage: 'Invalid password reset link',\n description: 'Invalid password reset link help text heading',\n },\n 'reset.password.empty.new.password.field.error': {\n id: 'reset.password.empty.new.password.field.error',\n defaultMessage: 'Please enter your new password.',\n description: 'Error message that appears when user tries to submit form with empty New Password field',\n },\n // alert banner strings\n 'reset.password.failure.heading': {\n id: 'reset.password.failure.heading',\n defaultMessage: 'We couldn\\'t reset your password.',\n description: 'Heading for reset password request failure',\n },\n 'reset.password.form.submission.error': {\n id: 'reset.password.form.submission.error',\n defaultMessage: 'Please check your responses and try again.',\n description: 'Error message for reset password page',\n },\n 'reset.password.request.server.error': {\n id: 'reset.password.request.server.error',\n defaultMessage: 'Failed to reset password',\n description: 'Failed to reset password error message heading.',\n },\n 'reset.password.token.validation.sever.error': {\n id: 'reset.password.token.validation.sever.error',\n defaultMessage: 'Token validation failure',\n description: 'Failed to validate reset password token error message.',\n },\n 'reset.server.rate.limit.error': {\n id: 'reset.server.rate.limit.error',\n defaultMessage: 'Too many requests.',\n description: 'Too many request at server end point',\n },\n 'reset.password.success.heading': {\n id: 'reset.password.success.heading',\n defaultMessage: 'Password reset complete.',\n description: 'Heading for alert box when reset password is successful',\n },\n 'reset.password.success': {\n id: 'reset.password.success',\n defaultMessage: 'Your password has been reset. Sign in to your account.',\n description: 'Reset password success message',\n },\n 'internal.server.error': {\n id: 'internal.server.error',\n defaultMessage: 'An error has occurred. Try refreshing the page, or check your internet connection.',\n description: 'Error message that appears when server responds with 500 error code',\n },\n 'rate.limit.error': {\n id: 'rate.limit.error',\n defaultMessage: 'An error has occurred because of too many requests. Please try again after some time.',\n description: 'Error message that appears when server responds with 429 error code',\n },\n});\n\nexport default messages;\n","import React from 'react';\n\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Alert } from '@edx/paragon';\n\nimport messages from './messages';\n\nconst ResetPasswordSuccess = (props) => {\n const { intl } = props;\n\n return (\n \n \n {intl.formatMessage(messages['reset.password.success.heading'])}\n \n

{intl.formatMessage(messages['reset.password.success'])}

\n
\n );\n};\n\nResetPasswordSuccess.propTypes = {\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(ResetPasswordSuccess);\n","// Login Error Codes\nexport const INACTIVE_USER = 'inactive-user';\nexport const INTERNAL_SERVER_ERROR = 'internal-server-error';\nexport const INVALID_FORM = 'invalid-form';\nexport const NON_COMPLIANT_PASSWORD_EXCEPTION = 'NonCompliantPasswordException';\nexport const FORBIDDEN_REQUEST = 'forbidden-request';\nexport const FAILED_LOGIN_ATTEMPT = 'failed-login-attempt';\nexport const ACCOUNT_LOCKED_OUT = 'account-locked-out';\nexport const INCORRECT_EMAIL_PASSWORD = 'incorrect-email-or-password';\nexport const NUDGE_PASSWORD_CHANGE = 'nudge-password-change';\nexport const REQUIRE_PASSWORD_CHANGE = 'require-password-change';\nexport const ALLOWED_DOMAIN_LOGIN_ERROR = 'allowed-domain-login-error';\n\n// Account Activation Message\nexport const ACCOUNT_ACTIVATION_MESSAGE = {\n INFO: 'info',\n SUCCESS: 'success',\n ERROR: 'error',\n};\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n 'login.page.title': {\n id: 'login.page.title',\n defaultMessage: 'Login | {siteName}',\n description: 'login page title',\n },\n // Login labels\n 'login.user.identity.label': {\n id: 'login.user.identity.label',\n defaultMessage: 'Username or email',\n description: 'Label for user identity field to enter either username or email to login',\n },\n 'login.password.label': {\n id: 'login.password.label',\n defaultMessage: 'Password',\n description: 'Label for password field',\n },\n 'sign.in.button': {\n id: 'sign.in.button',\n defaultMessage: 'Sign in',\n description: 'Sign in button label that appears on login page',\n },\n 'sign.in.btn.pending.state': {\n id: 'sign.in.btn.pending.state',\n defaultMessage: 'Loading',\n description: 'Title of icon that appears when button is in pending state',\n },\n 'need.help.signing.in.collapsible.menu': {\n id: 'need.help.signing.in.collapsible.menu',\n defaultMessage: 'Need help signing in?',\n description: 'A button for collapsible need help signing in menu on login page',\n },\n 'forgot.password.link': {\n id: 'forgot.password.link',\n defaultMessage: 'Forgot my password',\n description: 'Forgot password link',\n },\n 'forgot.password': {\n id: 'forgot.password',\n defaultMessage: 'Forgot password',\n description: 'Button text for forgot password',\n },\n 'other.sign.in.issues': {\n id: 'other.sign.in.issues',\n defaultMessage: 'Other sign in issues',\n description: 'A link that redirects to sign-in issues help',\n },\n 'need.other.help.signing.in.collapsible.menu': {\n id: 'need.other.help.signing.in.collapsible.menu',\n defaultMessage: 'Need other help signing in?',\n description: 'A button for collapsible need other help signing in menu on forgot password page',\n },\n 'institution.login.button': {\n id: 'institution.login.button',\n defaultMessage: 'Institution/campus credentials',\n description: 'shows institutions list',\n },\n 'institution.login.page.title': {\n id: 'institution.login.page.title',\n defaultMessage: 'Sign in with institution/campus credentials',\n description: 'Heading of institution page',\n },\n 'institution.login.page.sub.heading': {\n id: 'institution.login.page.sub.heading',\n defaultMessage: 'Choose your institution from the list below',\n description: 'Heading of the institutions list',\n },\n 'institution.login.page.back.button': {\n id: 'institution.login.page.back.button',\n defaultMessage: 'Back to sign in',\n description: 'return to login page',\n },\n 'create.an.account': {\n id: 'create.an.account',\n defaultMessage: 'Create an account',\n description: 'Message on button to return to register page',\n },\n 'login.other.options.heading': {\n id: 'login.other.options.heading',\n defaultMessage: 'Or sign in with:',\n description: 'Text that appears above other sign in options like social auth buttons',\n },\n 'non.compliant.password.title': {\n id: 'non.compliant.password.title',\n defaultMessage: 'We recently changed our password requirements',\n description: 'A title that appears in bold before error message for non-compliant password',\n },\n 'non.compliant.password.message': {\n id: 'non.compliant.password.message',\n defaultMessage: 'Your current password does not meet the new security requirements. '\n + 'We just sent a password-reset message to the email address associated with this account. '\n + 'Thank you for helping us keep your data safe.',\n description: 'Error message for non-compliant password',\n },\n 'account.locked.out.message.1': {\n id: 'account.locked.out.message.1',\n defaultMessage: 'To protect your account, it\\'s been temporarily locked. Try again in 30 minutes.',\n description: 'Part of message for when user account has been locked out after multiple failed login attempts',\n },\n 'first.time.here': {\n id: 'first.time.here',\n defaultMessage: 'First time here?',\n description: 'A question that appears before sign up link',\n },\n 'email.help.message': {\n id: 'email.help.message',\n defaultMessage: 'The email address you used to register with edX.',\n description: 'Message that appears below email field on login page',\n },\n 'enterprise.login.btn.text': {\n id: 'enterprise.login.btn.text',\n defaultMessage: 'Company or school credentials',\n description: 'Company or school login link text.',\n },\n 'email.format.validation.message': {\n id: 'email.format.validation.message',\n defaultMessage: 'The email address you\\'ve provided isn\\'t formatted correctly.',\n description: 'Validation message that appears when email address format is incorrect',\n },\n 'username.or.email.format.validation.less.chars.message': {\n id: 'username.or.email.format.validation.less.chars.message',\n defaultMessage: 'Username or email must have at least 3 characters.',\n description: 'Validation message that appears when username or email address is less than 3 characters',\n },\n 'email.validation.message': {\n id: 'email.validation.message',\n defaultMessage: 'Enter your username or email',\n description: 'Validation message that appears when email is empty',\n },\n 'password.validation.message': {\n id: 'password.validation.message',\n defaultMessage: 'Enter your password',\n description: 'Validation message that appears when password is empty',\n },\n 'register.link': {\n id: 'register.link',\n defaultMessage: 'Create an account',\n description: 'Register page link',\n },\n 'sign.in.heading': {\n id: 'sign.in.heading',\n defaultMessage: 'Sign in',\n description: 'Sign in text',\n },\n // Account Activation Strings\n 'account.activation.success.message.title': {\n id: 'account.activation.success.message.title',\n defaultMessage: 'Success! You have activated your account.',\n description: 'Account Activation success message title',\n },\n 'account.activation.success.message': {\n id: 'account.activation.success.message',\n defaultMessage: 'You will now receive email updates and alerts from us related to the courses you are enrolled in. Sign in to continue.',\n description: 'Message show to learners when their account has been activated successfully',\n },\n 'account.activation.info.message': {\n id: 'account.activation.info.message',\n defaultMessage: 'This account has already been activated.',\n description: 'Message shown when learner account has already been activated',\n },\n 'account.activation.error.message.title': {\n id: 'account.activation.error.message.title',\n defaultMessage: 'Your account could not be activated',\n description: 'Account Activation error message title',\n },\n 'account.activation.support.link': {\n id: 'account.activation.support.link',\n defaultMessage: 'contact support',\n description: 'Link text used in account activation error message to go to learner help center',\n },\n 'tpa.account.link': {\n id: 'tpa.account.link',\n defaultMessage: '{provider} account',\n description: 'Link text error message used to go to SSO when staff user try to login through password.',\n },\n // Email Confirmation Strings\n 'account.confirmation.success.message.title': {\n id: 'account.confirmation.success.message.title',\n defaultMessage: 'Success! You have confirmed your email.',\n description: 'Account verification success message title',\n },\n 'account.confirmation.success.message': {\n id: 'account.confirmation.success.message',\n defaultMessage: 'Sign in to continue.',\n description: 'Message show to learners when their account has been activated successfully',\n },\n 'account.confirmation.info.message': {\n id: 'account.confirmation.info.message',\n defaultMessage: 'This email has already been confirmed.',\n description: 'Message shown when learner account has already been verified',\n },\n 'account.confirmation.error.message.title': {\n id: 'account.confirmation.error.message.title',\n defaultMessage: 'Your email could not be confirmed',\n description: 'Account verification error message title',\n },\n 'internal.server.error.message': {\n id: 'internal.server.error.message',\n defaultMessage: 'An error has occurred. Try refreshing the page, or check your internet connection.',\n description: 'Error message that appears when server responds with 500 error code',\n },\n 'login.rate.limit.reached.message': {\n id: 'login.rate.limit.reached.message',\n defaultMessage: 'Too many failed login attempts. Try again later.',\n description: 'Error message that appears when an anonymous user has made too many failed login attempts',\n },\n 'login.failure.header.title': {\n id: 'login.failure.header.title',\n defaultMessage: 'We couldn\\'t sign you in.',\n description: 'Login failure header message.',\n },\n 'contact.support.link': {\n id: 'contact.support.link',\n defaultMessage: 'contact {platformName} support',\n description: 'Link text used in inactive user error message to go to learner help center',\n },\n 'login.incorrect.credentials.error': {\n id: 'login.incorrect.credentials.error',\n defaultMessage: 'The username, email, or password you entered is incorrect. Please try again.',\n description: 'Error message for incorrect email or password',\n },\n 'login.failed.attempt.error': {\n id: 'login.failed.attempt.error',\n defaultMessage: 'You have {remainingAttempts} more sign in attempts before your account is temporarily locked.',\n description: 'Failed login attempts error message',\n },\n 'login.locked.out.error.message': {\n id: 'login.locked.out.error.message',\n defaultMessage: 'To protect your account, it’s been temporarily locked. Try again in {lockedOutPeriod} minutes.',\n description: 'Account locked out user message',\n },\n 'login.form.invalid.error.message': {\n id: 'login.form.invalid.error.message',\n defaultMessage: 'Please fill in the fields below.',\n description: 'Login form empty input user message',\n },\n 'login.incorrect.credentials.error.reset.link.text': {\n id: 'login.incorrect.credentials.error.reset.link.text',\n defaultMessage: 'reset your password',\n description: 'Reset password link text for incorrect email or password credentials',\n },\n 'login.incorrect.credentials.error.before.account.blocked.text': {\n id: 'login.incorrect.credentials.error.before.account.blocked.text',\n defaultMessage: 'click here to reset it.',\n description: 'Reset password link text for incorrect email or password credentials before blocking account',\n },\n // Vulnerable password change prompt\n 'password.security.nudge.title': {\n id: 'password.security.nudge.title',\n defaultMessage: 'Password security',\n description: 'Title for prompt that nudges user to change their vulnerable password',\n },\n 'password.security.block.title': {\n id: 'password.security.block.title',\n defaultMessage: 'Password change required',\n description: 'Title for prompt that asks user to change their vulnerable password',\n },\n 'password.security.nudge.body': {\n id: 'password.security.nudge.body',\n defaultMessage: 'Our system detected that your password is vulnerable. '\n + 'We recommend you change it so that your account stays secure.',\n description: 'Message copy for prompt that nudges user to change their vulnerable password',\n },\n 'password.security.block.body': {\n id: 'password.security.block.body',\n defaultMessage: 'Our system detected that your password is vulnerable. '\n + 'Change your password so that your account stays secure.',\n description: 'Message copy for prompt that asks user to change their vulnerable password',\n },\n 'password.security.close.button': {\n id: 'password.security.close.button',\n defaultMessage: 'Close',\n description: 'Button to close popup',\n },\n 'password.security.redirect.to.reset.password.button': {\n id: 'password.security.redirect.to.reset.password.button',\n defaultMessage: 'Reset your password',\n description: 'Button to redirect users to Reset Password page',\n },\n});\n\nexport default messages;\n","import React from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { FormattedMessage, injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Alert } from '@edx/paragon';\nimport { CheckCircle, Error } from '@edx/paragon/icons';\nimport PropTypes from 'prop-types';\n\nimport { ACCOUNT_ACTIVATION_MESSAGE } from './data/constants';\nimport messages from './messages';\n\nconst AccountActivationMessage = (props) => {\n const { intl, messageType } = props;\n const variant = messageType === ACCOUNT_ACTIVATION_MESSAGE.ERROR ? 'danger' : messageType;\n\n const activationOrVerification = getConfig().MARKETING_EMAILS_OPT_IN ? 'confirmation' : 'activation';\n\n let activationMessage;\n let heading;\n\n const iconMapping = {\n [ACCOUNT_ACTIVATION_MESSAGE.SUCCESS]: CheckCircle,\n [ACCOUNT_ACTIVATION_MESSAGE.ERROR]: Error,\n };\n\n switch (messageType) {\n case ACCOUNT_ACTIVATION_MESSAGE.SUCCESS: {\n heading = intl.formatMessage(messages[`account.${activationOrVerification}.success.message.title`]);\n activationMessage = {intl.formatMessage(messages[`account.${activationOrVerification}.success.message`])};\n break;\n }\n case ACCOUNT_ACTIVATION_MESSAGE.INFO: {\n activationMessage = intl.formatMessage(messages[`account.${activationOrVerification}.info.message`]);\n break;\n }\n case ACCOUNT_ACTIVATION_MESSAGE.ERROR: {\n const supportLink = (\n \n {intl.formatMessage(messages['account.activation.support.link'])}\n \n );\n\n heading = intl.formatMessage(messages[`account.${activationOrVerification}.error.message.title`]);\n activationMessage = (\n \n );\n break;\n }\n default:\n break;\n }\n\n return activationMessage ? (\n \n {heading && {heading}}\n {activationMessage}\n \n ) : null;\n};\n\nAccountActivationMessage.propTypes = {\n messageType: PropTypes.string.isRequired,\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(AccountActivationMessage);\n","import { AsyncActionType } from '../../data/utils';\n\nexport const LOGIN_REQUEST = new AsyncActionType('LOGIN', 'REQUEST');\nexport const LOGIN_PERSIST_FORM_DATA = 'LOGIN_PERSIST_FORM_DATA';\nexport const LOGIN_REMOVE_PASSWORD_RESET_BANNER = 'LOGIN_REMOVE_PASSWORD_RESET_BANNER';\n\n// Login\nexport const loginRequest = creds => ({\n type: LOGIN_REQUEST.BASE,\n payload: { creds },\n});\n\nexport const loginRequestBegin = () => ({\n type: LOGIN_REQUEST.BEGIN,\n});\n\nexport const loginRequestSuccess = (redirectUrl, success) => ({\n type: LOGIN_REQUEST.SUCCESS,\n payload: { redirectUrl, success },\n});\n\nexport const loginRequestFailure = (loginError) => ({\n type: LOGIN_REQUEST.FAILURE,\n payload: { loginError },\n});\n\nexport const loginRequestReset = () => ({\n type: LOGIN_REQUEST.RESET,\n});\n\nexport const setLoginFormData = (formData) => ({\n type: LOGIN_PERSIST_FORM_DATA,\n payload: { formData },\n});\n\nexport const loginRemovePasswordResetBanner = () => ({\n type: LOGIN_REMOVE_PASSWORD_RESET_BANNER,\n});\n","import { createSelector } from 'reselect';\n\nexport const storeName = 'login';\n\nexport const loginSelector = state => ({ ...state[storeName] });\n\nexport const loginRequestSelector = createSelector(\n loginSelector,\n login => login.loginResult,\n);\n\nexport const loginErrorSelector = createSelector(\n loginSelector,\n login => login.loginError,\n);\n\nexport const loginFormDataSelector = createSelector(\n loginSelector,\n login => login.loginFormData,\n);\n","import { useEffect, useState } from 'react';\n\nimport { breakpoints } from '@edx/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","import React, { useState } from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport {\n ActionRow, ModalDialog, useToggle,\n} from '@edx/paragon';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { Link, Redirect } from 'react-router-dom';\n\nimport { DEFAULT_REDIRECT_URL, RESET_PAGE } from '../data/constants';\nimport { updatePathWithQueryParams } from '../data/utils';\nimport useMobileResponsive from '../data/utils/useMobileResponsive';\nimport messages from './messages';\n\nconst ChangePasswordPrompt = ({ intl, variant, redirectUrl }) => {\n const isMobileView = useMobileResponsive();\n const [redirectToResetPasswordPage, setRedirectToResetPasswordPage] = useState(false);\n const handlers = {\n handleToggleOff: () => {\n if (variant === 'block') {\n setRedirectToResetPasswordPage(true);\n } else {\n window.location.href = redirectUrl || getConfig().LMS_BASE_URL.concat(DEFAULT_REDIRECT_URL);\n }\n },\n };\n // eslint-disable-next-line no-unused-vars\n const [isOpen, open, close] = useToggle(true, handlers);\n\n if (redirectToResetPasswordPage) {\n return ;\n }\n return (\n \n \n \n {intl.formatMessage(messages[`password.security.${variant}.title`])}\n \n \n \n {intl.formatMessage(messages[`password.security.${variant}.body`])}\n \n \n \n {variant === 'nudge' ? (\n \n {intl.formatMessage(messages['password.security.close.button'])}\n \n ) : null}\n \n {intl.formatMessage(messages['password.security.redirect.to.reset.password.button'])}\n \n \n \n \n );\n};\n\nChangePasswordPrompt.defaultProps = {\n variant: 'block',\n redirectUrl: null,\n};\n\nChangePasswordPrompt.propTypes = {\n intl: intlShape.isRequired,\n variant: PropTypes.oneOf(['nudge', 'block']),\n redirectUrl: PropTypes.string,\n};\n\nexport default injectIntl(ChangePasswordPrompt);\n","import React from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { getAuthService } from '@edx/frontend-platform/auth';\nimport { FormattedMessage, injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Alert, Hyperlink } from '@edx/paragon';\nimport { Error } from '@edx/paragon/icons';\nimport PropTypes from 'prop-types';\n\nimport ChangePasswordPrompt from './ChangePasswordPrompt';\nimport {\n ACCOUNT_LOCKED_OUT,\n ALLOWED_DOMAIN_LOGIN_ERROR,\n FAILED_LOGIN_ATTEMPT,\n FORBIDDEN_REQUEST,\n INACTIVE_USER,\n INCORRECT_EMAIL_PASSWORD,\n INTERNAL_SERVER_ERROR,\n INVALID_FORM,\n NON_COMPLIANT_PASSWORD_EXCEPTION,\n NUDGE_PASSWORD_CHANGE,\n REQUIRE_PASSWORD_CHANGE,\n} from './data/constants';\nimport messages from './messages';\n\nconst LoginFailureMessage = (props) => {\n const { intl } = props;\n const { context, errorCode } = props.loginError;\n const authService = getAuthService();\n let errorList;\n let resetLink = (\n \n {intl.formatMessage(messages['login.incorrect.credentials.error.reset.link.text'])}\n \n );\n\n switch (errorCode) {\n case NON_COMPLIANT_PASSWORD_EXCEPTION: {\n errorList = (\n <>\n {intl.formatMessage(messages['non.compliant.password.title'])}\n

{intl.formatMessage(messages['non.compliant.password.message'])}

\n \n );\n break;\n }\n case FORBIDDEN_REQUEST:\n errorList =

{intl.formatMessage(messages['login.rate.limit.reached.message'])}

;\n break;\n case INACTIVE_USER: {\n const supportLink = (\n \n {intl.formatMessage(messages['contact.support.link'], { platformName: context.platformName })}\n \n );\n errorList = (\n

\n ,\n email: {props.loginError.email},\n supportLink,\n }}\n />\n

\n );\n break;\n }\n case ALLOWED_DOMAIN_LOGIN_ERROR: {\n const url = `${getConfig().LMS_BASE_URL}/dashboard/?tpa_hint=${context.tpaHint}`;\n const tpaLink = (\n \n {intl.formatMessage(messages['tpa.account.link'], { provider: context.provider })}\n \n );\n errorList = (\n

\n \n

\n );\n break;\n }\n case INVALID_FORM:\n errorList =

{intl.formatMessage(messages['login.form.invalid.error.message'])}

;\n break;\n case FAILED_LOGIN_ATTEMPT: {\n resetLink = (\n \n {intl.formatMessage(messages['login.incorrect.credentials.error.before.account.blocked.text'])}\n \n );\n errorList = (\n <>\n

\n \n

\n

\n \n

\n \n );\n break;\n }\n case ACCOUNT_LOCKED_OUT: {\n errorList = (\n <>\n

{intl.formatMessage(messages['account.locked.out.message.1'])}

\n

\n \n

\n \n );\n break;\n }\n case INCORRECT_EMAIL_PASSWORD:\n if (context.failureCount <= 1) {\n errorList =

{intl.formatMessage(messages['login.incorrect.credentials.error'])}

;\n } else if (context.failureCount === 2) {\n errorList = (\n

\n \n

\n );\n }\n break;\n case NUDGE_PASSWORD_CHANGE:\n // Need to clear the CSRF token here to fetch a new one because token is already rotated after successful login.\n if (authService) {\n authService.getCsrfTokenService().clearCsrfTokenCache();\n }\n return (\n \n );\n case REQUIRE_PASSWORD_CHANGE:\n return ;\n case INTERNAL_SERVER_ERROR:\n default:\n errorList =

{intl.formatMessage(messages['internal.server.error.message'])}

;\n break;\n }\n\n return (\n \n {intl.formatMessage(messages['login.failure.header.title'])}\n { errorList }\n \n );\n};\n\nLoginFailureMessage.defaultProps = {\n loginError: {\n redirectUrl: null,\n errorCode: null,\n },\n};\n\nLoginFailureMessage.propTypes = {\n loginError: PropTypes.shape({\n context: PropTypes.object,\n email: PropTypes.string,\n errorCode: PropTypes.string,\n redirectUrl: PropTypes.string,\n }),\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(LoginFailureMessage);\n","import React from 'react';\nimport { connect } from 'react-redux';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { sendPageEvent, sendTrackEvent } from '@edx/frontend-platform/analytics';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport {\n Form, Hyperlink, Icon, StatefulButton,\n} from '@edx/paragon';\nimport { Institution } from '@edx/paragon/icons';\nimport PropTypes from 'prop-types';\nimport { Helmet } from 'react-helmet';\nimport Skeleton from 'react-loading-skeleton';\nimport { Link } from 'react-router-dom';\n\nimport {\n FormGroup, InstitutionLogistration, PasswordField, RedirectLogistration,\n RenderInstitutionButton, SocialAuthProviders, ThirdPartyAuthAlert,\n} from '../common-components';\nimport { getThirdPartyAuthContext } from '../common-components/data/actions';\nimport { thirdPartyAuthContextSelector } from '../common-components/data/selectors';\nimport EnterpriseSSO from '../common-components/EnterpriseSSO';\nimport {\n DEFAULT_STATE, ENTERPRISE_LOGIN_URL, PENDING_STATE, RESET_PAGE,\n} from '../data/constants';\nimport {\n getActivationStatus,\n getAllPossibleQueryParam,\n getTpaHint,\n getTpaProvider,\n setSurveyCookie,\n updatePathWithQueryParams,\n windowScrollTo,\n} from '../data/utils';\nimport ResetPasswordSuccess from '../reset-password/ResetPasswordSuccess';\nimport AccountActivationMessage from './AccountActivationMessage';\nimport {\n loginRemovePasswordResetBanner, loginRequest, loginRequestFailure, loginRequestReset, setLoginFormData,\n} from './data/actions';\nimport { INVALID_FORM } from './data/constants';\nimport { loginErrorSelector, loginFormDataSelector, loginRequestSelector } from './data/selectors';\nimport LoginFailureMessage from './LoginFailure';\nimport messages from './messages';\n\nclass LoginPage extends React.Component {\n constructor(props, context) {\n super(props, context);\n this.state = {\n password: this.props.loginFormData.password,\n emailOrUsername: this.props.loginFormData.emailOrUsername,\n errors: {\n emailOrUsername: this.props.loginFormData.errors.emailOrUsername,\n password: this.props.loginFormData.errors.password,\n },\n isSubmitted: false,\n };\n this.queryParams = getAllPossibleQueryParam();\n this.tpaHint = getTpaHint();\n }\n\n componentDidMount() {\n sendPageEvent('login_and_registration', 'login');\n const payload = { ...this.queryParams };\n\n if (this.tpaHint) {\n payload.tpa_hint = this.tpaHint;\n }\n this.props.getThirdPartyAuthContext(payload);\n this.props.loginRequestReset();\n }\n\n shouldComponentUpdate(nextProps) {\n if (nextProps.loginFormData && this.props.loginFormData !== nextProps.loginFormData) {\n // Ensuring browser's autofill user credentials get filled and their state persists in the redux store.\n const nextState = {\n emailOrUsername: nextProps.loginFormData.emailOrUsername || this.state.emailOrUsername,\n password: nextProps.loginFormData.password || this.state.password,\n };\n this.setState({\n ...nextProps.loginFormData,\n ...nextState,\n });\n return false;\n }\n return true;\n }\n\n componentWillUnmount() {\n if (this.props.resetPassword) {\n this.props.loginRemovePasswordResetBanner();\n }\n }\n\n getEnterPriseLoginURL() {\n return getConfig().LMS_BASE_URL + ENTERPRISE_LOGIN_URL;\n }\n\n handleSubmit = (e) => {\n e.preventDefault();\n if (this.props.resetPassword) {\n this.props.loginRemovePasswordResetBanner();\n }\n this.setState({ isSubmitted: true });\n const { emailOrUsername, password } = this.state;\n const emailValidationError = this.validateEmail(emailOrUsername);\n const passwordValidationError = this.validatePassword(password);\n\n if (emailValidationError !== '' || passwordValidationError !== '') {\n this.props.setLoginFormData({\n errors: {\n emailOrUsername: emailValidationError,\n password: passwordValidationError,\n },\n });\n this.props.loginRequestFailure({\n errorCode: INVALID_FORM,\n });\n return;\n }\n\n const payload = {\n email_or_username: emailOrUsername, password, ...this.queryParams,\n };\n this.props.loginRequest(payload);\n }\n\n handleOnFocus = (e) => {\n const { errors } = this.state;\n errors[e.target.name] = '';\n this.props.setLoginFormData({\n errors,\n });\n }\n\n handleOnBlur = (e) => {\n const payload = {\n [e.target.name]: e.target.value,\n };\n this.props.setLoginFormData(payload);\n }\n\n handleForgotPasswordLinkClickEvent = () => {\n sendTrackEvent('edx.bi.password-reset_form.toggled', { category: 'user-engagement' });\n };\n\n validateEmail(email) {\n const { errors } = this.state;\n\n if (email === '') {\n errors.emailOrUsername = this.props.intl.formatMessage(messages['email.validation.message']);\n } else if (email.length < 3) {\n errors.emailOrUsername = this.props.intl.formatMessage(messages['username.or.email.format.validation.less.chars.message']);\n } else {\n errors.emailOrUsername = '';\n }\n return errors.emailOrUsername;\n }\n\n validatePassword(password) {\n const { errors } = this.state;\n errors.password = password.length > 0 ? '' : this.props.intl.formatMessage(messages['password.validation.message']);\n\n return errors.password;\n }\n\n renderThirdPartyAuth(providers, secondaryProviders, currentProvider, thirdPartyAuthApiStatus, intl) {\n const isInstitutionAuthActive = !!secondaryProviders.length && !currentProvider;\n const isSocialAuthActive = !!providers.length && !currentProvider;\n const isEnterpriseLoginDisabled = getConfig().DISABLE_ENTERPRISE_LOGIN;\n\n return (\n <>\n {(isSocialAuthActive || (isEnterpriseLoginDisabled && isInstitutionAuthActive))\n && (\n
\n {intl.formatMessage(messages['login.other.options.heading'])}\n
\n )}\n\n {(!isEnterpriseLoginDisabled && isSocialAuthActive) && (\n \n \n {intl.formatMessage(messages['enterprise.login.btn.text'])}\n \n )}\n\n {thirdPartyAuthApiStatus === PENDING_STATE ? (\n \n ) : (\n <>\n {(isEnterpriseLoginDisabled && isInstitutionAuthActive) && (\n \n )}\n {isSocialAuthActive && (\n
\n \n
\n )}\n \n )}\n \n );\n }\n\n renderForm(\n currentProvider,\n providers,\n secondaryProviders,\n thirdPartyAuthContext,\n thirdPartyAuthApiStatus,\n submitState,\n intl,\n ) {\n const activationMsgType = getActivationStatus();\n if (this.props.institutionLogin) {\n return (\n \n );\n }\n\n if (this.props.loginResult.success) {\n setSurveyCookie('login');\n\n // Fire optimizely events\n window.optimizely = window.optimizely || [];\n window.optimizely.push({\n type: 'event',\n eventName: 'authn-login-coversion',\n });\n }\n\n return (\n <>\n \n {intl.formatMessage(messages['login.page.title'],\n { siteName: getConfig().SITE_NAME })}\n \n \n \n
\n {thirdPartyAuthContext.currentProvider\n && (\n \n )}\n {this.props.loginError ? : null}\n {submitState === DEFAULT_STATE && this.state.isSubmitted ? windowScrollTo({ left: 0, top: 0, behavior: 'smooth' }) : null}\n {activationMsgType && }\n {this.props.resetPassword && !this.props.loginError ? : null}\n
\n this.setState({ emailOrUsername: e.target.value, isSubmitted: false })}\n handleFocus={this.handleOnFocus}\n handleBlur={this.handleOnBlur}\n errorMessage={this.state.errors.emailOrUsername}\n floatingLabel={intl.formatMessage(messages['login.user.identity.label'])}\n />\n this.setState({ password: e.target.value, isSubmitted: false })}\n handleFocus={this.handleOnFocus}\n handleBlur={this.handleOnBlur}\n errorMessage={this.state.errors.password}\n floatingLabel={intl.formatMessage(messages['login.password.label'])}\n />\n e.preventDefault()}\n />\n \n {intl.formatMessage(messages['forgot.password'])}\n \n {this.renderThirdPartyAuth(providers, secondaryProviders, currentProvider, thirdPartyAuthApiStatus, intl)}\n \n
\n \n );\n }\n\n render() {\n const {\n intl, submitState, thirdPartyAuthContext, thirdPartyAuthApiStatus,\n } = this.props;\n const { currentProvider, providers, secondaryProviders } = this.props.thirdPartyAuthContext;\n\n if (this.tpaHint) {\n if (thirdPartyAuthApiStatus === PENDING_STATE) {\n return ;\n }\n const { provider, skipHintedLogin } = getTpaProvider(this.tpaHint, providers, secondaryProviders);\n if (skipHintedLogin) {\n window.location.href = getConfig().LMS_BASE_URL + provider.loginUrl;\n return null;\n }\n return provider ? () : this.renderForm(\n currentProvider,\n providers,\n secondaryProviders,\n thirdPartyAuthContext,\n thirdPartyAuthApiStatus,\n submitState,\n intl,\n );\n }\n return this.renderForm(\n currentProvider,\n providers,\n secondaryProviders,\n thirdPartyAuthContext,\n thirdPartyAuthApiStatus,\n submitState,\n intl,\n );\n }\n}\n\nLoginPage.defaultProps = {\n loginResult: null,\n loginError: null,\n loginFormData: {\n emailOrUsername: '',\n password: '',\n errors: {\n emailOrUsername: '',\n password: '',\n },\n },\n resetPassword: false,\n submitState: DEFAULT_STATE,\n thirdPartyAuthApiStatus: 'pending',\n thirdPartyAuthContext: {\n currentProvider: null,\n finishAuthUrl: null,\n providers: [],\n secondaryProviders: [],\n },\n};\n\nLoginPage.propTypes = {\n getThirdPartyAuthContext: PropTypes.func.isRequired,\n intl: intlShape.isRequired,\n loginError: PropTypes.objectOf(PropTypes.any),\n loginRequest: PropTypes.func.isRequired,\n loginRequestFailure: PropTypes.func.isRequired,\n loginRequestReset: PropTypes.func.isRequired,\n setLoginFormData: PropTypes.func.isRequired,\n loginRemovePasswordResetBanner: PropTypes.func.isRequired,\n loginResult: PropTypes.shape({\n redirectUrl: PropTypes.string,\n success: PropTypes.bool,\n }),\n loginFormData: PropTypes.shape({\n emailOrUsername: PropTypes.string,\n password: PropTypes.string,\n errors: PropTypes.shape({\n emailOrUsername: PropTypes.string,\n password: PropTypes.string,\n }),\n }),\n resetPassword: PropTypes.bool,\n submitState: PropTypes.string,\n thirdPartyAuthApiStatus: PropTypes.string,\n thirdPartyAuthContext: PropTypes.shape({\n currentProvider: PropTypes.string,\n platformName: PropTypes.string,\n providers: PropTypes.array,\n secondaryProviders: PropTypes.array,\n finishAuthUrl: PropTypes.string,\n }),\n institutionLogin: PropTypes.bool.isRequired,\n handleInstitutionLogin: PropTypes.func.isRequired,\n};\n\nconst mapStateToProps = state => {\n const loginResult = loginRequestSelector(state);\n const thirdPartyAuthContext = thirdPartyAuthContextSelector(state);\n const loginError = loginErrorSelector(state);\n const loginFormData = loginFormDataSelector(state);\n return {\n submitState: state.login.submitState,\n thirdPartyAuthApiStatus: state.commonComponents.thirdPartyAuthApiStatus,\n loginError,\n loginResult,\n thirdPartyAuthContext,\n loginFormData,\n resetPassword: state.login.resetPassword,\n };\n};\n\nexport default connect(\n mapStateToProps,\n {\n getThirdPartyAuthContext,\n loginRequest,\n loginRequestFailure,\n loginRequestReset,\n setLoginFormData,\n loginRemovePasswordResetBanner,\n },\n)(injectIntl(LoginPage));\n","import { AsyncActionType } from '../../data/utils';\n\nexport const RESET_PASSWORD = new AsyncActionType('RESET', 'PASSWORD');\nexport const VALIDATE_TOKEN = new AsyncActionType('VALIDATE', 'TOKEN');\nexport const PASSWORD_RESET_FAILURE = 'PASSWORD_RESET_FAILURE';\n\nexport const passwordResetFailure = (errorCode) => ({\n type: PASSWORD_RESET_FAILURE,\n payload: { errorCode },\n});\n\n// Validate confirmation token\nexport const validateToken = (token) => ({\n type: VALIDATE_TOKEN.BASE,\n payload: { token },\n});\n\nexport const validateTokenBegin = () => ({\n type: VALIDATE_TOKEN.BEGIN,\n});\n\nexport const validateTokenSuccess = (tokenStatus, token) => ({\n type: VALIDATE_TOKEN.SUCCESS,\n payload: { tokenStatus, token },\n});\n\nexport const validateTokenFailure = errorCode => ({\n type: VALIDATE_TOKEN.FAILURE,\n payload: { errorCode },\n});\n\n// Reset Password\nexport const resetPassword = (formPayload, token, params) => ({\n type: RESET_PASSWORD.BASE,\n payload: { formPayload, token, params },\n});\n\nexport const resetPasswordBegin = () => ({\n type: RESET_PASSWORD.BEGIN,\n});\n\nexport const resetPasswordSuccess = data => ({\n type: RESET_PASSWORD.SUCCESS,\n payload: { data },\n});\n\nexport const resetPasswordFailure = (errorCode, errorMsg = null) => ({\n type: RESET_PASSWORD.FAILURE,\n payload: { errorCode, errorMsg: errorMsg || errorCode },\n});\n","export const TOKEN_STATE = {\n PENDING: 'token-pending',\n VALID: 'token-valid',\n};\n\n// password reset error codes\nexport const FORM_SUBMISSION_ERROR = 'form-submission-error';\nexport const PASSWORD_RESET_ERROR = 'password-reset-error';\nexport const PASSWORD_VALIDATION_ERROR = 'password-validation-failure';\n\nexport const PASSWORD_RESET = {\n INVALID_TOKEN: 'invalid-token',\n INTERNAL_SERVER_ERROR: 'password-reset-internal-server-error',\n FORBIDDEN_REQUEST: 'password-reset-rate-limit-error',\n};\n","import { createSelector } from 'reselect';\n\nexport const storeName = 'resetPassword';\n\nexport const resetPasswordSelector = state => ({ ...state[storeName] });\n\nexport const resetPasswordResultSelector = createSelector(\n resetPasswordSelector,\n resetPassword => resetPassword,\n);\n","import { getConfig } from '@edx/frontend-platform';\nimport { getHttpClient } from '@edx/frontend-platform/auth';\nimport formurlencoded from 'form-urlencoded';\n\n// eslint-disable-next-line import/prefer-default-export\nexport async function validateToken(token) {\n const requestConfig = {\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n };\n\n const { data } = await getHttpClient()\n .post(\n `${getConfig().LMS_BASE_URL}/user_api/v1/account/password_reset/token/validate/`,\n formurlencoded({ token }),\n requestConfig,\n )\n .catch((e) => {\n throw (e);\n });\n return data;\n}\n\n// eslint-disable-next-line import/prefer-default-export\nexport async function resetPassword(payload, token, queryParams) {\n const requestConfig = {\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n };\n const url = new URL(`${getConfig().LMS_BASE_URL}/password/reset/${token}/`);\n\n if (queryParams.is_account_recovery) {\n url.searchParams.append('is_account_recovery', true);\n }\n\n const { data } = await getHttpClient()\n .post(url.href, formurlencoded(payload), requestConfig)\n .catch((e) => {\n throw (e);\n });\n return data;\n}\n\nexport async function validatePassword(payload) {\n const requestConfig = {\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n };\n const { data } = await getHttpClient()\n .post(\n `${getConfig().LMS_BASE_URL}/api/user/v1/validation/registration`,\n formurlencoded(payload),\n requestConfig,\n )\n .catch((e) => {\n throw (e);\n });\n\n let errorMessage = '';\n // Be careful about grabbing this message, since we could have received an HTTP error or the\n // endpoint didn't give us what we expect. We only care if we get a clear error message.\n if (data.validation_decisions && data.validation_decisions.password) {\n errorMessage = data.validation_decisions.password;\n }\n\n return errorMessage;\n}\n","import React from 'react';\n\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Alert } from '@edx/paragon';\nimport { Error } from '@edx/paragon/icons';\nimport PropTypes from 'prop-types';\n\nimport { FORM_SUBMISSION_ERROR, PASSWORD_RESET, PASSWORD_VALIDATION_ERROR } from './data/constants';\nimport messages from './messages';\n\nconst ResetPasswordFailure = (props) => {\n const { errorCode, errorMsg, intl } = props;\n\n let errorMessage = null;\n let heading = intl.formatMessage(messages['reset.password.failure.heading']);\n switch (errorCode) {\n case PASSWORD_RESET.FORBIDDEN_REQUEST:\n heading = intl.formatMessage(messages['reset.server.rate.limit.error']);\n errorMessage = intl.formatMessage(messages['rate.limit.error']);\n break;\n case PASSWORD_RESET.INTERNAL_SERVER_ERROR:\n errorMessage = intl.formatMessage(messages['internal.server.error']);\n break;\n case PASSWORD_VALIDATION_ERROR:\n errorMessage = errorMsg;\n break;\n case FORM_SUBMISSION_ERROR:\n errorMessage = intl.formatMessage(messages['reset.password.form.submission.error']);\n break;\n default:\n break;\n }\n\n if (errorMessage) {\n return (\n \n {heading}\n

{errorMessage}

\n
\n );\n }\n\n return null;\n};\n\nResetPasswordFailure.defaultProps = {\n errorCode: null,\n errorMsg: null,\n};\n\nResetPasswordFailure.propTypes = {\n errorCode: PropTypes.string,\n errorMsg: PropTypes.string,\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(ResetPasswordFailure);\n","import React, { useEffect, useState } from 'react';\nimport { connect } from 'react-redux';\n\nimport { getConfig, getQueryParameters } from '@edx/frontend-platform';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport {\n Form,\n Icon,\n Spinner,\n StatefulButton,\n Tab,\n Tabs,\n} from '@edx/paragon';\nimport { ChevronLeft } from '@edx/paragon/icons';\nimport PropTypes from 'prop-types';\nimport { Helmet } from 'react-helmet';\nimport { Redirect } from 'react-router-dom';\n\nimport BaseComponent from '../base-component';\nimport { PasswordField } from '../common-components';\nimport {\n LETTER_REGEX, LOGIN_PAGE, NUMBER_REGEX, RESET_PAGE,\n} from '../data/constants';\nimport { updatePathWithQueryParams, windowScrollTo } from '../data/utils';\nimport { resetPassword, validateToken } from './data/actions';\nimport {\n FORM_SUBMISSION_ERROR, PASSWORD_RESET_ERROR, PASSWORD_VALIDATION_ERROR, TOKEN_STATE,\n} from './data/constants';\nimport { resetPasswordResultSelector } from './data/selectors';\nimport { validatePassword } from './data/service';\nimport messages from './messages';\nimport ResetPasswordFailure from './ResetPasswordFailure';\n\nconst ResetPasswordPage = (props) => {\n const { intl } = props;\n\n const [newPassword, setNewPassword] = useState('');\n const [confirmPassword, setConfirmPassword] = useState('');\n const [formErrors, setFormErrors] = useState({});\n const [errorCode, setErrorCode] = useState(null);\n const [key, setKey] = useState('');\n\n useEffect(() => {\n if (props.status !== TOKEN_STATE.PENDING && props.status !== PASSWORD_RESET_ERROR) {\n setErrorCode(props.status);\n }\n if (props.status === PASSWORD_VALIDATION_ERROR) {\n setFormErrors({ newPassword: intl.formatMessage(messages['password.validation.message']) });\n }\n }, [props.status, intl]);\n\n const validatePasswordFromBackend = async (password) => {\n let errorMessage = '';\n try {\n const payload = {\n reset_password_page: true,\n password,\n };\n errorMessage = await validatePassword(payload);\n } catch (err) {\n errorMessage = '';\n }\n setFormErrors({ ...formErrors, newPassword: errorMessage });\n };\n\n const validateInput = (name, value) => {\n switch (name) {\n case 'newPassword':\n if (!value || !LETTER_REGEX.test(value) || !NUMBER_REGEX.test(value) || value.length < 8) {\n formErrors.newPassword = intl.formatMessage(messages['password.validation.message']);\n } else {\n validatePasswordFromBackend(value);\n }\n break;\n case 'confirmPassword':\n if (!value) {\n formErrors.confirmPassword = intl.formatMessage(messages['confirm.your.password']);\n } else if (value !== newPassword) {\n formErrors.confirmPassword = intl.formatMessage(messages['passwords.do.not.match']);\n } else {\n formErrors.confirmPassword = '';\n }\n break;\n default:\n break;\n }\n setFormErrors({ ...formErrors });\n return !Object.values(formErrors).some(x => (x !== ''));\n };\n\n const handleOnBlur = (event) => {\n let { name, value } = event.target;\n\n // Do not validate when focus out from 'newPassword' and focus on 'passwordValidation' icon\n // for better user experience.\n if (event.relatedTarget\n && event.relatedTarget.name === 'passwordValidation'\n && name === 'newPassword'\n ) {\n return;\n }\n if (name === 'passwordValidation') {\n name = 'newPassword';\n value = newPassword;\n }\n validateInput(name, value);\n };\n\n const handleConfirmPasswordChange = (e) => {\n const { value } = e.target;\n\n setConfirmPassword(value);\n validateInput('confirmPassword', value);\n };\n\n const handleOnFocus = (e) => {\n setFormErrors({ ...formErrors, [e.target.name]: '' });\n };\n\n const handleSubmit = (e) => {\n e.preventDefault();\n\n const isPasswordValid = validateInput('newPassword', newPassword);\n const isPasswordConfirmed = validateInput('confirmPassword', confirmPassword);\n\n if (isPasswordValid && isPasswordConfirmed) {\n const formPayload = {\n new_password1: newPassword,\n new_password2: confirmPassword,\n };\n const params = getQueryParameters();\n props.resetPassword(formPayload, props.token, params);\n } else {\n setErrorCode(FORM_SUBMISSION_ERROR);\n windowScrollTo({ left: 0, top: 0, behavior: 'smooth' });\n }\n };\n\n const tabTitle = (\n
\n \n {intl.formatMessage(messages['sign.in'])}\n
\n );\n\n if (props.status === TOKEN_STATE.PENDING) {\n const { token } = props.match.params;\n if (token) {\n props.validateToken(token);\n return ;\n }\n } else if (props.status === PASSWORD_RESET_ERROR) {\n return ;\n } else if (props.status === 'success') {\n return ;\n } else {\n return (\n \n
\n \n {intl.formatMessage(messages['reset.password.page.title'],\n { siteName: getConfig().SITE_NAME })}\n \n \n setKey(k)}>\n \n \n { key && (\n \n )}\n
\n
\n \n

{intl.formatMessage(messages['reset.password'])}

\n

{intl.formatMessage(messages['reset.password.page.instructions'])}

\n
\n setNewPassword(e.target.value)}\n handleBlur={handleOnBlur}\n handleFocus={handleOnFocus}\n errorMessage={formErrors.newPassword}\n floatingLabel={intl.formatMessage(messages['new.password.label'])}\n />\n \n handleSubmit(e)}\n onMouseDown={(e) => e.preventDefault()}\n />\n \n
\n
\n
\n
\n );\n }\n return null;\n};\n\nResetPasswordPage.defaultProps = {\n status: null,\n token: null,\n match: null,\n errorMsg: null,\n};\n\nResetPasswordPage.propTypes = {\n intl: intlShape.isRequired,\n resetPassword: PropTypes.func.isRequired,\n validateToken: PropTypes.func.isRequired,\n token: PropTypes.string,\n match: PropTypes.shape({\n params: PropTypes.shape({\n token: PropTypes.string,\n }),\n }),\n status: PropTypes.string,\n errorMsg: PropTypes.string,\n};\n\nexport default connect(\n resetPasswordResultSelector,\n {\n resetPassword,\n validateToken,\n },\n)(injectIntl(ResetPasswordPage));\n","import { PASSWORD_RESET_FAILURE, RESET_PASSWORD, VALIDATE_TOKEN } from './actions';\nimport { PASSWORD_RESET_ERROR, TOKEN_STATE } from './constants';\n\nexport const defaultState = {\n status: TOKEN_STATE.PENDING,\n token: null,\n errorMsg: null,\n};\n\nconst reducer = (state = defaultState, action = null) => {\n switch (action.type) {\n case VALIDATE_TOKEN.SUCCESS:\n return {\n ...state,\n status: TOKEN_STATE.VALID,\n token: action.payload.token,\n };\n case PASSWORD_RESET_FAILURE:\n return {\n ...state,\n status: PASSWORD_RESET_ERROR,\n };\n case RESET_PASSWORD.BEGIN:\n return {\n ...state,\n status: 'pending',\n };\n case RESET_PASSWORD.SUCCESS:\n return {\n ...state,\n status: 'success',\n };\n case RESET_PASSWORD.FAILURE:\n return {\n ...state,\n status: action.payload.errorCode,\n errorMsg: action.payload.errorMsg,\n };\n default:\n return state;\n }\n};\n\nexport default reducer;\n","import { logError, logInfo } from '@edx/frontend-platform/logging';\nimport { call, put, takeEvery } from 'redux-saga/effects';\n\nimport {\n passwordResetFailure,\n RESET_PASSWORD,\n resetPasswordBegin,\n resetPasswordFailure,\n resetPasswordSuccess,\n VALIDATE_TOKEN,\n validateTokenBegin,\n validateTokenSuccess,\n} from './actions';\nimport { PASSWORD_RESET, PASSWORD_VALIDATION_ERROR } from './constants';\nimport { resetPassword, validateToken } from './service';\n\n// Services\nexport function* handleValidateToken(action) {\n try {\n yield put(validateTokenBegin());\n const data = yield call(validateToken, action.payload.token);\n const isValid = data.is_valid;\n if (isValid) {\n yield put(validateTokenSuccess(isValid, action.payload.token));\n } else {\n yield put(passwordResetFailure(PASSWORD_RESET.INVALID_TOKEN));\n }\n } catch (err) {\n if (err.response && err.response.status === 429) {\n yield put(passwordResetFailure(PASSWORD_RESET.FORBIDDEN_REQUEST));\n logInfo(err);\n } else {\n yield put(passwordResetFailure(PASSWORD_RESET.INTERNAL_SERVER_ERROR));\n logError(err);\n }\n }\n}\n\nexport function* handleResetPassword(action) {\n try {\n yield put(resetPasswordBegin());\n const data = yield call(resetPassword, action.payload.formPayload, action.payload.token, action.payload.params);\n const resetStatus = data.reset_status;\n const resetErrors = data.err_msg;\n\n if (resetStatus) {\n yield put(resetPasswordSuccess(resetStatus));\n } else if (data.token_invalid) {\n yield put(passwordResetFailure(PASSWORD_RESET.INVALID_TOKEN));\n } else {\n yield put(resetPasswordFailure(PASSWORD_VALIDATION_ERROR, resetErrors));\n }\n } catch (err) {\n if (err.response && err.response.status === 429) {\n yield put(resetPasswordFailure(PASSWORD_RESET.FORBIDDEN_REQUEST));\n logInfo(err);\n } else {\n yield put(resetPasswordFailure(PASSWORD_RESET.INTERNAL_SERVER_ERROR));\n logError(err);\n }\n }\n}\n\nexport default function* saga() {\n yield takeEvery(RESET_PASSWORD.BASE, handleResetPassword);\n yield takeEvery(VALIDATE_TOKEN.BASE, handleValidateToken);\n}\n","import { DEFAULT_STATE, PENDING_STATE } from '../../data/constants';\nimport { RESET_PASSWORD } from '../../reset-password';\nimport { LOGIN_PERSIST_FORM_DATA, LOGIN_REMOVE_PASSWORD_RESET_BANNER, LOGIN_REQUEST } from './actions';\n\nexport const defaultState = {\n loginError: null,\n loginResult: {},\n resetPassword: false,\n loginFormData: {\n password: '',\n emailOrUsername: '',\n errors: {\n emailOrUsername: '',\n password: '',\n },\n },\n};\n\nconst reducer = (state = defaultState, action) => {\n switch (action.type) {\n case LOGIN_REQUEST.BEGIN:\n return {\n ...state,\n submitState: PENDING_STATE,\n resetPassword: false,\n };\n case LOGIN_REQUEST.SUCCESS:\n return {\n ...state,\n loginResult: action.payload,\n };\n case LOGIN_REQUEST.FAILURE:\n return {\n ...state,\n loginError: action.payload.loginError,\n submitState: DEFAULT_STATE,\n };\n case LOGIN_REQUEST.RESET:\n return {\n ...state,\n loginError: null,\n };\n case RESET_PASSWORD.SUCCESS:\n return {\n ...state,\n resetPassword: true,\n };\n case LOGIN_PERSIST_FORM_DATA: {\n const { formData } = action.payload;\n return {\n ...state,\n loginFormData: {\n ...state.loginFormData,\n ...formData,\n },\n };\n }\n case LOGIN_REMOVE_PASSWORD_RESET_BANNER: {\n return {\n ...state,\n resetPassword: false,\n };\n }\n default:\n return {\n ...state,\n };\n }\n};\n\nexport default reducer;\n","import { getConfig } from '@edx/frontend-platform';\nimport { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth';\nimport * as QueryString from 'query-string';\n\n// eslint-disable-next-line import/prefer-default-export\nexport async function loginRequest(creds) {\n const requestConfig = {\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n isPublic: true,\n };\n\n const { data } = await getAuthenticatedHttpClient()\n .post(\n `${getConfig().LMS_BASE_URL}/api/user/v2/account/login_session/`,\n QueryString.stringify(creds),\n requestConfig,\n )\n .catch((e) => {\n throw (e);\n });\n\n return {\n redirectUrl: data.redirect_url || `${getConfig().LMS_BASE_URL}/dashboard`,\n success: data.success || false,\n };\n}\n","import { camelCaseObject } from '@edx/frontend-platform';\nimport { logError, logInfo } from '@edx/frontend-platform/logging';\nimport { call, put, takeEvery } from 'redux-saga/effects';\n\nimport {\n LOGIN_REQUEST,\n loginRequestBegin,\n loginRequestFailure,\n loginRequestSuccess,\n} from './actions';\nimport { FORBIDDEN_REQUEST, INTERNAL_SERVER_ERROR } from './constants';\nimport {\n loginRequest,\n} from './service';\n\nexport function* handleLoginRequest(action) {\n try {\n yield put(loginRequestBegin());\n\n const { redirectUrl, success } = yield call(loginRequest, action.payload.creds);\n\n yield put(loginRequestSuccess(\n redirectUrl,\n success,\n ));\n } catch (e) {\n const statusCodes = [400];\n if (e.response) {\n const { status } = e.response;\n if (statusCodes.includes(status)) {\n yield put(loginRequestFailure(camelCaseObject(e.response.data)));\n logInfo(e);\n } else if (status === 403) {\n yield put(loginRequestFailure({ errorCode: FORBIDDEN_REQUEST }));\n logInfo(e);\n } else {\n yield put(loginRequestFailure({ errorCode: INTERNAL_SERVER_ERROR }));\n logError(e);\n }\n }\n }\n}\n\nexport default function* saga() {\n yield takeEvery(LOGIN_REQUEST.BASE, handleLoginRequest);\n}\n","import React from 'react';\n\nimport { Form, Icon } from '@edx/paragon';\nimport { ExpandMore } from '@edx/paragon/icons';\nimport PropTypes from 'prop-types';\n\nconst FormFieldRenderer = (props) => {\n let formField = null;\n const {\n 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 \n onChangeHandler(e)}\n trailingElement={}\n floatingLabel={fieldData.label}\n onBlur={handleOnBlur}\n onFocus={handleFocus}\n >\n \n {fieldData.options.map(option => (\n \n ))}\n \n {isRequired && errorMessage && (\n \n {errorMessage}\n \n )}\n \n );\n break;\n }\n case 'textarea': {\n formField = (\n \n onChangeHandler(e)}\n floatingLabel={fieldData.label}\n onBlur={handleOnBlur}\n onFocus={handleFocus}\n />\n {isRequired && errorMessage && (\n \n {errorMessage}\n \n )}\n \n );\n break;\n }\n case 'text': {\n formField = (\n \n onChangeHandler(e)}\n floatingLabel={fieldData.label}\n onBlur={handleOnBlur}\n onFocus={handleFocus}\n />\n {isRequired && errorMessage && (\n \n {errorMessage}\n \n )}\n \n );\n break;\n }\n case 'checkbox': {\n formField = (\n \n onChangeHandler(e)}\n onBlur={handleOnBlur}\n onFocus={handleFocus}\n >\n {fieldData.label}\n \n {isRequired && errorMessage && (\n \n {errorMessage}\n \n )}\n \n );\n break;\n }\n default:\n break;\n }\n\n return formField;\n};\nFormFieldRenderer.defaultProps = {\n value: '',\n handleBlur: null,\n handleFocus: null,\n errorMessage: '',\n isRequired: false,\n};\n\nFormFieldRenderer.propTypes = {\n fieldData: PropTypes.shape({\n type: PropTypes.string,\n label: PropTypes.string,\n name: 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.string,\n};\n\nexport default FormFieldRenderer;\n","// Registration Fields\nexport const FIELDS = {\n COUNTRY: 'country',\n HONOR_CODE: 'honor_code',\n TERMS_OF_SERVICE: 'terms_of_service',\n};\n\n// Registration Error Codes\nexport const FORBIDDEN_REQUEST = 'forbidden-request';\nexport const FORM_SUBMISSION_ERROR = 'form-submission-error';\nexport const INTERNAL_SERVER_ERROR = 'internal-server-error';\nexport const TPA_SESSION_EXPIRED = 'tpa-session-expired';\n\nexport const YEAR_OF_BIRTH_OPTIONS = (() => {\n const currentYear = new Date().getFullYear();\n const years = [];\n let startYear = currentYear - 120;\n while (startYear < currentYear) {\n startYear += 1;\n\n years.push({ value: startYear.toString(), label: startYear });\n }\n return years.reverse();\n})();\n\nexport const EDUCATION_LEVELS = [\n '',\n 'p',\n 'm',\n 'b',\n 'a',\n 'hs',\n 'jhs',\n 'el',\n 'none',\n 'other',\n];\n\nexport const GENDER_OPTIONS = ['', 'f', 'm', 'o'];\n\nexport const COMMON_EMAIL_PROVIDERS = [\n 'hotmail.com', 'yahoo.com', 'outlook.com', 'live.com', 'gmail.com',\n];\n\nexport const DEFAULT_SERVICE_PROVIDER_DOMAINS = ['yahoo', 'hotmail', 'live', 'outlook', 'gmail'];\n\nexport const DEFAULT_TOP_LEVEL_DOMAINS = [\n 'aaa', 'aarp', 'abarth', 'abb', 'abbott', 'abbvie', 'abc', 'able', 'abogado', 'abudhabi', 'ac', 'academy',\n 'accenture', 'accountant', 'accountants', 'aco', 'active', 'actor', 'ad', 'adac', 'ads', 'adult', 'ae', 'aeg', 'aero',\n 'aetna', 'af', 'afamilycompany', 'afl', 'africa', 'ag', 'agakhan', 'agency', 'ai', 'aig', 'aigo', 'airbus', 'airforce',\n 'airtel', 'akdn', 'al', 'alfaromeo', 'alibaba', 'alipay', 'allfinanz', 'allstate', 'ally', 'alsace', 'alstom', 'am',\n 'amazon', 'americanexpress', 'americanfamily', 'amex', 'amfam', 'amica', 'amsterdam', 'an', 'analytics', 'android',\n 'anquan', 'anz', 'ao', 'aol', 'apartments', 'app', 'apple', 'aq', 'aquarelle', 'ar', 'arab', 'aramco', 'archi', 'army',\n 'arpa', 'art', 'arte', 'as', 'asda', 'asia', 'associates', 'at', 'athleta', 'attorney', 'au', 'auction', 'audi',\n 'audible', 'audio', 'auspost', 'author', 'auto', 'autos', 'avianca', 'aw', 'aws', 'ax', 'axa', 'az', 'azure', 'ba',\n 'baby', 'baidu', 'banamex', 'bananarepublic', 'band', 'bank', 'bar', 'barcelona', 'barclaycard', 'barclays',\n 'barefoot', 'bargains', 'baseball', 'basketball', 'bauhaus', 'bayern', 'bb', 'bbc', 'bbt', 'bbva', 'bcg', 'bcn', 'bd',\n 'be', 'beats', 'beauty', 'beer', 'bentley', 'berlin', 'best', 'bestbuy', 'bet', 'bf', 'bg', 'bh', 'bharti', 'bi',\n 'bible', 'bid', 'bike', 'bing', 'bingo', 'bio', 'biz', 'bj', 'bl', 'black', 'blackfriday', 'blanco', 'blockbuster',\n 'blog', 'bloomberg', 'blue', 'bm', 'bms', 'bmw', 'bn', 'bnl', 'bnpparibas', 'bo', 'boats', 'boehringer', 'bofa', 'bom',\n 'bond', 'boo', 'book', 'booking', 'boots', 'bosch', 'bostik', 'boston', 'bot', 'boutique', 'box', 'bq', 'br',\n 'bradesco', 'bridgestone', 'broadway', 'broker', 'brother', 'brussels', 'bs', 'bt', 'budapest', 'bugatti', 'build',\n 'builders', 'business', 'buy', 'buzz', 'bv', 'bw', 'by', 'bz', 'bzh', 'ca', 'cab', 'cafe', 'cal', 'call',\n 'calvinklein', 'cam', 'camera', 'camp', 'cancerresearch', 'canon', 'capetown', 'capital', 'capitalone', 'car',\n 'caravan', 'cards', 'care', 'career', 'careers', 'cars', 'cartier', 'casa', 'case', 'caseih', 'cash', 'casino', 'cat',\n 'catering', 'catholic', 'cba', 'cbn', 'cbre', 'cbs', 'cc', 'cd', 'ceb', 'center', 'ceo', 'cern', 'cf', 'cfa', 'cfd',\n 'cg', 'ch', 'chanel', 'channel', 'charity', 'chase', 'chat', 'cheap', 'chintai', 'chloe', 'christmas', 'chrome',\n 'chrysler', 'church', 'ci', 'cipriani', 'circle', 'cisco', 'citadel', 'citi', 'citic', 'city', 'cityeats', 'ck', 'cl',\n 'claims', 'cleaning', 'click', 'clinic', 'clinique', 'clothing', 'cloud', 'club', 'clubmed', 'cm', 'cn', 'co', 'coach',\n 'codes', 'coffee', 'college', 'cologne', 'com', 'comcast', 'commbank', 'community', 'company', 'compare', 'computer',\n 'comsec', 'condos', 'construction', 'consulting', 'contact', 'contractors', 'cooking', 'cookingchannel', 'cool', 'coop',\n 'corsica', 'country', 'coupon', 'coupons', 'courses', 'cpa', 'cr', 'credit', 'creditcard', 'creditunion', 'cricket',\n 'crown', 'crs', 'cruise', 'cruises', 'csc', 'cu', 'cuisinella', 'cv', 'cw', 'cx', 'cy', 'cymru', 'cyou', 'cz', 'dabur',\n 'dad', 'dance', 'data', 'date', 'dating', 'datsun', 'day', 'dclk', 'dds', 'de', 'deal', 'dealer', 'deals', 'degree',\n 'delivery', 'dell', 'deloitte', 'delta', 'democrat', 'dental', 'dentist', 'desi', 'design', 'dev', 'dhl', 'diamonds',\n 'diet', 'digital', 'direct', 'directory', 'discount', 'discover', 'dish', 'diy', 'dj', 'dk', 'dm', 'dnp', 'do', 'docs',\n 'doctor', 'dodge', 'dog', 'doha', 'domains', 'doosan', 'dot', 'download', 'drive', 'dtv', 'dubai', 'duck', 'dunlop',\n 'duns', 'dupont', 'durban', 'dvag', 'dvr', 'dz', 'earth', 'eat', 'ec', 'eco', 'edeka', 'edu', 'education', 'ee', 'eg',\n 'eh', 'email', 'emerck', 'energy', 'engineer', 'engineering', 'enterprises', 'epost', 'epson', 'equipment', 'er',\n 'ericsson', 'erni', 'es', 'esq', 'estate', 'esurance', 'et', 'etisalat', 'eu', 'eurovision', 'eus', 'events', 'everbank',\n 'exchange', 'expert', 'exposed', 'express', 'extraspace', 'fage', 'fail', 'fairwinds', 'faith', 'family', 'fan', 'fans',\n 'farm', 'farmers', 'fashion', 'fast', 'fedex', 'feedback', 'ferrari', 'ferrero', 'fi', 'fiat', 'fidelity', 'fido', 'film',\n 'final', 'finance', 'financial', 'fire', 'firestone', 'firmdale', 'fish', 'fishing', 'fit', 'fitness', 'fj', 'fk',\n 'flickr', 'flights', 'flir', 'florist', 'flowers', 'flsmidth', 'fly', 'fm', 'fo', 'foo', 'food', 'foodnetwork', 'football',\n 'ford', 'forex', 'forsale', 'forum', 'foundation', 'fox', 'fr', 'free', 'fresenius', 'frl', 'frogans', 'frontdoor',\n 'frontier', 'ftr', 'fujitsu', 'fujixerox', 'fun', 'fund', 'furniture', 'futbol', 'fyi', 'ga', 'gal', 'gallery', 'gallo',\n 'gallup', 'game', 'games', 'gap', 'garden', 'gay', 'gb', 'gbiz', 'gd', 'gdn', 'ge', 'gea', 'gent', 'genting', 'george',\n 'gf', 'gg', 'ggee', 'gh', 'gi', 'gift', 'gifts', 'gives', 'giving', 'gl', 'glade', 'glass', 'gle', 'global', 'globo',\n 'gm', 'gmail', 'gmbh', 'gmo', 'gmx', 'gn', 'godaddy', 'gold', 'goldpoint', 'golf', 'goo', 'goodhands', 'goodyear', 'goog',\n 'google', 'gop', 'got', 'gov', 'gp', 'gq', 'gr', 'grainger', 'graphics', 'gratis', 'green', 'gripe', 'grocery', 'group',\n 'gs', 'gt', 'gu', 'guardian', 'gucci', 'guge', 'guide', 'guitars', 'guru', 'gw', 'gy', 'hair', 'hamburg', 'hangout',\n 'haus', 'hbo', 'hdfc', 'hdfcbank', 'health', 'healthcare', 'help', 'helsinki', 'here', 'hermes', 'hgtv', 'hiphop',\n 'hisamitsu', 'hitachi', 'hiv', 'hk', 'hkt', 'hm', 'hn', 'hockey', 'holdings', 'holiday', 'homedepot', 'homegoods',\n 'homes', 'homesense', 'honda', 'honeywell', 'horse', 'hospital', 'host', 'hosting', 'hot', 'hoteles', 'hotels', 'hotmail',\n 'house', 'how', 'hr', 'hsbc', 'ht', 'htc', 'hu', 'hughes', 'hyatt', 'hyundai', 'ibm', 'icbc', 'ice', 'icu', 'id', 'ie',\n 'ieee', 'ifm', 'iinet', 'ikano', 'il', 'im', 'imamat', 'imdb', 'immo', 'immobilien', 'in', 'inc', 'industries', 'infiniti',\n 'info', 'ing', 'ink', 'institute', 'insurance', 'insure', 'int', 'intel', 'international', 'intuit', 'investments',\n 'io', 'ipiranga', 'iq', 'ir', 'irish', 'is', 'iselect', 'ismaili', 'ist', 'istanbul', 'it', 'itau', 'itv', 'iveco', 'iwc',\n 'jaguar', 'java', 'jcb', 'jcp', 'je', 'jeep', 'jetzt', 'jewelry', 'jio', 'jlc', 'jll', 'jm', 'jmp', 'jnj', 'jo',\n 'jobs', 'joburg', 'jot', 'joy', 'jp', 'jpmorgan', 'jprs', 'juegos', 'juniper', 'kaufen', 'kddi', 'ke', 'kerryhotels',\n 'kerrylogistics', 'kerryproperties', 'kfh', 'kg', 'kh', 'ki', 'kia', 'kim', 'kinder', 'kindle', 'kitchen', 'kiwi', 'km',\n 'kn', 'koeln', 'komatsu', 'kosher', 'kp', 'kpmg', 'kpn', 'kr', 'krd', 'kred', 'kuokgroup', 'kw', 'ky', 'kyoto', 'kz',\n 'la', 'lacaixa', 'ladbrokes', 'lamborghini', 'lamer', 'lancaster', 'lancia', 'lancome', 'land', 'landrover', 'lanxess',\n 'lasalle', 'lat', 'latino', 'latrobe', 'law', 'lawyer', 'lb', 'lc', 'lds', 'lease', 'leclerc', 'lefrak', 'legal',\n 'lego', 'lexus', 'lgbt', 'li', 'liaison', 'lidl', 'life', 'lifeinsurance', 'lifestyle', 'lighting', 'like', 'lilly',\n 'limited', 'limo', 'lincoln', 'linde', 'link', 'lipsy', 'live', 'living', 'lixil', 'lk', 'llc', 'llp', 'loan', 'loans',\n 'locker', 'locus', 'loft', 'lol', 'london', 'lotte', 'lotto', 'love', 'lpl', 'lplfinancial', 'lr', 'ls', 'lt', 'ltd',\n 'ltda', 'lu', 'lundbeck', 'lupin', 'luxe', 'luxury', 'lv', 'ly', 'ma', 'macys', 'madrid', 'maif', 'maison', 'makeup',\n 'man', 'management', 'mango', 'map', 'market', 'marketing', 'markets', 'marriott', 'marshalls', 'maserati', 'mattel',\n 'mba', 'mc', 'mcd', 'mcdonalds', 'mckinsey', 'md', 'me', 'med', 'media', 'meet', 'melbourne', 'meme', 'memorial', 'men',\n 'menu', 'meo', 'merckmsd', 'metlife', 'mf', 'mg', 'mh', 'miami', 'microsoft', 'mil', 'mini', 'mint', 'mit', 'mitsubishi',\n 'mk', 'ml', 'mlb', 'mls', 'mm', 'mma', 'mn', 'mo', 'mobi', 'mobile', 'mobily', 'moda', 'moe', 'moi', 'mom', 'monash',\n 'money', 'monster', 'montblanc', 'mopar', 'mormon', 'mortgage', 'moscow', 'moto', 'motorcycles', 'mov', 'movie', 'movistar',\n 'mp', 'mq', 'mr', 'ms', 'msd', 'mt', 'mtn', 'mtpc', 'mtr', 'mu', 'museum', 'mutual', 'mutuelle', 'mv', 'mw', 'mx', 'my',\n 'mz', 'na', 'nab', 'nadex', 'nagoya', 'name', 'nationwide', 'natura', 'navy', 'nba', 'nc', 'ne', 'nec', 'net', 'netbank',\n 'netflix', 'network', 'neustar', 'new', 'newholland', 'news', 'next', 'nextdirect', 'nexus', 'nf', 'nfl', 'ng', 'ngo', 'nhk',\n 'ni', 'nico', 'nike', 'nikon', 'ninja', 'nissan', 'nissay', 'nl', 'no', 'nokia', 'northwesternmutual', 'norton', 'now',\n 'nowruz', 'nowtv', 'np', 'nr', 'nra', 'nrw', 'ntt', 'nu', 'nyc', 'nz', 'obi', 'observer', 'off', 'office', 'okinawa',\n 'olayan', 'olayangroup', 'oldnavy', 'ollo', 'om', 'omega', 'one', 'ong', 'onl', 'online', 'onyourside', 'ooo', 'open',\n 'oracle', 'orange', 'org', 'organic', 'orientexpress', 'origins', 'osaka', 'otsuka', 'ott', 'ovh', 'pa', 'page',\n 'pamperedchef', 'panasonic', 'panerai', 'paris', 'pars', 'partners', 'parts', 'party', 'passagens', 'pay', 'pccw', 'pe',\n 'pet', 'pf', 'pfizer', 'pg', 'ph', 'pharmacy', 'phd', 'philips', 'phone', 'photo', 'photography', 'photos', 'physio',\n 'piaget', 'pics', 'pictet', 'pictures', 'pid', 'pin', 'ping', 'pink', 'pioneer', 'pizza', 'pk', 'pl', 'place', 'play',\n 'playstation', 'plumbing', 'plus', 'pm', 'pn', 'pnc', 'pohl', 'poker', 'politie', 'porn', 'post', 'pr', 'pramerica',\n 'praxi', 'press', 'prime', 'pro', 'prod', 'productions', 'prof', 'progressive', 'promo', 'properties', 'property',\n 'protection', 'pru', 'prudential', 'ps', 'pt', 'pub', 'pw', 'pwc', 'py', 'qa', 'qpon', 'quebec', 'quest', 'qvc',\n 'racing', 'radio', 'raid', 're', 'read', 'realestate', 'realtor', 'realty', 'recipes', 'red', 'redstone', 'redumbrella',\n 'rehab', 'reise', 'reisen', 'reit', 'reliance', 'ren', 'rent', 'rentals', 'repair', 'report', 'republican', 'rest',\n 'restaurant', 'review', 'reviews', 'rexroth', 'rich', 'richardli', 'ricoh', 'rightathome', 'ril', 'rio', 'rip', 'rmit',\n 'ro', 'rocher', 'rocks', 'rodeo', 'rogers', 'room', 'rs', 'rsvp', 'ru', 'rugby', 'ruhr', 'run', 'rw', 'rwe', 'ryukyu',\n 'sa', 'saarland', 'safe', 'safety', 'sakura', 'sale', 'salon', 'samsclub', 'samsung', 'sandvik', 'sandvikcoromant',\n 'sanofi', 'sap', 'sapo', 'sarl', 'sas', 'save', 'saxo', 'sb', 'sbi', 'sbs', 'sc', 'sca', 'scb', 'schaeffler', 'schmidt',\n 'scholarships', 'school', 'schule', 'schwarz', 'science', 'scjohnson', 'scor', 'scot', 'sd', 'se', 'search', 'seat',\n 'secure', 'security', 'seek', 'select', 'sener', 'services', 'ses', 'seven', 'sew', 'sex', 'sexy', 'sfr', 'sg', 'sh',\n 'shangrila', 'sharp', 'shaw', 'shell', 'shia', 'shiksha', 'shoes', 'shop', 'shopping', 'shouji', 'show', 'showtime',\n 'shriram', 'si', 'silk', 'sina', 'singles', 'site', 'sj', 'sk', 'ski', 'skin', 'sky', 'skype', 'sl', 'sling', 'sm',\n 'smart', 'smile', 'sn', 'sncf', 'so', 'soccer', 'social', 'softbank', 'software', 'sohu', 'solar', 'solutions', 'song',\n 'sony', 'soy', 'spa', 'space', 'spiegel', 'sport', 'spot', 'spreadbetting', 'sr', 'srl', 'srt', 'ss', 'st', 'stada',\n 'staples', 'star', 'starhub', 'statebank', 'statefarm', 'statoil', 'stc', 'stcgroup', 'stockholm', 'storage', 'store',\n 'stream', 'studio', 'study', 'style', 'su', 'sucks', 'supplies', 'supply', 'support', 'surf', 'surgery', 'suzuki', 'sv',\n 'swatch', 'swiftcover', 'swiss', 'sx', 'sy', 'sydney', 'symantec', 'systems', 'sz', 'tab', 'taipei', 'talk', 'taobao',\n 'target', 'tatamotors', 'tatar', 'tattoo', 'tax', 'taxi', 'tc', 'tci', 'td', 'tdk', 'team', 'tech', 'technology', 'tel',\n 'telecity', 'telefonica', 'temasek', 'tennis', 'teva', 'tf', 'tg', 'th', 'thd', 'theater', 'theatre', 'tiaa', 'tickets',\n 'tienda', 'tiffany', 'tips', 'tires', 'tirol', 'tj', 'tjmaxx', 'tjx', 'tk', 'tkmaxx', 'tl', 'tm', 'tmall', 'tn', 'to',\n 'today', 'tokyo', 'tools', 'top', 'toray', 'toshiba', 'total', 'tours', 'town', 'toyota', 'toys', 'tp', 'tr', 'trade',\n 'trading', 'training', 'travel', 'travelchannel', 'travelers', 'travelersinsurance', 'trust', 'trv', 'tt', 'tube', 'tui',\n 'tunes', 'tushu', 'tv', 'tvs', 'tw', 'tz', 'ua', 'ubank', 'ubs', 'uconnect', 'ug', 'uk', 'um', 'unicom', 'university',\n 'uno', 'uol', 'ups', 'us', 'uy', 'uz', 'va', 'vacations', 'vana', 'vanguard', 'vc', 've', 'vegas', 'ventures', 'verisign',\n 'versicherung', 'vet', 'vg', 'vi', 'viajes', 'video', 'vig', 'viking', 'villas', 'vin', 'vip', 'virgin', 'visa', 'vision',\n 'vista', 'vistaprint', 'viva', 'vivo', 'vlaanderen', 'vn', 'vodka', 'volkswagen', 'volvo', 'vote', 'voting', 'voto',\n 'voyage', 'vu', 'vuelos', 'wales', 'walmart', 'walter', 'wang', 'wanggou', 'warman', 'watch', 'watches', 'weather',\n 'weatherchannel', 'webcam', 'weber', 'website', 'wed', 'wedding', 'weibo', 'weir', 'wf', 'whoswho', 'wien', 'wiki',\n 'williamhill', 'win', 'windows', 'wine', 'winners', 'wme', 'wolterskluwer', 'woodside', 'work', 'works', 'world', 'wow',\n 'ws', 'wtc', 'wtf', 'xbox', 'xerox', 'xfinity', 'xihuan', 'xin', '测试', 'कॉम', 'परीक्षा', 'セール', '佛山', 'ಭಾರತ', '慈善',\n '集团', '在线', '한국', 'ଭାରତ', '大众汽车', '点看', 'คอม', 'ভাৰত', 'ভারত', '八卦', 'ישראל\\u200e', 'موقع\\u200e', 'বাংলা', '公益',\n '公司', '香格里拉', '网站', '移动', '我爱你', 'москва', 'испытание', 'қаз', 'католик', 'онлайн', 'сайт', '联通', 'срб', 'бг',\n 'бел', 'קום\\u200e', '时尚', '微博', '테스트', '淡马锡', 'ファッション', 'орг', 'नेट', 'ストア', 'アマゾン', '삼성', 'சிங்கப்பூர்', '商标',\n '商店', '商城', 'дети', 'мкд', 'טעסט\\u200e', 'ею', 'ポイント', '新闻', '工行', '家電', 'كوم\\u200e', '中文网', '中信', '中国',\n '中國', '娱乐', '谷歌', 'భారత్', 'ලංකා', '電訊盈科', '购物', '測試', 'クラウド', 'ભારત', '通販', 'भारतम्', 'भारत', 'भारोत', 'آزمایشی\\u200e',\n 'பரிட்சை', '网店', 'संगठन', '餐厅', '网络', 'ком', 'укр', '香港', '亚马逊', '诺基亚', '食品', 'δοκιμή', '飞利浦', 'إختبار\\u200e',\n '台湾', '台灣', '手表', '手机', 'мон', 'الجزائر\\u200e', 'عمان\\u200e', 'ارامكو\\u200e', 'ایران\\u200e', 'العليان\\u200e',\n 'اتصالات\\u200e', 'امارات\\u200e', 'بازار\\u200e', 'موريتانيا\\u200e', 'پاکستان\\u200e', 'الاردن\\u200e', 'موبايلي\\u200e',\n 'بارت\\u200e', 'بھارت\\u200e', 'المغرب\\u200e', 'ابوظبي\\u200e', 'البحرين\\u200e', 'السعودية\\u200e', 'ڀارت\\u200e',\n 'كاثوليك\\u200e', 'سودان\\u200e', 'همراه\\u200e', 'عراق\\u200e', 'مليسيا\\u200e', '澳門', '닷컴', '政府', 'شبكة\\u200e',\n 'بيتك\\u200e', 'عرب\\u200e', 'გე', '机构', '组织机构', '健康', 'ไทย', 'سورية\\u200e', '招聘', 'рус', 'рф', '珠宝',\n 'تونس\\u200e', '大拿', 'ລາວ', 'みんな', 'グーグル', 'ευ', 'ελ', '世界', '書籍', 'ഭാരതം', 'ਭਾਰਤ', '网址', '닷넷', 'コム',\n '天主教', '游戏', 'vermögensberater', 'vermögensberatung', '企业', '信息', '嘉里大酒店', '嘉里', 'مصر\\u200e',\n 'قطر\\u200e', '广东', 'இலங்கை', 'இந்தியா', 'հայ', '新加坡', 'فلسطين\\u200e', 'テスト', '政务', 'xperia', 'xxx',\n 'xyz', 'yachts', 'yahoo', 'yamaxun', 'yandex', 'ye', 'yodobashi', 'yoga', 'yokohama', 'you', 'youtube', 'yt',\n 'yun', 'za', 'zappos', 'zara', 'zero', 'zip', 'zippo', 'zm', 'zone', 'zuerich', 'zw',\n];\n\nexport const COUNTRY_CODE_KEY = 'code';\nexport const COUNTRY_DISPLAY_KEY = 'name';\n","import React from 'react';\r\n\r\nimport { Icon, IconButton } from '@edx/paragon';\r\nimport { ExpandLess, ExpandMore } from '@edx/paragon/icons';\r\nimport PropTypes from 'prop-types';\r\nimport onClickOutside from 'react-onclickoutside';\r\n\r\nimport { FormGroup } from '../common-components';\r\nimport { COUNTRY_CODE_KEY, COUNTRY_DISPLAY_KEY, FORM_SUBMISSION_ERROR } from './data/constants';\r\n\r\nclass CountryDropdown extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.handleFocus = this.handleFocus.bind(this);\r\n this.handleOnBlur = this.handleOnBlur.bind(this);\r\n\r\n this.state = {\r\n displayValue: '',\r\n icon: this.expandMoreButton(),\r\n errorMessage: '',\r\n showFieldError: true,\r\n };\r\n }\r\n\r\n shouldComponentUpdate(nextProps) {\r\n const selectedCountry = this.props.options.find((o) => o[COUNTRY_CODE_KEY] === nextProps.value);\r\n if (this.props.value !== nextProps.value) {\r\n if (selectedCountry) {\r\n this.setState({\r\n displayValue: selectedCountry[COUNTRY_DISPLAY_KEY],\r\n showFieldError: false,\r\n errorMessage: nextProps.errorMessage,\r\n });\r\n return false;\r\n }\r\n // Set persisted country value as display value.\r\n this.setState({ displayValue: nextProps.value, showFieldError: true, errorMessage: nextProps.errorMessage });\r\n return false;\r\n // eslint-disable-next-line no-else-return\r\n } else if (nextProps.value && selectedCountry && this.state.displayValue === nextProps.value) {\r\n // Handling a case here where user enters a valid country code that needs to be\r\n // evaluated and set its display value.\r\n this.setState({ displayValue: selectedCountry[COUNTRY_DISPLAY_KEY] });\r\n return false;\r\n }\r\n if (this.props.errorCode !== nextProps.errorCode && nextProps.errorCode === 'invalid-country') {\r\n this.setState({ showFieldError: true, errorMessage: nextProps.errorMessage });\r\n return false;\r\n }\r\n if (this.state.errorMessage !== nextProps.errorMessage) {\r\n this.setState({ showFieldError: true, errorMessage: nextProps.errorMessage });\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n static getDerivedStateFromProps(props, state) {\r\n if (props.errorCode === FORM_SUBMISSION_ERROR && state.showFieldError) {\r\n return { errorMessage: props.errorMessage };\r\n }\r\n return null;\r\n }\r\n\r\n getItems(strToFind = '') {\r\n let { options } = this.props;\r\n if (strToFind.length > 0) {\r\n options = options.filter((option) => (option.name.toLowerCase().includes(strToFind.toLowerCase())));\r\n }\r\n\r\n return options.map((opt) => {\r\n const value = opt[COUNTRY_CODE_KEY];\r\n const displayValue = opt[COUNTRY_DISPLAY_KEY];\r\n\r\n return (\r\n \r\n );\r\n });\r\n }\r\n\r\n handleOnChange = (e) => {\r\n const filteredItems = this.getItems(e.target.value);\r\n this.setState({\r\n dropDownItems: filteredItems,\r\n displayValue: e.target.value,\r\n });\r\n }\r\n\r\n handleClickOutside = () => {\r\n if (this.state.dropDownItems?.length > 0) {\r\n this.setState(() => ({\r\n icon: this.expandMoreButton(),\r\n dropDownItems: '',\r\n }));\r\n }\r\n }\r\n\r\n handleExpandLess() {\r\n this.setState({ dropDownItems: '', icon: this.expandMoreButton() });\r\n }\r\n\r\n handleExpandMore() {\r\n this.setState(prevState => ({\r\n dropDownItems: this.getItems(prevState.displayValue), icon: this.expandLessButton(), errorMessage: '', showFieldError: false,\r\n }));\r\n }\r\n\r\n handleFocus(e) {\r\n const { name, value } = e.target;\r\n this.setState(prevState => ({\r\n dropDownItems: this.getItems(name === 'country' ? value : prevState.displayValue),\r\n icon: this.expandLessButton(),\r\n errorMessage: '',\r\n showFieldError: false,\r\n }));\r\n if (this.props.handleFocus) { this.props.handleFocus(e); }\r\n }\r\n\r\n handleOnBlur(e, itemClicked = false, country = '') {\r\n const { name } = e.target;\r\n let countryValue = '';\r\n if (country) {\r\n countryValue = country;\r\n } else {\r\n countryValue = itemClicked ? e.target.value : this.state.displayValue;\r\n }\r\n // For a better user experience, do not validate when focus out from 'country' field\r\n // and focus on 'countryItem' or 'countryExpand' button.\r\n if (e.relatedTarget && e.relatedTarget.name === 'countryItem' && (name === 'country' || name === 'countryExpand')) {\r\n return;\r\n }\r\n const normalized = countryValue.toLowerCase();\r\n const selectedCountry = this.props.options.find((o) => o[COUNTRY_DISPLAY_KEY].toLowerCase() === normalized);\r\n if (!selectedCountry) {\r\n this.setState({ errorMessage: this.props.errorMessage, showFieldError: true });\r\n }\r\n if (this.props.handleBlur) { this.props.handleBlur({ target: { name: 'country', value: countryValue } }); }\r\n }\r\n\r\n handleItemClick(e) {\r\n let countryValue = '';\r\n if (!e.target.value) {\r\n countryValue = e.target.parentElement.parentElement.value;\r\n }\r\n this.setState({ dropDownItems: '', icon: this.expandMoreButton() });\r\n this.handleOnBlur(e, true, countryValue);\r\n }\r\n\r\n expandMoreButton() {\r\n return (\r\n { this.handleExpandMore(e); }}\r\n />\r\n );\r\n }\r\n\r\n expandLessButton() {\r\n return (\r\n { this.handleExpandLess(e); }}\r\n />\r\n );\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n \r\n
\r\n { this.state.dropDownItems?.length > 0 ? this.state.dropDownItems : null }\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nCountryDropdown.defaultProps = {\r\n options: null,\r\n floatingLabel: null,\r\n handleFocus: null,\r\n handleBlur: null,\r\n value: null,\r\n errorMessage: null,\r\n errorCode: null,\r\n};\r\n\r\nCountryDropdown.propTypes = {\r\n options: PropTypes.arrayOf(PropTypes.object),\r\n floatingLabel: PropTypes.string,\r\n handleFocus: PropTypes.func,\r\n handleBlur: PropTypes.func,\r\n value: PropTypes.string,\r\n errorMessage: PropTypes.string,\r\n errorCode: PropTypes.string,\r\n name: PropTypes.string.isRequired,\r\n};\r\n\r\nexport default onClickOutside(CountryDropdown);\r\n","import { createSelector } from 'reselect';\n\nexport const storeName = 'register';\n\nexport const registerSelector = state => ({ ...state[storeName] });\n\nexport const registrationRequestSelector = createSelector(\n registerSelector,\n register => register.registrationResult,\n);\n\nexport const registrationErrorSelector = createSelector(\n registerSelector,\n register => register.registrationError.errorCode,\n);\n\nexport const validationsSelector = createSelector(\n registerSelector,\n (register) => {\n const { registrationError, validations } = register;\n\n if (validations) {\n return validations.validationDecisions;\n }\n\n if (Object.keys(registrationError).length > 0) {\n const fields = Object.keys(registrationError).filter((fieldName) => !(fieldName in ['errorCode', 'usernameSuggestions']));\n\n const validationDecisions = {};\n fields.forEach(field => {\n validationDecisions[field] = registrationError[field][0].userMessage || '';\n });\n return validationDecisions;\n }\n\n return null;\n },\n);\n\nexport const usernameSuggestionsSelector = createSelector(\n registerSelector,\n register => register.usernameSuggestions,\n);\n\nexport const registrationFormDataSelector = createSelector(\n registerSelector,\n register => register.registrationFormData,\n);\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n 'register.page.title': {\n id: 'register.page.title',\n defaultMessage: 'Register | {siteName}',\n description: 'register page title',\n },\n // Field labels\n 'registration.fullname.label': {\n id: 'registration.fullname.label',\n defaultMessage: 'Full name',\n description: 'Label that appears above fullname field',\n },\n 'registration.email.label': {\n id: 'registration.email.label',\n defaultMessage: 'Email',\n description: 'Label that appears above email field on register page',\n },\n 'registration.username.label': {\n id: 'registration.username.label',\n defaultMessage: 'Public username',\n description: 'Label that appears above username field',\n },\n 'registration.password.label': {\n id: 'registration.password.label',\n defaultMessage: 'Password',\n description: 'Label that appears above password field',\n },\n 'registration.country.label': {\n id: 'registration.country.label',\n defaultMessage: 'Country/Region',\n description: 'Placeholder for the country options dropdown.',\n },\n 'registration.opt.in.label': {\n id: 'registration.opt.in.label',\n defaultMessage: 'I agree that {siteName} may send me marketing messages.',\n description: 'Text for opt in option on register page.',\n },\n // Help text\n 'help.text.name': {\n id: 'help.text.name',\n defaultMessage: 'This name will be used by any certificates that you earn.',\n description: 'Help text for fullname field on registration page',\n },\n 'help.text.username.1': {\n id: 'help.text.username.1',\n defaultMessage: 'The name that will identify you in your courses.',\n description: 'Part of help text for username field on registration page',\n },\n 'help.text.username.2': {\n id: 'help.text.username.2',\n defaultMessage: 'This can not be changed later.',\n description: 'Part of help text for username field on registration page',\n },\n 'help.text.email': {\n id: 'help.text.email',\n defaultMessage: 'For account activation and important updates',\n description: 'Help text for email field on registration page',\n },\n // Form buttons\n 'create.account.for.free.button': {\n id: 'create.account.for.free.button',\n defaultMessage: 'Create an account for free',\n description: 'Label text for registration form submission button',\n },\n 'create.an.account.btn.pending.state': {\n id: 'create.an.account.btn.pending.state',\n defaultMessage: 'Loading',\n description: 'Title of icon that appears when button is in pending state',\n },\n 'registration.other.options.heading': {\n id: 'registration.other.options.heading',\n defaultMessage: 'Or register with:',\n description: 'A message that appears above third party auth providers i.e saml, google, facebook etc',\n },\n // Institution login\n 'register.institution.login.button': {\n id: 'register.institution.login.button',\n defaultMessage: 'Institution/campus credentials',\n description: 'shows institutions list',\n },\n 'register.institution.login.page.title': {\n id: 'register.institution.login.page.title',\n defaultMessage: 'Register with institution/campus credentials',\n description: 'Heading of institution page',\n },\n 'create.an.account': {\n id: 'create.an.account',\n defaultMessage: 'Create an account',\n description: 'Message on button to return to register page',\n },\n // Validation messages\n 'empty.name.field.error': {\n id: 'empty.name.field.error',\n defaultMessage: 'Enter your full name',\n description: 'Error message for empty fullname field',\n },\n 'empty.email.field.error': {\n id: 'empty.email.field.error',\n defaultMessage: 'Enter your email',\n description: 'Error message for empty email field',\n },\n 'email.do.not.match': {\n id: 'email.do.not.match',\n defaultMessage: 'The email addresses do not match.',\n description: 'Email not match to confirm email',\n },\n 'empty.username.field.error': {\n id: 'empty.username.field.error',\n defaultMessage: 'Username must be between 2 and 30 characters',\n description: 'Error message for empty username field',\n },\n 'empty.password.field.error': {\n id: 'empty.password.field.error',\n defaultMessage: 'Password criteria has not been met',\n description: 'Error message for empty password field',\n },\n 'empty.country.field.error': {\n id: 'empty.country.field.error',\n defaultMessage: 'Select your country or region of residence',\n description: 'Error message when no country/region is selected',\n },\n 'email.invalid.format.error': {\n id: 'email.invalid.format.error',\n defaultMessage: 'Enter a valid email address',\n description: 'Validation error for invalid email address',\n },\n 'email.ratelimit.less.chars.validation.message': {\n id: 'email.ratelimit.less.chars.validation.message',\n defaultMessage: 'Email must have 3 characters.',\n description: 'Validation message that appears when email address is less than 3 characters',\n },\n 'username.validation.message': {\n id: 'username.validation.message',\n defaultMessage: 'Username must be between 2 and 30 characters',\n description: 'Error message for empty username field',\n },\n 'name.validation.message': {\n id: 'name.validation.message',\n defaultMessage: 'Enter a valid name',\n description: 'Validation message that appears when fullname contain URL',\n },\n 'password.validation.message': {\n id: 'password.validation.message',\n defaultMessage: 'Password criteria has not been met',\n description: 'Error message for empty or invalid password',\n },\n 'username.format.validation.message': {\n id: 'username.format.validation.message',\n defaultMessage: 'Usernames can only contain letters (A-Z, a-z), numerals (0-9), underscores (_), and hyphens (-). Usernames cannot contain spaces',\n description: 'Validation message that appears when username format is invalid',\n },\n 'support.education.research': {\n id: 'support.education.research',\n defaultMessage: 'Support education research by providing additional information. (Optional)',\n description: 'Text for a checkbox to ask user for if they are willing to provide extra information for education research',\n },\n // Error messages\n 'registration.request.failure.header': {\n id: 'registration.request.failure.header',\n defaultMessage: 'We couldn\\'t create your account.',\n description: 'error message when registration failure.',\n },\n 'registration.empty.form.submission.error': {\n id: 'registration.empty.form.submission.error',\n defaultMessage: 'Please check your responses and try again.',\n description: 'Error message that appears on top of the form when empty form is submitted',\n },\n 'registration.request.server.error': {\n id: 'registration.request.server.error',\n defaultMessage: 'An error has occurred. Try refreshing the page, or check your internet connection.',\n description: 'Error message for internal server error.',\n },\n 'registration.rate.limit.error': {\n id: 'registration.rate.limit.error',\n defaultMessage: 'Too many failed registration attempts. Try again later.',\n description: 'Error message that appears when an anonymous user has made too many failed registration attempts',\n },\n 'registration.tpa.session.expired': {\n id: 'registration.tpa.session.expired',\n defaultMessage: 'Registration using {provider} has timed out.',\n description: '',\n },\n // Terms of Service and Honor Code\n 'terms.of.service.and.honor.code': {\n id: 'terms.of.service.and.honor.code',\n defaultMessage: 'Terms of Service and Honor Code',\n description: 'Text for the hyperlink that redirects user to terms of service and honor code',\n },\n 'privacy.policy': {\n id: 'privacy.policy',\n defaultMessage: 'Privacy Policy',\n description: 'Text for the hyperlink that redirects user to privacy policy',\n },\n 'honor.code': {\n id: 'honor.code',\n defaultMessage: 'Honor Code',\n description: 'Text for the hyperlink that redirects user to the honor code',\n },\n 'terms.of.service': {\n id: 'terms.of.service',\n defaultMessage: 'Terms of Service',\n description: 'Text for the hyperlink that redirects user to the terms of service',\n },\n // Optional fields\n 'registration.year.of.birth.label': {\n id: 'registration.year.of.birth.label',\n defaultMessage: 'Year of birth (optional)',\n description: 'Placeholder for the year of birth options dropdown',\n },\n 'registration.field.gender.options.label': {\n id: 'registration.field.gender.options.label',\n defaultMessage: 'Gender (optional)',\n description: 'Placeholder for the gender options dropdown',\n },\n 'registration.goals.label': {\n id: 'registration.goals.label',\n defaultMessage: 'Tell us why you\\'re interested in edX (optional)',\n description: 'Placeholder for the goals options dropdown',\n },\n 'registration.field.gender.options.f': {\n id: 'registration.field.gender.options.f',\n defaultMessage: 'Female',\n description: 'The label for the female gender option.',\n },\n 'registration.field.gender.options.m': {\n id: 'registration.field.gender.options.m',\n defaultMessage: 'Male',\n description: 'The label for the male gender option.',\n },\n 'registration.field.gender.options.o': {\n id: 'registration.field.gender.options.o',\n defaultMessage: 'Other/Prefer not to say',\n description: 'The label for catch-all gender option.',\n },\n 'registration.field.education.levels.label': {\n id: 'registration.field.education.levels.label',\n defaultMessage: 'Highest level of education completed (optional)',\n description: 'Placeholder for the education levels dropdown.',\n },\n 'registration.field.education.levels.p': {\n id: 'registration.field.education.levels.p',\n defaultMessage: 'Doctorate',\n description: 'Selected by the user if their highest level of education is a doctorate degree.',\n },\n 'registration.field.education.levels.m': {\n id: 'registration.field.education.levels.m',\n defaultMessage: \"Master's or professional degree\",\n description: \"Selected by the user if their highest level of education is a master's or professional degree from a college or university.\",\n },\n 'registration.field.education.levels.b': {\n id: 'registration.field.education.levels.b',\n defaultMessage: \"Bachelor's degree\",\n description: \"Selected by the user if their highest level of education is a four year college or university bachelor's degree.\",\n },\n 'registration.field.education.levels.a': {\n id: 'registration.field.education.levels.a',\n defaultMessage: \"Associate's degree\",\n description: \"Selected by the user if their highest level of education is an associate's degree. 1-2 years of college or university.\",\n },\n 'registration.field.education.levels.hs': {\n id: 'registration.field.education.levels.hs',\n defaultMessage: 'Secondary/high school',\n description: 'Selected by the user if their highest level of education is secondary or high school. 9-12 years of education.',\n },\n 'registration.field.education.levels.jhs': {\n id: 'registration.field.education.levels.jhs',\n defaultMessage: 'Junior secondary/junior high/middle school',\n description: 'Selected by the user if their highest level of education is junior or middle school. 6-8 years of education.',\n },\n 'registration.field.education.levels.el': {\n id: 'registration.field.education.levels.el',\n defaultMessage: 'Elementary/primary school',\n description: 'Selected by the user if their highest level of education is elementary or primary school. 1-5 years of education.',\n },\n 'registration.field.education.levels.none': {\n id: 'registration.field.education.levels.none',\n defaultMessage: 'No formal education',\n description: 'Selected by the user to describe their education.',\n },\n 'registration.field.education.levels.other': {\n id: 'registration.field.education.levels.other',\n defaultMessage: 'Other education',\n description: 'Selected by the user if they have a type of education not described by the other choices.',\n },\n // miscellaneous strings\n 'registration.username.suggestion.label': {\n id: 'registration.username.suggestion.label',\n defaultMessage: 'Suggested:',\n description: 'Suggested usernames label text.',\n },\n 'registration.using.tpa.form.heading': {\n id: 'registration.using.tpa.form.heading',\n defaultMessage: 'Finish creating your account',\n description: 'Heading that appears above form when user is trying to create account using social auth',\n },\n 'did.you.mean.alert.text': {\n id: 'did.you.mean.alert.text',\n defaultMessage: 'Did you mean',\n description: 'Did you mean alert suggestion',\n },\n});\n\nexport default messages;\n","import React from 'react';\r\n\r\nimport { getConfig } from '@edx/frontend-platform';\r\nimport { FormattedMessage, injectIntl, intlShape } from '@edx/frontend-platform/i18n';\r\nimport { Form, Hyperlink } from '@edx/paragon';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport messages from './messages';\r\n\r\nconst HonorCode = (props) => {\r\n const {\r\n intl, errorMessage, onChangeHandler, fieldType, value,\r\n } = props;\r\n\r\n if (fieldType === 'tos_and_honor_code') {\r\n return (\r\n
\r\n \r\n {intl.formatMessage(messages['terms.of.service.and.honor.code'])}\r\n \r\n ),\r\n privacyPolicy: (\r\n \r\n {intl.formatMessage(messages['privacy.policy'])}\r\n \r\n ),\r\n }}\r\n />\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n {intl.formatMessage(messages['honor.code'])}\r\n \r\n ),\r\n }}\r\n />\r\n \r\n {errorMessage && (\r\n \r\n {errorMessage}\r\n \r\n )}\r\n
\r\n );\r\n};\r\n\r\nHonorCode.defaultProps = {\r\n errorMessage: '',\r\n onChangeHandler: null,\r\n fieldType: 'honor_code',\r\n value: false,\r\n};\r\n\r\nHonorCode.propTypes = {\r\n intl: intlShape.isRequired,\r\n errorMessage: PropTypes.string,\r\n onChangeHandler: PropTypes.func,\r\n fieldType: PropTypes.string,\r\n value: PropTypes.bool,\r\n};\r\n\r\nexport default injectIntl(HonorCode);\r\n","import React, { useEffect } from 'react';\n\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Alert } from '@edx/paragon';\nimport { Error } from '@edx/paragon/icons';\nimport PropTypes from 'prop-types';\n\nimport { windowScrollTo } from '../data/utils';\nimport { FORBIDDEN_REQUEST, INTERNAL_SERVER_ERROR, TPA_SESSION_EXPIRED } from './data/constants';\nimport messages from './messages';\n\nconst RegistrationFailureMessage = (props) => {\n const {\n context, errorCode, failureCount, intl,\n } = props;\n\n useEffect(() => {\n windowScrollTo({ left: 0, top: 0, behavior: 'smooth' });\n }, [errorCode, failureCount]);\n\n let errorMessage;\n switch (errorCode) {\n case INTERNAL_SERVER_ERROR:\n errorMessage = intl.formatMessage(messages['registration.request.server.error']);\n break;\n case FORBIDDEN_REQUEST:\n errorMessage = intl.formatMessage(messages['registration.rate.limit.error']);\n break;\n case TPA_SESSION_EXPIRED:\n errorMessage = intl.formatMessage(messages['registration.tpa.session.expired'], { provider: context.provider });\n break;\n default:\n errorMessage = intl.formatMessage(messages['registration.empty.form.submission.error']);\n break;\n }\n\n return (\n \n {props.intl.formatMessage(messages['registration.request.failure.header'])}\n

{errorMessage}

\n
\n );\n};\n\nRegistrationFailureMessage.defaultProps = {\n context: {},\n};\n\nRegistrationFailureMessage.propTypes = {\n context: PropTypes.shape({\n provider: PropTypes.string,\n }),\n errorCode: PropTypes.string.isRequired,\n failureCount: PropTypes.number.isRequired,\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(RegistrationFailureMessage);\n","import React from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { FormattedMessage, injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Form, Hyperlink } from '@edx/paragon';\nimport PropTypes from 'prop-types';\n\nimport messages from './messages';\n\nconst TermsOfService = (props) => {\n const {\n intl, errorMessage, onChangeHandler, value,\n } = props;\n\n return (\n
\n \n \n {intl.formatMessage(messages['terms.of.service'])}\n \n ),\n }}\n />\n \n {errorMessage && (\n \n {errorMessage}\n \n )}\n
\n );\n};\n\nTermsOfService.defaultProps = {\n errorMessage: '',\n value: false,\n};\n\nTermsOfService.propTypes = {\n intl: intlShape.isRequired,\n errorMessage: PropTypes.string,\n onChangeHandler: PropTypes.func.isRequired,\n value: PropTypes.bool,\n};\n\nexport default injectIntl(TermsOfService);\n","import React from 'react';\n\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Button, Icon, IconButton } from '@edx/paragon';\nimport { Close } from '@edx/paragon/icons';\nimport PropTypes, { string } from 'prop-types';\n\nimport { FormGroup } from '../common-components';\nimport messages from './messages';\n\nconst UsernameField = (props) => {\n const { intl, usernameSuggestions, errorMessage } = props;\n let className = '';\n let suggestedUsernameDiv = <>;\n let iconButton = <>;\n const suggestedUsernames = () => (\n
\n {intl.formatMessage(messages['registration.username.suggestion.label'])}\n
\n {usernameSuggestions.map((username, index) => (\n props.handleSuggestionClick(e, username)}\n >\n {username}\n \n ))}\n
\n {iconButton}\n
\n );\n if (usernameSuggestions.length > 0 && errorMessage && props.value === ' ') {\n className = 'suggested-username-with-error';\n iconButton = props.handleUsernameSuggestionClose()} variant=\"black\" size=\"sm\" className=\"suggested-username-close-button\" />;\n suggestedUsernameDiv = suggestedUsernames();\n } else if (usernameSuggestions.length > 0 && props.value === ' ') {\n className = 'suggested-username';\n iconButton = props.handleUsernameSuggestionClose()} variant=\"black\" size=\"sm\" className=\"suggested-username-close-button\" />;\n suggestedUsernameDiv = suggestedUsernames();\n } else if (usernameSuggestions.length > 0 && errorMessage) {\n suggestedUsernameDiv = suggestedUsernames();\n }\n return (\n \n {suggestedUsernameDiv}\n \n );\n};\n\nUsernameField.defaultProps = {\n usernameSuggestions: [],\n handleSuggestionClick: () => {},\n handleUsernameSuggestionClose: () => {},\n errorMessage: '',\n autoComplete: null,\n};\n\nUsernameField.propTypes = {\n usernameSuggestions: PropTypes.arrayOf(string),\n handleSuggestionClick: PropTypes.func,\n handleUsernameSuggestionClose: PropTypes.func,\n errorMessage: PropTypes.string,\n intl: intlShape.isRequired,\n name: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n autoComplete: PropTypes.string,\n};\n\nexport default injectIntl(UsernameField);\n","import { distance } from 'fastest-levenshtein';\n\nimport { COMMON_EMAIL_PROVIDERS } from './data/constants';\n\nexport function getLevenshteinSuggestion(word, knownWords, similarityThreshold = 4) {\n if (!word) {\n return null;\n }\n\n let minEditDistance = 100;\n let mostSimilar = word;\n\n for (let i = 0; i < knownWords.length; i++) {\n const editDistance = distance(knownWords[i].toLowerCase(), word.toLowerCase());\n if (editDistance < minEditDistance) {\n minEditDistance = editDistance;\n mostSimilar = knownWords[i];\n }\n }\n\n return minEditDistance <= similarityThreshold && word !== mostSimilar ? mostSimilar : null;\n}\n\nexport function getSuggestionForInvalidEmail(domain, username) {\n if (!domain) {\n return null;\n }\n\n const defaultDomains = ['yahoo', 'aol', 'hotmail', 'live', 'outlook', 'gmail'];\n const suggestion = getLevenshteinSuggestion(domain, COMMON_EMAIL_PROVIDERS);\n\n if (suggestion) {\n return `${username}@${suggestion}`;\n }\n\n for (let i = 0; i < defaultDomains.length; i++) {\n if (domain.includes(defaultDomains[i])) {\n return `${username}@${defaultDomains[i]}.com`;\n }\n }\n\n return null;\n}\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\n\r\nimport { getConfig, snakeCaseObject } from '@edx/frontend-platform';\r\nimport { sendPageEvent, sendTrackEvent } from '@edx/frontend-platform/analytics';\r\nimport {\r\n getCountryList, getLocale, injectIntl, intlShape,\r\n} from '@edx/frontend-platform/i18n';\r\nimport {\r\n Alert, Form, Icon, StatefulButton,\r\n} from '@edx/paragon';\r\nimport { Close, Error } from '@edx/paragon/icons';\r\nimport PropTypes, { string } from 'prop-types';\r\nimport { Helmet } from 'react-helmet';\r\nimport Skeleton from 'react-loading-skeleton';\r\n\r\nimport {\r\n FormGroup, InstitutionLogistration, PasswordField, RedirectLogistration,\r\n RenderInstitutionButton, SocialAuthProviders, ThirdPartyAuthAlert,\r\n} from '../common-components';\r\nimport { getThirdPartyAuthContext } from '../common-components/data/actions';\r\nimport {\r\n extendedProfileSelector,\r\n fieldDescriptionSelector,\r\n optionalFieldsSelector,\r\n thirdPartyAuthContextSelector,\r\n} from '../common-components/data/selectors';\r\nimport EnterpriseSSO from '../common-components/EnterpriseSSO';\r\nimport {\r\n DEFAULT_STATE, LETTER_REGEX, NUMBER_REGEX, PENDING_STATE, REGISTER_PAGE, VALID_EMAIL_REGEX, VALID_NAME_REGEX,\r\n} from '../data/constants';\r\nimport {\r\n getAllPossibleQueryParam, getTpaHint, getTpaProvider, setCookie, setSurveyCookie,\r\n} from '../data/utils';\r\nimport FormFieldRenderer from '../field-renderer';\r\nimport CountryDropdown from './CountryDropdown';\r\nimport {\r\n clearUsernameSuggestions,\r\n fetchRealtimeValidations,\r\n registerNewUser,\r\n resetRegistrationForm,\r\n setRegistrationFormData,\r\n} from './data/actions';\r\nimport {\r\n COMMON_EMAIL_PROVIDERS, COUNTRY_CODE_KEY, COUNTRY_DISPLAY_KEY, DEFAULT_SERVICE_PROVIDER_DOMAINS,\r\n DEFAULT_TOP_LEVEL_DOMAINS, FIELDS, FORM_SUBMISSION_ERROR,\r\n} from './data/constants';\r\nimport {\r\n registrationErrorSelector,\r\n registrationFormDataSelector,\r\n registrationRequestSelector,\r\n usernameSuggestionsSelector,\r\n validationsSelector,\r\n} from './data/selectors';\r\nimport HonorCode from './HonorCode';\r\nimport messages from './messages';\r\nimport RegistrationFailure from './RegistrationFailure';\r\nimport TermsOfService from './TermsOfService';\r\nimport UsernameField from './UsernameField';\r\nimport { getLevenshteinSuggestion, getSuggestionForInvalidEmail } from './utils';\r\n\r\nclass RegistrationPage extends React.Component {\r\n constructor(props, context) {\r\n super(props, context);\r\n this.handleOnClose = this.handleOnClose.bind(this);\r\n this.countryList = getCountryList(getLocale());\r\n this.queryParams = getAllPossibleQueryParam();\r\n // TODO: Once we have tested it and ready for openedX we can remove this flag and make the code\r\n // permanent part of Authn and remove extra code\r\n this.showDynamicRegistrationFields = getConfig().ENABLE_DYNAMIC_REGISTRATION_FIELDS;\r\n this.tpaHint = getTpaHint();\r\n const { registrationFormData } = this.props;\r\n this.state = {\r\n country: '',\r\n email: registrationFormData.email,\r\n name: registrationFormData.name,\r\n password: registrationFormData.password,\r\n username: registrationFormData.username,\r\n marketingOptIn: registrationFormData.marketingOptIn,\r\n errors: {\r\n email: registrationFormData.errors.email,\r\n name: registrationFormData.errors.name,\r\n username: registrationFormData.errors.username,\r\n password: registrationFormData.errors.password,\r\n country: '',\r\n },\r\n emailFieldBorderClass: registrationFormData.emailFieldBorderClass,\r\n emailErrorSuggestion: registrationFormData.emailErrorSuggestion,\r\n emailWarningSuggestion: registrationFormData.emailWarningSuggestion,\r\n errorCode: null,\r\n failureCount: 0,\r\n startTime: Date.now(),\r\n totalRegistrationTime: 0,\r\n validatePassword: false,\r\n values: {},\r\n focusedField: '',\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n sendPageEvent('login_and_registration', 'register');\r\n const payload = { ...this.queryParams };\r\n window.optimizely = window.optimizely || [];\r\n window.optimizely.push({\r\n type: 'page',\r\n pageName: 'authn_registration_page',\r\n isActive: true,\r\n });\r\n\r\n if (payload.save_for_later === 'true') {\r\n sendTrackEvent('edx.bi.user.saveforlater.course.enroll.clicked', { category: 'save-for-later' });\r\n }\r\n\r\n if (this.tpaHint) {\r\n payload.tpa_hint = this.tpaHint;\r\n }\r\n payload.is_register_page = true;\r\n this.props.resetRegistrationForm();\r\n this.props.getThirdPartyAuthContext(payload);\r\n }\r\n\r\n shouldComponentUpdate(nextProps) {\r\n if (nextProps.registrationFormData && this.props.registrationFormData !== nextProps.registrationFormData) {\r\n // Ensuring browser's autofill user credentials get filled and their state persists in the redux store.\r\n const nextState = {\r\n username: nextProps.registrationFormData.username || this.state.username,\r\n password: nextProps.registrationFormData.password || this.state.password,\r\n };\r\n // Do not set focused field's value from redux store to retain entered data in focused field.\r\n let { focusedField } = this.state;\r\n\r\n // Exemption for country field's value as we need to set updated value from the store.\r\n if (focusedField === 'country') { focusedField = ''; }\r\n const { [focusedField]: _, ...registrationData } = { ...nextProps.registrationFormData, ...nextState };\r\n this.setState({\r\n ...registrationData,\r\n });\r\n }\r\n\r\n if (this.props.usernameSuggestions.length > 0 && this.state.username === '') {\r\n this.props.setRegistrationFormData({\r\n username: ' ',\r\n });\r\n return false;\r\n }\r\n\r\n if (this.props.validationDecisions !== nextProps.validationDecisions) {\r\n if (nextProps.validationDecisions) {\r\n const state = {};\r\n const errors = { ...this.state.errors, ...nextProps.validationDecisions };\r\n let validatePassword = false;\r\n\r\n if (errors.password) {\r\n validatePassword = true;\r\n }\r\n\r\n if (nextProps.registrationErrorCode) {\r\n state.errorCode = nextProps.registrationErrorCode;\r\n }\r\n\r\n let {\r\n suggestedTldMessage,\r\n suggestedTopLevelDomain,\r\n suggestedSldMessage,\r\n suggestedServiceLevelDomain,\r\n } = this.state;\r\n\r\n if (errors.email) {\r\n suggestedTldMessage = '';\r\n suggestedTopLevelDomain = '';\r\n suggestedSldMessage = '';\r\n suggestedServiceLevelDomain = '';\r\n }\r\n\r\n this.setState({\r\n ...state,\r\n suggestedTldMessage,\r\n suggestedTopLevelDomain,\r\n suggestedSldMessage,\r\n suggestedServiceLevelDomain,\r\n validatePassword,\r\n });\r\n\r\n this.props.setRegistrationFormData({\r\n errors,\r\n }, true);\r\n }\r\n return false;\r\n }\r\n\r\n if (this.props.thirdPartyAuthContext.pipelineUserDetails !== nextProps.thirdPartyAuthContext.pipelineUserDetails) {\r\n const { pipelineUserDetails } = nextProps.thirdPartyAuthContext;\r\n const { registrationFormData } = this.props;\r\n\r\n // Added a conditional errors check to not fall back on pipelines data when a user explicitly edits the form.\r\n this.props.setRegistrationFormData({\r\n name: registrationFormData.errors.name ? registrationFormData.name\r\n : (registrationFormData.name || pipelineUserDetails.name || ''),\r\n email: registrationFormData.errors.email ? registrationFormData.email\r\n : (registrationFormData.email || pipelineUserDetails.email || ''),\r\n username: registrationFormData.errors.username ? registrationFormData.username\r\n : (registrationFormData.username || pipelineUserDetails.username || ''),\r\n country: registrationFormData.country || nextProps.thirdPartyAuthContext.countryCode,\r\n });\r\n return false;\r\n }\r\n\r\n if (this.props.thirdPartyAuthContext.countryCode !== nextProps.thirdPartyAuthContext.countryCode) {\r\n this.props.setRegistrationFormData({\r\n country: this.props.registrationFormData.country || nextProps.thirdPartyAuthContext.countryCode,\r\n });\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n onChangeHandler = (e) => {\r\n const { name, value, checked } = e.target;\r\n const { errors, values } = this.state;\r\n if (e.target.type === 'checkbox') {\r\n errors[name] = '';\r\n values[name] = checked;\r\n } else {\r\n values[name] = value;\r\n }\r\n const state = { errors, values };\r\n this.setState({ ...state });\r\n };\r\n\r\n handleSubmit = (e) => {\r\n e.preventDefault();\r\n\r\n const { startTime } = this.state;\r\n const totalRegistrationTime = (Date.now() - startTime) / 1000;\r\n const dynamicFieldErrorMessages = {};\r\n\r\n let payload = {\r\n name: this.state.name,\r\n username: this.state.username,\r\n email: this.state.email,\r\n is_authn_mfe: true,\r\n };\r\n\r\n if (this.props.thirdPartyAuthContext.currentProvider) {\r\n payload.social_auth_provider = this.props.thirdPartyAuthContext.currentProvider;\r\n } else {\r\n payload.password = this.state.password;\r\n }\r\n\r\n if (this.showDynamicRegistrationFields) {\r\n payload.extendedProfile = [];\r\n Object.keys(this.props.fieldDescriptions).forEach((fieldName) => {\r\n if (this.props.extendedProfile.includes(fieldName)) {\r\n payload.extendedProfile.push({ fieldName, fieldValue: this.state.values[fieldName] });\r\n } else {\r\n payload[fieldName] = this.state.values[fieldName];\r\n }\r\n dynamicFieldErrorMessages[fieldName] = this.props.fieldDescriptions[fieldName].error_message;\r\n });\r\n if (\r\n this.props.fieldDescriptions[FIELDS.HONOR_CODE]\r\n && this.props.fieldDescriptions[FIELDS.HONOR_CODE].type === 'tos_and_honor_code'\r\n ) {\r\n payload[FIELDS.HONOR_CODE] = true;\r\n }\r\n } else {\r\n payload.country = this.state.country;\r\n payload.honor_code = true;\r\n }\r\n\r\n if (!this.isFormValid(payload, dynamicFieldErrorMessages)) {\r\n this.setState(prevState => ({\r\n errorCode: FORM_SUBMISSION_ERROR,\r\n failureCount: prevState.failureCount + 1,\r\n }));\r\n return;\r\n }\r\n\r\n if (getConfig().MARKETING_EMAILS_OPT_IN) {\r\n payload.marketing_emails_opt_in = this.state.marketingOptIn;\r\n }\r\n\r\n payload = snakeCaseObject(payload);\r\n payload.totalRegistrationTime = totalRegistrationTime;\r\n\r\n // add query params to the payload\r\n payload = { ...payload, ...this.queryParams };\r\n this.setState({\r\n totalRegistrationTime,\r\n }, () => {\r\n this.props.registerNewUser(payload);\r\n });\r\n }\r\n\r\n handleOnBlur = (e) => {\r\n let { name, value } = e.target;\r\n this.setState({\r\n focusedField: '',\r\n });\r\n\r\n if (name === 'passwordValidation') {\r\n name = 'password';\r\n value = this.state.password;\r\n }\r\n const payload = {\r\n is_authn_mfe: true,\r\n form_field_key: name,\r\n email: this.state.email,\r\n username: this.state.username,\r\n password: this.state.password,\r\n name: this.state.name,\r\n honor_code: true,\r\n country: this.state.country,\r\n };\r\n this.validateInput(name, value, payload);\r\n }\r\n\r\n handleOnChange = (e) => {\r\n let { value } = e.target;\r\n if (e.target.name === 'username') {\r\n if (value.length > 30) {\r\n return;\r\n }\r\n if (value.startsWith(' ')) {\r\n value = value.substring(1);\r\n }\r\n }\r\n\r\n this.setState({\r\n [e.target.name]: value,\r\n });\r\n }\r\n\r\n handleOnFocus = (e) => {\r\n const fieldName = e.target.name;\r\n this.setState({\r\n focusedField: fieldName,\r\n });\r\n const { errors } = this.state;\r\n errors[fieldName] = '';\r\n if (fieldName === 'username') {\r\n this.props.clearUsernameSuggestions();\r\n }\r\n if (fieldName === 'countryExpand') {\r\n errors.country = '';\r\n }\r\n if (fieldName === 'passwordValidation') {\r\n errors.password = '';\r\n }\r\n\r\n this.props.setRegistrationFormData({\r\n errors,\r\n });\r\n }\r\n\r\n handleSuggestionClick = (e, suggestion) => {\r\n const { errors } = this.state;\r\n if (e.target.name === 'username') {\r\n errors.username = '';\r\n this.props.setRegistrationFormData({\r\n username: suggestion,\r\n errors,\r\n });\r\n this.props.clearUsernameSuggestions();\r\n } else if (e.target.name === 'email') {\r\n e.preventDefault();\r\n errors.email = '';\r\n this.props.setRegistrationFormData({\r\n email: suggestion,\r\n emailErrorSuggestion: null,\r\n emailWarningSuggestion: null,\r\n emailFieldBorderClass: '',\r\n errors,\r\n });\r\n }\r\n }\r\n\r\n handleUsernameSuggestionClose = () => {\r\n this.props.setRegistrationFormData({\r\n username: '',\r\n });\r\n this.props.clearUsernameSuggestions();\r\n }\r\n\r\n validateDynamicFields = (e) => {\r\n const { intl } = this.props;\r\n const { errors } = this.state;\r\n const { name, value } = e.target;\r\n if (!value.trim()) {\r\n errors[name] = this.props.fieldDescriptions[name].error_message;\r\n }\r\n if (name === 'confirm_email' && value.length > 0 && this.state.email && value !== this.state.email) {\r\n errors.confirm_email = intl.formatMessage(messages['email.do.not.match']);\r\n }\r\n this.setState({ errors });\r\n }\r\n\r\n isFormValid(payload, dynamicFieldError) {\r\n const { errors } = this.state;\r\n let isValid = true;\r\n Object.keys(payload).forEach(key => {\r\n if (!payload[key]) {\r\n errors[key] = (key in dynamicFieldError) ? dynamicFieldError[key] : this.props.intl.formatMessage(messages[`empty.${key}.field.error`]);\r\n }\r\n // Mark form invalid, if there was already a validation error for this key or we added empty field error\r\n if (errors[key]) {\r\n isValid = false;\r\n }\r\n });\r\n\r\n const state = { ...payload, errors };\r\n this.props.setRegistrationFormData({\r\n ...state,\r\n });\r\n return isValid;\r\n }\r\n\r\n validateInput(fieldName, value, payload) {\r\n let state = {};\r\n const { errors } = this.state;\r\n const { intl, statusCode } = this.props;\r\n const emailRegex = new RegExp(VALID_EMAIL_REGEX, 'i');\r\n const urlRegex = new RegExp(VALID_NAME_REGEX);\r\n\r\n switch (fieldName) {\r\n case 'email':\r\n if (!value) {\r\n errors.email = intl.formatMessage(messages['empty.email.field.error']);\r\n } else if (value.length <= 2) {\r\n errors.email = intl.formatMessage(messages['email.invalid.format.error']);\r\n } else {\r\n let emailWarningSuggestion = null;\r\n let emailErrorSuggestion = null;\r\n\r\n const [username, domainName] = value.split('@');\r\n\r\n // Check if email address is invalid. If we have a suggestion for invalid email provide that along with\r\n // error message.\r\n if (!emailRegex.test(value)) {\r\n errors.email = intl.formatMessage(messages['email.invalid.format.error']);\r\n emailErrorSuggestion = getSuggestionForInvalidEmail(domainName, username);\r\n } else {\r\n let suggestion = null;\r\n const hasMultipleSubdomains = value.match(/\\./g).length > 1;\r\n const [serviceLevelDomain, topLevelDomain] = domainName.split('.');\r\n const tldSuggestion = !DEFAULT_TOP_LEVEL_DOMAINS.includes(topLevelDomain);\r\n const serviceSuggestion = getLevenshteinSuggestion(serviceLevelDomain, DEFAULT_SERVICE_PROVIDER_DOMAINS, 2);\r\n\r\n if (DEFAULT_SERVICE_PROVIDER_DOMAINS.includes(serviceSuggestion || serviceLevelDomain)) {\r\n suggestion = `${username}@${serviceSuggestion || serviceLevelDomain}.com`;\r\n }\r\n\r\n if (!hasMultipleSubdomains && tldSuggestion) {\r\n emailErrorSuggestion = suggestion;\r\n } else if (serviceSuggestion) {\r\n emailWarningSuggestion = suggestion;\r\n } else {\r\n suggestion = getLevenshteinSuggestion(domainName, COMMON_EMAIL_PROVIDERS, 3);\r\n if (suggestion) {\r\n emailWarningSuggestion = `${username}@${suggestion}`;\r\n }\r\n }\r\n\r\n if (!hasMultipleSubdomains && tldSuggestion) {\r\n errors.email = intl.formatMessage(messages['email.invalid.format.error']);\r\n } else if (payload && statusCode !== 403) {\r\n this.props.fetchRealtimeValidations(payload);\r\n } else {\r\n errors.email = '';\r\n }\r\n if (this.state.values && this.state.values.confirm_email && value !== this.state.values.confirm_email) {\r\n errors.confirm_email = intl.formatMessage(messages['email.do.not.match']);\r\n }\r\n }\r\n state = {\r\n emailWarningSuggestion,\r\n emailErrorSuggestion,\r\n emailFieldBorderClass: emailWarningSuggestion ? 'yellow-border' : null,\r\n };\r\n }\r\n break;\r\n case 'name':\r\n if (!value.trim()) {\r\n errors.name = intl.formatMessage(messages['empty.name.field.error']);\r\n } else if (value && value.match(urlRegex)) {\r\n errors.name = intl.formatMessage(messages['name.validation.message']);\r\n } else {\r\n errors.name = '';\r\n }\r\n\r\n if (!this.state.username.trim() && value) {\r\n // fetch username suggestions based on the full name\r\n this.props.fetchRealtimeValidations(payload);\r\n }\r\n break;\r\n case 'username':\r\n if (value === ' ' && this.props.usernameSuggestions.length > 0) {\r\n errors.username = '';\r\n break;\r\n }\r\n if (!value || value.length <= 1 || value.length > 30) {\r\n errors.username = intl.formatMessage(messages['username.validation.message']);\r\n } else if (!value.match(/^[a-zA-Z0-9_-]*$/i)) {\r\n errors.username = intl.formatMessage(messages['username.format.validation.message']);\r\n } else if (payload && statusCode !== 403) {\r\n this.props.fetchRealtimeValidations(payload);\r\n } else {\r\n errors.username = '';\r\n }\r\n\r\n if (this.state.validatePassword) {\r\n this.props.fetchRealtimeValidations({ ...payload, form_field_key: 'password' });\r\n }\r\n break;\r\n case 'password':\r\n errors.password = '';\r\n if (!value || !LETTER_REGEX.test(value) || !NUMBER_REGEX.test(value) || value.length < 8) {\r\n errors.password = intl.formatMessage(messages['password.validation.message']);\r\n } else if (payload && statusCode !== 403) {\r\n this.props.fetchRealtimeValidations(payload);\r\n }\r\n break;\r\n case 'country':\r\n value = value.trim(); // eslint-disable-line no-param-reassign\r\n if (value) {\r\n const normalizedValue = value.toLowerCase();\r\n let selectedCountry = (\r\n this.countryList.find((o) => o[COUNTRY_DISPLAY_KEY].toLowerCase().trim() === normalizedValue));\r\n if (selectedCountry) {\r\n value = selectedCountry[COUNTRY_CODE_KEY]; // eslint-disable-line no-param-reassign\r\n errors.country = '';\r\n break;\r\n } else {\r\n // Handling a case here where user enters a valid country code that needs to be\r\n // evaluated and set its value as a valid value.\r\n selectedCountry = (\r\n this.countryList.find((o) => o[COUNTRY_CODE_KEY].toLowerCase().trim() === normalizedValue));\r\n if (selectedCountry) {\r\n value = selectedCountry[COUNTRY_CODE_KEY]; // eslint-disable-line no-param-reassign\r\n errors.country = '';\r\n break;\r\n }\r\n }\r\n }\r\n errors.country = intl.formatMessage(messages['empty.country.field.error']);\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n state = {\r\n ...state,\r\n [fieldName]: value,\r\n };\r\n this.props.setRegistrationFormData({\r\n ...state,\r\n errors,\r\n });\r\n\r\n return errors;\r\n }\r\n\r\n handleOnClose() {\r\n this.props.setRegistrationFormData({\r\n emailErrorSuggestion: null,\r\n });\r\n }\r\n\r\n renderEmailFeedback() {\r\n if (this.state.emailErrorSuggestion) {\r\n return (\r\n \r\n \r\n {this.props.intl.formatMessage(messages['did.you.mean.alert.text'])}{' '}\r\n { this.handleSuggestionClick(e, this.state.emailErrorSuggestion); }}\r\n >\r\n {this.state.emailErrorSuggestion}\r\n ?\r\n \r\n \r\n );\r\n }\r\n if (this.state.emailWarningSuggestion) {\r\n return (\r\n \r\n {this.props.intl.formatMessage(messages['did.you.mean.alert.text'])}:{' '}\r\n { this.handleSuggestionClick(e, this.state.emailWarningSuggestion); }}\r\n >\r\n {this.state.emailWarningSuggestion}\r\n ?\r\n \r\n );\r\n }\r\n\r\n return null;\r\n }\r\n\r\n renderThirdPartyAuth(providers, secondaryProviders, currentProvider, thirdPartyAuthApiStatus, intl) {\r\n const isInstitutionAuthActive = !!secondaryProviders.length && !currentProvider;\r\n const isSocialAuthActive = !!providers.length && !currentProvider;\r\n const isEnterpriseLoginDisabled = getConfig().DISABLE_ENTERPRISE_LOGIN;\r\n\r\n return (\r\n <>\r\n {((isEnterpriseLoginDisabled && isInstitutionAuthActive) || isSocialAuthActive) && (\r\n
\r\n {intl.formatMessage(messages['registration.other.options.heading'])}\r\n
\r\n )}\r\n\r\n {thirdPartyAuthApiStatus === PENDING_STATE ? (\r\n \r\n ) : (\r\n <>\r\n {(isEnterpriseLoginDisabled && isInstitutionAuthActive) && (\r\n \r\n )}\r\n {isSocialAuthActive && (\r\n
\r\n \r\n
\r\n )}\r\n \r\n )}\r\n \r\n );\r\n }\r\n\r\n renderForm(currentProvider,\r\n providers,\r\n secondaryProviders,\r\n thirdPartyAuthApiStatus,\r\n finishAuthUrl,\r\n submitState,\r\n intl) {\r\n if (this.props.institutionLogin) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n if (this.props.registrationResult.success) {\r\n setSurveyCookie('register');\r\n setCookie(getConfig().REGISTER_CONVERSION_COOKIE_NAME, true);\r\n setCookie('authn-returning-user');\r\n\r\n // Fire optimizely events\r\n window.optimizely = window.optimizely || [];\r\n window.optimizely.push({\r\n type: 'event',\r\n eventName: 'authn-register-conversion',\r\n tags: {\r\n value: this.state.totalRegistrationTime,\r\n },\r\n });\r\n }\r\n\r\n const honorCode = [];\r\n const formFields = this.showDynamicRegistrationFields ? (\r\n Object.keys(this.props.fieldDescriptions).map((fieldName) => {\r\n const fieldData = this.props.fieldDescriptions[fieldName];\r\n switch (fieldData.name) {\r\n case FIELDS.COUNTRY:\r\n return (\r\n \r\n this.setState(prevState => ({ values: { ...prevState.values, country: value } }))\r\n }\r\n errorCode={this.state.errorCode}\r\n />\r\n \r\n );\r\n case FIELDS.HONOR_CODE:\r\n honorCode.push(\r\n \r\n \r\n ,\r\n );\r\n return null;\r\n case FIELDS.TERMS_OF_SERVICE:\r\n honorCode.push(\r\n \r\n \r\n ,\r\n );\r\n return null;\r\n default:\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n })\r\n ) : null;\r\n\r\n return (\r\n <>\r\n \r\n {intl.formatMessage(messages['register.page.title'],\r\n { siteName: getConfig().SITE_NAME })}\r\n \r\n \r\n \r\n
\r\n {this.state.errorCode ? (\r\n \r\n ) : null}\r\n {currentProvider && (\r\n <>\r\n \r\n

{intl.formatMessage(messages['registration.using.tpa.form.heading'])}

\r\n \r\n )}\r\n
\r\n \r\n \r\n {this.renderEmailFeedback()}\r\n \r\n\r\n \r\n\r\n {!currentProvider && (\r\n \r\n )}\r\n {!(this.showDynamicRegistrationFields)\r\n && (\r\n \r\n )}\r\n {formFields}\r\n {(getConfig().MARKETING_EMAILS_OPT_IN)\r\n && (\r\n this.props.setRegistrationFormData({\r\n marketingOptIn: e.target.checked,\r\n })}\r\n >\r\n {intl.formatMessage(messages['registration.opt.in.label'], { siteName: getConfig().SITE_NAME })}\r\n \r\n )}\r\n {!(this.showDynamicRegistrationFields) ? (\r\n \r\n ) :
{honorCode}
}\r\n\r\n \r\n
    \r\n
  1. Kwa kujisajili nasi, moja kwa moja umekubaliana na Masharti yetu ya kutoa huduma.
  2. \r\n
  3. Tafadhali ingia kwenye ‘email’ yako ili kukamilisha usajili huu. (Angalia na ‘Spam folder’)
  4. \r\n
\r\n
\r\n\r\n e.preventDefault()}\r\n />\r\n {this.renderThirdPartyAuth(providers,\r\n secondaryProviders,\r\n currentProvider,\r\n thirdPartyAuthApiStatus,\r\n intl)}\r\n \r\n
\r\n \r\n );\r\n }\r\n\r\n render() {\r\n const { intl, submitState, thirdPartyAuthApiStatus } = this.props;\r\n const {\r\n currentProvider, finishAuthUrl, providers, secondaryProviders,\r\n } = this.props.thirdPartyAuthContext;\r\n\r\n if (this.tpaHint) {\r\n if (thirdPartyAuthApiStatus === PENDING_STATE) {\r\n return ;\r\n }\r\n const { provider, skipHintedLogin } = getTpaProvider(this.tpaHint, providers, secondaryProviders);\r\n if (skipHintedLogin) {\r\n window.location.href = getConfig().LMS_BASE_URL + provider.registerUrl;\r\n return null;\r\n }\r\n return provider ? ()\r\n : this.renderForm(\r\n currentProvider,\r\n providers,\r\n secondaryProviders,\r\n thirdPartyAuthApiStatus,\r\n finishAuthUrl,\r\n submitState,\r\n intl,\r\n );\r\n }\r\n return this.renderForm(\r\n currentProvider,\r\n providers,\r\n secondaryProviders,\r\n thirdPartyAuthApiStatus,\r\n finishAuthUrl,\r\n submitState,\r\n intl,\r\n );\r\n }\r\n}\r\n\r\nRegistrationPage.defaultProps = {\r\n extendedProfile: [],\r\n fieldDescriptions: {},\r\n optionalFields: {},\r\n registrationResult: null,\r\n registerNewUser: null,\r\n registrationErrorCode: null,\r\n submitState: DEFAULT_STATE,\r\n thirdPartyAuthApiStatus: 'pending',\r\n thirdPartyAuthContext: {\r\n currentProvider: null,\r\n finishAuthUrl: null,\r\n countryCode: null,\r\n providers: [],\r\n secondaryProviders: [],\r\n pipelineUserDetails: null,\r\n },\r\n registrationFormData: {\r\n country: '',\r\n email: '',\r\n name: '',\r\n password: '',\r\n username: '',\r\n marketingOptIn: true,\r\n errors: {\r\n email: '',\r\n name: '',\r\n username: '',\r\n password: '',\r\n country: '',\r\n },\r\n emailFieldBorderClass: '',\r\n emailErrorSuggestion: null,\r\n emailWarningSuggestion: null,\r\n },\r\n validationDecisions: null,\r\n statusCode: null,\r\n usernameSuggestions: [],\r\n};\r\n\r\nRegistrationPage.propTypes = {\r\n extendedProfile: PropTypes.arrayOf(PropTypes.string),\r\n fieldDescriptions: PropTypes.shape({}),\r\n optionalFields: PropTypes.shape({}),\r\n intl: intlShape.isRequired,\r\n getThirdPartyAuthContext: PropTypes.func.isRequired,\r\n registerNewUser: PropTypes.func,\r\n resetRegistrationForm: PropTypes.func.isRequired,\r\n setRegistrationFormData: PropTypes.func.isRequired,\r\n registrationResult: PropTypes.shape({\r\n redirectUrl: PropTypes.string,\r\n success: PropTypes.bool,\r\n }),\r\n registrationErrorCode: PropTypes.string,\r\n submitState: PropTypes.string,\r\n thirdPartyAuthApiStatus: PropTypes.string,\r\n registrationFormData: PropTypes.shape({\r\n country: PropTypes.string,\r\n email: PropTypes.string,\r\n name: PropTypes.string,\r\n password: PropTypes.string,\r\n username: PropTypes.string,\r\n marketingOptIn: PropTypes.bool,\r\n errors: PropTypes.shape({\r\n email: PropTypes.string,\r\n name: PropTypes.string,\r\n username: PropTypes.string,\r\n password: PropTypes.string,\r\n country: PropTypes.string,\r\n }),\r\n emailFieldBorderClass: PropTypes.string,\r\n emailErrorSuggestion: PropTypes.string,\r\n emailWarningSuggestion: PropTypes.string,\r\n }),\r\n thirdPartyAuthContext: PropTypes.shape({\r\n currentProvider: PropTypes.string,\r\n platformName: PropTypes.string,\r\n providers: PropTypes.array,\r\n secondaryProviders: PropTypes.array,\r\n finishAuthUrl: PropTypes.string,\r\n countryCode: PropTypes.string,\r\n pipelineUserDetails: PropTypes.shape({\r\n email: PropTypes.string,\r\n name: PropTypes.string,\r\n firstName: PropTypes.string,\r\n lastName: PropTypes.string,\r\n username: PropTypes.string,\r\n }),\r\n }),\r\n fetchRealtimeValidations: PropTypes.func.isRequired,\r\n validationDecisions: PropTypes.shape({\r\n country: PropTypes.string,\r\n email: PropTypes.string,\r\n name: PropTypes.string,\r\n password: PropTypes.string,\r\n username: PropTypes.string,\r\n }),\r\n clearUsernameSuggestions: PropTypes.func.isRequired,\r\n statusCode: PropTypes.number,\r\n usernameSuggestions: PropTypes.arrayOf(string),\r\n institutionLogin: PropTypes.bool.isRequired,\r\n handleInstitutionLogin: PropTypes.func.isRequired,\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n const registrationResult = registrationRequestSelector(state);\r\n const thirdPartyAuthContext = thirdPartyAuthContextSelector(state);\r\n return {\r\n registrationErrorCode: registrationErrorSelector(state),\r\n submitState: state.register.submitState,\r\n thirdPartyAuthApiStatus: state.commonComponents.thirdPartyAuthApiStatus,\r\n registrationResult,\r\n thirdPartyAuthContext,\r\n validationDecisions: validationsSelector(state),\r\n statusCode: state.register.statusCode,\r\n usernameSuggestions: usernameSuggestionsSelector(state),\r\n registrationFormData: registrationFormDataSelector(state),\r\n fieldDescriptions: fieldDescriptionSelector(state),\r\n optionalFields: optionalFieldsSelector(state),\r\n extendedProfile: extendedProfileSelector(state),\r\n };\r\n};\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n {\r\n clearUsernameSuggestions,\r\n getThirdPartyAuthContext,\r\n fetchRealtimeValidations,\r\n registerNewUser,\r\n resetRegistrationForm,\r\n setRegistrationFormData,\r\n },\r\n)(injectIntl(RegistrationPage));\r\n","import {\n DEFAULT_STATE,\n PENDING_STATE,\n} from '../../data/constants';\nimport {\n REGISTER_CLEAR_USERNAME_SUGGESTIONS,\n REGISTER_FORM_VALIDATIONS,\n REGISTER_NEW_USER,\n REGISTER_PERSIST_FORM_DATA, REGISTER_SET_COUNTRY_CODE,\n REGISTRATION_FORM,\n} from './actions';\n\nexport const defaultState = {\n registrationError: {},\n registrationResult: {},\n registrationFormData: {\n country: '',\n email: '',\n name: '',\n password: '',\n username: '',\n marketingOptIn: true,\n errors: {\n email: '',\n name: '',\n username: '',\n password: '',\n country: '',\n },\n emailFieldBorderClass: '',\n emailErrorSuggestion: null,\n emailWarningSuggestion: null,\n },\n validations: null,\n statusCode: null,\n usernameSuggestions: [],\n extendedProfile: [],\n fieldDescriptions: {},\n formRenderState: DEFAULT_STATE,\n};\n\nconst reducer = (state = defaultState, action) => {\n switch (action.type) {\n case REGISTRATION_FORM.RESET:\n return {\n ...defaultState,\n registrationFormData: state.registrationFormData,\n usernameSuggestions: state.usernameSuggestions,\n };\n case REGISTER_NEW_USER.BEGIN:\n return {\n ...state,\n submitState: PENDING_STATE,\n registrationError: {},\n };\n case REGISTER_NEW_USER.SUCCESS: {\n return {\n ...state,\n registrationResult: action.payload,\n };\n }\n case REGISTER_NEW_USER.FAILURE: {\n const { usernameSuggestions } = action.payload;\n return {\n ...state,\n registrationError: { ...action.payload },\n submitState: DEFAULT_STATE,\n validations: null,\n usernameSuggestions: usernameSuggestions || state.usernameSuggestions,\n };\n }\n case REGISTER_FORM_VALIDATIONS.BEGIN:\n return {\n ...state,\n };\n case REGISTER_FORM_VALIDATIONS.SUCCESS: {\n const { usernameSuggestions } = action.payload.validations;\n return {\n ...state,\n validations: action.payload.validations,\n usernameSuggestions: usernameSuggestions || state.usernameSuggestions,\n };\n }\n case REGISTER_FORM_VALIDATIONS.FAILURE:\n return {\n ...state,\n statusCode: 403,\n validations: null,\n };\n case REGISTER_CLEAR_USERNAME_SUGGESTIONS:\n return {\n ...state,\n usernameSuggestions: [],\n };\n case REGISTER_PERSIST_FORM_DATA: {\n const { formData, clearRegistrationError } = action.payload;\n return {\n ...state,\n registrationError: clearRegistrationError ? {} : state.registrationError,\n registrationFormData: {\n ...state.registrationFormData,\n ...formData,\n },\n };\n }\n case REGISTER_SET_COUNTRY_CODE: {\n const { countryCode } = action.payload;\n if (state.registrationFormData.country === '') {\n return {\n ...state,\n registrationFormData: {\n ...state.registrationFormData,\n country: countryCode,\n errors: { ...state.registrationFormData.errors, country: '' },\n },\n };\n }\n return state;\n }\n default:\n return state;\n }\n};\n\nexport default reducer;\n","import { getConfig } from '@edx/frontend-platform';\nimport { getAuthenticatedHttpClient, getHttpClient } from '@edx/frontend-platform/auth';\nimport * as QueryString from 'query-string';\n\nexport async function registerRequest(registrationInformation) {\n const requestConfig = {\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n isPublic: true,\n };\n\n const { data } = await getAuthenticatedHttpClient()\n .post(\n `${getConfig().LMS_BASE_URL}/api/user/v2/account/registration/`,\n QueryString.stringify(registrationInformation),\n requestConfig,\n )\n .catch((e) => {\n throw (e);\n });\n\n return {\n redirectUrl: data.redirect_url || `${getConfig().LMS_BASE_URL}/dashboard`,\n success: data.success || false,\n };\n}\n\nexport async function getFieldsValidations(formPayload) {\n const requestConfig = {\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n };\n\n const { data } = await getHttpClient()\n .post(\n `${getConfig().LMS_BASE_URL}/api/user/v1/validation/registration`,\n QueryString.stringify(formPayload),\n requestConfig,\n )\n .catch((e) => {\n throw (e);\n });\n\n return {\n fieldValidations: data,\n };\n}\n","import { camelCaseObject } from '@edx/frontend-platform';\nimport { logError, logInfo } from '@edx/frontend-platform/logging';\nimport { call, put, takeEvery } from 'redux-saga/effects';\n\nimport {\n fetchRealtimeValidationsBegin,\n fetchRealtimeValidationsFailure,\n fetchRealtimeValidationsSuccess,\n REGISTER_FORM_VALIDATIONS,\n REGISTER_NEW_USER,\n registerNewUserBegin,\n registerNewUserFailure,\n registerNewUserSuccess,\n} from './actions';\nimport { INTERNAL_SERVER_ERROR } from './constants';\nimport { getFieldsValidations, registerRequest } from './service';\n\nexport function* handleNewUserRegistration(action) {\n try {\n yield put(registerNewUserBegin());\n\n const { redirectUrl, success } = yield call(registerRequest, action.payload.registrationInfo);\n\n yield put(registerNewUserSuccess(\n redirectUrl,\n success,\n ));\n } catch (e) {\n const statusCodes = [400, 403, 409];\n if (e.response && statusCodes.includes(e.response.status)) {\n yield put(registerNewUserFailure(camelCaseObject(e.response.data)));\n logInfo(e);\n } else {\n yield put(registerNewUserFailure({ errorCode: INTERNAL_SERVER_ERROR }));\n logError(e);\n }\n }\n}\n\nexport function* fetchRealtimeValidations(action) {\n try {\n yield put(fetchRealtimeValidationsBegin());\n const { fieldValidations } = yield call(getFieldsValidations, action.payload.formPayload);\n\n yield put(fetchRealtimeValidationsSuccess(camelCaseObject(fieldValidations)));\n } catch (e) {\n if (e.response && e.response.status === 403) {\n yield put(fetchRealtimeValidationsFailure());\n logInfo(e);\n } else {\n logError(e);\n }\n }\n}\nexport default function* saga() {\n yield takeEvery(REGISTER_NEW_USER.BASE, handleNewUserRegistration);\n yield takeEvery(REGISTER_FORM_VALIDATIONS.BASE, fetchRealtimeValidations);\n}\n","import React, { useEffect, useState } from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { sendPageEvent, sendTrackEvent } from '@edx/frontend-platform/analytics';\nimport { getAuthService } from '@edx/frontend-platform/auth';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport {\n Icon,\n Tab,\n Tabs,\n} from '@edx/paragon';\nimport { ChevronLeft } from '@edx/paragon/icons';\nimport PropTypes from 'prop-types';\nimport { Redirect } from 'react-router-dom';\n\nimport BaseComponent from '../base-component';\nimport { LOGIN_PAGE, REGISTER_PAGE } from '../data/constants';\nimport { getTpaHint, updatePathWithQueryParams } from '../data/utils';\nimport { LoginPage } from '../login';\nimport { RegistrationPage } from '../register';\nimport messages from './messages';\n\nconst Logistration = (props) => {\n const { intl, selectedPage } = props;\n const tpa = getTpaHint();\n const [institutionLogin, setInstitutionLogin] = useState(false);\n const [key, setKey] = useState('');\n const disablePublicAccountCreation = getConfig().ALLOW_PUBLIC_ACCOUNT_CREATION === false;\n\n useEffect(() => {\n const authService = getAuthService();\n if (authService) {\n authService.getCsrfTokenService().getCsrfToken(getConfig().LMS_BASE_URL);\n }\n });\n\n const handleInstitutionLogin = (e) => {\n sendTrackEvent('edx.bi.institution_login_form.toggled', { category: 'user-engagement' });\n if (typeof e === 'string') {\n sendPageEvent('login_and_registration', e === '/login' ? 'login' : 'register');\n } else {\n sendPageEvent('login_and_registration', e.target.dataset.eventName);\n }\n\n setInstitutionLogin(!institutionLogin);\n };\n\n const handleOnSelect = (tabKey) => {\n sendTrackEvent(`edx.bi.${tabKey.replace('/', '')}_form.toggled`, { category: 'user-engagement' });\n setKey(tabKey);\n };\n\n const tabTitle = (\n
\n \n \n {selectedPage === LOGIN_PAGE\n ? intl.formatMessage(messages['logistration.sign.in'])\n : intl.formatMessage(messages['logistration.register'])}\n \n
\n );\n\n return (\n \n
\n {disablePublicAccountCreation\n ? (\n <>\n \n {institutionLogin && (\n \n \n \n )}\n
\n {!institutionLogin && (\n

{intl.formatMessage(messages['logistration.sign.in'])}

\n )}\n \n
\n \n )\n : (\n
\n {institutionLogin\n ? (\n \n \n \n )\n : (\n <>\n {!tpa && (\n \n \n \n \n )}\n \n )}\n { key && (\n \n )}\n
\n {selectedPage === LOGIN_PAGE\n ? \n : (\n \n )}\n
\n
\n )}\n
\n
\n );\n};\n\nLogistration.propTypes = {\n intl: intlShape.isRequired,\n selectedPage: PropTypes.string,\n};\n\nLogistration.defaultProps = {\n selectedPage: REGISTER_PAGE,\n};\n\nexport default injectIntl(Logistration);\n","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","import { createSelector } from 'reselect';\n\nexport const storeName = 'forgotPassword';\n\nexport const forgotPasswordSelector = state => ({ ...state[storeName] });\n\nexport const forgotPasswordResultSelector = createSelector(\n forgotPasswordSelector,\n forgotPassword => forgotPassword,\n);\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n 'forgot.password.page.title': {\n id: 'forgot.password.page.title',\n defaultMessage: 'Forgot Password | {siteName}',\n description: 'forgot password page title',\n },\n 'forgot.password.page.heading': {\n id: 'forgot.password.page.heading',\n defaultMessage: 'Reset password',\n description: 'The page heading for the forgot password page.',\n },\n 'forgot.password.page.instructions': {\n id: 'forgot.password.page.instructions',\n defaultMessage: 'Please enter your email address below and we will send you an email with instructions on how to reset your password.',\n description: 'Instructions message for forgot password page.',\n },\n 'forgot.password.page.invalid.email.message': {\n id: 'forgot.password.page.invalid.email.message',\n defaultMessage: 'Enter a valid email address',\n description: 'Invalid email address message for input field.',\n },\n 'forgot.password.page.email.field.label': {\n id: 'forgot.password.page.email.field.label',\n defaultMessage: 'Email',\n description: 'Email field label for the forgot password page.',\n },\n 'forgot.password.page.submit.button': {\n id: 'forgot.password.page.submit.button',\n defaultMessage: 'Submit',\n description: 'Submit button text for the forgot password page.',\n },\n 'forgot.password.error.alert.title': {\n id: 'forgot.password.error.alert.title.',\n defaultMessage: 'We were unable to contact you.',\n description: 'Failed to send password recovery email.',\n },\n 'forgot.password.error.message.title': {\n id: 'forgot.password.error.message.title',\n defaultMessage: 'An error occurred.',\n description: 'Title for message that appears when error occurs for password assistance page',\n },\n 'forgot.password.request.in.progress.message': {\n id: 'forgot.password.request.in.progress.message',\n defaultMessage: 'Your previous request is in progress, please try again in a few moments.',\n description: 'Message displayed when previous password reset request is still in progress.',\n },\n 'forgot.password.empty.email.field.error': {\n id: 'forgot.password.empty.email.field.error',\n defaultMessage: 'Enter your email',\n description: 'Error message that appears when user tries to submit empty email field',\n },\n 'forgot.password.invalid.email.message': {\n id: 'forgot.password.invalid.email.message',\n defaultMessage: \"The email address you've provided isn't formatted correctly.\",\n description: 'message for invalid email',\n },\n 'forgot.password.email.help.text': {\n id: 'forgot.password.email.help.text',\n defaultMessage: 'The email address you used to register with {platformName}',\n description: 'text help for the email',\n },\n // Confirmation Alert Message\n 'confirmation.message.title': {\n id: 'confirmation.message.title',\n defaultMessage: 'Check your email',\n description: 'Forgot password confirmation message title',\n },\n 'confirmation.support.link': {\n id: 'confirmation.support.link',\n defaultMessage: 'contact technical support',\n description: 'Technical support link text',\n },\n 'need.help.sign.in.text': {\n id: 'need.help.sign.in.text',\n defaultMessage: 'Need help signing in?',\n description: 'Sign in help link on forgot password page',\n },\n 'additional.help.text': {\n id: 'additional.help.text',\n defaultMessage: 'For additional help, contact {platformName} support at ',\n description: 'additional help text on forgot password page',\n },\n 'sign.in.text': {\n id: 'sign.in.text',\n defaultMessage: 'Sign in',\n description: 'login page link on password page',\n },\n 'extend.field.errors': {\n id: 'extend.field.errors',\n defaultMessage: '{emailError} below.',\n description: 'extends the field error for alert message',\n },\n // Reset password token validation failure\n 'invalid.token.heading': {\n id: 'invalid.token.heading',\n defaultMessage: 'Invalid password reset link',\n description: 'Alert heading when reset password link is invalid',\n },\n 'invalid.token.error.message': {\n id: 'invalid.token.error.message',\n defaultMessage: 'This password reset link is invalid. It may have been used already. Enter your email below to receive a new link.',\n description: 'Alert message when reset password link has expired or is invalid',\n },\n 'token.validation.rate.limit.error.heading': {\n id: 'token.validation.rate.limit.error.heading',\n defaultMessage: 'Too many requests',\n description: 'Too many request at server end point',\n },\n 'token.validation.rate.limit.error': {\n id: 'token.validation.rate.limit.error',\n defaultMessage: 'An error has occurred because of too many requests. Please try again after some time.',\n description: 'Error message that appears when server responds with 429 error code',\n },\n 'token.validation.internal.sever.error.heading': {\n id: 'token.validation.internal.sever.error.heading',\n defaultMessage: 'Token validation failure',\n description: 'Failed to validate reset password token error message.',\n },\n 'token.validation.internal.sever.error': {\n id: 'token.validation.internal.sever.error',\n defaultMessage: 'An error has occurred. Try refreshing the page, or check your internet connection.',\n description: 'Error message that appears when server responds with 500 error code',\n },\n // Error messages\n 'internal.server.error': {\n id: 'internal.server.error',\n defaultMessage: 'An error has occurred. Try refreshing the page, or check your internet connection.',\n description: 'Error message that appears when server responds with 500 error code',\n },\n 'rate.limit.error': {\n id: 'rate.limit.error',\n defaultMessage: 'An error has occurred because of too many requests. Please try again after some time.',\n description: 'Error message that appears when server responds with 429 error code',\n },\n});\nexport default messages;\n","import React from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { FormattedMessage, injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Alert } from '@edx/paragon';\nimport { CheckCircle, Error } from '@edx/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 { email, emailError, intl } = props;\n let message = '';\n let heading = intl.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 = intl.formatMessage(messages['confirmation.message.title']);\n message = (\n {email},\n supportLink: (\n \n {intl.formatMessage(messages['confirmation.support.link'])}\n \n ),\n }}\n />\n );\n break;\n case INTERNAL_SERVER_ERROR:\n message = intl.formatMessage(messages['internal.server.error']);\n break;\n case FORBIDDEN_STATE:\n heading = intl.formatMessage(messages['forgot.password.error.message.title']);\n message = intl.formatMessage(messages['forgot.password.request.in.progress.message']);\n break;\n case FORM_SUBMISSION_ERROR:\n message = intl.formatMessage(messages['extend.field.errors'], { emailError });\n break;\n case PASSWORD_RESET.INVALID_TOKEN:\n heading = intl.formatMessage(messages['invalid.token.heading']);\n message = intl.formatMessage(messages['invalid.token.error.message']);\n break;\n case PASSWORD_RESET.FORBIDDEN_REQUEST:\n heading = intl.formatMessage(messages['token.validation.rate.limit.error.heading']);\n message = intl.formatMessage(messages['token.validation.rate.limit.error']);\n break;\n case PASSWORD_RESET.INTERNAL_SERVER_ERROR:\n heading = intl.formatMessage(messages['token.validation.internal.sever.error.heading']);\n message = intl.formatMessage(messages['token.validation.internal.sever.error']);\n break;\n default:\n break;\n }\n\n if (message) {\n return (\n \n {heading}\n

{message}

\n \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 intl: intlShape.isRequired,\n emailError: PropTypes.string,\n};\n\nexport default injectIntl(ForgotPasswordAlert);\n","import React, { useEffect, useState } from 'react';\nimport { connect } from 'react-redux';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { sendPageEvent, sendTrackEvent } from '@edx/frontend-platform/analytics';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport {\n Form,\n Hyperlink,\n Icon,\n StatefulButton,\n Tab,\n Tabs,\n} from '@edx/paragon';\nimport { ChevronLeft } from '@edx/paragon/icons';\nimport PropTypes from 'prop-types';\nimport { Helmet } from 'react-helmet';\nimport { Redirect } from 'react-router-dom';\n\nimport BaseComponent from '../base-component';\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 = getConfig().SITE_NAME;\n const emailRegex = new RegExp(VALID_EMAIL_REGEX, 'i');\n const {\n intl, status, submitState, emailValidationError,\n } = props;\n\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 [key, setKey] = useState('');\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 = intl.formatMessage(messages['forgot.password.empty.email.field.error']);\n } else if (!emailRegex.test(value)) {\n error = intl.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
\n \n {intl.formatMessage(messages['sign.in.text'])}\n
\n );\n\n return (\n \n \n {intl.formatMessage(messages['forgot.password.page.title'],\n { siteName: getConfig().SITE_NAME })}\n \n \n
\n setKey(k)}>\n \n \n { key && (\n \n )}\n
\n
\n \n

\n {intl.formatMessage(messages['forgot.password.page.heading'])}\n

\n

\n {intl.formatMessage(messages['forgot.password.page.instructions'])}\n

\n setEmail(e.target.value)}\n handleBlur={handleBlur}\n handleFocus={handleFocus}\n helpText={[intl.formatMessage(messages['forgot.password.email.help.text'], { platformName })]}\n />\n e.preventDefault()}\n />\n {(getConfig().LOGIN_ISSUE_SUPPORT_LINK) && (\n \n {intl.formatMessage(messages['need.help.sign.in.text'])}\n \n )}\n

\n {intl.formatMessage(messages['additional.help.text'], { platformName })}\n \n {getConfig().INFO_EMAIL}\n \n

\n \n
\n
\n
\n );\n};\n\nForgotPasswordPage.propTypes = {\n email: PropTypes.string,\n emailValidationError: PropTypes.string,\n forgotPassword: PropTypes.func.isRequired,\n intl: intlShape.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)(injectIntl(ForgotPasswordPage));\n","import { INTERNAL_SERVER_ERROR, PENDING_STATE } from '../../data/constants';\nimport { PASSWORD_RESET_FAILURE } from '../../reset-password/data/actions';\nimport { FORGOT_PASSWORD, FORGOT_PASSWORD_PERSIST_FORM_DATA } from './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","import { getConfig } from '@edx/frontend-platform';\nimport { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth';\nimport formurlencoded from 'form-urlencoded';\n\n// eslint-disable-next-line import/prefer-default-export\nexport async function forgotPassword(email) {\n const requestConfig = {\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n isPublic: true,\n };\n\n const { data } = await getAuthenticatedHttpClient()\n .post(\n `${getConfig().LMS_BASE_URL}/account/password`,\n formurlencoded({ email }),\n requestConfig,\n )\n .catch((e) => {\n throw (e);\n });\n\n return data;\n}\n","import { logError, logInfo } from '@edx/frontend-platform/logging';\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 && 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","import { AsyncActionType } from '../../data/utils';\n\nexport const GET_FIELDS_DATA = new AsyncActionType('FIELD_DESCRIPTION', 'GET_FIELDS_DATA');\nexport const SAVE_USER_PROFILE = new AsyncActionType('USER_PROFILE', 'SAVE_USER_PROFILE');\n\n// save additional user information\nexport const saveUserProfile = (username, data) => ({\n type: SAVE_USER_PROFILE.BASE,\n payload: { username, data },\n});\n\nexport const saveUserProfileBegin = () => ({\n type: SAVE_USER_PROFILE.BEGIN,\n});\n\nexport const saveUserProfileSuccess = () => ({\n type: SAVE_USER_PROFILE.SUCCESS,\n});\n\nexport const saveUserProfileFailure = () => ({\n type: SAVE_USER_PROFILE.FAILURE,\n});\n","export const storeName = 'welcomePage';\n\nexport const welcomePageSelector = state => ({ ...state[storeName] });\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n 'progressive.profiling.page.title': {\n id: 'progressive.profiling.page.title',\n defaultMessage: 'Optional Fields | {siteName}',\n description: 'progressive profiling page title',\n },\n 'progressive.profiling.page.heading': {\n id: 'progressive.profiling.page.heading',\n defaultMessage: 'A few questions for you will help us get smarter.',\n description: 'The page heading for the progressive profiling page.',\n },\n 'gender.options.label': {\n id: 'gender.options.label',\n defaultMessage: 'Gender (optional)',\n description: 'Placeholder for the gender options dropdown',\n },\n 'gender.options.f': {\n id: 'gender.options.f',\n defaultMessage: 'Female',\n description: 'The label for the female gender option.',\n },\n 'gender.options.m': {\n id: 'gender.options.m',\n defaultMessage: 'Male',\n description: 'The label for the male gender option.',\n },\n 'gender.options.o': {\n id: 'gender.options.o',\n defaultMessage: 'Other/Prefer not to say',\n description: 'The label for catch-all gender option.',\n },\n 'education.levels.label': {\n id: 'education.levels.label',\n defaultMessage: 'Highest level of education completed (optional)',\n description: 'Placeholder for the education levels dropdown.',\n },\n 'education.levels.p': {\n id: 'education.levels.p',\n defaultMessage: 'Doctorate',\n description: 'Selected by the user if their highest level of education is a doctorate degree.',\n },\n 'education.levels.m': {\n id: 'education.levels.m',\n defaultMessage: \"Master's or professional degree\",\n description: \"Selected by the user if their highest level of education is a master's or professional degree from a college or university.\",\n },\n 'education.levels.b': {\n id: 'education.levels.b',\n defaultMessage: \"Bachelor's degree\",\n description: \"Selected by the user if their highest level of education is a four year college or university bachelor's degree.\",\n },\n 'education.levels.a': {\n id: 'education.levels.a',\n defaultMessage: \"Associate's degree\",\n description: \"Selected by the user if their highest level of education is an associate's degree. 1-2 years of college or university.\",\n },\n 'education.levels.hs': {\n id: 'education.levels.hs',\n defaultMessage: 'Secondary/high school',\n description: 'Selected by the user if their highest level of education is secondary or high school. 9-12 years of education.',\n },\n 'education.levels.jhs': {\n id: 'education.levels.jhs',\n defaultMessage: 'Junior secondary/junior high/middle school',\n description: 'Selected by the user if their highest level of education is junior or middle school. 6-8 years of education.',\n },\n 'education.levels.el': {\n id: 'education.levels.el',\n defaultMessage: 'Elementary/primary school',\n description: 'Selected by the user if their highest level of education is elementary or primary school. 1-5 years of education.',\n },\n 'education.levels.none': {\n id: 'education.levels.none',\n defaultMessage: 'No formal education',\n description: 'Selected by the user to describe their education.',\n },\n 'education.levels.other': {\n id: 'education.levels.other',\n defaultMessage: 'Other education',\n description: 'Selected by the user if they have a type of education not described by the other choices.',\n },\n 'year.of.birth.label': {\n id: 'year.of.birth.label',\n defaultMessage: 'Year of birth (optional)',\n description: 'Placeholder for the year of birth options dropdown',\n },\n 'optional.fields.information.link': {\n id: 'optional.fields.information.link',\n defaultMessage: 'Learn more about how we use this information.',\n description: 'Optional fields page information link',\n },\n 'optional.fields.submit.button': {\n id: 'optional.fields.submit.button',\n defaultMessage: 'Submit',\n description: 'Submit button text',\n },\n 'optional.fields.skip.button': {\n id: 'optional.fields.skip.button',\n defaultMessage: 'Skip for now',\n description: 'Skip button text',\n },\n // modal dialog box\n 'continue.to.platform': {\n id: 'continue.to.platform',\n defaultMessage: 'Continue to {platformName}',\n description: 'Button text for modal when user chooses \"skip for now\" option',\n },\n 'modal.title': {\n id: 'modal.title',\n defaultMessage: 'Thanks for letting us know.',\n description: 'Heading for welcome page modal',\n },\n 'modal.description': {\n id: 'modal.description',\n defaultMessage: 'You can complete your profile in settings at any time if you change your mind.',\n description: 'Modal body text',\n },\n // error message\n 'welcome.page.error.heading': {\n id: 'welcome.page.error.heading',\n defaultMessage: 'We couldn\\'t update your profile',\n description: 'Error message heading',\n },\n 'welcome.page.error.message': {\n id: 'welcome.page.error.message',\n defaultMessage: 'An error occurred. You can complete your profile in settings at any time.',\n description: 'Error message body',\n },\n});\nexport default messages;\n","import React from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { ActionRow, Button, ModalDialog } from '@edx/paragon';\nimport PropTypes from 'prop-types';\n\nimport messages from './messages';\n\nconst WelcomePageModal = (props) => {\n const { intl, isOpen, redirectUrl } = props;\n const platformName = getConfig().SITE_NAME;\n\n const handleSubmit = (e) => {\n e.preventDefault();\n window.location.href = redirectUrl;\n };\n\n return (\n {}}\n size=\"sm\"\n variant=\"default\"\n hasCloseButton={false}\n >\n \n \n {intl.formatMessage(messages['modal.title'])}\n \n \n\n \n {intl.formatMessage(messages['modal.description'])}\n \n\n \n \n \n \n \n \n );\n};\n\nWelcomePageModal.propTypes = {\n intl: intlShape.isRequired,\n isOpen: PropTypes.bool,\n redirectUrl: PropTypes.string.isRequired,\n};\n\nWelcomePageModal.defaultProps = {\n isOpen: false,\n};\n\nexport default injectIntl(WelcomePageModal);\n","import React, { useEffect, useState } from 'react';\nimport { connect } from 'react-redux';\n\nimport { getConfig, snakeCaseObject } from '@edx/frontend-platform';\nimport { sendPageEvent, sendTrackEvent } from '@edx/frontend-platform/analytics';\nimport {\n AxiosJwtAuthService,\n configure as configureAuth,\n ensureAuthenticatedUser,\n getAuthenticatedUser,\n hydrateAuthenticatedUser,\n} from '@edx/frontend-platform/auth';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { getLoggingService } from '@edx/frontend-platform/logging';\nimport {\n Alert,\n Form,\n Hyperlink,\n StatefulButton,\n} from '@edx/paragon';\nimport { Error } from '@edx/paragon/icons';\nimport PropTypes from 'prop-types';\nimport { Helmet } from 'react-helmet';\n\nimport BaseComponent from '../base-component';\nimport { RedirectLogistration } from '../common-components';\nimport {\n DEFAULT_REDIRECT_URL, DEFAULT_STATE, FAILURE_STATE,\n} from '../data/constants';\nimport FormFieldRenderer from '../field-renderer';\nimport { saveUserProfile } from './data/actions';\nimport { welcomePageSelector } from './data/selectors';\nimport messages from './messages';\nimport WelcomePageModal from './WelcomePageModal';\n\nconst ProgressiveProfiling = (props) => {\n const {\n formRenderState, intl, submitState, showError,\n } = props;\n const optionalFields = props.location.state.optionalFields.fields;\n const extendedProfile = props.location.state.optionalFields.extended_profile;\n const [ready, setReady] = useState(false);\n const [registrationResult, setRegistrationResult] = useState({ redirectUrl: '' });\n const [values, setValues] = useState({});\n const [openDialog, setOpenDialog] = useState(false);\n\n const DASHBOARD_URL = getConfig().LMS_BASE_URL.concat(DEFAULT_REDIRECT_URL);\n\n useEffect(() => {\n configureAuth(AxiosJwtAuthService, { loggingService: getLoggingService(), config: getConfig() });\n ensureAuthenticatedUser(DASHBOARD_URL).then(() => {\n hydrateAuthenticatedUser().then(() => {\n setReady(true);\n });\n });\n\n if (props.location.state && props.location.state.registrationResult) {\n setRegistrationResult(props.location.state.registrationResult);\n sendPageEvent('login_and_registration', 'welcome');\n }\n }, [DASHBOARD_URL, props.location.state]);\n\n if (!props.location.state || !props.location.state.registrationResult || formRenderState === FAILURE_STATE) {\n global.location.assign(DASHBOARD_URL);\n return null;\n }\n\n if (!ready) {\n return null;\n }\n\n const handleSubmit = (e) => {\n e.preventDefault();\n const authenticatedUser = getAuthenticatedUser();\n const payload = { ...values, extendedProfile: [] };\n if (Object.keys(extendedProfile).length > 0) {\n extendedProfile.forEach(fieldName => {\n if (values[fieldName]) {\n payload.extendedProfile.push({ fieldName, fieldValue: values[fieldName] });\n }\n delete payload[fieldName];\n });\n }\n props.saveUserProfile(authenticatedUser.username, snakeCaseObject(payload));\n\n sendTrackEvent(\n 'edx.bi.welcome.page.submit.clicked',\n {\n isGenderSelected: !!values.gender,\n isYearOfBirthSelected: !!values.year_of_birth,\n isLevelOfEducationSelected: !!values.level_of_education,\n },\n );\n };\n\n const handleSkip = (e) => {\n e.preventDefault();\n setOpenDialog(true);\n sendTrackEvent('edx.bi.welcome.page.skip.link.clicked');\n };\n\n const onChangeHandler = (e) => {\n if (e.target.type === 'checkbox') {\n setValues({ ...values, [e.target.name]: e.target.checked });\n } else {\n setValues({ ...values, [e.target.name]: e.target.value });\n }\n };\n\n const formFields = Object.keys(optionalFields).map((fieldName) => {\n const fieldData = optionalFields[fieldName];\n return (\n \n \n \n );\n });\n\n return (\n <>\n \n \n {intl.formatMessage(messages['progressive.profiling.page.title'],\n { siteName: getConfig().SITE_NAME })}\n \n \n \n {props.shouldRedirect ? (\n \n ) : null}\n
\n
\n

{intl.formatMessage(messages['progressive.profiling.page.heading'])}

\n
\n
\n {showError ? (\n \n {intl.formatMessage(messages['welcome.page.error.heading'])}\n

{intl.formatMessage(messages['welcome.page.error.message'])}

\n
\n ) : null}\n
\n {formFields}\n {(getConfig().WELCOME_PAGE_SUPPORT_LINK) && (\n \n (sendTrackEvent('edx.bi.welcome.page.support.link.clicked'))}\n >\n {intl.formatMessage(messages['optional.fields.information.link'])}\n \n \n )}\n
\n e.preventDefault()}\n />\n e.preventDefault()}\n />\n
\n
\n
\n
\n \n );\n};\n\nProgressiveProfiling.propTypes = {\n // eslint-disable-next-line react/no-unused-prop-types\n extendedProfile: PropTypes.arrayOf(PropTypes.string),\n optionalFields: PropTypes.shape({}),\n formRenderState: PropTypes.string.isRequired,\n intl: intlShape.isRequired,\n location: PropTypes.shape({\n state: PropTypes.object,\n }),\n saveUserProfile: PropTypes.func.isRequired,\n showError: PropTypes.bool,\n shouldRedirect: PropTypes.bool,\n submitState: PropTypes.string,\n};\n\nProgressiveProfiling.defaultProps = {\n extendedProfile: [],\n optionalFields: {},\n location: { state: {} },\n shouldRedirect: false,\n showError: false,\n submitState: DEFAULT_STATE,\n};\n\nconst mapStateToProps = state => ({\n formRenderState: welcomePageSelector(state).formRenderState,\n shouldRedirect: welcomePageSelector(state).success,\n submitState: welcomePageSelector(state).submitState,\n showError: welcomePageSelector(state).showError,\n});\n\nexport default connect(\n mapStateToProps,\n {\n saveUserProfile,\n },\n)(injectIntl(ProgressiveProfiling));\n","import {\n DEFAULT_STATE, PENDING_STATE,\n} from '../../data/constants';\nimport { SAVE_USER_PROFILE } from './actions';\n\nexport const defaultState = {\n extendedProfile: [],\n fieldDescriptions: {},\n formRenderState: DEFAULT_STATE,\n success: false,\n submitState: DEFAULT_STATE,\n showError: false,\n};\n\nconst reducer = (state = defaultState, action) => {\n switch (action.type) {\n case SAVE_USER_PROFILE.BEGIN:\n return {\n ...state,\n submitState: PENDING_STATE,\n };\n case SAVE_USER_PROFILE.SUCCESS:\n return {\n ...state,\n success: true,\n showError: false,\n };\n case SAVE_USER_PROFILE.FAILURE:\n return {\n ...state,\n submitState: DEFAULT_STATE,\n showError: true,\n };\n default:\n return state;\n }\n};\n\nexport default reducer;\n","import { getConfig } from '@edx/frontend-platform';\nimport { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth';\n\n// eslint-disable-next-line import/prefer-default-export\nexport async function patchAccount(username, commitValues) {\n const requestConfig = {\n headers: { 'Content-Type': 'application/merge-patch+json' },\n };\n\n await getAuthenticatedHttpClient()\n .patch(\n `${getConfig().LMS_BASE_URL}/api/user/v1/accounts/${username}`,\n commitValues,\n requestConfig,\n )\n .catch((error) => {\n throw (error);\n });\n}\n","import { call, put, takeEvery } from 'redux-saga/effects';\n\nimport {\n SAVE_USER_PROFILE,\n saveUserProfileBegin,\n saveUserProfileFailure,\n saveUserProfileSuccess,\n} from './actions';\nimport { patchAccount } from './service';\n\nexport function* saveUserProfileInformation(action) {\n try {\n yield put(saveUserProfileBegin());\n yield call(patchAccount, action.payload.username, action.payload.data);\n\n yield put(saveUserProfileSuccess());\n } catch (e) {\n yield put(saveUserProfileFailure());\n }\n}\n\nexport default function* saga() {\n yield takeEvery(SAVE_USER_PROFILE.BASE, saveUserProfileInformation);\n}\n","import { combineReducers } from 'redux';\n\nimport {\n reducer as commonComponentsReducer,\n storeName as commonComponentsStoreName,\n} from '../common-components';\nimport {\n reducer as forgotPasswordReducer,\n storeName as forgotPasswordStoreName,\n} from '../forgot-password';\nimport {\n reducer as loginReducer,\n storeName as loginStoreName,\n} from '../login';\nimport {\n reducer as registerReducer,\n storeName as registerStoreName,\n} from '../register';\nimport {\n reducer as resetPasswordReducer,\n storeName as resetPasswordStoreName,\n} from '../reset-password';\nimport {\n reducer as welcomePageReducers,\n storeName as welcomePageStoreName,\n} from '../welcome';\n\nconst createRootReducer = () => combineReducers({\n [loginStoreName]: loginReducer,\n [registerStoreName]: registerReducer,\n [commonComponentsStoreName]: commonComponentsReducer,\n [forgotPasswordStoreName]: forgotPasswordReducer,\n [resetPasswordStoreName]: resetPasswordReducer,\n [welcomePageStoreName]: welcomePageReducers,\n});\nexport default createRootReducer;\n","import { all } from 'redux-saga/effects';\n\nimport { saga as commonComponentsSaga } from '../common-components';\nimport { saga as forgotPasswordSaga } from '../forgot-password';\nimport { saga as loginSaga } from '../login';\nimport { saga as registrationSaga } from '../register';\nimport { saga as resetPasswordSaga } from '../reset-password';\nimport { saga as welcomePageSaga } from '../welcome';\n\nexport default function* rootSaga() {\n yield all([\n loginSaga(),\n registrationSaga(),\n commonComponentsSaga(),\n forgotPasswordSaga(),\n resetPasswordSaga(),\n welcomePageSaga(),\n ]);\n}\n","import { getConfig } from '@edx/frontend-platform';\nimport { composeWithDevTools } from '@redux-devtools/extension';\nimport { applyMiddleware, compose, createStore } from 'redux';\nimport { createLogger } from 'redux-logger';\nimport createSagaMiddleware from 'redux-saga';\nimport thunkMiddleware from 'redux-thunk';\n\nimport createRootReducer from './reducers';\nimport rootSaga from './sagas';\n\nconst sagaMiddleware = createSagaMiddleware();\n\nfunction composeMiddleware() {\n if (getConfig().ENVIRONMENT === 'development') {\n const loggerMiddleware = createLogger({\n collapsed: true,\n });\n return composeWithDevTools(applyMiddleware(thunkMiddleware, sagaMiddleware, loggerMiddleware));\n }\n\n return compose(applyMiddleware(thunkMiddleware, sagaMiddleware));\n}\n\nexport default function configureStore(initialState = {}) {\n const store = createStore(\n createRootReducer(),\n initialState,\n composeMiddleware(),\n );\n sagaMiddleware.run(rootSaga);\n\n return store;\n}\n","import { library } from '@fortawesome/fontawesome-svg-core';\nimport {\n faApple, faFacebook, faGoogle, faMicrosoft,\n} from '@fortawesome/free-brands-svg-icons';\n\nexport default function registerIcons() {\n library.add(faApple, faFacebook, faGoogle, faMicrosoft);\n}\n","import React from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { AppProvider } from '@edx/frontend-platform/react';\nimport { Helmet } from 'react-helmet';\nimport { Redirect, Route, Switch } from 'react-router-dom';\n\nimport {\n Logistration, NotFoundPage, registerIcons, UnAuthOnlyRoute,\n} from './common-components';\nimport configureStore from './data/configureStore';\nimport {\n LOGIN_PAGE, PAGE_NOT_FOUND, PASSWORD_RESET_CONFIRM, REGISTER_PAGE, RESET_PAGE, WELCOME_PAGE,\n} from './data/constants';\nimport { updatePathWithQueryParams } from './data/utils';\nimport ForgotPasswordPage from './forgot-password';\nimport ResetPasswordPage from './reset-password';\nimport { ProgressiveProfiling } from './welcome';\nimport './index.scss';\n\nregisterIcons();\n\nconst MainApp = () => (\n \n \n \n \n \n \n \n \n } />\n \n \n \n \n \n \n \n \n \n \n);\n\nexport default MainApp;\n","import 'core-js/stable';\r\nimport 'regenerator-runtime/runtime';\r\n\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\n\r\nimport {\r\n APP_INIT_ERROR, APP_READY, initialize, mergeConfig, subscribe,\r\n} from '@edx/frontend-platform';\r\nimport { ErrorPage } from '@edx/frontend-platform/react';\r\nimport { messages as paragonMessages } from '@edx/paragon';\r\n\r\nimport appMessages from './i18n';\r\nimport MainApp from './MainApp';\r\n\r\nsubscribe(APP_READY, () => {\r\n ReactDOM.render(\r\n ,\r\n document.getElementById('root'),\r\n );\r\n});\r\n\r\nsubscribe(APP_INIT_ERROR, (error) => {\r\n ReactDOM.render(, document.getElementById('root'));\r\n});\r\n\r\ninitialize({\r\n handlers: {\r\n config: () => {\r\n mergeConfig({\r\n LOGIN_ISSUE_SUPPORT_LINK: process.env.LOGIN_ISSUE_SUPPORT_LINK || null,\r\n ACTIVATION_EMAIL_SUPPORT_LINK: process.env.ACTIVATION_EMAIL_SUPPORT_LINK || null,\r\n PASSWORD_RESET_SUPPORT_LINK: process.env.PASSWORD_RESET_SUPPORT_LINK || null,\r\n TOS_AND_HONOR_CODE: process.env.TOS_AND_HONOR_CODE || \"https://nia.tz/tos\",\r\n TOS_LINK: process.env.TOS_LINK || \"https://nia.tz/tos\",\r\n PRIVACY_POLICY: process.env.PRIVACY_POLICY || \"https://nia.tz/privacy\",\r\n USER_SURVEY_COOKIE_NAME: process.env.USER_SURVEY_COOKIE_NAME || null,\r\n COOKIE_DOMAIN: process.env.COOKIE_DOMAIN,\r\n WELCOME_PAGE_SUPPORT_LINK: process.env.WELCOME_PAGE_SUPPORT_LINK || null,\r\n DISABLE_ENTERPRISE_LOGIN: process.env.DISABLE_ENTERPRISE_LOGIN || '',\r\n INFO_EMAIL: process.env.INFO_EMAIL || 'contact@nia.tz',\r\n REGISTER_CONVERSION_COOKIE_NAME: process.env.REGISTER_CONVERSION_COOKIE_NAME || null,\r\n ENABLE_PROGRESSIVE_PROFILING: process.env.ENABLE_PROGRESSIVE_PROFILING || false,\r\n MARKETING_EMAILS_OPT_IN: process.env.MARKETING_EMAILS_OPT_IN || '',\r\n ENABLE_COPPA_COMPLIANCE: process.env.ENABLE_COPPA_COMPLIANCE || '',\r\n ENABLE_DYNAMIC_REGISTRATION_FIELDS: process.env.ENABLE_DYNAMIC_REGISTRATION_FIELDS || false,\r\n ENABLE_COOKIE_POLICY_BANNER: process.env.ENABLE_COOKIE_POLICY_BANNER || false,\r\n });\r\n },\r\n },\r\n messages: [\r\n appMessages,\r\n paragonMessages,\r\n ],\r\n});\r\n"],"names":["ar","arMessages","es","es419Messages","fr","frMessages","ititMessages","ptptMessages","dedeMessages","ca","he","id","pl","ru","ruMessages","th","uk","ukMessages","hi","hiMessages","LOGIN_PAGE","REGISTER_PAGE","RESET_PAGE","WELCOME_PAGE","DEFAULT_REDIRECT_URL","PAGE_NOT_FOUND","SUPPORTED_ICON_CLASSES","FORM_SUBMISSION_ERROR","INTERNAL_SERVER_ERROR","DEFAULT_STATE","PENDING_STATE","COMPLETE_STATE","VALID_EMAIL_REGEX","LETTER_REGEX","NUMBER_REGEX","VALID_NAME_REGEX","AUTH_PARAMS","getTpaProvider","tpaHintProvider","primaryProviders","secondaryProviders","tpaProvider","skipHintedLogin","forEach","provider","getTpaHint","params","QueryString","window","location","search","tpaHint","tpa_hint","next","index","indexOf","substring","length","updatePathWithQueryParams","path","queryParams","replace","getAllPossibleQueryParam","urlParams","Object","entries","key","value","windowScrollTo","options","document","documentElement","style","scrollTo","top","left","AsyncActionType","constructor","topic","name","this","BASE","BEGIN","SUCCESS","FAILURE","RESET","FORBIDDEN","setCookie","cookieName","cookieValue","cookieExpiry","cookies","Cookies","domain","getConfig","COOKIE_DOMAIN","expires","set","setSurveyCookie","surveyType","USER_SURVEY_COOKIE_NAME","signupTimestamp","Date","getTime","RedirectLogistration","props","finishAuthUrl","redirectUrl","redirectToWelcomePage","success","optionalFields","finalRedirectUrl","includes","LMS_BASE_URL","registrationResult","to","pathname","state","href","defaultProps","propTypes","PropTypes","authUser","setAuthUser","useState","isReady","setIsReady","useEffect","fetchAuthenticatedUser","forceRefresh","getAuthenticatedUser","then","authenticatedUser","username","global","concat","NotFoundPage","className","defaultMessage","description","defineMessages","SocialAuthProviders","intl","referrer","socialAuthProviders","handleSubmit","e","preventDefault","url","currentTarget","dataset","providerUrl","socialAuth","map","type","loginUrl","registerUrl","onClick","iconImage","src","alt","icon","iconClass","faSignInAlt","formatMessage","messages","providerName","intlShape","injectIntl","ThirdPartyAuthAlert","currentProvider","platformName","SITE_NAME","message","Alert","RenderInstitutionButton","onSubmitHandler","buttonTitle","Button","variant","Icon","Institution","InstitutionLogistration","lmsBaseUrl","headingTitle","Hyperlink","destination","LogistrationDefaultProps","LogistrationProps","THIRD_PARTY_AUTH_CONTEXT","getThirdPartyAuthContext","payload","defaultState","extendedProfile","fieldDescriptions","thirdPartyAuthApiStatus","action","fields","thirdPartyAuthContext","REGISTER_NEW_USER","REGISTER_FORM_VALIDATIONS","REGISTRATION_FORM","REGISTER_CLEAR_USERNAME_SUGGESTIONS","REGISTER_PERSIST_FORM_DATA","REGISTER_SET_COUNTRY_CODE","registerNewUserFailure","error","async","requestConfig","headers","isPublic","data","getAuthenticatedHttpClient","get","catch","registration_fields","optional_fields","camelCaseObject","convertKeyNames","context_data","fullname","fetchThirdPartyAuthContext","put","call","countryCode","getThirdPartyAuthContextSuccess","logError","saga","takeEvery","storeName","commonComponentsSelector","thirdPartyAuthContextSelector","createSelector","commonComponents","fieldDescriptionSelector","extendedProfileSelector","optionalFieldsSelector","FormGroup","hasFocus","setHasFocus","Form","controlId","isInvalid","errorMessage","as","readOnly","autoComplete","spellCheck","onFocus","handleFocus","onBlur","handleBlur","handleClick","onChange","handleChange","controlClassName","borderClass","trailingElement","floatingLabel","TransitionReplace","helpText","toString","hasIcon","children","PasswordField","isPasswordHidden","setHiddenTrue","setHiddenFalse","useToggle","showTooltip","setShowTooltip","showRequirements","setTimeout","HideButton","IconButton","VisibilityOff","iconAs","size","ShowButton","Visibility","placement","innerWidth","tooltip","Tooltip","test","Check","Remove","Overlay","O","overlay","show","AuthLargeLayout","MARKETING_SITE_BASE_URL","Image","LOGO_URL","siteName","preserveAspectRatio","transform","x","y","height","width","AuthMediumLayout","AuthSmallLayout","LargeLayout","LOGO_WHITE_URL","classNames","MediumLayout","SmallLayout","BaseComponent","showWelcomeBanner","ENABLE_COOKIE_POLICY_BANNER","languageCode","getLocale","maxWidth","breakpoints","minWidth","EnterpriseSSO","disablePublicAccountCreation","ALLOW_PUBLIC_ACCOUNT_CREATION","ResetPasswordSuccess","INVALID_FORM","FORBIDDEN_REQUEST","ACCOUNT_ACTIVATION_MESSAGE","AccountActivationMessage","messageType","activationOrVerification","MARKETING_EMAILS_OPT_IN","activationMessage","heading","iconMapping","CheckCircle","Error","supportLink","ACTIVATION_EMAIL_SUPPORT_LINK","values","LOGIN_REQUEST","LOGIN_PERSIST_FORM_DATA","LOGIN_REMOVE_PASSWORD_RESET_BANNER","loginRequestFailure","loginError","loginSelector","loginRequestSelector","login","loginResult","loginErrorSelector","loginFormDataSelector","loginFormData","ChangePasswordPrompt","isMobileView","breakpoint","isMobileWindow","setIsMobileWindow","checkForMobile","matchMedia","matches","addEventListener","removeEventListener","useMobileResponsive","redirectToResetPasswordPage","setRedirectToResetPasswordPage","handlers","handleToggleOff","isOpen","open","close","ModalDialog","title","onClose","hasCloseButton","ActionRow","LoginFailureMessage","context","errorCode","authService","getAuthService","errorList","resetLink","isInline","lineBreak","email","tpaLink","allowedDomain","remainingAttempts","failureCount","getCsrfTokenService","clearCsrfTokenCache","LoginPage","React","super","resetPassword","loginRemovePasswordResetBanner","setState","isSubmitted","emailOrUsername","password","emailValidationError","validateEmail","passwordValidationError","validatePassword","setLoginFormData","errors","email_or_username","loginRequest","target","sendTrackEvent","category","componentDidMount","sendPageEvent","loginRequestReset","shouldComponentUpdate","nextProps","nextState","componentWillUnmount","getEnterPriseLoginURL","renderThirdPartyAuth","providers","isInstitutionAuthActive","isSocialAuthActive","isEnterpriseLoginDisabled","DISABLE_ENTERPRISE_LOGIN","count","handleInstitutionLogin","renderForm","submitState","activationMsgType","account_activation_status","institutionLogin","optimizely","push","eventName","Helmet","LoginFailure","behavior","handleOnFocus","handleOnBlur","StatefulButton","labels","default","pending","onMouseDown","handleForgotPasswordLinkClickEvent","render","connect","creds","formData","RESET_PASSWORD","VALIDATE_TOKEN","PASSWORD_RESET_FAILURE","passwordResetFailure","resetPasswordFailure","errorMsg","TOKEN_STATE","PASSWORD_RESET_ERROR","PASSWORD_VALIDATION_ERROR","PASSWORD_RESET","resetPasswordResultSelector","validateToken","token","getHttpClient","post","formurlencoded","URL","is_account_recovery","searchParams","append","ResetPasswordFailure","ResetPasswordPage","newPassword","setNewPassword","confirmPassword","setConfirmPassword","formErrors","setFormErrors","setErrorCode","setKey","status","validateInput","reset_password_page","validation_decisions","err","validatePasswordFromBackend","some","tabTitle","ChevronLeft","Tabs","activeKey","onSelect","k","Tab","eventKey","event","relatedTarget","isPasswordValid","isPasswordConfirmed","formPayload","new_password1","new_password2","getQueryParameters","match","Spinner","animation","handleValidateToken","isValid","is_valid","tokenStatus","response","logInfo","handleResetPassword","resetStatus","reset_status","resetErrors","err_msg","resetPasswordSuccess","token_invalid","redirect_url","handleLoginRequest","loginRequestSuccess","statusCodes","FormFieldRenderer","formField","fieldData","onChangeHandler","isRequired","Boolean","ExpandMore","label","option","checked","FIELDS","COMMON_EMAIL_PROVIDERS","currentYear","getFullYear","years","startYear","reverse","DEFAULT_SERVICE_PROVIDER_DOMAINS","DEFAULT_TOP_LEVEL_DOMAINS","CountryDropdown","filteredItems","getItems","dropDownItems","displayValue","expandMoreButton","bind","showFieldError","selectedCountry","find","o","strToFind","filter","toLowerCase","opt","handleItemClick","handleExpandLess","handleExpandMore","prevState","expandLessButton","itemClicked","country","countryValue","normalized","parentElement","ExpandLess","handleOnChange","onClickOutside","registerSelector","registrationRequestSelector","register","registrationErrorSelector","registrationError","validationsSelector","validations","validationDecisions","keys","fieldName","field","userMessage","usernameSuggestionsSelector","usernameSuggestions","registrationFormDataSelector","registrationFormData","HonorCode","fieldType","tosAndHonorCode","TOS_AND_HONOR_CODE","privacyPolicy","PRIVACY_POLICY","RegistrationFailureMessage","TermsOfService","termsOfService","TOS_LINK","UsernameField","suggestedUsernameDiv","iconButton","suggestedUsernames","handleSuggestionClick","Close","handleUsernameSuggestionClose","string","getLevenshteinSuggestion","word","knownWords","similarityThreshold","minEditDistance","mostSimilar","i","editDistance","distance","RegistrationPage","startTime","totalRegistrationTime","now","dynamicFieldErrorMessages","is_authn_mfe","social_auth_provider","showDynamicRegistrationFields","fieldValue","error_message","honor_code","isFormValid","marketing_emails_opt_in","marketingOptIn","snakeCaseObject","registerNewUser","focusedField","form_field_key","startsWith","clearUsernameSuggestions","setRegistrationFormData","suggestion","emailErrorSuggestion","emailWarningSuggestion","emailFieldBorderClass","trim","confirm_email","handleOnClose","countryList","getCountryList","ENABLE_DYNAMIC_REGISTRATION_FIELDS","pageName","isActive","save_for_later","is_register_page","resetRegistrationForm","_","registrationData","registrationErrorCode","suggestedTldMessage","suggestedTopLevelDomain","suggestedSldMessage","suggestedServiceLevelDomain","pipelineUserDetails","dynamicFieldError","statusCode","emailRegex","RegExp","urlRegex","domainName","split","hasMultipleSubdomains","serviceLevelDomain","topLevelDomain","tldSuggestion","serviceSuggestion","fetchRealtimeValidations","defaultDomains","getSuggestionForInvalidEmail","normalizedValue","renderEmailFeedback","tabIndex","REGISTER_CONVERSION_COOKIE_NAME","tags","honorCode","formFields","validateDynamicFields","ENABLE_PROGRESSIVE_PROFILING","RegistrationFailure","fontSize","role","class","firstName","lastName","registrationInfo","clearRegistrationError","formRenderState","registerRequest","registrationInformation","getFieldsValidations","fieldValidations","handleNewUserRegistration","registerNewUserSuccess","Logistration","selectedPage","tpa","setInstitutionLogin","getCsrfToken","defaultActiveKey","tabKey","FORGOT_PASSWORD","FORGOT_PASSWORD_PERSIST_FORM_DATA","forgotPasswordResultSelector","forgotPassword","ForgotPasswordAlert","emailError","PASSWORD_RESET_SUPPORT_LINK","ForgotPasswordPage","setEmail","bannerEmail","setBannerEmail","validationError","setValidationError","getValidationMessage","setForgotPasswordFormData","LOGIN_ISSUE_SUPPORT_LINK","showLaunchIcon","INFO_EMAIL","forgotPasswordFormData","handleForgotPassword","SAVE_USER_PROFILE","welcomePageSelector","WelcomePageModal","ProgressiveProfiling","showError","extended_profile","ready","setReady","setRegistrationResult","setValues","openDialog","setOpenDialog","DASHBOARD_URL","configureAuth","AxiosJwtAuthService","loggingService","getLoggingService","config","ensureAuthenticatedUser","hydrateAuthenticatedUser","assign","shouldRedirect","WELCOME_PAGE_SUPPORT_LINK","saveUserProfile","isGenderSelected","gender","isYearOfBirthSelected","year_of_birth","isLevelOfEducationSelected","level_of_education","patchAccount","commitValues","patch","saveUserProfileInformation","combineReducers","loginReducer","registerReducer","commonComponentsStoreName","commonComponentsReducer","forgotPasswordReducer","resetPasswordReducer","welcomePageReducers","rootSaga","all","loginSaga","registrationSaga","commonComponentsSaga","forgotPasswordSaga","resetPasswordSaga","welcomePageSaga","sagaMiddleware","createSagaMiddleware","composeMiddleware","ENVIRONMENT","loggerMiddleware","createLogger","collapsed","composeWithDevTools","applyMiddleware","thunkMiddleware","compose","configureStore","initialState","store","createStore","createRootReducer","run","library","faApple","faFacebook","faGoogle","faMicrosoft","AppProvider","rel","FAVICON_URL","exact","component","subscribe","APP_READY","ReactDOM","getElementById","APP_INIT_ERROR","ErrorPage","initialize","mergeConfig","process","ENABLE_COPPA_COMPLIANCE","appMessages","paragonMessages"],"sourceRoot":""}