{"version":3,"file":"app.c054277e58db3b52a030.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/EmbeddedRegistrationRoute.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/common-components/data/service.js","webpack://@edx/frontend-app-authn/./src/register/data/actions.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/register/messages.jsx","webpack://@edx/frontend-app-authn/./src/register/RegistrationFields/EmailField/constants.js","webpack://@edx/frontend-app-authn/./src/register/RegistrationFields/EmailField/validator.js","webpack://@edx/frontend-app-authn/./src/register/RegistrationFields/NameField/validator.js","webpack://@edx/frontend-app-authn/./src/register/RegistrationFields/UsernameField/validator.js","webpack://@edx/frontend-app-authn/./src/register/data/utils.js","webpack://@edx/frontend-app-authn/./src/common-components/PasswordField.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/reset-password/data/constants.js","webpack://@edx/frontend-app-authn/./src/forgot-password/ForgotPasswordAlert.jsx","webpack://@edx/frontend-app-authn/./src/base-container/components/default-layout/messages.js","webpack://@edx/frontend-app-authn/./src/base-container/components/default-layout/LargeLayout.jsx","webpack://@edx/frontend-app-authn/./src/base-container/components/default-layout/MediumLayout.jsx","webpack://@edx/frontend-app-authn/./src/base-container/components/default-layout/SmallLayout.jsx","webpack://@edx/frontend-app-authn/./src/base-container/components/image-layout/messages.js","webpack://@edx/frontend-app-authn/./src/base-container/components/image-layout/LargeLayout.jsx","webpack://@edx/frontend-app-authn/./src/base-container/components/image-layout/MediumLayout.jsx","webpack://@edx/frontend-app-authn/./src/base-container/components/image-layout/SmallLayout.jsx","webpack://@edx/frontend-app-authn/./src/base-container/components/image-layout/ExtraSmallLayout.jsx","webpack://@edx/frontend-app-authn/./src/base-container/components/welcome-page-layout/messages.js","webpack://@edx/frontend-app-authn/./src/base-container/components/welcome-page-layout/LargeLayout.jsx","webpack://@edx/frontend-app-authn/./src/base-container/components/welcome-page-layout/MediumLayout.jsx","webpack://@edx/frontend-app-authn/./src/base-container/components/welcome-page-layout/SmallLayout.jsx","webpack://@edx/frontend-app-authn/./src/base-container/index.jsx","webpack://@edx/frontend-app-authn/./src/base-container/data/constants.js","webpack://@edx/frontend-app-authn/./src/forgot-password/ForgotPasswordPage.jsx","webpack://@edx/frontend-app-authn/./src/reset-password/data/actions.js","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/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/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/LoginPage.jsx","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/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/data/oneTrust.js","webpack://@edx/frontend-app-authn/./src/field-renderer/FieldRenderer.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/register/data/constants.js","webpack://@edx/frontend-app-authn/./src/register/RegistrationFields/NameField/NameField.jsx","webpack://@edx/frontend-app-authn/./src/register/RegistrationFields/EmailField/EmailField.jsx","webpack://@edx/frontend-app-authn/./src/register/RegistrationFields/UsernameField/UsernameField.jsx","webpack://@edx/frontend-app-authn/./src/register/RegistrationFields/CountryField/validator.js","webpack://@edx/frontend-app-authn/./src/register/RegistrationFields/CountryField/CountryField.jsx","webpack://@edx/frontend-app-authn/./src/register/RegistrationFields/HonorCodeField/HonorCode.jsx","webpack://@edx/frontend-app-authn/./src/register/RegistrationFields/TermsOfServiceField/TermsOfService.jsx","webpack://@edx/frontend-app-authn/./src/register/components/ConfigurableRegistrationForm.jsx","webpack://@edx/frontend-app-authn/./src/register/components/RegistrationFailure.jsx","webpack://@edx/frontend-app-authn/./src/register/components/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/data/sagas.js","webpack://@edx/frontend-app-authn/./src/data/configureStore.js","webpack://@edx/frontend-app-authn/./src/data/reducers.js","webpack://@edx/frontend-app-authn/./src/logistration/Logistration.jsx","webpack://@edx/frontend-app-authn/./src/recommendations/data/constants.js","webpack://@edx/frontend-app-authn/./src/data/algolia.js","webpack://@edx/frontend-app-authn/./src/recommendations/data/algoliaResultsParser.js","webpack://@edx/frontend-app-authn/./src/recommendations/data/hooks/useAlgoliaRecommendations.jsx","webpack://@edx/frontend-app-authn/./src/recommendations/messages.js","webpack://@edx/frontend-app-authn/./src/recommendations/data/loadingCoursesPlaceholders.js","webpack://@edx/frontend-app-authn/./src/recommendations/data/utils.js","webpack://@edx/frontend-app-authn/./src/recommendations/ProductCard/BaseCard/index.jsx","webpack://@edx/frontend-app-authn/./src/recommendations/ProductCard/Footer/index.jsx","webpack://@edx/frontend-app-authn/./src/recommendations/track.js","webpack://@edx/frontend-app-authn/./src/recommendations/ProductCard/index.jsx","webpack://@edx/frontend-app-authn/./src/recommendations/RecommendationsList.jsx","webpack://@edx/frontend-app-authn/./src/recommendations/RecommendationsPageLayouts/LargeLayout.jsx","webpack://@edx/frontend-app-authn/./src/recommendations/RecommendationsPageLayouts/SmallLayout.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"],"sourcesContent":["const configuration = {\n // Cookies related configs\n SESSION_COOKIE_DOMAIN: process.env.SESSION_COOKIE_DOMAIN,\n USER_RETENTION_COOKIE_NAME: process.env.USER_RETENTION_COOKIE_NAME || '',\n // Features\n DISABLE_ENTERPRISE_LOGIN: process.env.DISABLE_ENTERPRISE_LOGIN || '',\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_POST_REGISTRATION_RECOMMENDATIONS: process.env.ENABLE_POST_REGISTRATION_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 POST_REGISTRATION_REDIRECT_URL: process.env.POST_REGISTRATION_REDIRECT_URL || '',\n PRIVACY_POLICY: process.env.PRIVACY_POLICY || null,\n SEARCH_CATALOG_URL: process.env.SEARCH_CATALOG_URL || null,\n TOS_AND_HONOR_CODE: process.env.TOS_AND_HONOR_CODE || null,\n TOS_LINK: process.env.TOS_LINK || null,\n // Base container images\n BANNER_IMAGE_LARGE: process.env.BANNER_IMAGE_LARGE || '',\n BANNER_IMAGE_MEDIUM: process.env.BANNER_IMAGE_MEDIUM || '',\n BANNER_IMAGE_SMALL: process.env.BANNER_IMAGE_SMALL || '',\n BANNER_IMAGE_EXTRA_SMALL: process.env.BANNER_IMAGE_EXTRA_SMALL || '',\n // Recommendation constants\n GENERAL_RECOMMENDATIONS: process.env.GENERAL_RECOMMENDATIONS || '[]',\n // Miscellaneous\n INFO_EMAIL: process.env.INFO_EMAIL || '',\n ZENDESK_KEY: process.env.ZENDESK_KEY,\n ZENDESK_LOGO_URL: process.env.ZENDESK_LOGO_URL,\n ALGOLIA_APP_ID: process.env.ALGOLIA_APP_ID || '',\n ALGOLIA_SEARCH_API_KEY: process.env.ALGOLIA_SEARCH_API_KEY || '',\n};\n\nexport default configuration;\n","import { messages as paragonMessages } from '@edx/paragon';\n\nimport arMessages from './messages/ar.json';\nimport deMessages from './messages/de.json';\nimport deDEMessages from './messages/de_DE.json';\nimport es419Messages from './messages/es_419.json';\nimport faIRMessages from './messages/fa_IR.json';\nimport frMessages from './messages/fr.json';\nimport frCAMessages from './messages/fr_CA.json';\nimport hiMessages from './messages/hi.json';\nimport itMessages from './messages/it.json';\nimport itITMessages from './messages/it_IT.json';\nimport ptMessages from './messages/pt.json';\nimport ptPTMessages from './messages/pt_PT.json';\nimport ruMessages from './messages/ru.json';\nimport ukMessages from './messages/uk.json';\nimport zhCNMessages from './messages/zh_CN.json';\n// no need to import en messages-- they are in the defaultMessage field\n\nconst appMessages = {\n ar: arMessages,\n de: deMessages,\n 'de-de': deDEMessages,\n 'es-419': es419Messages,\n 'fa-ir': faIRMessages,\n fr: frMessages,\n 'fr-ca': frCAMessages,\n hi: hiMessages,\n it: itMessages,\n 'it-it': itITMessages,\n pt: ptMessages,\n 'pt-pt': ptPTMessages,\n ru: ruMessages,\n uk: ukMessages,\n 'zh-cn': zhCNMessages,\n};\n\nexport default [\n paragonMessages,\n appMessages,\n];\n","// URL Paths\nexport const LOGIN_PAGE = '/login';\nexport const REGISTER_PAGE = '/register';\nexport const REGISTER_EMBEDDED_PAGE = '/register-embedded';\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';\nexport const EMBEDDED = 'embedded';\n\nexport const LETTER_REGEX = /[a-zA-Z]/;\nexport const NUMBER_REGEX = /\\d/;\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}\\\\]$';\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', 'register_for_free', 'track', 'is_account_recovery', 'variant', 'host', 'cta'];\nexport const REDIRECT = 'redirect';\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\nexport const isHostAvailableInQueryParams = () => {\n const queryParams = getAllPossibleQueryParams();\n return 'host' in queryParams;\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 default 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","import { getConfig } from '@edx/frontend-platform';\nimport PropTypes from 'prop-types';\nimport { Navigate } from 'react-router-dom';\n\nimport {\n AUTHN_PROGRESSIVE_PROFILING, RECOMMENDATIONS, REDIRECT,\n} from '../data/constants';\nimport { setCookie } from '../data/utils';\n\nconst RedirectLogistration = (props) => {\n const {\n authenticatedUser,\n finishAuthUrl,\n redirectUrl,\n redirectToProgressiveProfilingPage,\n success,\n optionalFields,\n redirectToRecommendationsPage,\n educationLevel,\n userId,\n registrationEmbedded,\n host,\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\n if (registrationEmbedded) {\n window.parent.postMessage({\n action: REDIRECT,\n redirectUrl: getConfig().POST_REGISTRATION_REDIRECT_URL,\n }, host);\n return null;\n }\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 authenticatedUser: {},\n educationLevel: null,\n finishAuthUrl: null,\n success: false,\n redirectUrl: '',\n redirectToProgressiveProfilingPage: false,\n optionalFields: {},\n redirectToRecommendationsPage: false,\n userId: null,\n registrationEmbedded: false,\n host: '',\n};\n\nRedirectLogistration.propTypes = {\n authenticatedUser: PropTypes.shape({}),\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 registrationEmbedded: PropTypes.bool,\n host: PropTypes.string,\n};\n\nexport default RedirectLogistration;\n","import React from 'react';\n\nimport PropTypes from 'prop-types';\nimport { Navigate } from 'react-router-dom';\n\nimport { PAGE_NOT_FOUND } from '../data/constants';\nimport { isHostAvailableInQueryParams } from '../data/utils';\n\n/**\n * This wrapper redirects the requester to embedded register page only if host\n * query param is present.\n */\nconst EmbeddedRegistrationRoute = ({ children }) => {\n const registrationEmbedded = isHostAvailableInQueryParams();\n\n // Show registration page for embedded experience even if the user is authenticated\n if (registrationEmbedded) {\n return children;\n }\n\n return ;\n};\n\nEmbeddedRegistrationRoute.propTypes = {\n children: PropTypes.node.isRequired,\n};\n\nexport default EmbeddedRegistrationRoute;\n","import { useEffect, useState } from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { fetchAuthenticatedUser, getAuthenticatedUser } from '@edx/frontend-platform/auth';\nimport PropTypes from 'prop-types';\n\nimport {\n DEFAULT_REDIRECT_URL,\n} 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 = ({ children }) => {\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 children;\n }\n\n return null;\n};\n\nUnAuthOnlyRoute.propTypes = {\n children: PropTypes.node.isRequired,\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 { Icon } from '@edx/paragon';\nimport { Login } from '@edx/paragon/icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport PropTypes from 'prop-types';\n\nimport messages from './messages';\nimport { LOGIN_PAGE, SUPPORTED_ICON_CLASSES } from '../data/constants';\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 {SUPPORTED_ICON_CLASSES.includes(provider.iconClass) ? (\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 messages from './messages';\nimport { LOGIN_PAGE, REGISTER_PAGE } from '../data/constants';\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 { THIRD_PARTY_AUTH_CONTEXT, THIRD_PARTY_AUTH_CONTEXT_CLEAR_ERROR_MSG } from './actions';\nimport { COMPLETE_STATE, FAILURE_STATE, PENDING_STATE } from '../../data/constants';\n\nexport const defaultState = {\n fieldDescriptions: {\n fields: {},\n },\n optionalFields: {\n fields: {},\n extended_profile: [],\n },\n thirdPartyAuthApiStatus: null,\n thirdPartyAuthContext: {\n autoSubmitRegForm: false,\n currentProvider: null,\n finishAuthUrl: null,\n countryCode: null,\n providers: [],\n secondaryProviders: [],\n pipelineUserDetails: null,\n errorMessage: null,\n welcomePageRedirectUrl: 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: FAILURE_STATE,\n thirdPartyAuthContext: {\n ...state.thirdPartyAuthContext,\n errorMessage: null,\n },\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 { 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 || {},\n optionalFields: data.optionalFields || {},\n thirdPartyAuthContext: data.contextData || {},\n };\n}\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 REGISTRATION_CLEAR_BACKEND_ERROR = 'REGISTRATION_CLEAR_BACKEND_ERROR';\nexport const REGISTER_SET_COUNTRY_CODE = 'REGISTER_SET_COUNTRY_CODE';\nexport const REGISTER_SET_EMAIL_SUGGESTIONS = 'REGISTER_SET_EMAIL_SUGGESTIONS';\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// Set email field frontend validations\nexport const setEmailSuggestionInStore = (emailSuggestion) => ({\n type: REGISTER_SET_EMAIL_SUGGESTIONS,\n payload: { emailSuggestion },\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 = (authenticatedUser, redirectUrl, success) => ({\n type: REGISTER_NEW_USER.SUCCESS,\n payload: { authenticatedUser, 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 clearRegistrationBackendError = (fieldName) => ({\n type: REGISTRATION_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 { logError } from '@edx/frontend-platform/logging';\nimport { call, put, takeEvery } from 'redux-saga/effects';\n\nimport {\n getThirdPartyAuthContextBegin,\n getThirdPartyAuthContextFailure,\n getThirdPartyAuthContextSuccess,\n THIRD_PARTY_AUTH_CONTEXT,\n} from './actions';\nimport {\n getThirdPartyAuthContext,\n} from './service';\nimport { setCountryFromThirdPartyAuthContext } from '../../register/data/actions';\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 { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n 'register.page.title': {\n id: 'register.page.title',\n defaultMessage: 'Register | {siteName}',\n description: 'register page title',\n },\n // Field labels\n 'registration.fullname.label': {\n id: 'registration.fullname.label',\n defaultMessage: 'Full name',\n description: 'Label that appears above fullname field',\n },\n 'registration.email.label': {\n id: 'registration.email.label',\n defaultMessage: 'Email',\n description: 'Label that appears above email field on register page',\n },\n 'registration.username.label': {\n id: 'registration.username.label',\n defaultMessage: 'Public username',\n description: 'Label that appears above username field',\n },\n 'registration.password.label': {\n id: 'registration.password.label',\n defaultMessage: 'Password',\n description: 'Label that appears above password field',\n },\n 'registration.country.label': {\n id: 'registration.country.label',\n defaultMessage: 'Country/Region',\n description: 'Placeholder for the country options dropdown.',\n },\n 'registration.opt.in.label': {\n id: 'registration.opt.in.label',\n defaultMessage: 'I agree that {siteName} may send me marketing messages.',\n description: 'Text for opt in option on register page.',\n },\n // Help text\n 'help.text.name': {\n id: 'help.text.name',\n defaultMessage: 'This name will be used by any certificates that you earn.',\n description: 'Help text for fullname field on registration page',\n },\n 'help.text.username.1': {\n id: 'help.text.username.1',\n defaultMessage: 'The name that will identify you in your courses.',\n description: 'Part of help text for username field on registration page',\n },\n 'help.text.username.2': {\n id: 'help.text.username.2',\n defaultMessage: 'This can not be changed later.',\n description: 'Part of help text for username field on registration page',\n },\n 'help.text.email': {\n id: 'help.text.email',\n defaultMessage: 'For account activation and important updates',\n description: 'Help text for email field on registration page',\n },\n // Form buttons\n 'create.account.for.free.button': {\n id: 'create.account.for.free.button',\n defaultMessage: 'Create an account for free',\n description: 'Label text for registration form submission button',\n },\n 'registration.other.options.heading': {\n id: 'registration.other.options.heading',\n defaultMessage: 'Or register with:',\n description: 'A message that appears above third party auth providers i.e saml, google, facebook etc',\n },\n 'create.account.cta.button': {\n id: 'create.account.cta.button',\n defaultMessage: '{label}',\n description: 'Label text for registration form submission button for those users who are landing through redirections',\n },\n // Institution login\n 'register.institution.login.button': {\n id: 'register.institution.login.button',\n defaultMessage: 'Institution/campus credentials',\n description: 'shows institutions list',\n },\n 'register.institution.login.page.title': {\n id: 'register.institution.login.page.title',\n defaultMessage: 'Register with institution/campus credentials',\n description: 'Heading of institution page',\n },\n // Validation messages\n 'empty.name.field.error': {\n id: 'empty.name.field.error',\n defaultMessage: 'Enter your full name',\n description: 'Error message for empty fullname field',\n },\n 'empty.email.field.error': {\n id: 'empty.email.field.error',\n defaultMessage: 'Enter your email',\n description: 'Error message for empty email field',\n },\n 'empty.username.field.error': {\n id: 'empty.username.field.error',\n defaultMessage: 'Username must be between 2 and 30 characters',\n description: 'Error message for empty username field',\n },\n 'empty.password.field.error': {\n id: 'empty.password.field.error',\n defaultMessage: 'Password criteria has not been met',\n description: 'Error message for empty password field',\n },\n 'empty.country.field.error': {\n id: 'empty.country.field.error',\n defaultMessage: 'Select your country or region of residence',\n description: 'Error message when no country/region is selected',\n },\n 'email.do.not.match': {\n id: 'email.do.not.match',\n defaultMessage: 'The email addresses do not match.',\n description: 'Email not match to confirm email',\n },\n 'email.invalid.format.error': {\n id: 'email.invalid.format.error',\n defaultMessage: 'Enter a valid email address',\n description: 'Validation error for invalid email address',\n },\n 'username.validation.message': {\n id: 'username.validation.message',\n defaultMessage: 'Username must be between 2 and 30 characters',\n description: 'Error message for empty username field',\n },\n 'name.validation.message': {\n id: 'name.validation.message',\n defaultMessage: 'Enter a valid name',\n description: 'Validation message that appears when fullname contain URL',\n },\n 'password.validation.message': {\n id: 'password.validation.message',\n defaultMessage: 'Password criteria has not been met',\n description: 'Error message for empty or invalid password',\n },\n 'username.format.validation.message': {\n id: 'username.format.validation.message',\n defaultMessage: 'Usernames can only contain letters (A-Z, a-z), numerals (0-9), underscores (_), and hyphens (-). Usernames cannot contain spaces',\n description: 'Validation message that appears when username format is invalid',\n },\n // Error messages\n 'registration.request.failure.header': {\n id: 'registration.request.failure.header',\n defaultMessage: 'We couldn\\'t create your account.',\n description: 'error message when registration failure.',\n },\n 'registration.empty.form.submission.error': {\n id: 'registration.empty.form.submission.error',\n defaultMessage: 'Please check your responses and try again.',\n description: 'Error message that appears on top of the form when empty form is submitted',\n },\n 'registration.request.server.error': {\n id: 'registration.request.server.error',\n defaultMessage: 'An error has occurred. Try refreshing the page, or check your internet connection.',\n description: 'Error message for internal server error.',\n },\n 'registration.rate.limit.error': {\n id: 'registration.rate.limit.error',\n defaultMessage: 'Too many failed registration attempts. Try again later.',\n description: 'Error message that appears when an anonymous user has made too many failed registration attempts',\n },\n 'registration.tpa.session.expired': {\n id: 'registration.tpa.session.expired',\n defaultMessage: 'Registration using {provider} has timed out.',\n description: '',\n },\n 'registration.tpa.authentication.failure': {\n id: 'registration.tpa.authentication.failure',\n defaultMessage: 'We are sorry, you are not authorized to access {platform_name} via this channel. '\n + 'Please contact your learning administrator or manager in order to access {platform_name}.'\n + '{lineBreak}{lineBreak}Error Details:{lineBreak}{errorMessage}',\n description: 'Error message third party authentication pipeline fails',\n },\n // Terms of Service and Honor Code\n 'terms.of.service.and.honor.code': {\n id: 'terms.of.service.and.honor.code',\n defaultMessage: 'Terms of Service and Honor Code',\n description: 'Text for the hyperlink that redirects user to terms of service and honor code',\n },\n 'privacy.policy': {\n id: 'privacy.policy',\n defaultMessage: 'Privacy Policy',\n description: 'Text for the hyperlink that redirects user to privacy policy',\n },\n 'honor.code': {\n id: 'honor.code',\n defaultMessage: 'Honor Code',\n description: 'Text for the hyperlink that redirects user to the honor code',\n },\n 'terms.of.service': {\n id: 'terms.of.service',\n defaultMessage: 'Terms of Service',\n description: 'Text for the hyperlink that redirects user to the terms of service',\n },\n // miscellaneous strings\n 'registration.username.suggestion.label': {\n id: 'registration.username.suggestion.label',\n defaultMessage: 'Suggested:',\n description: 'Suggested usernames label text.',\n },\n 'did.you.mean.alert.text': {\n id: 'did.you.mean.alert.text',\n defaultMessage: 'Did you mean',\n description: 'Did you mean alert suggestion',\n },\n});\n\nexport default messages;\n","export 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","import { distance } from 'fastest-levenshtein';\n\nimport {\n COMMON_EMAIL_PROVIDERS,\n DEFAULT_SERVICE_PROVIDER_DOMAINS,\n DEFAULT_TOP_LEVEL_DOMAINS,\n} from './constants';\nimport { VALID_EMAIL_REGEX } from '../../../data/constants';\nimport messages from '../../messages';\n\nexport const emailRegex = new RegExp(VALID_EMAIL_REGEX, 'i');\n\nexport const 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 const 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 const 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\nconst validateEmail = (value, confirmEmailValue, formatMessage) => {\n let fieldError = '';\n let confirmEmailError = '';\n let emailSuggestion = { suggestion: '', type: '' };\n\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 emailSuggestion = {\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 }\n emailSuggestion = { ...response };\n\n if (confirmEmailValue && value !== confirmEmailValue) {\n confirmEmailError = formatMessage(messages['email.do.not.match']);\n }\n }\n }\n return { fieldError, confirmEmailError, suggestion: emailSuggestion };\n};\n\nexport default validateEmail;\n","import messages from '../../messages';\n\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\nexport const urlRegex = new RegExp(INVALID_NAME_REGEX);\n\nconst validateName = (value, formatMessage) => {\n let fieldError = '';\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 }\n return fieldError;\n};\n\nexport default validateName;\n","import messages from '../../messages';\n\nexport const VALID_USERNAME_REGEX = /^[a-zA-Z0-9_-]*$/i;\nexport const usernameRegex = new RegExp(VALID_USERNAME_REGEX, 'i');\n\nconst validateUsername = (value, formatMessage) => {\n let fieldError = '';\n if (!value || value.length <= 1 || value.length > 30) {\n fieldError = formatMessage(messages['username.validation.message']);\n } else if (!usernameRegex.test(value)) {\n fieldError = formatMessage(messages['username.format.validation.message']);\n }\n return fieldError;\n};\n\nexport default validateUsername;\n","import { getConfig, snakeCaseObject } from '@edx/frontend-platform';\n\nimport { LETTER_REGEX, NUMBER_REGEX } from '../../data/constants';\nimport messages from '../messages';\nimport validateEmail from '../RegistrationFields/EmailField/validator';\nimport validateName from '../RegistrationFields/NameField/validator';\nimport validateUsername from '../RegistrationFields/UsernameField/validator';\n\n/**\n * It validates the password field value\n * @param value\n * @param formatMessage\n * @returns {string}\n */\nexport const validatePasswordField = (value, formatMessage) => {\n let fieldError = '';\n if (!value || !LETTER_REGEX.test(value) || !NUMBER_REGEX.test(value) || value.length < 8) {\n fieldError = formatMessage(messages['password.validation.message']);\n }\n return fieldError;\n};\n\n/**\n * It accepts complete registration data as payload and checks if the form is valid.\n * @param payload\n * @param errors\n * @param configurableFormFields\n * @param fieldDescriptions\n * @param formatMessage\n * @returns {{fieldErrors, isValid: boolean}}\n */\nexport const isFormValid = (\n payload,\n errors,\n configurableFormFields,\n fieldDescriptions,\n formatMessage,\n) => {\n const fieldErrors = { ...errors };\n let isValid = true;\n let emailSuggestion = { suggestion: '', type: '' };\n Object.keys(payload).forEach(key => {\n switch (key) {\n case 'name':\n fieldErrors.name = validateName(payload.name, formatMessage);\n if (fieldErrors.name) { isValid = false; }\n break;\n case 'email': {\n const {\n fieldError, confirmEmailError, suggestion,\n } = validateEmail(payload.email, configurableFormFields?.confirm_email, formatMessage);\n if (fieldError) {\n fieldErrors.email = fieldError;\n isValid = false;\n }\n if (confirmEmailError) {\n fieldErrors.confirm_email = confirmEmailError;\n isValid = false;\n }\n emailSuggestion = suggestion;\n break;\n }\n case 'username':\n fieldErrors.username = validateUsername(payload.username, formatMessage);\n if (fieldErrors.username) { isValid = false; }\n break;\n case 'password':\n fieldErrors.password = validatePasswordField(payload.password, formatMessage);\n if (fieldErrors.password) { isValid = false; }\n break;\n default:\n break;\n }\n });\n\n if (getConfig().SHOW_CONFIGURABLE_EDX_FIELDS) {\n if (!configurableFormFields?.country?.displayValue) {\n fieldErrors.country = formatMessage(messages['empty.country.field.error']);\n isValid = false;\n }\n }\n Object.keys(fieldDescriptions).forEach(key => {\n if (key === 'country' && !configurableFormFields.country.displayValue) {\n fieldErrors[key] = formatMessage(messages['empty.country.field.error']);\n } else if (!configurableFormFields[key]) {\n fieldErrors[key] = fieldDescriptions[key].error_message;\n }\n if (fieldErrors[key]) { isValid = false; }\n });\n\n return { isValid, fieldErrors, emailSuggestion };\n};\n\n/**\n * It prepares a payload for registration data that can be passed to registration API endpoint.\n * @param initPayload\n * @param configurableFormFields\n * @param showMarketingEmailOptInCheckbox\n * @param totalRegistrationTime\n * @param queryParams\n * @returns {*}\n */\nexport const prepareRegistrationPayload = (\n initPayload,\n configurableFormFields,\n showMarketingEmailOptInCheckbox,\n totalRegistrationTime,\n queryParams,\n) => {\n let payload = { ...initPayload };\n Object.keys(configurableFormFields).forEach((fieldName) => {\n if (fieldName === 'country') {\n payload[fieldName] = configurableFormFields[fieldName].countryCode;\n } else {\n payload[fieldName] = configurableFormFields[fieldName];\n }\n });\n\n // Don't send the marketing email opt-in value if the flag is turned off\n if (!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 return payload;\n};\n\n/**\n * A helper for backend validations selector. It processes the api output and generates a\n * key value dict for field errors.\n * @param registrationError\n * @param validations\n * @returns {{username: string}|{name: string}|*|{}|null}\n */\nexport const getBackendValidations = (registrationError, validations) => {\n if (validations) {\n return validations.validationDecisions;\n }\n\n if (Object.keys(registrationError).length > 0) {\n const fields = Object.keys(registrationError).filter(\n (fieldName) => !(fieldName in ['errorCode', 'usernameSuggestions']),\n );\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","import React, { useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\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 messages from './messages';\nimport { LETTER_REGEX, NUMBER_REGEX } from '../data/constants';\nimport { clearRegistrationBackendError, fetchRealtimeValidations } from '../register/data/actions';\nimport { validatePasswordField } from '../register/data/utils';\n\nconst PasswordField = (props) => {\n const { formatMessage } = useIntl();\n const dispatch = useDispatch();\n\n const validationApiRateLimited = useSelector(state => state.register.validationApiRateLimited);\n const [isPasswordHidden, setHiddenTrue, setHiddenFalse] = useToggle(true);\n const [showTooltip, setShowTooltip] = useState(false);\n\n const handleBlur = (e) => {\n const { name, value } = e.target;\n if (name === props.name && e.relatedTarget?.name === 'passwordIcon') {\n return; // Do not run validations on password icon click\n }\n\n let passwordValue = value;\n if (name === 'passwordIcon') {\n // To validate actual password value when onBlur is triggered by focusing out the password icon\n passwordValue = props.value;\n }\n\n if (props.handleBlur) {\n props.handleBlur({\n target: {\n name: props.name,\n value: passwordValue,\n },\n });\n }\n\n setShowTooltip(props.showRequirements && false);\n if (props.handleErrorChange) { // If rendering from register page\n const fieldError = validatePasswordField(passwordValue, formatMessage);\n if (fieldError) {\n props.handleErrorChange('password', fieldError);\n } else if (!validationApiRateLimited) {\n dispatch(fetchRealtimeValidations({ password: passwordValue }));\n }\n }\n };\n\n const handleFocus = (e) => {\n if (e.target?.name === 'passwordIcon') {\n return; // Do not clear error on password icon focus\n }\n\n if (props.handleFocus) {\n props.handleFocus(e);\n }\n if (props.handleErrorChange) {\n props.handleErrorChange('password', '');\n dispatch(clearRegistrationBackendError('password'));\n }\n setTimeout(() => setShowTooltip(props.showRequirements && true), 150);\n };\n\n const HideButton = (\n \n );\n\n const ShowButton = (\n \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 handleErrorChange: null,\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 handleErrorChange: 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 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';\nimport { REGISTER_EMBEDDED_PAGE } from '../data/constants';\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 departments: {\n enabled: ['account settings', 'billing and payments', 'certificates', 'deadlines', 'errors and technical issues', 'other', 'proctoring'],\n },\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 if (window.location.pathname === REGISTER_EMBEDDED_PAGE) {\n return null;\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","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 SUCCESS = 'success';\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 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 messages from './messages';\nimport {\n COMPLETE_STATE, FORBIDDEN_STATE, FORM_SUBMISSION_ERROR, INTERNAL_SERVER_ERROR,\n} from '../data/constants';\nimport { PASSWORD_RESET } from '../reset-password/data/constants';\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 { 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});\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 classNames from 'classnames';\n\nimport messages from './messages';\n\nconst LargeLayout = () => {\n const { formatMessage } = useIntl();\n\n return (\n
\n
\n \n {getConfig().SITE_NAME}\n \n
\n
\n \n {formatMessage(messages['start.learning'])}\n
\n {formatMessage(messages['with.site.name'], { siteName: getConfig().SITE_NAME })}\n
\n \n
\n
\n
\n \n \n \n \n \n
\n
\n );\n};\n\nexport default LargeLayout;\n","import React from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { Hyperlink, Image } from '@edx/paragon';\nimport classNames from 'classnames';\n\nimport messages from './messages';\n\nconst MediumLayout = () => {\n const { formatMessage } = useIntl();\n\n return (\n <>\n
\n
\n
\n \n {getConfig().SITE_NAME}\n \n
\n
\n
\n \n \n {formatMessage(messages['start.learning'])}{' '}\n \n {formatMessage(messages['with.site.name'], { siteName: getConfig().SITE_NAME })}\n \n \n \n
\n
\n
\n
\n \n \n \n \n \n
\n
\n \n );\n};\n\nexport default MediumLayout;\n","import React from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { Hyperlink, Image } from '@edx/paragon';\nimport classNames from 'classnames';\n\nimport messages from './messages';\n\nconst SmallLayout = () => {\n const { formatMessage } = useIntl();\n\n return (\n \n
\n
\n \n {getConfig().SITE_NAME}\n \n
\n
\n \n \n {formatMessage(messages['start.learning'])}{' '}\n \n {formatMessage(messages['with.site.name'], { siteName: getConfig().SITE_NAME })}\n \n \n \n
\n
\n \n );\n};\n\nexport default SmallLayout;\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n 'your.career.turning.point': {\n id: 'your.career.turning.point',\n defaultMessage: 'Your career turning point',\n description: 'Part of the heading \"Your career turning point is here.\" shown on Authn MFE',\n },\n 'is.here': {\n id: 'is.here',\n defaultMessage: 'is here.',\n description: 'Part of the heading \"Your career turning point is here.\" shown on Authn MFE',\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';\n\nimport './index.scss';\nimport messages from './messages';\n\nconst LargeLayout = () => {\n const { formatMessage } = useIntl();\n\n return (\n \n \n {getConfig().SITE_NAME}\n \n
\n

\n \n {formatMessage(messages['your.career.turning.point'])}\n \n \n {formatMessage(messages['is.here'])}\n \n

\n
\n
\n );\n};\n\nexport default LargeLayout;\n","import React from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { Hyperlink, Image } from '@edx/paragon';\n\nimport './index.scss';\nimport messages from './messages';\n\nconst MediumLayout = () => {\n const { formatMessage } = useIntl();\n\n return (\n \n \n {getConfig().SITE_NAME}\n \n
\n

\n \n {formatMessage(messages['your.career.turning.point'])}{' '}\n \n \n {formatMessage(messages['is.here'])}\n \n

\n
\n
\n );\n};\n\nexport default MediumLayout;\n","import React from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { Hyperlink, Image } from '@edx/paragon';\n\nimport messages from './messages';\n\nconst SmallLayout = () => {\n const { formatMessage } = useIntl();\n\n return (\n \n \n {getConfig().SITE_NAME}\n \n
\n

\n \n {formatMessage(messages['your.career.turning.point'])}{' '}\n \n \n {formatMessage(messages['is.here'])}\n \n

\n
\n
\n );\n};\n\nexport default SmallLayout;\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';\n\nimport messages from './messages';\n\nconst ExtraSmallLayout = () => {\n const { formatMessage } = useIntl();\n\n return (\n \n \n {getConfig().SITE_NAME}\n \n
\n

