{"version":3,"file":"app.db716392294a56326a78.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/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/registrationFields/GenderField.jsx","webpack://@edx/frontend-app-authn/./src/register/registrationFields/JoinRecoftcField.jsx","webpack://@edx/frontend-app-authn/./src/register/registrationFields/SectorField.jsx","webpack://@edx/frontend-app-authn/./src/register/registrationFields/YearOfBirthField.jsx","webpack://@edx/frontend-app-authn/./src/register/registrationFields/LevelOfEducationField.jsx","webpack://@edx/frontend-app-authn/./src/register/registrationFields/GoalsField.jsx","webpack://@edx/frontend-app-authn/./src/register/registrationFields/NewCountryField.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 \n );\n }\n\n // Redirect to Recommendation page\n if (redirectToRecommendationsPage) {\n const registrationResult = { redirectUrl: finalRedirectUrl, success };\n return (\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 ;\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
\n

\n \n

\n
\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 \n {provider.iconImage ? (\n
\n {`icon\n
\n )\n : (\n
\n \n
\n )}\n {provider.name}\n \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 \n \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 \n {referrer === REGISTER_PAGE ? (\n {formatMessage(messages['tpa.alert.heading'])}\n ) : null}\n

{ message }

\n
\n {referrer === REGISTER_PAGE ? (\n

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

\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 \n \n {buttonTitle}\n \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
\n
\n

\n {headingTitle}\n

\n

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

\n
\n
\n
\n \n \n {secondaryProviders.map(provider => (\n \n \n \n ))}\n \n
\n \n {provider.name}\n \n
\n
\n \n );\n};\n\nconst LogistrationDefaultProps = {\n secondaryProviders: [],\n buttonTitle: '',\n};\nconst LogistrationProps = {\n secondaryProviders: PropTypes.arrayOf(PropTypes.shape({\n name: PropTypes.string.isRequired,\n loginUrl: PropTypes.string.isRequired,\n })),\n};\n\nRenderInstitutionButton.propTypes = {\n ...LogistrationProps,\n buttonTitle: PropTypes.string,\n onSubmitHandler: PropTypes.func.isRequired,\n\n};\nRenderInstitutionButton.defaultProps = {\n ...LogistrationDefaultProps,\n};\n\nInstitutionLogistration.propTypes = {\n ...LogistrationProps,\n 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 \n \n {props.options ? props.options() : null}\n \n \n {hasFocus && props.helpText ? (\n \n {props.helpText.map((message, index) => (\n \n {message}\n
\n
\n ))}\n
\n ) :
}\n \n {props.errorMessage !== '' && (\n {props.errorMessage}\n )}\n {props.children}\n \n );\n};\n\nFormGroup.defaultProps = {\n as: 'input',\n autoComplete: null,\n borderClass: '',\n children: null,\n className: '',\n errorMessage: '',\n handleBlur: null,\n handleChange: () => {},\n handleClick: null,\n handleFocus: null,\n helpText: [],\n options: null,\n readOnly: false,\n spellCheck: null,\n trailingElement: null,\n type: 'text',\n};\n\nFormGroup.propTypes = {\n as: PropTypes.string,\n autoComplete: PropTypes.string,\n borderClass: PropTypes.string,\n children: PropTypes.element,\n className: PropTypes.string,\n errorMessage: PropTypes.string,\n floatingLabel: PropTypes.string.isRequired,\n handleBlur: PropTypes.func,\n handleChange: PropTypes.func,\n handleClick: PropTypes.func,\n handleFocus: PropTypes.func,\n helpText: PropTypes.arrayOf(PropTypes.string),\n name: PropTypes.string.isRequired,\n options: PropTypes.func,\n readOnly: PropTypes.bool,\n spellCheck: PropTypes.string,\n trailingElement: PropTypes.element,\n type: PropTypes.string,\n value: PropTypes.string.isRequired,\n};\n\nexport default FormGroup;\n","import React, { useState } from 'react';\n\nimport { 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 \n );\n\n const ShowButton = (\n \n );\n const placement = window.innerWidth < 768 ? 'top' : 'left';\n const tooltip = (\n \n \n {LETTER_REGEX.test(props.value) ? : }\n {formatMessage(messages['one.letter'])}\n \n \n {NUMBER_REGEX.test(props.value) ? : }\n {formatMessage(messages['one.number'])}\n \n \n {props.value.length >= 8 ? : }\n {formatMessage(messages['eight.characters'])}\n \n \n );\n\n return (\n \n \n \n \n {props.errorMessage !== '' && (\n \n {props.errorMessage}\n {formatMessage(messages['password.sr.only.helping.text'])}\n \n )}\n \n );\n};\n\nPasswordField.defaultProps = {\n borderClass: '',\n errorMessage: '',\n handleBlur: null,\n handleFocus: null,\n handleChange: () => {},\n showRequirements: true,\n autoComplete: null,\n};\n\nPasswordField.propTypes = {\n borderClass: PropTypes.string,\n errorMessage: PropTypes.string,\n floatingLabel: PropTypes.string.isRequired,\n handleBlur: PropTypes.func,\n handleFocus: PropTypes.func,\n handleChange: PropTypes.func,\n 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
\n
\n \n {getConfig().SITE_NAME}\n \n
\n
\n
\n

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

\n

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

\n
\n
\n
\n
\n \n \n \n \n \n
\n
\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
\n
\n
\n \n {getConfig().SITE_NAME}\n \n
\n
\n
\n

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

\n

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

\n
\n
\n
\n
\n \n \n \n \n \n
\n
\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
\n
\n \n {getConfig().SITE_NAME}\n \n
\n
\n
\n

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

\n

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

\n
\n
\n
\n );\n};\n\nAuthSmallLayout.propTypes = {\n username: PropTypes.string.isRequired,\n};\n\nexport default AuthSmallLayout;\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';\nimport { Hyperlink, Image } from '@edx/paragon';\n\nconst BaseComponent = ({ children, showWelcomeBanner }) => {\n const authenticatedUser = showWelcomeBanner ? getAuthenticatedUser() : null;\n const username = authenticatedUser ? authenticatedUser.username : null;\n\n return (\n <>\n {getConfig().ENABLE_COOKIE_POLICY_BANNER ? : null}\n
\n
\n \n
\n
\n
\n {children}\n
\n
\n \n );\n};\n\nBaseComponent.defaultProps = {\n showWelcomeBanner: false,\n};\n\nBaseComponent.propTypes = {\n children: PropTypes.node.isRequired,\n showWelcomeBanner: PropTypes.bool,\n};\n\nexport default BaseComponent;\n","import React from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { 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
\n
\n
\n
\n

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

\n handleSubmit(e, tpaProvider.loginUrl)}\n >\n {tpaProvider.iconImage ? (\n
\n {`icon\n { tpaProvider.name }\n
\n )\n : (\n <>\n
\n \n
\n { tpaProvider.name }\n \n )}\n \n
\n handleClick(e)}\n >\n {disablePublicAccountCreation\n ? formatMessage(messages['enterprisetpa.login.button.text.public.account.creation.disabled'])\n : formatMessage(messages['enterprisetpa.login.button.text'])}\n \n \n
\n
\n
\n );\n }\n return
;\n};\n\nEnterpriseSSO.defaultProps = {\n provider: {\n id: '',\n name: '',\n iconClass: '',\n iconImage: '',\n loginUrl: '',\n registerUrl: '',\n },\n};\n\nEnterpriseSSO.propTypes = {\n provider: PropTypes.shape({\n id: PropTypes.string,\n name: PropTypes.string,\n iconClass: PropTypes.string,\n iconImage: PropTypes.string,\n loginUrl: PropTypes.string,\n registerUrl: PropTypes.string,\n }),\n};\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 \n \n {formatMessage(messages['reset.password.success.heading'])}\n \n

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

