{"version":3,"file":"app.53a80ab78ce842eabaff.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) => {\n let tpaProvider = null;\n let skipHintedLogin = false;\n [ ].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 // const isThirdPartyAuthActive = isSocialAuthActive || (isEnterpriseLoginDisabled && isInstitutionAuthActive);\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 && isThirdPartyAuthActive ? (\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 = true;\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 const isThirdPartyAuthActive = isSocialAuthActive || (isEnterpriseLoginDisabled && isInstitutionAuthActive);\n\n return (\n <>\n {((isEnterpriseLoginDisabled && isInstitutionAuthActive) || isSocialAuthActive) && (\n
\n {formatMessage(messages['registration.other.options.heading'])}\n
\n )}\n\n {thirdPartyAuthApiStatus === PENDING_STATE && isThirdPartyAuthActive ? (\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 const [updated, setUpdated] = useState(false);\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\n useEffect(() => {\n if (currentProvider && !updated) {\n setUpdated(true);\n setTimeout(() => {\n handleSubmit();\n }, 500);\n }\n }, [currentProvider, updated]);\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 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 }, [thirdPartyAuthContext, userPipelineDataLoaded]);\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\n const registerUser = () => {\n const totalRegistrationTime = (Date.now() - formStartTime) / 1000;\n let payload = { ...formFields };\n \n if (currentProvider) {\n delete payload.password;\n payload.social_auth_provider = currentProvider;\n }\n \n const { isValid, fieldErrors, emailSuggestion } = isFormValid(\n payload,\n registrationEmbedded ? temporaryErrors : errors,\n configurableFormFields,\n fieldDescriptions || {},\n formatMessage,\n );\n \n setErrors({ ...fieldErrors });\n dispatch(setEmailSuggestionInStore(emailSuggestion));\n \n if (!isValid) {\n setErrorCode(prevState => ({ type: FORM_SUBMISSION_ERROR, count: prevState.count + 1 }));\n return;\n }\n \n payload = prepareRegistrationPayload(\n payload,\n configurableFormFields,\n flags.showMarketingEmailOptInCheckbox,\n totalRegistrationTime,\n queryParams\n );\n \n dispatch(registerNewUser(payload));\n };\n \n const handleSubmit = (e) => {\n if (e) e.preventDefault();\n registerUser();\n };\n \n useEffect(() => {\n if (autoSubmitRegForm && userPipelineDataLoaded) {\n registerUser();\n }\n }, [autoSubmitRegForm, userPipelineDataLoaded]);\n \n\n \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","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","secondaryProviders","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","setUserPipelineDataLoaded","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","renderForm","activationMsgType","account_activation_status","institutionLogin","tpaAuthenticationError","handleOnFocus","handleOnBlur","handleForgotPasswordLinkClickEvent","render","Skeleton","handleInstitutionLogin","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","isInstitutionAuthActive","isSocialAuthActive","isEnterpriseLoginDisabled","isThirdPartyAuthActive","count","RegistrationPage","showConfigurableEdxFields","showConfigurableRegistrationFields","showMarketingEmailOptInCheckbox","registrationError","registrationErrorCode","shouldBackupState","userPipelineDataLoaded","thirdPartyAuthErrorMessage","backendValidations","getBackendValidations","validationDecisions","filter","field","userMessage","configurableFormFields","setConfigurableFormFields","setErrors","formStartTime","setFormStartTime","temporaryErrors","setTemporaryErrors","updated","setUpdated","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":""}