{"version":3,"file":"app.d78094ccdc21e981b40a.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/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/./images/bg-selectArtboard4k.jpg","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/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/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/common-components/ThirdPartyAuth.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/data/optimizelyExperiment/helper.js","webpack://@edx/frontend-app-authn/./src/register/RegistrationFields/NameField/validator.js","webpack://@edx/frontend-app-authn/./src/register/RegistrationFields/NameField/NameField.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/EmailField/EmailField.jsx","webpack://@edx/frontend-app-authn/./src/register/RegistrationFields/UsernameField/validator.js","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/data/optimizelyExperiment/track.js","webpack://@edx/frontend-app-authn/./src/register/RegistrationPage.jsx","webpack://@edx/frontend-app-authn/./src/register/data/optimizelyExperiment/useSimplifyRegistrationExperimentVariation.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 SHOW_REGISTRATION_LINKS: process.env.SHOW_REGISTRATION_LINKS !== 'false',\n ENABLE_IMAGE_LAYOUT: process.env.ENABLE_IMAGE_LAYOUT || 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 // Simplify Registration Experiment\n SIMPLIFY_REGISTRATION_EXPERIMENT_ID: process.env.SIMPLIFY_REGISTRATION_EXPERIMENT_ID || '',\n};\n\nexport default configuration;\n","import { messages as paragonMessages } from '@openedx/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 thMessages from './messages/th.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 th: thMessages,\n uk: ukMessages,\n 'zh-cn': zhCNMessages,\n};\n\nexport default [\n paragonMessages,\n appMessages,\n];\n","// URL Paths\nexport const LOGIN_PAGE = '/login';\nexport const REGISTER_PAGE = '/register';\nexport const REGISTER_EMBEDDED_PAGE = '/register-embedded';\nexport const RESET_PAGE = '/reset';\nexport const AUTHN_PROGRESSIVE_PROFILING = '/welcome';\nexport const DEFAULT_REDIRECT_URL = '/dashboard';\nexport const RECOMMENDATIONS = '/recommendations';\nexport const PASSWORD_RESET_CONFIRM = '/password_reset_confirm/:token/';\nexport const PAGE_NOT_FOUND = '/notfound';\nexport const ENTERPRISE_LOGIN_URL = '/enterprise/login';\n\n// Constants\nexport const SUPPORTED_ICON_CLASSES = ['apple', 'facebook', 'google', 'microsoft'];\n\n// Error Codes\nexport const FORM_SUBMISSION_ERROR = 'form-submission-error';\nexport const INTERNAL_SERVER_ERROR = 'internal-server-error';\nexport const API_RATELIMIT_ERROR = 'api-ratelimit-error';\n\n// Common States\nexport const DEFAULT_STATE = 'default';\nexport const PENDING_STATE = 'pending';\nexport const COMPLETE_STATE = 'complete';\nexport const FAILURE_STATE = 'failure';\nexport const FORBIDDEN_STATE = 'forbidden';\nexport const EMBEDDED = 'embedded';\n\nexport const LETTER_REGEX = /[a-zA-Z]/;\nexport const NUMBER_REGEX = /\\d/;\nexport const VALID_EMAIL_REGEX = '(^[-!#$%&\\'*+/=?^_`{}|~0-9A-Z]+(\\\\.[-!#$%&\\'*+/=?^_`{}|~0-9A-Z]+)*'\n + '|^\"([\\\\001-\\\\010\\\\013\\\\014\\\\016-\\\\037!#-\\\\[\\\\]-\\\\177]|\\\\\\\\[\\\\001-\\\\011\\\\013\\\\014\\\\016-\\\\177])*\"'\n + ')@((?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\\\\.)+)(?:[A-Z0-9-]{2,63})'\n + '|\\\\[(25[0-5]|2[0-4]\\\\d|[0-1]?\\\\d?\\\\d)(\\\\.(25[0-5]|2[0-4]\\\\d|[0-1]?\\\\d?\\\\d)){3}\\\\]$';\n\n// Query string parameters that can be passed to LMS to manage\n// things like auto-enrollment upon login and registration.\nexport const AUTH_PARAMS = ['course_id', 'enrollment_action', 'course_mode', 'email_opt_in', 'purchase_workflow', 'next', 'register_for_free', 'track', 'is_account_recovery', 'variant', 'host', 'cta'];\nexport const REDIRECT = 'redirect';\n","// Utility functions\nimport * as QueryString from 'query-string';\n\nimport { AUTH_PARAMS } from '../constants';\n\nexport const getTpaProvider = (tpaHintProvider, primaryProviders, secondaryProviders) => {\n let tpaProvider = null;\n let skipHintedLogin = false;\n [...primaryProviders, ...secondaryProviders].forEach((provider) => {\n if (provider.id === tpaHintProvider) {\n tpaProvider = provider;\n if (provider.skipHintedLogin) {\n skipHintedLogin = true;\n }\n }\n });\n return { provider: tpaProvider, skipHintedLogin };\n};\n\nexport const getTpaHint = () => {\n const params = QueryString.parse(window.location.search);\n let tpaHint = null;\n tpaHint = params.tpa_hint;\n if (!tpaHint) {\n const { next } = params;\n if (next) {\n const index = next.indexOf('tpa_hint=');\n if (index !== -1) {\n tpaHint = next.substring(index + 'tpa_hint='.length, next.length);\n }\n }\n }\n return tpaHint;\n};\n\nexport const updatePathWithQueryParams = (path) => {\n let queryParams = window.location.search;\n\n if (!queryParams) {\n return path;\n }\n\n if (queryParams.indexOf('track=pwreset') > -1) {\n queryParams = queryParams.replace(\n '?track=pwreset&', '?',\n ).replace('?track=pwreset', '').replace('&track=pwreset', '').replace('?&', '?');\n }\n\n return `${path}${queryParams}`;\n};\n\nexport const getAllPossibleQueryParams = (locationURl = null) => {\n const urlParams = locationURl ? QueryString.parseUrl(locationURl).query : QueryString.parse(window.location.search);\n const params = {};\n Object.entries(urlParams).forEach(([key, value]) => {\n if (AUTH_PARAMS.indexOf(key) > -1) {\n params[key] = value;\n }\n });\n\n return params;\n};\n\nexport const getActivationStatus = () => {\n const params = QueryString.parse(window.location.search);\n\n return params.account_activation_status;\n};\n\nexport const isScrollBehaviorSupported = () => 'scrollBehavior' in document.documentElement.style;\n\nexport const windowScrollTo = (options) => {\n if (isScrollBehaviorSupported()) {\n return window.scrollTo(options);\n }\n\n return window.scrollTo(options.top, options.left);\n};\n\nexport const isHostAvailableInQueryParams = () => {\n const queryParams = getAllPossibleQueryParams();\n return 'host' in queryParams;\n};\n","/**\n * Helper class to save time when writing out action types for asynchronous methods. Also helps\n * ensure that actions are namespaced.\n */\nexport default class AsyncActionType {\n constructor(topic, name) {\n this.topic = topic;\n this.name = name;\n }\n\n get BASE() {\n return `${this.topic}__${this.name}`;\n }\n\n get BEGIN() {\n return `${this.topic}__${this.name}__BEGIN`;\n }\n\n get SUCCESS() {\n return `${this.topic}__${this.name}__SUCCESS`;\n }\n\n get FAILURE() {\n return `${this.topic}__${this.name}__FAILURE`;\n }\n\n get RESET() {\n return `${this.topic}__${this.name}__RESET`;\n }\n\n get FORBIDDEN() {\n return `${this.topic}__${this.name}__FORBIDDEN`;\n }\n}\n","import { getConfig } from '@edx/frontend-platform';\nimport Cookies from 'universal-cookie';\n\nexport default function setCookie(cookieName, cookieValue, cookieExpiry) {\n if (cookieName) { // To avoid setting getting exception when setting cookie with undefined names.\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}\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 'registration.other.options.heading': {\n id: 'registration.other.options.heading',\n defaultMessage: 'Or register with:',\n description: 'A message that appears above third party auth providers i.e saml, google, facebook etc',\n },\n 'institution.login.button': {\n id: 'institution.login.button',\n defaultMessage: 'Institution/campus credentials',\n description: 'shows 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 '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 // simplify registration experiment messages\n 'tab.back.btn.text': {\n id: 'tab.back.btn.text',\n defaultMessage: 'Back',\n description: 'Tab back button text',\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 { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Icon } from '@openedx/paragon';\nimport { Login } from '@openedx/paragon/icons';\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 '@openedx/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 '@openedx/paragon';\nimport { Institution } from '@openedx/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 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_USER_PIPELINE_DATA_LOADED = 'REGISTER_SET_USER_PIPELINE_DATA_LOADED';\nexport const REGISTER_SET_SIMPLIFY_REGISTRATION_EXP_DATA = 'REGISTER_SET_SIMPLIFY_REGISTRATION_EXP_DATA';\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, isValidatingSimplifiedRegisterFirstPage = false) => ({\n type: REGISTER_FORM_VALIDATIONS.BASE,\n payload: { formPayload, isValidatingSimplifiedRegisterFirstPage },\n});\n\nexport const fetchRealtimeValidationsBegin = () => ({\n type: REGISTER_FORM_VALIDATIONS.BEGIN,\n});\n\nexport const fetchRealtimeValidationsSuccess = (validations, isValidatingSimplifiedRegisterFirstPage = false) => ({\n type: REGISTER_FORM_VALIDATIONS.SUCCESS,\n payload: { validations, isValidatingSimplifiedRegisterFirstPage },\n});\n\nexport const fetchRealtimeValidationsFailure = () => ({\n type: REGISTER_FORM_VALIDATIONS.FAILURE,\n});\n\n// Register\nexport const registerNewUser = registrationInfo => ({\n type: REGISTER_NEW_USER.BASE,\n payload: { registrationInfo },\n});\n\nexport const registerNewUserBegin = () => ({\n type: REGISTER_NEW_USER.BEGIN,\n});\n\nexport const registerNewUserSuccess = (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 = (isSuggestionClicked = false) => ({\n type: REGISTER_CLEAR_USERNAME_SUGGESTIONS,\n payload: { isSuggestionClicked },\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\n// Simplify Registration Experiment Actions\nexport const setSimplifyRegExperimentData = (simplifyRegExpVariation, simplifiedRegisterPageStep) => ({\n type: REGISTER_SET_SIMPLIFY_REGISTRATION_EXP_DATA,\n payload: { simplifyRegExpVariation, simplifiedRegisterPageStep },\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 '@openedx/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 '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.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 'invalid.country.field.error': {\n id: 'invalid.country.field.error',\n defaultMessage: 'Country must match with an option available in the dropdown.',\n description: 'Error message when country is invalid',\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 // Simplify Registration experiment\n 'simplified.registration.exp.button': {\n id: 'simplified.registration.exp.button',\n defaultMessage: 'Complete account creation',\n description: 'Label text for simplified registration page second step',\n },\n 'simplify.registration.username.guideline.content': {\n id: 'simplify.registration.username.guideline.content',\n defaultMessage: 'To finalize your registration, please confirm your country of residence '\n + 'and create a public username that will identify you in your course communication forums. '\n + 'The username cannot be changed.',\n description: 'Guideline content for username field in simplify registration experiment step 2',\n },\n 'simplify.registration.form.submission.error': {\n id: 'simplify.registration.form.submission.error',\n defaultMessage: 'Please check your responses for this and the previous step and try again.',\n description: 'Error message that appears on top of the form when invalid form is submitted',\n },\n});\n\nexport default messages;\n","import { snakeCaseObject } from '@edx/frontend-platform';\n\nimport { LETTER_REGEX, NUMBER_REGEX } from '../../data/constants';\nimport messages from '../messages';\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 Object.keys(payload).forEach(key => {\n if (!payload[key]) {\n fieldErrors[key] = formatMessage(messages[`empty.${key}.field.error`]);\n }\n if (fieldErrors[key]) {\n isValid = false;\n }\n });\n\n // Don't validate when country field is optional or hidden and not present on registration form\n if (configurableFormFields?.country && !configurableFormFields.country?.displayValue) {\n fieldErrors.country = formatMessage(messages['empty.country.field.error']);\n isValid = false;\n } else if (configurableFormFields?.country && !configurableFormFields.country?.countryCode) {\n fieldErrors.country = formatMessage(messages['invalid.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]) {\n isValid = false;\n }\n });\n\n return { isValid, fieldErrors };\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 '@openedx/paragon';\nimport {\n Check, Remove, Visibility, VisibilityOff,\n} from '@openedx/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 {props.showScreenReaderText && {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 showScreenReaderText: 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 showScreenReaderText: PropTypes.bool,\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 '@openedx/paragon';\nimport { CheckCircle, Error } from '@openedx/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 'e.learning': {\n id: 'e.learning',\n defaultMessage: 'E-Learning',\n description: 'Header text 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 '@openedx/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
{getConfig().SITE_NAME}
\n
\n {formatMessage(messages['e.learning'])}\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 '@openedx/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 {getConfig().SITE_NAME}{' '}\n \n {formatMessage(messages['e.learning'])}\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 '@openedx/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 {getConfig().SITE_NAME}{' '}\n \n {formatMessage(messages['e.learning'])}\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: 'Thai Film Institute',\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: 'e-Learning',\n description: 'Part of the heading \"Your career turning point is here.\" shown on Authn MFE',\n },\n});\n\nexport default messages;\n","export default __webpack_public_path__ + \"497c48e4e2a7a504744a5d201b27f8d9.jpg\";","import React from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { Hyperlink, Image } from '@openedx/paragon';\n\nimport './index.scss';\nimport messages from './messages';\n\nimport banner from '../../../../images/bg-selectArtboard4k.jpg'\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 '@openedx/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 '@openedx/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 '@openedx/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}, {fullName}!',\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 '@openedx/paragon';\nimport PropTypes from 'prop-types';\n\nimport messages from './messages';\n\nconst LargeLayout = ({ fullName }) => {\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, fullName })}\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 fullName: 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 '@openedx/paragon';\nimport PropTypes from 'prop-types';\n\nimport messages from './messages';\n\nconst MediumLayout = ({ fullName }) => {\n const { formatMessage } = useIntl();\n\n return (\n <>\n
\n
\n
\n \n {getConfig().SITE_NAME}\n \n
\n
\n