\n
\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 = {formatMessage(messages[`account.${activationOrVerification}.success.message`])};\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 \n {formatMessage(messages['account.activation.support.link'])}\n \n );\n\n heading = formatMessage(messages[`account.${activationOrVerification}.error.message.title`]);\n activationMessage = (\n \n );\n break;\n }\n default:\n break;\n }\n\n return activationMessage ? (\n \n {heading && {heading}}\n {activationMessage}\n \n ) : null;\n};\n\nAccountActivationMessage.propTypes = {\n messageType: PropTypes.string.isRequired,\n};\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 ;\n }\n return (\n \n \n \n {formatMessage(messages[`password.security.${variant}.title`])}\n \n \n \n {formatMessage(messages[`password.security.${variant}.body`])}\n \n \n \n {variant === 'nudge' ? (\n \n {formatMessage(messages['password.security.close.button'])}\n \n ) : null}\n \n {formatMessage(messages['password.security.redirect.to.reset.password.button'])}\n \n \n \n \n );\n};\n\nChangePasswordPrompt.defaultProps = {\n variant: 'block',\n redirectUrl: null,\n};\n\nChangePasswordPrompt.propTypes = {\n 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 \n {formatMessage(messages['login.incorrect.credentials.error.reset.link.text'])}\n \n );\n\n switch (errorCode) {\n case NON_COMPLIANT_PASSWORD_EXCEPTION: {\n errorList = (\n <>\n {formatMessage(messages['non.compliant.password.title'])}\n

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

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

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

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

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

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

\n \n

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

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

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

\n \n

\n

\n \n

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

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

\n

\n \n

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

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

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

\n \n

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

{formatMessage(messages['login.tpa.authentication.failure'], {\n platform_name: getConfig().SITE_NAME,\n lineBreak:
,\n errorMessage: context.errorMessage,\n })}\n

\n );\n break;\n case INTERNAL_SERVER_ERROR:\n default:\n errorList =

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

;\n break;\n }\n\n return (\n \n {formatMessage(messages['login.failure.header.title'])}\n { errorList }\n \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
\n {intl.formatMessage(messages['login.other.options.heading'])}\n
\n )}\n\n {(!isEnterpriseLoginDisabled && isSocialAuthActive) && (\n \n \n {intl.formatMessage(messages['enterprise.login.btn.text'])}\n \n )}\n\n {thirdPartyAuthApiStatus === PENDING_STATE ? (\n \n ) : (\n <>\n {(isEnterpriseLoginDisabled && isInstitutionAuthActive) && (\n \n )}\n {isSocialAuthActive && (\n
\n \n
\n )}\n \n )}\n \n );\n }\n\n renderForm(\n currentProvider,\n providers,\n secondaryProviders,\n thirdPartyAuthContext,\n thirdPartyAuthApiStatus,\n submitState,\n intl,\n ) {\n const activationMsgType = getActivationStatus();\n if (this.props.institutionLogin) {\n return (\n \n );\n }\n 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 \n {intl.formatMessage(messages['login.page.title'],\n { siteName: getConfig().SITE_NAME })}\n \n \n \n
\n \n {this.props.loginError ? : null}\n {thirdPartyAuthContext.errorMessage ? : null}\n {submitState === DEFAULT_STATE && this.state.isSubmitted ? windowScrollTo({ left: 0, top: 0, behavior: 'smooth' }) : null}\n {activationMsgType && }\n {this.props.resetPassword && !this.props.loginError ? : null}\n
\n this.setState({ emailOrUsername: e.target.value, isSubmitted: false })}\n handleFocus={this.handleOnFocus}\n handleBlur={this.handleOnBlur}\n errorMessage={this.state.errors.emailOrUsername}\n floatingLabel={intl.formatMessage(messages['login.user.identity.label'])}\n />\n this.setState({ password: e.target.value, isSubmitted: false })}\n handleFocus={this.handleOnFocus}\n handleBlur={this.handleOnBlur}\n errorMessage={this.state.errors.password}\n floatingLabel={intl.formatMessage(messages['login.password.label'])}\n />\n e.preventDefault()}\n />\n \n {intl.formatMessage(messages['forgot.password'])}\n \n {this.renderThirdPartyAuth(providers, secondaryProviders, currentProvider, thirdPartyAuthApiStatus, intl)}\n \n
\n \n );\n }\n\n render() {\n const {\n intl, submitState, thirdPartyAuthContext, thirdPartyAuthApiStatus,\n } = this.props;\n const { currentProvider, providers, secondaryProviders } = this.props.thirdPartyAuthContext;\n\n if (this.tpaHint) {\n if (thirdPartyAuthApiStatus === PENDING_STATE) {\n return ;\n }\n const { provider, skipHintedLogin } = getTpaProvider(this.tpaHint, providers, secondaryProviders);\n if (skipHintedLogin) {\n window.location.href = getConfig().LMS_BASE_URL + provider.loginUrl;\n return null;\n }\n return provider ? () : this.renderForm(\n currentProvider,\n providers,\n secondaryProviders,\n thirdPartyAuthContext,\n thirdPartyAuthApiStatus,\n submitState,\n intl,\n );\n }\n return this.renderForm(\n currentProvider,\n providers,\n secondaryProviders,\n thirdPartyAuthContext,\n thirdPartyAuthApiStatus,\n submitState,\n intl,\n );\n }\n}\n\nLoginPage.defaultProps = {\n loginResult: null,\n loginError: null,\n loginFormData: {\n emailOrUsername: '',\n password: '',\n errors: {\n emailOrUsername: '',\n password: '',\n },\n },\n resetPassword: false,\n submitState: DEFAULT_STATE,\n thirdPartyAuthApiStatus: 'pending',\n thirdPartyAuthContext: {\n currentProvider: null,\n 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 \n {heading}\n

{errorMessage}

\n
\n );\n }\n\n return null;\n};\n\nResetPasswordFailure.defaultProps = {\n errorCode: null,\n errorMsg: null,\n};\n\nResetPasswordFailure.propTypes = {\n errorCode: PropTypes.string,\n errorMsg: PropTypes.string,\n};\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
\n \n {formatMessage(messages['sign.in'])}\n
\n );\n\n if (props.status === TOKEN_STATE.PENDING) {\n const { token } = props.match.params;\n if (token) {\n props.validateToken(token);\n return ;\n }\n } else if (props.status === PASSWORD_RESET_ERROR) {\n return ;\n } else if (props.status === 'success') {\n return ;\n } else {\n return (\n \n
\n \n \n {formatMessage(messages['reset.password.page.title'], { siteName: getConfig().SITE_NAME })}\n \n \n setKey(k)}>\n \n \n { key && (\n \n )}\n
\n
\n \n

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

\n

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

\n
\n setNewPassword(e.target.value)}\n handleBlur={handleOnBlur}\n handleFocus={handleOnFocus}\n errorMessage={formErrors.newPassword}\n floatingLabel={formatMessage(messages['new.password.label'])}\n />\n \n handleSubmit(e)}\n onMouseDown={(e) => e.preventDefault()}\n />\n \n
\n
\n
\n
\n );\n }\n return null;\n};\n\nResetPasswordPage.defaultProps = {\n status: null,\n token: null,\n match: null,\n errorMsg: null,\n};\n\nResetPasswordPage.propTypes = {\n 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 \n onChangeHandler(e)}\n trailingElement={}\n floatingLabel={fieldData.label}\n onBlur={handleOnBlur}\n onFocus={handleFocus}\n >\n \n {fieldData.options.map(option => (\n \n ))}\n \n {isRequired && errorMessage && (\n \n {errorMessage}\n \n )}\n \n );\n break;\n }\n case 'textarea': {\n formField = (\n \n onChangeHandler(e)}\n floatingLabel={fieldData.label}\n onBlur={handleOnBlur}\n onFocus={handleFocus}\n />\n {isRequired && errorMessage && (\n \n {errorMessage}\n \n )}\n \n );\n break;\n }\n case 'text': {\n formField = (\n \n onChangeHandler(e)}\n floatingLabel={fieldData.label}\n onBlur={handleOnBlur}\n onFocus={handleFocus}\n />\n {isRequired && errorMessage && (\n \n {errorMessage}\n \n )}\n \n );\n break;\n }\n case 'checkbox': {\n formField = (\n \n onChangeHandler(e)}\n onBlur={handleOnBlur}\n onFocus={handleFocus}\n >\n {fieldData.label}\n \n {isRequired && errorMessage && (\n \n {errorMessage}\n \n )}\n \n );\n break;\n }\n default:\n break;\n }\n\n return formField;\n};\nFormFieldRenderer.defaultProps = {\n 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.gender.label': {\n id: 'registration.gender.label',\n defaultMessage: 'Gender',\n description: 'Label that appears above password 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',\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.gender.field.error': {\n id: 'empty.gender.field.error',\n defaultMessage: 'Select Gender',\n description: 'Error message for empty gender field',\n },\n 'empty.sector.field.error': {\n id: 'empty.sector.field.error',\n defaultMessage: 'Select Sector',\n description: 'Error message for empty sector field',\n },\n 'empty.join_recoftc.field.error': {\n id: 'empty.join_recoftc.field.error',\n defaultMessage: 'Select Join Recoftc',\n description: 'Error message for empty join recoftc 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: '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 \n \n {formatMessage(messages['did.you.mean.alert.text'])}{' '}\n \n {emailSuggestion.suggestion}\n ?\n \n \n );\n }\n return (\n \n {formatMessage(messages['did.you.mean.alert.text'])}:{' '}\n \n {emailSuggestion.suggestion}\n ?\n \n );\n };\n\n return (\n \n {emailSuggestion.suggestion ? renderEmailFeedback() : null}\n \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
\n {formatMessage(messages['registration.username.suggestion.label'])}\n
\n {usernameSuggestions.map((username, index) => (\n handleSuggestionClick(e, 'username', username)}\n >\n {username}\n \n ))}\n
\n {iconButton}\n
\n );\n if (usernameSuggestions.length > 0 && errorMessage && props.value === ' ') {\n className = 'suggested-username-with-error';\n iconButton = 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 = handleUsernameSuggestionClose()} variant=\"black\" size=\"sm\" className=\"suggested-username-close-button\" />;\n suggestedUsernameDiv = suggestedUsernames();\n } else if (usernameSuggestions.length > 0 && errorMessage) {\n suggestedUsernameDiv = suggestedUsernames();\n }\n return (\n \n {suggestedUsernameDiv}\n \n );\n};\n\nUsernameField.defaultProps = {\n usernameSuggestions: [],\n 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();\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 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 \n );\n });\n };\n\n const onFocusHandler = (event) => {\n const { name, value } = event.target;\n setDropDownItems(getDropdownItems(name === 'country' ? value : displayValue));\n setTrailingIcon();\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();\n setDropDownItems([]);\n };\n\n const handleExpandMore = () => {\n setTrailingIcon();\n setDropDownItems(getDropdownItems());\n };\n\n const handleExpandLess = () => {\n setTrailingIcon();\n setDropDownItems([]);\n };\n\n const ExpandMoreButton = () => (\n {}}\n onClick={handleExpandMore}\n onFocus={() => {}}\n />\n );\n\n const ExpandLessButton = () => (\n {}}\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();\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
\n \n
\n { dropDownItems?.length > 0 ? dropDownItems : null }\n
\n
\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
\n \n {formatMessage(messages['terms.of.service.and.honor.code'])}\n \n ),\n privacyPolicy: (\n \n {formatMessage(messages['privacy.policy'])}\n \n ),\n }}\n />\n
\n );\n }\n\n return (\n
\n \n \n {formatMessage(messages['honor.code'])}\n \n ),\n }}\n />\n \n {errorMessage && (\n \n {errorMessage}\n \n )}\n
\n );\n};\n\nHonorCode.defaultProps = {\n errorMessage: '',\n onChangeHandler: null,\n fieldType: 'honor_code',\n value: false,\n};\n\nHonorCode.propTypes = {\n 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
\n \n \n {formatMessage(messages['terms.of.service'])}\n \n ),\n }}\n />\n \n {errorMessage && (\n \n {errorMessage}\n \n )}\n
\n );\n};\n\nTermsOfService.defaultProps = {\n errorMessage: '',\n value: false,\n};\n\nTermsOfService.propTypes = {\n errorMessage: PropTypes.string,\n onChangeHandler: PropTypes.func.isRequired,\n value: PropTypes.bool,\n};\n\nexport default TermsOfService;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { FormGroup } from '../../common-components';\n\nconst GenderField = (props) => {\n const { value, onChange } = props;\n\n const genderOptions = [\n { label: 'Male', value: 'm' },\n { label: 'Female', value: 'f' },\n { label: 'Other/Prefer Not to Say', value: 'o' },\n ];\n\n\n return (\n
\n \n onChange(e.target.value)}\n >\n \n\n {genderOptions.map((option) => (\n \n ))}\n\n \n
\n );\n};\n\nGenderField.propTypes = {\n value: PropTypes.string,\n onChange: PropTypes.func.isRequired,\n};\n\nexport default GenderField;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { FormGroup } from '../../common-components';\n\nconst JoinRecoftcField = (props) => {\n const { value, onChange } = props;\n\n const joinRecoftcOptions = [\n { label: 'Yes', value: 'yes' },\n { label: 'No', value: 'no' },\n ];\n\n return (\n
\n \n onChange(e.target.value)}\n >\n {joinRecoftcOptions.map((option) => (\n \n ))}\n \n
\n );\n};\n\nJoinRecoftcField.propTypes = {\n value: PropTypes.string.isRequired,\n onChange: PropTypes.func.isRequired,\n};\n\nexport default JoinRecoftcField;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { FormGroup } from '../../common-components';\n\nconst SectorField = (props) => {\n const { value, onChange } = props;\n\n const sectorOptions = [\n { label: 'Government', value: 'government' },\n { label: 'Civil Society', value: 'civil society' },\n { label: 'Regional organization', value: 'regional organization' },\n { label: 'Private sector', value: 'private sector' },\n { label: 'Other', value: 'other' },\n ];\n\n return (\n
\n \n onChange(e.target.value)}\n >\n {sectorOptions.map((option) => (\n \n ))}\n \n
\n );\n};\n\nSectorField.propTypes = {\n value: PropTypes.string,\n onChange: PropTypes.func.isRequired,\n};\n\nexport default SectorField;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst YearOfBirthField = ({ value, onChange }) => {\n const currentYear = new Date().getFullYear();\n const last100Years = Array.from({ length: 100 }, (_, index) => currentYear - index -1); // -1 to dont show current year\n\n return (\n
\n \n onChange(e.target.value)}\n >\n \n {last100Years.map((year) => (\n \n ))}\n \n
\n );\n};\n\nYearOfBirthField.propTypes = {\n value: PropTypes.string,\n onChange: PropTypes.func.isRequired,\n};\n\nexport default YearOfBirthField;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst LevelOfEducationField = ({ value, onChange }) => {\n const educationOptions = [\n { label: 'Doctorate', value: 'p' },\n { label: \"Master's or professional degree\", value: 'm' },\n { label: \"Bachelor's degree\", value: 'b' },\n { label: 'Associate degree', value: 'a' },\n { label: 'Secondary/high school', value: 'hs' },\n { label: 'Junior secondary/junior high/middle school', value: 'jhs' },\n { label: 'Elementary/primary school', value: 'el' },\n { label: 'No formal education', value: 'none' },\n { label: 'Other education', value: 'other' },\n ];\n\n return (\n
\n \n\n\n onChange(e.target.value)}\n >\n \n {educationOptions.map((option) => (\n \n ))}\n \n
\n );\n};\n\nLevelOfEducationField.propTypes = {\n value: PropTypes.string,\n onChange: PropTypes.func.isRequired,\n};\n\nexport default LevelOfEducationField;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst GoalsField = ({ value, onChange }) => {\n return (\n
\n \n\n onChange(e.target.value)}\n style={{width: '100%'}}\n />\n
\n );\n};\n\nGoalsField.propTypes = {\n value: PropTypes.string,\n onChange: PropTypes.func.isRequired,\n};\n\nexport default GoalsField;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst NewCountryField = (props) => {\n const { value, onChange } = props;\n\n // List of countries in ascending order by name\n const countries = [\n { code: 'AF', name: 'Afghanistan' },\n { code: 'AX', name: 'Åland Islands' },\n { code: 'AL', name: 'Albania' },\n { code: 'DZ', name: 'Algeria' },\n { code: 'AS', name: 'American Samoa' },\n { code: 'AD', name: 'Andorra' },\n { code: 'AO', name: 'Angola' },\n { code: 'AI', name: 'Anguilla' },\n { code: 'AQ', name: 'Antarctica' },\n { code: 'AG', name: 'Antigua and Barbuda' },\n { code: 'AR', name: 'Argentina' },\n { code: 'AM', name: 'Armenia' },\n { code: 'AW', name: 'Aruba' },\n { code: 'AU', name: 'Australia' },\n { code: 'AT', name: 'Austria' },\n { code: 'AZ', name: 'Azerbaijan' },\n { code: 'BS', name: 'Bahamas' },\n { code: 'BH', name: 'Bahrain' },\n { code: 'BD', name: 'Bangladesh' },\n { code: 'BB', name: 'Barbados' },\n { code: 'BY', name: 'Belarus' },\n { code: 'BE', name: 'Belgium' },\n { code: 'BZ', name: 'Belize' },\n { code: 'BJ', name: 'Benin' },\n { code: 'BM', name: 'Bermuda' },\n { code: 'BT', name: 'Bhutan' },\n { code: 'BO', name: 'Bolivia' },\n { code: 'BQ', name: 'Bonaire, Sint Eustatius and Saba' },\n { code: 'BA', name: 'Bosnia and Herzegovina' },\n { code: 'BW', name: 'Botswana' },\n { code: 'BV', name: 'Bouvet Island' },\n { code: 'BR', name: 'Brazil' },\n { code: 'IO', name: 'British Indian Ocean Territory' },\n { code: 'BN', name: 'Brunei' },\n { code: 'BG', name: 'Bulgaria' },\n { code: 'BF', name: 'Burkina Faso' },\n { code: 'BI', name: 'Burundi' },\n { code: 'CV', name: 'Cabo Verde' },\n { code: 'KH', name: 'Cambodia' },\n { code: 'CM', name: 'Cameroon' },\n { code: 'CA', name: 'Canada' },\n { code: 'KY', name: 'Cayman Islands' },\n { code: 'CF', name: 'Central African Republic' },\n { code: 'TD', name: 'Chad' },\n { code: 'CL', name: 'Chile' },\n { code: 'CN', name: 'China' },\n { code: 'CX', name: 'Christmas Island' },\n { code: 'CC', name: 'Cocos (Keeling) Islands' },\n { code: 'CO', name: 'Colombia' },\n { code: 'KM', name: 'Comoros' },\n { code: 'CG', name: 'Congo' },\n { code: 'CD', name: 'Congo (the Democratic Republic of the)' },\n { code: 'CK', name: 'Cook Islands' },\n { code: 'CR', name: 'Costa Rica' },\n { code: 'CI', name: 'Côte d Ivoire' },\n { code: 'HR', name: 'Croatia' },\n { code: 'CU', name: 'Cuba' },\n { code: 'CW', name: 'Curaçao' },\n { code: 'CY', name: 'Cyprus' },\n { code: 'CZ', name: 'Czechia' },\n { code: 'DK', name: 'Denmark' },\n { code: 'DJ', name: 'Djibouti' },\n { code: 'DM', name: 'Dominica' },\n { code: 'DO', name: 'Dominican Republic' },\n { code: 'EC', name: 'Ecuador' },\n { code: 'EG', name: 'Egypt' },\n { code: 'SV', name: 'El Salvador' },\n { code: 'GQ', name: 'Equatorial Guinea' },\n { code: 'ER', name: 'Eritrea' },\n { code: 'EE', name: 'Estonia' },\n { code: 'ET', name: 'Ethiopia' },\n { code: 'FK', name: 'Falkland Islands [Malvinas]' },\n { code: 'FO', name: 'Faroe Islands' },\n { code: 'FJ', name: 'Fiji' },\n { code: 'FI', name: 'Finland' },\n { code: 'FR', name: 'France' },\n { code: 'GF', name: 'French Guiana' },\n { code: 'PF', name: 'French Polynesia' },\n { code: 'TF', name: 'French Southern Territories' },\n { code: 'GA', name: 'Gabon' },\n { code: 'GM', name: 'Gambia' },\n { code: 'GE', name: 'Georgia' },\n { code: 'DE', name: 'Germany' },\n { code: 'GH', name: 'Ghana' },\n { code: 'GI', name: 'Gibraltar' },\n { code: 'GR', name: 'Greece' },\n { code: 'GL', name: 'Greenland' },\n { code: 'GD', name: 'Grenada' },\n { code: 'GP', name: 'Guadeloupe' },\n { code: 'GU', name: 'Guam' },\n { code: 'GT', name: 'Guatemala' },\n { code: 'GG', name: 'Guernsey' },\n { code: 'GN', name: 'Guinea' },\n { code: 'GW', name: 'Guinea-Bissau' },\n { code: 'GY', name: 'Guyana' },\n { code: 'HT', name: 'Haiti' },\n { code: 'HM', name: 'Heard Island and McDonald Islands' },\n { code: 'VA', name: 'Holy See' },\n { code: 'HN', name: 'Honduras' },\n { code: 'HK', name: 'Hong Kong' },\n { code: 'HU', name: 'Hungary' },\n { code: 'IS', name: 'Iceland' },\n { code: 'IN', name: 'India' },\n { code: 'ID', name: 'Indonesia' },\n { code: 'IR', name: 'Iran' },\n { code: 'IQ', name: 'Iraq' },\n { code: 'IE', name: 'Ireland' },\n { code: 'IM', name: 'Isle of Man' },\n { code: 'IL', name: 'Israel' },\n { code: 'IT', name: 'Italy' },\n { code: 'JM', name: 'Jamaica' },\n { code: 'JP', name: 'Japan' },\n { code: 'JE', name: 'Jersey' },\n { code: 'JO', name: 'Jordan' },\n { code: 'KZ', name: 'Kazakhstan' },\n { code: 'KE', name: 'Kenya' },\n { code: 'KI', name: 'Kiribati' },\n { code: 'XK', name: 'Kosovo' },\n { code: 'KW', name: 'Kuwait' },\n { code: 'KG', name: 'Kyrgyzstan' },\n { code: 'LA', name: 'Laos' },\n { code: 'LV', name: 'Latvia' },\n { code: 'LB', name: 'Lebanon' },\n { code: 'LS', name: 'Lesotho' },\n { code: 'LR', name: 'Liberia' },\n { code: 'LY', name: 'Libya' },\n { code: 'LI', name: 'Liechtenstein' },\n { code: 'LT', name: 'Lithuania' },\n { code: 'LU', name: 'Luxembourg' },\n { code: 'MO', name: 'Macao' },\n { code: 'MK', name: 'Macedonia' },\n { code: 'MG', name: 'Madagascar' },\n { code: 'MW', name: 'Malawi' },\n { code: 'MY', name: 'Malaysia' },\n { code: 'MV', name: 'Maldives' },\n { code: 'ML', name: 'Mali' },\n { code: 'MT', name: 'Malta' },\n { code: 'MH', name: 'Marshall Islands' },\n { code: 'MQ', name: 'Martinique' },\n { code: 'MR', name: 'Mauritania' },\n { code: 'MU', name: 'Mauritius' },\n { code: 'YT', name: 'Mayotte' },\n { code: 'MX', name: 'Mexico' },\n { code: 'FM', name: 'Micronesia (Federated States of)' },\n { code: 'MD', name: 'Moldova' },\n { code: 'MC', name: 'Monaco' },\n { code: 'MN', name: 'Mongolia' },\n { code: 'ME', name: 'Montenegro' },\n { code: 'MS', name: 'Montserrat' },\n { code: 'MA', name: 'Morocco' },\n { code: 'MZ', name: 'Mozambique' },\n { code: 'MM', name: 'Myanmar' },\n { code: 'NA', name: 'Namibia' },\n { code: 'NR', name: 'Nauru' },\n { code: 'NP', name: 'Nepal' },\n { code: 'NL', name: 'Netherlands' },\n { code: 'NC', name: 'New Caledonia'},\n { code: 'NO', name: 'Norway' },\n { code: 'OM', name: 'Oman' },\n { code: 'PK', name: 'Pakistan' },\n { code: 'PW', name: 'Palau' },\n { code: 'PS', name: 'Palestine, State of' },\n { code: 'PA', name: 'Panama' },\n { code: 'PG', name: 'Papua New Guinea' },\n { code: 'PY', name: 'Paraguay' },\n { code: 'PE', name: 'Peru' },\n { code: 'PH', name: 'Philippines' },\n { code: 'PN', name: 'Pitcairn' },\n { code: 'PL', name: 'Poland' },\n { code: 'PT', name: 'Portugal' },\n { code: 'PR', name: 'Puerto Rico' },\n { code: 'QA', name: 'Qatar' },\n { code: 'RE', name: 'Réunion' },\n { code: 'RO', name: 'Romania' },\n { code: 'RU', name: 'Russia' },\n { code: 'RW', name: 'Rwanda' },\n { code: 'BL', name: 'Saint Barthélemy' },\n { code: 'SH', name: 'Saint Helena, Ascension and Tristan da Cunha' },\n { code: 'KN', name: 'Saint Kitts and Nevis' },\n { code: 'LC', name: 'Saint Lucia' },\n { code: 'MF', name: 'Saint Martin (French part)' },\n { code: 'PM', name: 'Saint Pierre and Miquelon' },\n { code: 'VC', name: 'Saint Vincent and the Grenadines' },\n { code: 'WS', name: 'Samoa' },\n { code: 'SM', name: 'San Marino' },\n { code: 'ST', name: 'Sao Tome and Principe' },\n { code: 'SA', name: 'Saudi Arabia' },\n { code: 'SN', name: 'Senegal' },\n { code: 'RS', name: 'Serbia' },\n { code: 'SC', name: 'Seychelles' },\n { code: 'SL', name: 'Sierra Leone' },\n { code: 'SG', name: 'Singapore' },\n { code: 'SX', name: 'Sint Maarten (Dutch part)' },\n { code: 'SK', name: 'Slovakia' },\n { code: 'SI', name: 'Slovenia' },\n { code: 'SB', name: 'Solomon Islands' },\n { code: 'SO', name: 'Somalia' },\n { code: 'ZA', name: 'South Africa' },\n { code: 'GS', name: 'South Georgia and the South Sandwich Islands' },\n { code: 'KR', name: 'South Korea' },\n { code: 'SS', name: 'South Sudan' },\n { code: 'ES', name: 'Spain' },\n { code: 'LK', name: 'Sri Lanka' },\n { code: 'SD', name: 'Sudan' },\n { code: 'SR', name: 'Suriname' },\n { code: 'SJ', name: 'Svalbard and Jan Mayen' },\n { code: 'SZ', name: 'Swaziland' },\n { code: 'SE', name: 'Sweden' },\n { code: 'CH', name: 'Switzerland' },\n { code: 'SY', name: 'Syria' },\n { code: 'TW', name: 'Taiwan' },\n { code: 'TJ', name: 'Tajikistan' },\n { code: 'TZ', name: 'Tanzania' },\n { code: 'TH', name: 'Thailand' },\n { code: 'TL', name: 'Timor-Leste' },\n { code: 'TG', name: 'Togo' },\n { code: 'TK', name: 'Tokelau' },\n { code: 'TO', name: 'Tonga' },\n { code: 'TT', name: 'Trinidad and Tobago' },\n { code: 'TN', name: 'Tunisia' },\n { code: 'TR', name: 'Turkey' },\n { code: 'TM', name: 'Turkmenistan' },\n { code: 'TC', name: 'Turks and Caicos Islands' },\n { code: 'TV', name: 'Tuvalu' },\n { code: 'UG', name: 'Uganda' },\n { code: 'UA', name: 'Ukraine' },\n { code: 'AE', name: 'United Arab Emirates' },\n { code: 'GB', name: 'United Kingdom' },\n { code: 'UM', name: 'United States Minor Outlying Islands' },\n { code: 'US', name: 'United States of America' },\n { code: 'UY', name: 'Uruguay' },\n { code: 'UZ', name: 'Uzbekistan' },\n { code: 'VU', name: 'Vanuatu' },\n { code: 'VE', name: 'Venezuela' },\n { code: 'VN', name: 'Vietnam' },\n { code: 'VG', name: 'Virgin Islands (British)' },\n { code: 'VI', name: 'Virgin Islands (U.S.)' },\n { code: 'WF', name: 'Wallis and Futuna' },\n { code: 'EH', name: 'Western Sahara' },\n { code: 'YE', name: 'Yemen' },\n { code: 'ZM', name: 'Zambia' },\n { code: 'ZW', name: 'Zimbabwe' },\n ];\n\n return (\n
\n \n onChange(e.target.value)}\n >\n {countries.map((country) => (\n \n ))}\n \n
\n );\n};\n\nNewCountryField.propTypes = {\n value: PropTypes.string,\n onChange: PropTypes.func.isRequired,\n};\n\nexport default NewCountryField;\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';\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: true,\n showConfigurableEdxFields: true,\n showMarketingEmailOptInCheckbox: getConfig().MARKETING_EMAILS_OPT_IN,\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 (!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.HONOR_CODE:\n if (fieldData.type === 'tos_and_honor_code') {\n showTermsOfServiceAndHonorCode = true;\n } else {\n honorCode.push(\n \n \n ,\n );\n }\n break;\n case FIELDS.TERMS_OF_SERVICE:\n honorCode.push(\n \n \n ,\n );\n break;\n default:\n formFieldDescriptions.push(\n \n \n ,\n );\n }\n });\n }\n\n if (flags.showConfigurableEdxFields || showTermsOfServiceAndHonorCode) {\n formFieldDescriptions.push(\n \n \n ,\n );\n }\n\n return (\n <>\n {formFieldDescriptions}\n
\n {honorCode}\n
\n \n );\n};\n\nConfigurableRegistrationForm.propTypes = {\n email: PropTypes.string.isRequired,\n fieldDescriptions: PropTypes.shape({}),\n formFields: PropTypes.shape({\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:
,\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 \n {formatMessage(messages['registration.request.failure.header'])}\n

{errorMessage}

\n
\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
\n {formatMessage(messages['registration.other.options.heading'])}\n
\n )}\n\n {thirdPartyAuthApiStatus === PENDING_STATE ? (\n \n ) : (\n <>\n {(isEnterpriseLoginDisabled && isInstitutionAuthActive) && (\n \n )}\n {isSocialAuthActive && (\n
\n \n
\n )}\n \n )}\n \n );\n};\n\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 FIELDS,\n FORM_SUBMISSION_ERROR,\n TPA_AUTHENTICATION_FAILURE,\n} from './data/constants';\nimport { registrationErrorSelector, validationsSelector } from './data/selectors';\nimport {\n getSuggestionForInvalidEmail, validateEmailAddress,\n} from './data/utils';\nimport messages from './messages';\nimport RegistrationFailure from './RegistrationFailure';\nimport { EmailField, UsernameField, GenderField, SectorField, NewCountryField, YearOfBirthField, LevelOfEducationField, GoalsField } 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 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 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\n const [formFields, setFormFields] = useState({\n email: '',\n username: '',\n name: '',\n password: '',\n sector: 'government',\n country: 'US',\n gender: '',\n year_of_birth: '',\n level_of_education: '',\n goals: ''\n });\n\n\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 // State to track whether the checkbox is checked\n const [showAdditionalFields, setShowAdditionalFields] = useState(false);\n\n // Function to toggle the state when the checkbox is clicked\n const handleSupportEducationChange = () => {\n setShowAdditionalFields(!showAdditionalFields);\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, pipeline_user_details: pipelineUserDetails, errorMessage, countryCode } = thirdPartyAuthContext;\n console.log(\"--> third party auth context\", thirdPartyAuthContext);\n if (errorMessage) {\n console.log(\"Error ==1\");\n setErrorCode(prevState => ({ type: TPA_AUTHENTICATION_FAILURE, count: prevState.count + 1 }));\n } else if (autoSubmitRegForm) {\n console.log(\"autoSubmitRegForm ==2\");\n checkTOSandHonorCodeFields();\n setAutoSubmitRegisterForm(true);\n }\n console.log(\"pipelineUserDetails -=> \", pipelineUserDetails);\n\n if (pipelineUserDetails && Object.keys(pipelineUserDetails).length !== 0) {\n console.log(\"pipelineUserDetails --> \", pipelineUserDetails);\n const { fullname = '', username = '', email = ''} = pipelineUserDetails;\n setFormFields(prevState => ({\n ...prevState, name: fullname, username: username, email: email, sector: 'other', country: countryCode,\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 /**\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 (!value) {\n value = ''\n }\n break;\n case 'gender':\n if (!value) {\n value=''\n }\n break;\n case 'sector':\n if (!value) {\n value = ''\n }\n break;\n case 'year_of_birth':\n if (!value) {\n value = ''\n }\n break;\n case 'level_of_education':\n if (!value) {\n value = ''\n }\n break;\n case 'goals':\n if (!value) {\n value = ''\n }\n break;\n default:\n if (flags.showConfigurableRegistrationFields) {\n 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 console.log(\"---->> I am here!\");\n console.log(\"--> errors\", fieldError);\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] = messages[`empty.${key}.field.error`] ? formatMessage(messages[`empty.${key}.field.error`]) : '';\n }\n if (fieldErrors[key] && key !== 'country' && key !== 'sector' && key !== 'gender') {\n isValid = false;\n }\n });\n\n if (focusedField) {\n fieldErrors[focusedField] = focusedFieldError;\n }\n setErrors({ ...fieldErrors });\n\n console.log(\"--> fieldErrors\", fieldErrors);\n console.log(\"--> isValid\", isValid);\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 gender: formFields.gender,\n sector: formFields.sector,\n country: formFields.country,\n year_of_birth: formFields.year_of_birth,\n level_of_education: formFields.level_of_education,\n goals: formFields.goals,\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 payload[fieldName] = configurableFormFields[fieldName];\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 \n );\n }\n return (\n <>\n \n {formatMessage(messages['register.page.title'], { siteName: getConfig().SITE_NAME })}\n \n \n {autoSubmitRegisterForm && !errorCode.type ? (\n
\n \n
\n ) : (\n
\n \n \n
\n \n 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 \n {!currentProvider && (\n \n )}\n\n handleOnChange({ target: { name: 'sector', value: selectedSector } })}\n />\n\n handleOnChange({ target: { name: 'country', value: selectedCountry } })}\n />\n\n {/* Checkbox to support education research */}\n
\n \n \n
\n\n {showAdditionalFields && (\n <>\n handleOnChange({ target: { name: 'gender', value: selectedGender } })}\n />\n handleOnChange({ target: { name: 'year_of_birth', value: selectedYearOfBirth } })}\n />\n handleOnChange({ target: { name: 'level_of_education', value: selectedLevelOfEducationField } })}\n />\n handleOnChange({ target: { name: 'goals', value: selectedGoalsField } })}\n />\n \n )}\n \n e.preventDefault()}\n />\n \n \n
\n )}\n\n \n );\n };\n\n if (tpaHint) {\n if (thirdPartyAuthApiStatus === PENDING_STATE) {\n return ;\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 ? : 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: '', gender: '', country: '', sector: '', level_of_education: '', year_of_birth: '', goals: ''\n },\n errors: {\n name: '', email: '', username: '', password: '', gender: '', country: '', sector: '', level_of_education: '', year_of_birth: '', goals: ''\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: '', gender: '',\n },\n emailSuggestion: {\n suggestion: '', type: '',\n },\n errors: {\n name: '', email: '', username: '', password: '', gender: '',\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
\n \n \n {selectedPage === LOGIN_PAGE\n ? formatMessage(messages['logistration.sign.in'])\n : formatMessage(messages['logistration.register'])}\n \n
\n );\n\n const isValidTpaHint = () => {\n const { provider } = getTpaProvider(tpaHint, providers, secondaryProviders);\n return !!provider;\n };\n\n return (\n \n
\n {disablePublicAccountCreation\n ? (\n <>\n \n {institutionLogin && (\n \n \n \n )}\n
\n {!institutionLogin && (\n

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

\n )}\n \n
\n \n )\n : (\n
\n {institutionLogin\n ? (\n \n \n \n )\n : (!isValidTpaHint() && (\n \n \n \n \n ))}\n { key && (\n \n )}\n
\n {selectedPage === LOGIN_PAGE\n ? \n : (\n \n )}\n
\n
\n )}\n
\n
\n );\n};\n\nLogistration.propTypes = {\n 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 \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 {email},\n supportLink: (\n \n {formatMessage(messages['confirmation.support.link'])}\n \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 \n {heading}\n

{message}

\n \n );\n }\n return null;\n};\n\nForgotPasswordAlert.defaultProps = {\n email: '',\n emailError: '',\n};\n\nForgotPasswordAlert.propTypes = {\n status: PropTypes.string.isRequired,\n email: PropTypes.string,\n 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
\n \n {formatMessage(messages['sign.in.text'])}\n
\n );\n\n return (\n \n \n {formatMessage(messages['forgot.password.page.title'],\n { siteName: getConfig().SITE_NAME })}\n \n \n
\n setKey(k)}>\n \n \n { key && (\n \n )}\n
\n
\n \n

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

