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

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

\n \n )}\n
\n \n \n {this.renderEmailFeedback()}\n \n\n \n\n {!currentProvider && (\n \n )}\n {!(this.showDynamicRegistrationFields)\n && (\n \n )}\n {formFields}\n {(getConfig().MARKETING_EMAILS_OPT_IN)\n && (\n this.props.setRegistrationFormData({\n marketingOptIn: e.target.checked,\n })}\n >\n {intl.formatMessage(messages['registration.opt.in.label'], { siteName: getConfig().SITE_NAME })}\n \n )}\n {!(this.showDynamicRegistrationFields) ? (\n \n ) :
{honorCode}
}\n e.preventDefault()}\n />\n {this.renderThirdPartyAuth(providers,\n secondaryProviders,\n currentProvider,\n thirdPartyAuthApiStatus,\n intl)}\n \n
\n \n );\n }\n\n render() {\n const { intl, submitState, thirdPartyAuthApiStatus } = this.props;\n const {\n currentProvider, finishAuthUrl, providers, secondaryProviders,\n } = 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.registerUrl;\n return null;\n }\n return provider ? ()\n : this.renderForm(\n currentProvider,\n providers,\n secondaryProviders,\n thirdPartyAuthApiStatus,\n finishAuthUrl,\n submitState,\n intl,\n );\n }\n return this.renderForm(\n currentProvider,\n providers,\n secondaryProviders,\n thirdPartyAuthApiStatus,\n finishAuthUrl,\n submitState,\n intl,\n );\n }\n}\n\nRegistrationPage.defaultProps = {\n extendedProfile: [],\n fieldDescriptions: {},\n optionalFields: {},\n registrationResult: null,\n registerNewUser: null,\n registrationErrorCode: null,\n submitState: DEFAULT_STATE,\n thirdPartyAuthApiStatus: 'pending',\n thirdPartyAuthContext: {\n currentProvider: null,\n finishAuthUrl: null,\n countryCode: null,\n providers: [],\n secondaryProviders: [],\n pipelineUserDetails: null,\n },\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 validationDecisions: null,\n statusCode: null,\n usernameSuggestions: [],\n};\n\nRegistrationPage.propTypes = {\n extendedProfile: PropTypes.arrayOf(PropTypes.string),\n fieldDescriptions: PropTypes.shape({}),\n optionalFields: PropTypes.shape({}),\n intl: intlShape.isRequired,\n getThirdPartyAuthContext: PropTypes.func.isRequired,\n registerNewUser: PropTypes.func,\n resetRegistrationForm: PropTypes.func.isRequired,\n setRegistrationFormData: PropTypes.func.isRequired,\n registrationResult: PropTypes.shape({\n redirectUrl: PropTypes.string,\n success: PropTypes.bool,\n }),\n registrationErrorCode: PropTypes.string,\n submitState: PropTypes.string,\n thirdPartyAuthApiStatus: PropTypes.string,\n registrationFormData: PropTypes.shape({\n country: PropTypes.string,\n email: PropTypes.string,\n name: PropTypes.string,\n password: PropTypes.string,\n username: PropTypes.string,\n marketingOptIn: PropTypes.bool,\n errors: PropTypes.shape({\n email: PropTypes.string,\n name: PropTypes.string,\n username: PropTypes.string,\n password: PropTypes.string,\n country: PropTypes.string,\n }),\n emailFieldBorderClass: PropTypes.string,\n emailErrorSuggestion: PropTypes.string,\n emailWarningSuggestion: PropTypes.string,\n }),\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 countryCode: PropTypes.string,\n pipelineUserDetails: PropTypes.shape({\n email: PropTypes.string,\n name: PropTypes.string,\n firstName: PropTypes.string,\n lastName: PropTypes.string,\n username: PropTypes.string,\n }),\n }),\n fetchRealtimeValidations: PropTypes.func.isRequired,\n validationDecisions: PropTypes.shape({\n country: PropTypes.string,\n email: PropTypes.string,\n name: PropTypes.string,\n password: PropTypes.string,\n username: PropTypes.string,\n }),\n clearUsernameSuggestions: PropTypes.func.isRequired,\n statusCode: PropTypes.number,\n usernameSuggestions: PropTypes.arrayOf(string),\n institutionLogin: PropTypes.bool.isRequired,\n handleInstitutionLogin: PropTypes.func.isRequired,\n};\n\nconst mapStateToProps = state => {\n const registrationResult = registrationRequestSelector(state);\n const thirdPartyAuthContext = thirdPartyAuthContextSelector(state);\n return {\n registrationErrorCode: registrationErrorSelector(state),\n submitState: state.register.submitState,\n thirdPartyAuthApiStatus: state.commonComponents.thirdPartyAuthApiStatus,\n registrationResult,\n thirdPartyAuthContext,\n validationDecisions: validationsSelector(state),\n statusCode: state.register.statusCode,\n usernameSuggestions: usernameSuggestionsSelector(state),\n registrationFormData: registrationFormDataSelector(state),\n fieldDescriptions: fieldDescriptionSelector(state),\n optionalFields: optionalFieldsSelector(state),\n extendedProfile: extendedProfileSelector(state),\n };\n};\n\nexport default connect(\n mapStateToProps,\n {\n clearUsernameSuggestions,\n getThirdPartyAuthContext,\n fetchRealtimeValidations,\n registerNewUser,\n resetRegistrationForm,\n setRegistrationFormData,\n },\n)(injectIntl(RegistrationPage));\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\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 {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\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 \n {intl.formatMessage(messages['need.help.sign.in.text'])}\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 \n (sendTrackEvent('edx.bi.welcome.page.support.link.clicked'))}\n >\n {intl.formatMessage(messages['optional.fields.information.link'])}\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';\nimport 'regenerator-runtime/runtime';\n\nimport React from 'react';\nimport ReactDOM from 'react-dom';\n\nimport {\n APP_INIT_ERROR, APP_READY, initialize, mergeConfig, subscribe,\n} from '@edx/frontend-platform';\nimport { ErrorPage } from '@edx/frontend-platform/react';\nimport { messages as paragonMessages } from '@edx/paragon';\n\nimport appMessages from './i18n';\nimport MainApp from './MainApp';\n\nsubscribe(APP_READY, () => {\n ReactDOM.render(\n ,\n document.getElementById('root'),\n );\n});\n\nsubscribe(APP_INIT_ERROR, (error) => {\n ReactDOM.render(, document.getElementById('root'));\n});\n\ninitialize({\n handlers: {\n config: () => {\n mergeConfig({\n LOGIN_ISSUE_SUPPORT_LINK: process.env.LOGIN_ISSUE_SUPPORT_LINK || null,\n ACTIVATION_EMAIL_SUPPORT_LINK: process.env.ACTIVATION_EMAIL_SUPPORT_LINK || null,\n PASSWORD_RESET_SUPPORT_LINK: process.env.PASSWORD_RESET_SUPPORT_LINK || null,\n TOS_AND_HONOR_CODE: process.env.TOS_AND_HONOR_CODE || null,\n TOS_LINK: process.env.TOS_LINK || null,\n PRIVACY_POLICY: process.env.PRIVACY_POLICY || null,\n USER_SURVEY_COOKIE_NAME: process.env.USER_SURVEY_COOKIE_NAME || null,\n COOKIE_DOMAIN: process.env.COOKIE_DOMAIN,\n WELCOME_PAGE_SUPPORT_LINK: process.env.WELCOME_PAGE_SUPPORT_LINK || null,\n DISABLE_ENTERPRISE_LOGIN: process.env.DISABLE_ENTERPRISE_LOGIN || '',\n INFO_EMAIL: process.env.INFO_EMAIL || '',\n REGISTER_CONVERSION_COOKIE_NAME: process.env.REGISTER_CONVERSION_COOKIE_NAME || null,\n ENABLE_PROGRESSIVE_PROFILING: process.env.ENABLE_PROGRESSIVE_PROFILING || false,\n MARKETING_EMAILS_OPT_IN: process.env.MARKETING_EMAILS_OPT_IN || '',\n ENABLE_COPPA_COMPLIANCE: process.env.ENABLE_COPPA_COMPLIANCE || '',\n ENABLE_DYNAMIC_REGISTRATION_FIELDS: process.env.ENABLE_DYNAMIC_REGISTRATION_FIELDS || false,\n });\n },\n },\n messages: [\n appMessages,\n paragonMessages,\n ],\n});\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","languageCode","getLocale","maxWidth","breakpoints","minWidth","EnterpriseSSO","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","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":""}