{"version":3,"file":"app.02b4b57502e4cabdb7a5.js","mappings":"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","sources":["webpack://@edx/frontend-app-authn/./src/config/index.js","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/data/utils.js","webpack://@edx/frontend-app-authn/./src/register/messages.jsx","webpack://@edx/frontend-app-authn/./src/register/registrationFields/EmailField.jsx","webpack://@edx/frontend-app-authn/./src/register/registrationFields/UsernameField.jsx","webpack://@edx/frontend-app-authn/./src/register/registrationFields/CountryField.jsx","webpack://@edx/frontend-app-authn/./src/register/registrationFields/HonorCode.jsx","webpack://@edx/frontend-app-authn/./src/register/registrationFields/TermsOfService.jsx","webpack://@edx/frontend-app-authn/./src/register/ConfigurableRegistrationForm.jsx","webpack://@edx/frontend-app-authn/./src/register/data/selectors.js","webpack://@edx/frontend-app-authn/./src/register/RegistrationFailure.jsx","webpack://@edx/frontend-app-authn/./src/register/ThirdPartyAuth.jsx","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/common-components/Zendesk.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/data/optimizely.js","webpack://@edx/frontend-app-authn/./src/recommendations/optimizelyExperiment.js","webpack://@edx/frontend-app-authn/./src/recommendations/track.js","webpack://@edx/frontend-app-authn/./src/progressive-profiling/data/actions.js","webpack://@edx/frontend-app-authn/./src/progressive-profiling/data/selectors.js","webpack://@edx/frontend-app-authn/./src/progressive-profiling/messages.jsx","webpack://@edx/frontend-app-authn/./src/progressive-profiling/ProgressiveProfilingPageModal.jsx","webpack://@edx/frontend-app-authn/./src/progressive-profiling/ProgressiveProfiling.jsx","webpack://@edx/frontend-app-authn/./src/progressive-profiling/data/reducers.js","webpack://@edx/frontend-app-authn/./src/progressive-profiling/data/service.js","webpack://@edx/frontend-app-authn/./src/progressive-profiling/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/recommendations/data/constants.js","webpack://@edx/frontend-app-authn/./src/recommendations/data/service.js","webpack://@edx/frontend-app-authn/./src/recommendations/data/utils.js","webpack://@edx/frontend-app-authn/./src/recommendations/messages.js","webpack://@edx/frontend-app-authn/./src/recommendations/RecommendationCard.jsx","webpack://@edx/frontend-app-authn/./src/recommendations/RecommendationsList.jsx","webpack://@edx/frontend-app-authn/./src/recommendations/RecommendationsPage.jsx","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","webpack://@edx/frontend-app-authn/./node_modules/@edx/paragon/dist/Card/fallback-default.png"],"sourcesContent":["const configuration = {\n  // Cookies related configs\n  SESSION_COOKIE_DOMAIN: process.env.SESSION_COOKIE_DOMAIN,\n  REGISTER_CONVERSION_COOKIE_NAME: process.env.REGISTER_CONVERSION_COOKIE_NAME || null,\n  USER_SURVEY_COOKIE_NAME: process.env.USER_SURVEY_COOKIE_NAME || null,\n  // Features\n  DISABLE_ENTERPRISE_LOGIN: process.env.DISABLE_ENTERPRISE_LOGIN || '',\n  ENABLE_COOKIE_POLICY_BANNER: process.env.ENABLE_COOKIE_POLICY_BANNER || false,\n  ENABLE_DYNAMIC_REGISTRATION_FIELDS: process.env.ENABLE_DYNAMIC_REGISTRATION_FIELDS || false,\n  ENABLE_PROGRESSIVE_PROFILING_ON_AUTHN: process.env.ENABLE_PROGRESSIVE_PROFILING_ON_AUTHN || false,\n  ENABLE_PERSONALIZED_RECOMMENDATIONS: process.env.ENABLE_PERSONALIZED_RECOMMENDATIONS || false,\n  MARKETING_EMAILS_OPT_IN: process.env.MARKETING_EMAILS_OPT_IN || '',\n  SHOW_CONFIGURABLE_EDX_FIELDS: process.env.SHOW_CONFIGURABLE_EDX_FIELDS || false,\n  // Links\n  ACTIVATION_EMAIL_SUPPORT_LINK: process.env.ACTIVATION_EMAIL_SUPPORT_LINK || null,\n  AUTHN_PROGRESSIVE_PROFILING_SUPPORT_LINK: process.env.AUTHN_PROGRESSIVE_PROFILING_SUPPORT_LINK || null,\n  LOGIN_ISSUE_SUPPORT_LINK: process.env.LOGIN_ISSUE_SUPPORT_LINK || null,\n  PASSWORD_RESET_SUPPORT_LINK: process.env.PASSWORD_RESET_SUPPORT_LINK || null,\n  PRIVACY_POLICY: process.env.PRIVACY_POLICY || null,\n  TOS_AND_HONOR_CODE: process.env.TOS_AND_HONOR_CODE || null,\n  TOS_LINK: process.env.TOS_LINK || null,\n  // Miscellaneous\n  GENERAL_RECOMMENDATIONS: process.env.GENERAL_RECOMMENDATIONS || '[]',\n  INFO_EMAIL: process.env.INFO_EMAIL || '',\n  ZENDESK_KEY: process.env.ZENDESK_KEY,\n  ZENDESK_LOGO_URL: process.env.ZENDESK_LOGO_URL,\n};\n\nexport default configuration;\n","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 AUTHN_PROGRESSIVE_PROFILING = '/welcome';\nexport const DEFAULT_REDIRECT_URL = '/dashboard';\nexport const RECOMMENDATIONS = '/recommendations';\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 INVALID_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', 'track', 'is_account_recovery'];\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 getAllPossibleQueryParams = (locationURl = null) => {\n  const urlParams = locationURl ? QueryString.parseUrl(locationURl).query : 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().SESSION_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 { AUTHN_PROGRESSIVE_PROFILING, RECOMMENDATIONS } from '../data/constants';\nimport { setCookie } from '../data/utils';\n\nconst RedirectLogistration = (props) => {\n  const {\n    finishAuthUrl,\n    redirectUrl,\n    redirectToProgressiveProfilingPage,\n    success,\n    optionalFields,\n    redirectToRecommendationsPage,\n    educationLevel,\n    userId,\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    // Redirect to Progressive Profiling after successful registration\n    if (redirectToProgressiveProfilingPage) {\n      // TODO: Do we still need this cookie?\n      setCookie('van-504-returning-user', true);\n      const registrationResult = { redirectUrl: finalRedirectUrl, success };\n      return (\n        <Redirect to={{\n          pathname: AUTHN_PROGRESSIVE_PROFILING,\n          state: {\n            registrationResult,\n            optionalFields,\n          },\n        }}\n        />\n      );\n    }\n\n    // Redirect to Recommendation page\n    if (redirectToRecommendationsPage) {\n      const registrationResult = { redirectUrl: finalRedirectUrl, success };\n      return (\n        <Redirect to={{\n          pathname: RECOMMENDATIONS,\n          state: {\n            registrationResult,\n            educationLevel,\n            userId,\n          },\n        }}\n        />\n      );\n    }\n\n    window.location.href = finalRedirectUrl;\n  }\n\n  return null;\n};\n\nRedirectLogistration.defaultProps = {\n  educationLevel: null,\n  finishAuthUrl: null,\n  success: false,\n  redirectUrl: '',\n  redirectToProgressiveProfilingPage: false,\n  optionalFields: {},\n  redirectToRecommendationsPage: false,\n  userId: null,\n};\n\nRedirectLogistration.propTypes = {\n  educationLevel: PropTypes.string,\n  finishAuthUrl: PropTypes.string,\n  success: PropTypes.bool,\n  redirectUrl: PropTypes.string,\n  redirectToProgressiveProfilingPage: PropTypes.bool,\n  optionalFields: PropTypes.shape({}),\n  redirectToRecommendationsPage: PropTypes.bool,\n  userId: PropTypes.number,\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 <Route {...props} />;\n  }\n\n  return null;\n};\n\nexport default UnAuthOnlyRoute;\n","import React from 'react';\n\nimport { FormattedMessage } from '@edx/frontend-platform/i18n';\n\nconst NotFoundPage = () => (\n  <div className=\"container-fluid d-flex py-5 justify-content-center align-items-start text-center\">\n    <p className=\"my-0 py-5 text-muted mw-32em\">\n      <FormattedMessage\n        id=\"error.notfound.message\"\n        defaultMessage=\"The page you're looking for is unavailable or there's an error in the URL. Please check the URL and try again.\"\n        description=\"error message when a page does not exist\"\n      />\n    </p>\n  </div>\n);\n\nexport default NotFoundPage;\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n  // institution login strings\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  // logistration strings\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  // 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.login.button.text': {\n    id: 'enterprisetpa.login.button.text',\n    defaultMessage: 'Show me other ways to sign in or register',\n    description: 'Button text for login',\n  },\n  'enterprisetpa.login.button.text.public.account.creation.disabled': {\n    id: 'enterprisetpa.login.button.text.public.account.creation.disabled',\n    defaultMessage: 'Show me other ways to sign in',\n    description: 'Button text for login when account creation is disabled',\n  },\n  // social auth providers\n  'sso.sign.in.with': {\n    id: 'sso.sign.in.with',\n    defaultMessage: 'Sign in with {providerName}',\n    description: 'Screen reader text that appears before social auth provider name',\n  },\n  'sso.create.account.using': {\n    id: 'sso.create.account.using',\n    defaultMessage: 'Create account using {providerName}',\n    description: 'Screen reader text that appears before social auth provider name',\n  },\n  // password field strings\n  'show.password': {\n    id: 'show.password',\n    defaultMessage: 'Show password',\n    description: 'aria label for show password icon on password field',\n  },\n  'hide.password': {\n    id: 'hide.password',\n    defaultMessage: 'Hide password',\n    description: 'aria label for hide password icon on password field',\n  },\n  'one.letter': {\n    id: 'one.letter',\n    defaultMessage: '1 letter',\n    description: 'password requirement to have 1 letter',\n  },\n  'one.number': {\n    id: 'one.number',\n    defaultMessage: '1 number',\n    description: 'password requirement to have 1 number',\n  },\n  'eight.characters': {\n    id: 'eight.characters',\n    defaultMessage: '8 characters',\n    description: 'password requirement to have a minimum of 8 characters',\n  },\n  'password.sr.only.helping.text': {\n    id: 'password.sr.only.helping.text',\n    defaultMessage: 'Password must contain at least 8 characters, at least one letter, and at least one number',\n    description: 'Password helping text for the sr-only class',\n  },\n  // third party auth\n  'tpa.alert.heading': {\n    id: 'tpa.alert.heading',\n    defaultMessage: 'Almost done!',\n    description: 'Success alert heading after user has successfully signed in with social auth',\n  },\n  'login.third.party.auth.account.not.linked': {\n    id: 'login.third.party.auth.account.not.linked',\n    defaultMessage: 'You have successfully signed into {currentProvider}, but your {currentProvider} '\n                    + 'account does not have a linked {platformName} account. To link your accounts, '\n                    + 'sign in now using your {platformName} password.',\n    description: 'Message that appears on login page if user has successfully authenticated with social '\n                  + 'auth but no associated platform account exists',\n  },\n  'register.third.party.auth.account.not.linked': {\n    id: 'register.third.party.auth.account.not.linked',\n    defaultMessage: 'You\\'ve successfully signed into {currentProvider}! We just need a little more information '\n                    + 'before you start learning with {platformName}.',\n    description: 'Message that appears on register page if user has successfully authenticated with TPA '\n                  + 'but no associated platform account exists',\n  },\n  '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  supportTitle: {\n    id: 'zendesk.supportTitle',\n    description: 'Title for the support button',\n    defaultMessage: 'edX Support',\n  },\n  selectTicketForm: {\n    id: 'zendesk.selectTicketForm',\n    description: 'Select ticket form',\n    defaultMessage: 'Please choose your request type:',\n  },\n});\n\nexport default messages;\n","import React from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { useIntl } 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\nconst SocialAuthProviders = (props) => {\n  const { formatMessage } = useIntl();\n  const { 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    <button\n      id={provider.id}\n      key={provider.id}\n      type=\"button\"\n      className={`btn-social btn-${provider.id} ${index % 2 === 0 ? 'mr-3' : ''}`}\n      data-provider-url={referrer === LOGIN_PAGE ? provider.loginUrl : provider.registerUrl}\n      onClick={handleSubmit}\n    >\n      {provider.iconImage ? (\n        <div aria-hidden=\"true\">\n          <img className=\"icon-image\" src={provider.iconImage} alt={`icon ${provider.name}`} />\n        </div>\n      )\n        : (\n          <div className=\"font-container\" aria-hidden=\"true\">\n            <FontAwesomeIcon\n              icon={SUPPORTED_ICON_CLASSES.includes(provider.iconClass) ? ['fab', provider.iconClass] : faSignInAlt}\n            />\n          </div>\n        )}\n      <span id=\"provider-name\" className=\"notranslate mr-auto pl-2\" aria-hidden=\"true\">{provider.name}</span>\n      <span className=\"sr-only\">\n        {referrer === LOGIN_PAGE\n          ? formatMessage(messages['sso.sign.in.with'], { providerName: provider.name })\n          : formatMessage(messages['sso.create.account.using'], { providerName: provider.name })}\n      </span>\n    </button>\n  ));\n\n  // eslint-disable-next-line react/jsx-no-useless-fragment\n  return <>{socialAuth}</>;\n};\n\nSocialAuthProviders.defaultProps = {\n  referrer: LOGIN_PAGE,\n  socialAuthProviders: [],\n};\n\nSocialAuthProviders.propTypes = {\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    skipRegistrationForm: PropTypes.bool,\n  })),\n};\n\nexport default SocialAuthProviders;\n","import React from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { useIntl } 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 { formatMessage } = useIntl();\n  const { currentProvider, referrer } = props;\n  const platformName = getConfig().SITE_NAME;\n  let message;\n\n  if (referrer === LOGIN_PAGE) {\n    message = formatMessage(messages['login.third.party.auth.account.not.linked'], { currentProvider, platformName });\n  } else {\n    message = formatMessage(messages['register.third.party.auth.account.not.linked'], { currentProvider, platformName });\n  }\n\n  if (!currentProvider) {\n    return null;\n  }\n\n  return (\n    <>\n      <Alert id=\"tpa-alert\" className={referrer === REGISTER_PAGE ? 'alert-success mt-n2 mb-5' : 'alert-warning mt-n2 mb-5'}>\n        {referrer === REGISTER_PAGE ? (\n          <Alert.Heading>{formatMessage(messages['tpa.alert.heading'])}</Alert.Heading>\n        ) : null}\n        <p>{ message }</p>\n      </Alert>\n      {referrer === REGISTER_PAGE ? (\n        <h4 className=\"mt-4 mb-4\">{formatMessage(messages['registration.using.tpa.form.heading'])}</h4>\n      ) : null}\n    </>\n  );\n};\n\nThirdPartyAuthAlert.defaultProps = {\n  currentProvider: '',\n  referrer: LOGIN_PAGE,\n};\n\nThirdPartyAuthAlert.propTypes = {\n  currentProvider: PropTypes.string,\n  referrer: PropTypes.string,\n};\n\nexport default ThirdPartyAuthAlert;\n","import React from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { useIntl } 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\n/**\n * This component renders the Institution login button\n * */\nexport const RenderInstitutionButton = props => {\n  const { onSubmitHandler, buttonTitle } = props;\n\n  return (\n    <Button\n      className=\"btn-sm text-body p-0 mb-4 border-0\"\n      variant=\"link\"\n      data-event-name=\"institution_login\"\n      onClick={onSubmitHandler}\n    >\n      <Icon src={Institution} className=\"institute-icon\" />\n      {buttonTitle}\n    </Button>\n  );\n};\n\n/**\n * This component renders the page list of available institutions for login\n * */\nconst InstitutionLogistration = props => {\n  const lmsBaseUrl = getConfig().LMS_BASE_URL;\n  const { formatMessage } = useIntl();\n  const {\n    secondaryProviders,\n    headingTitle,\n  } = props;\n\n  return (\n    <>\n      <div className=\"d-flex justify-content-left mb-4 mt-2\">\n        <div className=\"flex-column\">\n          <h4 className=\"mb-2 font-weight-bold institute-heading\">\n            {headingTitle}\n          </h4>\n          <p className=\"mb-2\">\n            {formatMessage(messages['institution.login.page.sub.heading'])}\n          </p>\n        </div>\n      </div>\n      <div className=\"mb-5\">\n        <table className=\"pgn__data-table table-striped table-borderless\">\n          <tbody>\n            {secondaryProviders.map(provider => (\n              <tr key={provider} className=\"pgn__data-table-row\">\n                <td>\n                  <Hyperlink\n                    className=\"btn nav-item p-0 mb-1 secondary-provider-link\"\n                    destination={lmsBaseUrl + provider.loginUrl}\n                  >\n                    {provider.name}\n                  </Hyperlink>\n                </td>\n              </tr>\n            ))}\n          </tbody>\n        </table>\n      </div>\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  headingTitle: PropTypes.string,\n};\nInstitutionLogistration.defaultProps = {\n  ...LogistrationDefaultProps,\n  headingTitle: '',\n};\n\nexport default InstitutionLogistration;\n","import { AsyncActionType } from '../../data/utils';\n\nexport const THIRD_PARTY_AUTH_CONTEXT = new AsyncActionType('THIRD_PARTY_AUTH', 'GET_THIRD_PARTY_AUTH_CONTEXT');\nexport const THIRD_PARTY_AUTH_CONTEXT_CLEAR_ERROR_MSG = 'THIRD_PARTY_AUTH_CONTEXT_CLEAR_ERROR_MSG';\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\nexport const clearThirdPartyAuthContextErrorMessage = () => ({\n  type: THIRD_PARTY_AUTH_CONTEXT_CLEAR_ERROR_MSG,\n});\n","import { COMPLETE_STATE, PENDING_STATE } from '../../data/constants';\nimport { THIRD_PARTY_AUTH_CONTEXT, THIRD_PARTY_AUTH_CONTEXT_CLEAR_ERROR_MSG } from './actions';\n\nexport const defaultState = {\n  fieldDescriptions: {},\n  optionalFields: {},\n  thirdPartyAuthApiStatus: null,\n  thirdPartyAuthContext: {\n    currentProvider: null,\n    finishAuthUrl: null,\n    countryCode: null,\n    providers: [],\n    secondaryProviders: [],\n    pipelineUserDetails: null,\n    errorMessage: null,\n  },\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        fieldDescriptions: action.payload.fieldDescriptions.fields,\n        optionalFields: action.payload.optionalFields,\n        thirdPartyAuthContext: action.payload.thirdPartyAuthContext,\n        thirdPartyAuthApiStatus: COMPLETE_STATE,\n      };\n    }\n    case THIRD_PARTY_AUTH_CONTEXT.FAILURE:\n      return {\n        ...state,\n        thirdPartyAuthApiStatus: COMPLETE_STATE,\n      };\n    case THIRD_PARTY_AUTH_CONTEXT_CLEAR_ERROR_MSG:\n      return {\n        ...state,\n        thirdPartyAuthApiStatus: PENDING_STATE,\n        thirdPartyAuthContext: {\n          ...state.thirdPartyAuthContext,\n          errorMessage: null,\n        },\n      };\n    default:\n      return state;\n  }\n};\n\nexport default reducer;\n","import { AsyncActionType } from '../../data/utils';\n\nexport const BACKUP_REGISTRATION_DATA = new AsyncActionType('REGISTRATION', 'BACKUP_REGISTRATION_DATA');\nexport const REGISTER_FORM_VALIDATIONS = new AsyncActionType('REGISTRATION', 'GET_FORM_VALIDATIONS');\nexport const REGISTER_NEW_USER = new AsyncActionType('REGISTRATION', 'REGISTER_NEW_USER');\nexport const REGISTER_CLEAR_USERNAME_SUGGESTIONS = 'REGISTRATION_CLEAR_USERNAME_SUGGESTIONS';\nexport const REGISTERATION_CLEAR_BACKEND_ERROR = 'REGISTERATION_CLEAR_BACKEND_ERROR';\nexport const REGISTER_SET_COUNTRY_CODE = 'REGISTER_SET_COUNTRY_CODE';\nexport const REGISTER_SET_USER_PIPELINE_DATA_LOADED = 'REGISTER_SET_USER_PIPELINE_DATA_LOADED';\n\n// Backup registration form\nexport const backupRegistrationForm = () => ({\n  type: BACKUP_REGISTRATION_DATA.BASE,\n});\n\nexport const backupRegistrationFormBegin = (data) => ({\n  type: BACKUP_REGISTRATION_DATA.BEGIN,\n  payload: { ...data },\n});\n\n// Validate fields from the backend\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\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\nexport const clearUsernameSuggestions = () => ({\n  type: REGISTER_CLEAR_USERNAME_SUGGESTIONS,\n});\n\nexport const clearRegistertionBackendError = (fieldName) => ({\n  type: REGISTERATION_CLEAR_BACKEND_ERROR,\n  payload: fieldName,\n});\n\nexport const setCountryFromThirdPartyAuthContext = (countryCode) => ({\n  type: REGISTER_SET_COUNTRY_CODE,\n  payload: { countryCode },\n});\n\nexport const setUserPipelineDataLoaded = (value) => ({\n  type: REGISTER_SET_USER_PIPELINE_DATA_LOADED,\n  payload: { value },\n});\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 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.registrationFields || data.registration_fields,\n    optionalFields: data.optionalFields || data.optional_fields,\n    thirdPartyAuthContext: data.contextData || data.context_data,\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 {\n      fieldDescriptions, optionalFields, thirdPartyAuthContext,\n    } = yield call(getThirdPartyAuthContext, action.payload.urlParams);\n\n    yield put(setCountryFromThirdPartyAuthContext(thirdPartyAuthContext.countryCode));\n    yield put(getThirdPartyAuthContextSuccess(fieldDescriptions, optionalFields, thirdPartyAuthContext));\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 optionalFieldsSelector = createSelector(\n  commonComponentsSelector,\n  commonComponents => commonComponents.optionalFields,\n);\n\nexport const tpaProvidersSelector = createSelector(\n  commonComponentsSelector,\n  commonComponents => ({\n    providers: commonComponents.thirdPartyAuthContext.providers,\n    secondaryProviders: commonComponents.thirdPartyAuthContext.secondaryProviders,\n  }),\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    <Form.Group controlId={props.name} className={props.className} isInvalid={props.errorMessage !== ''}>\n      <Form.Control\n        as={props.as}\n        readOnly={props.readOnly}\n        type={props.type}\n        aria-invalid={props.errorMessage !== ''}\n        className=\"form-field\"\n        autoComplete={props.autoComplete}\n        spellCheck={props.spellCheck}\n        name={props.name}\n        value={props.value}\n        onFocus={handleFocus}\n        onBlur={handleOnBlur}\n        onClick={handleClick}\n        onChange={props.handleChange}\n        controlClassName={props.borderClass}\n        trailingElement={props.trailingElement}\n        floatingLabel={props.floatingLabel}\n      >\n        {props.options ? props.options() : null}\n      </Form.Control>\n      <TransitionReplace>\n        {hasFocus && props.helpText ? (\n          <Form.Control.Feedback type=\"default\" key=\"help-text\" className=\"d-block form-text-size\">\n            {props.helpText.map((message, index) => (\n              <span key={`help-text-${index.toString()}`}>\n                {message}\n                <br />\n              </span>\n            ))}\n          </Form.Control.Feedback>\n        ) : <div key=\"empty\" />}\n      </TransitionReplace>\n      {props.errorMessage !== '' && (\n        <Form.Control.Feedback key=\"error\" className=\"form-text-size\" hasIcon={false} feedback-for={props.name} type=\"invalid\">{props.errorMessage}</Form.Control.Feedback>\n      )}\n      {props.children}\n    </Form.Group>\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 { useIntl } 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 } = useIntl();\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    <IconButton onFocus={handleFocus} onBlur={handleBlur} name=\"password\" src={VisibilityOff} iconAs={Icon} onClick={setHiddenTrue} size=\"sm\" variant=\"secondary\" alt={formatMessage(messages['hide.password'])} />\n  );\n\n  const ShowButton = (\n    <IconButton onFocus={handleFocus} onBlur={handleBlur} name=\"password\" src={Visibility} iconAs={Icon} onClick={setHiddenFalse} size=\"sm\" variant=\"secondary\" alt={formatMessage(messages['show.password'])} />\n  );\n  const placement = window.innerWidth < 768 ? 'top' : 'left';\n  const tooltip = (\n    <Tooltip id={`password-requirement-${placement}`}>\n      <span id=\"letter-check\" className=\"d-flex align-items-center\">\n        {LETTER_REGEX.test(props.value) ? <Icon className=\"text-success mr-1\" src={Check} /> : <Icon className=\"mr-1 text-light-700\" src={Remove} />}\n        {formatMessage(messages['one.letter'])}\n      </span>\n      <span id=\"number-check\" className=\"d-flex align-items-center\">\n        {NUMBER_REGEX.test(props.value) ? <Icon className=\"text-success mr-1\" src={Check} /> : <Icon className=\"mr-1 text-light-700\" src={Remove} />}\n        {formatMessage(messages['one.number'])}\n      </span>\n      <span id=\"characters-check\" className=\"d-flex align-items-center\">\n        {props.value.length >= 8 ? <Icon className=\"text-success mr-1\" src={Check} /> : <Icon className=\"mr-1 text-light-700\" src={Remove} />}\n        {formatMessage(messages['eight.characters'])}\n      </span>\n    </Tooltip>\n  );\n\n  return (\n    <Form.Group controlId={props.name} isInvalid={props.errorMessage !== ''}>\n      <OverlayTrigger key=\"tooltip\" placement={placement} overlay={tooltip} show={showTooltip}>\n        <Form.Control\n          as=\"input\"\n          className=\"form-field\"\n          type={isPasswordHidden ? 'password' : 'text'}\n          name={props.name}\n          value={props.value}\n          autoComplete={props.autoComplete}\n          aria-invalid={props.errorMessage !== ''}\n          onFocus={handleFocus}\n          onBlur={handleBlur}\n          onChange={props.handleChange}\n          controlClassName={props.borderClass}\n          trailingElement={isPasswordHidden ? ShowButton : HideButton}\n          floatingLabel={props.floatingLabel}\n        />\n      </OverlayTrigger>\n      {props.errorMessage !== '' && (\n        <Form.Control.Feedback key=\"error\" className=\"form-text-size\" hasIcon={false} feedback-for={props.name} type=\"invalid\">\n          {props.errorMessage}\n          <span className=\"sr-only\">{formatMessage(messages['password.sr.only.helping.text'])}</span>\n        </Form.Control.Feedback>\n      )}\n    </Form.Group>\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  name: PropTypes.string.isRequired,\n  showRequirements: PropTypes.bool,\n  value: PropTypes.string.isRequired,\n  autoComplete: PropTypes.string,\n};\n\nexport default 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 { useIntl } from '@edx/frontend-platform/i18n';\nimport { Hyperlink, Image } from '@edx/paragon';\nimport PropTypes from 'prop-types';\n\nimport messages from './messages';\n\nconst AuthLargeLayout = ({ username }) => {\n  const { formatMessage } = useIntl();\n\n  return (\n    <div className=\"w-50 d-flex\">\n      <div className=\"col-md-10 bg-light-200 p-0\">\n        <Hyperlink destination={getConfig().MARKETING_SITE_BASE_URL}>\n          <Image className=\"logo position-absolute\" alt={getConfig().SITE_NAME} src={getConfig().LOGO_URL} />\n        </Hyperlink>\n        <div className=\"min-vh-100 d-flex align-items-center\">\n          <div className=\"large-screen-left-container mr-n4.5 large-yellow-line mt-5\" />\n          <div>\n            <h1 className=\"welcome-to-platform data-hj-suppress\">\n              {formatMessage(messages['welcome.to.platform'], { siteName: getConfig().SITE_NAME, username })}\n            </h1>\n            <h2 className=\"complete-your-profile\">\n              {formatMessage(messages['complete.your.profile.1'])}\n              <div className=\"text-accent-a\">\n                {formatMessage(messages['complete.your.profile.2'])}\n              </div>\n            </h2>\n          </div>\n        </div>\n      </div>\n      <div className=\"col-md-2 bg-white p-0\">\n        <svg className=\"m1-n1 w-100 h-100 large-screen-svg-light\" preserveAspectRatio=\"xMaxYMin meet\">\n          <g transform=\"skewX(171.6)\">\n            <rect x=\"0\" y=\"0\" height=\"100%\" width=\"100%\" />\n          </g>\n        </svg>\n      </div>\n    </div>\n  );\n};\n\nAuthLargeLayout.propTypes = {\n  username: PropTypes.string.isRequired,\n};\n\nexport default AuthLargeLayout;\n","import React from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { Hyperlink, Image } from '@edx/paragon';\nimport PropTypes from 'prop-types';\n\nimport messages from './messages';\n\nconst AuthMediumLayout = ({ username }) => {\n  const { formatMessage } = useIntl();\n\n  return (\n    <>\n      <div className=\"w-100 medium-screen-top-stripe\" />\n      <div className=\"w-100 p-0 mb-3 d-flex\">\n        <div className=\"col-md-10 bg-light-200\">\n          <Hyperlink destination={getConfig().MARKETING_SITE_BASE_URL}>\n            <Image className=\"logo\" alt={getConfig().SITE_NAME} src={getConfig().LOGO_URL} />\n          </Hyperlink>\n          <div className=\"d-flex align-items-center justify-content-center mb-4 ml-5\">\n            <div className=\"medium-yellow-line mt-5 mr-n2\" />\n            <div>\n              <h1 className=\"h3 data-hj-suppress mw-320\">\n                {formatMessage(messages['welcome.to.platform'], { siteName: getConfig().SITE_NAME, username })}\n              </h1>\n              <h2 className=\"display-1\">\n                {formatMessage(messages['complete.your.profile.1'])}\n                <div className=\"text-accent-a\">\n                  {formatMessage(messages['complete.your.profile.2'])}\n                </div>\n              </h2>\n            </div>\n          </div>\n        </div>\n        <div className=\"col-md-2 bg-white p-0\">\n          <svg className=\"w-100 h-100 medium-screen-svg-light\" preserveAspectRatio=\"xMaxYMin meet\">\n            <g transform=\"skewX(168)\">\n              <rect x=\"0\" y=\"0\" height=\"100%\" width=\"100%\" />\n            </g>\n          </svg>\n        </div>\n      </div>\n    </>\n  );\n};\n\nAuthMediumLayout.propTypes = {\n  username: PropTypes.string.isRequired,\n};\n\nexport default AuthMediumLayout;\n","import React from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { Hyperlink, Image } from '@edx/paragon';\nimport PropTypes from 'prop-types';\n\nimport messages from './messages';\n\nconst AuthSmallLayout = ({ username }) => {\n  const { formatMessage } = useIntl();\n\n  return (\n    <div className=\"min-vw-100 bg-light-200\">\n      <div className=\"col-md-12 small-screen-top-stripe\" />\n      <Hyperlink destination={getConfig().MARKETING_SITE_BASE_URL}>\n        <Image className=\"logo-small\" alt={getConfig().SITE_NAME} src={getConfig().LOGO_URL} />\n      </Hyperlink>\n      <div className=\"d-flex align-items-center mb-3 mt-3 mr-3\">\n        <div className=\"small-yellow-line mt-4.5\" />\n        <div>\n          <h1 className=\"h5 data-hj-suppress\">\n            {formatMessage(messages['welcome.to.platform'], { siteName: getConfig().SITE_NAME, username })}\n          </h1>\n          <h2 className=\"h1\">\n            {formatMessage(messages['complete.your.profile.1'])}\n            <div className=\"text-accent-a\">\n              {formatMessage(messages['complete.your.profile.2'])}\n            </div>\n          </h2>\n        </div>\n      </div>\n    </div>\n  );\n};\n\nAuthSmallLayout.propTypes = {\n  username: PropTypes.string.isRequired,\n};\n\nexport default AuthSmallLayout;\n","import React from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { Hyperlink, Image } from '@edx/paragon';\nimport classNames from 'classnames';\n\nimport messages from './messages';\n\nconst LargeLayout = () => {\n  const { formatMessage } = useIntl();\n\n  return (\n    <div className=\"w-50 d-flex\">\n      <div className=\"col-md-9 bg-primary-400\">\n        <Hyperlink destination={getConfig().MARKETING_SITE_BASE_URL}>\n          <Image className=\"logo position-absolute\" alt={getConfig().SITE_NAME} src={getConfig().LOGO_WHITE_URL} />\n        </Hyperlink>\n        <div className=\"min-vh-100 d-flex align-items-center\">\n          <div className={classNames({ 'large-yellow-line mr-n4.5': getConfig().SITE_NAME === 'edX' })} />\n          <h1\n            className={classNames(\n              'display-2 text-white mw-xs',\n              { 'ml-6': getConfig().SITE_NAME !== 'edX' },\n            )}\n          >\n            {formatMessage(messages['start.learning'])}\n            <div className=\"text-accent-a\">\n              {formatMessage(messages['with.site.name'], { siteName: getConfig().SITE_NAME })}\n            </div>\n          </h1>\n        </div>\n      </div>\n      <div className=\"col-md-3 bg-white p-0\">\n        <svg className=\"ml-n1 w-100 h-100 large-screen-svg-primary\" preserveAspectRatio=\"xMaxYMin meet\">\n          <g transform=\"skewX(171.6)\">\n            <rect x=\"0\" y=\"0\" height=\"100%\" width=\"100%\" />\n          </g>\n        </svg>\n      </div>\n    </div>\n  );\n};\n\nexport default LargeLayout;\n","import React from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { Hyperlink, Image } from '@edx/paragon';\nimport classNames from 'classnames';\n\nimport messages from './messages';\n\nconst MediumLayout = () => {\n  const { formatMessage } = useIntl();\n\n  return (\n    <>\n      <div className=\"w-100 medium-screen-top-stripe\" />\n      <div className=\"w-100 p-0 mb-3 d-flex\">\n        <div className=\"col-md-10 bg-primary-400\">\n          <Hyperlink destination={getConfig().MARKETING_SITE_BASE_URL}>\n            <Image alt={getConfig().SITE_NAME} className=\"logo\" src={getConfig().LOGO_WHITE_URL} />\n          </Hyperlink>\n          <div className=\"d-flex align-items-center justify-content-center mb-4 \">\n            <div className={classNames({ 'mt-1 medium-yellow-line': getConfig().SITE_NAME === 'edX' })} />\n            <div>\n              <h1\n                className={classNames(\n                  'display-1 text-white mt-5 mb-5 mr-2',\n                  { 'ml-4.5': getConfig().SITE_NAME !== 'edX' },\n                )}\n              >\n                <span className=\"mr-2\">{formatMessage(messages['start.learning'])}</span>\n                <span className=\"text-accent-a d-inline-block\">\n                  {formatMessage(messages['with.site.name'], { siteName: getConfig().SITE_NAME })}\n                </span>\n              </h1>\n            </div>\n          </div>\n        </div>\n        <div className=\"col-md-2 bg-white p-0\">\n          <svg className=\"w-100 h-100 medium-screen-svg-primary\" preserveAspectRatio=\"xMaxYMin meet\">\n            <g transform=\"skewX(168)\">\n              <rect x=\"0\" y=\"0\" height=\"100%\" width=\"100%\" />\n            </g>\n          </svg>\n        </div>\n      </div>\n    </>\n  );\n};\n\nexport default MediumLayout;\n","import React from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { Hyperlink, Image } from '@edx/paragon';\nimport classNames from 'classnames';\n\nimport messages from './messages';\n\nconst SmallLayout = () => {\n  const { formatMessage } = useIntl();\n\n  return (\n    <span className=\"bg-primary-400 w-100\">\n      <div className=\"col-md-12 small-screen-top-stripe\" />\n      <div>\n        <Hyperlink destination={getConfig().MARKETING_SITE_BASE_URL}>\n          <Image className=\"logo-small\" alt={getConfig().SITE_NAME} src={getConfig().LOGO_WHITE_URL} />\n        </Hyperlink>\n        <div className=\"d-flex align-items-center mb-3 mt-3 mr-3\">\n          <div className={classNames({ 'small-yellow-line mr-n2.5': getConfig().SITE_NAME === 'edX' })} />\n          <h1\n            className={classNames(\n              'text-white mt-3.5 mb-3.5',\n              { 'ml-4.5': getConfig().SITE_NAME !== 'edX' },\n            )}\n          >\n            <span className=\"mr-1\">{formatMessage(messages['start.learning'])}</span>\n            <span className=\"text-accent-a d-inline-block\">\n              {formatMessage(messages['with.site.name'], { siteName: getConfig().SITE_NAME })}\n            </span>\n          </h1>\n        </div>\n      </div>\n    </span>\n  );\n};\n\nexport default SmallLayout;\n","import React from 'react';\n\nimport CookiePolicyBanner from '@edx/frontend-component-cookie-policy-banner';\nimport { getConfig } from '@edx/frontend-platform';\nimport { getAuthenticatedUser } from '@edx/frontend-platform/auth';\nimport { getLocale } from '@edx/frontend-platform/i18n';\nimport { breakpoints } from '@edx/paragon';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport MediaQuery from 'react-responsive';\n\nimport AuthLargeLayout from './AuthLargeLayout';\nimport AuthMediumLayout from './AuthMediumLayout';\nimport AuthSmallLayout from './AuthSmallLayout';\nimport LargeLayout from './LargeLayout';\nimport MediumLayout from './MediumLayout';\nimport SmallLayout from './SmallLayout';\n\nconst BaseComponent = ({ children, showWelcomeBanner }) => {\n  const authenticatedUser = showWelcomeBanner ? getAuthenticatedUser() : null;\n  const username = authenticatedUser ? authenticatedUser.username : null;\n\n  return (\n    <>\n      {getConfig().ENABLE_COOKIE_POLICY_BANNER ? <CookiePolicyBanner languageCode={getLocale()} /> : null}\n      <div className=\"col-md-12 extra-large-screen-top-stripe\" />\n      <div className=\"layout\">\n        <MediaQuery maxWidth={breakpoints.small.maxWidth - 1}>\n          {authenticatedUser ? <AuthSmallLayout username={username} /> : <SmallLayout />}\n        </MediaQuery>\n        <MediaQuery minWidth={breakpoints.medium.minWidth} maxWidth={breakpoints.large.maxWidth - 1}>\n          {authenticatedUser ? <AuthMediumLayout username={username} /> : <MediumLayout />}\n        </MediaQuery>\n        <MediaQuery minWidth={breakpoints.extraLarge.minWidth} maxWidth={breakpoints.extraExtraLarge.maxWidth}>\n          {authenticatedUser ? <AuthLargeLayout username={username} /> : <LargeLayout />}\n        </MediaQuery>\n\n        <div className={classNames('content', { 'align-items-center mt-0': authenticatedUser })}>\n          {children}\n        </div>\n      </div>\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 { useIntl } 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\n/**\n * This component renders the Single sign-on (SSO) button only for the tpa provider passed\n * */\nconst EnterpriseSSO = (props) => {\n  const { formatMessage } = useIntl();\n  const tpaProvider = props.provider;\n  const disablePublicAccountCreation = getConfig().ALLOW_PUBLIC_ACCOUNT_CREATION === false;\n\n  const handleSubmit = (e, url) => {\n    e.preventDefault();\n    window.location.href = getConfig().LMS_BASE_URL + url;\n  };\n\n  const handleClick = (e) => {\n    e.preventDefault();\n    window.location.href = LOGIN_PAGE;\n  };\n\n  if (tpaProvider) {\n    return (\n      <div className=\"d-flex justify-content-center m-4\">\n        <div className=\"d-flex flex-column\">\n          <div className=\"mw-450\">\n            <Form className=\"m-0\">\n              <p>{formatMessage(messages['enterprisetpa.title.heading'], { providerName: tpaProvider.name })}</p>\n              <Button\n                id={tpaProvider.id}\n                key={tpaProvider.id}\n                type=\"submit\"\n                variant=\"link\"\n                className={`btn-tpa btn-${tpaProvider.id}`}\n                onClick={(e) => handleSubmit(e, tpaProvider.loginUrl)}\n              >\n                {tpaProvider.iconImage ? (\n                  <div aria-hidden=\"true\">\n                    <img className=\"icon-image\" src={tpaProvider.iconImage} alt={`icon ${tpaProvider.name}`} />\n                    <span className=\"pl-2\" aria-hidden=\"true\">{ tpaProvider.name }</span>\n                  </div>\n                )\n                  : (\n                    <>\n                      <div className=\"font-container\" aria-hidden=\"true\">\n                        <FontAwesomeIcon\n                          icon={SUPPORTED_ICON_CLASSES.includes(tpaProvider.iconClass) ? ['fab', tpaProvider.iconClass] : faSignInAlt}\n                        />\n                      </div>\n                      <span className=\"pl-2\" aria-hidden=\"true\">{ tpaProvider.name }</span>\n                    </>\n                  )}\n              </Button>\n              <div className=\"mb-4\" />\n              <Button\n                type=\"submit\"\n                id=\"other-ways-to-sign-in\"\n                variant=\"outline-primary\"\n                state=\"Complete\"\n                className=\"w-100\"\n                onClick={(e) => handleClick(e)}\n              >\n                {disablePublicAccountCreation\n                  ? formatMessage(messages['enterprisetpa.login.button.text.public.account.creation.disabled'])\n                  : formatMessage(messages['enterprisetpa.login.button.text'])}\n              </Button>\n            </Form>\n          </div>\n        </div>\n      </div>\n    );\n  }\n  return <div />;\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};\n\nexport default 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  // 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.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 { useIntl } from '@edx/frontend-platform/i18n';\nimport { Alert } from '@edx/paragon';\n\nimport messages from './messages';\n\nconst ResetPasswordSuccess = () => {\n  const { formatMessage } = useIntl();\n\n  return (\n    <Alert id=\"reset-password-success\" variant=\"success\" className=\"mb-4\">\n      <Alert.Heading>\n        {formatMessage(messages['reset.password.success.heading'])}\n      </Alert.Heading>\n      <p>{formatMessage(messages['reset.password.success'])}</p>\n    </Alert>\n  );\n};\n\nexport default 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';\nexport const TPA_AUTHENTICATION_FAILURE = 'tpa-authentication-failure';\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  'forgot.password': {\n    id: 'forgot.password',\n    defaultMessage: 'Forgot password',\n    description: 'Button text for forgot password',\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  '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  '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  '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  // 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  // 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  '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  '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.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  'login.tpa.authentication.failure': {\n    id: 'login.tpa.authentication.failure',\n    defaultMessage: 'We are sorry, you are not authorized to access {platform_name} via this channel. '\n        + 'Please contact your learning administrator or manager in order to access {platform_name}.'\n        + '{lineBreak}{lineBreak}Error Details:{lineBreak}{errorMessage}',\n    description: 'Error message third party authentication pipeline fails',\n  },\n});\n\nexport default messages;\n","import React from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { FormattedMessage, useIntl } 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 { formatMessage } = useIntl();\n  const { 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 = formatMessage(messages[`account.${activationOrVerification}.success.message.title`]);\n      activationMessage = <span>{formatMessage(messages[`account.${activationOrVerification}.success.message`])}</span>;\n      break;\n    }\n    case ACCOUNT_ACTIVATION_MESSAGE.INFO: {\n      activationMessage = formatMessage(messages[`account.${activationOrVerification}.info.message`]);\n      break;\n    }\n    case ACCOUNT_ACTIVATION_MESSAGE.ERROR: {\n      const supportLink = (\n        <Alert.Link href={getConfig().ACTIVATION_EMAIL_SUPPORT_LINK}>\n          {formatMessage(messages['account.activation.support.link'])}\n        </Alert.Link>\n      );\n\n      heading = formatMessage(messages[`account.${activationOrVerification}.error.message.title`]);\n      activationMessage = (\n        <FormattedMessage\n          id=\"account.activation.error.message\"\n          defaultMessage=\"Something went wrong, please {supportLink} to resolve this issue.\"\n          description=\"Account activation error message\"\n          values={{ supportLink }}\n        />\n      );\n      break;\n    }\n    default:\n      break;\n  }\n\n  return activationMessage ? (\n    <Alert\n      id=\"account-activation-message\"\n      className=\"mb-4\"\n      variant={variant}\n      icon={iconMapping[messageType]}\n    >\n      {heading && <Alert.Heading>{heading}</Alert.Heading>}\n      {activationMessage}\n    </Alert>\n  ) : null;\n};\n\nAccountActivationMessage.propTypes = {\n  messageType: PropTypes.string.isRequired,\n};\n\nexport default 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 { useIntl } 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 = ({ 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  const { formatMessage } = useIntl();\n\n  if (redirectToResetPasswordPage) {\n    return <Redirect to={updatePathWithQueryParams(RESET_PAGE)} />;\n  }\n  return (\n    <ModalDialog\n      title=\"Password security\"\n      isOpen={isOpen}\n      onClose={close}\n      size={isMobileView ? 'sm' : 'md'}\n      hasCloseButton={false}\n    >\n      <ModalDialog.Header>\n        <ModalDialog.Title>\n          {formatMessage(messages[`password.security.${variant}.title`])}\n        </ModalDialog.Title>\n      </ModalDialog.Header>\n      <ModalDialog.Body>\n        {formatMessage(messages[`password.security.${variant}.body`])}\n      </ModalDialog.Body>\n      <ModalDialog.Footer>\n        <ActionRow className={classNames(\n          { 'd-flex flex-column': isMobileView },\n        )}\n        >\n          {variant === 'nudge' ? (\n            <ModalDialog.CloseButton id=\"password-security-close\" variant=\"tertiary\">\n              {formatMessage(messages['password.security.close.button'])}\n            </ModalDialog.CloseButton>\n          ) : null}\n          <Link\n            id=\"password-security-reset-password\"\n            className={classNames(\n              'btn btn-primary',\n              { 'w-100': isMobileView },\n            )}\n            to={updatePathWithQueryParams(RESET_PAGE)}\n          >\n            {formatMessage(messages['password.security.redirect.to.reset.password.button'])}\n          </Link>\n        </ActionRow>\n      </ModalDialog.Footer>\n    </ModalDialog>\n  );\n};\n\nChangePasswordPrompt.defaultProps = {\n  variant: 'block',\n  redirectUrl: null,\n};\n\nChangePasswordPrompt.propTypes = {\n  variant: PropTypes.oneOf(['nudge', 'block']),\n  redirectUrl: PropTypes.string,\n};\n\nexport default ChangePasswordPrompt;\n","import React from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { getAuthService } from '@edx/frontend-platform/auth';\nimport { FormattedMessage, useIntl } 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  TPA_AUTHENTICATION_FAILURE,\n} from './data/constants';\nimport messages from './messages';\n\nconst LoginFailureMessage = (props) => {\n  const { formatMessage } = useIntl();\n  const { context, errorCode } = props.loginError;\n\n  const authService = getAuthService();\n  let errorList;\n  let resetLink = (\n    <Hyperlink destination=\"reset\" isInline>\n      {formatMessage(messages['login.incorrect.credentials.error.reset.link.text'])}\n    </Hyperlink>\n  );\n\n  switch (errorCode) {\n    case NON_COMPLIANT_PASSWORD_EXCEPTION: {\n      errorList = (\n        <>\n          <strong>{formatMessage(messages['non.compliant.password.title'])}</strong>\n          <p>{formatMessage(messages['non.compliant.password.message'])}</p>\n        </>\n      );\n      break;\n    }\n    case FORBIDDEN_REQUEST:\n      errorList = <p>{formatMessage(messages['login.rate.limit.reached.message'])}</p>;\n      break;\n    case INACTIVE_USER: {\n      const supportLink = (\n        <a href={context.supportLink}>\n          {formatMessage(messages['contact.support.link'], { platformName: context.platformName })}\n        </a>\n      );\n      errorList = (\n        <p>\n          <FormattedMessage\n            id=\"login.inactive.user.error\"\n            defaultMessage=\"In order to sign in, you need to activate your account.{lineBreak}\n            {lineBreak}We just sent an activation link to {email}. If you do not receive an email,\n            check your spam folders or {supportLink}.\"\n            values={{\n              lineBreak: <br />,\n              email: <strong className=\"data-hj-suppress\">{props.loginError.email}</strong>,\n              supportLink,\n            }}\n          />\n        </p>\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        <a href={url}>\n          {formatMessage(messages['tpa.account.link'], { provider: context.provider })}\n        </a>\n      );\n      errorList = (\n        <p>\n          <FormattedMessage\n            id=\"allowed.domain.login.error\"\n            description=\"Display this error message when staff user try to login through password\"\n            defaultMessage=\"As {allowedDomain} user, You must login with your {allowedDomain} {tpaLink}.\"\n            values={{ allowedDomain: context.allowedDomain, tpaLink }}\n          />\n        </p>\n      );\n      break;\n    }\n    case INVALID_FORM:\n      errorList = <p>{formatMessage(messages['login.form.invalid.error.message'])}</p>;\n      break;\n    case FAILED_LOGIN_ATTEMPT: {\n      resetLink = (\n        <Hyperlink destination=\"reset\" isInline>\n          {formatMessage(messages['login.incorrect.credentials.error.before.account.blocked.text'])}\n        </Hyperlink>\n      );\n      errorList = (\n        <>\n          <p>\n            <FormattedMessage\n              id=\"login.incorrect.credentials.error.attempts.text.1\"\n              description=\"Error message for incorrect email or password\"\n              defaultMessage=\"The username, email or password you entered is incorrect. You have {remainingAttempts} more sign in\n                attempts before your account is temporarily locked.\"\n              values={{ remainingAttempts: context.remainingAttempts }}\n            />\n          </p>\n          <p>\n            <FormattedMessage\n              id=\"login.incorrect.credentials.error.attempts.text.2\"\n              description=\"Part of error message for incorrect email or password\"\n              defaultMessage=\"If you've forgotten your password, {resetLink}\"\n              values={{ resetLink }}\n            />\n          </p>\n        </>\n      );\n      break;\n    }\n    case ACCOUNT_LOCKED_OUT: {\n      errorList = (\n        <>\n          <p>{formatMessage(messages['account.locked.out.message.1'])}</p>\n          <p>\n            <FormattedMessage\n              id=\"account.locked.out.message.2\"\n              description=\"Part of message for when user account has been locked out after multiple failed login attempts\"\n              defaultMessage=\"To be on the safe side, you can {resetLink} before trying again.\"\n              values={{ resetLink }}\n            />\n          </p>\n        </>\n      );\n      break;\n    }\n    case INCORRECT_EMAIL_PASSWORD:\n      if (context.failureCount <= 1) {\n        errorList = <p>{formatMessage(messages['login.incorrect.credentials.error'])}</p>;\n      } else if (context.failureCount === 2) {\n        errorList = (\n          <p>\n            <FormattedMessage\n              id=\"login.incorrect.credentials.error.with.reset.link\"\n              defaultMessage=\"The username, email, or password you entered is incorrect. Please try again or {resetLink}.\"\n              values={{ resetLink }}\n            />\n          </p>\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        <ChangePasswordPrompt\n          redirectUrl={props.loginError.redirectUrl}\n          variant=\"nudge\"\n        />\n      );\n    case REQUIRE_PASSWORD_CHANGE:\n      return <ChangePasswordPrompt />;\n    case TPA_AUTHENTICATION_FAILURE:\n      errorList = (\n        <p>{formatMessage(messages['login.tpa.authentication.failure'], {\n          platform_name: getConfig().SITE_NAME,\n          lineBreak: <br />,\n          errorMessage: context.errorMessage,\n        })}\n        </p>\n      );\n      break;\n    case INTERNAL_SERVER_ERROR:\n    default:\n      errorList = <p>{formatMessage(messages['internal.server.error.message'])}</p>;\n      break;\n  }\n\n  return (\n    <Alert id=\"login-failure-alert\" className=\"mb-5\" variant=\"danger\" icon={Error}>\n      <Alert.Heading>{formatMessage(messages['login.failure.header.title'])}</Alert.Heading>\n      { errorList }\n    </Alert>\n  );\n};\n\nLoginFailureMessage.defaultProps = {\n  loginError: {\n    redirectUrl: null,\n    errorCode: null,\n    errorMessage: null,\n  },\n};\n\nLoginFailureMessage.propTypes = {\n  loginError: PropTypes.shape({\n    context: PropTypes.shape({\n      supportLink: PropTypes.string,\n      platformName: PropTypes.string,\n      tpaHint: PropTypes.string,\n      provider: PropTypes.string,\n      allowedDomain: PropTypes.string,\n      remainingAttempts: PropTypes.number,\n      failureCount: PropTypes.number,\n      errorMessage: PropTypes.string,\n    }),\n    email: PropTypes.string,\n    errorCode: PropTypes.string,\n    redirectUrl: PropTypes.string,\n  }),\n};\n\nexport default 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 } 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  getAllPossibleQueryParams,\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, TPA_AUTHENTICATION_FAILURE } 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 = getAllPossibleQueryParams();\n    this.tpaHint = getTpaHint();\n  }\n\n  componentDidMount() {\n    sendPageEvent('login_and_registration', 'login');\n    const payload = { ...this.queryParams };\n\n    if (this.tpaHint) {\n      payload.tpa_hint = this.tpaHint;\n    }\n    this.props.getThirdPartyAuthContext(payload);\n    this.props.loginRequestReset();\n  }\n\n  shouldComponentUpdate(nextProps) {\n    if (nextProps.loginFormData && this.props.loginFormData !== nextProps.loginFormData) {\n      // Ensuring browser's autofill user credentials get filled and their state persists in the redux store.\n      const nextState = {\n        emailOrUsername: nextProps.loginFormData.emailOrUsername || this.state.emailOrUsername,\n        password: nextProps.loginFormData.password || this.state.password,\n      };\n      this.setState({\n        ...nextProps.loginFormData,\n        ...nextState,\n      });\n      return false;\n    }\n    return true;\n  }\n\n  componentWillUnmount() {\n    if (this.props.resetPassword) {\n      this.props.loginRemovePasswordResetBanner();\n    }\n  }\n\n  getEnterPriseLoginURL() {\n    return getConfig().LMS_BASE_URL + ENTERPRISE_LOGIN_URL;\n  }\n\n  handleSubmit = (e) => {\n    e.preventDefault();\n    if (this.props.resetPassword) {\n      this.props.loginRemovePasswordResetBanner();\n    }\n    this.setState({ isSubmitted: true });\n    const { emailOrUsername, password } = this.state;\n    const emailValidationError = this.validateEmail(emailOrUsername);\n    const passwordValidationError = this.validatePassword(password);\n\n    if (emailValidationError !== '' || passwordValidationError !== '') {\n      this.props.setLoginFormData({\n        errors: {\n          emailOrUsername: emailValidationError,\n          password: passwordValidationError,\n        },\n      });\n      this.props.loginRequestFailure({\n        errorCode: INVALID_FORM,\n      });\n      return;\n    }\n\n    const payload = {\n      email_or_username: emailOrUsername, password, ...this.queryParams,\n    };\n    this.props.loginRequest(payload);\n  };\n\n  handleOnFocus = (e) => {\n    const { errors } = this.state;\n    errors[e.target.name] = '';\n    this.props.setLoginFormData({\n      errors,\n    });\n  };\n\n  handleOnBlur = (e) => {\n    const payload = {\n      [e.target.name]: e.target.value,\n    };\n    this.props.setLoginFormData(payload);\n  };\n\n  handleForgotPasswordLinkClickEvent = () => {\n    sendTrackEvent('edx.bi.password-reset_form.toggled', { category: 'user-engagement' });\n  };\n\n  validateEmail(email) {\n    const { errors } = this.state;\n\n    if (email === '') {\n      errors.emailOrUsername = this.props.intl.formatMessage(messages['email.validation.message']);\n    } else if (email.length < 3) {\n      errors.emailOrUsername = this.props.intl.formatMessage(messages['username.or.email.format.validation.less.chars.message']);\n    } else {\n      errors.emailOrUsername = '';\n    }\n    return errors.emailOrUsername;\n  }\n\n  validatePassword(password) {\n    const { errors } = this.state;\n    errors.password = password.length > 0 ? '' : this.props.intl.formatMessage(messages['password.validation.message']);\n\n    return errors.password;\n  }\n\n  renderThirdPartyAuth(providers, secondaryProviders, currentProvider, thirdPartyAuthApiStatus, intl) {\n    const isInstitutionAuthActive = !!secondaryProviders.length && !currentProvider;\n    const isSocialAuthActive = !!providers.length && !currentProvider;\n    const isEnterpriseLoginDisabled = getConfig().DISABLE_ENTERPRISE_LOGIN;\n\n    return (\n      <>\n        {(isSocialAuthActive || (isEnterpriseLoginDisabled && isInstitutionAuthActive))\n          && (\n            <div className=\"mt-4 mb-3 h4\">\n              {intl.formatMessage(messages['login.other.options.heading'])}\n            </div>\n          )}\n\n        {(!isEnterpriseLoginDisabled && isSocialAuthActive) && (\n          <Hyperlink className=\"btn btn-link btn-sm text-body p-0 mb-4\" destination={this.getEnterPriseLoginURL()}>\n            <Icon src={Institution} className=\"institute-icon\" />\n            {intl.formatMessage(messages['enterprise.login.btn.text'])}\n          </Hyperlink>\n        )}\n\n        {thirdPartyAuthApiStatus === PENDING_STATE ? (\n          <Skeleton className=\"tpa-skeleton mb-3\" height={30} count={2} />\n        ) : (\n          <>\n            {(isEnterpriseLoginDisabled && isInstitutionAuthActive) && (\n              <RenderInstitutionButton\n                onSubmitHandler={this.props.handleInstitutionLogin}\n                buttonTitle={intl.formatMessage(messages['institution.login.button'])}\n              />\n            )}\n            {isSocialAuthActive && (\n              <div className=\"row m-0\">\n                <SocialAuthProviders socialAuthProviders={providers} />\n              </div>\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        <InstitutionLogistration\n          secondaryProviders={thirdPartyAuthContext.secondaryProviders}\n          headingTitle={intl.formatMessage(messages['institution.login.page.title'])}\n        />\n      );\n    }\n    const tpaAuthenticationError = {};\n    if (thirdPartyAuthContext.errorMessage) {\n      tpaAuthenticationError.context = {\n        errorMessage: thirdPartyAuthContext.errorMessage,\n      };\n      tpaAuthenticationError.errorCode = TPA_AUTHENTICATION_FAILURE;\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        <Helmet>\n          <title>{intl.formatMessage(messages['login.page.title'],\n            { siteName: getConfig().SITE_NAME })}\n          </title>\n        </Helmet>\n        <RedirectLogistration\n          success={this.props.loginResult.success}\n          redirectUrl={this.props.loginResult.redirectUrl}\n          finishAuthUrl={thirdPartyAuthContext.finishAuthUrl}\n        />\n        <div className=\"mw-xs mt-3\">\n          <ThirdPartyAuthAlert\n            currentProvider={thirdPartyAuthContext.currentProvider}\n            platformName={thirdPartyAuthContext.platformName}\n          />\n          {this.props.loginError ? <LoginFailureMessage loginError={this.props.loginError} /> : null}\n          {thirdPartyAuthContext.errorMessage ? <LoginFailureMessage loginError={tpaAuthenticationError} /> : null}\n          {submitState === DEFAULT_STATE && this.state.isSubmitted ? windowScrollTo({ left: 0, top: 0, behavior: 'smooth' }) : null}\n          {activationMsgType && <AccountActivationMessage messageType={activationMsgType} />}\n          {this.props.resetPassword && !this.props.loginError ? <ResetPasswordSuccess /> : null}\n          <Form name=\"sign-in-form\" id=\"sign-in-form\">\n            <FormGroup\n              name=\"emailOrUsername\"\n              value={this.state.emailOrUsername}\n              autoComplete=\"on\"\n              handleChange={(e) => 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            <PasswordField\n              name=\"password\"\n              value={this.state.password}\n              autoComplete=\"off\"\n              showRequirements={false}\n              handleChange={(e) => 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            <StatefulButton\n              name=\"sign-in\"\n              id=\"sign-in\"\n              type=\"submit\"\n              variant=\"brand\"\n              className=\"login-button-width\"\n              state={submitState}\n              labels={{\n                default: intl.formatMessage(messages['sign.in.button']),\n                pending: '',\n              }}\n              onClick={this.handleSubmit}\n              onMouseDown={(e) => e.preventDefault()}\n            />\n            <Link\n              id=\"forgot-password\"\n              name=\"forgot-password\"\n              className=\"btn btn-link font-weight-500 text-body\"\n              to={updatePathWithQueryParams(RESET_PAGE)}\n              onClick={this.handleForgotPasswordLinkClickEvent}\n            >\n              {intl.formatMessage(messages['forgot.password'])}\n            </Link>\n            {this.renderThirdPartyAuth(providers, secondaryProviders, currentProvider, thirdPartyAuthApiStatus, intl)}\n          </Form>\n        </div>\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 <Skeleton height={36} />;\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 ? (<EnterpriseSSO provider={provider} intl={intl} />) : 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    errorMessage: null,\n    finishAuthUrl: null,\n    providers: [],\n    secondaryProviders: [],\n  },\n};\n\nLoginPage.propTypes = {\n  getThirdPartyAuthContext: PropTypes.func.isRequired,\n  intl: PropTypes.shape({\n    formatMessage: PropTypes.func,\n  }).isRequired,\n  loginError: PropTypes.shape({}),\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    errorMessage: PropTypes.string,\n    platformName: PropTypes.string,\n    providers: PropTypes.arrayOf(PropTypes.shape({})),\n    secondaryProviders: PropTypes.arrayOf(PropTypes.shape({})),\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 { useIntl } 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 { formatMessage } = useIntl();\n  const { errorCode, errorMsg } = props;\n\n  let errorMessage = null;\n  let heading = formatMessage(messages['reset.password.failure.heading']);\n  switch (errorCode) {\n    case PASSWORD_RESET.FORBIDDEN_REQUEST:\n      heading = formatMessage(messages['reset.server.rate.limit.error']);\n      errorMessage = formatMessage(messages['rate.limit.error']);\n      break;\n    case PASSWORD_RESET.INTERNAL_SERVER_ERROR:\n      errorMessage = formatMessage(messages['internal.server.error']);\n      break;\n    case PASSWORD_VALIDATION_ERROR:\n      errorMessage = errorMsg;\n     break;\n    case FORM_SUBMISSION_ERROR:\n      errorMessage = formatMessage(messages['reset.password.form.submission.error']);\n      break;\n    default:\n      break;\n  }\n\n  if (errorMessage) {\n    return (\n      <Alert id=\"validation-errors\" className=\"mb-5\" variant=\"danger\" icon={Error}>\n        <Alert.Heading>{heading}</Alert.Heading>\n        <p>{errorMessage}</p>\n      </Alert>\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};\n\nexport default ResetPasswordFailure;\n","import React, { useEffect, useState } from 'react';\nimport { connect } from 'react-redux';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { useIntl } 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 { getAllPossibleQueryParams, 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 { formatMessage } = useIntl();\n  const newPasswordError = formatMessage(messages['password.validation.message']);\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: newPasswordError });\n    }\n  }, [props.status, newPasswordError]);\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 = formatMessage(messages['password.validation.message']);\n        } else {\n          validatePasswordFromBackend(value);\n        }\n        break;\n      case 'confirmPassword':\n        if (!value) {\n          formErrors.confirmPassword = formatMessage(messages['confirm.your.password']);\n        } else if (value !== newPassword) {\n          formErrors.confirmPassword = 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 === 'password'\n      && name === 'newPassword'\n    ) {\n      return;\n    }\n    if (name === 'password') {\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 = getAllPossibleQueryParams();\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    <div className=\"d-inline-flex flex-wrap align-items-center\">\n      <Icon src={ChevronLeft} />\n      <span className=\"ml-2\">{formatMessage(messages['sign.in'])}</span>\n    </div>\n  );\n\n  if (props.status === TOKEN_STATE.PENDING) {\n    const { token } = props.match.params;\n    if (token) {\n      props.validateToken(token);\n      return <Spinner animation=\"border\" variant=\"primary\" className=\"centered-align-spinner\" />;\n    }\n  } else if (props.status === PASSWORD_RESET_ERROR) {\n    return <Redirect to={updatePathWithQueryParams(RESET_PAGE)} />;\n  } else if (props.status === 'success') {\n    return <Redirect to={updatePathWithQueryParams(LOGIN_PAGE)} />;\n  } else {\n    return (\n      <BaseComponent>\n        <div>\n          <Helmet>\n            <title>\n              {formatMessage(messages['reset.password.page.title'], { siteName: getConfig().SITE_NAME })}\n            </title>\n          </Helmet>\n          <Tabs activeKey=\"\" id=\"controlled-tab\" onSelect={(k) => setKey(k)}>\n            <Tab title={tabTitle} eventKey={LOGIN_PAGE} />\n          </Tabs>\n          { key && (\n            <Redirect to={updatePathWithQueryParams(key)} />\n          )}\n          <div id=\"main-content\" className=\"main-content\">\n            <div className=\"mw-xs\">\n              <ResetPasswordFailure errorCode={errorCode} errorMsg={props.errorMsg} />\n              <h4>{formatMessage(messages['reset.password'])}</h4>\n              <p className=\"mb-4\">{formatMessage(messages['reset.password.page.instructions'])}</p>\n              <Form id=\"set-reset-password-form\" name=\"set-reset-password-form\">\n                <PasswordField\n                  name=\"newPassword\"\n                  value={newPassword}\n                  handleChange={(e) => setNewPassword(e.target.value)}\n                  handleBlur={handleOnBlur}\n                  handleFocus={handleOnFocus}\n                  errorMessage={formErrors.newPassword}\n                  floatingLabel={formatMessage(messages['new.password.label'])}\n                />\n                <PasswordField\n                  name=\"confirmPassword\"\n                  value={confirmPassword}\n                  handleChange={handleConfirmPasswordChange}\n                  handleFocus={handleOnFocus}\n                  errorMessage={formErrors.confirmPassword}\n                  showRequirements={false}\n                  floatingLabel={formatMessage(messages['confirm.password.label'])}\n                />\n                <StatefulButton\n                  id=\"submit-new-password\"\n                  name=\"submit-new-password\"\n                  type=\"submit\"\n                  variant=\"brand\"\n                  className=\"stateful-button-width\"\n                  state={props.status}\n                  labels={{\n                    default: formatMessage(messages['reset.password']),\n                    pending: '',\n                  }}\n                  onClick={e => handleSubmit(e)}\n                  onMouseDown={(e) => e.preventDefault()}\n                />\n              </Form>\n            </div>\n          </div>\n        </div>\n      </BaseComponent>\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  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)(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    className, errorMessage, fieldData, onChangeHandler, isRequired, value,\n  } = props;\n\n  const handleFocus = (e) => {\n    if (props.handleFocus) { props.handleFocus(e); }\n  };\n\n  const handleOnBlur = (e) => {\n    if (props.handleBlur) { props.handleBlur(e); }\n  };\n\n  switch (fieldData.type) {\n    case 'select': {\n      if (!fieldData.options) {\n        return null;\n      }\n      formField = (\n        <Form.Group controlId={fieldData.name} isInvalid={!!(isRequired && errorMessage)}>\n          <Form.Control\n            className={className}\n            as=\"select\"\n            name={fieldData.name}\n            value={value}\n            aria-invalid={isRequired && Boolean(errorMessage)}\n            onChange={(e) => onChangeHandler(e)}\n            trailingElement={<Icon src={ExpandMore} />}\n            floatingLabel={fieldData.label}\n            onBlur={handleOnBlur}\n            onFocus={handleFocus}\n          >\n            <option key=\"default\" value=\"\">{fieldData.label}</option>\n            {fieldData.options.map(option => (\n              <option className=\"data-hj-suppress\" key={option[0]} value={option[0]}>{option[1]}</option>\n            ))}\n          </Form.Control>\n          {isRequired && errorMessage && (\n            <Form.Control.Feedback id={`${fieldData.name}-error`} type=\"invalid\" className=\"form-text-size\" hasIcon={false}>\n              {errorMessage}\n            </Form.Control.Feedback>\n          )}\n        </Form.Group>\n      );\n      break;\n    }\n    case 'textarea': {\n      formField = (\n        <Form.Group controlId={fieldData.name} isInvalid={!!(isRequired && errorMessage)}>\n          <Form.Control\n            className={className}\n            as=\"textarea\"\n            name={fieldData.name}\n            value={value}\n            aria-invalid={isRequired && Boolean(errorMessage)}\n            onChange={(e) => onChangeHandler(e)}\n            floatingLabel={fieldData.label}\n            onBlur={handleOnBlur}\n            onFocus={handleFocus}\n          />\n          {isRequired && errorMessage && (\n            <Form.Control.Feedback id={`${fieldData.name}-error`} type=\"invalid\" className=\"form-text-size\" hasIcon={false}>\n              {errorMessage}\n            </Form.Control.Feedback>\n          )}\n        </Form.Group>\n      );\n      break;\n    }\n    case 'text': {\n      formField = (\n        <Form.Group controlId={fieldData.name} isInvalid={!!(isRequired && errorMessage)}>\n          <Form.Control\n            className={className}\n            name={fieldData.name}\n            value={value}\n            aria-invalid={isRequired && Boolean(errorMessage)}\n            onChange={(e) => onChangeHandler(e)}\n            floatingLabel={fieldData.label}\n            onBlur={handleOnBlur}\n            onFocus={handleFocus}\n          />\n          {isRequired && errorMessage && (\n            <Form.Control.Feedback id={`${fieldData.name}-error`} type=\"invalid\" className=\"form-text-size\" hasIcon={false}>\n              {errorMessage}\n            </Form.Control.Feedback>\n          )}\n        </Form.Group>\n      );\n      break;\n    }\n    case 'checkbox': {\n      formField = (\n        <Form.Group isInvalid={!!(isRequired && errorMessage)}>\n          <Form.Checkbox\n            className={className}\n            id={fieldData.name}\n            checked={!!value}\n            name={fieldData.name}\n            value={value}\n            aria-invalid={isRequired && Boolean(errorMessage)}\n            onChange={(e) => onChangeHandler(e)}\n            onBlur={handleOnBlur}\n            onFocus={handleFocus}\n          >\n            {fieldData.label}\n          </Form.Checkbox>\n          {isRequired && errorMessage && (\n            <Form.Control.Feedback id={`${fieldData.name}-error`} type=\"invalid\" className=\"form-text-size\" hasIcon={false}>\n              {errorMessage}\n            </Form.Control.Feedback>\n          )}\n        </Form.Group>\n      );\n      break;\n    }\n    default:\n      break;\n  }\n\n  return formField;\n};\nFormFieldRenderer.defaultProps = {\n  className: '',\n  value: '',\n  handleBlur: null,\n  handleFocus: null,\n  errorMessage: '',\n  isRequired: false,\n};\n\nFormFieldRenderer.propTypes = {\n  className: PropTypes.string,\n  fieldData: PropTypes.shape({\n    type: PropTypes.string,\n    label: PropTypes.string,\n    name: PropTypes.string,\n    options: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.string)),\n  }).isRequired,\n  onChangeHandler: PropTypes.func.isRequired,\n  handleBlur: PropTypes.func,\n  handleFocus: PropTypes.func,\n  errorMessage: PropTypes.string,\n  isRequired: PropTypes.bool,\n  value: PropTypes.oneOfType([\n    PropTypes.string,\n    PropTypes.bool,\n  ]),\n};\n\nexport default FormFieldRenderer;\n","// 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_AUTHENTICATION_FAILURE = 'tpa-authentication-failure';\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 { distance } from 'fastest-levenshtein';\n\nimport {\n  COMMON_EMAIL_PROVIDERS,\n  COUNTRY_CODE_KEY,\n  COUNTRY_DISPLAY_KEY,\n  DEFAULT_SERVICE_PROVIDER_DOMAINS,\n  DEFAULT_TOP_LEVEL_DOMAINS,\n} from './constants';\n\nfunction 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 '';\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 '';\n}\n\nexport function validateEmailAddress(value, username, domainName) {\n  let suggestion = null;\n  const validation = {\n    hasError: false,\n    suggestion: '',\n    type: '',\n  };\n\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    validation.suggestion = suggestion;\n    validation.type = 'error';\n  } else if (serviceSuggestion) {\n    validation.suggestion = suggestion;\n    validation.type = 'warning';\n  } else {\n    suggestion = getLevenshteinSuggestion(domainName, COMMON_EMAIL_PROVIDERS, 3);\n    if (suggestion) {\n      validation.suggestion = `${username}@${suggestion}`;\n      validation.type = 'warning';\n    }\n  }\n\n  if (!hasMultipleSubdomains && tldSuggestion) {\n    validation.hasError = true;\n  }\n\n  return validation;\n}\n\nexport function validateCountryField(value, countryList, errorMessage) {\n  let countryCode = '';\n  let displayValue = value;\n  let error = errorMessage;\n\n  if (value) {\n    const normalizedValue = value.toLowerCase();\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    const selectedCountry = countryList.find(\n      (country) => (\n        // When translations apply extra space added in country value so we should\n        // trim that.\n        country[COUNTRY_DISPLAY_KEY].toLowerCase().trim() === normalizedValue\n        || country[COUNTRY_CODE_KEY].toLowerCase().trim() === normalizedValue\n      ),\n    );\n    if (selectedCountry) {\n      countryCode = selectedCountry[COUNTRY_CODE_KEY];\n      displayValue = selectedCountry[COUNTRY_DISPLAY_KEY];\n      error = '';\n    }\n  }\n  return { error, countryCode, displayValue };\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  '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  // 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  '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.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  '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  '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  // 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  'registration.tpa.authentication.failure': {\n    id: 'registration.tpa.authentication.failure',\n    defaultMessage: 'We are sorry, you are not authorized to access {platform_name} via this channel. '\n        + 'Please contact your learning administrator or manager in order to access {platform_name}.'\n        + '{lineBreak}{lineBreak}Error Details:{lineBreak}{errorMessage}',\n    description: 'Error message third party authentication pipeline fails',\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  // miscellaneous strings\n  'registration.username.suggestion.label': {\n    id: 'registration.username.suggestion.label',\n    defaultMessage: 'Suggested:',\n    description: 'Suggested usernames label text.',\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 { useIntl } from '@edx/frontend-platform/i18n';\nimport { Alert, Icon } from '@edx/paragon';\nimport { Close, Error } from '@edx/paragon/icons';\nimport PropTypes from 'prop-types';\n\nimport { FormGroup } from '../../common-components';\nimport messages from '../messages';\n\nconst EmailField = (props) => {\n  const { formatMessage } = useIntl();\n  const {\n    emailSuggestion,\n    handleSuggestionClick,\n    handleOnClose,\n  } = props;\n\n  const renderEmailFeedback = () => {\n    if (emailSuggestion.type === 'error') {\n      return (\n        <Alert variant=\"danger\" className=\"email-error-alert mt-1\" icon={Error}>\n          <span className=\"alert-text\">\n            {formatMessage(messages['did.you.mean.alert.text'])}{' '}\n            <Alert.Link\n              href=\"#\"\n              name=\"email\"\n              onClick={handleSuggestionClick}\n            >\n              {emailSuggestion.suggestion}\n            </Alert.Link>?<Icon src={Close} className=\"alert-close\" onClick={handleOnClose} tabIndex=\"0\" />\n          </span>\n        </Alert>\n      );\n    }\n    return (\n      <span id=\"email-warning\" className=\"small\">\n        {formatMessage(messages['did.you.mean.alert.text'])}:{' '}\n        <Alert.Link\n          href=\"#\"\n          name=\"email\"\n          className=\"email-warning-alert-link\"\n          onClick={handleSuggestionClick}\n        >\n          {emailSuggestion.suggestion}\n        </Alert.Link>?\n      </span>\n    );\n  };\n\n  return (\n    <FormGroup\n      borderClass={emailSuggestion.type === 'warning' ? 'yellow-border' : ''}\n      maxLength={254} // Limit per RFCs is 254\n      {...props}\n    >\n      {emailSuggestion.suggestion ? renderEmailFeedback() : null}\n    </FormGroup>\n  );\n};\n\nEmailField.defaultProps = {\n  emailSuggestion: {\n    suggestion: '',\n    type: '',\n  },\n  errorMessage: '',\n};\n\nEmailField.propTypes = {\n  errorMessage: PropTypes.string,\n  emailSuggestion: PropTypes.shape({\n    suggestion: PropTypes.string,\n    type: PropTypes.string,\n  }),\n  value: PropTypes.string.isRequired,\n  handleOnClose: PropTypes.func.isRequired,\n  handleSuggestionClick: PropTypes.func.isRequired,\n};\n\nexport default EmailField;\n","import React from 'react';\n\nimport { useIntl } 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 { formatMessage } = useIntl();\n  const {\n    handleSuggestionClick, handleUsernameSuggestionClose, usernameSuggestions, errorMessage,\n  } = props;\n  let className = '';\n  let suggestedUsernameDiv = null;\n  let iconButton = null;\n  const suggestedUsernames = () => (\n    <div className={className}>\n      <span className=\"text-gray username-suggestion-label\">{formatMessage(messages['registration.username.suggestion.label'])}</span>\n      <div className=\"scroll-suggested-username\">\n        {usernameSuggestions.map((username, index) => (\n          <Button\n            type=\"button\"\n            name=\"username\"\n            variant=\"outline-dark\"\n            className=\"username-suggestion data-hj-suppress\"\n            autoComplete={props.autoComplete}\n            key={`suggestion-${index.toString()}`}\n            onClick={(e) => handleSuggestionClick(e, 'username', username)}\n          >\n            {username}\n          </Button>\n        ))}\n      </div>\n      {iconButton}\n    </div>\n  );\n  if (usernameSuggestions.length > 0 && errorMessage && props.value === ' ') {\n    className = 'suggested-username-with-error';\n    iconButton = <IconButton src={Close} iconAs={Icon} alt=\"Close\" onClick={() => 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 = <IconButton src={Close} iconAs={Icon} alt=\"Close\" onClick={() => 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    <FormGroup {...props}>\n      {suggestedUsernameDiv}\n    </FormGroup>\n  );\n};\n\nUsernameField.defaultProps = {\n  usernameSuggestions: [],\n  errorMessage: '',\n  autoComplete: null,\n};\n\nUsernameField.propTypes = {\n  usernameSuggestions: PropTypes.arrayOf(string),\n  handleSuggestionClick: PropTypes.func.isRequired,\n  handleUsernameSuggestionClose: PropTypes.func.isRequired,\n  errorMessage: PropTypes.string,\n  name: PropTypes.string.isRequired,\n  value: PropTypes.string.isRequired,\n  autoComplete: PropTypes.string,\n};\n\nexport default UsernameField;\n","import React, { useEffect, useRef, useState } from 'react';\n\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { Icon, IconButton } from '@edx/paragon';\nimport { ExpandLess, ExpandMore } from '@edx/paragon/icons';\nimport PropTypes from 'prop-types';\n\nimport { FormGroup } from '../../common-components';\nimport { COUNTRY_CODE_KEY, COUNTRY_DISPLAY_KEY } from '../data/constants';\nimport messages from '../messages';\n\nconst CountryField = (props) => {\n  const { countryList, selectedCountry } = props;\n\n  const dropdownRef = useRef(null);\n  const { formatMessage } = useIntl();\n  const [errorMessage, setErrorMessage] = useState(props.errorMessage);\n  const [dropDownItems, setDropDownItems] = useState([]);\n  const [displayValue, setDisplayValue] = useState('');\n  const [trailingIcon, setTrailingIcon] = useState(null);\n\n  const onBlurHandler = (event, itemClicked = false, countryName = '') => {\n    const { name } = event.target;\n    const relatedName = event.relatedTarget ? event.relatedTarget.name : '';\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 ((relatedName === 'countryItem' || relatedName === 'countryExpand') && name === 'country') {\n      return;\n    }\n    const countryValue = itemClicked ? countryName : displayValue;\n    if (props.onBlurHandler) {\n      props.onBlurHandler({ target: { name: 'country', value: countryValue } });\n    }\n    setTrailingIcon(<ExpandMoreButton />);\n    setDropDownItems([]);\n  };\n\n  const getDropdownItems = (countryToFind = null) => {\n    let updatedCountryList = countryList;\n    if (countryToFind) {\n      updatedCountryList = countryList.filter(\n        (option) => (option.name.toLowerCase().includes(countryToFind.toLowerCase())),\n      );\n    }\n\n    return updatedCountryList.map((country) => {\n      const countryName = country[COUNTRY_DISPLAY_KEY];\n      return (\n        <button\n          type=\"button\"\n          name=\"countryItem\"\n          className=\"dropdown-item data-hj-suppress\"\n          value={countryName}\n          key={country[COUNTRY_CODE_KEY]}\n          onClick={(event) => onBlurHandler(event, true, countryName)}\n          /* This event will prevent the blur event to be fired,\n           as blur event is having higher priority than click event and restricts the click event.\n          */\n          onMouseDown={(event) => event.preventDefault()}\n        >\n          {countryName.length > 30 ? countryName.substring(0, 30).concat('...') : countryName}\n        </button>\n      );\n    });\n  };\n\n  const onFocusHandler = (event) => {\n    const { name, value } = event.target;\n    setDropDownItems(getDropdownItems(name === 'country' ? value : displayValue));\n    setTrailingIcon(<ExpandLessButton />);\n    setErrorMessage('');\n    if (props.onFocusHandler) { props.onFocusHandler(event); }\n  };\n\n  const onChangeHandler = (event) => {\n    const filteredItems = getDropdownItems(event.target.value);\n    setDropDownItems(filteredItems);\n    setDisplayValue(event.target.value);\n    if (props.onChangeHandler) { props.onChangeHandler(event, { countryCode: '', displayValue: event.target.value }); }\n  };\n\n  const handleOnClickOutside = () => {\n    setTrailingIcon(<ExpandMoreButton />);\n    setDropDownItems([]);\n  };\n\n  const handleExpandMore = () => {\n    setTrailingIcon(<ExpandLessButton />);\n    setDropDownItems(getDropdownItems());\n  };\n\n  const handleExpandLess = () => {\n    setTrailingIcon(<ExpandMoreButton />);\n    setDropDownItems([]);\n  };\n\n  const ExpandMoreButton = () => (\n    <IconButton\n      name=\"countryExpand\"\n      size=\"sm\"\n      variant=\"secondary\"\n      alt=\"expand-more\"\n      className=\"expand-more\"\n      iconAs={Icon}\n      src={ExpandMore}\n      onBlur={() => {}}\n      onClick={handleExpandMore}\n      onFocus={() => {}}\n    />\n  );\n\n  const ExpandLessButton = () => (\n    <IconButton\n      name=\"countryExpand\"\n      size=\"sm\"\n      variant=\"secondary\"\n      alt=\"expand-less\"\n      className=\"expand-less\"\n      iconAs={Icon}\n      src={ExpandLess}\n      onBlur={() => {}}\n      onClick={handleExpandLess}\n      onFocus={() => {}}\n    />\n  );\n\n  useEffect(() => {\n    const handleClickOutside = (event) => {\n      if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {\n        handleOnClickOutside();\n      }\n    };\n    document.addEventListener('click', handleClickOutside, true);\n    return () => {\n      document.removeEventListener('click', handleClickOutside, true);\n    };\n  }, []);\n\n  useEffect(() => {\n    if (!trailingIcon) {\n      setTrailingIcon(<ExpandMoreButton />);\n    }\n  }, [trailingIcon]);\n\n  useEffect(() => {\n    if (selectedCountry.displayValue) {\n      setDisplayValue(selectedCountry.displayValue);\n    }\n  }, [selectedCountry]);\n\n  useEffect(() => {\n    setErrorMessage(props.errorMessage);\n  }, [props.errorMessage]);\n\n  return (\n    <div ref={dropdownRef} className=\"mb-4\">\n      <FormGroup\n        as=\"input\"\n        name=\"country\"\n        autoComplete=\"chrome-off\"\n        className=\"mb-0\"\n        floatingLabel={formatMessage(messages['registration.country.label'])}\n        trailingElement={trailingIcon}\n        value={displayValue}\n        errorMessage={errorMessage}\n        handleChange={onChangeHandler}\n        handleBlur={onBlurHandler}\n        handleFocus={onFocusHandler}\n      />\n      <div className=\"dropdown-container\">\n        { dropDownItems?.length > 0 ? dropDownItems : null }\n      </div>\n    </div>\n  );\n};\n\nCountryField.propTypes = {\n  countryList: PropTypes.arrayOf(\n    PropTypes.shape({\n      code: PropTypes.string,\n      name: PropTypes.string,\n    }),\n  ).isRequired,\n  errorMessage: PropTypes.string,\n  onBlurHandler: PropTypes.func.isRequired,\n  onChangeHandler: PropTypes.func.isRequired,\n  onFocusHandler: PropTypes.func.isRequired,\n  selectedCountry: PropTypes.shape({\n    displayValue: PropTypes.string,\n    countryCode: PropTypes.string,\n  }),\n};\n\nCountryField.defaultProps = {\n  errorMessage: null,\n  selectedCountry: {\n    value: '',\n  },\n};\n\nexport default CountryField;\n","import React, { useEffect } from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { FormattedMessage, useIntl } 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 { formatMessage } = useIntl();\n  const {\n    errorMessage, onChangeHandler, fieldType, value,\n  } = props;\n\n  useEffect(() => {\n    if (fieldType === 'tos_and_honor_code' && !value) {\n      onChangeHandler({ target: { name: 'honor_code', value: true } });\n    }\n  }, [fieldType, onChangeHandler, value]);\n\n  if (fieldType === 'tos_and_honor_code') {\n    return (\n      <div id=\"honor-code\" className=\"micro text-muted mt-4\">\n        <FormattedMessage\n          id=\"register.page.terms.of.service.and.honor.code\"\n          defaultMessage=\"By creating an account, you agree to the {tosAndHonorCode} and you acknowledge that {platformName} and each\n                Member process your personal data in accordance with the {privacyPolicy}.\"\n          description=\"Text that appears on registration form stating honor code and privacy policy\"\n          values={{\n            platformName: getConfig().SITE_NAME,\n            tosAndHonorCode: (\n              <Hyperlink variant=\"muted\" destination={getConfig().TOS_AND_HONOR_CODE || '#'} target=\"_blank\">\n                {formatMessage(messages['terms.of.service.and.honor.code'])}\n              </Hyperlink>\n            ),\n            privacyPolicy: (\n              <Hyperlink variant=\"muted\" destination={getConfig().PRIVACY_POLICY || '#'} target=\"_blank\">\n                {formatMessage(messages['privacy.policy'])}\n              </Hyperlink>\n            ),\n          }}\n        />\n      </div>\n    );\n  }\n\n  return (\n    <div id=\"honor-code\" className=\"micro text-muted\">\n      <Form.Checkbox\n        className=\"opt-checkbox mt-1\"\n        id=\"honor-code\"\n        checked={value}\n        name=\"honor_code\"\n        value={value}\n        onChange={onChangeHandler}\n      >\n        <FormattedMessage\n          id=\"register.page.honor.code\"\n          defaultMessage=\"I agree to the {platformName}&nbsp;{tosAndHonorCode}\"\n          description=\"Text that appears on registration form stating honor code\"\n          values={{\n            platformName: getConfig().SITE_NAME,\n            tosAndHonorCode: (\n              <Hyperlink variant=\"muted\" destination={getConfig().TOS_AND_HONOR_CODE || '#'} target=\"_blank\">\n                {formatMessage(messages['honor.code'])}\n              </Hyperlink>\n            ),\n          }}\n        />\n      </Form.Checkbox>\n      {errorMessage && (\n        <Form.Control.Feedback type=\"invalid\" className=\"form-text-size\" hasIcon={false}>\n          {errorMessage}\n        </Form.Control.Feedback>\n      )}\n    </div>\n  );\n};\n\nHonorCode.defaultProps = {\n  errorMessage: '',\n  onChangeHandler: null,\n  fieldType: 'honor_code',\n  value: false,\n};\n\nHonorCode.propTypes = {\n  errorMessage: PropTypes.string,\n  onChangeHandler: PropTypes.func,\n  fieldType: PropTypes.string,\n  value: PropTypes.bool,\n};\n\nexport default HonorCode;\n","import React from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { FormattedMessage, useIntl } 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 { formatMessage } = useIntl();\n  const {\n    errorMessage, onChangeHandler, value,\n  } = props;\n\n  return (\n    <div id=\"terms-of-service\" className=\"micro text-muted\">\n      <Form.Checkbox\n        className=\"opt-checkbox mt-1\"\n        id=\"tos\"\n        checked={value}\n        name=\"terms_of_service\"\n        value={value}\n        onChange={onChangeHandler}\n      >\n        <FormattedMessage\n          id=\"register.page.terms.of.service\"\n          defaultMessage=\"I agree to the {platformName}&nbsp;{termsOfService}\"\n          description=\"Text that appears on registration form stating terms of service.\n                       It is a legal document that users must agree to.\"\n          values={{\n            platformName: getConfig().SITE_NAME,\n            termsOfService: (\n              <Hyperlink variant=\"muted\" destination={getConfig().TOS_LINK || '#'} target=\"_blank\">\n                {formatMessage(messages['terms.of.service'])}\n              </Hyperlink>\n            ),\n          }}\n        />\n      </Form.Checkbox>\n      {errorMessage && (\n        <Form.Control.Feedback type=\"invalid\" className=\"form-text-size\" hasIcon={false}>\n          {errorMessage}\n        </Form.Control.Feedback>\n      )}\n    </div>\n  );\n};\n\nTermsOfService.defaultProps = {\n  errorMessage: '',\n  value: false,\n};\n\nTermsOfService.propTypes = {\n  errorMessage: PropTypes.string,\n  onChangeHandler: PropTypes.func.isRequired,\n  value: PropTypes.bool,\n};\n\nexport default TermsOfService;\n","import React, { useEffect } from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport PropTypes from 'prop-types';\n\nimport { FormFieldRenderer } from '../field-renderer';\nimport { FIELDS } from './data/constants';\nimport { validateCountryField } from './data/utils';\nimport messages from './messages';\nimport { HonorCode, TermsOfService } from './registrationFields';\nimport CountryField from './registrationFields/CountryField';\n\n/**\n * Fields on registration page that are not the default required fields (name, email, username, password).\n * These configurable required fields are defined on the backend using REGISTRATION_EXTRA_FIELDS setting.\n *\n * Country and Honor Code/Terms of Services (if enabled) will appear at the bottom of the form, even if they\n * appear higher in order returned by backend. This is to make the user experience better.\n *\n * For edX only:\n *  Country and honor code fields are required by default, and we will continue to show them on\n *  frontend even if the API doesn't return it. The `SHOW_CONFIGURABLE_EDX_FIELDS` flag will enable\n *  it for edX.\n * */\nconst ConfigurableRegistrationForm = (props) => {\n  const { formatMessage } = useIntl();\n  const {\n    countryList,\n    email,\n    fieldDescriptions,\n    fieldErrors,\n    formFields,\n    setFieldErrors,\n    setFocusedField,\n    setFormFields,\n  } = props;\n\n  let showTermsOfServiceAndHonorCode = false;\n  let showCountryField = false;\n\n  const formFieldDescriptions = [];\n  const honorCode = [];\n  const flags = {\n    showConfigurableRegistrationFields: getConfig().ENABLE_DYNAMIC_REGISTRATION_FIELDS,\n    showConfigurableEdxFields: getConfig().SHOW_CONFIGURABLE_EDX_FIELDS,\n    showMarketingEmailOptInCheckbox: getConfig().MARKETING_EMAILS_OPT_IN,\n  };\n\n  useEffect(() => {\n    if (!formFields.country) {\n      setFormFields(prevState => ({ ...prevState, country: { countryCode: '', displayValue: '' } }));\n    }\n  });\n\n  const handleOnChange = (event, countryValue = null) => {\n    const { name, type } = event.target;\n    let value;\n    if (countryValue) {\n      value = { ...countryValue };\n    } else {\n      value = event.target.type === 'checkbox' ? event.target.checked : event.target.value;\n      if (type === 'checkbox') {\n        setFieldErrors(prevErrors => ({ ...prevErrors, [name]: '' }));\n      }\n    }\n    setFormFields(prevState => ({ ...prevState, [name]: value }));\n  };\n\n  const handleOnBlur = (event) => {\n    const { name, value } = event.target;\n    let error = '';\n    if (name === 'country') {\n      const countryValidation = validateCountryField(\n        value.trim(), countryList, formatMessage(messages['empty.country.field.error']),\n      );\n      const { countryCode, displayValue } = countryValidation;\n      error = countryValidation.error;\n      setFormFields(prevState => ({ ...prevState, country: { countryCode, displayValue } }));\n    } else if (!value || !value.trim()) {\n      error = fieldDescriptions[name].error_message;\n    } else if (name === 'confirm_email' && value !== email) {\n      error = formatMessage(messages['email.do.not.match']);\n    }\n    setFocusedField(null);\n    setFieldErrors(prevErrors => ({ ...prevErrors, [name]: error }));\n  };\n\n  const handleOnFocus = (event) => {\n    const { name } = event.target;\n    setFieldErrors(prevErrors => ({ ...prevErrors, [name]: '' }));\n    // Since we are removing the form errors from the focused field, we will\n    // need to rerun the validation for focused field on form submission.\n    setFocusedField(name);\n  };\n\n  if (flags.showConfigurableRegistrationFields) {\n    Object.keys(fieldDescriptions).forEach(fieldName => {\n      const fieldData = fieldDescriptions[fieldName];\n      switch (fieldData.name) {\n        case FIELDS.COUNTRY:\n          showCountryField = true;\n          break;\n        case FIELDS.HONOR_CODE:\n          if (fieldData.type === 'tos_and_honor_code') {\n            showTermsOfServiceAndHonorCode = true;\n          } else {\n            honorCode.push(\n              <span key={fieldData.name}>\n                <HonorCode\n                  fieldType={fieldData.type}\n                  value={formFields[fieldData.name]}\n                  onChangeHandler={handleOnChange}\n                  errorMessage={fieldErrors[fieldData.name]}\n                />\n              </span>,\n            );\n          }\n          break;\n        case FIELDS.TERMS_OF_SERVICE:\n          honorCode.push(\n            <span key={fieldData.name}>\n              <TermsOfService\n                value={formFields[fieldData.name]}\n                onChangeHandler={handleOnChange}\n                errorMessage={fieldErrors[fieldData.name]}\n              />\n            </span>,\n          );\n          break;\n        default:\n          formFieldDescriptions.push(\n            <span key={fieldData.name}>\n              <FormFieldRenderer\n                fieldData={fieldData}\n                value={formFields[fieldData.name]}\n                onChangeHandler={handleOnChange}\n                handleBlur={handleOnBlur}\n                handleFocus={handleOnFocus}\n                errorMessage={fieldErrors[fieldData.name]}\n                isRequired\n              />\n            </span>,\n          );\n      }\n    });\n  }\n\n  if (flags.showConfigurableEdxFields || showCountryField) {\n    formFieldDescriptions.push(\n      <span key=\"country\">\n        <CountryField\n          countryList={countryList}\n          selectedCountry={formFields.country}\n          errorMessage={fieldErrors.country || ''}\n          onChangeHandler={handleOnChange}\n          onBlurHandler={handleOnBlur}\n          onFocusHandler={handleOnFocus}\n        />\n      </span>,\n    );\n  }\n\n  if (flags.showMarketingEmailOptInCheckbox) {\n    formFieldDescriptions.push(\n      <span key=\"marketing_email_opt_in\">\n        <FormFieldRenderer\n          fieldData={{\n            type: 'checkbox',\n            label: formatMessage(messages['registration.opt.in.label'], { siteName: getConfig().SITE_NAME }),\n            name: 'marketingEmailsOptIn',\n          }}\n          value={formFields.marketingEmailsOptIn}\n          className=\"opt-checkbox\"\n          onChangeHandler={handleOnChange}\n          handleBlur={handleOnBlur}\n          handleFocus={handleOnFocus}\n        />\n      </span>,\n    );\n  }\n\n  if (flags.showConfigurableEdxFields || showTermsOfServiceAndHonorCode) {\n    formFieldDescriptions.push(\n      <span key=\"honor_code\">\n        <HonorCode fieldType=\"tos_and_honor_code\" onChangeHandler={handleOnChange} value={formFields.honor_code} />\n      </span>,\n    );\n  }\n\n  return (\n    <>\n      {formFieldDescriptions}\n      <div>\n        {honorCode}\n      </div>\n    </>\n  );\n};\n\nConfigurableRegistrationForm.propTypes = {\n  countryList: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\n  email: PropTypes.string.isRequired,\n  fieldDescriptions: PropTypes.shape({}),\n  fieldErrors: PropTypes.shape({\n    country: PropTypes.string,\n  }).isRequired,\n  formFields: PropTypes.shape({\n    country: PropTypes.shape({\n      displayValue: PropTypes.string,\n      countryCode: PropTypes.string,\n    }),\n    honor_code: PropTypes.bool,\n    marketingEmailsOptIn: PropTypes.bool,\n  }).isRequired,\n  setFieldErrors: PropTypes.func.isRequired,\n  setFocusedField: PropTypes.func.isRequired,\n  setFormFields: PropTypes.func.isRequired,\n};\n\nConfigurableRegistrationForm.defaultProps = {\n  fieldDescriptions: {},\n};\n\nexport default ConfigurableRegistrationForm;\n","import { createSelector } from 'reselect';\n\nexport const storeName = 'register';\n\nexport const registerSelector = state => ({ ...state[storeName] });\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","import React, { useEffect } from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { useIntl } 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 {\n  FORBIDDEN_REQUEST,\n  INTERNAL_SERVER_ERROR,\n  TPA_AUTHENTICATION_FAILURE,\n  TPA_SESSION_EXPIRED,\n} from './data/constants';\nimport messages from './messages';\n\nconst RegistrationFailureMessage = (props) => {\n  const { formatMessage } = useIntl();\n  const {\n    context, errorCode, failureCount,\n  } = props;\n\n  useEffect(() => {\n    windowScrollTo({ left: 0, top: 0, behavior: 'smooth' });\n  }, [errorCode, failureCount]);\n\n  if (!errorCode) {\n    return null;\n  }\n\n  let errorMessage;\n  switch (errorCode) {\n    case INTERNAL_SERVER_ERROR:\n      errorMessage = formatMessage(messages['registration.request.server.error']);\n     break;\n    case FORBIDDEN_REQUEST:\n      errorMessage = formatMessage(messages['registration.rate.limit.error']);\n      break;\n    case TPA_AUTHENTICATION_FAILURE:\n      errorMessage = formatMessage(messages['registration.tpa.authentication.failure'],\n        {\n          platform_name: getConfig().SITE_NAME,\n          lineBreak: <br />,\n          errorMessage: context.errorMessage,\n        });\n      break;\n    case TPA_SESSION_EXPIRED:\n      errorMessage = formatMessage(messages['registration.tpa.session.expired'], { provider: context.provider });\n      break;\n    default:\n      errorMessage = formatMessage(messages['registration.empty.form.submission.error']);\n      break;\n  }\n\n  return (\n    <Alert id=\"validation-errors\" className=\"mb-5\" variant=\"danger\" icon={Error}>\n      <Alert.Heading>{formatMessage(messages['registration.request.failure.header'])}</Alert.Heading>\n      <p>{errorMessage}</p>\n    </Alert>\n  );\n};\n\nRegistrationFailureMessage.defaultProps = {\n  context: {\n    errorMessage: null,\n  },\n};\n\nRegistrationFailureMessage.propTypes = {\n  context: PropTypes.shape({\n    provider: PropTypes.string,\n    errorMessage: PropTypes.string,\n  }),\n  errorCode: PropTypes.string.isRequired,\n  failureCount: PropTypes.number.isRequired,\n};\n\nexport default RegistrationFailureMessage;\n","import React from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport PropTypes from 'prop-types';\nimport Skeleton from 'react-loading-skeleton';\n\nimport {\n  RenderInstitutionButton,\n  SocialAuthProviders,\n} from '../common-components';\nimport {\n  PENDING_STATE, REGISTER_PAGE,\n} from '../data/constants';\nimport messages from './messages';\n\n/**\n * This component renders the Single sign-on (SSO) buttons for the providers passed.\n * */\nconst ThirdPartyAuth = (props) => {\n  const { formatMessage } = useIntl();\n  const {\n    providers, secondaryProviders, currentProvider, handleInstitutionLogin, thirdPartyAuthApiStatus,\n  } = props;\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        <div className=\"mt-4 mb-3 h4\">\n          {formatMessage(messages['registration.other.options.heading'])}\n        </div>\n      )}\n\n      {thirdPartyAuthApiStatus === PENDING_STATE ? (\n        <Skeleton className=\"tpa-skeleton\" height={36} count={2} />\n      ) : (\n        <>\n          {(isEnterpriseLoginDisabled && isInstitutionAuthActive) && (\n            <RenderInstitutionButton\n              onSubmitHandler={handleInstitutionLogin}\n              buttonTitle={formatMessage(messages['register.institution.login.button'])}\n            />\n          )}\n          {isSocialAuthActive && (\n            <div className=\"row m-0\">\n              <SocialAuthProviders socialAuthProviders={providers} referrer={REGISTER_PAGE} />\n            </div>\n          )}\n        </>\n      )}\n    </>\n  );\n};\n\nThirdPartyAuth.defaultProps = {\n  currentProvider: null,\n  providers: [],\n  secondaryProviders: [],\n  thirdPartyAuthApiStatus: 'pending',\n};\n\nThirdPartyAuth.propTypes = {\n  currentProvider: PropTypes.string,\n  handleInstitutionLogin: PropTypes.func.isRequired,\n  providers: PropTypes.arrayOf(\n    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  secondaryProviders: PropTypes.arrayOf(\n    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  thirdPartyAuthApiStatus: PropTypes.string,\n};\n\nexport default ThirdPartyAuth;\n","import React, {\n  useEffect, useMemo, useState,\n} from 'react';\nimport { connect } from 'react-redux';\n\nimport { getConfig, snakeCaseObject } from '@edx/frontend-platform';\nimport { sendPageEvent } from '@edx/frontend-platform/analytics';\nimport {\n  getCountryList, getLocale, useIntl,\n} from '@edx/frontend-platform/i18n';\nimport { Form, Spinner, StatefulButton } from '@edx/paragon';\nimport PropTypes from 'prop-types';\nimport { Helmet } from 'react-helmet';\nimport Skeleton from 'react-loading-skeleton';\n\nimport {\n  FormGroup, InstitutionLogistration, PasswordField, RedirectLogistration, ThirdPartyAuthAlert,\n} from '../common-components';\nimport { getThirdPartyAuthContext } from '../common-components/data/actions';\nimport {\n  fieldDescriptionSelector, optionalFieldsSelector, thirdPartyAuthContextSelector,\n} from '../common-components/data/selectors';\nimport EnterpriseSSO from '../common-components/EnterpriseSSO';\nimport {\n  COMPLETE_STATE,\n  DEFAULT_STATE, INVALID_NAME_REGEX, LETTER_REGEX, NUMBER_REGEX, PENDING_STATE, REGISTER_PAGE, VALID_EMAIL_REGEX,\n} from '../data/constants';\nimport {\n  getAllPossibleQueryParams, getTpaHint, getTpaProvider, setCookie, setSurveyCookie,\n} from '../data/utils';\nimport ConfigurableRegistrationForm from './ConfigurableRegistrationForm';\nimport {\n  backupRegistrationFormBegin,\n  clearRegistertionBackendError,\n  clearUsernameSuggestions,\n  fetchRealtimeValidations,\n  registerNewUser,\n  setUserPipelineDataLoaded,\n} from './data/actions';\nimport {\n  COUNTRY_CODE_KEY,\n  COUNTRY_DISPLAY_KEY,\n  FIELDS,\n  FORM_SUBMISSION_ERROR,\n  TPA_AUTHENTICATION_FAILURE,\n} from './data/constants';\nimport { registrationErrorSelector, validationsSelector } from './data/selectors';\nimport {\n  getSuggestionForInvalidEmail, validateCountryField, validateEmailAddress,\n} from './data/utils';\nimport messages from './messages';\nimport RegistrationFailure from './RegistrationFailure';\nimport { EmailField, UsernameField } from './registrationFields';\nimport ThirdPartyAuth from './ThirdPartyAuth';\n\nconst emailRegex = new RegExp(VALID_EMAIL_REGEX, 'i');\nconst urlRegex = new RegExp(INVALID_NAME_REGEX);\n\nconst RegistrationPage = (props) => {\n  const {\n    backedUpFormData,\n    backendCountryCode,\n    backendValidations,\n    fieldDescriptions,\n    handleInstitutionLogin,\n    institutionLogin,\n    optionalFields,\n    registrationError,\n    registrationErrorCode,\n    registrationResult,\n    shouldBackupState,\n    submitState,\n    thirdPartyAuthApiStatus,\n    thirdPartyAuthContext,\n    usernameSuggestions,\n    validationApiRateLimited,\n    // Actions\n    backupFormState,\n    setUserPipelineDetailsLoaded,\n    getRegistrationDataFromBackend,\n    userPipelineDataLoaded,\n    validateFromBackend,\n    clearBackendError,\n  } = props;\n\n  const { formatMessage } = useIntl();\n  const countryList = useMemo(() => getCountryList(getLocale()), []);\n  const queryParams = useMemo(() => getAllPossibleQueryParams(), []);\n  const tpaHint = useMemo(() => getTpaHint(), []);\n  const flags = {\n    showConfigurableEdxFields: getConfig().SHOW_CONFIGURABLE_EDX_FIELDS,\n    showConfigurableRegistrationFields: getConfig().ENABLE_DYNAMIC_REGISTRATION_FIELDS,\n    showMarketingEmailOptInCheckbox: getConfig().MARKETING_EMAILS_OPT_IN,\n  };\n\n  const [formFields, setFormFields] = useState({ ...backedUpFormData.formFields });\n  const [configurableFormFields, setConfigurableFormFields] = useState({ ...backedUpFormData.configurableFormFields });\n  const [errors, setErrors] = useState({ ...backedUpFormData.errors });\n  const [emailSuggestion, setEmailSuggestion] = useState({ ...backedUpFormData.emailSuggestion });\n  const [autoSubmitRegisterForm, setAutoSubmitRegisterForm] = useState(false);\n  const [errorCode, setErrorCode] = useState({ type: '', count: 0 });\n  const [formStartTime, setFormStartTime] = useState(null);\n  const [focusedField, setFocusedField] = useState(null);\n\n  const {\n    providers, currentProvider, secondaryProviders, finishAuthUrl,\n  } = thirdPartyAuthContext;\n  const platformName = getConfig().SITE_NAME;\n\n  /**\n   * If auto submitting register form, we will check tos and honor code fields if they exist for feature parity.\n   */\n  const checkTOSandHonorCodeFields = () => {\n    if (Object.keys(fieldDescriptions).includes(FIELDS.HONOR_CODE)) {\n      setConfigurableFormFields(prevState => ({\n        ...prevState,\n        [FIELDS.HONOR_CODE]: true,\n      }));\n    }\n    if (Object.keys(fieldDescriptions).includes(FIELDS.TERMS_OF_SERVICE)) {\n      setConfigurableFormFields(prevState => ({\n        ...prevState,\n        [FIELDS.TERMS_OF_SERVICE]: true,\n      }));\n    }\n  };\n\n  /**\n   * Set the userPipelineDetails data in formFields for only first time\n   */\n  useEffect(() => {\n    if (!userPipelineDataLoaded && thirdPartyAuthApiStatus === COMPLETE_STATE) {\n      const { autoSubmitRegForm, pipelineUserDetails, errorMessage } = thirdPartyAuthContext;\n      if (errorMessage) {\n        setErrorCode(prevState => ({ type: TPA_AUTHENTICATION_FAILURE, count: prevState.count + 1 }));\n      } else if (autoSubmitRegForm) {\n        checkTOSandHonorCodeFields();\n        setAutoSubmitRegisterForm(true);\n      }\n      if (pipelineUserDetails && Object.keys(pipelineUserDetails).length !== 0) {\n        const { name = '', username = '', email = '' } = pipelineUserDetails;\n        setFormFields(prevState => ({\n          ...prevState, name, username, email,\n        }));\n        setUserPipelineDetailsLoaded(true);\n      }\n    }\n  }, [ // eslint-disable-line react-hooks/exhaustive-deps\n    thirdPartyAuthContext,\n    userPipelineDataLoaded,\n    setUserPipelineDetailsLoaded,\n  ]);\n\n  useEffect(() => {\n    if (!formStartTime) {\n      sendPageEvent('login_and_registration', 'register');\n      const payload = { ...queryParams, is_register_page: true };\n      if (tpaHint) {\n        payload.tpa_hint = tpaHint;\n      }\n      getRegistrationDataFromBackend(payload);\n      setFormStartTime(Date.now());\n    }\n  }, [formStartTime, getRegistrationDataFromBackend, queryParams, tpaHint]);\n\n  /**\n   * Backup the registration form in redux when register page is toggled.\n   */\n  useEffect(() => {\n    if (shouldBackupState) {\n      backupFormState({\n        configurableFormFields: { ...configurableFormFields },\n        formFields: { ...formFields },\n        emailSuggestion: { ...emailSuggestion },\n        errors: { ...errors },\n      });\n    }\n  }, [shouldBackupState, configurableFormFields, formFields, errors, emailSuggestion, backupFormState]);\n\n  useEffect(() => {\n    if (backendValidations) {\n      setErrors(prevErrors => ({ ...prevErrors, ...backendValidations }));\n    }\n  }, [backendValidations]);\n\n  useEffect(() => {\n    if (registrationErrorCode) {\n      setErrorCode(prevState => ({ type: registrationErrorCode, count: prevState.count + 1 }));\n    }\n  }, [registrationErrorCode]);\n\n  useEffect(() => {\n    let countryCode = '';\n    let countryDisplayValue = '';\n\n    const selectedCountry = countryList.find(\n      (country) => (country[COUNTRY_CODE_KEY].toLowerCase() === backendCountryCode.toLowerCase()),\n    );\n    if (selectedCountry) {\n      countryCode = selectedCountry[COUNTRY_CODE_KEY];\n      countryDisplayValue = selectedCountry[COUNTRY_DISPLAY_KEY];\n    }\n    setConfigurableFormFields(prevState => (\n      {\n        ...prevState,\n        country: {\n          countryCode, displayValue: countryDisplayValue,\n        },\n      }\n    ));\n  }, [backendCountryCode, countryList]);\n\n  /**\n   * We need to remove the placeholder from the field, adding a space will do that.\n   * This is needed because we are placing the username suggestions on top of the field.\n   */\n  useEffect(() => {\n    if (usernameSuggestions.length && !formFields.username) {\n      setFormFields(prevState => ({ ...prevState, username: ' ' }));\n    }\n  }, [usernameSuggestions, formFields]);\n\n  useEffect(() => {\n    if (registrationResult.success) {\n      // TODO: Do we still need this cookie?\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      });\n\n      // Fire GTM event used for integration with impact.com\n      window.dataLayer = window.dataLayer || [];\n      window.dataLayer.push({\n        event: 'ImpactRegistrationEvent',\n      });\n    }\n  }, [registrationResult]);\n\n  const validateInput = (fieldName, value, payload, shouldValidateFromBackend, setError = true) => {\n    let fieldError = '';\n    let confirmEmailError = ''; // This is to handle the use case where the form contains \"confirm email\" field\n    let countryFieldCode = '';\n\n    switch (fieldName) {\n      case 'name':\n        if (!value.trim()) {\n          fieldError = formatMessage(messages['empty.name.field.error']);\n        } else if (value && value.match(urlRegex)) {\n          fieldError = formatMessage(messages['name.validation.message']);\n        } else if (value && !payload.username.trim() && shouldValidateFromBackend) {\n          validateFromBackend(payload);\n        }\n        break;\n      case 'email':\n        if (!value) {\n          fieldError = formatMessage(messages['empty.email.field.error']);\n        } else if (value.length <= 2) {\n          fieldError = formatMessage(messages['email.invalid.format.error']);\n        } else {\n          const [username, domainName] = value.split('@');\n          // Check if email address is invalid. If we have a suggestion for invalid email\n          // provide that along with the error message.\n          if (!emailRegex.test(value)) {\n            fieldError = formatMessage(messages['email.invalid.format.error']);\n            setEmailSuggestion({\n              suggestion: getSuggestionForInvalidEmail(domainName, username),\n              type: 'error',\n            });\n          } else {\n            const response = validateEmailAddress(value, username, domainName);\n            if (response.hasError) {\n              fieldError = formatMessage(messages['email.invalid.format.error']);\n              delete response.hasError;\n            } else if (shouldValidateFromBackend) {\n              validateFromBackend(payload);\n            }\n            setEmailSuggestion({ ...response });\n\n            if (configurableFormFields.confirm_email && value !== configurableFormFields.confirm_email) {\n              confirmEmailError = formatMessage(messages['email.do.not.match']);\n            }\n          }\n        }\n        break;\n      case 'username':\n        if (!value || value.length <= 1 || value.length > 30) {\n          fieldError = formatMessage(messages['username.validation.message']);\n        } else if (!value.match(/^[a-zA-Z0-9_-]*$/i)) {\n          fieldError = formatMessage(messages['username.format.validation.message']);\n        } else if (shouldValidateFromBackend) {\n          validateFromBackend(payload);\n        }\n        break;\n      case 'password':\n        if (!value || !LETTER_REGEX.test(value) || !NUMBER_REGEX.test(value) || value.length < 8) {\n          fieldError = formatMessage(messages['password.validation.message']);\n        } else if (shouldValidateFromBackend) {\n          validateFromBackend(payload);\n        }\n        break;\n      case 'country':\n        if (flags.showConfigurableEdxFields || flags.showConfigurableRegistrationFields) {\n          const {\n            countryCode, displayValue, error,\n          } = validateCountryField(value.displayValue.trim(), countryList, formatMessage(messages['empty.country.field.error']));\n          fieldError = error;\n          countryFieldCode = countryCode;\n          setConfigurableFormFields(prevState => ({ ...prevState, country: { countryCode, displayValue } }));\n        }\n        break;\n      default:\n        if (flags.showConfigurableRegistrationFields) {\n          if (!value && fieldDescriptions[fieldName].error_message) {\n            fieldError = fieldDescriptions[fieldName].error_message;\n          } else if (fieldName === 'confirm_email' && formFields.email && value !== formFields.email) {\n            fieldError = formatMessage(messages['email.do.not.match']);\n          }\n        }\n        break;\n    }\n    if (setError) {\n      setErrors(prevErrors => ({\n        ...prevErrors,\n        confirm_email: flags.showConfigurableRegistrationFields ? confirmEmailError : '',\n        [fieldName]: fieldError,\n      }));\n    }\n    return { fieldError, countryFieldCode };\n  };\n\n  const isFormValid = (payload, focusedFieldError) => {\n    const fieldErrors = { ...errors };\n    let isValid = !focusedFieldError;\n    Object.keys(payload).forEach(key => {\n      if (!payload[key]) {\n        fieldErrors[key] = formatMessage(messages[`empty.${key}.field.error`]);\n      }\n      if (fieldErrors[key]) {\n        isValid = false;\n      }\n    });\n\n    if (flags.showConfigurableEdxFields) {\n      if (!configurableFormFields.country.displayValue) {\n        fieldErrors.country = formatMessage(messages['empty.country.field.error']);\n      }\n      if (fieldErrors.country) {\n        isValid = false;\n      }\n    }\n\n    if (flags.showConfigurableRegistrationFields) {\n      Object.keys(fieldDescriptions).forEach(key => {\n        if (key === 'country' && !configurableFormFields.country.displayValue) {\n          fieldErrors[key] = formatMessage(messages['empty.country.field.error']);\n        } else if (!configurableFormFields[key]) {\n          fieldErrors[key] = fieldDescriptions[key].error_message;\n        }\n        if (fieldErrors[key]) {\n          isValid = false;\n        }\n      });\n    }\n\n    if (focusedField) {\n      fieldErrors[focusedField] = focusedFieldError;\n    }\n    setErrors({ ...fieldErrors });\n    return isValid;\n  };\n\n  const handleSuggestionClick = (event, fieldName, suggestion = '') => {\n    event.preventDefault();\n    setErrors(prevErrors => ({ ...prevErrors, [fieldName]: '' }));\n    switch (fieldName) {\n      case 'email':\n        setFormFields(prevState => ({ ...prevState, email: emailSuggestion.suggestion }));\n        setEmailSuggestion({ suggestion: '', type: '' });\n        break;\n      case 'username':\n        setFormFields(prevState => ({ ...prevState, username: suggestion }));\n        props.resetUsernameSuggestions();\n        break;\n      default:\n        break;\n    }\n  };\n\n  const handleEmailSuggestionClosed = () => setEmailSuggestion({ suggestion: '', type: '' });\n\n  const handleUsernameSuggestionClosed = () => props.resetUsernameSuggestions();\n\n  const handleOnChange = (event) => {\n    const { name } = event.target;\n    let value = event.target.type === 'checkbox' ? event.target.checked : event.target.value;\n    if (registrationError[name]) {\n      clearBackendError(name);\n      setErrors(prevErrors => ({ ...prevErrors, [name]: '' }));\n    }\n    if (name === 'username') {\n      if (value.length > 30) {\n        return;\n      }\n      if (value.startsWith(' ')) {\n        value = value.trim();\n      }\n    }\n\n    setFormFields(prevState => ({ ...prevState, [name]: value }));\n  };\n\n  const handleOnBlur = (event) => {\n    const { name, value } = event.target;\n    const payload = {\n      name: formFields.name,\n      email: formFields.email,\n      username: formFields.username,\n      password: formFields.password,\n      form_field_key: name,\n    };\n\n    setFocusedField(null);\n    validateInput(name, name === 'password' ? formFields.password : value, payload, !validationApiRateLimited);\n  };\n\n  const handleOnFocus = (event) => {\n    const { name, value } = event.target;\n    setErrors(prevErrors => ({ ...prevErrors, [name]: '' }));\n    clearBackendError(name);\n    // Since we are removing the form errors from the focused field, we will\n    // need to rerun the validation for focused field on form submission.\n    setFocusedField(name);\n\n    if (name === 'username') {\n      props.resetUsernameSuggestions();\n      // If we added a space character to username field to display the suggestion\n      // remove it before user enters the input. This is to ensure user doesn't\n      // have a space prefixed to the username.\n      if (value === ' ') {\n        setFormFields(prevState => ({ ...prevState, [name]: '' }));\n      }\n    }\n  };\n\n  const registerUser = () => {\n    const totalRegistrationTime = (Date.now() - formStartTime) / 1000;\n    let payload = { ...formFields };\n\n    if (currentProvider) {\n      delete payload.password;\n      payload.social_auth_provider = currentProvider;\n    }\n\n    const { fieldError: focusedFieldError, countryFieldCode } = focusedField ? (\n      validateInput(\n        focusedField,\n        (focusedField in fieldDescriptions || focusedField === 'country') ? (\n          configurableFormFields[focusedField]\n        ) : formFields[focusedField],\n        payload,\n        false,\n        false,\n      )\n    ) : '';\n\n    if (!isFormValid(payload, focusedFieldError)) {\n      setErrorCode(prevState => ({ type: FORM_SUBMISSION_ERROR, count: prevState.count + 1 }));\n      return;\n    }\n\n    Object.keys(configurableFormFields).forEach((fieldName) => {\n      if (fieldName === 'country') {\n        payload[fieldName] = focusedField === 'country' ? countryFieldCode : configurableFormFields[fieldName].countryCode;\n      } else {\n        payload[fieldName] = configurableFormFields[fieldName];\n      }\n    });\n\n    // Don't send the marketing email opt-in value if the flag is turned off\n    if (!flags.showMarketingEmailOptInCheckbox) {\n      delete payload.marketingEmailsOptIn;\n    }\n\n    payload = snakeCaseObject(payload);\n    payload.totalRegistrationTime = totalRegistrationTime;\n\n    // add query params to the payload\n    payload = { ...payload, ...queryParams };\n    props.registerNewUser(payload);\n  };\n\n  const handleSubmit = (e) => {\n    e.preventDefault();\n    registerUser();\n  };\n\n  useEffect(() => {\n    if (autoSubmitRegisterForm && userPipelineDataLoaded) {\n      registerUser();\n    }\n  }, [autoSubmitRegisterForm, userPipelineDataLoaded]); // eslint-disable-line react-hooks/exhaustive-deps\n\n  const renderForm = () => {\n    if (institutionLogin) {\n      return (\n        <InstitutionLogistration\n          secondaryProviders={secondaryProviders}\n          headingTitle={formatMessage(messages['register.institution.login.page.title'])}\n        />\n      );\n    }\n    return (\n      <>\n        <Helmet>\n          <title>{formatMessage(messages['register.page.title'], { siteName: getConfig().SITE_NAME })}</title>\n        </Helmet>\n        <RedirectLogistration\n          success={registrationResult.success}\n          redirectUrl={registrationResult.redirectUrl}\n          finishAuthUrl={finishAuthUrl}\n          optionalFields={optionalFields}\n          redirectToProgressiveProfilingPage={\n            getConfig().ENABLE_PROGRESSIVE_PROFILING_ON_AUTHN && Object.keys(optionalFields).includes('fields')\n          }\n        />\n        {autoSubmitRegisterForm && !errorCode.type ? (\n          <div className=\"mw-xs mt-5 text-center\">\n            <Spinner animation=\"border\" variant=\"primary\" id=\"tpa-spinner\" />\n          </div>\n        ) : (\n          <div className=\"mw-xs mt-3\">\n            <ThirdPartyAuthAlert\n              currentProvider={currentProvider}\n              platformName={platformName}\n              referrer={REGISTER_PAGE}\n            />\n            <RegistrationFailure\n              errorCode={errorCode.type}\n              failureCount={errorCode.count}\n              context={{ provider: currentProvider, errorMessage: thirdPartyAuthContext.errorMessage }}\n            />\n            <Form id=\"registration-form\" name=\"registration-form\">\n              <FormGroup\n                name=\"name\"\n                value={formFields.name}\n                handleChange={handleOnChange}\n                handleBlur={handleOnBlur}\n                handleFocus={handleOnFocus}\n                errorMessage={errors.name}\n                helpText={[formatMessage(messages['help.text.name'])]}\n                floatingLabel={formatMessage(messages['registration.fullname.label'])}\n              />\n              <EmailField\n                name=\"email\"\n                value={formFields.email}\n                handleChange={handleOnChange}\n                handleBlur={handleOnBlur}\n                handleFocus={handleOnFocus}\n                handleSuggestionClick={(e) => handleSuggestionClick(e, 'email')}\n                handleOnClose={handleEmailSuggestionClosed}\n                emailSuggestion={emailSuggestion}\n                errorMessage={errors.email}\n                helpText={[formatMessage(messages['help.text.email'])]}\n                floatingLabel={formatMessage(messages['registration.email.label'])}\n              />\n              <UsernameField\n                name=\"username\"\n                spellCheck=\"false\"\n                value={formFields.username}\n                handleBlur={handleOnBlur}\n                handleChange={handleOnChange}\n                handleFocus={handleOnFocus}\n                handleSuggestionClick={handleSuggestionClick}\n                handleUsernameSuggestionClose={handleUsernameSuggestionClosed}\n                usernameSuggestions={usernameSuggestions}\n                errorMessage={errors.username}\n                helpText={[formatMessage(messages['help.text.username.1']), formatMessage(messages['help.text.username.2'])]}\n                floatingLabel={formatMessage(messages['registration.username.label'])}\n              />\n              {!currentProvider && (\n                <PasswordField\n                  name=\"password\"\n                  value={formFields.password}\n                  handleChange={handleOnChange}\n                  handleBlur={handleOnBlur}\n                  handleFocus={handleOnFocus}\n                  errorMessage={errors.password}\n                  floatingLabel={formatMessage(messages['registration.password.label'])}\n                />\n              )}\n              <ConfigurableRegistrationForm\n                countryList={countryList}\n                email={formFields.email}\n                fieldErrors={errors}\n                formFields={configurableFormFields}\n                setFieldErrors={setErrors}\n                setFormFields={setConfigurableFormFields}\n                setFocusedField={setFocusedField}\n                fieldDescriptions={fieldDescriptions}\n              />\n              <StatefulButton\n                id=\"register-user\"\n                name=\"register-user\"\n                type=\"submit\"\n                variant=\"brand\"\n                className=\"register-stateful-button-width mt-4 mb-4\"\n                state={submitState}\n                labels={{\n                  default: formatMessage(messages['create.account.for.free.button']),\n                  pending: '',\n                }}\n                onClick={handleSubmit}\n                onMouseDown={(e) => e.preventDefault()}\n              />\n              <ThirdPartyAuth\n                currentProvider={currentProvider}\n                providers={providers}\n                secondaryProviders={secondaryProviders}\n                handleInstitutionLogin={handleInstitutionLogin}\n                thirdPartyAuthApiStatus={thirdPartyAuthApiStatus}\n              />\n            </Form>\n          </div>\n        )}\n\n      </>\n    );\n  };\n\n  if (tpaHint) {\n    if (thirdPartyAuthApiStatus === PENDING_STATE) {\n      return <Skeleton height={36} />;\n    }\n    const { provider, skipHintedLogin } = getTpaProvider(tpaHint, providers, secondaryProviders);\n    if (skipHintedLogin) {\n      window.location.href = getConfig().LMS_BASE_URL + provider.registerUrl;\n      return null;\n    }\n    return provider ? <EnterpriseSSO provider={provider} /> : renderForm();\n  }\n  return (\n    renderForm()\n  );\n};\n\nconst mapStateToProps = state => {\n  const registerPageState = state.register;\n  return {\n    backedUpFormData: registerPageState.registrationFormData,\n    backendCountryCode: registerPageState.backendCountryCode,\n    backendValidations: validationsSelector(state),\n    fieldDescriptions: fieldDescriptionSelector(state),\n    optionalFields: optionalFieldsSelector(state),\n    registrationError: registerPageState.registrationError,\n    registrationErrorCode: registrationErrorSelector(state),\n    registrationResult: registerPageState.registrationResult,\n    shouldBackupState: registerPageState.shouldBackupState,\n    userPipelineDataLoaded: registerPageState.userPipelineDataLoaded,\n    submitState: registerPageState.submitState,\n    thirdPartyAuthApiStatus: state.commonComponents.thirdPartyAuthApiStatus,\n    thirdPartyAuthContext: thirdPartyAuthContextSelector(state),\n    validationApiRateLimited: registerPageState.validationApiRateLimited,\n    usernameSuggestions: registerPageState.usernameSuggestions,\n  };\n};\n\nRegistrationPage.propTypes = {\n  backedUpFormData: PropTypes.shape({\n    configurableFormFields: PropTypes.shape({}),\n    formFields: PropTypes.shape({}),\n    errors: PropTypes.shape({}),\n    emailSuggestion: PropTypes.shape({}),\n  }),\n  backendCountryCode: PropTypes.string,\n  backendValidations: PropTypes.shape({\n    name: PropTypes.string,\n    email: PropTypes.string,\n    username: PropTypes.string,\n    password: PropTypes.string,\n  }),\n  fieldDescriptions: PropTypes.shape({}),\n  institutionLogin: PropTypes.bool.isRequired,\n  optionalFields: PropTypes.shape({}),\n  registrationError: PropTypes.shape({}),\n  registrationErrorCode: PropTypes.string,\n  registrationResult: PropTypes.shape({\n    redirectUrl: PropTypes.string,\n    success: PropTypes.bool,\n  }),\n  shouldBackupState: PropTypes.bool,\n  submitState: PropTypes.string,\n  thirdPartyAuthApiStatus: PropTypes.string,\n  thirdPartyAuthContext: PropTypes.shape({\n    autoSubmitRegForm: PropTypes.bool,\n    countryCode: PropTypes.string,\n    currentProvider: PropTypes.string,\n    errorMessage: PropTypes.string,\n    finishAuthUrl: 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    platformName: PropTypes.string,\n    providers: PropTypes.arrayOf(\n      PropTypes.shape({}),\n    ),\n    secondaryProviders: PropTypes.arrayOf(\n      PropTypes.shape({}),\n    ),\n  }),\n  usernameSuggestions: PropTypes.arrayOf(PropTypes.string),\n  userPipelineDataLoaded: PropTypes.bool,\n  validationApiRateLimited: PropTypes.bool,\n  // Actions\n  backupFormState: PropTypes.func.isRequired,\n  clearBackendError: PropTypes.func.isRequired,\n  getRegistrationDataFromBackend: PropTypes.func.isRequired,\n  handleInstitutionLogin: PropTypes.func.isRequired,\n  registerNewUser: PropTypes.func.isRequired,\n  resetUsernameSuggestions: PropTypes.func.isRequired,\n  setUserPipelineDetailsLoaded: PropTypes.func.isRequired,\n  validateFromBackend: PropTypes.func.isRequired,\n};\n\nRegistrationPage.defaultProps = {\n  backedUpFormData: {\n    configurableFormFields: {\n      marketingEmailsOptIn: true,\n    },\n    formFields: {\n      name: '', email: '', username: '', password: '',\n    },\n    errors: {\n      name: '', email: '', username: '', password: '',\n    },\n    emailSuggestion: {\n      suggestion: '', type: '',\n    },\n  },\n  backendCountryCode: '',\n  backendValidations: null,\n  fieldDescriptions: {},\n  optionalFields: {},\n  registrationError: {},\n  registrationErrorCode: '',\n  registrationResult: null,\n  shouldBackupState: false,\n  submitState: DEFAULT_STATE,\n  thirdPartyAuthApiStatus: PENDING_STATE,\n  thirdPartyAuthContext: {\n    autoSubmitRegForm: false,\n    countryCode: null,\n    currentProvider: null,\n    errorMessage: null,\n    finishAuthUrl: null,\n    pipelineUserDetails: null,\n    providers: [],\n    secondaryProviders: [],\n  },\n  usernameSuggestions: [],\n  userPipelineDataLoaded: false,\n  validationApiRateLimited: false,\n};\n\nexport default connect(\n  mapStateToProps,\n  {\n    backupFormState: backupRegistrationFormBegin,\n    clearBackendError: clearRegistertionBackendError,\n    getRegistrationDataFromBackend: getThirdPartyAuthContext,\n    resetUsernameSuggestions: clearUsernameSuggestions,\n    validateFromBackend: fetchRealtimeValidations,\n    registerNewUser,\n    setUserPipelineDetailsLoaded: setUserPipelineDataLoaded,\n  },\n)(RegistrationPage);\n","import {\n  DEFAULT_STATE,\n  PENDING_STATE,\n} from '../../data/constants';\nimport {\n  BACKUP_REGISTRATION_DATA,\n  REGISTER_CLEAR_USERNAME_SUGGESTIONS,\n  REGISTER_FORM_VALIDATIONS,\n  REGISTER_NEW_USER,\n  REGISTER_SET_COUNTRY_CODE, REGISTER_SET_USER_PIPELINE_DATA_LOADED,\n  REGISTERATION_CLEAR_BACKEND_ERROR,\n} from './actions';\n\nexport const defaultState = {\n  backendCountryCode: '',\n  registrationError: {},\n  registrationResult: {},\n  registrationFormData: {\n    configurableFormFields: {\n      marketingEmailsOptIn: true,\n    },\n    formFields: {\n      name: '', email: '', username: '', password: '',\n    },\n    emailSuggestion: {\n      suggestion: '', type: '',\n    },\n    errors: {\n      name: '', email: '', username: '', password: '',\n    },\n  },\n  validations: null,\n  submitState: DEFAULT_STATE,\n  userPipelineDataLoaded: false,\n  usernameSuggestions: [],\n  validationApiRateLimited: false,\n  shouldBackupState: false,\n};\n\nconst reducer = (state = defaultState, action = {}) => {\n  switch (action.type) {\n    case BACKUP_REGISTRATION_DATA.BASE:\n      return {\n        ...state,\n        shouldBackupState: true,\n      };\n    case BACKUP_REGISTRATION_DATA.BEGIN:\n      return {\n        ...defaultState,\n        usernameSuggestions: state.usernameSuggestions,\n        registrationFormData: { ...action.payload },\n        userPipelineDataLoaded: state.userPipelineDataLoaded,\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 REGISTERATION_CLEAR_BACKEND_ERROR: {\n      const registrationErrorTemp = state.registrationError;\n      delete registrationErrorTemp[action.payload];\n      return {\n        ...state,\n        registrationError: { ...registrationErrorTemp },\n      };\n    }\n    case REGISTER_FORM_VALIDATIONS.SUCCESS: {\n      const { usernameSuggestions, ...validationWithoutUsernameSuggestions } = action.payload.validations;\n      return {\n        ...state,\n        validations: validationWithoutUsernameSuggestions,\n        usernameSuggestions: usernameSuggestions || state.usernameSuggestions,\n      };\n    }\n    case REGISTER_FORM_VALIDATIONS.FAILURE:\n      return {\n        ...state,\n        validationApiRateLimited: true,\n        validations: null,\n      };\n    case REGISTER_CLEAR_USERNAME_SUGGESTIONS:\n      return {\n        ...state,\n        usernameSuggestions: [],\n      };\n    case REGISTER_SET_COUNTRY_CODE: {\n      const { countryCode } = action.payload;\n      if (!state.registrationFormData.configurableFormFields.country) {\n        return {\n          ...state,\n          backendCountryCode: countryCode,\n        };\n      }\n      return state;\n    }\n    case REGISTER_SET_USER_PIPELINE_DATA_LOADED: {\n      const { value } = action.payload;\n      return {\n        ...state,\n        userPipelineDataLoaded: value,\n      };\n    }\n    default:\n      return {\n        ...state,\n        shouldBackupState: false,\n      };\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';\nimport { connect } from 'react-redux';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { sendPageEvent, sendTrackEvent } from '@edx/frontend-platform/analytics';\nimport { getAuthService } from '@edx/frontend-platform/auth';\nimport { useIntl } 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, getTpaProvider, updatePathWithQueryParams } from '../data/utils';\nimport { LoginPage } from '../login';\nimport { RegistrationPage } from '../register';\nimport { backupRegistrationForm } from '../register/data/actions';\nimport { clearThirdPartyAuthContextErrorMessage } from './data/actions';\nimport {\n  tpaProvidersSelector,\n} from './data/selectors';\nimport messages from './messages';\n\nconst Logistration = (props) => {\n  const { selectedPage, tpaProviders } = props;\n  const tpaHint = getTpaHint();\n  const {\n    providers, secondaryProviders,\n  } = tpaProviders;\n  const { formatMessage } = useIntl();\n  const [institutionLogin, setInstitutionLogin] = useState(false);\n  const [key, setKey] = useState('');\n  const disablePublicAccountCreation = getConfig().ALLOW_PUBLIC_ACCOUNT_CREATION === false;\n\n  useEffect(() => {\n    const authService = getAuthService();\n    if (authService) {\n      authService.getCsrfTokenService().getCsrfToken(getConfig().LMS_BASE_URL);\n    }\n  });\n\n  const handleInstitutionLogin = (e) => {\n    sendTrackEvent('edx.bi.institution_login_form.toggled', { category: 'user-engagement' });\n    if (typeof e === 'string') {\n      sendPageEvent('login_and_registration', e === '/login' ? 'login' : 'register');\n    } else {\n      sendPageEvent('login_and_registration', e.target.dataset.eventName);\n    }\n\n    setInstitutionLogin(!institutionLogin);\n  };\n\n  const handleOnSelect = (tabKey) => {\n    sendTrackEvent(`edx.bi.${tabKey.replace('/', '')}_form.toggled`, { category: 'user-engagement' });\n    props.clearThirdPartyAuthContextErrorMessage();\n    if (tabKey === LOGIN_PAGE) {\n      props.backupRegistrationForm();\n    }\n    setKey(tabKey);\n  };\n\n  const tabTitle = (\n    <div className=\"d-flex\">\n      <Icon src={ChevronLeft} className=\"left-icon\" />\n      <span className=\"ml-2\">\n        {selectedPage === LOGIN_PAGE\n          ? formatMessage(messages['logistration.sign.in'])\n          : formatMessage(messages['logistration.register'])}\n      </span>\n    </div>\n  );\n\n  const isValidTpaHint = () => {\n    const { provider } = getTpaProvider(tpaHint, providers, secondaryProviders);\n    return !!provider;\n  };\n\n  return (\n    <BaseComponent>\n      <div>\n        {disablePublicAccountCreation\n          ? (\n            <>\n              <Redirect to={updatePathWithQueryParams(LOGIN_PAGE)} />\n              {institutionLogin && (\n                <Tabs defaultActiveKey=\"\" id=\"controlled-tab\" onSelect={handleInstitutionLogin}>\n                  <Tab title={tabTitle} eventKey={LOGIN_PAGE} />\n                </Tabs>\n              )}\n              <div id=\"main-content\" className=\"main-content\">\n                {!institutionLogin && (\n                  <h3 className=\"mb-4.5\">{formatMessage(messages['logistration.sign.in'])}</h3>\n                )}\n                <LoginPage institutionLogin={institutionLogin} handleInstitutionLogin={handleInstitutionLogin} />\n              </div>\n            </>\n          )\n          : (\n            <div>\n              {institutionLogin\n                ? (\n                  <Tabs defaultActiveKey=\"\" id=\"controlled-tab\" onSelect={handleInstitutionLogin}>\n                    <Tab title={tabTitle} eventKey={selectedPage === LOGIN_PAGE ? LOGIN_PAGE : REGISTER_PAGE} />\n                  </Tabs>\n                )\n                : (!isValidTpaHint() && (\n                  <Tabs defaultActiveKey={selectedPage} id=\"controlled-tab\" onSelect={handleOnSelect}>\n                    <Tab title={formatMessage(messages['logistration.register'])} eventKey={REGISTER_PAGE} />\n                    <Tab title={formatMessage(messages['logistration.sign.in'])} eventKey={LOGIN_PAGE} />\n                  </Tabs>\n                ))}\n              { key && (\n                <Redirect to={updatePathWithQueryParams(key)} />\n              )}\n              <div id=\"main-content\" className=\"main-content\">\n                {selectedPage === LOGIN_PAGE\n                  ? <LoginPage institutionLogin={institutionLogin} handleInstitutionLogin={handleInstitutionLogin} />\n                  : (\n                    <RegistrationPage\n                      institutionLogin={institutionLogin}\n                      handleInstitutionLogin={handleInstitutionLogin}\n                    />\n                  )}\n              </div>\n            </div>\n          )}\n      </div>\n    </BaseComponent>\n  );\n};\n\nLogistration.propTypes = {\n  selectedPage: PropTypes.string,\n  backupRegistrationForm: PropTypes.func.isRequired,\n  clearThirdPartyAuthContextErrorMessage: PropTypes.func.isRequired,\n  tpaProviders: PropTypes.shape({\n    providers: PropTypes.arrayOf(PropTypes.shape({})),\n    secondaryProviders: PropTypes.arrayOf(PropTypes.shape({})),\n  }),\n};\n\nLogistration.defaultProps = {\n  tpaProviders: {\n    providers: [],\n    secondaryProviders: [],\n  },\n};\n\nLogistration.defaultProps = {\n  selectedPage: REGISTER_PAGE,\n};\n\nconst mapStateToProps = state => ({\n  tpaProviders: tpaProvidersSelector(state),\n});\n\nexport default connect(\n  mapStateToProps,\n  {\n    backupRegistrationForm,\n    clearThirdPartyAuthContextErrorMessage,\n  },\n)(Logistration);\n","import React from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport Zendesk from 'react-zendesk';\n\nimport messages from './messages';\n\nconst ZendeskHelp = () => {\n  const { formatMessage } = useIntl();\n  const setting = {\n    cookies: true,\n    webWidget: {\n      contactOptions: {\n        enabled: false,\n      },\n      chat: {\n        suppress: false,\n      },\n      contactForm: {\n        ticketForms: [\n          {\n            id: 360003368814,\n            subject: false,\n            fields: [{ id: 'description', prefill: { '*': '' } }],\n          },\n        ],\n        selectTicketForm: {\n          '*': formatMessage(messages.selectTicketForm),\n        },\n        attachments: true,\n      },\n      helpCenter: {\n        originalArticleButton: true,\n      },\n      answerBot: {\n        suppress: false,\n        contactOnlyAfterQuery: true,\n        title: { '*': formatMessage(messages.supportTitle) },\n        avatar: {\n          url: getConfig().ZENDESK_LOGO_URL,\n          name: { '*': formatMessage(messages.supportTitle) },\n        },\n      },\n    },\n  };\n\n  return (\n    <Zendesk defer zendeskKey={getConfig().ZENDESK_KEY} {...setting} />\n  );\n};\n\nexport default ZendeskHelp;\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.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});\nexport default messages;\n","import React from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { FormattedMessage, useIntl } 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 { formatMessage } = useIntl();\n  const { email, emailError } = props;\n  let message = '';\n  let heading = formatMessage(messages['forgot.password.error.alert.title']);\n  let { status } = props;\n\n  if (emailError) {\n    status = FORM_SUBMISSION_ERROR;\n  }\n\n  switch (status) {\n    case COMPLETE_STATE:\n      heading = formatMessage(messages['confirmation.message.title']);\n      message = (\n        <FormattedMessage\n          id=\"forgot.password.confirmation.message\"\n          defaultMessage=\"We sent an email to {email} with instructions to reset your password.\n          If you do not receive a password reset message after 1 minute, verify that you entered\n          the correct email address, or check your spam folder. If you need further assistance, {supportLink}.\"\n          description=\"Forgot password confirmation message\"\n          values={{\n            email: <span className=\"data-hj-suppress\">{email}</span>,\n            supportLink: (\n              <Alert.Link href={getConfig().PASSWORD_RESET_SUPPORT_LINK} target=\"_blank\">\n                {formatMessage(messages['confirmation.support.link'])}\n              </Alert.Link>\n            ),\n          }}\n        />\n      );\n     break;\n    case INTERNAL_SERVER_ERROR:\n      message = formatMessage(messages['internal.server.error']);\n      break;\n    case FORBIDDEN_STATE:\n      heading = formatMessage(messages['forgot.password.error.message.title']);\n      message = formatMessage(messages['forgot.password.request.in.progress.message']);\n      break;\n    case FORM_SUBMISSION_ERROR:\n      message = formatMessage(messages['extend.field.errors'], { emailError });\n      break;\n    case PASSWORD_RESET.INVALID_TOKEN:\n      heading = formatMessage(messages['invalid.token.heading']);\n      message = formatMessage(messages['invalid.token.error.message']);\n      break;\n    case PASSWORD_RESET.FORBIDDEN_REQUEST:\n      heading = formatMessage(messages['token.validation.rate.limit.error.heading']);\n      message = formatMessage(messages['token.validation.rate.limit.error']);\n      break;\n    case PASSWORD_RESET.INTERNAL_SERVER_ERROR:\n      heading = formatMessage(messages['token.validation.internal.sever.error.heading']);\n      message = formatMessage(messages['token.validation.internal.sever.error']);\n      break;\n    default:\n      break;\n  }\n\n  if (message) {\n    return (\n      <Alert\n        id=\"validation-errors\"\n        className=\"mb-4\"\n        variant={`${status === 'complete' ? 'success' : 'danger'}`}\n        icon={status === 'complete' ? CheckCircle : Error}\n      >\n        <Alert.Heading>{heading}</Alert.Heading>\n        <p>{message}</p>\n      </Alert>\n    );\n  }\n  return null;\n};\n\nForgotPasswordAlert.defaultProps = {\n  email: '',\n  emailError: '',\n};\n\nForgotPasswordAlert.propTypes = {\n  status: PropTypes.string.isRequired,\n  email: PropTypes.string,\n  emailError: PropTypes.string,\n};\n\nexport default ForgotPasswordAlert;\n","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 { useIntl } 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    status, submitState, emailValidationError,\n  } = props;\n\n  const { formatMessage } = useIntl();\n  const [email, setEmail] = useState(props.email);\n  const [bannerEmail, setBannerEmail] = useState('');\n  const [formErrors, setFormErrors] = useState('');\n  const [validationError, setValidationError] = useState(emailValidationError);\n  const [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 = formatMessage(messages['forgot.password.empty.email.field.error']);\n    } else if (!emailRegex.test(value)) {\n      error = formatMessage(messages['forgot.password.page.invalid.email.message']);\n    }\n\n    return error;\n  };\n\n  const handleBlur = () => {\n    props.setForgotPasswordFormData({ email, emailValidationError: getValidationMessage(email) });\n  };\n\n  const handleFocus = () => props.setForgotPasswordFormData({ emailValidationError: '' });\n\n  const handleSubmit = (e) => {\n    e.preventDefault();\n    setBannerEmail(email);\n\n    const error = getValidationMessage(email);\n    if (error) {\n      setFormErrors(error);\n      props.setForgotPasswordFormData({ email, emailValidationError: error });\n      windowScrollTo({ left: 0, top: 0, behavior: 'smooth' });\n    } else {\n      props.forgotPassword(email);\n    }\n  };\n\n  const tabTitle = (\n    <div className=\"d-inline-flex flex-wrap align-items-center\">\n      <Icon src={ChevronLeft} />\n      <span className=\"ml-2\">{formatMessage(messages['sign.in.text'])}</span>\n    </div>\n  );\n\n  return (\n    <BaseComponent>\n      <Helmet>\n        <title>{formatMessage(messages['forgot.password.page.title'],\n          { siteName: getConfig().SITE_NAME })}\n        </title>\n      </Helmet>\n      <div>\n        <Tabs activeKey=\"\" id=\"controlled-tab\" onSelect={(k) => setKey(k)}>\n          <Tab title={tabTitle} eventKey={LOGIN_PAGE} />\n        </Tabs>\n        { key && (\n          <Redirect to={updatePathWithQueryParams(key)} />\n        )}\n        <div id=\"main-content\" className=\"main-content\">\n          <Form id=\"forget-password-form\" name=\"forget-password-form\" className=\"mw-xs\">\n            <ForgotPasswordAlert email={bannerEmail} emailError={formErrors} status={status} />\n            <h2 className=\"h4\">\n              {formatMessage(messages['forgot.password.page.heading'])}\n            </h2>\n            <p className=\"mb-4\">\n              {formatMessage(messages['forgot.password.page.instructions'])}\n            </p>\n            <FormGroup\n              floatingLabel={formatMessage(messages['forgot.password.page.email.field.label'])}\n              name=\"email\"\n              value={email}\n              autoComplete=\"on\"\n              errorMessage={validationError}\n              handleChange={(e) => setEmail(e.target.value)}\n              handleBlur={handleBlur}\n              handleFocus={handleFocus}\n              helpText={[formatMessage(messages['forgot.password.email.help.text'], { platformName })]}\n            />\n            <StatefulButton\n              id=\"submit-forget-password\"\n              name=\"submit-forget-password\"\n              type=\"submit\"\n              variant=\"brand\"\n              className=\"forgot-password-button-width\"\n              state={submitState}\n              labels={{\n                default: formatMessage(messages['forgot.password.page.submit.button']),\n                pending: '',\n              }}\n              onClick={handleSubmit}\n              onMouseDown={(e) => e.preventDefault()}\n            />\n            {(getConfig().LOGIN_ISSUE_SUPPORT_LINK) && (\n              <Hyperlink\n                id=\"forgot-password\"\n                name=\"forgot-password\"\n                className=\"ml-4 font-weight-500 text-body\"\n                destination={getConfig().LOGIN_ISSUE_SUPPORT_LINK}\n                target=\"_blank\"\n                showLaunchIcon={false}\n              >\n                {formatMessage(messages['need.help.sign.in.text'])}\n              </Hyperlink>\n            )}\n            <p className=\"mt-5.5 small text-gray-700\">\n              {formatMessage(messages['additional.help.text'], { platformName })}\n              <span>\n                <Hyperlink isInline destination={`mailto:${getConfig().INFO_EMAIL}`}>{getConfig().INFO_EMAIL}</Hyperlink>\n              </span>\n            </p>\n          </Form>\n        </div>\n      </div>\n    </BaseComponent>\n  );\n};\n\nForgotPasswordPage.propTypes = {\n  email: PropTypes.string,\n  emailValidationError: PropTypes.string,\n  forgotPassword: PropTypes.func.isRequired,\n  setForgotPasswordFormData: PropTypes.func.isRequired,\n  status: PropTypes.string,\n  submitState: PropTypes.string,\n};\n\nForgotPasswordPage.defaultProps = {\n  email: '',\n  emailValidationError: '',\n  status: null,\n  submitState: DEFAULT_STATE,\n};\n\nexport default connect(\n  forgotPasswordResultSelector,\n  {\n    forgotPassword,\n    setForgotPasswordFormData,\n  },\n)(ForgotPasswordPage);\n","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 {\n  createInstance,\n} from '@optimizely/react-sdk';\n\nconst OPTIMIZELY_SDK_KEY = process.env.OPTIMIZELY_FULL_STACK_SDK_KEY;\n\nconst optimizely = createInstance({\n  sdkKey: OPTIMIZELY_SDK_KEY,\n});\n\nexport default optimizely;\n","import optimizelyInstance from '../data/optimizely';\n\nconst RECOMMENDATIONS_EXP_KEY = 'welcome_page_recommendations_exp';\nconst RECOMMENDATIONS_EXP_VARIATION = 'welcome_page_recommendations_enabled';\n\nexport const eventNames = {\n  recommendedCourseClicked: 'welcome_page_recommendation_card_click',\n  recommendationsViewed: 'welcome_page_recommendations_viewed',\n};\n\n/**\n  * Activate the post registration recommendations optimizely experiment\n  * and return the true if the user is in variation else false.\n  * @param  {String} userId  user id of authenticated user.\n  * @return {string} true if the user is in variation else false\n*/\nconst activateRecommendationsExperiment = (userId) => optimizelyInstance.activate(RECOMMENDATIONS_EXP_KEY, userId);\n\n/**\n  * Fire an optimizely track event for post registration recommended course card clicked.\n  * @param  {String} userId  user id of authenticated user.\n  * @param  {Object} userAttributes Dictionary of user attributes (optional).\n*/\nconst trackRecommendationCardClickOptimizely = (userId, userAttributes = {}) => {\n  optimizelyInstance.track(eventNames.recommendedCourseClicked, userId, userAttributes);\n};\n\n/**\n  * Fire an optimizely track event for post registration recommendation viewed.\n  * @param  {String} userId  user id of authenticated user.\n  * @param  {Object} userAttributes Dictionary of user attributes (optional).\n*/\nconst trackRecommendationViewedOptimizely = (userId, userAttributes = {}) => {\n  optimizelyInstance.track(eventNames.recommendationsViewed, userId, userAttributes);\n};\n\nexport {\n  RECOMMENDATIONS_EXP_VARIATION,\n  activateRecommendationsExperiment,\n  trackRecommendationCardClickOptimizely,\n  trackRecommendationViewedOptimizely,\n};\n","import { sendTrackEvent } from '@edx/frontend-platform/analytics';\n\nexport const LINK_TIMEOUT = 300;\n\nexport const eventNames = {\n  recommendedCourseClicked: 'edx.bi.user.recommended.course.click',\n  recommendationsGroup: 'edx.bi.user.recommendations.group',\n  recommendationsViewed: 'edx.bi.user.recommendations.viewed',\n};\n\nexport const createLinkTracker = (tracker, href, openInNewTab = false) => (e) => {\n  e.preventDefault();\n  tracker();\n  if (openInNewTab) {\n    return setTimeout(() => { global.open(href, '_blank'); }, LINK_TIMEOUT);\n  }\n  return setTimeout(() => { global.location.href = href; }, LINK_TIMEOUT);\n};\n\nexport const trackRecommendationsClicked = (courseKey, isControl, position, userId, href, recommendationType) => {\n  createLinkTracker(\n    sendTrackEvent(eventNames.recommendedCourseClicked, {\n      page: 'authn_recommendations',\n      position,\n      recommendation_type: recommendationType,\n      course_key: courseKey,\n      is_control: isControl,\n      user_id: userId,\n    }),\n    href,\n    true,\n  );\n};\n\nexport const trackRecommendationsViewed = (recommendedCourseKeys, isControl, userId) => {\n  sendTrackEvent(\n    eventNames.recommendationsViewed, {\n      page: 'authn_recommendations',\n      course_key_array: recommendedCourseKeys,\n      amplitude_recommendations: false,\n      is_control: isControl,\n      user_id: userId,\n    },\n  );\n};\n\nexport const trackRecommendationsGroup = (variation, userId) => {\n  sendTrackEvent(\n    eventNames.recommendationsGroup, {\n      variation,\n      page: 'authn_recommendations',\n      user_id: userId,\n    },\n  );\n};\n\nexport default {\n  trackRecommendationsClicked,\n  trackRecommendationsGroup,\n  trackRecommendationsViewed,\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: 'Welcome | {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  '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  'optional.fields.next.button': {\n    id: 'optional.fields.next.button',\n    defaultMessage: 'Next',\n    description: 'Next 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 { useIntl } from '@edx/frontend-platform/i18n';\nimport { ActionRow, Button, ModalDialog } from '@edx/paragon';\nimport PropTypes from 'prop-types';\n\nimport messages from './messages';\n\nconst ProgressiveProfilingPageModal = (props) => {\n  const { formatMessage } = useIntl();\n  const { 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    <ModalDialog\n      title={formatMessage(messages['modal.title'])}\n      isOpen={isOpen}\n      onClose={() => {}}\n      size=\"sm\"\n      variant=\"default\"\n      hasCloseButton={false}\n    >\n      <ModalDialog.Header>\n        <ModalDialog.Title>\n          {formatMessage(messages['modal.title'])}\n        </ModalDialog.Title>\n      </ModalDialog.Header>\n\n      <ModalDialog.Body>\n        {formatMessage(messages['modal.description'])}\n      </ModalDialog.Body>\n\n      <ModalDialog.Footer>\n        <ActionRow>\n          <Button onClick={handleSubmit} variant=\"primary\">\n            {formatMessage(messages['continue.to.platform'], { platformName })}\n          </Button>\n        </ActionRow>\n      </ModalDialog.Footer>\n    </ModalDialog>\n  );\n};\n\nProgressiveProfilingPageModal.propTypes = {\n  isOpen: PropTypes.bool,\n  redirectUrl: PropTypes.string.isRequired,\n};\n\nProgressiveProfilingPageModal.defaultProps = {\n  isOpen: false,\n};\n\nexport default ProgressiveProfilingPageModal;\n","import React, { useEffect, useState } from 'react';\nimport { connect } from 'react-redux';\n\nimport { getConfig, snakeCaseObject } from '@edx/frontend-platform';\nimport { identifyAuthenticatedUser, 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 { useIntl } 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 { getAllPossibleQueryParams } from '../data/utils';\nimport { FormFieldRenderer } from '../field-renderer';\nimport {\n  activateRecommendationsExperiment, RECOMMENDATIONS_EXP_VARIATION, trackRecommendationViewedOptimizely,\n} from '../recommendations/optimizelyExperiment';\nimport { trackRecommendationsGroup, trackRecommendationsViewed } from '../recommendations/track';\nimport { saveUserProfile } from './data/actions';\nimport { welcomePageSelector } from './data/selectors';\nimport messages from './messages';\nimport ProgressiveProfilingPageModal from './ProgressiveProfilingPageModal';\n\nconst ProgressiveProfiling = (props) => {\n  const {\n    formRenderState, submitState, showError, location,\n  } = props;\n  const enablePersonalizedRecommendations = getConfig().ENABLE_PERSONALIZED_RECOMMENDATIONS;\n  const registrationResponse = location.state?.registrationResult;\n\n  const { formatMessage } = useIntl();\n  const [ready, setReady] = useState(false);\n  const [registrationResult, setRegistrationResult] = useState({ redirectUrl: '' });\n  const [values, setValues] = useState({});\n  const [openDialog, setOpenDialog] = useState(false);\n  const [showRecommendationsPage, setShowRecommendationsPage] = useState(false);\n  const authenticatedUser = getAuthenticatedUser();\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)\n      .then(() => {\n        hydrateAuthenticatedUser().then(() => {\n          setReady(true);\n        });\n      })\n      .catch(() => {});\n\n    if (registrationResponse) {\n      setRegistrationResult(registrationResponse);\n    }\n  }, [DASHBOARD_URL, registrationResponse]);\n\n  useEffect(() => {\n    if (ready && authenticatedUser?.userId) {\n      identifyAuthenticatedUser(authenticatedUser.userId);\n      sendPageEvent('login_and_registration', 'welcome');\n    }\n  }, [authenticatedUser, ready]);\n\n  useEffect(() => {\n    if (registrationResponse && authenticatedUser?.userId) {\n      const queryParams = getAllPossibleQueryParams(registrationResponse.redirectUrl);\n      if (enablePersonalizedRecommendations && !('enrollment_action' in queryParams)) {\n        const userIdStr = authenticatedUser.userId.toString();\n        const variation = activateRecommendationsExperiment(userIdStr);\n        const showRecommendations = variation === RECOMMENDATIONS_EXP_VARIATION;\n\n        trackRecommendationsGroup(variation, authenticatedUser.userId);\n        trackRecommendationViewedOptimizely(userIdStr);\n        setShowRecommendationsPage(showRecommendations);\n        if (!showRecommendations) {\n          trackRecommendationsViewed([], true, authenticatedUser.userId);\n        }\n      }\n    }\n  }, [authenticatedUser, enablePersonalizedRecommendations, registrationResponse]);\n\n  if (!location.state || !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 optionalFields = location.state.optionalFields.fields;\n  const extendedProfile = location.state.optionalFields.extended_profile;\n\n  const handleSubmit = (e) => {\n    e.preventDefault();\n    window.history.replaceState(location.state, null, '');\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    window.history.replaceState(props.location.state, null, '');\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      <span key={fieldData.name}>\n        <FormFieldRenderer\n          fieldData={fieldData}\n          value={values[fieldData.name]}\n          onChangeHandler={onChangeHandler}\n        />\n      </span>\n    );\n  });\n\n  return (\n    <BaseComponent showWelcomeBanner>\n      <Helmet>\n        <title>{formatMessage(messages['progressive.profiling.page.title'],\n          { siteName: getConfig().SITE_NAME })}\n        </title>\n      </Helmet>\n      <ProgressiveProfilingPageModal isOpen={openDialog} redirectUrl={registrationResult.redirectUrl} />\n      {props.shouldRedirect ? (\n        <RedirectLogistration\n          success\n          redirectUrl={registrationResult.redirectUrl}\n          redirectToRecommendationsPage={showRecommendationsPage}\n          educationLevel={values?.level_of_education}\n          userId={authenticatedUser?.userId}\n        />\n      ) : null}\n      <div className=\"mw-xs m-4 pp-page-content\">\n        <div>\n          <h2 className=\"pp-page-heading text-primary\">{formatMessage(messages['progressive.profiling.page.heading'])}</h2>\n        </div>\n        <hr className=\"border-light-700 mb-4\" />\n        {showError ? (\n          <Alert id=\"pp-page-errors\" className=\"mb-3\" variant=\"danger\" icon={Error}>\n            <Alert.Heading>{formatMessage(messages['welcome.page.error.heading'])}</Alert.Heading>\n            <p>{formatMessage(messages['welcome.page.error.message'])}</p>\n          </Alert>\n        ) : null}\n        <Form>\n          {formFields}\n          {(getConfig().AUTHN_PROGRESSIVE_PROFILING_SUPPORT_LINK) && (\n            <span className=\"progressive-profiling-support\">\n              <Hyperlink\n                isInline\n                variant=\"muted\"\n                destination={getConfig().AUTHN_PROGRESSIVE_PROFILING_SUPPORT_LINK}\n                target=\"_blank\"\n                showLaunchIcon={false}\n                onClick={() => (sendTrackEvent('edx.bi.welcome.page.support.link.clicked'))}\n              >\n                {formatMessage(messages['optional.fields.information.link'])}\n              </Hyperlink>\n            </span>\n          )}\n          <div className=\"d-flex mt-4 mb-3\">\n            <StatefulButton\n              type=\"submit\"\n              variant=\"brand\"\n              className=\"login-button-width\"\n              state={submitState}\n              labels={{\n                default: showRecommendationsPage ? formatMessage(messages['optional.fields.next.button']) : formatMessage(messages['optional.fields.submit.button']),\n                pending: '',\n              }}\n              onClick={handleSubmit}\n              onMouseDown={(e) => e.preventDefault()}\n            />\n            <StatefulButton\n              className=\"text-gray-700 font-weight-500\"\n              type=\"submit\"\n              variant=\"link\"\n              labels={{\n                default: formatMessage(messages['optional.fields.skip.button']),\n              }}\n              onClick={handleSkip}\n              onMouseDown={(e) => e.preventDefault()}\n            />\n          </div>\n        </Form>\n      </div>\n    </BaseComponent>\n  );\n};\n\nProgressiveProfiling.propTypes = {\n  formRenderState: PropTypes.string.isRequired,\n  location: PropTypes.shape({\n    state: PropTypes.shape({\n      registrationResult: PropTypes.shape({\n        redirectUrl: PropTypes.string,\n      }),\n      optionalFields: PropTypes.shape({\n        extended_profile: PropTypes.arrayOf(PropTypes.string),\n        fields: PropTypes.shape({}),\n      }),\n    }),\n  }),\n  saveUserProfile: PropTypes.func.isRequired,\n  showError: PropTypes.bool,\n  shouldRedirect: PropTypes.bool,\n  submitState: PropTypes.string,\n};\n\nProgressiveProfiling.defaultProps = {\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)(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 authnProgressiveProfilingReducers,\n  storeName as authnProgressiveProfilingStoreName,\n} from '../progressive-profiling';\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';\n\nconst createRootReducer = () => combineReducers({\n  [loginStoreName]: loginReducer,\n  [registerStoreName]: registerReducer,\n  [commonComponentsStoreName]: commonComponentsReducer,\n  [forgotPasswordStoreName]: forgotPasswordReducer,\n  [resetPasswordStoreName]: resetPasswordReducer,\n  [authnProgressiveProfilingStoreName]: authnProgressiveProfilingReducers,\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 authnProgressiveProfilingSaga } from '../progressive-profiling';\nimport { saga as registrationSaga } from '../register';\nimport { saga as resetPasswordSaga } from '../reset-password';\n\nexport default function* rootSaga() {\n  yield all([\n    loginSaga(),\n    registrationSaga(),\n    commonComponentsSaga(),\n    forgotPasswordSaga(),\n    resetPasswordSaga(),\n    authnProgressiveProfilingSaga(),\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","export const RECOMMENDATIONS_COUNT = 4;\n\n// Education difficulty level mapping\nexport const EDUCATION_LEVEL_MAPPING = {\n  p: 'Advanced',\n  m: 'Advanced',\n  b: 'Intermediate',\n  a: 'Intermediate',\n  hs: 'Introductory',\n  jhs: 'Introductory',\n};\n","import { camelCaseObject } from '@edx/frontend-platform';\nimport algoliasearch from 'algoliasearch/lite';\n\nconst INDEX_NAME = process.env.ALGOLIA_AUTHN_RECOMMENDATIONS_INDEX;\n\nconst getPersonalizedRecommendations = async (educationLevel) => {\n  const facetFilters = ['product:Course', 'availability:Available now'];\n\n  if (educationLevel) {\n    facetFilters.push(`level:${educationLevel}`);\n  }\n  const client = algoliasearch(process.env.ALGOLIA_APP_ID, process.env.ALGOLIA_SEARCH_KEY);\n  const index = client.initIndex(INDEX_NAME);\n  const { hits } = await index.search('', {\n    aroundLatLngViaIP: true,\n    facetFilters,\n  });\n\n  return camelCaseObject(hits);\n};\n\nexport default getPersonalizedRecommendations;\n","export const convertCourseRunKeytoCourseKey = (courseRunKey) => {\n  if (!courseRunKey) {\n    return '';\n  }\n  const newKeyFormat = courseRunKey.includes('+');\n  if (newKeyFormat) {\n    const splitCourseRunKey = courseRunKey.split(':').slice(-1)[0];\n    const splitCourseKey = splitCourseRunKey.split('+').slice(0, 2);\n    return `${splitCourseKey[0]}+${splitCourseKey[1]}`;\n  }\n  const splitCourseKey = courseRunKey.split('/').slice(0, 2);\n  return `${splitCourseKey[0]}+${splitCourseKey[1]}`;\n};\n\nexport default {\n  convertCourseRunKeytoCourseKey,\n};\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n  'recommendation.page.title': {\n    id: 'recommendation.page.title',\n    defaultMessage: 'Recommendations | {siteName}',\n    description: 'recommendation page title',\n  },\n  'recommendation.page.heading': {\n    id: 'recommendation.page.heading',\n    defaultMessage: 'We have a few recommendations to get you started.',\n    description: 'recommendation page heading',\n  },\n  'recommendation.skip.button': {\n    id: 'recommendation.skip.button',\n    defaultMessage: 'Skip for now',\n    description: 'Skip button text',\n  },\n\n});\nexport default messages;\n","import React from 'react';\n\nimport { Card, Hyperlink } from '@edx/paragon';\nimport PropTypes from 'prop-types';\n\nimport { trackRecommendationCardClickOptimizely } from './optimizelyExperiment';\nimport { trackRecommendationsClicked } from './track';\n\nconst RecommendationCard = (props) => {\n  const { recommendation, position, userId } = props;\n  const showPartnerLogo = recommendation.owners.length === 1;\n\n  const getOwners = () => {\n    if (recommendation.owners.length === 1) {\n      return recommendation.owners[0].key;\n    }\n\n    let keys = '';\n    recommendation.owners.forEach((owner) => {\n      keys += `${owner.key }, `;\n    });\n    return keys.slice(0, -2);\n  };\n\n  const handleCardClick = () => {\n    trackRecommendationCardClickOptimizely(userId?.toString());\n    trackRecommendationsClicked(\n      recommendation.courseKey,\n      false,\n      position + 1,\n      userId,\n      recommendation.marketingUrl,\n      recommendation.recommendationType || 'algolia',\n    );\n  };\n\n  return (\n    <div className=\"mr-4 recommendation-card\">\n      <Hyperlink\n        destination={recommendation.marketingUrl}\n        target=\"_blank\"\n        className=\"card-box\"\n        showLaunchIcon={false}\n        onClick={handleCardClick}\n      >\n        <Card isClickable>\n          <Card.ImageCap\n            src={recommendation.cardImageUrl}\n            srcAlt=\"Card image\"\n            logoSrc={showPartnerLogo ? recommendation.owners[0].logoImageUrl : ''}\n            logoAlt=\"Card logo\"\n          />\n          <Card.Header\n            title={recommendation.title}\n            subtitle={getOwners()}\n          />\n          <Card.Section />\n          <Card.Footer textElement={<small className=\"footer-text\">Course</small>} />\n        </Card>\n      </Hyperlink>\n    </div>\n  );\n};\n\nRecommendationCard.propTypes = {\n  recommendation: PropTypes.shape({\n    courseKey: PropTypes.string.isRequired,\n    activeRunKey: PropTypes.string.isRequired,\n    title: PropTypes.string.isRequired,\n    cardImageUrl: PropTypes.string.isRequired,\n    owners: PropTypes.arrayOf(PropTypes.shape({\n      key: PropTypes.string.isRequired,\n      name: PropTypes.string.isRequired,\n      logoImageUrl: PropTypes.string.isRequired,\n    })),\n    marketingUrl: PropTypes.string.isRequired,\n    recommendationType: PropTypes.string,\n  }).isRequired,\n  position: PropTypes.number.isRequired,\n  userId: PropTypes.number,\n};\n\nRecommendationCard.defaultProps = {\n  userId: null,\n};\n\nexport default RecommendationCard;\n","import React from 'react';\n\nimport { Container } from '@edx/paragon';\nimport PropTypes from 'prop-types';\n\nimport RecommendationCard from './RecommendationCard';\n\nconst RecommendationsList = (props) => {\n  const { title, recommendations, userId } = props;\n\n  return (\n    <Container id=\"course-recommendations\" size=\"lg\" className=\"recommendations-container\">\n      <h2 className=\"text-sm-center mb-4 text-left recommendations-heading\">\n        {title}\n      </h2>\n      <div className=\"d-flex card-list\">\n        {\n          recommendations.map((recommendation, idx) => (\n            <RecommendationCard\n              key={recommendation.activeRunKey}\n              recommendation={recommendation}\n              position={idx}\n              userId={userId}\n            />\n          ))\n        }\n      </div>\n    </Container>\n  );\n};\n\nRecommendationsList.propTypes = {\n  title: PropTypes.string.isRequired,\n  recommendations: PropTypes.arrayOf(PropTypes.shape({\n    courseKey: PropTypes.string.isRequired,\n    activeRunKey: PropTypes.string.isRequired,\n    title: PropTypes.string.isRequired,\n    cardImageUrl: PropTypes.string.isRequired,\n    owners: PropTypes.arrayOf(PropTypes.shape({\n      key: PropTypes.string.isRequired,\n      name: PropTypes.string.isRequired,\n      logoImageUrl: PropTypes.string.isRequired,\n    })),\n    marketingUrl: PropTypes.string.isRequired,\n    recommendationType: PropTypes.string,\n  })),\n  userId: PropTypes.number,\n};\n\nRecommendationsList.defaultProps = {\n  recommendations: [],\n  userId: null,\n};\n\nexport default RecommendationsList;\n","import React, { useEffect, useState } from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport {\n  Hyperlink, Image, Spinner, StatefulButton,\n} from '@edx/paragon';\nimport PropTypes from 'prop-types';\nimport { Helmet } from 'react-helmet';\n\nimport { DEFAULT_REDIRECT_URL } from '../data/constants';\nimport { EDUCATION_LEVEL_MAPPING, RECOMMENDATIONS_COUNT } from './data/constants';\nimport getPersonalizedRecommendations from './data/service';\nimport { convertCourseRunKeytoCourseKey } from './data/utils';\nimport messages from './messages';\nimport RecommendationsList from './RecommendationsList';\nimport { trackRecommendationsViewed } from './track';\n\nconst RecommendationsPage = (props) => {\n  const { location } = props;\n  const registrationResponse = location.state?.registrationResult;\n  const userId = location.state?.userId;\n  const DASHBOARD_URL = getConfig().LMS_BASE_URL.concat(DEFAULT_REDIRECT_URL);\n\n  const { formatMessage } = useIntl();\n  const [isLoading, setIsLoading] = useState(true);\n  const [recommendations, setRecommendations] = useState([]);\n  const [algoliaRecommendations, setAlgoliaRecommendations] = useState([]);\n  const educationLevel = EDUCATION_LEVEL_MAPPING[location.state?.educationLevel];\n\n  useEffect(() => {\n    if (registrationResponse) {\n      const generalRecommendations = JSON.parse(getConfig().GENERAL_RECOMMENDATIONS);\n      let coursesWithKeys = [];\n      getPersonalizedRecommendations(educationLevel).then((response) => {\n        coursesWithKeys = response.map(course => ({\n          ...course,\n          courseKey: convertCourseRunKeytoCourseKey(course.activeRunKey),\n        }));\n        setAlgoliaRecommendations(coursesWithKeys.slice(0, RECOMMENDATIONS_COUNT));\n\n        if (coursesWithKeys.length >= RECOMMENDATIONS_COUNT) {\n          setRecommendations(coursesWithKeys.slice(0, RECOMMENDATIONS_COUNT));\n        } else {\n          const courseRecommendations = coursesWithKeys.concat(generalRecommendations);\n          // Remove duplicate recommendations\n          const uniqueRecommendations = courseRecommendations.filter(\n            (recommendation, index, self) => index === self.findIndex((existingRecommendation) => (\n              existingRecommendation.courseKey === recommendation.courseKey\n            )),\n          );\n          setRecommendations(uniqueRecommendations.slice(0, RECOMMENDATIONS_COUNT));\n        }\n\n        setIsLoading(false);\n      })\n        .catch(() => {\n          setRecommendations(generalRecommendations.slice(0, RECOMMENDATIONS_COUNT));\n          setIsLoading(false);\n        });\n    }\n  }, [registrationResponse, DASHBOARD_URL, educationLevel, userId]);\n\n  useEffect(() => {\n    if (!isLoading) {\n      // We only want to track the recommendations returned by Algolia\n      const courseKeys = algoliaRecommendations.map(course => course.courseKey);\n      trackRecommendationsViewed(courseKeys, false, userId);\n    }\n  }, [isLoading, algoliaRecommendations, userId]);\n\n  if (!registrationResponse) {\n    global.location.assign(DASHBOARD_URL);\n    return null;\n  }\n\n  const handleRedirection = () => {\n    window.history.replaceState(location.state, null, '');\n    if (registrationResponse) {\n      window.location.href = registrationResponse.redirectUrl;\n    } else {\n      window.location.href = DASHBOARD_URL;\n    }\n  };\n\n  if (!isLoading && recommendations.length < RECOMMENDATIONS_COUNT) {\n    handleRedirection();\n  }\n\n  const handleSkip = (e) => {\n    e.preventDefault();\n    handleRedirection();\n  };\n\n  return (\n    <>\n      <Helmet>\n        <title>{formatMessage(messages['recommendation.page.title'],\n          { siteName: getConfig().SITE_NAME })}\n        </title>\n      </Helmet>\n      <div className=\"d-flex flex-column vh-100 bg-light-200\">\n        <div className=\"mb-2\">\n          <div className=\"col-md-12 small-screen-top-stripe medium-screen-top-stripe extra-large-screen-top-stripe\" />\n          <Hyperlink destination={getConfig().MARKETING_SITE_BASE_URL}>\n            <Image className=\"logo\" alt={getConfig().SITE_NAME} src={getConfig().LOGO_URL} />\n          </Hyperlink>\n        </div>\n        {(!isLoading && recommendations.length === RECOMMENDATIONS_COUNT) ? (\n          <div className=\"d-flex flex-column align-items-center justify-content-center flex-grow-1 p-1\">\n            <RecommendationsList\n              title={formatMessage(messages['recommendation.page.heading'])}\n              recommendations={recommendations}\n              userId={userId}\n            />\n            <div className=\"text-center\">\n              <StatefulButton\n                className=\"font-weight-500\"\n                type=\"submit\"\n                variant=\"brand\"\n                labels={{\n                  default: formatMessage(messages['recommendation.skip.button']),\n                }}\n                onClick={handleSkip}\n              />\n            </div>\n          </div>\n        )\n          : (\n            <Spinner animation=\"border\" variant=\"primary\" className=\"centered-align-spinner\" />\n          )}\n      </div>\n    </>\n  );\n};\n\nRecommendationsPage.propTypes = {\n  location: PropTypes.shape({\n    state: PropTypes.shape({\n      registrationResult: PropTypes.shape({\n        redirectUrl: PropTypes.string,\n      }),\n      userId: PropTypes.number,\n      educationLevel: PropTypes.string,\n    }),\n  }),\n\n};\n\nRecommendationsPage.defaultProps = {\n  location: { state: {} },\n};\n\nexport default RecommendationsPage;\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, Zendesk,\n} from './common-components';\nimport configureStore from './data/configureStore';\nimport {\n  AUTHN_PROGRESSIVE_PROFILING,\n  LOGIN_PAGE,\n  PAGE_NOT_FOUND,\n  PASSWORD_RESET_CONFIRM,\n  RECOMMENDATIONS,\n  REGISTER_PAGE,\n  RESET_PAGE,\n} from './data/constants';\nimport { updatePathWithQueryParams } from './data/utils';\nimport { ForgotPasswordPage } from './forgot-password';\nimport { ProgressiveProfiling } from './progressive-profiling';\nimport { RecommendationsPage } from './recommendations';\nimport { ResetPasswordPage } from './reset-password';\nimport './index.scss';\n\nregisterIcons();\n\nconst MainApp = () => (\n  <AppProvider store={configureStore()}>\n    <Helmet>\n      <link rel=\"shortcut icon\" href={getConfig().FAVICON_URL} type=\"image/x-icon\" />\n    </Helmet>\n    {getConfig().ZENDESK_KEY && <Zendesk />}\n    <Switch>\n      <Route exact path=\"/\">\n        <Redirect to={updatePathWithQueryParams(REGISTER_PAGE)} />\n      </Route>\n      <UnAuthOnlyRoute exact path={LOGIN_PAGE} render={() => <Logistration selectedPage={LOGIN_PAGE} />} />\n      <UnAuthOnlyRoute exact path={REGISTER_PAGE} component={Logistration} />\n      <UnAuthOnlyRoute exact path={RESET_PAGE} component={ForgotPasswordPage} />\n      <Route exact path={PASSWORD_RESET_CONFIRM} component={ResetPasswordPage} />\n      <Route exact path={AUTHN_PROGRESSIVE_PROFILING} component={ProgressiveProfiling} />\n      <Route exact path={RECOMMENDATIONS} component={RecommendationsPage} />\n      <Route path={PAGE_NOT_FOUND} component={NotFoundPage} />\n      <Route path=\"*\">\n        <Redirect to={PAGE_NOT_FOUND} />\n      </Route>\n    </Switch>\n  </AppProvider>\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 configuration from './config';\nimport appMessages from './i18n';\nimport MainApp from './MainApp';\n\nsubscribe(APP_READY, () => {\n  ReactDOM.render(\n    <MainApp />,\n    document.getElementById('root'),\n  );\n});\n\nsubscribe(APP_INIT_ERROR, (error) => {\n  ReactDOM.render(<ErrorPage message={error.message} />, document.getElementById('root'));\n});\n\ninitialize({\n  handlers: {\n    config: () => {\n      mergeConfig(configuration);\n    },\n  },\n  messages: [\n    appMessages,\n    paragonMessages,\n  ],\n});\n","export default __webpack_public_path__ + \"440b1fd39e91e51e7522b7475338e338.png\";"],"names":["SESSION_COOKIE_DOMAIN","process","REGISTER_CONVERSION_COOKIE_NAME","USER_SURVEY_COOKIE_NAME","DISABLE_ENTERPRISE_LOGIN","ENABLE_COOKIE_POLICY_BANNER","ENABLE_DYNAMIC_REGISTRATION_FIELDS","ENABLE_PROGRESSIVE_PROFILING_ON_AUTHN","ENABLE_PERSONALIZED_RECOMMENDATIONS","MARKETING_EMAILS_OPT_IN","SHOW_CONFIGURABLE_EDX_FIELDS","ACTIVATION_EMAIL_SUPPORT_LINK","AUTHN_PROGRESSIVE_PROFILING_SUPPORT_LINK","LOGIN_ISSUE_SUPPORT_LINK","PASSWORD_RESET_SUPPORT_LINK","PRIVACY_POLICY","TOS_AND_HONOR_CODE","TOS_LINK","GENERAL_RECOMMENDATIONS","INFO_EMAIL","ZENDESK_KEY","ZENDESK_LOGO_URL","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","AUTHN_PROGRESSIVE_PROFILING","DEFAULT_REDIRECT_URL","RECOMMENDATIONS","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","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","getAllPossibleQueryParams","locationURl","arguments","undefined","urlParams","query","Object","entries","_ref","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","expires","set","setSurveyCookie","surveyType","signupTimestamp","Date","getTime","RedirectLogistration","props","finishAuthUrl","redirectUrl","redirectToProgressiveProfilingPage","success","optionalFields","redirectToRecommendationsPage","educationLevel","userId","finalRedirectUrl","includes","LMS_BASE_URL","registrationResult","_jsx","Redirect","to","pathname","state","href","defaultProps","propTypes","PropTypes","authUser","setAuthUser","useState","isReady","setIsReady","useEffect","fetchAuthenticatedUser","forceRefresh","getAuthenticatedUser","then","authenticatedUser","username","global","concat","Route","_objectSpread","NotFoundPage","className","children","FormattedMessage","defaultMessage","description","defineMessages","supportTitle","selectTicketForm","SocialAuthProviders","formatMessage","useIntl","referrer","socialAuthProviders","handleSubmit","e","preventDefault","url","currentTarget","dataset","providerUrl","socialAuth","map","_jsxs","type","loginUrl","registerUrl","onClick","iconImage","src","alt","FontAwesomeIcon","icon","iconClass","faSignInAlt","messages","providerName","_Fragment","skipRegistrationForm","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","THIRD_PARTY_AUTH_CONTEXT_CLEAR_ERROR_MSG","getThirdPartyAuthContext","payload","defaultState","fieldDescriptions","thirdPartyAuthApiStatus","thirdPartyAuthContext","countryCode","providers","pipelineUserDetails","errorMessage","action","fields","BACKUP_REGISTRATION_DATA","REGISTER_FORM_VALIDATIONS","REGISTER_NEW_USER","REGISTER_CLEAR_USERNAME_SUGGESTIONS","REGISTERATION_CLEAR_BACKEND_ERROR","REGISTER_SET_COUNTRY_CODE","REGISTER_SET_USER_PIPELINE_DATA_LOADED","registerNewUserFailure","error","async","requestConfig","headers","isPublic","data","getAuthenticatedHttpClient","get","catch","registrationFields","registration_fields","optional_fields","contextData","context_data","fetchThirdPartyAuthContext","put","call","getThirdPartyAuthContextSuccess","logError","saga","takeEvery","storeName","commonComponentsSelector","thirdPartyAuthContextSelector","createSelector","commonComponents","fieldDescriptionSelector","optionalFieldsSelector","tpaProvidersSelector","FormGroup","hasFocus","setHasFocus","Form","controlId","isInvalid","as","readOnly","autoComplete","spellCheck","onFocus","handleFocus","onBlur","handleBlur","handleClick","onChange","handleChange","controlClassName","borderClass","trailingElement","floatingLabel","TransitionReplace","helpText","toString","hasIcon","PasswordField","isPasswordHidden","setHiddenTrue","setHiddenFalse","useToggle","showTooltip","setShowTooltip","showRequirements","setTimeout","HideButton","IconButton","VisibilityOff","iconAs","size","ShowButton","Visibility","placement","innerWidth","tooltip","Tooltip","test","Check","Remove","OverlayTrigger","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","CookiePolicyBanner","languageCode","getLocale","MediaQuery","maxWidth","breakpoints","minWidth","EnterpriseSSO","disablePublicAccountCreation","ALLOW_PUBLIC_ACCOUNT_CREATION","ResetPasswordSuccess","INVALID_FORM","FORBIDDEN_REQUEST","TPA_AUTHENTICATION_FAILURE","ACCOUNT_ACTIVATION_MESSAGE","AccountActivationMessage","messageType","activationOrVerification","activationMessage","heading","iconMapping","CheckCircle","Error","supportLink","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","Link","LoginFailureMessage","context","errorCode","authService","getAuthService","errorList","resetLink","isInline","lineBreak","email","tpaLink","allowedDomain","remainingAttempts","failureCount","getCsrfTokenService","clearCsrfTokenCache","platform_name","LoginPage","React","super","_defineProperty","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","intl","renderThirdPartyAuth","isInstitutionAuthActive","isSocialAuthActive","isEnterpriseLoginDisabled","Skeleton","count","handleInstitutionLogin","renderForm","submitState","activationMsgType","account_activation_status","institutionLogin","tpaAuthenticationError","optimizely","push","eventName","Helmet","behavior","handleOnFocus","handleOnBlur","StatefulButton","labels","default","pending","onMouseDown","handleForgotPasswordLinkClickEvent","render","isRequired","connect","creds","formData","injectIntl","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","newPasswordError","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","match","Spinner","animation","handleValidateToken","isValid","is_valid","tokenStatus","response","logInfo","validateTokenSuccess","handleResetPassword","resetStatus","reset_status","resetErrors","err_msg","resetPasswordSuccess","token_invalid","redirect_url","handleLoginRequest","loginRequestSuccess","statusCodes","camelCaseObject","FormFieldRenderer","formField","fieldData","onChangeHandler","Boolean","ExpandMore","label","option","checked","FIELDS","COMMON_EMAIL_PROVIDERS","currentYear","getFullYear","years","startYear","reverse","DEFAULT_SERVICE_PROVIDER_DOMAINS","DEFAULT_TOP_LEVEL_DOMAINS","getLevenshteinSuggestion","word","knownWords","similarityThreshold","minEditDistance","mostSimilar","i","editDistance","distance","toLowerCase","getSuggestionForInvalidEmail","defaultDomains","suggestion","validateEmailAddress","domainName","validation","hasError","hasMultipleSubdomains","serviceLevelDomain","topLevelDomain","split","tldSuggestion","serviceSuggestion","validateCountryField","countryList","displayValue","normalizedValue","selectedCountry","find","country","trim","EmailField","emailSuggestion","handleSuggestionClick","handleOnClose","maxLength","Close","tabIndex","UsernameField","handleUsernameSuggestionClose","usernameSuggestions","suggestedUsernameDiv","iconButton","suggestedUsernames","string","CountryField","dropdownRef","useRef","setErrorMessage","dropDownItems","setDropDownItems","setDisplayValue","trailingIcon","setTrailingIcon","onBlurHandler","itemClicked","countryName","relatedName","countryValue","ExpandMoreButton","getDropdownItems","countryToFind","updatedCountryList","filter","handleExpandMore","ExpandLessButton","handleExpandLess","ExpandLess","handleClickOutside","current","contains","ref","filteredItems","onFocusHandler","code","HonorCode","fieldType","tosAndHonorCode","privacyPolicy","TermsOfService","termsOfService","ConfigurableRegistrationForm","fieldErrors","formFields","setFieldErrors","setFocusedField","setFormFields","showTermsOfServiceAndHonorCode","showCountryField","formFieldDescriptions","honorCode","flags","prevState","handleOnChange","prevErrors","countryValidation","error_message","keys","fieldName","marketingEmailsOptIn","honor_code","registerSelector","registrationErrorSelector","register","registrationError","validationsSelector","validations","validationDecisions","field","userMessage","RegistrationFailureMessage","ThirdPartyAuth","emailRegex","RegExp","urlRegex","RegistrationPage","backedUpFormData","backendCountryCode","backendValidations","registrationErrorCode","shouldBackupState","validationApiRateLimited","backupFormState","setUserPipelineDetailsLoaded","getRegistrationDataFromBackend","userPipelineDataLoaded","validateFromBackend","clearBackendError","useMemo","getCountryList","configurableFormFields","setConfigurableFormFields","setErrors","setEmailSuggestion","autoSubmitRegisterForm","setAutoSubmitRegisterForm","formStartTime","setFormStartTime","focusedField","autoSubmitRegForm","is_register_page","now","countryDisplayValue","dataLayer","shouldValidateFromBackend","setError","fieldError","confirmEmailError","countryFieldCode","confirm_email","resetUsernameSuggestions","handleEmailSuggestionClosed","handleUsernameSuggestionClosed","startsWith","form_field_key","registerUser","totalRegistrationTime","social_auth_provider","focusedFieldError","isFormValid","snakeCaseObject","registerNewUser","RegistrationFailure","firstName","lastName","registerPageState","registrationFormData","clearUsernameSuggestions","registrationInfo","registrationErrorTemp","_action$payload$valid","validationWithoutUsernameSuggestions","_objectWithoutProperties","_excluded","registerRequest","registrationInformation","getFieldsValidations","fieldValidations","handleNewUserRegistration","registerNewUserSuccess","fetchRealtimeValidations","Logistration","selectedPage","tpaProviders","setInstitutionLogin","getCsrfToken","defaultActiveKey","isValidTpaHint","tabKey","clearThirdPartyAuthContextErrorMessage","backupRegistrationForm","ZendeskHelp","setting","webWidget","contactOptions","enabled","chat","suppress","contactForm","ticketForms","subject","prefill","attachments","helpCenter","originalArticleButton","answerBot","contactOnlyAfterQuery","avatar","Zendesk","defer","zendeskKey","FORGOT_PASSWORD","FORGOT_PASSWORD_PERSIST_FORM_DATA","forgotPasswordResultSelector","forgotPassword","ForgotPasswordAlert","emailError","ForgotPasswordPage","setEmail","bannerEmail","setBannerEmail","validationError","setValidationError","getValidationMessage","setForgotPasswordFormData","showLaunchIcon","forgotPasswordFormData","handleForgotPassword","OPTIMIZELY_SDK_KEY","OPTIMIZELY_FULL_STACK_SDK_KEY","createInstance","sdkKey","eventNames","trackRecommendationsViewed","recommendedCourseKeys","isControl","page","course_key_array","amplitude_recommendations","is_control","user_id","SAVE_USER_PROFILE","welcomePageSelector","ProgressiveProfilingPageModal","ProgressiveProfiling","formRenderState","showError","enablePersonalizedRecommendations","registrationResponse","ready","setReady","setRegistrationResult","setValues","openDialog","setOpenDialog","showRecommendationsPage","setShowRecommendationsPage","DASHBOARD_URL","configureAuth","AxiosJwtAuthService","loggingService","getLoggingService","config","ensureAuthenticatedUser","hydrateAuthenticatedUser","identifyAuthenticatedUser","userIdStr","variation","optimizelyInstance","showRecommendations","trackRecommendationsGroup","userAttributes","trackRecommendationViewedOptimizely","assign","extendedProfile","extended_profile","shouldRedirect","level_of_education","history","replaceState","fieldValue","saveUserProfile","isGenderSelected","gender","isYearOfBirthSelected","year_of_birth","isLevelOfEducationSelected","patchAccount","commitValues","patch","saveUserProfileInformation","createRootReducer","combineReducers","loginReducer","registerReducer","commonComponentsStoreName","commonComponentsReducer","forgotPasswordReducer","resetPasswordReducer","authnProgressiveProfilingReducers","rootSaga","all","loginSaga","registrationSaga","commonComponentsSaga","forgotPasswordSaga","resetPasswordSaga","authnProgressiveProfilingSaga","sagaMiddleware","createSagaMiddleware","composeMiddleware","ENVIRONMENT","loggerMiddleware","createLogger","collapsed","composeWithDevTools","applyMiddleware","thunkMiddleware","compose","configureStore","initialState","store","createStore","run","EDUCATION_LEVEL_MAPPING","p","m","b","a","hs","jhs","INDEX_NAME","ALGOLIA_AUTHN_RECOMMENDATIONS_INDEX","convertCourseRunKeytoCourseKey","courseRunKey","splitCourseKey","slice","RecommendationCard","recommendation","position","showPartnerLogo","owners","marketingUrl","handleCardClick","trackRecommendationCardClickOptimizely","trackRecommendationsClicked","courseKey","recommendationType","recommendation_type","course_key","Card","isClickable","cardImageUrl","srcAlt","logoSrc","logoImageUrl","logoAlt","subtitle","getOwners","owner","textElement","activeRunKey","RecommendationsList","recommendations","Container","idx","RecommendationsPage","isLoading","setIsLoading","setRecommendations","algoliaRecommendations","setAlgoliaRecommendations","generalRecommendations","JSON","parse","coursesWithKeys","facetFilters","algoliasearch","ALGOLIA_APP_ID","ALGOLIA_SEARCH_KEY","initIndex","hits","aroundLatLngViaIP","getPersonalizedRecommendations","course","uniqueRecommendations","self","findIndex","existingRecommendation","courseKeys","handleRedirection","library","faApple","faFacebook","faGoogle","faMicrosoft","MainApp","AppProvider","rel","FAVICON_URL","Switch","exact","UnAuthOnlyRoute","component","subscribe","APP_READY","ReactDOM","getElementById","APP_INIT_ERROR","ErrorPage","initialize","mergeConfig","configuration","appMessages","paragonMessages"],"sourceRoot":""}