\n

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

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

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

\n \n
\n
\n
\n );\n};\n\nForgotPasswordPage.propTypes = {\n email: PropTypes.string,\n emailValidationError: PropTypes.string,\n forgotPassword: PropTypes.func.isRequired,\n 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 {}}\n size=\"sm\"\n variant=\"default\"\n hasCloseButton={false}\n >\n \n \n {formatMessage(messages['modal.title'])}\n \n \n\n \n {formatMessage(messages['modal.description'])}\n \n\n \n \n \n \n \n \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 \n \n \n );\n });\n\n return (\n \n \n {formatMessage(messages['progressive.profiling.page.title'],\n { siteName: getConfig().SITE_NAME })}\n \n \n \n {props.shouldRedirect ? (\n \n ) : null}\n
\n
\n

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

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

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

\n
\n ) : null}\n
\n {formFields}\n {(getConfig().AUTHN_PROGRESSIVE_PROFILING_SUPPORT_LINK) && (\n \n (sendTrackEvent('edx.bi.welcome.page.support.link.clicked'))}\n >\n {formatMessage(messages['optional.fields.information.link'])}\n \n \n )}\n
\n e.preventDefault()}\n />\n e.preventDefault()}\n />\n
\n
\n
\n
\n );\n};\n\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
\n \n \n \n \n \n Course} />\n \n \n
\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 \n