\n {formatMessage(messages['welcome.to.platform'], { siteName: getConfig().SITE_NAME, fullName })}\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 fullName: 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 '@openedx/paragon';\nimport PropTypes from 'prop-types';\n\nimport messages from './messages';\n\nconst SmallLayout = ({ fullName }) => {\n const { formatMessage } = useIntl();\n\n return (\n
\n
\n \n {getConfig().SITE_NAME}\n \n
\n
\n

\n {formatMessage(messages['welcome.to.platform'], { siteName: getConfig().SITE_NAME, fullName })}\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 fullName: PropTypes.string.isRequired,\n};\n\nexport default SmallLayout;\n","import React from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { breakpoints } from '@openedx/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';\n\n\nimport banner from '../../images/bg-selectArtboard4k.jpg'\n\nconst BaseContainer = ({ children, showWelcomeBanner, fullName }) => {\n const enableImageLayout = getConfig().ENABLE_IMAGE_LAYOUT;\n\n if (enableImageLayout) {\n console.log(enableImageLayout)\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 fullName: null,\n};\n\nBaseContainer.propTypes = {\n children: PropTypes.node.isRequired,\n showWelcomeBanner: PropTypes.bool,\n fullName: PropTypes.string,\n};\n\nexport default BaseContainer;\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 '@openedx/paragon';\nimport { ChevronLeft } from '@openedx/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 '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 '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 '@openedx/paragon';\nimport { CheckCircle, Error } from '@openedx/paragon/icons';\nimport PropTypes from 'prop-types';\n\nimport { ACCOUNT_ACTIVATION_MESSAGE } from './data/constants';\nimport messages from './messages';\n\nconst AccountActivationMessage = ({ messageType }) => {\n const { formatMessage } = useIntl();\n\n if (!messageType) {\n return null;\n }\n\n const variant = messageType === ACCOUNT_ACTIVATION_MESSAGE.ERROR ? 'danger' : messageType;\n const activationOrConfirmation = getConfig().MARKETING_EMAILS_OPT_IN ? 'confirmation' : 'activation';\n const iconMapping = {\n [ACCOUNT_ACTIVATION_MESSAGE.SUCCESS]: CheckCircle,\n [ACCOUNT_ACTIVATION_MESSAGE.ERROR]: Error,\n };\n\n let activationMessage;\n let heading;\n switch (messageType) {\n case ACCOUNT_ACTIVATION_MESSAGE.SUCCESS: {\n heading = formatMessage(messages[`account.${activationOrConfirmation}.success.message.title`]);\n activationMessage = {formatMessage(messages[`account.${activationOrConfirmation}.success.message`])};\n break;\n }\n case ACCOUNT_ACTIVATION_MESSAGE.INFO: {\n activationMessage = formatMessage(messages[`account.${activationOrConfirmation}.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.${activationOrConfirmation}.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,\n};\n\nAccountActivationMessage.defaultProps = {\n messageType: null,\n};\n\nexport default AccountActivationMessage;\n","import { AsyncActionType } from '../../data/utils';\n\nexport const BACKUP_LOGIN_DATA = new AsyncActionType('LOGIN', 'BACKUP_LOGIN_DATA');\nexport const LOGIN_REQUEST = new AsyncActionType('LOGIN', 'REQUEST');\nexport const DISMISS_PASSWORD_RESET_BANNER = 'DISMISS_PASSWORD_RESET_BANNER';\n\n// Backup login form data\nexport const backupLoginForm = () => ({\n type: BACKUP_LOGIN_DATA.BASE,\n});\n\nexport const backupLoginFormBegin = (data) => ({\n type: BACKUP_LOGIN_DATA.BEGIN,\n payload: { ...data },\n});\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 dismissPasswordResetBanner = () => ({\n type: DISMISS_PASSWORD_RESET_BANNER,\n});\n","import { useEffect, useState } from 'react';\n\nimport { breakpoints } from '@openedx/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 '@openedx/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, { useEffect } 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 '@openedx/paragon';\nimport { Error } from '@openedx/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';\nimport { windowScrollTo } from '../data/utils';\n\nconst LoginFailureMessage = (props) => {\n const { formatMessage } = useIntl();\n const authService = getAuthService();\n const {\n context,\n errorCode,\n errorCount, // This is used to trigger the useEffect, facilitating the scrolling to the top.\n } = props;\n\n useEffect(() => {\n windowScrollTo({ left: 0, top: 0, behavior: 'smooth' });\n }, [errorCode, errorCount]);\n\n if (!errorCode) {\n return null;\n }\n\n let resetLink = (\n \n {formatMessage(messages['login.incorrect.credentials.error.reset.link.text'])}\n \n );\n\n let errorMessage;\n switch (errorCode) {\n case NON_COMPLIANT_PASSWORD_EXCEPTION: {\n errorMessage = (\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 errorMessage =

{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 errorMessage = (\n

\n ,\n email: {context.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 errorMessage = (\n

\n \n

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

{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 errorMessage = (\n <>\n

\n \n

\n

\n \n

\n \n );\n break;\n }\n case ACCOUNT_LOCKED_OUT: {\n errorMessage = (\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 errorMessage =

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

;\n } else if (context.failureCount === 2) {\n errorMessage = (\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 errorMessage = (\n

\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 errorMessage =

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

;\n break;\n }\n\n return (\n \n {formatMessage(messages['login.failure.header.title'])}\n { errorMessage }\n \n );\n};\n\nLoginFailureMessage.defaultProps = {\n context: {},\n};\n\nLoginFailureMessage.propTypes = {\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 email: PropTypes.string,\n redirectUrl: PropTypes.string,\n }),\n errorCode: PropTypes.string.isRequired,\n errorCount: PropTypes.number.isRequired,\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 { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n Button, Form,\n Icon,\n} from '@openedx/paragon';\nimport { Login } from '@openedx/paragon/icons';\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 hideRegistrationLink = getConfig().ALLOW_PUBLIC_ACCOUNT_CREATION === false\n || getConfig().SHOW_REGISTRATION_LINKS === 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 {hideRegistrationLink\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 React from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport {\n Hyperlink, Icon,\n} from '@openedx/paragon';\nimport { Institution } from '@openedx/paragon/icons';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport Skeleton from 'react-loading-skeleton';\n\nimport messages from './messages';\nimport {\n ENTERPRISE_LOGIN_URL, LOGIN_PAGE, PENDING_STATE, REGISTER_PAGE,\n} from '../data/constants';\n\nimport {\n RenderInstitutionButton,\n SocialAuthProviders,\n} from './index';\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,\n secondaryProviders,\n currentProvider,\n handleInstitutionLogin,\n thirdPartyAuthApiStatus,\n isLoginPage,\n } = props;\n const isInstitutionAuthActive = !!secondaryProviders.length && !currentProvider;\n const isSocialAuthActive = !!providers.length && !currentProvider;\n const isEnterpriseLoginDisabled = getConfig().DISABLE_ENTERPRISE_LOGIN;\n const enterpriseLoginURL = getConfig().LMS_BASE_URL + ENTERPRISE_LOGIN_URL;\n\n return (\n <>\n {((isEnterpriseLoginDisabled && isInstitutionAuthActive) || isSocialAuthActive) && (\n
\n {isLoginPage\n ? formatMessage(messages['login.other.options.heading'])\n : formatMessage(messages['registration.other.options.heading'])}\n
\n )}\n {(isLoginPage && !isEnterpriseLoginDisabled && isSocialAuthActive) && (\n \n \n {formatMessage(messages['enterprise.login.btn.text'])}\n \n )}\n\n {thirdPartyAuthApiStatus === PENDING_STATE ? (\n
\n \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_STATE,\n isLoginPage: false,\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 isLoginPage: PropTypes.bool,\n};\n\nexport default ThirdPartyAuth;\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 '@openedx/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, { useEffect, useMemo, useState } from 'react';\nimport { connect } from 'react-redux';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { sendPageEvent, sendTrackEvent } from '@edx/frontend-platform/analytics';\nimport { injectIntl, useIntl } from '@edx/frontend-platform/i18n';\nimport {\n Form, StatefulButton,\n} from '@openedx/paragon';\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 backupLoginFormBegin,\n dismissPasswordResetBanner,\n loginRequest,\n} from './data/actions';\nimport { INVALID_FORM, TPA_AUTHENTICATION_FAILURE } from './data/constants';\nimport LoginFailureMessage from './LoginFailure';\nimport messages from './messages';\nimport {\n FormGroup,\n InstitutionLogistration,\n PasswordField,\n RedirectLogistration,\n 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 ThirdPartyAuth from '../common-components/ThirdPartyAuth';\nimport {\n DEFAULT_STATE, PENDING_STATE, RESET_PAGE,\n} from '../data/constants';\nimport {\n getActivationStatus,\n getAllPossibleQueryParams,\n getTpaHint,\n getTpaProvider,\n updatePathWithQueryParams,\n} from '../data/utils';\nimport ResetPasswordSuccess from '../reset-password/ResetPasswordSuccess';\n\nconst LoginPage = (props) => {\n const {\n backedUpFormData,\n loginErrorCode,\n loginErrorContext,\n loginResult,\n shouldBackupState,\n thirdPartyAuthContext: {\n providers,\n currentProvider,\n secondaryProviders,\n finishAuthUrl,\n platformName,\n errorMessage: thirdPartyErrorMessage,\n },\n thirdPartyAuthApiStatus,\n institutionLogin,\n showResetPasswordSuccessBanner,\n submitState,\n // Actions\n backupFormState,\n handleInstitutionLogin,\n getTPADataFromBackend,\n } = props;\n const { formatMessage } = useIntl();\n const activationMsgType = getActivationStatus();\n const queryParams = useMemo(() => getAllPossibleQueryParams(), []);\n\n const [formFields, setFormFields] = useState({ ...backedUpFormData.formFields });\n const [errorCode, setErrorCode] = useState({ type: '', count: 0, context: {} });\n const [errors, setErrors] = useState({ ...backedUpFormData.errors });\n const tpaHint = getTpaHint();\n\n useEffect(() => {\n sendPageEvent('login_and_registration', 'login');\n }, []);\n\n useEffect(() => {\n const payload = { ...queryParams };\n if (tpaHint) {\n payload.tpa_hint = tpaHint;\n }\n getTPADataFromBackend(payload);\n }, [getTPADataFromBackend, queryParams, tpaHint]);\n /**\n * Backup the login form in redux when login page is toggled.\n */\n useEffect(() => {\n if (shouldBackupState) {\n backupFormState({\n formFields: { ...formFields },\n errors: { ...errors },\n });\n }\n }, [shouldBackupState, formFields, errors, backupFormState]);\n\n useEffect(() => {\n if (loginErrorCode) {\n setErrorCode(prevState => ({\n type: loginErrorCode,\n count: prevState.count + 1,\n context: { ...loginErrorContext },\n }));\n }\n }, [loginErrorCode, loginErrorContext]);\n\n useEffect(() => {\n if (thirdPartyErrorMessage) {\n setErrorCode((prevState) => ({\n type: TPA_AUTHENTICATION_FAILURE,\n count: prevState.count + 1,\n context: {\n errorMessage: thirdPartyErrorMessage,\n },\n }));\n }\n }, [thirdPartyErrorMessage]);\n\n const validateFormFields = (payload) => {\n const { emailOrUsername, password } = payload;\n const fieldErrors = { ...errors };\n\n if (emailOrUsername === '') {\n fieldErrors.emailOrUsername = formatMessage(messages['email.validation.message']);\n } else if (emailOrUsername.length < 2) {\n fieldErrors.emailOrUsername = formatMessage(messages['username.or.email.format.validation.less.chars.message']);\n }\n if (password === '') {\n fieldErrors.password = formatMessage(messages['password.validation.message']);\n }\n\n return { ...fieldErrors };\n };\n\n const handleSubmit = (event) => {\n event.preventDefault();\n if (showResetPasswordSuccessBanner) {\n props.dismissPasswordResetBanner();\n }\n\n const formData = { ...formFields };\n const validationErrors = validateFormFields(formData);\n if (validationErrors.emailOrUsername || validationErrors.password) {\n setErrors({ ...validationErrors });\n setErrorCode(prevState => ({ type: INVALID_FORM, count: prevState.count + 1, context: {} }));\n return;\n }\n\n // add query params to the payload\n const payload = {\n email_or_username: formData.emailOrUsername,\n password: formData.password,\n ...queryParams,\n };\n props.loginRequest(payload);\n };\n\n const handleOnChange = (event) => {\n const { name, value } = event.target;\n setFormFields(prevState => ({ ...prevState, [name]: value }));\n };\n\n const handleOnFocus = (event) => {\n const { name } = event.target;\n setErrors(prevErrors => ({ ...prevErrors, [name]: '' }));\n };\n const trackForgotPasswordLinkClick = () => {\n sendTrackEvent('edx.bi.password-reset_form.toggled', { category: 'user-engagement' });\n };\n\n const { provider, skipHintedLogin } = getTpaProvider(tpaHint, providers, secondaryProviders);\n\n if (tpaHint) {\n if (thirdPartyAuthApiStatus === PENDING_STATE) {\n return ;\n }\n\n if (skipHintedLogin) {\n window.location.href = getConfig().LMS_BASE_URL + provider.loginUrl;\n return null;\n }\n\n if (provider) {\n return ;\n }\n }\n\n if (institutionLogin) {\n return (\n \n );\n }\n return (\n <>\n \n {formatMessage(messages['login.page.title'], { siteName: getConfig().SITE_NAME })}\n \n \n
\n \n \n \n {showResetPasswordSuccessBanner && }\n
\n \n \n event.preventDefault()}\n />\n \n {formatMessage(messages['forgot.password'])}\n \n \n \n
\n \n );\n};\n\nconst mapStateToProps = state => {\n const loginPageState = state.login;\n return {\n backedUpFormData: loginPageState.loginFormData,\n loginErrorCode: loginPageState.loginErrorCode,\n loginErrorContext: loginPageState.loginErrorContext,\n loginResult: loginPageState.loginResult,\n shouldBackupState: loginPageState.shouldBackupState,\n showResetPasswordSuccessBanner: loginPageState.showResetPasswordSuccessBanner,\n submitState: loginPageState.submitState,\n thirdPartyAuthContext: thirdPartyAuthContextSelector(state),\n thirdPartyAuthApiStatus: state.commonComponents.thirdPartyAuthApiStatus,\n };\n};\n\nLoginPage.propTypes = {\n backedUpFormData: PropTypes.shape({\n formFields: PropTypes.shape({}),\n errors: PropTypes.shape({}),\n }),\n loginErrorCode: PropTypes.string,\n loginErrorContext: PropTypes.shape({\n email: PropTypes.string,\n redirectUrl: PropTypes.string,\n context: PropTypes.shape({}),\n }),\n loginResult: PropTypes.shape({\n redirectUrl: PropTypes.string,\n success: PropTypes.bool,\n }),\n shouldBackupState: PropTypes.bool,\n showResetPasswordSuccessBanner: PropTypes.bool,\n submitState: PropTypes.string,\n thirdPartyAuthApiStatus: PropTypes.string,\n institutionLogin: PropTypes.bool.isRequired,\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 // Actions\n backupFormState: PropTypes.func.isRequired,\n dismissPasswordResetBanner: PropTypes.func.isRequired,\n loginRequest: PropTypes.func.isRequired,\n getTPADataFromBackend: PropTypes.func.isRequired,\n handleInstitutionLogin: PropTypes.func.isRequired,\n};\n\nLoginPage.defaultProps = {\n backedUpFormData: {\n formFields: {\n emailOrUsername: '', password: '',\n },\n errors: {\n emailOrUsername: '', password: '',\n },\n },\n loginErrorCode: null,\n loginErrorContext: {},\n loginResult: {},\n shouldBackupState: false,\n showResetPasswordSuccessBanner: false,\n submitState: DEFAULT_STATE,\n thirdPartyAuthApiStatus: PENDING_STATE,\n thirdPartyAuthContext: {\n currentProvider: null,\n errorMessage: null,\n finishAuthUrl: null,\n providers: [],\n secondaryProviders: [],\n },\n};\n\nexport default connect(\n mapStateToProps,\n {\n backupFormState: backupLoginFormBegin,\n dismissPasswordResetBanner,\n loginRequest,\n getTPADataFromBackend: getThirdPartyAuthContext,\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 '@openedx/paragon';\nimport { Error } from '@openedx/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 '@openedx/paragon';\nimport { ChevronLeft } from '@openedx/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 {\n BACKUP_LOGIN_DATA,\n DISMISS_PASSWORD_RESET_BANNER,\n LOGIN_REQUEST,\n} from './actions';\nimport { DEFAULT_STATE, PENDING_STATE } from '../../data/constants';\nimport { RESET_PASSWORD } from '../../reset-password';\n\nexport const defaultState = {\n loginErrorCode: '',\n loginErrorContext: {},\n loginResult: {},\n loginFormData: {\n formFields: {\n emailOrUsername: '', password: '',\n },\n errors: {\n emailOrUsername: '', password: '',\n },\n },\n shouldBackupState: false,\n showResetPasswordSuccessBanner: false,\n submitState: DEFAULT_STATE,\n};\n\nconst reducer = (state = defaultState, action = {}) => {\n switch (action.type) {\n case BACKUP_LOGIN_DATA.BASE:\n return {\n ...state,\n shouldBackupState: true,\n };\n case BACKUP_LOGIN_DATA.BEGIN:\n return {\n ...defaultState,\n loginFormData: { ...action.payload },\n };\n case LOGIN_REQUEST.BEGIN:\n return {\n ...state,\n showResetPasswordSuccessBanner: false,\n submitState: PENDING_STATE,\n };\n case LOGIN_REQUEST.SUCCESS:\n return {\n ...state,\n loginResult: action.payload,\n };\n case LOGIN_REQUEST.FAILURE: {\n const { email, loginError, redirectUrl } = action.payload;\n return {\n ...state,\n loginErrorCode: loginError.errorCode,\n loginErrorContext: { ...loginError.context, email, redirectUrl },\n submitState: DEFAULT_STATE,\n };\n }\n case RESET_PASSWORD.SUCCESS:\n return {\n ...state,\n showResetPasswordSuccessBanner: true,\n };\n case DISMISS_PASSWORD_RESET_BANNER: {\n return {\n ...state,\n showResetPasswordSuccessBanner: 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 '@openedx/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 '@openedx/paragon';\nimport { ExpandMore } from '@openedx/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 Spinner,\n StatefulButton,\n} from '@openedx/paragon';\nimport { Error } from '@openedx/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 isWorkExperienceSelected: !!values.work_experience,\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 {registrationEmbedded && welcomePageContextApiStatus === PENDING_STATE ? (\n \n ) : (\n <>\n
\n

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

\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
\n );\n};\n\nProgressiveProfiling.propTypes = {\n authenticatedUser: PropTypes.shape({\n username: PropTypes.string,\n userId: PropTypes.number,\n fullName: PropTypes.string,\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","/**\n * This file contains data for simplified Registration Optimizely experiment\n */\nimport { getConfig, snakeCaseObject } from '@edx/frontend-platform';\n\nimport messages from '../../messages';\nimport { validatePasswordField } from '../utils';\n\nexport const NOT_INITIALIZED = 'experiment-not-initialized';\nexport const DEFAULT_VARIATION = 'default-register-page';\nexport const SIMPLIFIED_REGISTRATION_VARIATION = 'simplified-register-page';\n\nexport const FIRST_STEP = 'first-step';\nexport const SECOND_STEP = 'second-step';\n\nexport const SIMPLIFIED_REGISTER_PAGE_SECOND_STEP_FIELDS = ['username', 'country'];\nexport const SIMPLIFIED_REGISTER_PAGE_COMMON_FIELDS = ['tos_and_honor_code', 'honor_code'];\n\nconst SIMPLIFY_REGISTRATION_EXP_PAGE = 'authn_register_page';\n\nexport function getSimplifyRegistrationExperimentVariation() {\n try {\n if (window.optimizely && window.optimizely.get('data').experiments[getConfig().SIMPLIFY_REGISTRATION_EXPERIMENT_ID]) {\n const selectedVariant = window.optimizely.get('state').getVariationMap()[\n getConfig().SIMPLIFY_REGISTRATION_EXPERIMENT_ID\n ];\n return selectedVariant?.name;\n }\n } catch (e) { /* empty */ }\n return '';\n}\n\nexport function activateSimplifyRegistrationExperiment() {\n window.optimizely = window.optimizely || [];\n window.optimizely.push({\n type: 'page',\n pageName: SIMPLIFY_REGISTRATION_EXP_PAGE,\n });\n}\n\n/**\n * We want to display username and honor_code fields in second page if user is in simplified\n * registration page experiment\n */\nexport const shouldDisplayFieldInExperiment = (fieldName, expVariation, registerPageStep) => (\n !expVariation || expVariation === NOT_INITIALIZED || expVariation === DEFAULT_VARIATION\n || (expVariation === SIMPLIFIED_REGISTRATION_VARIATION\n && (\n SIMPLIFIED_REGISTER_PAGE_COMMON_FIELDS.includes(fieldName)\n || (registerPageStep === FIRST_STEP && !SIMPLIFIED_REGISTER_PAGE_SECOND_STEP_FIELDS.includes(fieldName))\n || (registerPageStep === SECOND_STEP && SIMPLIFIED_REGISTER_PAGE_SECOND_STEP_FIELDS.includes(fieldName))\n ))\n);\n\nexport const getRegisterButtonLabelInExperiment = (\n existingButtonLabel, expVariation, registerPageStep, formatMessage,\n) => {\n if (expVariation === SIMPLIFIED_REGISTRATION_VARIATION && registerPageStep === SECOND_STEP) {\n return formatMessage(messages['simplified.registration.exp.button']);\n }\n return existingButtonLabel;\n};\n\nexport const prepareSimplifiedRegistrationFirstStepPayload = (\n initPayload,\n configurableFormFields,\n) => {\n let payload = { ...initPayload };\n\n // Removing username field that is in second step of registration form\n delete payload.username;\n\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 payload = snakeCaseObject(payload);\n\n payload = { ...payload };\n return payload;\n};\n\nexport const validateSimplifiedRegistrationFirstStepPayload = (\n payload, errors, configurableFormFields, fieldDescriptions, formatMessage,\n) => {\n const fieldErrors = { ...errors };\n let isValid = true;\n\n // We dont want to validate username since it is in second step of registration\n const fieldsPayload = { ...payload };\n delete fieldsPayload.username;\n\n Object.keys(fieldsPayload).forEach(key => {\n if (key === 'password') {\n // We need to explicitly validated password field because the validations for password value\n // are different at frontend and backend.\n fieldErrors[key] = validatePasswordField(fieldsPayload[key], formatMessage);\n } else if (!fieldsPayload[key]) {\n fieldErrors[key] = formatMessage(messages[`empty.${key}.field.error`]);\n }\n if (fieldErrors[key]) {\n isValid = false;\n }\n });\n\n // Don't validate when country field is optional or hidden and not present on registration form\n if (configurableFormFields?.country && !configurableFormFields.country?.displayValue) {\n fieldErrors.country = formatMessage(messages['empty.country.field.error']);\n isValid = false;\n } else if (configurableFormFields?.country && !configurableFormFields.country?.countryCode) {\n fieldErrors.country = formatMessage(messages['invalid.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]) {\n isValid = false;\n }\n });\n\n return { isValid, fieldErrors };\n};\n","import messages from '../../messages';\n\n// regex more focused towards url matching\nexport const URL_REGEX = /[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_\\+.~#?&//=]*)?/gi; // eslint-disable-line no-useless-escape\n\n// regex for html tags\nexport const HTML_REGEX = /<|>/u;\n\n// regex from backend\nexport const INVALID_NAME_REGEX = /https?:\\/\\/(?:[-\\w.]|(?:%[\\da-fA-F]{2}))*/g;\n\nconst validateName = (value, formatMessage) => {\n let fieldError;\n if (!value.trim()) {\n fieldError = formatMessage(messages['empty.name.field.error']);\n } else if (URL_REGEX.test(value) || HTML_REGEX.test(value) || INVALID_NAME_REGEX.test(value)) {\n fieldError = formatMessage(messages['name.validation.message']);\n }\n return fieldError;\n};\n\nexport default validateName;\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","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 = {};\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 React, { useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { Alert, Icon } from '@openedx/paragon';\nimport { Close, Error } from '@openedx/paragon/icons';\nimport PropTypes from 'prop-types';\n\nimport validateEmail from './validator';\nimport { FormGroup } from '../../../common-components';\nimport {\n backupRegistrationFormBegin,\n clearRegistrationBackendError,\n fetchRealtimeValidations,\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 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(backupRegistrationFormBegin({\n ...backedUpFormData,\n emailSuggestion: { ...suggestion },\n }));\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 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 React, { useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { Button, Icon, IconButton } from '@openedx/paragon';\nimport { Close } from '@openedx/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(true));\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, emptyErrorMessage, invalidCountryErrorMessage) => {\n let countryCode = '';\n let displayValue = value;\n let error = '';\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 } else {\n error = invalidCountryErrorMessage;\n }\n } else {\n error = emptyErrorMessage;\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 '@openedx/paragon';\nimport classNames from 'classnames';\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\n const countryFieldValue = {\n userProvidedText: selectedCountry.displayValue,\n selectionValue: selectedCountry.displayValue,\n selectionId: selectedCountry.countryCode,\n };\n\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 } else if (!selectedCountry.displayValue) {\n onChangeHandler(\n { target: { name: 'country' } },\n { countryCode: '', displayValue: '' },\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 { error } = validateCountryField(\n value.trim(), countryList, formatMessage(messages['empty.country.field.error']), formatMessage(messages['invalid.country.field.error']),\n );\n handleErrorChange('country', error);\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: value.selectionId, displayValue: value.userProvidedText });\n\n // We have put this check because proviously we also had onSelected event handler and we call\n // the onBlur on that event handler but now there is no such handler and we only have\n // onChange so we check the is there is proper sectionId which only be\n // proper one when we select it from dropdown's item otherwise its null.\n if (value.selectionId !== '') {\n handleOnBlur({ target: { name: 'country', value: value.userProvidedText } });\n }\n };\n\n const getCountryList = () => countryList.map((country) => (\n \n {country[COUNTRY_DISPLAY_KEY]}\n \n ));\n\n return (\n
\n 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 '@openedx/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 '@openedx/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 { FIRST_STEP, shouldDisplayFieldInExperiment } from '../data/optimizelyExperiment/helper';\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 simplifyRegistrationExpVariation,\n simplifiedRegistrationPageStep,\n } = props;\n\n const countryList = useMemo(() => getCountryList(getLocale()), []);\n\n let showTermsOfServiceAndHonorCode = false;\n let showCountryField = false;\n\n const formFieldDescriptions = [];\n const honorCode = [];\n const flags = {\n showConfigurableRegistrationFields: getConfig().ENABLE_DYNAMIC_REGISTRATION_FIELDS,\n showConfigurableEdxFields: getConfig().SHOW_CONFIGURABLE_EDX_FIELDS,\n showMarketingEmailOptInCheckbox: getConfig().MARKETING_EMAILS_OPT_IN,\n };\n\n /**\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 && shouldDisplayFieldInExperiment(\n 'other_fields', simplifyRegistrationExpVariation, simplifiedRegistrationPageStep,\n )) {\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) && shouldDisplayFieldInExperiment(\n 'country', simplifyRegistrationExpVariation, simplifiedRegistrationPageStep,\n )) {\n formFieldDescriptions.push(\n \n \n ,\n );\n }\n\n if (flags.showMarketingEmailOptInCheckbox && shouldDisplayFieldInExperiment(\n 'marketing_email_opt_in', simplifyRegistrationExpVariation, simplifiedRegistrationPageStep,\n )) {\n formFieldDescriptions.push(\n \n \n ,\n );\n }\n\n if ((flags.showConfigurableEdxFields || showTermsOfServiceAndHonorCode)\n && shouldDisplayFieldInExperiment(\n 'honor_code', simplifyRegistrationExpVariation, simplifiedRegistrationPageStep,\n )) {\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 simplifyRegistrationExpVariation: PropTypes.string,\n simplifiedRegistrationPageStep: PropTypes.string,\n};\n\nConfigurableRegistrationForm.defaultProps = {\n fieldDescriptions: {},\n autoSubmitRegistrationForm: false,\n simplifyRegistrationExpVariation: '',\n simplifiedRegistrationPageStep: FIRST_STEP,\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 '@openedx/paragon';\nimport { Error } from '@openedx/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 { FIRST_STEP, SECOND_STEP, SIMPLIFIED_REGISTRATION_VARIATION } from '../data/optimizelyExperiment/helper';\nimport messages from '../messages';\n\nconst RegistrationFailureMessage = (props) => {\n const { formatMessage } = useIntl();\n const {\n context, errorCode, failureCount, simplifyRegistrationExpVariation, simplifiedRegistrationPageStep,\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 if (simplifyRegistrationExpVariation === SIMPLIFIED_REGISTRATION_VARIATION\n && simplifiedRegistrationPageStep === SECOND_STEP) {\n errorMessage = formatMessage(messages['simplify.registration.form.submission.error']);\n } else {\n errorMessage = formatMessage(messages['registration.empty.form.submission.error']);\n }\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 simplifyRegistrationExpVariation: '',\n simplifiedRegistrationPageStep: FIRST_STEP,\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 simplifyRegistrationExpVariation: PropTypes.string,\n simplifiedRegistrationPageStep: PropTypes.string,\n};\n\nexport default RegistrationFailureMessage;\n","import { sendTrackEvent } from '@edx/frontend-platform/analytics';\n\nexport const eventNames = {\n simplifyRegistrationFirstStepViewed: 'edx.bi.user.simplifyregistration.step1.viewed',\n simplifyRegistrationSecondStepViewed: 'edx.bi.user.simplifyregistration.step2.viewed',\n simplifyRegistrationContinueBtnClicked: 'edx.bi.user.registration.submit.click',\n simplifyRegistrationValidatedSubmitBtnClicked: 'edx.bi.user.registration.validated.submit.click',\n simplifyRegistrationInvalidFormSubmitBtnClicked: 'edx.bi.user.registration.invalid.form.submit.click',\n};\n\nexport const trackSimplifyRegistrationFirstStepViewed = (expVariation) => {\n sendTrackEvent(\n eventNames.simplifyRegistrationFirstStepViewed, {\n variation: expVariation,\n },\n );\n};\n\nexport const trackSimplifyRegistrationSecondStepViewed = () => {\n sendTrackEvent(eventNames.simplifyRegistrationSecondStepViewed, {});\n};\n\nexport const trackSimplifyRegistrationContinueBtnClicked = (expVariation) => {\n sendTrackEvent(eventNames.simplifyRegistrationContinueBtnClicked, {\n variation: expVariation,\n });\n};\n\nexport const trackSimplifyRegistrationValidatedSubmitBtnClicked = (expVariation) => {\n sendTrackEvent(eventNames.simplifyRegistrationValidatedSubmitBtnClicked, {\n variation: expVariation,\n });\n};\n\nexport const trackSimplifyRegistrationInvalidFormSubmitBtnClicked = (expVariation, formErrors) => {\n sendTrackEvent(eventNames.simplifyRegistrationInvalidFormSubmitBtnClicked, {\n variation: expVariation,\n ...formErrors,\n });\n};\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 '@openedx/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 {\n backupRegistrationFormBegin,\n clearRegistrationBackendError,\n registerNewUser,\n setSimplifyRegExperimentData,\n setUserPipelineDataLoaded,\n} from './data/actions';\nimport {\n FORM_SUBMISSION_ERROR,\n TPA_AUTHENTICATION_FAILURE,\n} from './data/constants';\nimport {\n DEFAULT_VARIATION,\n FIRST_STEP,\n getRegisterButtonLabelInExperiment,\n NOT_INITIALIZED,\n SECOND_STEP,\n shouldDisplayFieldInExperiment,\n SIMPLIFIED_REGISTRATION_VARIATION,\n} from './data/optimizelyExperiment/helper';\nimport {\n trackSimplifyRegistrationContinueBtnClicked,\n trackSimplifyRegistrationInvalidFormSubmitBtnClicked,\n trackSimplifyRegistrationSecondStepViewed,\n trackSimplifyRegistrationValidatedSubmitBtnClicked,\n} from './data/optimizelyExperiment/track';\nimport useSimplifyRegistrationExperimentVariation\n from './data/optimizelyExperiment/useSimplifyRegistrationExperimentVariation';\nimport {\n getBackendValidations, isFormValid, prepareRegistrationPayload,\n} from './data/utils';\nimport messages from './messages';\nimport { EmailField, NameField, UsernameField } from './RegistrationFields';\nimport {\n InstitutionLogistration,\n PasswordField,\n RedirectLogistration,\n ThirdPartyAuthAlert,\n} from '../common-components';\nimport { getThirdPartyAuthContext as getRegistrationDataFromBackend } from '../common-components/data/actions';\nimport EnterpriseSSO from '../common-components/EnterpriseSSO';\nimport ThirdPartyAuth from '../common-components/ThirdPartyAuth';\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 usernameSuggestionsBackup,\n submitState,\n validations,\n simplifyRegExpVariation,\n simplifiedRegisterPageStep,\n } = useSelector(state => state.register);\n\n const {\n fieldDescriptions,\n optionalFields,\n thirdPartyAuthApiStatus,\n thirdPartyAuthContext,\n thirdPartyAuthContext: {\n autoSubmitRegForm,\n errorMessage: thirdPartyAuthErrorMessage,\n finishAuthUrl,\n currentProvider,\n providers,\n secondaryProviders,\n pipelineUserDetails,\n },\n } = useSelector(state => state.commonComponents);\n\n const backendValidations = useMemo(\n () => getBackendValidations(registrationError, validations), [registrationError, validations],\n );\n const queryParams = useMemo(() => getAllPossibleQueryParams(), []);\n const tpaHint = useMemo(() => getTpaHint(), []);\n\n const [formFields, setFormFields] = useState({ ...backedUpFormData.formFields });\n const [configurableFormFields, setConfigurableFormFields] = useState({ ...backedUpFormData.configurableFormFields });\n const [errors, setErrors] = useState({ ...backedUpFormData.errors });\n const [errorCode, setErrorCode] = useState({ type: '', count: 0 });\n const [formStartTime, setFormStartTime] = useState(null);\n // temporary error state for embedded experience because we don't want to show errors on blur\n const [temporaryErrors, setTemporaryErrors] = useState({ ...backedUpFormData.errors });\n\n const { cta, host } = queryParams;\n const buttonLabel = cta\n ? formatMessage(messages['create.account.cta.button'], { label: cta })\n : formatMessage(messages['create.account.for.free.button']);\n\n /**\n * Simplify Registration Page Experiment\n */\n const simplifyRegistrationExpVariation = useSimplifyRegistrationExperimentVariation(\n simplifyRegExpVariation, registrationEmbedded, tpaHint, currentProvider, thirdPartyAuthApiStatus,\n );\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 dispatch(setSimplifyRegExperimentData(simplifyRegistrationExpVariation, simplifiedRegisterPageStep));\n }\n }, [shouldBackupState]); // eslint-disable-line react-hooks/exhaustive-deps\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 let registeredEventProps = {};\n\n if (simplifyRegistrationExpVariation !== NOT_INITIALIZED) {\n registeredEventProps = {\n variation: simplifyRegistrationExpVariation,\n picked_suggested_username: usernameSuggestionsBackup.includes(\n registrationResult?.authenticatedUser?.username,\n ),\n };\n }\n\n sendTrackEvent('edx.bi.user.account.registered.client', registeredEventProps);\n\n // This is used by the \"User Retention Rate Event\" on GTM\n setCookie(getConfig().USER_RETENTION_COOKIE_NAME, true);\n }\n }, [registrationResult]); // eslint-disable-line react-hooks/exhaustive-deps\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 setErrors(prevErrors => ({ ...prevErrors, [name]: '' }));\n }\n setFormFields(prevState => ({ ...prevState, [name]: value }));\n };\n\n const handleErrorChange = (fieldName, error) => {\n if (registrationEmbedded) {\n setTemporaryErrors(prevErrors => ({\n ...prevErrors,\n [fieldName]: error,\n }));\n if (error === '' && errors[fieldName] !== '') {\n setErrors(prevErrors => ({\n ...prevErrors,\n [fieldName]: error,\n }));\n }\n } else {\n setErrors(prevErrors => ({\n ...prevErrors,\n [fieldName]: error,\n }));\n }\n };\n\n const registerUser = () => {\n const totalRegistrationTime = (Date.now() - formStartTime) / 1000;\n let payload = { ...formFields };\n\n if (currentProvider) {\n delete payload.password;\n payload.social_auth_provider = currentProvider;\n }\n\n // Validating form data before submitting\n const { isValid, fieldErrors } = isFormValid(\n payload,\n registrationEmbedded ? temporaryErrors : errors,\n configurableFormFields,\n fieldDescriptions,\n formatMessage,\n );\n setErrors({ ...fieldErrors });\n\n // returning if not valid\n if (!isValid) {\n if (simplifyRegistrationExpVariation === DEFAULT_VARIATION) {\n trackSimplifyRegistrationInvalidFormSubmitBtnClicked(simplifyRegistrationExpVariation, fieldErrors);\n }\n setErrorCode(prevState => ({ type: FORM_SUBMISSION_ERROR, count: prevState.count + 1 }));\n return;\n }\n\n if (simplifyRegistrationExpVariation === SIMPLIFIED_REGISTRATION_VARIATION\n || simplifyRegistrationExpVariation === DEFAULT_VARIATION) {\n trackSimplifyRegistrationValidatedSubmitBtnClicked(simplifyRegistrationExpVariation);\n }\n // Preparing payload for submission\n payload = prepareRegistrationPayload(\n payload,\n configurableFormFields,\n flags.showMarketingEmailOptInCheckbox,\n totalRegistrationTime,\n queryParams);\n\n // making register call\n dispatch(registerNewUser(payload));\n };\n\n const handleSubmit = (e) => {\n e.preventDefault();\n if (simplifyRegistrationExpVariation === SIMPLIFIED_REGISTRATION_VARIATION\n || simplifyRegistrationExpVariation === DEFAULT_VARIATION) {\n trackSimplifyRegistrationContinueBtnClicked(simplifyRegistrationExpVariation);\n }\n\n if (simplifyRegistrationExpVariation === SIMPLIFIED_REGISTRATION_VARIATION\n && simplifiedRegisterPageStep === FIRST_STEP) {\n // We don't want to validate username and country since these are in the second step of registration\n const { username, ...formFieldsPayload } = formFields;\n const { country, ...configurableFormFieldsPayload } = configurableFormFields;\n const { country: countryDescription, ...fieldDescriptionsPayload } = fieldDescriptions;\n\n const { isValid, fieldErrors } = isFormValid(\n formFieldsPayload, errors, configurableFormFieldsPayload, fieldDescriptionsPayload, formatMessage,\n );\n\n setErrors(prevErrors => ({\n ...prevErrors,\n ...fieldErrors,\n }));\n // returning if not valid\n if (!isValid) {\n trackSimplifyRegistrationInvalidFormSubmitBtnClicked(simplifyRegistrationExpVariation, {\n ...errors,\n ...fieldErrors,\n });\n setErrorCode(prevState => ({ type: FORM_SUBMISSION_ERROR, count: prevState.count + 1 }));\n } else {\n setErrorCode({ type: '', count: 0 });\n trackSimplifyRegistrationValidatedSubmitBtnClicked(simplifyRegistrationExpVariation);\n trackSimplifyRegistrationSecondStepViewed();\n dispatch(setSimplifyRegExperimentData(simplifyRegistrationExpVariation, SECOND_STEP));\n }\n } else {\n registerUser();\n }\n };\n\n useEffect(() => {\n if (autoSubmitRegForm && userPipelineDataLoaded) {\n registerUser();\n }\n }, [autoSubmitRegForm, userPipelineDataLoaded]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const renderForm = () => {\n if (institutionLogin) {\n return (\n \n );\n }\n return (\n <>\n \n {formatMessage(messages['register.page.title'], { siteName: getConfig().SITE_NAME })}\n \n \n {(autoSubmitRegForm && !errorCode.type)\n || (!simplifyRegistrationExpVariation && !(registrationEmbedded || !!tpaHint || !!currentProvider))\n ? (\n
\n \n
\n ) : (\n \n \n \n
\n {shouldDisplayFieldInExperiment(\n 'name', simplifyRegistrationExpVariation, simplifiedRegisterPageStep,\n ) && (\n \n )}\n {shouldDisplayFieldInExperiment(\n 'email', simplifyRegistrationExpVariation, simplifiedRegisterPageStep,\n ) && (\n \n )}\n {shouldDisplayFieldInExperiment(\n 'username', simplifyRegistrationExpVariation, simplifiedRegisterPageStep,\n ) && (\n <>\n {(simplifiedRegisterPageStep === SECOND_STEP) && (\n

\n {formatMessage(messages['simplify.registration.username.guideline.content'])}\n

\n )}\n \n \n )}\n {!currentProvider && shouldDisplayFieldInExperiment(\n 'password', simplifyRegistrationExpVariation, simplifiedRegisterPageStep,\n ) && (\n \n )}\n \n e.preventDefault()}\n />\n {(!registrationEmbedded && shouldDisplayFieldInExperiment(\n 'ThirdPartyAuth', simplifyRegistrationExpVariation, simplifiedRegisterPageStep,\n ))\n && (\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 { useEffect, useState } from 'react';\n\nimport {\n activateSimplifyRegistrationExperiment,\n getSimplifyRegistrationExperimentVariation,\n NOT_INITIALIZED,\n} from './helper';\nimport { trackSimplifyRegistrationFirstStepViewed } from './track';\nimport { COMPLETE_STATE } from '../../../data/constants';\n\n/**\n * This hook returns activates simplify registration experiment and returns the experiment\n * variation for the user.\n */\nconst useSimplifyRegistrationExperimentVariation = (\n initExpVariation,\n registrationEmbedded,\n tpaHint,\n currentProvider,\n thirdPartyAuthApiStatus,\n) => {\n const [variation, setVariation] = useState(initExpVariation);\n\n useEffect(() => {\n if (initExpVariation || registrationEmbedded || !!tpaHint || !!currentProvider\n || thirdPartyAuthApiStatus !== COMPLETE_STATE) {\n return variation;\n }\n\n const getVariation = () => {\n const expVariation = getSimplifyRegistrationExperimentVariation();\n if (expVariation) {\n setVariation(expVariation);\n trackSimplifyRegistrationFirstStepViewed(expVariation);\n } else {\n // This is to handle the case when user dont get variation for some reason, the register page\n // shows unlimited spinner.\n setVariation(NOT_INITIALIZED);\n }\n };\n\n activateSimplifyRegistrationExperiment();\n\n const timer = setTimeout(getVariation, 300);\n\n return () => {\n clearTimeout(timer);\n };\n }, [ // eslint-disable-line react-hooks/exhaustive-deps\n currentProvider, initExpVariation, registrationEmbedded, thirdPartyAuthApiStatus, tpaHint,\n ]);\n\n return variation;\n};\n\nexport default useSimplifyRegistrationExperimentVariation;\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_SIMPLIFY_REGISTRATION_EXP_DATA,\n REGISTER_SET_USER_PIPELINE_DATA_LOADED,\n REGISTRATION_CLEAR_BACKEND_ERROR,\n} from './actions';\nimport { FIRST_STEP } from './optimizelyExperiment/helper';\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 usernameSuggestionsBackup: [], // Temporary field for Simplify registration experiment\n validationApiRateLimited: false,\n shouldBackupState: false,\n simplifyRegExpVariation: '',\n simplifiedRegisterPageStep: FIRST_STEP,\n isValidatingSimplifiedRegisterFirstPage: 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 ...state,\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 isValidatingSimplifiedRegisterFirstPage: action.payload?.isValidatingSimplifiedRegisterFirstPage,\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 usernameSuggestionsBackup: action.payload?.isSuggestionClicked ? state.usernameSuggestions : [],\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_SIMPLIFY_REGISTRATION_EXP_DATA: {\n const { simplifyRegExpVariation: expVariation, simplifiedRegisterPageStep: pageStep } = action.payload;\n return {\n ...state,\n simplifyRegExpVariation: expVariation,\n simplifiedRegisterPageStep: pageStep,\n isValidatingSimplifiedRegisterFirstPage: pageStep === FIRST_STEP\n ? false : state.isValidatingSimplifiedRegisterFirstPage,\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(\n camelCaseObject(fieldValidations),\n action.payload?.isValidatingSimplifiedRegisterFirstPage,\n ));\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, useDispatch, useSelector } 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, IconButton,\n Tab,\n Tabs,\n} from '@openedx/paragon';\nimport { ArrowBackIos, ChevronLeft } from '@openedx/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 { backupLoginForm } from '../login/data/actions';\nimport { RegistrationPage } from '../register';\nimport { backupRegistrationForm, setSimplifyRegExperimentData } from '../register/data/actions';\nimport { FIRST_STEP, SECOND_STEP } from '../register/data/optimizelyExperiment/helper';\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 const hideRegistrationLink = getConfig().SHOW_REGISTRATION_LINKS === false;\n\n const dispatch = useDispatch();\n const { simplifyRegExpVariation, simplifiedRegisterPageStep } = useSelector(state => state.register);\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, currentTab) => {\n if (tabKey === currentTab) {\n return;\n }\n sendTrackEvent(`edx.bi.${tabKey.replace('/', '')}_form.toggled`, { category: 'user-engagement' });\n props.clearThirdPartyAuthContextErrorMessage();\n if (tabKey === LOGIN_PAGE) {\n props.backupRegistrationForm();\n } else if (tabKey === REGISTER_PAGE) {\n props.backupLoginForm();\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 /**\n * Temporary function created to resolve the complexity in tabs conditioning for simplify\n * registration experiment\n */\n const getTabs = () => {\n if (simplifiedRegisterPageStep === SECOND_STEP) {\n return (\n
\n {\n dispatch(setSimplifyRegExperimentData(simplifyRegExpVariation, FIRST_STEP));\n }}\n variant=\"primary\"\n size=\"inline\"\n className=\"mr-1\"\n />\n {formatMessage(messages['tab.back.btn.text'])}\n
\n );\n }\n return (\n handleOnSelect(tabKey, selectedPage)}>\n \n \n \n );\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() && !hideRegistrationLink && getTabs())}\n { key && (\n \n )}\n
\n {!institutionLogin && !isValidTpaHint() && hideRegistrationLink && (\n

\n {formatMessage(messages[selectedPage === LOGIN_PAGE ? 'logistration.sign.in' : 'logistration.register'])}\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 backupLoginForm: PropTypes.func.isRequired,\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 backupLoginForm,\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 '@openedx/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 '@openedx/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 '@openedx/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 '@openedx/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","SHOW_REGISTRATION_LINKS","ENABLE_IMAGE_LAYOUT","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","SIMPLIFY_REGISTRATION_EXPERIMENT_ID","appMessages","ar","de","fr","hi","it","pt","ru","th","uk","paragonMessages","LOGIN_PAGE","REGISTER_PAGE","REGISTER_EMBEDDED_PAGE","RESET_PAGE","AUTHN_PROGRESSIVE_PROFILING","DEFAULT_REDIRECT_URL","RECOMMENDATIONS","PAGE_NOT_FOUND","SUPPORTED_ICON_CLASSES","FORM_SUBMISSION_ERROR","INTERNAL_SERVER_ERROR","DEFAULT_STATE","PENDING_STATE","COMPLETE_STATE","FAILURE_STATE","LETTER_REGEX","NUMBER_REGEX","VALID_EMAIL_REGEX","AUTH_PARAMS","getTpaProvider","tpaHintProvider","primaryProviders","secondaryProviders","tpaProvider","skipHintedLogin","forEach","provider","id","getTpaHint","params","QueryString","window","location","search","tpaHint","tpa_hint","next","index","indexOf","substring","length","updatePathWithQueryParams","path","queryParams","replace","getAllPossibleQueryParams","locationURl","arguments","undefined","urlParams","query","Object","entries","_ref","key","value","windowScrollTo","options","document","documentElement","style","scrollTo","top","left","isHostAvailableInQueryParams","AsyncActionType","constructor","topic","name","this","BASE","BEGIN","SUCCESS","FAILURE","RESET","FORBIDDEN","setCookie","cookieName","cookieValue","cookieExpiry","cookies","Cookies","domain","getConfig","expires","set","RedirectLogistration","props","authenticatedUser","finishAuthUrl","redirectUrl","redirectToProgressiveProfilingPage","success","optionalFields","redirectToRecommendationsPage","educationLevel","userId","registrationEmbedded","host","finalRedirectUrl","includes","LMS_BASE_URL","parent","postMessage","action","registrationResult","_jsx","Navigate","to","state","href","defaultProps","propTypes","PropTypes","EmbeddedRegistrationRoute","children","isRequired","UnAuthOnlyRoute","authUser","setAuthUser","useState","isReady","setIsReady","useEffect","fetchAuthenticatedUser","forceRefresh","getAuthenticatedUser","then","username","global","concat","NotFoundPage","className","FormattedMessage","defaultMessage","description","defineMessages","supportTitle","selectTicketForm","SocialAuthProviders","formatMessage","useIntl","referrer","socialAuthProviders","handleSubmit","e","preventDefault","url","currentTarget","dataset","providerUrl","socialAuth","map","_jsxs","type","loginUrl","registerUrl","onClick","iconImage","src","alt","iconClass","FontAwesomeIcon","icon","Icon","Login","messages","providerName","_Fragment","skipRegistrationForm","ThirdPartyAuthAlert","currentProvider","platformName","SITE_NAME","message","Alert","Heading","RenderInstitutionButton","onSubmitHandler","buttonTitle","Button","variant","Institution","InstitutionLogistration","lmsBaseUrl","headingTitle","Hyperlink","destination","LogistrationDefaultProps","LogistrationProps","_objectSpread","THIRD_PARTY_AUTH_CONTEXT","THIRD_PARTY_AUTH_CONTEXT_CLEAR_ERROR_MSG","getThirdPartyAuthContext","payload","getThirdPartyAuthContextBegin","getThirdPartyAuthContextSuccess","fieldDescriptions","thirdPartyAuthContext","getThirdPartyAuthContextFailure","defaultState","fields","extended_profile","thirdPartyAuthApiStatus","autoSubmitRegForm","countryCode","providers","pipelineUserDetails","errorMessage","welcomePageRedirectUrl","async","requestConfig","headers","isPublic","data","getAuthenticatedHttpClient","get","catch","registrationFields","contextData","BACKUP_REGISTRATION_DATA","REGISTER_FORM_VALIDATIONS","REGISTER_NEW_USER","REGISTER_CLEAR_USERNAME_SUGGESTIONS","REGISTRATION_CLEAR_BACKEND_ERROR","REGISTER_SET_COUNTRY_CODE","REGISTER_SET_USER_PIPELINE_DATA_LOADED","REGISTER_SET_SIMPLIFY_REGISTRATION_EXP_DATA","backupRegistrationFormBegin","fetchRealtimeValidations","formPayload","isValidatingSimplifiedRegisterFirstPage","fetchRealtimeValidationsBegin","fetchRealtimeValidationsSuccess","validations","fetchRealtimeValidationsFailure","registerNewUserBegin","registerNewUserSuccess","registerNewUserFailure","error","clearUsernameSuggestions","isSuggestionClicked","clearRegistrationBackendError","fieldName","setCountryFromThirdPartyAuthContext","setSimplifyRegExperimentData","simplifyRegExpVariation","simplifiedRegisterPageStep","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","isFormValid","errors","configurableFormFields","fieldErrors","isValid","keys","country","displayValue","error_message","PasswordField","dispatch","useDispatch","validationApiRateLimited","useSelector","register","isPasswordHidden","setHiddenTrue","setHiddenFalse","useToggle","showTooltip","setShowTooltip","target","relatedTarget","passwordValue","showRequirements","handleErrorChange","fieldError","validatePasswordField","test","password","setTimeout","HideButton","IconButton","VisibilityOff","iconAs","size","ShowButton","Visibility","placement","innerWidth","tooltip","Tooltip","Check","Remove","OverlayTrigger","overlay","show","showScreenReaderText","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","preserveAspectRatio","transform","x","y","height","width","MediumLayout","SmallLayout","backgroundImage","ExtraSmallLayout","fullName","LOGO_URL","siteName","BaseContainer","showWelcomeBanner","enableImageLayout","console","log","banner","MediaQuery","maxWidth","breakpoints","extraSmall","AuthSmallLayout","ImageExtraSmallLayout","minWidth","small","ImageSmallLayout","medium","large","AuthMediumLayout","ImageMediumLayout","extraLarge","AuthLargeLayout","ImageLargeLayout","DefaultSmallLayout","DefaultMediumLayout","DefaultLargeLayout","ForgotPasswordPage","emailRegex","RegExp","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","response","logInfo","INVALID_FORM","TPA_AUTHENTICATION_FAILURE","ACCOUNT_ACTIVATION_MESSAGE","AccountActivationMessage","messageType","activationOrConfirmation","iconMapping","activationMessage","BACKUP_LOGIN_DATA","LOGIN_REQUEST","DISMISS_PASSWORD_RESET_BANNER","loginRequestBegin","loginRequestSuccess","loginRequestFailure","loginError","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","authService","getAuthService","context","errorCount","resetLink","lineBreak","tpaLink","allowedDomain","remainingAttempts","failureCount","getCsrfTokenService","clearCsrfTokenCache","platform_name","EnterpriseSSO","hideRegistrationLink","ALLOW_PUBLIC_ACCOUNT_CREATION","ThirdPartyAuth","handleInstitutionLogin","isLoginPage","isInstitutionAuthActive","isSocialAuthActive","isEnterpriseLoginDisabled","enterpriseLoginURL","Skeleton","count","ResetPasswordSuccess","LoginPage","backedUpFormData","loginErrorCode","loginErrorContext","loginResult","shouldBackupState","thirdPartyErrorMessage","institutionLogin","showResetPasswordSuccessBanner","backupFormState","getTPADataFromBackend","activationMsgType","account_activation_status","useMemo","formFields","setFormFields","setErrorCode","setErrors","prevState","handleOnChange","event","handleOnFocus","prevErrors","emailOrUsername","dismissPasswordResetBanner","formData","validationErrors","validateFormFields","email_or_username","loginRequest","trackForgotPasswordLinkClick","loginPageState","login","loginFormData","creds","injectIntl","resetPasswordResultSelector","resetPassword","validateToken","getHttpClient","URL","is_account_recovery","searchParams","append","ResetPasswordFailure","ResetPasswordPage","newPasswordError","newPassword","setNewPassword","confirmPassword","setConfirmPassword","useParams","validateInput","reset_password_page","validation_decisions","validatePassword","err","validatePasswordFromBackend","some","handleOnBlur","handleConfirmPasswordChange","Spinner","animation","isPasswordValid","isPasswordConfirmed","new_password1","new_password2","handleValidateToken","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","identifyAuthenticatedUser","page","DASHBOARD_URL","assign","shouldRedirect","level_of_education","history","replaceState","push","fieldValue","saveUserProfile","snakeCaseObject","isGenderSelected","gender","isYearOfBirthSelected","year_of_birth","isLevelOfEducationSelected","isWorkExperienceSelected","work_experience","welcomePageStore","welcomePage","patchAccount","commitValues","patch","saveUserProfileInformation","FIELDS","NOT_INITIALIZED","DEFAULT_VARIATION","SIMPLIFIED_REGISTRATION_VARIATION","FIRST_STEP","SECOND_STEP","SIMPLIFIED_REGISTER_PAGE_SECOND_STEP_FIELDS","SIMPLIFIED_REGISTER_PAGE_COMMON_FIELDS","shouldDisplayFieldInExperiment","expVariation","registerPageStep","getRegisterButtonLabelInExperiment","existingButtonLabel","URL_REGEX","HTML_REGEX","INVALID_NAME_REGEX","NameField","shouldFetchUsernameSuggestions","validateName","trim","COMMON_EMAIL_PROVIDERS","DEFAULT_SERVICE_PROVIDER_DOMAINS","DEFAULT_TOP_LEVEL_DOMAINS","getLevenshteinSuggestion","word","knownWords","similarityThreshold","minEditDistance","mostSimilar","i","editDistance","distance","toLowerCase","getSuggestionForInvalidEmail","defaultDomains","suggestion","EmailField","confirmEmailValue","registrationFormData","emailSuggestion","setEmailSuggestion","handleSuggestionClick","maxLength","confirmEmailError","validateEmail","domainName","split","validateEmailAddress","validation","hasError","hasMultipleSubdomains","match","serviceLevelDomain","topLevelDomain","tldSuggestion","serviceSuggestion","Close","handleSuggestionClosed","tabIndex","usernameRegex","UsernameField","suggestedUsernameDiv","iconButton","usernameSuggestions","handleUsernameSuggestionClose","suggestedUsernames","startsWith","validateUsername","COUNTRY_CODE_KEY","COUNTRY_DISPLAY_KEY","CountryField","countryList","selectedCountry","onFocusHandler","countryFieldValue","userProvidedText","selectionValue","selectionId","backendCountryCode","countryDisplayValue","countryVal","find","validateCountryField","emptyErrorMessage","invalidCountryErrorMessage","normalizedValue","FormAutosuggest","FormAutosuggestOption","FormControlFeedback","code","HonorCode","fieldType","tosAndHonorCode","privacyPolicy","TermsOfService","termsOfService","ConfigurableRegistrationForm","setFieldErrors","autoSubmitRegistrationForm","simplifyRegistrationExpVariation","simplifiedRegistrationPageStep","getCountryList","getLocale","showTermsOfServiceAndHonorCode","showCountryField","formFieldDescriptions","honorCode","flags","countryValue","onBlurHandler","marketingEmailsOptIn","honor_code","RegistrationFailureMessage","trackSimplifyRegistrationValidatedSubmitBtnClicked","variation","trackSimplifyRegistrationInvalidFormSubmitBtnClicked","RegistrationPage","showConfigurableEdxFields","showConfigurableRegistrationFields","showMarketingEmailOptInCheckbox","registrationError","registrationErrorCode","userPipelineDataLoaded","usernameSuggestionsBackup","thirdPartyAuthErrorMessage","backendValidations","getBackendValidations","validationDecisions","filter","field","userMessage","setConfigurableFormFields","formStartTime","setFormStartTime","temporaryErrors","setTemporaryErrors","cta","buttonLabel","useSimplifyRegistrationExperimentVariation","initExpVariation","setVariation","optimizely","pageName","timer","getVariation","experiments","selectedVariant","getVariationMap","getSimplifyRegistrationExperimentVariation","trackSimplifyRegistrationFirstStepViewed","clearTimeout","is_register_page","getRegistrationDataFromBackend","Date","now","registeredEventProps","picked_suggested_username","registerUser","totalRegistrationTime","social_auth_provider","registrationInfo","prepareRegistrationPayload","initPayload","formFieldsPayload","_objectWithoutProperties","_excluded","configurableFormFieldsPayload","_excluded2","countryDescription","fieldDescriptionsPayload","_excluded3","renderForm","RegistrationFailure","confirm_email","autoSubmitRegisterForm","registrationErrorTemp","_action$payload$valid","validationWithoutUsernameSuggestions","pageStep","registerRequest","registrationInformation","authenticated_user","getFieldsValidations","fieldValidations","handleNewUserRegistration","rootSaga","all","loginSaga","registrationSaga","commonComponentsSaga","forgotPasswordSaga","resetPasswordSaga","authnProgressiveProfilingSaga","sagaMiddleware","createSagaMiddleware","configureStore","initialState","store","createStore","combineReducers","loginReducer","registerReducer","commonComponentsStoreName","commonComponentsReducer","forgotPasswordStoreName","forgotPasswordReducer","resetPasswordStoreName","resetPasswordReducer","authnProgressiveProfilingReducers","ENVIRONMENT","loggerMiddleware","createLogger","collapsed","composeWithDevTools","applyMiddleware","thunkMiddleware","compose","composeMiddleware","run","Logistration","selectedPage","tpaProviders","setInstitutionLogin","setKey","disablePublicAccountCreation","getCsrfToken","eventName","isValidTpaHint","defaultActiveKey","ArrowBackIos","tabKey","handleOnSelect","currentTab","clearThirdPartyAuthContextErrorMessage","backupRegistrationForm","backupLoginForm","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","intl","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":""}