\n \n {formatMessage(messages['your.career.turning.point'])}{' '}\n \n \n {formatMessage(messages['is.here'])}\n \n

\n
\n \n );\n};\n\nexport default ExtraSmallLayout;\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\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 '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});\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 LargeLayout = ({ 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\nLargeLayout.propTypes = {\n username: PropTypes.string.isRequired,\n};\n\nexport default LargeLayout;\n","import React from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { Hyperlink, Image } from '@edx/paragon';\nimport PropTypes from 'prop-types';\n\nimport messages from './messages';\n\nconst MediumLayout = ({ 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\nMediumLayout.propTypes = {\n username: PropTypes.string.isRequired,\n};\n\nexport default MediumLayout;\n","import React from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { Hyperlink, Image } from '@edx/paragon';\nimport PropTypes from 'prop-types';\n\nimport messages from './messages';\n\nconst SmallLayout = ({ 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\nSmallLayout.propTypes = {\n username: PropTypes.string.isRequired,\n};\n\nexport default SmallLayout;\n","import React, { useEffect, useState } from 'react';\n\nimport { breakpoints } from '@edx/paragon';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport MediaQuery from 'react-responsive';\n\nimport { DefaultLargeLayout, DefaultMediumLayout, DefaultSmallLayout } from './components/default-layout';\nimport {\n ImageExtraSmallLayout, ImageLargeLayout, ImageMediumLayout, ImageSmallLayout,\n} from './components/image-layout';\nimport { AuthLargeLayout, AuthMediumLayout, AuthSmallLayout } from './components/welcome-page-layout';\nimport { DEFAULT_LAYOUT, IMAGE_LAYOUT } from './data/constants';\n\nconst BaseContainer = ({ children, showWelcomeBanner, username }) => {\n const [baseContainerVersion, setBaseContainerVersion] = useState(DEFAULT_LAYOUT);\n\n useEffect(() => {\n const initRebrandExperiment = () => {\n if (window.experiments?.rebrandExperiment) {\n setBaseContainerVersion(window.experiments?.rebrandExperiment?.variation);\n } else {\n window.experiments = window.experiments || {};\n window.experiments.rebrandExperiment = {};\n window.experiments.rebrandExperiment.handleLoaded = () => {\n setBaseContainerVersion(window.experiments?.rebrandExperiment?.variation);\n };\n }\n };\n initRebrandExperiment();\n }, []);\n\n if (baseContainerVersion === IMAGE_LAYOUT) {\n return (\n
\n \n {showWelcomeBanner ? : }\n \n \n {showWelcomeBanner ? : }\n \n \n {showWelcomeBanner ? : }\n \n \n {showWelcomeBanner ? : }\n \n
\n {children}\n
\n
\n );\n }\n\n return (\n <>\n
\n
\n \n {showWelcomeBanner ? : }\n \n \n {showWelcomeBanner ? : }\n \n \n {showWelcomeBanner ? : }\n \n
\n {children}\n
\n
\n \n );\n};\n\nBaseContainer.defaultProps = {\n showWelcomeBanner: false,\n username: null,\n};\n\nBaseContainer.propTypes = {\n children: PropTypes.node.isRequired,\n showWelcomeBanner: PropTypes.bool,\n username: PropTypes.string,\n};\n\nexport default BaseContainer;\n","const IMAGE_LAYOUT = 'image-layout';\nconst DEFAULT_LAYOUT = 'default-layout';\n\nexport { DEFAULT_LAYOUT, IMAGE_LAYOUT };\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 { useNavigate } from 'react-router-dom';\n\nimport { forgotPassword, setForgotPasswordFormData } from './data/actions';\nimport { forgotPasswordResultSelector } from './data/selectors';\nimport ForgotPasswordAlert from './ForgotPasswordAlert';\nimport messages from './messages';\nimport BaseContainer from '../base-container';\nimport { FormGroup } from '../common-components';\nimport { DEFAULT_STATE, LOGIN_PAGE, VALID_EMAIL_REGEX } from '../data/constants';\nimport { updatePathWithQueryParams, windowScrollTo } from '../data/utils';\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 navigate = useNavigate();\n\n useEffect(() => {\n sendPageEvent('login_and_registration', 'reset');\n sendTrackEvent('edx.bi.password_reset_form.viewed', { category: 'user-engagement' });\n }, []);\n\n useEffect(() => {\n setValidationError(emailValidationError);\n }, [emailValidationError]);\n\n useEffect(() => {\n if (status === 'complete') {\n setEmail('');\n }\n }, [status]);\n\n const getValidationMessage = (value) => {\n let error = '';\n\n if (value === '') {\n error = formatMessage(messages['forgot.password.empty.email.field.error']);\n } else if (!emailRegex.test(value)) {\n error = formatMessage(messages['forgot.password.page.invalid.email.message']);\n }\n\n return error;\n };\n\n const handleBlur = () => {\n props.setForgotPasswordFormData({ email, emailValidationError: getValidationMessage(email) });\n };\n\n const handleFocus = () => props.setForgotPasswordFormData({ emailValidationError: '' });\n\n const handleSubmit = (e) => {\n e.preventDefault();\n setBannerEmail(email);\n\n const error = getValidationMessage(email);\n if (error) {\n setFormErrors(error);\n props.setForgotPasswordFormData({ email, emailValidationError: error });\n windowScrollTo({ left: 0, top: 0, behavior: 'smooth' });\n } else {\n props.forgotPassword(email);\n }\n };\n\n const tabTitle = (\n
\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 navigate(updatePathWithQueryParams(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 { 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","import { FORGOT_PASSWORD, FORGOT_PASSWORD_PERSIST_FORM_DATA } from './actions';\nimport { INTERNAL_SERVER_ERROR, PENDING_STATE } from '../../data/constants';\nimport { PASSWORD_RESET_FAILURE } from '../../reset-password/data/actions';\n\nexport const defaultState = {\n status: '',\n submitState: '',\n email: '',\n emailValidationError: '',\n};\n\nconst reducer = (state = defaultState, action = null) => {\n if (action !== null) {\n switch (action.type) {\n case FORGOT_PASSWORD.BEGIN:\n return {\n email: state.email,\n status: 'pending',\n submitState: PENDING_STATE,\n };\n case FORGOT_PASSWORD.SUCCESS:\n return {\n ...defaultState,\n status: 'complete',\n };\n case FORGOT_PASSWORD.FORBIDDEN:\n return {\n email: state.email,\n status: 'forbidden',\n };\n case FORGOT_PASSWORD.FAILURE:\n return {\n email: state.email,\n status: INTERNAL_SERVER_ERROR,\n };\n case PASSWORD_RESET_FAILURE:\n return {\n status: action.payload.errorCode,\n };\n case FORGOT_PASSWORD_PERSIST_FORM_DATA: {\n const { forgotPasswordFormData } = action.payload;\n return {\n ...state,\n ...forgotPasswordFormData,\n };\n }\n default:\n return {\n ...defaultState,\n email: state.email,\n emailValidationError: state.emailValidationError,\n };\n }\n }\n return state;\n};\n\nexport default reducer;\n","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","// 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 2 characters.',\n description: 'Validation message that appears when username or email address is less than 2 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, { useEffect, 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, useNavigate } from 'react-router-dom';\n\nimport messages from './messages';\nimport { DEFAULT_REDIRECT_URL, RESET_PAGE } from '../data/constants';\nimport { updatePathWithQueryParams } from '../data/utils';\nimport useMobileResponsive from '../data/utils/useMobileResponsive';\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 const navigate = useNavigate();\n\n useEffect(() => {\n if (redirectToResetPasswordPage) {\n navigate(updatePathWithQueryParams(RESET_PAGE));\n }\n }, [redirectToResetPasswordPage, navigate]);\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';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport {\n Button, Form,\n Icon,\n} from '@edx/paragon';\nimport { Login } from '@edx/paragon/icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport PropTypes from 'prop-types';\n\nimport messages from './messages';\nimport { LOGIN_PAGE, SUPPORTED_ICON_CLASSES } from '../data/constants';\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 {SUPPORTED_ICON_CLASSES.includes(tpaProvider.iconClass) ? (\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","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 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';\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 updatePathWithQueryParams,\n windowScrollTo,\n} from '../data/utils';\nimport ResetPasswordSuccess from '../reset-password/ResetPasswordSuccess';\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 < 2) {\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\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 { 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 { useNavigate, useParams } from 'react-router-dom';\n\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';\nimport BaseContainer from '../base-container';\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';\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 { token } = useParams();\n const navigate = useNavigate();\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 const { name, value } = event.target;\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 if (token) {\n props.validateToken(token);\n return ;\n }\n } else if (props.status === PASSWORD_RESET_ERROR) {\n navigate(updatePathWithQueryParams(RESET_PAGE));\n } else if (props.status === 'success') {\n navigate(updatePathWithQueryParams(LOGIN_PAGE));\n } else {\n return (\n \n
\n \n \n {formatMessage(messages['reset.password.page.title'], { siteName: getConfig().SITE_NAME })}\n \n \n navigate(updatePathWithQueryParams(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 errorMsg: null,\n};\n\nResetPasswordPage.propTypes = {\n resetPassword: PropTypes.func.isRequired,\n validateToken: PropTypes.func.isRequired,\n token: PropTypes.string,\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 { LOGIN_PERSIST_FORM_DATA, LOGIN_REMOVE_PASSWORD_RESET_BANNER, LOGIN_REQUEST } from './actions';\nimport { DEFAULT_STATE, PENDING_STATE } from '../../data/constants';\nimport { RESET_PASSWORD } from '../../reset-password';\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 { 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","import { createSelector } from 'reselect';\n\nexport const storeName = 'commonComponents';\n\nexport const commonComponentsSelector = state => ({ ...state[storeName] });\n\nexport const welcomePageContextSelector = createSelector(\n commonComponentsSelector,\n commonComponents => ({\n fields: commonComponents.optionalFields.fields,\n extended_profile: commonComponents.optionalFields.extended_profile,\n nextUrl: commonComponents.thirdPartyAuthContext.welcomePageRedirectUrl,\n }),\n);\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","const isOneTrustFunctionalCookieEnabled = () => !!window?.OnetrustActiveGroups?.includes('C0003');\n\nexport default isOneTrustFunctionalCookieEnabled;\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","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 getAuthenticatedUser,\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';\nimport { useLocation } from 'react-router-dom';\n\nimport { saveUserProfile } from './data/actions';\nimport { welcomePageContextSelector } from './data/selectors';\nimport messages from './messages';\nimport ProgressiveProfilingPageModal from './ProgressiveProfilingPageModal';\nimport BaseContainer from '../base-container';\nimport { RedirectLogistration } from '../common-components';\nimport { getThirdPartyAuthContext } from '../common-components/data/actions';\nimport {\n COMPLETE_STATE,\n DEFAULT_REDIRECT_URL,\n DEFAULT_STATE,\n FAILURE_STATE,\n PENDING_STATE,\n} from '../data/constants';\nimport isOneTrustFunctionalCookieEnabled from '../data/oneTrust';\nimport { getAllPossibleQueryParams, isHostAvailableInQueryParams } from '../data/utils';\nimport { FormFieldRenderer } from '../field-renderer';\n\nconst ProgressiveProfiling = (props) => {\n const { formatMessage } = useIntl();\n const {\n getFieldDataFromBackend,\n submitState,\n showError,\n welcomePageContext,\n welcomePageContextApiStatus,\n } = props;\n const location = useLocation();\n const registrationEmbedded = isHostAvailableInQueryParams();\n\n const queryParams = getAllPossibleQueryParams();\n const authenticatedUser = getAuthenticatedUser() || location.state?.authenticatedUser;\n const functionalCookiesConsent = isOneTrustFunctionalCookieEnabled();\n const enablePostRegistrationRecommendations = (\n getConfig().ENABLE_POST_REGISTRATION_RECOMMENDATIONS && functionalCookiesConsent\n );\n\n const [registrationResult, setRegistrationResult] = useState({ redirectUrl: '' });\n const [formFieldData, setFormFieldData] = useState({ fields: {}, extendedProfile: [] });\n const [values, setValues] = useState({});\n const [showModal, setShowModal] = useState(false);\n const [showRecommendationsPage, setShowRecommendationsPage] = useState(false);\n\n useEffect(() => {\n if (registrationEmbedded) {\n getFieldDataFromBackend({ is_welcome_page: true, next: queryParams?.next });\n } else {\n configureAuth(AxiosJwtAuthService, { loggingService: getLoggingService(), config: getConfig() });\n }\n }, [registrationEmbedded, getFieldDataFromBackend, queryParams?.next]);\n\n useEffect(() => {\n const registrationResponse = location.state?.registrationResult;\n if (registrationResponse) {\n setRegistrationResult(registrationResponse);\n setFormFieldData({\n fields: location.state?.optionalFields.fields,\n extendedProfile: location.state?.optionalFields.extended_profile,\n });\n }\n }, [location.state]);\n\n useEffect(() => {\n if (registrationEmbedded && Object.keys(welcomePageContext).includes('fields')) {\n setFormFieldData({\n fields: welcomePageContext.fields,\n extendedProfile: welcomePageContext.extended_profile,\n });\n const nextUrl = welcomePageContext.nextUrl ? welcomePageContext.nextUrl : getConfig().SEARCH_CATALOG_URL;\n setRegistrationResult({ redirectUrl: nextUrl });\n }\n }, [registrationEmbedded, welcomePageContext]);\n\n useEffect(() => {\n if (authenticatedUser?.userId) {\n identifyAuthenticatedUser(authenticatedUser.userId);\n sendPageEvent('login_and_registration', 'welcome');\n }\n }, [authenticatedUser]);\n\n useEffect(() => {\n if (!enablePostRegistrationRecommendations) {\n sendTrackEvent(\n 'edx.bi.user.recommendations.not.enabled',\n { functionalCookiesConsent, page: 'authn_recommendations' },\n );\n return;\n }\n\n if (registrationResult.redirectUrl && authenticatedUser?.userId) {\n const redirectQueryParams = getAllPossibleQueryParams(registrationResult.redirectUrl);\n if (!('enrollment_action' in redirectQueryParams || queryParams?.next)) {\n setShowRecommendationsPage(true);\n }\n }\n }, [\n authenticatedUser,\n enablePostRegistrationRecommendations,\n functionalCookiesConsent,\n registrationResult.redirectUrl,\n queryParams?.next,\n ]);\n\n if (\n !authenticatedUser\n || !(location.state?.registrationResult || registrationEmbedded)\n || welcomePageContextApiStatus === FAILURE_STATE\n || (welcomePageContextApiStatus === COMPLETE_STATE && !Object.keys(welcomePageContext).includes('fields'))\n ) {\n const DASHBOARD_URL = getConfig().LMS_BASE_URL.concat(DEFAULT_REDIRECT_URL);\n global.location.assign(DASHBOARD_URL);\n return null;\n }\n\n const handleSubmit = (e) => {\n e.preventDefault();\n window.history.replaceState(location.state, null, '');\n const payload = { ...values, extendedProfile: [] };\n if (Object.keys(formFieldData.extendedProfile).length > 0) {\n formFieldData.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 host: queryParams?.host || '',\n },\n );\n };\n\n const handleSkip = (e) => {\n e.preventDefault();\n window.history.replaceState(location.state, null, '');\n setShowModal(true);\n sendTrackEvent(\n 'edx.bi.welcome.page.skip.link.clicked',\n {\n host: queryParams?.host || '',\n },\n );\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(formFieldData.fields).map((fieldName) => {\n const fieldData = formFieldData.fields[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 && welcomePageContext.nextUrl) && (\n \n )}\n {props.shouldRedirect && (\n \n )}\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 authenticatedUser: PropTypes.shape({\n username: PropTypes.string,\n userId: PropTypes.number,\n }),\n showError: PropTypes.bool,\n shouldRedirect: PropTypes.bool,\n submitState: PropTypes.string,\n welcomePageContext: PropTypes.shape({\n extended_profile: PropTypes.arrayOf(PropTypes.string),\n fields: PropTypes.shape({}),\n nextUrl: PropTypes.string,\n }),\n welcomePageContextApiStatus: PropTypes.string,\n // Actions\n getFieldDataFromBackend: PropTypes.func.isRequired,\n saveUserProfile: PropTypes.func.isRequired,\n};\n\nProgressiveProfiling.defaultProps = {\n authenticatedUser: {},\n shouldRedirect: false,\n showError: false,\n submitState: DEFAULT_STATE,\n welcomePageContext: {},\n welcomePageContextApiStatus: PENDING_STATE,\n};\n\nconst mapStateToProps = state => {\n const welcomePageStore = state.welcomePage;\n\n return {\n shouldRedirect: welcomePageStore.success,\n showError: welcomePageStore.showError,\n submitState: welcomePageStore.submitState,\n welcomePageContext: welcomePageContextSelector(state),\n welcomePageContextApiStatus: state.commonComponents.thirdPartyAuthApiStatus,\n };\n};\n\nexport default connect(\n mapStateToProps,\n {\n saveUserProfile,\n getFieldDataFromBackend: getThirdPartyAuthContext,\n },\n)(ProgressiveProfiling);\n","import { SAVE_USER_PROFILE } from './actions';\nimport {\n DEFAULT_STATE, PENDING_STATE,\n} from '../../data/constants';\n\nexport const defaultState = {\n extendedProfile: [],\n fieldDescriptions: {},\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","// 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","import React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport PropTypes from 'prop-types';\n\nimport validateName from './validator';\nimport { FormGroup } from '../../../common-components';\nimport { clearRegistrationBackendError, fetchRealtimeValidations } from '../../data/actions';\n\n/**\n * Name field wrapper. It accepts following handlers\n * - handleChange for setting value change and\n * - handleErrorChange for setting error\n *\n * It is responsible for\n * - Making backend call for generating username suggestions\n * - Performing name field validations\n * - Clearing error on focus\n * - Setting value on change\n */\nconst NameField = (props) => {\n const { formatMessage } = useIntl();\n const dispatch = useDispatch();\n const validationApiRateLimited = useSelector(state => state.register.validationApiRateLimited);\n\n const {\n handleErrorChange,\n shouldFetchUsernameSuggestions,\n } = props;\n\n const handleOnBlur = (e) => {\n const { value } = e.target;\n const fieldError = validateName(value, formatMessage);\n if (fieldError) {\n handleErrorChange('name', fieldError);\n } else if (shouldFetchUsernameSuggestions && !validationApiRateLimited) {\n dispatch(fetchRealtimeValidations({ name: value }));\n }\n };\n\n const handleOnFocus = () => {\n handleErrorChange('name', '');\n dispatch(clearRegistrationBackendError('name'));\n };\n\n return (\n \n );\n};\n\nNameField.defaultProps = {\n errorMessage: '',\n shouldFetchUsernameSuggestions: false,\n};\n\nNameField.propTypes = {\n errorMessage: PropTypes.string,\n shouldFetchUsernameSuggestions: PropTypes.bool,\n value: PropTypes.string.isRequired,\n handleChange: PropTypes.func.isRequired,\n handleErrorChange: PropTypes.func.isRequired,\n};\n\nexport default NameField;\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\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 validateEmail from './validator';\nimport { FormGroup } from '../../../common-components';\nimport {\n clearRegistrationBackendError,\n fetchRealtimeValidations,\n setEmailSuggestionInStore,\n} from '../../data/actions';\nimport messages from '../../messages';\n\n/**\n * Email field wrapper. It accepts following handlers\n * - handleChange for setting value change and\n * - handleErrorChange for setting error\n *\n * It is responsible for\n * - Generating email warning and error suggestions\n * - Setting and clearing email suggestions\n * - Performing email field validations\n * - clearing error on focus\n * - setting value on change\n */\nconst EmailField = (props) => {\n const { formatMessage } = useIntl();\n const dispatch = useDispatch();\n\n const {\n handleChange,\n handleErrorChange,\n confirmEmailValue,\n } = props;\n\n const {\n registrationFormData: backedUpFormData,\n validationApiRateLimited,\n } = useSelector(state => state.register);\n\n const [emailSuggestion, setEmailSuggestion] = useState({ ...backedUpFormData?.emailSuggestion });\n\n useEffect(() => {\n setEmailSuggestion(backedUpFormData.emailSuggestion);\n }, [backedUpFormData.emailSuggestion]);\n\n const handleOnBlur = (e) => {\n const { value } = e.target;\n const { fieldError, confirmEmailError, suggestion } = validateEmail(value, confirmEmailValue, formatMessage);\n\n if (confirmEmailError) {\n handleErrorChange('confirm_email', confirmEmailError);\n }\n\n dispatch(setEmailSuggestionInStore(suggestion));\n setEmailSuggestion(suggestion);\n\n if (fieldError) {\n handleErrorChange('email', fieldError);\n } else if (!validationApiRateLimited) {\n dispatch(fetchRealtimeValidations({ email: value }));\n }\n };\n\n const handleOnFocus = () => {\n handleErrorChange('email', '');\n dispatch(clearRegistrationBackendError('email'));\n };\n\n const handleSuggestionClick = (event) => {\n event.preventDefault();\n handleErrorChange('email', '');\n handleChange({ target: { name: 'email', value: emailSuggestion.suggestion } });\n setEmailSuggestion({ suggestion: '', type: '' });\n };\n\n const handleSuggestionClosed = () => setEmailSuggestion({ suggestion: '', type: '' });\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 }\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 errorMessage: '',\n confirmEmailValue: null,\n};\n\nEmailField.propTypes = {\n errorMessage: PropTypes.string,\n value: PropTypes.string.isRequired,\n handleChange: PropTypes.func.isRequired,\n handleErrorChange: PropTypes.func.isRequired,\n confirmEmailValue: PropTypes.string,\n};\n\nexport default EmailField;\n","import React, { useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { Button, Icon, IconButton } from '@edx/paragon';\nimport { Close } from '@edx/paragon/icons';\nimport PropTypes from 'prop-types';\n\nimport validateUsername from './validator';\nimport { FormGroup } from '../../../common-components';\nimport {\n clearRegistrationBackendError,\n clearUsernameSuggestions,\n fetchRealtimeValidations,\n} from '../../data/actions';\nimport messages from '../../messages';\n\n/**\n * Username field wrapper. It accepts following handlers\n * - handleChange for setting value change and\n * - handleErrorChange for setting error\n *\n * It is responsible for\n * - Rendering username suggestions\n * - Setting and clearing username suggestions\n * - Performing username field validations\n * - clearing error on focus\n * - setting value on change\n */\nconst UsernameField = (props) => {\n const { formatMessage } = useIntl();\n const dispatch = useDispatch();\n\n const {\n value,\n errorMessage,\n handleChange,\n handleErrorChange,\n } = props;\n\n let className = '';\n let suggestedUsernameDiv = null;\n let iconButton = null;\n const { usernameSuggestions, validationApiRateLimited } = useSelector(state => state.register);\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 && !value) {\n handleChange({ target: { name: 'username', value: ' ' } });\n }\n }, [handleChange, usernameSuggestions, value]);\n\n const handleOnBlur = (event) => {\n const { value: username } = event.target;\n const fieldError = validateUsername(username, formatMessage);\n if (fieldError) {\n handleErrorChange('username', fieldError);\n } else if (!validationApiRateLimited) {\n dispatch(fetchRealtimeValidations({ username }));\n }\n };\n\n const handleOnChange = (event) => {\n let username = event.target.value;\n if (username.length > 30) {\n return;\n }\n if (event.target.value.startsWith(' ')) {\n username = username.trim();\n }\n handleChange({ target: { name: 'username', value: username } });\n };\n\n const handleOnFocus = (event) => {\n const username = event.target.value;\n dispatch(clearUsernameSuggestions());\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 (username === ' ') {\n handleChange({ target: { name: 'username', value: '' } });\n }\n handleErrorChange('username', '');\n dispatch(clearRegistrationBackendError('username'));\n };\n\n const handleSuggestionClick = (event, suggestion = '') => {\n event.preventDefault();\n handleErrorChange('username', ''); // clear error\n handleChange({ target: { name: 'username', value: suggestion } }); // to set suggestion as value\n dispatch(clearUsernameSuggestions());\n };\n\n const handleUsernameSuggestionClose = () => {\n handleChange({ target: { name: 'username', value: '' } }); // to remove space in field\n dispatch(clearUsernameSuggestions());\n };\n\n const suggestedUsernames = () => (\n
\n {formatMessage(messages['registration.username.suggestion.label'])}\n
\n {usernameSuggestions.map((username, index) => (\n handleSuggestionClick(e, username)}\n >\n {username}\n \n ))}\n
\n {iconButton}\n
\n );\n\n if (usernameSuggestions.length > 0 && errorMessage && value === ' ') {\n className = 'username-suggestions__error';\n iconButton = handleUsernameSuggestionClose()} variant=\"black\" size=\"sm\" className=\"username-suggestions__close__button\" />;\n suggestedUsernameDiv = suggestedUsernames();\n } else if (usernameSuggestions.length > 0 && value === ' ') {\n className = 'username-suggestions d-flex align-items-center';\n iconButton = handleUsernameSuggestionClose()} variant=\"black\" size=\"sm\" className=\"username-suggestions__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 errorMessage: '',\n autoComplete: null,\n};\n\nUsernameField.propTypes = {\n handleChange: PropTypes.func.isRequired,\n handleErrorChange: 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","export const COUNTRY_CODE_KEY = 'code';\nexport const COUNTRY_DISPLAY_KEY = 'name';\n\nconst 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 are applied, extra space added in country value, so we should 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\nexport default validateCountryField;\n","import React, { useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { FormAutosuggest, FormAutosuggestOption, FormControlFeedback } from '@edx/paragon';\nimport PropTypes from 'prop-types';\n\nimport validateCountryField, { COUNTRY_CODE_KEY, COUNTRY_DISPLAY_KEY } from './validator';\nimport { clearRegistrationBackendError } from '../../data/actions';\nimport messages from '../../messages';\n\n/**\n * Country field wrapper. It accepts following handlers\n * - handleChange for setting value change and\n * - handleErrorChange for setting error\n *\n * It is responsible for\n * - Auto populating country field if backendCountryCode is available in redux\n * - Performing country field validations\n * - clearing error on focus\n * - setting value on change and selection\n */\nconst CountryField = (props) => {\n const {\n countryList,\n selectedCountry,\n onChangeHandler,\n handleErrorChange,\n onFocusHandler,\n } = props;\n const { formatMessage } = useIntl();\n const dispatch = useDispatch();\n const backendCountryCode = useSelector(state => state.register.backendCountryCode);\n\n useEffect(() => {\n if (backendCountryCode && backendCountryCode !== selectedCountry?.countryCode) {\n let countryCode = '';\n let countryDisplayValue = '';\n\n const countryVal = countryList.find(\n (country) => (country[COUNTRY_CODE_KEY].toLowerCase() === backendCountryCode.toLowerCase()),\n );\n if (countryVal) {\n countryCode = countryVal[COUNTRY_CODE_KEY];\n countryDisplayValue = countryVal[COUNTRY_DISPLAY_KEY];\n }\n onChangeHandler(\n { target: { name: 'country' } },\n { countryCode, displayValue: countryDisplayValue },\n );\n }\n }, [backendCountryCode, countryList]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const handleOnBlur = (event) => {\n // Do not run validations when drop-down arrow is clicked\n if (event.relatedTarget && event.relatedTarget.className.includes('pgn__form-autosuggest__icon-button')) {\n return;\n }\n\n const { value } = event.target;\n\n const { countryCode, displayValue, error } = validateCountryField(\n value.trim(), countryList, formatMessage(messages['empty.country.field.error']),\n );\n\n onChangeHandler({ target: { name: 'country' } }, { countryCode, displayValue });\n handleErrorChange('country', error);\n };\n\n const handleSelected = (value) => {\n handleOnBlur({ target: { name: 'country', value } });\n };\n\n const handleOnFocus = (event) => {\n handleErrorChange('country', '');\n dispatch(clearRegistrationBackendError('country'));\n onFocusHandler(event);\n };\n\n const handleOnChange = (value) => {\n onChangeHandler({ target: { name: 'country' } }, { countryCode: '', displayValue: value });\n };\n\n const getCountryList = () => countryList.map((country) => (\n \n {country[COUNTRY_DISPLAY_KEY]}\n \n ));\n\n return (\n
\n handleSelected(value)}\n onFocus={(e) => handleOnFocus(e)}\n onBlur={(e) => handleOnBlur(e)}\n onChange={(value) => handleOnChange(value)}\n >\n {getCountryList()}\n \n {props.errorMessage !== '' && (\n \n {props.errorMessage}\n \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 onChangeHandler: PropTypes.func.isRequired,\n handleErrorChange: 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, { useEffect, useMemo } from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { getCountryList, getLocale, useIntl } from '@edx/frontend-platform/i18n';\nimport PropTypes from 'prop-types';\n\nimport { FormFieldRenderer } from '../../field-renderer';\nimport { FIELDS } from '../data/constants';\nimport messages from '../messages';\nimport { CountryField, 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 email,\n fieldDescriptions,\n fieldErrors,\n formFields,\n setFieldErrors,\n setFormFields,\n autoSubmitRegistrationForm,\n } = props;\n\n const countryList = useMemo(() => getCountryList(getLocale()), []);\n\n let showTermsOfServiceAndHonorCode = false;\n let showCountryField = false;\n\n const formFieldDescriptions = [];\n const honorCode = [];\n const flags = {\n showConfigurableRegistrationFields: getConfig().ENABLE_DYNAMIC_REGISTRATION_FIELDS,\n showConfigurableEdxFields: getConfig().SHOW_CONFIGURABLE_EDX_FIELDS,\n showMarketingEmailOptInCheckbox: getConfig().MARKETING_EMAILS_OPT_IN,\n };\n\n useEffect(() => {\n if (!formFields.country) {\n setFormFields(prevState => ({ ...prevState, country: { countryCode: '', displayValue: '' } }));\n }\n });\n\n /**\n * If auto submitting register form, we will check tos and honor code fields if they exist for feature parity.\n */\n useEffect(() => {\n if (autoSubmitRegistrationForm) {\n if (Object.keys(fieldDescriptions).includes(FIELDS.HONOR_CODE)) {\n setFormFields(prevState => ({\n ...prevState,\n [FIELDS.HONOR_CODE]: true,\n }));\n }\n if (Object.keys(fieldDescriptions).includes(FIELDS.TERMS_OF_SERVICE)) {\n setFormFields(prevState => ({\n ...prevState,\n [FIELDS.TERMS_OF_SERVICE]: true,\n }));\n }\n }\n }, [autoSubmitRegistrationForm]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const handleErrorChange = (fieldName, error) => {\n if (fieldName) {\n setFieldErrors(prevErrors => ({\n ...prevErrors,\n [fieldName]: error,\n }));\n }\n };\n\n const handleOnChange = (event, countryValue = null) => {\n const { name } = 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 (event.target.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()) && fieldDescriptions[name]?.error_message) {\n error = fieldDescriptions[name].error_message;\n } else if (name === 'confirm_email' && value !== email) {\n error = formatMessage(messages['email.do.not.match']);\n }\n setFieldErrors(prevErrors => ({ ...prevErrors, [name]: error }));\n };\n\n const handleOnFocus = (event) => {\n const { name } = event.target;\n setFieldErrors(prevErrors => ({ ...prevErrors, [name]: '' }));\n };\n\n if (flags.showConfigurableRegistrationFields) {\n Object.keys(fieldDescriptions).forEach(fieldName => {\n const fieldData = fieldDescriptions[fieldName];\n switch (fieldData.name) {\n case FIELDS.COUNTRY:\n showCountryField = true;\n break;\n case FIELDS.HONOR_CODE:\n if (fieldData.type === 'tos_and_honor_code') {\n showTermsOfServiceAndHonorCode = true;\n } else {\n honorCode.push(\n \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 || showCountryField) {\n formFieldDescriptions.push(\n \n \n ,\n );\n }\n\n if (flags.showMarketingEmailOptInCheckbox) {\n formFieldDescriptions.push(\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 fieldErrors: PropTypes.shape({\n country: PropTypes.string,\n }).isRequired,\n formFields: PropTypes.shape({\n country: PropTypes.shape({\n displayValue: PropTypes.string,\n countryCode: PropTypes.string,\n }),\n honor_code: PropTypes.bool,\n marketingEmailsOptIn: PropTypes.bool,\n }).isRequired,\n setFieldErrors: PropTypes.func.isRequired,\n setFormFields: PropTypes.func.isRequired,\n autoSubmitRegistrationForm: PropTypes.bool,\n};\n\nConfigurableRegistrationForm.defaultProps = {\n fieldDescriptions: {},\n autoSubmitRegistrationForm: false,\n};\n\nexport default ConfigurableRegistrationForm;\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 { useDispatch, useSelector } 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 { Form, Spinner, StatefulButton } from '@edx/paragon';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { Helmet } from 'react-helmet';\nimport Skeleton from 'react-loading-skeleton';\n\nimport ConfigurableRegistrationForm from './components/ConfigurableRegistrationForm';\nimport RegistrationFailure from './components/RegistrationFailure';\nimport ThirdPartyAuth from './components/ThirdPartyAuth';\nimport {\n backupRegistrationFormBegin,\n clearRegistrationBackendError,\n registerNewUser,\n setEmailSuggestionInStore,\n setUserPipelineDataLoaded,\n} from './data/actions';\nimport {\n FORM_SUBMISSION_ERROR,\n TPA_AUTHENTICATION_FAILURE,\n} from './data/constants';\nimport { getBackendValidations, isFormValid, prepareRegistrationPayload } from './data/utils';\nimport messages from './messages';\nimport { EmailField, NameField, UsernameField } from './RegistrationFields';\nimport {\n InstitutionLogistration, PasswordField, RedirectLogistration, ThirdPartyAuthAlert,\n} from '../common-components';\nimport { getThirdPartyAuthContext as getRegistrationDataFromBackend } from '../common-components/data/actions';\nimport EnterpriseSSO from '../common-components/EnterpriseSSO';\nimport {\n COMPLETE_STATE, PENDING_STATE, REGISTER_PAGE,\n} from '../data/constants';\nimport {\n getAllPossibleQueryParams, getTpaHint, getTpaProvider, isHostAvailableInQueryParams, setCookie,\n} from '../data/utils';\n\n/**\n * Main Registration Page component\n */\nconst RegistrationPage = (props) => {\n const { formatMessage } = useIntl();\n const dispatch = useDispatch();\n\n const registrationEmbedded = isHostAvailableInQueryParams();\n const platformName = getConfig().SITE_NAME;\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 const {\n handleInstitutionLogin,\n institutionLogin,\n } = props;\n\n const {\n registrationFormData: backedUpFormData,\n registrationError,\n registrationError: {\n errorCode: registrationErrorCode,\n } = {},\n registrationResult,\n shouldBackupState,\n userPipelineDataLoaded,\n submitState,\n validations,\n } = useSelector(state => state.register);\n\n const {\n fieldDescriptions,\n optionalFields,\n thirdPartyAuthApiStatus,\n thirdPartyAuthContext,\n thirdPartyAuthContext: {\n autoSubmitRegForm,\n errorMessage: thirdPartyAuthErrorMessage,\n finishAuthUrl,\n currentProvider,\n providers,\n secondaryProviders,\n pipelineUserDetails,\n },\n } = useSelector(state => state.commonComponents);\n\n const backendValidations = useMemo(\n () => getBackendValidations(registrationError, validations), [registrationError, validations],\n );\n const queryParams = useMemo(() => getAllPossibleQueryParams(), []);\n const tpaHint = useMemo(() => getTpaHint(), []);\n\n const [formFields, setFormFields] = useState({ ...backedUpFormData.formFields });\n const [configurableFormFields, setConfigurableFormFields] = useState({ ...backedUpFormData.configurableFormFields });\n const [errors, setErrors] = useState({ ...backedUpFormData.errors });\n const [errorCode, setErrorCode] = useState({ type: '', count: 0 });\n const [formStartTime, setFormStartTime] = useState(null);\n // temporary error state for embedded experience because we don't want to show errors on blur\n const [temporaryErrors, setTemporaryErrors] = useState({ ...backedUpFormData.errors });\n\n const { cta, host } = queryParams;\n const buttonLabel = cta\n ? formatMessage(messages['create.account.cta.button'], { label: cta })\n : formatMessage(messages['create.account.for.free.button']);\n\n /**\n * Set the userPipelineDetails data in formFields for only first time\n */\n useEffect(() => {\n if (!userPipelineDataLoaded && thirdPartyAuthApiStatus === COMPLETE_STATE) {\n if (thirdPartyAuthErrorMessage) {\n setErrorCode(prevState => ({ type: TPA_AUTHENTICATION_FAILURE, count: prevState.count + 1 }));\n }\n if (pipelineUserDetails && Object.keys(pipelineUserDetails).length !== 0) {\n const { name = '', username = '', email = '' } = pipelineUserDetails;\n setFormFields(prevState => ({\n ...prevState, name, username, email,\n }));\n dispatch(setUserPipelineDataLoaded(true));\n }\n }\n }, [ // eslint-disable-line react-hooks/exhaustive-deps\n thirdPartyAuthContext,\n userPipelineDataLoaded,\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 dispatch(getRegistrationDataFromBackend(payload));\n setFormStartTime(Date.now());\n }\n }, [dispatch, formStartTime, queryParams, tpaHint]);\n\n /**\n * Backup the registration form in redux when register page is toggled.\n */\n useEffect(() => {\n if (shouldBackupState) {\n dispatch(backupRegistrationFormBegin({\n ...backedUpFormData,\n configurableFormFields: { ...configurableFormFields },\n formFields: { ...formFields },\n errors: { ...errors },\n }));\n }\n }, [shouldBackupState, configurableFormFields, formFields, errors, dispatch, backedUpFormData]);\n\n useEffect(() => {\n if (backendValidations) {\n if (registrationEmbedded) {\n setTemporaryErrors(prevErrors => ({ ...prevErrors, ...backendValidations }));\n } else {\n setErrors(prevErrors => ({ ...prevErrors, ...backendValidations }));\n }\n }\n }, [backendValidations, registrationEmbedded]);\n\n useEffect(() => {\n if (registrationErrorCode) {\n setErrorCode(prevState => ({ type: registrationErrorCode, count: prevState.count + 1 }));\n }\n }, [registrationErrorCode]);\n\n useEffect(() => {\n if (registrationResult.success) {\n // This event is used by GTM\n sendTrackEvent('edx.bi.user.account.registered.client', {});\n\n // This is used by the \"User Retention Rate Event\" on GTM\n setCookie(getConfig().USER_RETENTION_COOKIE_NAME, true);\n }\n }, [registrationResult]);\n\n const handleOnChange = (event) => {\n const { name } = event.target;\n const value = event.target.type === 'checkbox' ? event.target.checked : event.target.value;\n if (registrationError[name]) {\n dispatch(clearRegistrationBackendError(name));\n }\n setErrors(prevErrors => ({ ...prevErrors, [name]: '' }));\n setFormFields(prevState => ({ ...prevState, [name]: value }));\n };\n\n const handleErrorChange = (fieldName, error) => {\n if (registrationEmbedded) {\n setTemporaryErrors(prevErrors => ({\n ...prevErrors,\n [fieldName]: error,\n }));\n if (error === '' && errors[fieldName] !== '') {\n setErrors(prevErrors => ({\n ...prevErrors,\n [fieldName]: error,\n }));\n }\n } else {\n setErrors(prevErrors => ({\n ...prevErrors,\n [fieldName]: error,\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 // Validating form data before submitting\n const { isValid, fieldErrors, emailSuggestion } = isFormValid(\n payload,\n registrationEmbedded ? temporaryErrors : errors,\n configurableFormFields,\n fieldDescriptions,\n formatMessage,\n );\n setErrors({ ...fieldErrors });\n dispatch(setEmailSuggestionInStore(emailSuggestion));\n\n // returning if not valid\n if (!isValid) {\n setErrorCode(prevState => ({ type: FORM_SUBMISSION_ERROR, count: prevState.count + 1 }));\n return;\n }\n\n // Preparing payload for submission\n payload = prepareRegistrationPayload(\n payload,\n configurableFormFields,\n flags.showMarketingEmailOptInCheckbox,\n totalRegistrationTime,\n queryParams);\n\n // making register call\n dispatch(registerNewUser(payload));\n };\n\n const handleSubmit = (e) => {\n e.preventDefault();\n registerUser();\n };\n\n useEffect(() => {\n if (autoSubmitRegForm && userPipelineDataLoaded) {\n registerUser();\n }\n }, [autoSubmitRegForm, 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 {autoSubmitRegForm && !errorCode.type ? (\n
\n \n
\n ) : (\n \n \n \n
\n \n \n \n {!currentProvider && (\n \n )}\n \n e.preventDefault()}\n />\n {!registrationEmbedded && (\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\nRegistrationPage.propTypes = {\n institutionLogin: PropTypes.bool,\n // Actions\n handleInstitutionLogin: PropTypes.func,\n};\n\nRegistrationPage.defaultProps = {\n handleInstitutionLogin: null,\n institutionLogin: false,\n};\n\nexport default RegistrationPage;\n","import {\n BACKUP_REGISTRATION_DATA,\n REGISTER_CLEAR_USERNAME_SUGGESTIONS,\n REGISTER_FORM_VALIDATIONS,\n REGISTER_NEW_USER,\n REGISTER_SET_COUNTRY_CODE,\n REGISTER_SET_EMAIL_SUGGESTIONS,\n REGISTER_SET_USER_PIPELINE_DATA_LOADED,\n REGISTRATION_CLEAR_BACKEND_ERROR,\n} from './actions';\nimport {\n DEFAULT_STATE,\n PENDING_STATE,\n} from '../../data/constants';\n\nexport const storeName = 'register';\n\nexport const defaultState = {\n backendCountryCode: '',\n registrationError: {},\n registrationResult: {},\n registrationFormData: {\n configurableFormFields: {\n marketingEmailsOptIn: true,\n },\n formFields: {\n name: '', email: '', username: '', password: '',\n },\n emailSuggestion: {\n suggestion: '', type: '',\n },\n errors: {\n name: '', email: '', username: '', password: '',\n },\n },\n validations: null,\n submitState: DEFAULT_STATE,\n userPipelineDataLoaded: false,\n usernameSuggestions: [],\n validationApiRateLimited: false,\n shouldBackupState: false,\n};\n\nconst reducer = (state = defaultState, action = {}) => {\n switch (action.type) {\n case BACKUP_REGISTRATION_DATA.BASE:\n return {\n ...state,\n shouldBackupState: true,\n };\n case BACKUP_REGISTRATION_DATA.BEGIN:\n return {\n ...defaultState,\n usernameSuggestions: state.usernameSuggestions,\n registrationFormData: { ...action.payload },\n userPipelineDataLoaded: state.userPipelineDataLoaded,\n };\n case REGISTER_NEW_USER.BEGIN:\n return {\n ...state,\n submitState: PENDING_STATE,\n registrationError: {},\n };\n case REGISTER_NEW_USER.SUCCESS: {\n return {\n ...state,\n registrationResult: action.payload,\n };\n }\n case REGISTER_NEW_USER.FAILURE: {\n const { usernameSuggestions } = action.payload;\n return {\n ...state,\n registrationError: { ...action.payload },\n submitState: DEFAULT_STATE,\n validations: null,\n usernameSuggestions: usernameSuggestions || state.usernameSuggestions,\n };\n }\n case REGISTRATION_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 case REGISTER_SET_EMAIL_SUGGESTIONS: {\n return {\n ...state,\n registrationFormData: {\n ...state.registrationFormData,\n emailSuggestion: action.payload.emailSuggestion,\n },\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 authenticatedUser: data.authenticated_user,\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 { authenticatedUser, redirectUrl, success } = yield call(registerRequest, action.payload.registrationInfo);\n\n yield put(registerNewUserSuccess(\n camelCaseObject(authenticatedUser),\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 { 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","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 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 { Navigate, useNavigate } from 'react-router-dom';\n\nimport BaseContainer from '../base-container';\nimport { clearThirdPartyAuthContextErrorMessage } from '../common-components/data/actions';\nimport {\n tpaProvidersSelector,\n} from '../common-components/data/selectors';\nimport messages from '../common-components/messages';\nimport { LOGIN_PAGE, REGISTER_PAGE } from '../data/constants';\nimport {\n getTpaHint, getTpaProvider, updatePathWithQueryParams,\n} from '../data/utils';\nimport { LoginPage } from '../login';\nimport { RegistrationPage } from '../register';\nimport { backupRegistrationForm } from '../register/data/actions';\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 navigate = useNavigate();\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 useEffect(() => {\n if (disablePublicAccountCreation) {\n navigate(updatePathWithQueryParams(LOGIN_PAGE));\n }\n }, [navigate, disablePublicAccountCreation]);\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 {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","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\nexport const PERSONALIZED = 'personalized';\n\nexport const LEVEL_FACET = 'level';\nexport const PRODUCT_FACET = 'product';\nexport const PRODUCT_TYPE_COURSE = 'course';\nexport const MAX_RECOMMENDATIONS = 4;\n","import { getConfig } from '@edx/frontend-platform';\nimport algoliasearch from 'algoliasearch';\n\n// initialize Algolia workers\nconst initializeSearchClient = () => algoliasearch(\n getConfig().ALGOLIA_APP_ID,\n getConfig().ALGOLIA_SEARCH_API_KEY,\n);\n\nconst getLocationRestrictionFilter = (userCountry) => {\n if (userCountry) {\n return `NOT blocked_in:\"${userCountry}\" AND (allowed_in:\"null\" OR allowed_in:\"${userCountry}\")`;\n }\n return '';\n};\n\nexport {\n initializeSearchClient,\n getLocationRestrictionFilter,\n};\n","import { PERSONALIZED } from './constants';\n\nconst { camelCaseObject } = require('@edx/frontend-platform');\n\nconst processCourseSearchResult = (searchResultCourse) => {\n const camelCasedResult = camelCaseObject(searchResultCourse);\n\n return {\n activeCourseRun: {\n key: camelCasedResult.activeRunKey,\n type: camelCasedResult.activeRunType,\n marketingUrl: camelCasedResult.marketingUrl,\n },\n activeRunKey: camelCasedResult.activeRunKey,\n allowedIn: camelCasedResult.allowedIn,\n blockedIn: camelCasedResult.blockedIn,\n cardType: 'course',\n courseType: 'course',\n image: {\n src: camelCasedResult.cardImageUrl,\n },\n owners: camelCasedResult.owners,\n title: camelCasedResult.title,\n uuid: camelCasedResult.uuid,\n objectID: `course-${camelCasedResult.uuid}`,\n productSource: {\n name: camelCasedResult.productSource,\n },\n recommendationType: PERSONALIZED,\n };\n};\n\nexport default processCourseSearchResult;\n","import { useEffect, useState } from 'react';\n\nimport algoliasearchHelper from 'algoliasearch-helper';\n\nimport {\n getLocationRestrictionFilter,\n initializeSearchClient,\n} from '../../../data/algolia';\nimport isOneTrustFunctionalCookieEnabled from '../../../data/oneTrust';\nimport processCourseSearchResult from '../algoliaResultsParser';\nimport {\n LEVEL_FACET, MAX_RECOMMENDATIONS, PRODUCT_FACET, PRODUCT_TYPE_COURSE,\n} from '../constants';\n\nconst INDEX_NAME = process.env.ALGOLIA_AUTHN_RECOMMENDATIONS_INDEX;\n\n/**\n * This hooks returns Algolia recommendations only if functional cookies are enabled. * @param userCountry\n * @param userCountry\n * @param educationLevel\n * @returns {{isLoading: boolean, recommendations: *[]}}\n */\nconst useAlgoliaRecommendations = (userCountry, educationLevel) => {\n const functionalCookiesEnabled = isOneTrustFunctionalCookieEnabled();\n const [recommendations, setRecommendations] = useState([]);\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n if (!functionalCookiesEnabled) {\n setIsLoading(false);\n return;\n }\n\n const getSearchFiltersQueryString = () => getLocationRestrictionFilter(userCountry);\n\n const algoliaSearchParams = {\n facets: [LEVEL_FACET, PRODUCT_FACET],\n filters: getSearchFiltersQueryString(),\n aroundLatLngViaIP: true,\n };\n\n const searchClient = initializeSearchClient();\n const searchHelper = algoliasearchHelper(\n searchClient,\n INDEX_NAME,\n algoliaSearchParams,\n );\n\n searchHelper.addFacetRefinement(PRODUCT_FACET, PRODUCT_TYPE_COURSE);\n if (educationLevel) {\n searchHelper.addFacetRefinement(LEVEL_FACET, educationLevel);\n }\n\n const searchIndex = () => {\n searchHelper.search();\n };\n\n searchIndex();\n\n searchHelper.on('result', ({ results }) => {\n const parsedCourses = results.hits.slice(0, MAX_RECOMMENDATIONS).map(\n (course) => processCourseSearchResult(course),\n );\n setRecommendations(parsedCourses);\n setIsLoading(false);\n });\n\n searchHelper.on('error', () => setIsLoading(false));\n }, [educationLevel, functionalCookiesEnabled, userCountry]);\n\n return {\n recommendations,\n isLoading,\n };\n};\n\nexport default useAlgoliaRecommendations;\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 'recommendation.option.trending': {\n id: 'recommendation.option.trending',\n defaultMessage: 'Trending Now',\n description: 'Title for trending products',\n },\n 'recommendation.option.popular': {\n id: 'recommendation.option.popular',\n defaultMessage: 'Most Popular',\n description: 'Title for popular products',\n },\n 'recommendation.option.recommended.for.you': {\n id: 'recommendation.option.recommended.for.you',\n defaultMessage: 'Recommended For You',\n description: 'Title for personalized products',\n },\n});\n\nexport const cardBadgesMessages = defineMessages({\n 'recommendation.product-card.pill-text.course': {\n id: 'recommendation.product-card.pill-text.course',\n description: 'Text on a product card that describes which product line this item belongs to',\n defaultMessage: 'Course',\n },\n 'recommendation.product-card.pill-text.professional-certificate': {\n id: 'recommendation.product-card.pill-text.professional-certificate',\n description: 'Text on a product card that describes which product line this item belongs to',\n defaultMessage: 'Professional Certificate',\n },\n});\n\nexport const cardFooterMessages = defineMessages({\n 'recommendation.product-card.footer-text.emeritus': {\n id: 'recommendation.product-card.pill-text.emeritus',\n description: 'Text on a product card that describes which product line this item belongs to',\n defaultMessage: 'Offered on Emeritus',\n },\n 'recommendation.product-card.footer-text.shorelight': {\n id: 'recommendation.product-card.pill-text.shorelight',\n description: 'Text on a product card that describes which product line this item belongs to',\n defaultMessage: 'Offered through Shorelight',\n },\n 'recommendation.product-card.footer-text.number-of-courses': {\n id: 'recommendation.product-card.footer-text.number-of-courses',\n description: 'Label in card footer that shows how many courses are in a program',\n defaultMessage: '{length} {label}',\n },\n 'recommendation.product-card.footer-text.subscription': {\n id: 'recommendation.product-card.footer-text.subscription',\n description: 'Label in card footer that describes that it is a subscription program',\n defaultMessage: 'Subscription',\n },\n});\n\nexport const externalLinkIconMessages = defineMessages({\n 'recommendation.product-card.launch-icon.sr-text': {\n id: 'recommendation.product-card.launch-icon.sr-text',\n description: 'Screen reader text for the launch icon on the cards',\n defaultMessage: 'Opens a link in a new tab',\n },\n});\n\nexport default messages;\n","const placeholderCourse = {\n activeCourseRun: {\n key: 'course',\n marketingUrl: '/',\n type: 'Verified and Audit',\n },\n cardType: 'course',\n image: {\n src: './',\n },\n inProspectus: true,\n objectID: 'skeleton',\n owners: [{\n key: 'skeleton',\n logoImageUrl: './',\n name: 'skeleton',\n }],\n position: 0,\n prospectusPath: './',\n queryID: 'skeleton',\n recentEnrollmentCount: 0,\n title: 'skeleton',\n topics: [{\n topic: 'skeleton',\n }],\n uuid: 'skeleton',\n};\n\nconst loadingCoursesPlaceHolders = [\n { ...placeholderCourse, uuid: '294ea4rtn2117', courseType: 'course' },\n { ...placeholderCourse, uuid: '294fga4681117', courseType: 'course' },\n { ...placeholderCourse, uuid: '294ea4278e117', courseType: 'course' },\n { ...placeholderCourse, uuid: '294eax2rtg117', courseType: 'course' },\n];\n\nexport default loadingCoursesPlaceHolders;\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\nconst courseTypeToProductTypeMap = {\n course: 'Course',\n 'verified-audit': 'Course',\n verified: 'Course',\n audit: 'Course',\n 'credit-verified-audit': 'Course',\n 'spoc-verified-audit': 'Course',\n professional: 'Professional Certificate',\n};\n\nconst programTypeToProductTypeMap = {\n 'professional certificate': 'Professional Certificate',\n certificate: 'Certificate',\n};\n\nexport const useProductType = (courseType, programType) => {\n const courseTypeLowerCase = courseType?.toLowerCase();\n if (courseTypeToProductTypeMap[courseTypeLowerCase]) {\n return courseTypeToProductTypeMap[courseTypeLowerCase];\n }\n\n const programTypeLowerCase = programType?.toLowerCase();\n if (programTypeToProductTypeMap[programTypeLowerCase]) {\n return programTypeToProductTypeMap[programTypeLowerCase];\n }\n\n return undefined;\n};\n\nexport const getVariant = (productType) => (\n ['Boot Camp', 'Executive Education', 'Course'].includes(productType) ? 'light' : 'dark'\n);\n\nexport const createCodeFriendlyProduct = (type) => type?.replace(/\\s+/g, '-').replace(/'/g, '').toLowerCase();\n\nexport const truncateText = (input, textLength) => (\n input?.length > textLength ? `${input.substring(0, textLength)}...` : input\n);\n\nexport const filterLocationRestriction = (products, countryCode) => products.filter((product) => {\n if (product.locationRestriction) {\n if (product.locationRestriction.restrictionType === 'allowlist') {\n return product.locationRestriction.countries.includes(countryCode);\n }\n if (product.locationRestriction.restrictionType === 'blocklist') {\n return !product.locationRestriction.countries.includes(countryCode);\n }\n }\n return true;\n},\n);\n\nexport default convertCourseRunKeyToCourseKey;\n","import React from 'react';\n\nimport { Badge, Card, Hyperlink } from '@edx/paragon';\nimport PropTypes from 'prop-types';\n\nimport { truncateText } from '../../data/utils';\n\nconst BaseCard = ({\n customHeaderImage,\n schoolLogo,\n title,\n uuid,\n subtitle,\n variant,\n productTypeCopy,\n footer,\n handleOnClick,\n isLoading,\n}) => (\n
\n \n \n \n \n \n
\n \n {productTypeCopy}\n \n
\n
\n {footer}\n
\n
\n \n \n
\n);\n\nBaseCard.propTypes = {\n title: PropTypes.string.isRequired,\n uuid: PropTypes.string.isRequired,\n footer: PropTypes.element.isRequired,\n productTypeCopy: PropTypes.string.isRequired,\n subtitle: PropTypes.string.isRequired,\n variant: PropTypes.string.isRequired,\n customHeaderImage: PropTypes.string.isRequired,\n schoolLogo: PropTypes.string.isRequired,\n isLoading: PropTypes.bool,\n handleOnClick: PropTypes.func.isRequired,\n};\n\nBaseCard.defaultProps = {\n isLoading: false,\n};\nexport default BaseCard;\n","import React from 'react';\n\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport PropTypes from 'prop-types';\n\nimport {\n cardFooterMessages,\n} from '../../messages';\n\nconst ProductCardFooter = ({\n factoid,\n quickFacts,\n courseLength,\n cardType,\n}) => {\n const intl = useIntl();\n const courseLengthLabel = courseLength > 1 ? 'Courses' : 'Course';\n\n if (courseLength) {\n return (\n

\n {intl.formatMessage(\n cardFooterMessages[\n 'recommendation.product-card.footer-text.number-of-courses'\n ],\n { length: courseLength, label: courseLengthLabel },\n )}\n

\n );\n }\n\n if (cardType === 'program') {\n if (quickFacts && quickFacts.length > 0) {\n const quickFactsCount = quickFacts.length;\n\n const threeFactsArrangement = [1, 3, 0];\n const twoFactsArrangement = [0, 2];\n return (\n <>\n {(quickFactsCount > 3 ? threeFactsArrangement : twoFactsArrangement)\n .map((index) => quickFacts[index])\n .filter(Boolean)\n .map((fact, idx) => (\n

\n {idx > 0 && }\n {fact && fact.text}\n

\n ))}\n \n );\n }\n }\n\n if (factoid) {\n return

{factoid}

;\n }\n\n return null;\n};\n\nProductCardFooter.propTypes = {\n cardType: PropTypes.string,\n factoid: PropTypes.string,\n quickFacts: PropTypes.arrayOf(PropTypes.shape({})),\n courseLength: PropTypes.number,\n};\n\nProductCardFooter.defaultProps = {\n cardType: '',\n factoid: '',\n quickFacts: [],\n courseLength: undefined,\n};\n\nexport default ProductCardFooter;\n","import { sendTrackEvent } from '@edx/frontend-platform/analytics';\n\nexport const LINK_TIMEOUT = 300;\n\nexport const eventNames = {\n recommendedProductClicked: 'edx.bi.user.recommended.product.clicked',\n recommendationsViewed: 'edx.bi.user.recommendations.viewed',\n skipButtonClicked: 'edx.bi.user.recommendations.skip.btn.clicked',\n};\n\nconst generateProductKey = (product) => (\n product.cardType === 'program' ? `${product.title} [${product.uuid}]` : product.activeRunKey\n);\n\nexport const getProductMapping = (recommendedProducts) => recommendedProducts.map((product) => ({\n product_key: generateProductKey(product),\n product_line: product.cardType,\n product_source: product.productSource.name,\n}));\n\nexport const trackRecommendationClick = (product, position, userId) => {\n sendTrackEvent(eventNames.recommendedProductClicked, {\n page: 'authn_recommendations',\n position,\n recommendation_type: product.recommendationType,\n product_key: generateProductKey(product),\n product_line: product.cardType,\n product_source: product.productSource.name,\n user_id: userId,\n });\n\n const productUrl = product.url || product?.activeCourseRun?.marketingUrl;\n return setTimeout(() => { global.open(productUrl, '_blank'); }, LINK_TIMEOUT);\n};\n\nexport const trackRecommendationsViewed = (recommendedProducts, type, userId) => {\n const viewedProductsList = getProductMapping(recommendedProducts);\n\n if (viewedProductsList && viewedProductsList.length) {\n sendTrackEvent(\n eventNames.recommendationsViewed, {\n page: 'authn_recommendations',\n recommendation_type: type,\n products: viewedProductsList,\n user_id: userId,\n },\n );\n }\n};\n\nexport const trackSkipButtonClicked = (userId) => {\n sendTrackEvent(\n eventNames.skipButtonClicked, {\n page: 'authn_recommendations',\n user_id: userId,\n },\n );\n};\n\nexport default {\n trackRecommendationClick,\n trackRecommendationsViewed,\n trackSkipButtonClicked,\n};\n","import React from 'react';\n\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport PropTypes from 'prop-types';\n\nimport BaseCard from './BaseCard';\nimport Footer from './Footer';\nimport { createCodeFriendlyProduct, getVariant, useProductType } from '../data/utils';\nimport {\n cardBadgesMessages,\n} from '../messages';\nimport { trackRecommendationClick } from '../track';\n\nconst ProductCard = ({\n product,\n userId,\n position,\n isLoading,\n}) => {\n const { formatMessage } = useIntl();\n\n const productType = useProductType(product?.courseType, product?.type);\n\n const variant = getVariant(productType);\n\n const headerImage = product?.cardImageUrl || product?.image?.src;\n\n const schoolName = product?.organizationShortCodeOverride\n || product?.owners?.[0]?.name\n || product?.authoringOrganizations?.[0]?.name\n || product?.partner;\n const schoolLogo = product?.organizationLogoOverrideUrl\n || product?.logoFilename\n || product?.authoringOrganizations?.[0]?.logoImageUrl\n || product?.owners?.[0]?.logoImageUrl;\n\n const { owners } = product;\n const multipleSchoolNames = [];\n const isMultipleOwner = owners?.length > 1;\n\n if ((owners?.length > 1)) {\n owners.forEach((owner, index, arr) => {\n let school;\n if (index === arr.length - 1) {\n school = (\n {owner.name}\n );\n } else {\n school = (\n <>\n {owner.name}\n
\n \n );\n }\n\n multipleSchoolNames.push(school);\n });\n }\n\n const productTypeCopy = formatMessage(\n cardBadgesMessages[\n `recommendation.product-card.pill-text.${createCodeFriendlyProduct(productType)}`\n ],\n );\n const handleCardClick = () => {\n trackRecommendationClick(\n product,\n position + 1,\n userId,\n );\n };\n\n return (\n \n )}\n handleOnClick={handleCardClick}\n isSubscriptionView={!!product.subscriptionEligible}\n />\n );\n};\n\nProductCard.propTypes = {\n product: PropTypes.shape([\n PropTypes.shape({}),\n ]).isRequired,\n userId: PropTypes.number.isRequired,\n position: PropTypes.number.isRequired,\n isLoading: PropTypes.bool,\n};\n\nProductCard.defaultProps = {\n isLoading: false,\n};\nexport default ProductCard;\n","import React from 'react';\n\nimport PropTypes from 'prop-types';\n\nimport ProductCard from './ProductCard';\n\nconst RecommendationsList = (props) => {\n const { recommendations, userId, isLoading } = props;\n\n return (\n
\n {\n recommendations.map((recommendation, idx) => (\n \n ))\n }\n
\n );\n};\n\nRecommendationsList.propTypes = {\n recommendations: PropTypes.arrayOf(PropTypes.shape({\n uuid: PropTypes.string,\n })),\n userId: PropTypes.number,\n isLoading: PropTypes.bool,\n};\n\nRecommendationsList.defaultProps = {\n recommendations: [],\n userId: null,\n isLoading: false,\n};\n\nexport default RecommendationsList;\n","import React from 'react';\n\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { Skeleton } from '@edx/paragon';\nimport PropTypes from 'prop-types';\n\nimport loadingCoursesPlaceholders from '../data/loadingCoursesPlaceholders';\nimport messages from '../messages';\nimport RecommendationsList from '../RecommendationsList';\n\nconst RecommendationsLargeLayout = (props) => {\n const {\n userId,\n isLoading,\n personalizedRecommendations,\n } = props;\n const { formatMessage } = useIntl();\n\n if (isLoading) {\n return (\n <>\n \n \n \n );\n }\n\n if (personalizedRecommendations.length) {\n return (\n \n

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

\n\n \n
\n );\n }\n\n return null;\n};\n\nRecommendationsLargeLayout.propTypes = {\n userId: PropTypes.number.isRequired,\n isLoading: PropTypes.bool,\n personalizedRecommendations: PropTypes.arrayOf(PropTypes.shape({})),\n};\n\nRecommendationsLargeLayout.defaultProps = {\n isLoading: true,\n personalizedRecommendations: [],\n};\n\nexport default RecommendationsLargeLayout;\n","import React from 'react';\n\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { Skeleton } from '@edx/paragon';\nimport PropTypes from 'prop-types';\n\nimport loadingCoursesPlaceholders from '../data/loadingCoursesPlaceholders';\nimport messages from '../messages';\nimport RecommendationsList from '../RecommendationsList';\n\nconst RecommendationsSmallLayout = (props) => {\n const {\n userId,\n isLoading,\n personalizedRecommendations,\n } = props;\n const { formatMessage } = useIntl();\n\n if (isLoading) {\n return (\n <>\n \n \n \n );\n }\n\n if (personalizedRecommendations.length) {\n return (\n \n

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

\n\n \n
\n );\n }\n\n return null;\n};\n\nRecommendationsSmallLayout.propTypes = {\n userId: PropTypes.number.isRequired,\n isLoading: PropTypes.bool,\n personalizedRecommendations: PropTypes.arrayOf(PropTypes.shape({})),\n};\n\nRecommendationsSmallLayout.defaultProps = {\n isLoading: true,\n personalizedRecommendations: [],\n};\n\nexport default RecommendationsSmallLayout;\n","import React, { useEffect } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport {\n breakpoints,\n Container,\n Hyperlink,\n Image, Skeleton,\n StatefulButton,\n useMediaQuery,\n} from '@edx/paragon';\nimport { Helmet } from 'react-helmet';\nimport { useLocation } from 'react-router-dom';\n\nimport { EDUCATION_LEVEL_MAPPING, PERSONALIZED } from './data/constants';\nimport useAlgoliaRecommendations from './data/hooks/useAlgoliaRecommendations';\nimport messages from './messages';\nimport RecommendationsLargeLayout from './RecommendationsPageLayouts/LargeLayout';\nimport RecommendationsSmallLayout from './RecommendationsPageLayouts/SmallLayout';\nimport { LINK_TIMEOUT, trackRecommendationsViewed, trackSkipButtonClicked } from './track';\nimport { DEFAULT_REDIRECT_URL } from '../data/constants';\n\nconst RecommendationsPage = () => {\n const { formatMessage } = useIntl();\n const isExtraSmall = useMediaQuery({ maxWidth: breakpoints.extraSmall.maxWidth - 1 });\n const location = useLocation();\n\n const registrationResponse = location.state?.registrationResult;\n const DASHBOARD_URL = getConfig().LMS_BASE_URL.concat(DEFAULT_REDIRECT_URL);\n const educationLevel = EDUCATION_LEVEL_MAPPING[location.state?.educationLevel];\n const userId = location.state?.userId;\n\n const userCountry = useSelector((state) => state.register.backendCountryCode);\n const {\n recommendations: algoliaRecommendations,\n isLoading,\n } = useAlgoliaRecommendations(userCountry, educationLevel);\n\n useEffect(() => {\n if (!isLoading && algoliaRecommendations.length > 0) {\n trackRecommendationsViewed(algoliaRecommendations, PERSONALIZED, userId);\n }\n }, [isLoading, algoliaRecommendations, userId]);\n\n const handleSkipRecommendationPage = () => {\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 const handleSkip = (e) => {\n e.preventDefault();\n trackSkipButtonClicked(userId);\n setTimeout(() => { handleSkipRecommendationPage(); }, LINK_TIMEOUT);\n };\n\n if (!registrationResponse) {\n window.location.href = DASHBOARD_URL;\n return null;\n }\n\n if (!isLoading && !algoliaRecommendations.length) {\n handleSkipRecommendationPage();\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
\n \n {isExtraSmall ? (\n \n ) : (\n \n )}\n
\n {isLoading && (\n \n )}\n {!isLoading && algoliaRecommendations.length && (\n \n )}\n
\n \n
\n
\n \n );\n};\n\nRecommendationsPage.propTypes = {};\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 { Navigate, Route, Routes } from 'react-router-dom';\n\nimport {\n EmbeddedRegistrationRoute, 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_EMBEDDED_PAGE,\n REGISTER_PAGE,\n RESET_PAGE,\n} from './data/constants';\nimport { updatePathWithQueryParams } from './data/utils';\nimport { ForgotPasswordPage } from './forgot-password';\nimport Logistration from './logistration/Logistration';\nimport { ProgressiveProfiling } from './progressive-profiling';\nimport { RecommendationsPage } from './recommendations';\nimport { RegistrationPage } from './register';\nimport { ResetPasswordPage } from './reset-password';\n\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';\n\nimport configuration from './config';\nimport messages 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});\n"],"names":["SESSION_COOKIE_DOMAIN","process","USER_RETENTION_COOKIE_NAME","DISABLE_ENTERPRISE_LOGIN","ENABLE_DYNAMIC_REGISTRATION_FIELDS","ENABLE_PROGRESSIVE_PROFILING_ON_AUTHN","ENABLE_POST_REGISTRATION_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","POST_REGISTRATION_REDIRECT_URL","PRIVACY_POLICY","SEARCH_CATALOG_URL","TOS_AND_HONOR_CODE","TOS_LINK","BANNER_IMAGE_LARGE","BANNER_IMAGE_MEDIUM","BANNER_IMAGE_SMALL","BANNER_IMAGE_EXTRA_SMALL","GENERAL_RECOMMENDATIONS","INFO_EMAIL","ZENDESK_KEY","ZENDESK_LOGO_URL","ALGOLIA_APP_ID","ALGOLIA_SEARCH_API_KEY","appMessages","ar","de","fr","hi","it","pt","ru","uk","paragonMessages","LOGIN_PAGE","REGISTER_PAGE","REGISTER_EMBEDDED_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","FAILURE_STATE","LETTER_REGEX","NUMBER_REGEX","VALID_EMAIL_REGEX","AUTH_PARAMS","getTpaProvider","tpaHintProvider","primaryProviders","secondaryProviders","tpaProvider","skipHintedLogin","forEach","provider","id","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","isHostAvailableInQueryParams","AsyncActionType","constructor","topic","name","this","BASE","BEGIN","SUCCESS","FAILURE","RESET","FORBIDDEN","setCookie","cookieName","cookieValue","cookieExpiry","cookies","Cookies","domain","getConfig","expires","set","RedirectLogistration","props","authenticatedUser","finishAuthUrl","redirectUrl","redirectToProgressiveProfilingPage","success","optionalFields","redirectToRecommendationsPage","educationLevel","userId","registrationEmbedded","host","finalRedirectUrl","includes","LMS_BASE_URL","parent","postMessage","action","registrationResult","_jsx","Navigate","to","state","href","defaultProps","propTypes","PropTypes","EmbeddedRegistrationRoute","children","isRequired","UnAuthOnlyRoute","authUser","setAuthUser","useState","isReady","setIsReady","useEffect","fetchAuthenticatedUser","forceRefresh","getAuthenticatedUser","then","username","global","concat","NotFoundPage","className","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","iconClass","FontAwesomeIcon","icon","Icon","Login","messages","providerName","_Fragment","skipRegistrationForm","ThirdPartyAuthAlert","currentProvider","platformName","SITE_NAME","message","Alert","Heading","RenderInstitutionButton","onSubmitHandler","buttonTitle","Button","variant","Institution","InstitutionLogistration","lmsBaseUrl","headingTitle","Hyperlink","destination","LogistrationDefaultProps","LogistrationProps","_objectSpread","THIRD_PARTY_AUTH_CONTEXT","THIRD_PARTY_AUTH_CONTEXT_CLEAR_ERROR_MSG","getThirdPartyAuthContext","payload","getThirdPartyAuthContextBegin","getThirdPartyAuthContextSuccess","fieldDescriptions","thirdPartyAuthContext","getThirdPartyAuthContextFailure","defaultState","fields","extended_profile","thirdPartyAuthApiStatus","autoSubmitRegForm","countryCode","providers","pipelineUserDetails","errorMessage","welcomePageRedirectUrl","async","requestConfig","headers","isPublic","data","getAuthenticatedHttpClient","get","catch","registrationFields","contextData","BACKUP_REGISTRATION_DATA","REGISTER_FORM_VALIDATIONS","REGISTER_NEW_USER","REGISTER_CLEAR_USERNAME_SUGGESTIONS","REGISTRATION_CLEAR_BACKEND_ERROR","REGISTER_SET_COUNTRY_CODE","REGISTER_SET_EMAIL_SUGGESTIONS","REGISTER_SET_USER_PIPELINE_DATA_LOADED","fetchRealtimeValidations","formPayload","fetchRealtimeValidationsBegin","fetchRealtimeValidationsSuccess","validations","fetchRealtimeValidationsFailure","setEmailSuggestionInStore","emailSuggestion","registerNewUserBegin","registerNewUserSuccess","registerNewUserFailure","error","clearUsernameSuggestions","clearRegistrationBackendError","fieldName","setCountryFromThirdPartyAuthContext","fetchThirdPartyAuthContext","put","call","logError","saga","takeEvery","storeName","commonComponentsSelector","thirdPartyAuthContextSelector","createSelector","commonComponents","tpaProvidersSelector","FormGroup","hasFocus","setHasFocus","Form","Group","controlId","isInvalid","Control","as","readOnly","autoComplete","spellCheck","onFocus","handleFocus","onBlur","handleBlur","handleClick","onChange","handleChange","controlClassName","borderClass","trailingElement","floatingLabel","TransitionReplace","helpText","Feedback","toString","hasIcon","COMMON_EMAIL_PROVIDERS","DEFAULT_SERVICE_PROVIDER_DOMAINS","DEFAULT_TOP_LEVEL_DOMAINS","emailRegex","RegExp","getLevenshteinSuggestion","word","knownWords","similarityThreshold","minEditDistance","mostSimilar","i","editDistance","distance","toLowerCase","getSuggestionForInvalidEmail","defaultDomains","suggestion","validateEmail","confirmEmailValue","fieldError","confirmEmailError","domainName","split","test","response","validateEmailAddress","validation","hasError","hasMultipleSubdomains","match","serviceLevelDomain","topLevelDomain","tldSuggestion","serviceSuggestion","urlRegex","validateName","trim","usernameRegex","validateUsername","validatePasswordField","PasswordField","dispatch","useDispatch","validationApiRateLimited","useSelector","register","isPasswordHidden","setHiddenTrue","setHiddenFalse","useToggle","showTooltip","setShowTooltip","target","relatedTarget","passwordValue","showRequirements","handleErrorChange","password","setTimeout","HideButton","IconButton","VisibilityOff","iconAs","size","ShowButton","Visibility","placement","innerWidth","tooltip","Tooltip","Check","Remove","OverlayTrigger","overlay","show","ZendeskHelp","setting","webWidget","contactOptions","enabled","chat","suppress","departments","contactForm","ticketForms","subject","prefill","attachments","helpCenter","originalArticleButton","answerBot","contactOnlyAfterQuery","title","avatar","pathname","Zendesk","defer","zendeskKey","FORGOT_PASSWORD","FORGOT_PASSWORD_PERSIST_FORM_DATA","forgotPasswordBegin","forgotPasswordSuccess","email","forgotPasswordForbidden","forgotPasswordServerError","forgotPasswordResultSelector","forgotPassword","TOKEN_STATE","PASSWORD_RESET_ERROR","PASSWORD_VALIDATION_ERROR","PASSWORD_RESET","INVALID_TOKEN","FORBIDDEN_REQUEST","ForgotPasswordAlert","emailError","heading","status","values","supportLink","Link","CheckCircle","Error","LargeLayout","MARKETING_SITE_BASE_URL","Image","LOGO_WHITE_URL","classNames","siteName","preserveAspectRatio","transform","x","y","height","width","MediumLayout","SmallLayout","backgroundImage","ExtraSmallLayout","LOGO_URL","BaseContainer","showWelcomeBanner","baseContainerVersion","setBaseContainerVersion","experiments","rebrandExperiment","variation","handleLoaded","MediaQuery","maxWidth","breakpoints","extraSmall","AuthSmallLayout","ImageExtraSmallLayout","minWidth","small","ImageSmallLayout","medium","large","AuthMediumLayout","ImageMediumLayout","extraLarge","AuthLargeLayout","ImageLargeLayout","DefaultSmallLayout","DefaultMediumLayout","DefaultLargeLayout","ForgotPasswordPage","submitState","emailValidationError","setEmail","bannerEmail","setBannerEmail","formErrors","setFormErrors","validationError","setValidationError","navigate","useNavigate","sendPageEvent","sendTrackEvent","category","getValidationMessage","tabTitle","ChevronLeft","Helmet","Tabs","activeKey","onSelect","Tab","eventKey","setForgotPasswordFormData","StatefulButton","labels","default","pending","behavior","onMouseDown","showLaunchIcon","isInline","connect","forgotPasswordFormData","RESET_PASSWORD","VALIDATE_TOKEN","PASSWORD_RESET_FAILURE","passwordResetFailure","errorCode","validateTokenBegin","validateTokenSuccess","tokenStatus","token","resetPasswordBegin","resetPasswordSuccess","resetPasswordFailure","errorMsg","post","formurlencoded","handleForgotPassword","logInfo","INVALID_FORM","TPA_AUTHENTICATION_FAILURE","ACCOUNT_ACTIVATION_MESSAGE","AccountActivationMessage","messageType","activationOrVerification","activationMessage","iconMapping","LOGIN_REQUEST","LOGIN_PERSIST_FORM_DATA","LOGIN_REMOVE_PASSWORD_RESET_BANNER","loginRequestBegin","loginRequestSuccess","loginRequestFailure","loginError","loginSelector","loginRequestSelector","login","loginResult","loginErrorSelector","loginFormDataSelector","loginFormData","ChangePasswordPrompt","isMobileView","breakpoint","isMobileWindow","setIsMobileWindow","checkForMobile","matchMedia","matches","addEventListener","removeEventListener","useMobileResponsive","redirectToResetPasswordPage","setRedirectToResetPasswordPage","handlers","handleToggleOff","isOpen","open","close","ModalDialog","onClose","hasCloseButton","Header","Title","Body","Footer","ActionRow","CloseButton","LoginFailureMessage","context","authService","getAuthService","errorList","resetLink","lineBreak","tpaLink","allowedDomain","remainingAttempts","failureCount","getCsrfTokenService","clearCsrfTokenCache","platform_name","EnterpriseSSO","disablePublicAccountCreation","ALLOW_PUBLIC_ACCOUNT_CREATION","ResetPasswordSuccess","LoginPage","React","super","_defineProperty","resetPassword","loginRemovePasswordResetBanner","setState","isSubmitted","emailOrUsername","passwordValidationError","validatePassword","setLoginFormData","errors","email_or_username","loginRequest","componentDidMount","loginRequestReset","shouldComponentUpdate","nextProps","nextState","componentWillUnmount","getEnterPriseLoginURL","intl","renderThirdPartyAuth","isInstitutionAuthActive","isSocialAuthActive","isEnterpriseLoginDisabled","Skeleton","count","handleInstitutionLogin","renderForm","activationMsgType","account_activation_status","institutionLogin","tpaAuthenticationError","handleOnFocus","handleOnBlur","handleForgotPasswordLinkClickEvent","render","creds","formData","injectIntl","resetPasswordResultSelector","validateToken","getHttpClient","URL","is_account_recovery","searchParams","append","ResetPasswordFailure","ResetPasswordPage","newPasswordError","newPassword","setNewPassword","confirmPassword","setConfirmPassword","setErrorCode","useParams","validateInput","reset_password_page","validation_decisions","err","validatePasswordFromBackend","some","event","handleConfirmPasswordChange","Spinner","animation","isPasswordValid","isPasswordConfirmed","new_password1","new_password2","handleValidateToken","isValid","is_valid","handleResetPassword","resetStatus","reset_status","resetErrors","err_msg","token_invalid","redirect_url","handleLoginRequest","statusCodes","camelCaseObject","SAVE_USER_PROFILE","saveUserProfileBegin","saveUserProfileSuccess","saveUserProfileFailure","welcomePageContextSelector","nextUrl","ProgressiveProfilingPageModal","isOneTrustFunctionalCookieEnabled","OnetrustActiveGroups","FormFieldRenderer","formField","fieldData","onChangeHandler","Boolean","ExpandMore","label","option","Checkbox","checked","ProgressiveProfiling","getFieldDataFromBackend","showError","welcomePageContext","welcomePageContextApiStatus","useLocation","functionalCookiesConsent","enablePostRegistrationRecommendations","setRegistrationResult","formFieldData","setFormFieldData","extendedProfile","setValues","showModal","setShowModal","showRecommendationsPage","setShowRecommendationsPage","is_welcome_page","configureAuth","AxiosJwtAuthService","loggingService","getLoggingService","config","registrationResponse","keys","identifyAuthenticatedUser","page","DASHBOARD_URL","assign","formFields","shouldRedirect","level_of_education","history","replaceState","push","fieldValue","saveUserProfile","snakeCaseObject","isGenderSelected","gender","isYearOfBirthSelected","year_of_birth","isLevelOfEducationSelected","welcomePageStore","welcomePage","patchAccount","commitValues","patch","saveUserProfileInformation","FIELDS","NameField","shouldFetchUsernameSuggestions","EmailField","registrationFormData","backedUpFormData","setEmailSuggestion","handleSuggestionClick","maxLength","Close","handleSuggestionClosed","tabIndex","UsernameField","suggestedUsernameDiv","iconButton","usernameSuggestions","handleUsernameSuggestionClose","suggestedUsernames","startsWith","COUNTRY_CODE_KEY","COUNTRY_DISPLAY_KEY","CountryField","countryList","selectedCountry","onFocusHandler","backendCountryCode","countryDisplayValue","countryVal","find","country","displayValue","validateCountryField","normalizedValue","FormAutosuggest","onSelected","handleSelected","handleOnChange","FormAutosuggestOption","FormControlFeedback","code","HonorCode","fieldType","tosAndHonorCode","privacyPolicy","TermsOfService","termsOfService","ConfigurableRegistrationForm","fieldErrors","setFieldErrors","setFormFields","autoSubmitRegistrationForm","useMemo","getCountryList","getLocale","showTermsOfServiceAndHonorCode","showCountryField","formFieldDescriptions","honorCode","flags","prevState","countryValue","prevErrors","error_message","onBlurHandler","marketingEmailsOptIn","honor_code","RegistrationFailureMessage","ThirdPartyAuth","RegistrationPage","showConfigurableEdxFields","showConfigurableRegistrationFields","showMarketingEmailOptInCheckbox","registrationError","registrationErrorCode","shouldBackupState","userPipelineDataLoaded","thirdPartyAuthErrorMessage","backendValidations","getBackendValidations","validationDecisions","filter","field","userMessage","configurableFormFields","setConfigurableFormFields","setErrors","formStartTime","setFormStartTime","temporaryErrors","setTemporaryErrors","cta","buttonLabel","is_register_page","getRegistrationDataFromBackend","Date","now","registerUser","totalRegistrationTime","social_auth_provider","isFormValid","confirm_email","registrationInfo","prepareRegistrationPayload","initPayload","RegistrationFailure","autoSubmitRegisterForm","registrationErrorTemp","_action$payload$valid","validationWithoutUsernameSuggestions","_objectWithoutProperties","_excluded","registerRequest","registrationInformation","authenticated_user","getFieldsValidations","fieldValidations","handleNewUserRegistration","rootSaga","all","loginSaga","registrationSaga","commonComponentsSaga","forgotPasswordSaga","resetPasswordSaga","authnProgressiveProfilingSaga","sagaMiddleware","createSagaMiddleware","configureStore","initialState","store","createStore","combineReducers","loginStoreName","loginReducer","registerReducer","commonComponentsStoreName","commonComponentsReducer","forgotPasswordStoreName","forgotPasswordReducer","resetPasswordStoreName","resetPasswordReducer","authnProgressiveProfilingReducers","ENVIRONMENT","loggerMiddleware","createLogger","collapsed","composeWithDevTools","applyMiddleware","thunkMiddleware","compose","composeMiddleware","run","Logistration","selectedPage","tpaProviders","setInstitutionLogin","setKey","getCsrfToken","eventName","defaultActiveKey","isValidTpaHint","tabKey","clearThirdPartyAuthContextErrorMessage","backupRegistrationForm","EDUCATION_LEVEL_MAPPING","p","m","b","a","hs","jhs","PERSONALIZED","LEVEL_FACET","PRODUCT_FACET","require","INDEX_NAME","ALGOLIA_AUTHN_RECOMMENDATIONS_INDEX","useAlgoliaRecommendations","userCountry","functionalCookiesEnabled","recommendations","setRecommendations","isLoading","setIsLoading","algoliaSearchParams","facets","filters","getLocationRestrictionFilter","aroundLatLngViaIP","searchClient","algoliasearch","searchHelper","algoliasearchHelper","addFacetRefinement","on","results","parsedCourses","hits","slice","course","searchResultCourse","camelCasedResult","activeCourseRun","activeRunKey","activeRunType","marketingUrl","allowedIn","blockedIn","cardType","courseType","image","cardImageUrl","owners","uuid","objectID","productSource","recommendationType","processCourseSearchResult","cardBadgesMessages","cardFooterMessages","placeholderCourse","inProspectus","logoImageUrl","position","prospectusPath","queryID","recentEnrollmentCount","topics","courseTypeToProductTypeMap","verified","audit","professional","programTypeToProductTypeMap","certificate","truncateText","input","textLength","BaseCard","customHeaderImage","schoolLogo","subtitle","productTypeCopy","footer","handleOnClick","Card","ImageCap","srcAlt","logoSrc","logoAlt","imageLoadingType","Section","Badge","ProductCardFooter","factoid","quickFacts","courseLength","courseLengthLabel","quickFactsCount","threeFactsArrangement","twoFactsArrangement","fact","idx","text","generateProductKey","product","ProductCard","productType","useProductType","programType","courseTypeLowerCase","programTypeLowerCase","getVariant","headerImage","schoolName","organizationShortCodeOverride","authoringOrganizations","partner","organizationLogoOverrideUrl","logoFilename","multipleSchoolNames","isMultipleOwner","owner","arr","school","degree","externalUrl","additionalMetadata","courses","isSubscriptionView","subscriptionEligible","is2UDegreeProgram","handleCardClick","trackRecommendationClick","recommendation_type","product_key","product_line","product_source","user_id","productUrl","RecommendationsList","recommendation","RecommendationsLargeLayout","personalizedRecommendations","loadingCoursesPlaceholders","RecommendationsSmallLayout","RecommendationsPage","isExtraSmall","useMediaQuery","algoliaRecommendations","trackRecommendationsViewed","recommendedProducts","viewedProductsList","getProductMapping","products","handleSkipRecommendationPage","Container","trackSkipButtonClicked","library","add","faApple","faFacebook","faGoogle","faMicrosoft","MainApp","AppProvider","rel","FAVICON_URL","Routes","Route","element","subscribe","APP_READY","ReactDOM","getElementById","APP_INIT_ERROR","ErrorPage","initialize","mergeConfig","configuration"],"sourceRoot":""}