\n {title}\n

\n
\n {\n recommendations.map((recommendation, idx) => (\n \n ))\n }\n
\n
\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 \n {formatMessage(messages['recommendation.page.title'],\n { siteName: getConfig().SITE_NAME })}\n \n \n
\n
\n
\n \n {getConfig().SITE_NAME}\n \n
\n {(!isLoading && recommendations.length === RECOMMENDATIONS_COUNT) ? (\n
\n \n
\n \n
\n
\n )\n : (\n \n )}\n
\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 \n \n \n \n {getConfig().ZENDESK_KEY && }\n \n \n \n \n } />\n \n \n \n \n \n \n \n \n \n \n \n);\n\nexport default MainApp;\n","import 'core-js/stable';\nimport 'regenerator-runtime/runtime';\n\nimport React from 'react';\nimport ReactDOM from 'react-dom';\n\nimport {\n APP_INIT_ERROR, APP_READY, initialize, mergeConfig, subscribe,\n} from '@edx/frontend-platform';\nimport { ErrorPage } from '@edx/frontend-platform/react';\nimport { messages as paragonMessages } from '@edx/paragon';\n\nimport configuration from './config';\nimport appMessages from './i18n';\nimport MainApp from './MainApp';\n\nsubscribe(APP_READY, () => {\n ReactDOM.render(\n ,\n document.getElementById('root'),\n );\n});\n\nsubscribe(APP_INIT_ERROR, (error) => {\n ReactDOM.render(, document.getElementById('root'));\n});\n\ninitialize({\n handlers: {\n config: () => {\n mergeConfig(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","BaseComponent","showWelcomeBanner","CookiePolicyBanner","languageCode","getLocale","Image","LOGO_URL","classNames","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","breakpoints","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","height","count","handleInstitutionLogin","renderForm","submitState","activationMsgType","account_activation_status","institutionLogin","tpaAuthenticationError","optimizely","push","eventName","Helmet","siteName","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","x","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","EmailField","emailSuggestion","handleSuggestionClick","handleOnClose","maxLength","Close","tabIndex","UsernameField","handleUsernameSuggestionClose","usernameSuggestions","suggestedUsernameDiv","iconButton","suggestedUsernames","string","CountryField","countryList","selectedCountry","dropdownRef","useRef","setErrorMessage","dropDownItems","setDropDownItems","displayValue","setDisplayValue","trailingIcon","setTrailingIcon","onBlurHandler","itemClicked","countryName","relatedName","countryValue","ExpandMoreButton","getDropdownItems","countryToFind","updatedCountryList","filter","country","handleExpandMore","ExpandLessButton","handleExpandLess","ExpandLess","handleClickOutside","current","contains","ref","filteredItems","onFocusHandler","code","HonorCode","fieldType","tosAndHonorCode","privacyPolicy","TermsOfService","termsOfService","GenderField","class","htmlFor","selected","SectorField","YearOfBirthField","last100Years","Array","from","_","year","LevelOfEducationField","GoalsField","width","NewCountryField","ConfigurableRegistrationForm","fieldErrors","formFields","setFieldErrors","setFocusedField","setFormFields","showTermsOfServiceAndHonorCode","formFieldDescriptions","honorCode","handleOnChange","prevErrors","prevState","trim","error_message","keys","fieldName","honor_code","marketingEmailsOptIn","registerSelector","registrationErrorSelector","register","registrationError","validationsSelector","validations","validationDecisions","field","userMessage","RegistrationFailureMessage","ThirdPartyAuth","emailRegex","RegExp","urlRegex","RegistrationPage","backedUpFormData","backendValidations","registrationErrorCode","shouldBackupState","validationApiRateLimited","backupFormState","setUserPipelineDetailsLoaded","getRegistrationDataFromBackend","userPipelineDataLoaded","validateFromBackend","clearBackendError","useMemo","flags","sector","gender","year_of_birth","level_of_education","goals","configurableFormFields","setConfigurableFormFields","setErrors","setEmailSuggestion","autoSubmitRegisterForm","setAutoSubmitRegisterForm","formStartTime","setFormStartTime","focusedField","showAdditionalFields","setShowAdditionalFields","handleSupportEducationChange","autoSubmitRegForm","pipeline_user_details","console","log","fullname","is_register_page","now","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","selectedSector","selectedGender","selectedYearOfBirth","selectedLevelOfEducationField","selectedGoalsField","backendCountryCode","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","history","replaceState","fieldValue","saveUserProfile","isGenderSelected","isYearOfBirthSelected","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","MARKETING_SITE_BASE_URL","LOGO_WHITE_URL","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":""}