{"version":3,"file":"app.c5f10d4043dfb0767fbe.js","mappings":"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","sources":["webpack://@edx/frontend-app-authn/./src/config/index.js","webpack://@edx/frontend-app-authn/./src/i18n/messages/paragon/index.js","webpack://@edx/frontend-app-authn/./src/i18n/messages/frontend-platform/index.js","webpack://@edx/frontend-app-authn/./src/i18n/index.js","webpack://@edx/frontend-app-authn/./src/i18n/messages/frontend-app-authn/index.js","webpack://@edx/frontend-app-authn/./src/data/constants.js","webpack://@edx/frontend-app-authn/./src/data/utils/dataUtils.js","webpack://@edx/frontend-app-authn/./src/data/utils/reduxUtils.js","webpack://@edx/frontend-app-authn/./src/data/utils/cookies.js","webpack://@edx/frontend-app-authn/./src/common-components/RedirectLogistration.jsx","webpack://@edx/frontend-app-authn/./src/common-components/EmbeddedRegistrationRoute.jsx","webpack://@edx/frontend-app-authn/./src/common-components/UnAuthOnlyRoute.jsx","webpack://@edx/frontend-app-authn/./src/common-components/NotFoundPage.jsx","webpack://@edx/frontend-app-authn/./src/common-components/messages.jsx","webpack://@edx/frontend-app-authn/./src/common-components/SocialAuthProviders.jsx","webpack://@edx/frontend-app-authn/./src/common-components/ThirdPartyAuthAlert.jsx","webpack://@edx/frontend-app-authn/./src/common-components/InstitutionLogistration.jsx","webpack://@edx/frontend-app-authn/./src/common-components/data/actions.js","webpack://@edx/frontend-app-authn/./src/common-components/data/reducers.js","webpack://@edx/frontend-app-authn/./src/common-components/data/service.js","webpack://@edx/frontend-app-authn/./src/register/data/actions.js","webpack://@edx/frontend-app-authn/./src/common-components/data/sagas.js","webpack://@edx/frontend-app-authn/./src/common-components/data/selectors.js","webpack://@edx/frontend-app-authn/./src/common-components/FormGroup.jsx","webpack://@edx/frontend-app-authn/./src/register/messages.jsx","webpack://@edx/frontend-app-authn/./src/register/RegistrationFields/EmailField/constants.js","webpack://@edx/frontend-app-authn/./src/register/RegistrationFields/EmailField/validator.js","webpack://@edx/frontend-app-authn/./src/register/RegistrationFields/NameField/validator.js","webpack://@edx/frontend-app-authn/./src/register/RegistrationFields/UsernameField/validator.js","webpack://@edx/frontend-app-authn/./src/register/data/utils.js","webpack://@edx/frontend-app-authn/./src/common-components/PasswordField.jsx","webpack://@edx/frontend-app-authn/./src/common-components/Zendesk.jsx","webpack://@edx/frontend-app-authn/./src/forgot-password/data/actions.js","webpack://@edx/frontend-app-authn/./src/forgot-password/data/selectors.js","webpack://@edx/frontend-app-authn/./src/forgot-password/messages.js","webpack://@edx/frontend-app-authn/./src/reset-password/data/constants.js","webpack://@edx/frontend-app-authn/./src/forgot-password/ForgotPasswordAlert.jsx","webpack://@edx/frontend-app-authn/./src/base-container/components/default-layout/messages.js","webpack://@edx/frontend-app-authn/./src/base-container/components/default-layout/LargeLayout.jsx","webpack://@edx/frontend-app-authn/./src/base-container/components/default-layout/MediumLayout.jsx","webpack://@edx/frontend-app-authn/./src/base-container/components/default-layout/SmallLayout.jsx","webpack://@edx/frontend-app-authn/./src/base-container/components/image-layout/messages.js","webpack://@edx/frontend-app-authn/./src/base-container/components/image-layout/LargeLayout.jsx","webpack://@edx/frontend-app-authn/./src/base-container/components/image-layout/MediumLayout.jsx","webpack://@edx/frontend-app-authn/./src/base-container/components/image-layout/SmallLayout.jsx","webpack://@edx/frontend-app-authn/./src/base-container/components/image-layout/ExtraSmallLayout.jsx","webpack://@edx/frontend-app-authn/./src/base-container/components/welcome-page-layout/messages.js","webpack://@edx/frontend-app-authn/./src/base-container/components/welcome-page-layout/LargeLayout.jsx","webpack://@edx/frontend-app-authn/./src/base-container/components/welcome-page-layout/MediumLayout.jsx","webpack://@edx/frontend-app-authn/./src/base-container/components/welcome-page-layout/SmallLayout.jsx","webpack://@edx/frontend-app-authn/./src/base-container/index.jsx","webpack://@edx/frontend-app-authn/./src/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/RegistrationFields/NameField/NameField.jsx","webpack://@edx/frontend-app-authn/./src/register/RegistrationFields/EmailField/EmailField.jsx","webpack://@edx/frontend-app-authn/./src/register/RegistrationFields/UsernameField/UsernameField.jsx","webpack://@edx/frontend-app-authn/./src/register/RegistrationFields/CountryField/validator.js","webpack://@edx/frontend-app-authn/./src/register/RegistrationFields/CountryField/CountryField.jsx","webpack://@edx/frontend-app-authn/./src/register/RegistrationFields/HonorCodeField/HonorCode.jsx","webpack://@edx/frontend-app-authn/./src/register/RegistrationFields/TermsOfServiceField/TermsOfService.jsx","webpack://@edx/frontend-app-authn/./src/register/components/ConfigurableRegistrationForm.jsx","webpack://@edx/frontend-app-authn/./src/register/components/RegistrationFailure.jsx","webpack://@edx/frontend-app-authn/./src/register/data/selectors.js","webpack://@edx/frontend-app-authn/./src/register/RegistrationPage.jsx","webpack://@edx/frontend-app-authn/./src/register/data/reducers.js","webpack://@edx/frontend-app-authn/./src/register/data/service.js","webpack://@edx/frontend-app-authn/./src/register/data/sagas.js","webpack://@edx/frontend-app-authn/./src/data/sagas.js","webpack://@edx/frontend-app-authn/./src/data/configureStore.js","webpack://@edx/frontend-app-authn/./src/data/reducers.js","webpack://@edx/frontend-app-authn/./src/logistration/Logistration.jsx","webpack://@edx/frontend-app-authn/./src/recommendations/data/constants.js","webpack://@edx/frontend-app-authn/./src/data/algolia.js","webpack://@edx/frontend-app-authn/./src/recommendations/data/algoliaResultsParser.js","webpack://@edx/frontend-app-authn/./src/recommendations/data/hooks/useAlgoliaRecommendations.jsx","webpack://@edx/frontend-app-authn/./src/recommendations/messages.js","webpack://@edx/frontend-app-authn/./src/recommendations/data/loadingCoursesPlaceholders.js","webpack://@edx/frontend-app-authn/./src/recommendations/data/utils.js","webpack://@edx/frontend-app-authn/./src/recommendations/ProductCard/BaseCard/index.jsx","webpack://@edx/frontend-app-authn/./src/recommendations/ProductCard/Footer/index.jsx","webpack://@edx/frontend-app-authn/./src/recommendations/track.js","webpack://@edx/frontend-app-authn/./src/recommendations/ProductCard/index.jsx","webpack://@edx/frontend-app-authn/./src/recommendations/RecommendationsList.jsx","webpack://@edx/frontend-app-authn/./src/recommendations/RecommendationsPageLayouts/LargeLayout.jsx","webpack://@edx/frontend-app-authn/./src/recommendations/RecommendationsPageLayouts/SmallLayout.jsx","webpack://@edx/frontend-app-authn/./src/recommendations/RecommendationsPage.jsx","webpack://@edx/frontend-app-authn/./src/common-components/RegisterFaIcons.jsx","webpack://@edx/frontend-app-authn/./src/MainApp.jsx","webpack://@edx/frontend-app-authn/./src/index.jsx"],"sourcesContent":["const configuration = {\n // Cookies related configs\n SESSION_COOKIE_DOMAIN: process.env.SESSION_COOKIE_DOMAIN,\n USER_RETENTION_COOKIE_NAME: process.env.USER_RETENTION_COOKIE_NAME || '',\n // Features\n DISABLE_ENTERPRISE_LOGIN: process.env.DISABLE_ENTERPRISE_LOGIN || '',\n ENABLE_AUTO_GENERATED_USERNAME: process.env.ENABLE_AUTO_GENERATED_USERNAME || false,\n ENABLE_DYNAMIC_REGISTRATION_FIELDS: process.env.ENABLE_DYNAMIC_REGISTRATION_FIELDS || false,\n ENABLE_PROGRESSIVE_PROFILING_ON_AUTHN: process.env.ENABLE_PROGRESSIVE_PROFILING_ON_AUTHN || false,\n ENABLE_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 TPA_UNLINKED_ACCOUNT_PROVISION_URL: process.env.TPA_UNLINKED_ACCOUNT_PROVISION_URL || null,\n // Base container images\n BANNER_IMAGE_LARGE: process.env.BANNER_IMAGE_LARGE || '',\n BANNER_IMAGE_MEDIUM: process.env.BANNER_IMAGE_MEDIUM || '',\n BANNER_IMAGE_SMALL: process.env.BANNER_IMAGE_SMALL || '',\n BANNER_IMAGE_EXTRA_SMALL: process.env.BANNER_IMAGE_EXTRA_SMALL || '',\n // Recommendation constants\n GENERAL_RECOMMENDATIONS: process.env.GENERAL_RECOMMENDATIONS || '[]',\n // Miscellaneous\n INFO_EMAIL: process.env.INFO_EMAIL || '',\n ZENDESK_KEY: process.env.ZENDESK_KEY,\n ZENDESK_LOGO_URL: process.env.ZENDESK_LOGO_URL,\n ALGOLIA_APP_ID: process.env.ALGOLIA_APP_ID || '',\n ALGOLIA_SEARCH_API_KEY: process.env.ALGOLIA_SEARCH_API_KEY || '',\n};\n\nexport default configuration;\n","// This file is generated by the openedx/frontend-platform's \"intl-import.js\" script.\n//\n// Refer to the i18n documents in https://docs.openedx.org/en/latest/developers/references/i18n.html to update\n// the file and use the Micro-frontend i18n pattern in new repositories.\n//\n\nimport messagesOfArLanguage from './ar.json';\nimport messagesOfDaLanguage from './da.json';\nimport messagesOfDeLanguage from './de.json';\nimport messagesOfDeDeLanguage from './de_DE.json';\nimport messagesOfElLanguage from './el.json';\nimport messagesOfEs419Language from './es_419.json';\nimport messagesOfEsEsLanguage from './es_ES.json';\nimport messagesOfFaLanguage from './fa.json';\nimport messagesOfFrCaLanguage from './fr_CA.json';\nimport messagesOfHeLanguage from './he.json';\nimport messagesOfHiLanguage from './hi.json';\nimport messagesOfIdLanguage from './id.json';\nimport messagesOfItItLanguage from './it_IT.json';\nimport messagesOfPtBrLanguage from './pt_BR.json';\nimport messagesOfPtPtLanguage from './pt_PT.json';\nimport messagesOfRuLanguage from './ru.json';\nimport messagesOfSwLanguage from './sw.json';\nimport messagesOfTeLanguage from './te.json';\nimport messagesOfThLanguage from './th.json';\nimport messagesOfTrTrLanguage from './tr_TR.json';\nimport messagesOfUkLanguage from './uk.json';\nimport messagesOfZhCnLanguage from './zh_CN.json';\n\nexport default {\n 'ar': messagesOfArLanguage,\n 'zh-cn': messagesOfZhCnLanguage,\n 'uk': messagesOfUkLanguage,\n 'tr-tr': messagesOfTrTrLanguage,\n 'th': messagesOfThLanguage,\n 'te': messagesOfTeLanguage,\n 'sw': messagesOfSwLanguage,\n 'ru': messagesOfRuLanguage,\n 'pt-pt': messagesOfPtPtLanguage,\n 'pt-br': messagesOfPtBrLanguage,\n 'it-it': messagesOfItItLanguage,\n 'id': messagesOfIdLanguage,\n 'hi': messagesOfHiLanguage,\n 'he': messagesOfHeLanguage,\n 'fr-ca': messagesOfFrCaLanguage,\n 'fa': messagesOfFaLanguage,\n 'es-es': messagesOfEsEsLanguage,\n 'es-419': messagesOfEs419Language,\n 'el': messagesOfElLanguage,\n 'de-de': messagesOfDeDeLanguage,\n 'de': messagesOfDeLanguage,\n 'da': messagesOfDaLanguage,\n};\n","// This file is generated by the openedx/frontend-platform's \"intl-import.js\" script.\n//\n// Refer to the i18n documents in https://docs.openedx.org/en/latest/developers/references/i18n.html to update\n// the file and use the Micro-frontend i18n pattern in new repositories.\n//\n\nimport messagesOfArLanguage from './ar.json';\nimport messagesOfDaLanguage from './da.json';\nimport messagesOfDeDeLanguage from './de_DE.json';\nimport messagesOfElLanguage from './el.json';\nimport messagesOfEs419Language from './es_419.json';\nimport messagesOfEsEsLanguage from './es_ES.json';\nimport messagesOfFaLanguage from './fa.json';\nimport messagesOfFrCaLanguage from './fr_CA.json';\nimport messagesOfHeLanguage from './he.json';\nimport messagesOfHiLanguage from './hi.json';\nimport messagesOfIdLanguage from './id.json';\nimport messagesOfItItLanguage from './it_IT.json';\nimport messagesOfPtBrLanguage from './pt_BR.json';\nimport messagesOfPtPtLanguage from './pt_PT.json';\nimport messagesOfRuLanguage from './ru.json';\nimport messagesOfTeLanguage from './te.json';\nimport messagesOfThLanguage from './th.json';\nimport messagesOfTrTrLanguage from './tr_TR.json';\nimport messagesOfUkLanguage from './uk.json';\nimport messagesOfZhCnLanguage from './zh_CN.json';\n\nexport default {\n 'ar': messagesOfArLanguage,\n 'zh-cn': messagesOfZhCnLanguage,\n 'uk': messagesOfUkLanguage,\n 'tr-tr': messagesOfTrTrLanguage,\n 'th': messagesOfThLanguage,\n 'te': messagesOfTeLanguage,\n 'ru': messagesOfRuLanguage,\n 'pt-pt': messagesOfPtPtLanguage,\n 'pt-br': messagesOfPtBrLanguage,\n 'it-it': messagesOfItItLanguage,\n 'id': messagesOfIdLanguage,\n 'hi': messagesOfHiLanguage,\n 'he': messagesOfHeLanguage,\n 'fr-ca': messagesOfFrCaLanguage,\n 'fa': messagesOfFaLanguage,\n 'es-es': messagesOfEsEsLanguage,\n 'es-419': messagesOfEs419Language,\n 'el': messagesOfElLanguage,\n 'de-de': messagesOfDeDeLanguage,\n 'da': messagesOfDaLanguage,\n};\n","// This file is generated by the openedx/frontend-platform's \"intl-import.js\" script.\n//\n// Refer to the i18n documents in https://docs.openedx.org/en/latest/developers/references/i18n.html to update\n// the file and use the Micro-frontend i18n pattern in new repositories.\n//\n\nimport messagesFromParagon from './messages/paragon';\nimport messagesFromFrontendPlatform from './messages/frontend-platform';\nimport messagesFromFrontendAppAuthn from './messages/frontend-app-authn';\n\nexport default [\n messagesFromParagon,\n messagesFromFrontendPlatform,\n messagesFromFrontendAppAuthn,\n];\n","// This file is generated by the openedx/frontend-platform's \"intl-import.js\" script.\n//\n// Refer to the i18n documents in https://docs.openedx.org/en/latest/developers/references/i18n.html to update\n// the file and use the Micro-frontend i18n pattern in new repositories.\n//\n\nimport messagesOfArLanguage from './ar.json';\nimport messagesOfDaLanguage from './da.json';\nimport messagesOfDeLanguage from './de.json';\nimport messagesOfDeDeLanguage from './de_DE.json';\nimport messagesOfElLanguage from './el.json';\nimport messagesOfEs419Language from './es_419.json';\nimport messagesOfEsEsLanguage from './es_ES.json';\nimport messagesOfFaLanguage from './fa.json';\nimport messagesOfFrCaLanguage from './fr_CA.json';\nimport messagesOfHeLanguage from './he.json';\nimport messagesOfHiLanguage from './hi.json';\nimport messagesOfIdLanguage from './id.json';\nimport messagesOfItItLanguage from './it_IT.json';\nimport messagesOfPtBrLanguage from './pt_BR.json';\nimport messagesOfPtPtLanguage from './pt_PT.json';\nimport messagesOfRuLanguage from './ru.json';\nimport messagesOfSwLanguage from './sw.json';\nimport messagesOfTeLanguage from './te.json';\nimport messagesOfThLanguage from './th.json';\nimport messagesOfTrTrLanguage from './tr_TR.json';\nimport messagesOfUkLanguage from './uk.json';\nimport messagesOfZhCnLanguage from './zh_CN.json';\n\nexport default {\n 'ar': messagesOfArLanguage,\n 'zh-cn': messagesOfZhCnLanguage,\n 'uk': messagesOfUkLanguage,\n 'tr-tr': messagesOfTrTrLanguage,\n 'th': messagesOfThLanguage,\n 'te': messagesOfTeLanguage,\n 'sw': messagesOfSwLanguage,\n 'ru': messagesOfRuLanguage,\n 'pt-pt': messagesOfPtPtLanguage,\n 'pt-br': messagesOfPtBrLanguage,\n 'it-it': messagesOfItItLanguage,\n 'id': messagesOfIdLanguage,\n 'hi': messagesOfHiLanguage,\n 'he': messagesOfHeLanguage,\n 'fr-ca': messagesOfFrCaLanguage,\n 'fa': messagesOfFaLanguage,\n 'es-es': messagesOfEsEsLanguage,\n 'es-419': messagesOfEs419Language,\n 'el': messagesOfElLanguage,\n 'de-de': messagesOfDeDeLanguage,\n 'de': messagesOfDeLanguage,\n 'da': messagesOfDaLanguage,\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});\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_EMAIL_SUGGESTIONS = 'REGISTER_SET_EMAIL_SUGGESTIONS';\n\n// Backup registration form\nexport const backupRegistrationForm = () => ({\n type: BACKUP_REGISTRATION_DATA.BASE,\n});\n\nexport const backupRegistrationFormBegin = (data) => ({\n type: BACKUP_REGISTRATION_DATA.BEGIN,\n payload: { ...data },\n});\n\n// Validate fields from the backend\nexport const fetchRealtimeValidations = (formPayload) => ({\n type: REGISTER_FORM_VALIDATIONS.BASE,\n payload: { formPayload },\n});\n\nexport const fetchRealtimeValidationsBegin = () => ({\n type: REGISTER_FORM_VALIDATIONS.BEGIN,\n});\n\nexport const fetchRealtimeValidationsSuccess = (validations) => ({\n type: REGISTER_FORM_VALIDATIONS.SUCCESS,\n payload: { validations },\n});\n\nexport const fetchRealtimeValidationsFailure = () => ({\n type: REGISTER_FORM_VALIDATIONS.FAILURE,\n});\n\n// Set email field frontend validations\nexport const setEmailSuggestionInStore = (emailSuggestion) => ({\n type: REGISTER_SET_EMAIL_SUGGESTIONS,\n payload: { emailSuggestion },\n});\n\n// Register\nexport const registerNewUser = registrationInfo => ({\n type: REGISTER_NEW_USER.BASE,\n payload: { registrationInfo },\n});\n\nexport const registerNewUserBegin = () => ({\n type: REGISTER_NEW_USER.BEGIN,\n});\n\nexport const registerNewUserSuccess = (authenticatedUser, redirectUrl, success) => ({\n type: REGISTER_NEW_USER.SUCCESS,\n payload: { authenticatedUser, redirectUrl, success },\n\n});\n\nexport const registerNewUserFailure = (error) => ({\n type: REGISTER_NEW_USER.FAILURE,\n payload: { ...error },\n});\n\nexport const clearUsernameSuggestions = () => ({\n type: REGISTER_CLEAR_USERNAME_SUGGESTIONS,\n});\n\nexport const clearRegistrationBackendError = (fieldName) => ({\n type: REGISTRATION_CLEAR_BACKEND_ERROR,\n payload: fieldName,\n});\n\nexport const setCountryFromThirdPartyAuthContext = (countryCode) => ({\n type: REGISTER_SET_COUNTRY_CODE,\n payload: { countryCode },\n});\n\nexport const setUserPipelineDataLoaded = (value) => ({\n type: REGISTER_SET_USER_PIPELINE_DATA_LOADED,\n payload: { value },\n});\n","import { logError } from '@edx/frontend-platform/logging';\nimport { call, put, takeEvery } from 'redux-saga/effects';\n\nimport {\n getThirdPartyAuthContextBegin,\n getThirdPartyAuthContextFailure,\n getThirdPartyAuthContextSuccess,\n THIRD_PARTY_AUTH_CONTEXT,\n} from './actions';\nimport {\n getThirdPartyAuthContext,\n} from './service';\nimport { setCountryFromThirdPartyAuthContext } from '../../register/data/actions';\n\nexport function* fetchThirdPartyAuthContext(action) {\n try {\n yield put(getThirdPartyAuthContextBegin());\n const {\n fieldDescriptions, optionalFields, thirdPartyAuthContext,\n } = yield call(getThirdPartyAuthContext, action.payload.urlParams);\n\n yield put(setCountryFromThirdPartyAuthContext(thirdPartyAuthContext.countryCode));\n yield put(getThirdPartyAuthContextSuccess(fieldDescriptions, optionalFields, thirdPartyAuthContext));\n } catch (e) {\n yield put(getThirdPartyAuthContextFailure());\n logError(e);\n }\n}\n\nexport default function* saga() {\n yield takeEvery(THIRD_PARTY_AUTH_CONTEXT.BASE, fetchThirdPartyAuthContext);\n}\n","import { createSelector } from 'reselect';\n\nexport const storeName = 'commonComponents';\n\nexport const commonComponentsSelector = state => ({ ...state[storeName] });\n\nexport const thirdPartyAuthContextSelector = createSelector(\n commonComponentsSelector,\n commonComponents => commonComponents.thirdPartyAuthContext,\n);\n\nexport const fieldDescriptionSelector = createSelector(\n commonComponentsSelector,\n commonComponents => commonComponents.fieldDescriptions,\n);\n\nexport const optionalFieldsSelector = createSelector(\n commonComponentsSelector,\n commonComponents => commonComponents.optionalFields,\n);\n\nexport const tpaProvidersSelector = createSelector(\n commonComponentsSelector,\n commonComponents => ({\n providers: commonComponents.thirdPartyAuthContext.providers,\n secondaryProviders: commonComponents.thirdPartyAuthContext.secondaryProviders,\n }),\n);\n","import React, { useState } from 'react';\n\nimport {\n Form, TransitionReplace,\n} from '@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});\n\nexport default messages;\n","export const COMMON_EMAIL_PROVIDERS = [\n 'hotmail.com', 'yahoo.com', 'outlook.com', 'live.com', 'gmail.com',\n];\n\nexport const DEFAULT_SERVICE_PROVIDER_DOMAINS = ['yahoo', 'hotmail', 'live', 'outlook', 'gmail'];\n\nexport const DEFAULT_TOP_LEVEL_DOMAINS = [\n 'aaa', 'aarp', 'abarth', 'abb', 'abbott', 'abbvie', 'abc', 'able', 'abogado', 'abudhabi', 'ac', 'academy',\n 'accenture', 'accountant', 'accountants', 'aco', 'active', 'actor', 'ad', 'adac', 'ads', 'adult', 'ae', 'aeg', 'aero',\n 'aetna', 'af', 'afamilycompany', 'afl', 'africa', 'ag', 'agakhan', 'agency', 'ai', 'aig', 'aigo', 'airbus', 'airforce',\n 'airtel', 'akdn', 'al', 'alfaromeo', 'alibaba', 'alipay', 'allfinanz', 'allstate', 'ally', 'alsace', 'alstom', 'am',\n 'amazon', 'americanexpress', 'americanfamily', 'amex', 'amfam', 'amica', 'amsterdam', 'an', 'analytics', 'android',\n 'anquan', 'anz', 'ao', 'aol', 'apartments', 'app', 'apple', 'aq', 'aquarelle', 'ar', 'arab', 'aramco', 'archi', 'army',\n 'arpa', 'art', 'arte', 'as', 'asda', 'asia', 'associates', 'at', 'athleta', 'attorney', 'au', 'auction', 'audi',\n 'audible', 'audio', 'auspost', 'author', 'auto', 'autos', 'avianca', 'aw', 'aws', 'ax', 'axa', 'az', 'azure', 'ba',\n 'baby', 'baidu', 'banamex', 'bananarepublic', 'band', 'bank', 'bar', 'barcelona', 'barclaycard', 'barclays',\n 'barefoot', 'bargains', 'baseball', 'basketball', 'bauhaus', 'bayern', 'bb', 'bbc', 'bbt', 'bbva', 'bcg', 'bcn', 'bd',\n 'be', 'beats', 'beauty', 'beer', 'bentley', 'berlin', 'best', 'bestbuy', 'bet', 'bf', 'bg', 'bh', 'bharti', 'bi',\n 'bible', 'bid', 'bike', 'bing', 'bingo', 'bio', 'biz', 'bj', 'bl', 'black', 'blackfriday', 'blanco', 'blockbuster',\n 'blog', 'bloomberg', 'blue', 'bm', 'bms', 'bmw', 'bn', 'bnl', 'bnpparibas', 'bo', 'boats', 'boehringer', 'bofa', 'bom',\n 'bond', 'boo', 'book', 'booking', 'boots', 'bosch', 'bostik', 'boston', 'bot', 'boutique', 'box', 'bq', 'br',\n 'bradesco', 'bridgestone', 'broadway', 'broker', 'brother', 'brussels', 'bs', 'bt', 'budapest', 'bugatti', 'build',\n 'builders', 'business', 'buy', 'buzz', 'bv', 'bw', 'by', 'bz', 'bzh', 'ca', 'cab', 'cafe', 'cal', 'call',\n 'calvinklein', 'cam', 'camera', 'camp', 'cancerresearch', 'canon', 'capetown', 'capital', 'capitalone', 'car',\n 'caravan', 'cards', 'care', 'career', 'careers', 'cars', 'cartier', 'casa', 'case', 'caseih', 'cash', 'casino', 'cat',\n 'catering', 'catholic', 'cba', 'cbn', 'cbre', 'cbs', 'cc', 'cd', 'ceb', 'center', 'ceo', 'cern', 'cf', 'cfa', 'cfd',\n 'cg', 'ch', 'chanel', 'channel', 'charity', 'chase', 'chat', 'cheap', 'chintai', 'chloe', 'christmas', 'chrome',\n 'chrysler', 'church', 'ci', 'cipriani', 'circle', 'cisco', 'citadel', 'citi', 'citic', 'city', 'cityeats', 'ck', 'cl',\n 'claims', 'cleaning', 'click', 'clinic', 'clinique', 'clothing', 'cloud', 'club', 'clubmed', 'cm', 'cn', 'co', 'coach',\n 'codes', 'coffee', 'college', 'cologne', 'com', 'comcast', 'commbank', 'community', 'company', 'compare', 'computer',\n 'comsec', 'condos', 'construction', 'consulting', 'contact', 'contractors', 'cooking', 'cookingchannel', 'cool', 'coop',\n 'corsica', 'country', 'coupon', 'coupons', 'courses', 'cpa', 'cr', 'credit', 'creditcard', 'creditunion', 'cricket',\n 'crown', 'crs', 'cruise', 'cruises', 'csc', 'cu', 'cuisinella', 'cv', 'cw', 'cx', 'cy', 'cymru', 'cyou', 'cz', 'dabur',\n 'dad', 'dance', 'data', 'date', 'dating', 'datsun', 'day', 'dclk', 'dds', 'de', 'deal', 'dealer', 'deals', 'degree',\n 'delivery', 'dell', 'deloitte', 'delta', 'democrat', 'dental', 'dentist', 'desi', 'design', 'dev', 'dhl', 'diamonds',\n 'diet', 'digital', 'direct', 'directory', 'discount', 'discover', 'dish', 'diy', 'dj', 'dk', 'dm', 'dnp', 'do', 'docs',\n 'doctor', 'dodge', 'dog', 'doha', 'domains', 'doosan', 'dot', 'download', 'drive', 'dtv', 'dubai', 'duck', 'dunlop',\n 'duns', 'dupont', 'durban', 'dvag', 'dvr', 'dz', 'earth', 'eat', 'ec', 'eco', 'edeka', 'edu', 'education', 'ee', 'eg',\n 'eh', 'email', 'emerck', 'energy', 'engineer', 'engineering', 'enterprises', 'epost', 'epson', 'equipment', 'er',\n 'ericsson', 'erni', 'es', 'esq', 'estate', 'esurance', 'et', 'etisalat', 'eu', 'eurovision', 'eus', 'events', 'everbank',\n 'exchange', 'expert', 'exposed', 'express', 'extraspace', 'fage', 'fail', 'fairwinds', 'faith', 'family', 'fan', 'fans',\n 'farm', 'farmers', 'fashion', 'fast', 'fedex', 'feedback', 'ferrari', 'ferrero', 'fi', 'fiat', 'fidelity', 'fido', 'film',\n 'final', 'finance', 'financial', 'fire', 'firestone', 'firmdale', 'fish', 'fishing', 'fit', 'fitness', 'fj', 'fk',\n 'flickr', 'flights', 'flir', 'florist', 'flowers', 'flsmidth', 'fly', 'fm', 'fo', 'foo', 'food', 'foodnetwork', 'football',\n 'ford', 'forex', 'forsale', 'forum', 'foundation', 'fox', 'fr', 'free', 'fresenius', 'frl', 'frogans', 'frontdoor',\n 'frontier', 'ftr', 'fujitsu', 'fujixerox', 'fun', 'fund', 'furniture', 'futbol', 'fyi', 'ga', 'gal', 'gallery', 'gallo',\n 'gallup', 'game', 'games', 'gap', 'garden', 'gay', 'gb', 'gbiz', 'gd', 'gdn', 'ge', 'gea', 'gent', 'genting', 'george',\n 'gf', 'gg', 'ggee', 'gh', 'gi', 'gift', 'gifts', 'gives', 'giving', 'gl', 'glade', 'glass', 'gle', 'global', 'globo',\n 'gm', 'gmail', 'gmbh', 'gmo', 'gmx', 'gn', 'godaddy', 'gold', 'goldpoint', 'golf', 'goo', 'goodhands', 'goodyear', 'goog',\n 'google', 'gop', 'got', 'gov', 'gp', 'gq', 'gr', 'grainger', 'graphics', 'gratis', 'green', 'gripe', 'grocery', 'group',\n 'gs', 'gt', 'gu', 'guardian', 'gucci', 'guge', 'guide', 'guitars', 'guru', 'gw', 'gy', 'hair', 'hamburg', 'hangout',\n 'haus', 'hbo', 'hdfc', 'hdfcbank', 'health', 'healthcare', 'help', 'helsinki', 'here', 'hermes', 'hgtv', 'hiphop',\n 'hisamitsu', 'hitachi', 'hiv', 'hk', 'hkt', 'hm', 'hn', 'hockey', 'holdings', 'holiday', 'homedepot', 'homegoods',\n 'homes', 'homesense', 'honda', 'honeywell', 'horse', 'hospital', 'host', 'hosting', 'hot', 'hoteles', 'hotels', 'hotmail',\n 'house', 'how', 'hr', 'hsbc', 'ht', 'htc', 'hu', 'hughes', 'hyatt', 'hyundai', 'ibm', 'icbc', 'ice', 'icu', 'id', 'ie',\n 'ieee', 'ifm', 'iinet', 'ikano', 'il', 'im', 'imamat', 'imdb', 'immo', 'immobilien', 'in', 'inc', 'industries', 'infiniti',\n 'info', 'ing', 'ink', 'institute', 'insurance', 'insure', 'int', 'intel', 'international', 'intuit', 'investments',\n 'io', 'ipiranga', 'iq', 'ir', 'irish', 'is', 'iselect', 'ismaili', 'ist', 'istanbul', 'it', 'itau', 'itv', 'iveco', 'iwc',\n 'jaguar', 'java', 'jcb', 'jcp', 'je', 'jeep', 'jetzt', 'jewelry', 'jio', 'jlc', 'jll', 'jm', 'jmp', 'jnj', 'jo',\n 'jobs', 'joburg', 'jot', 'joy', 'jp', 'jpmorgan', 'jprs', 'juegos', 'juniper', 'kaufen', 'kddi', 'ke', 'kerryhotels',\n 'kerrylogistics', 'kerryproperties', 'kfh', 'kg', 'kh', 'ki', 'kia', 'kim', 'kinder', 'kindle', 'kitchen', 'kiwi', 'km',\n 'kn', 'koeln', 'komatsu', 'kosher', 'kp', 'kpmg', 'kpn', 'kr', 'krd', 'kred', 'kuokgroup', 'kw', 'ky', 'kyoto', 'kz',\n 'la', 'lacaixa', 'ladbrokes', 'lamborghini', 'lamer', 'lancaster', 'lancia', 'lancome', 'land', 'landrover', 'lanxess',\n 'lasalle', 'lat', 'latino', 'latrobe', 'law', 'lawyer', 'lb', 'lc', 'lds', 'lease', 'leclerc', 'lefrak', 'legal',\n 'lego', 'lexus', 'lgbt', 'li', 'liaison', 'lidl', 'life', 'lifeinsurance', 'lifestyle', 'lighting', 'like', 'lilly',\n 'limited', 'limo', 'lincoln', 'linde', 'link', 'lipsy', 'live', 'living', 'lixil', 'lk', 'llc', 'llp', 'loan', 'loans',\n 'locker', 'locus', 'loft', 'lol', 'london', 'lotte', 'lotto', 'love', 'lpl', 'lplfinancial', 'lr', 'ls', 'lt', 'ltd',\n 'ltda', 'lu', 'lundbeck', 'lupin', 'luxe', 'luxury', 'lv', 'ly', 'ma', 'macys', 'madrid', 'maif', 'maison', 'makeup',\n 'man', 'management', 'mango', 'map', 'market', 'marketing', 'markets', 'marriott', 'marshalls', 'maserati', 'mattel',\n 'mba', 'mc', 'mcd', 'mcdonalds', 'mckinsey', 'md', 'me', 'med', 'media', 'meet', 'melbourne', 'meme', 'memorial', 'men',\n 'menu', 'meo', 'merckmsd', 'metlife', 'mf', 'mg', 'mh', 'miami', 'microsoft', 'mil', 'mini', 'mint', 'mit', 'mitsubishi',\n 'mk', 'ml', 'mlb', 'mls', 'mm', 'mma', 'mn', 'mo', 'mobi', 'mobile', 'mobily', 'moda', 'moe', 'moi', 'mom', 'monash',\n 'money', 'monster', 'montblanc', 'mopar', 'mormon', 'mortgage', 'moscow', 'moto', 'motorcycles', 'mov', 'movie', 'movistar',\n 'mp', 'mq', 'mr', 'ms', 'msd', 'mt', 'mtn', 'mtpc', 'mtr', 'mu', 'museum', 'mutual', 'mutuelle', 'mv', 'mw', 'mx', 'my',\n 'mz', 'na', 'nab', 'nadex', 'nagoya', 'name', 'nationwide', 'natura', 'navy', 'nba', 'nc', 'ne', 'nec', 'net', 'netbank',\n 'netflix', 'network', 'neustar', 'new', 'newholland', 'news', 'next', 'nextdirect', 'nexus', 'nf', 'nfl', 'ng', 'ngo', 'nhk',\n 'ni', 'nico', 'nike', 'nikon', 'ninja', 'nissan', 'nissay', 'nl', 'no', 'nokia', 'northwesternmutual', 'norton', 'now',\n 'nowruz', 'nowtv', 'np', 'nr', 'nra', 'nrw', 'ntt', 'nu', 'nyc', 'nz', 'obi', 'observer', 'off', 'office', 'okinawa',\n 'olayan', 'olayangroup', 'oldnavy', 'ollo', 'om', 'omega', 'one', 'ong', 'onl', 'online', 'onyourside', 'ooo', 'open',\n 'oracle', 'orange', 'org', 'organic', 'orientexpress', 'origins', 'osaka', 'otsuka', 'ott', 'ovh', 'pa', 'page',\n 'pamperedchef', 'panasonic', 'panerai', 'paris', 'pars', 'partners', 'parts', 'party', 'passagens', 'pay', 'pccw', 'pe',\n 'pet', 'pf', 'pfizer', 'pg', 'ph', 'pharmacy', 'phd', 'philips', 'phone', 'photo', 'photography', 'photos', 'physio',\n 'piaget', 'pics', 'pictet', 'pictures', 'pid', 'pin', 'ping', 'pink', 'pioneer', 'pizza', 'pk', 'pl', 'place', 'play',\n 'playstation', 'plumbing', 'plus', 'pm', 'pn', 'pnc', 'pohl', 'poker', 'politie', 'porn', 'post', 'pr', 'pramerica',\n 'praxi', 'press', 'prime', 'pro', 'prod', 'productions', 'prof', 'progressive', 'promo', 'properties', 'property',\n 'protection', 'pru', 'prudential', 'ps', 'pt', 'pub', 'pw', 'pwc', 'py', 'qa', 'qpon', 'quebec', 'quest', 'qvc',\n 'racing', 'radio', 'raid', 're', 'read', 'realestate', 'realtor', 'realty', 'recipes', 'red', 'redstone', 'redumbrella',\n 'rehab', 'reise', 'reisen', 'reit', 'reliance', 'ren', 'rent', 'rentals', 'repair', 'report', 'republican', 'rest',\n 'restaurant', 'review', 'reviews', 'rexroth', 'rich', 'richardli', 'ricoh', 'rightathome', 'ril', 'rio', 'rip', 'rmit',\n 'ro', 'rocher', 'rocks', 'rodeo', 'rogers', 'room', 'rs', 'rsvp', 'ru', 'rugby', 'ruhr', 'run', 'rw', 'rwe', 'ryukyu',\n 'sa', 'saarland', 'safe', 'safety', 'sakura', 'sale', 'salon', 'samsclub', 'samsung', 'sandvik', 'sandvikcoromant',\n 'sanofi', 'sap', 'sapo', 'sarl', 'sas', 'save', 'saxo', 'sb', 'sbi', 'sbs', 'sc', 'sca', 'scb', 'schaeffler', 'schmidt',\n 'scholarships', 'school', 'schule', 'schwarz', 'science', 'scjohnson', 'scor', 'scot', 'sd', 'se', 'search', 'seat',\n 'secure', 'security', 'seek', 'select', 'sener', 'services', 'ses', 'seven', 'sew', 'sex', 'sexy', 'sfr', 'sg', 'sh',\n 'shangrila', 'sharp', 'shaw', 'shell', 'shia', 'shiksha', 'shoes', 'shop', 'shopping', 'shouji', 'show', 'showtime',\n 'shriram', 'si', 'silk', 'sina', 'singles', 'site', 'sj', 'sk', 'ski', 'skin', 'sky', 'skype', 'sl', 'sling', 'sm',\n 'smart', 'smile', 'sn', 'sncf', 'so', 'soccer', 'social', 'softbank', 'software', 'sohu', 'solar', 'solutions', 'song',\n 'sony', 'soy', 'spa', 'space', 'spiegel', 'sport', 'spot', 'spreadbetting', 'sr', 'srl', 'srt', 'ss', 'st', 'stada',\n 'staples', 'star', 'starhub', 'statebank', 'statefarm', 'statoil', 'stc', 'stcgroup', 'stockholm', 'storage', 'store',\n 'stream', 'studio', 'study', 'style', 'su', 'sucks', 'supplies', 'supply', 'support', 'surf', 'surgery', 'suzuki', 'sv',\n 'swatch', 'swiftcover', 'swiss', 'sx', 'sy', 'sydney', 'symantec', 'systems', 'sz', 'tab', 'taipei', 'talk', 'taobao',\n 'target', 'tatamotors', 'tatar', 'tattoo', 'tax', 'taxi', 'tc', 'tci', 'td', 'tdk', 'team', 'tech', 'technology', 'tel',\n 'telecity', 'telefonica', 'temasek', 'tennis', 'teva', 'tf', 'tg', 'th', 'thd', 'theater', 'theatre', 'tiaa', 'tickets',\n 'tienda', 'tiffany', 'tips', 'tires', 'tirol', 'tj', 'tjmaxx', 'tjx', 'tk', 'tkmaxx', 'tl', 'tm', 'tmall', 'tn', 'to',\n 'today', 'tokyo', 'tools', 'top', 'toray', 'toshiba', 'total', 'tours', 'town', 'toyota', 'toys', 'tp', 'tr', 'trade',\n 'trading', 'training', 'travel', 'travelchannel', 'travelers', 'travelersinsurance', 'trust', 'trv', 'tt', 'tube', 'tui',\n 'tunes', 'tushu', 'tv', 'tvs', 'tw', 'tz', 'ua', 'ubank', 'ubs', 'uconnect', 'ug', 'uk', 'um', 'unicom', 'university',\n 'uno', 'uol', 'ups', 'us', 'uy', 'uz', 'va', 'vacations', 'vana', 'vanguard', 'vc', 've', 'vegas', 'ventures', 'verisign',\n 'versicherung', 'vet', 'vg', 'vi', 'viajes', 'video', 'vig', 'viking', 'villas', 'vin', 'vip', 'virgin', 'visa', 'vision',\n 'vista', 'vistaprint', 'viva', 'vivo', 'vlaanderen', 'vn', 'vodka', 'volkswagen', 'volvo', 'vote', 'voting', 'voto',\n 'voyage', 'vu', 'vuelos', 'wales', 'walmart', 'walter', 'wang', 'wanggou', 'warman', 'watch', 'watches', 'weather',\n 'weatherchannel', 'webcam', 'weber', 'website', 'wed', 'wedding', 'weibo', 'weir', 'wf', 'whoswho', 'wien', 'wiki',\n 'williamhill', 'win', 'windows', 'wine', 'winners', 'wme', 'wolterskluwer', 'woodside', 'work', 'works', 'world', 'wow',\n 'ws', 'wtc', 'wtf', 'xbox', 'xerox', 'xfinity', 'xihuan', 'xin', '测试', 'कॉम', 'परीक्षा', 'セール', '佛山', 'ಭಾರತ', '慈善',\n '集团', '在线', '한국', 'ଭାରତ', '大众汽车', '点看', 'คอม', 'ভাৰত', 'ভারত', '八卦', 'ישראל\\u200e', 'موقع\\u200e', 'বাংলা', '公益',\n '公司', '香格里拉', '网站', '移动', '我爱你', 'москва', 'испытание', 'қаз', 'католик', 'онлайн', 'сайт', '联通', 'срб', 'бг',\n 'бел', 'קום\\u200e', '时尚', '微博', '테스트', '淡马锡', 'ファッション', 'орг', 'नेट', 'ストア', 'アマゾン', '삼성', 'சிங்கப்பூர்', '商标',\n '商店', '商城', 'дети', 'мкд', 'טעסט\\u200e', 'ею', 'ポイント', '新闻', '工行', '家電', 'كوم\\u200e', '中文网', '中信', '中国',\n '中國', '娱乐', '谷歌', 'భారత్', 'ලංකා', '電訊盈科', '购物', '測試', 'クラウド', 'ભારત', '通販', 'भारतम्', 'भारत', 'भारोत', 'آزمایشی\\u200e',\n 'பரிட்சை', '网店', 'संगठन', '餐厅', '网络', 'ком', 'укр', '香港', '亚马逊', '诺基亚', '食品', 'δοκιμή', '飞利浦', 'إختبار\\u200e',\n '台湾', '台灣', '手表', '手机', 'мон', 'الجزائر\\u200e', 'عمان\\u200e', 'ارامكو\\u200e', 'ایران\\u200e', 'العليان\\u200e',\n 'اتصالات\\u200e', 'امارات\\u200e', 'بازار\\u200e', 'موريتانيا\\u200e', 'پاکستان\\u200e', 'الاردن\\u200e', 'موبايلي\\u200e',\n 'بارت\\u200e', 'بھارت\\u200e', 'المغرب\\u200e', 'ابوظبي\\u200e', 'البحرين\\u200e', 'السعودية\\u200e', 'ڀارت\\u200e',\n 'كاثوليك\\u200e', 'سودان\\u200e', 'همراه\\u200e', 'عراق\\u200e', 'مليسيا\\u200e', '澳門', '닷컴', '政府', 'شبكة\\u200e',\n 'بيتك\\u200e', 'عرب\\u200e', 'გე', '机构', '组织机构', '健康', 'ไทย', 'سورية\\u200e', '招聘', 'рус', 'рф', '珠宝',\n 'تونس\\u200e', '大拿', 'ລາວ', 'みんな', 'グーグル', 'ευ', 'ελ', '世界', '書籍', 'ഭാരതം', 'ਭਾਰਤ', '网址', '닷넷', 'コム',\n '天主教', '游戏', 'vermögensberater', 'vermögensberatung', '企业', '信息', '嘉里大酒店', '嘉里', 'مصر\\u200e',\n 'قطر\\u200e', '广东', 'இலங்கை', 'இந்தியா', 'հայ', '新加坡', 'فلسطين\\u200e', 'テスト', '政务', 'xperia', 'xxx',\n 'xyz', 'yachts', 'yahoo', 'yamaxun', 'yandex', 'ye', 'yodobashi', 'yoga', 'yokohama', 'you', 'youtube', 'yt',\n 'yun', 'za', 'zappos', 'zara', 'zero', 'zip', 'zippo', 'zm', 'zone', 'zuerich', 'zw',\n];\n","import { distance } from 'fastest-levenshtein';\n\nimport {\n COMMON_EMAIL_PROVIDERS,\n DEFAULT_SERVICE_PROVIDER_DOMAINS,\n DEFAULT_TOP_LEVEL_DOMAINS,\n} from './constants';\nimport { VALID_EMAIL_REGEX } from '../../../data/constants';\nimport messages from '../../messages';\n\nexport const emailRegex = new RegExp(VALID_EMAIL_REGEX, 'i');\n\nexport const getLevenshteinSuggestion = (word, knownWords, similarityThreshold = 4) => {\n if (!word) {\n return null;\n }\n\n let minEditDistance = 100;\n let mostSimilar = word;\n\n for (let i = 0; i < knownWords.length; i++) {\n const editDistance = distance(knownWords[i].toLowerCase(), word.toLowerCase());\n if (editDistance < minEditDistance) {\n minEditDistance = editDistance;\n mostSimilar = knownWords[i];\n }\n }\n\n return minEditDistance <= similarityThreshold && word !== mostSimilar ? mostSimilar : null;\n};\n\nexport const getSuggestionForInvalidEmail = (domain, username) => {\n if (!domain) {\n return '';\n }\n\n const defaultDomains = ['yahoo', 'aol', 'hotmail', 'live', 'outlook', 'gmail'];\n const suggestion = getLevenshteinSuggestion(domain, COMMON_EMAIL_PROVIDERS);\n\n if (suggestion) {\n return `${username}@${suggestion}`;\n }\n\n for (let i = 0; i < defaultDomains.length; i++) {\n if (domain.includes(defaultDomains[i])) {\n return `${username}@${defaultDomains[i]}.com`;\n }\n }\n\n return '';\n};\n\nexport const validateEmailAddress = (value, username, domainName) => {\n let suggestion = null;\n const validation = {\n hasError: false,\n suggestion: '',\n type: '',\n };\n\n const hasMultipleSubdomains = value.match(/\\./g).length > 1;\n const [serviceLevelDomain, topLevelDomain] = domainName.split('.');\n const tldSuggestion = !DEFAULT_TOP_LEVEL_DOMAINS.includes(topLevelDomain);\n const serviceSuggestion = getLevenshteinSuggestion(serviceLevelDomain, DEFAULT_SERVICE_PROVIDER_DOMAINS, 2);\n\n if (DEFAULT_SERVICE_PROVIDER_DOMAINS.includes(serviceSuggestion || serviceLevelDomain)) {\n suggestion = `${username}@${serviceSuggestion || serviceLevelDomain}.com`;\n }\n\n if (!hasMultipleSubdomains && tldSuggestion) {\n validation.suggestion = suggestion;\n validation.type = 'error';\n } else if (serviceSuggestion) {\n validation.suggestion = suggestion;\n validation.type = 'warning';\n } else {\n suggestion = getLevenshteinSuggestion(domainName, COMMON_EMAIL_PROVIDERS, 3);\n if (suggestion) {\n validation.suggestion = `${username}@${suggestion}`;\n validation.type = 'warning';\n }\n }\n\n if (!hasMultipleSubdomains && tldSuggestion) {\n validation.hasError = true;\n }\n\n return validation;\n};\n\nconst validateEmail = (value, confirmEmailValue, formatMessage) => {\n let fieldError = '';\n let confirmEmailError = '';\n let emailSuggestion = { suggestion: '', type: '' };\n\n if (!value) {\n fieldError = formatMessage(messages['empty.email.field.error']);\n } else if (value.length <= 2) {\n fieldError = formatMessage(messages['email.invalid.format.error']);\n } else {\n const [username, domainName] = value.split('@');\n // Check if email address is invalid. If we have a suggestion for invalid email\n // provide that along with the error message.\n if (!emailRegex.test(value)) {\n fieldError = formatMessage(messages['email.invalid.format.error']);\n emailSuggestion = {\n suggestion: getSuggestionForInvalidEmail(domainName, username),\n type: 'error',\n };\n } else {\n const response = validateEmailAddress(value, username, domainName);\n if (response.hasError) {\n fieldError = formatMessage(messages['email.invalid.format.error']);\n delete response.hasError;\n }\n emailSuggestion = { ...response };\n\n if (confirmEmailValue && value !== confirmEmailValue) {\n confirmEmailError = formatMessage(messages['email.do.not.match']);\n }\n }\n }\n return { fieldError, confirmEmailError, suggestion: emailSuggestion };\n};\n\nexport default validateEmail;\n","import messages from '../../messages';\n\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 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 { snakeCaseObject } from '@edx/frontend-platform';\n\nimport { LETTER_REGEX, NUMBER_REGEX } from '../../data/constants';\nimport messages from '../messages';\nimport validateEmail from '../RegistrationFields/EmailField/validator';\nimport validateName from '../RegistrationFields/NameField/validator';\nimport validateUsername from '../RegistrationFields/UsernameField/validator';\n\n/**\n * It validates the password field value\n * @param value\n * @param formatMessage\n * @returns {string}\n */\nexport const validatePasswordField = (value, formatMessage) => {\n let fieldError = '';\n if (!value || !LETTER_REGEX.test(value) || !NUMBER_REGEX.test(value) || value.length < 8) {\n fieldError = formatMessage(messages['password.validation.message']);\n }\n return fieldError;\n};\n\n/**\n * It accepts complete registration data as payload and checks if the form is valid.\n * @param payload\n * @param errors\n * @param configurableFormFields\n * @param fieldDescriptions\n * @param formatMessage\n * @returns {{fieldErrors, isValid: boolean}}\n */\nexport const isFormValid = (\n payload,\n errors,\n configurableFormFields,\n fieldDescriptions,\n formatMessage,\n) => {\n const fieldErrors = { ...errors };\n let isValid = true;\n let emailSuggestion = { suggestion: '', type: '' };\n\n Object.keys(payload).forEach(key => {\n switch (key) {\n case 'name':\n fieldErrors.name = validateName(payload.name, formatMessage);\n if (fieldErrors.name) { isValid = false; }\n break;\n case 'email': {\n const {\n fieldError, confirmEmailError, suggestion,\n } = validateEmail(payload.email, configurableFormFields?.confirm_email, formatMessage);\n if (fieldError) {\n fieldErrors.email = fieldError;\n isValid = false;\n }\n if (confirmEmailError) {\n fieldErrors.confirm_email = confirmEmailError;\n isValid = false;\n }\n emailSuggestion = suggestion;\n break;\n }\n case 'username':\n fieldErrors.username = validateUsername(payload.username, formatMessage);\n if (fieldErrors.username) { isValid = false; }\n break;\n case 'password':\n fieldErrors.password = validatePasswordField(payload.password, formatMessage);\n if (fieldErrors.password) { isValid = false; }\n break;\n default:\n break;\n }\n });\n\n // 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]) { isValid = false; }\n });\n\n return { isValid, fieldErrors, emailSuggestion };\n};\n\n/**\n * It prepares a payload for registration data that can be passed to registration API endpoint.\n * @param initPayload\n * @param configurableFormFields\n * @param showMarketingEmailOptInCheckbox\n * @param totalRegistrationTime\n * @param queryParams\n * @returns {*}\n */\nexport const prepareRegistrationPayload = (\n initPayload,\n configurableFormFields,\n showMarketingEmailOptInCheckbox,\n totalRegistrationTime,\n queryParams,\n) => {\n let payload = { ...initPayload };\n Object.keys(configurableFormFields).forEach((fieldName) => {\n if (fieldName === 'country') {\n payload[fieldName] = configurableFormFields[fieldName].countryCode;\n } else {\n payload[fieldName] = configurableFormFields[fieldName];\n }\n });\n\n // Don't send the marketing email opt-in value if the flag is turned off\n if (!showMarketingEmailOptInCheckbox) {\n delete payload.marketingEmailsOptIn;\n }\n\n payload = snakeCaseObject(payload);\n payload.totalRegistrationTime = totalRegistrationTime;\n\n // add query params to the payload\n payload = { ...payload, ...queryParams };\n return payload;\n};\n","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});\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 {formatMessage(messages['start.learning'])}\n
\n {formatMessage(messages['with.site.name'], { siteName: getConfig().SITE_NAME })}\n
\n \n
\n
\n
\n \n \n \n \n \n
\n
\n );\n};\n\nexport default LargeLayout;\n","import React from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { Hyperlink, Image } from '@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 {formatMessage(messages['start.learning'])}{' '}\n \n {formatMessage(messages['with.site.name'], { siteName: getConfig().SITE_NAME })}\n \n \n \n
\n
\n
\n
\n \n \n \n \n \n
\n
\n \n );\n};\n\nexport default MediumLayout;\n","import React from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { Hyperlink, Image } from '@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 {formatMessage(messages['start.learning'])}{' '}\n \n {formatMessage(messages['with.site.name'], { siteName: getConfig().SITE_NAME })}\n \n \n \n
\n
\n \n );\n};\n\nexport default SmallLayout;\n","import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n 'your.career.turning.point': {\n id: 'your.career.turning.point',\n defaultMessage: 'Your career turning point',\n description: 'Part of the heading \"Your career turning point is here.\" shown on Authn MFE',\n },\n 'is.here': {\n id: 'is.here',\n defaultMessage: 'is here.',\n description: 'Part of the heading \"Your career turning point is here.\" shown on Authn MFE',\n },\n});\n\nexport default messages;\n","import React from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { Hyperlink, Image } from '@openedx/paragon';\n\nimport './index.scss';\nimport messages from './messages';\n\nconst LargeLayout = () => {\n const { formatMessage } = useIntl();\n\n return (\n \n \n {getConfig().SITE_NAME}\n \n
\n

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

\n
\n
\n );\n};\n\nexport default LargeLayout;\n","import React from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { Hyperlink, Image } from '@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

\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

\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\nconst BaseContainer = ({ children, showWelcomeBanner, fullName }) => {\n const enableImageLayout = getConfig().ENABLE_IMAGE_LAYOUT;\n\n if (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 const isThirdPartyAuthActive = isSocialAuthActive || (isEnterpriseLoginDisabled && isInstitutionAuthActive);\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 && isThirdPartyAuthActive ? (\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 const unlinkedProvisionUrl = getConfig().TPA_UNLINKED_ACCOUNT_PROVISION_URL;\n\n /**\n * When currentProvider exists and we are in a login page, it is\n * because the third-party authenticated account is not linked.\n * See also ThirdPartyAuthAlert.jsx.\n */\n if (currentProvider && unlinkedProvisionUrl) {\n window.location.href = unlinkedProvisionUrl;\n return null;\n }\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","import React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport PropTypes from 'prop-types';\n\nimport validateName from './validator';\nimport { FormGroup } from '../../../common-components';\nimport { clearRegistrationBackendError, fetchRealtimeValidations } from '../../data/actions';\n\n/**\n * Name field wrapper. It accepts following handlers\n * - handleChange for setting value change and\n * - handleErrorChange for setting error\n *\n * It is responsible for\n * - Making backend call for generating username suggestions\n * - Performing name field validations\n * - Clearing error on focus\n * - Setting value on change\n */\nconst NameField = (props) => {\n const { formatMessage } = useIntl();\n const dispatch = useDispatch();\n const validationApiRateLimited = useSelector(state => state.register.validationApiRateLimited);\n\n const {\n handleErrorChange,\n shouldFetchUsernameSuggestions,\n } = props;\n\n const handleOnBlur = (e) => {\n const { value } = e.target;\n const fieldError = validateName(value, formatMessage);\n if (fieldError) {\n handleErrorChange('name', fieldError);\n } else if (shouldFetchUsernameSuggestions && !validationApiRateLimited) {\n dispatch(fetchRealtimeValidations({ name: value }));\n }\n };\n\n const handleOnFocus = () => {\n handleErrorChange('name', '');\n dispatch(clearRegistrationBackendError('name'));\n };\n\n return (\n \n );\n};\n\nNameField.defaultProps = {\n errorMessage: '',\n shouldFetchUsernameSuggestions: false,\n};\n\nNameField.propTypes = {\n errorMessage: PropTypes.string,\n shouldFetchUsernameSuggestions: PropTypes.bool,\n value: PropTypes.string.isRequired,\n handleChange: PropTypes.func.isRequired,\n handleErrorChange: PropTypes.func.isRequired,\n};\n\nexport default NameField;\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { Alert, Icon } from '@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 clearRegistrationBackendError,\n fetchRealtimeValidations,\n setEmailSuggestionInStore,\n} from '../../data/actions';\nimport messages from '../../messages';\n\n/**\n * Email field wrapper. It accepts following handlers\n * - handleChange for setting value change and\n * - handleErrorChange for setting error\n *\n * It is responsible for\n * - Generating email warning and error suggestions\n * - Setting and clearing email suggestions\n * - Performing email field validations\n * - clearing error on focus\n * - setting value on change\n */\nconst EmailField = (props) => {\n const { formatMessage } = useIntl();\n const dispatch = useDispatch();\n\n const {\n handleChange,\n handleErrorChange,\n confirmEmailValue,\n } = props;\n\n const backedUpFormData = useSelector(state => state.register.registrationFormData);\n const validationApiRateLimited = useSelector(state => state.register.validationApiRateLimited);\n\n const [emailSuggestion, setEmailSuggestion] = useState({ ...backedUpFormData?.emailSuggestion });\n\n useEffect(() => {\n setEmailSuggestion(backedUpFormData.emailSuggestion);\n }, [backedUpFormData.emailSuggestion]);\n\n const handleOnBlur = (e) => {\n const { value } = e.target;\n const { fieldError, confirmEmailError, suggestion } = validateEmail(value, confirmEmailValue, formatMessage);\n\n if (confirmEmailError) {\n handleErrorChange('confirm_email', confirmEmailError);\n }\n\n dispatch(setEmailSuggestionInStore(suggestion));\n setEmailSuggestion(suggestion);\n\n if (fieldError) {\n handleErrorChange('email', fieldError);\n } else if (!validationApiRateLimited) {\n dispatch(fetchRealtimeValidations({ email: value }));\n }\n };\n\n const handleOnFocus = () => {\n handleErrorChange('email', '');\n dispatch(clearRegistrationBackendError('email'));\n };\n\n const handleSuggestionClick = (event) => {\n event.preventDefault();\n handleErrorChange('email', '');\n handleChange({ target: { name: 'email', value: emailSuggestion.suggestion } });\n setEmailSuggestion({ suggestion: '', type: '' });\n };\n\n const handleSuggestionClosed = () => setEmailSuggestion({ suggestion: '', type: '' });\n\n const renderEmailFeedback = () => {\n if (emailSuggestion.type === 'error') {\n return (\n \n \n {formatMessage(messages['did.you.mean.alert.text'])}{' '}\n \n {emailSuggestion.suggestion}\n ?\n \n \n \n );\n }\n return (\n \n {formatMessage(messages['did.you.mean.alert.text'])}:{' '}\n \n {emailSuggestion.suggestion}\n ?\n \n );\n };\n\n return (\n \n {emailSuggestion.suggestion ? renderEmailFeedback() : null}\n \n );\n};\n\nEmailField.defaultProps = {\n errorMessage: '',\n confirmEmailValue: null,\n};\n\nEmailField.propTypes = {\n errorMessage: PropTypes.string,\n value: PropTypes.string.isRequired,\n handleChange: PropTypes.func.isRequired,\n handleErrorChange: PropTypes.func.isRequired,\n confirmEmailValue: PropTypes.string,\n};\n\nexport default EmailField;\n","import React, { useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { Button, Icon, IconButton } from '@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 = useSelector(state => state.register.usernameSuggestions);\n const validationApiRateLimited = useSelector(state => state.register.validationApiRateLimited);\n\n /**\n * We need to remove the placeholder from the field, adding a space will do that.\n * This is needed because we are placing the username suggestions on top of the field.\n */\n useEffect(() => {\n if (usernameSuggestions.length && !value) {\n handleChange({ target: { name: 'username', value: ' ' } });\n }\n }, [handleChange, usernameSuggestions, value]);\n\n const handleOnBlur = (event) => {\n const { value: username } = event.target;\n const fieldError = validateUsername(username, formatMessage);\n if (fieldError) {\n handleErrorChange('username', fieldError);\n } else if (!validationApiRateLimited) {\n dispatch(fetchRealtimeValidations({ username }));\n }\n };\n\n const handleOnChange = (event) => {\n let username = event.target.value;\n if (username.length > 30) {\n return;\n }\n if (event.target.value.startsWith(' ')) {\n username = username.trim();\n }\n handleChange({ target: { name: 'username', value: username } });\n };\n\n const handleOnFocus = (event) => {\n const username = event.target.value;\n dispatch(clearUsernameSuggestions());\n // If we added a space character to username field to display the suggestion\n // remove it before user enters the input. This is to ensure user doesn't\n // have a space prefixed to the username.\n if (username === ' ') {\n handleChange({ target: { name: 'username', value: '' } });\n }\n handleErrorChange('username', '');\n dispatch(clearRegistrationBackendError('username'));\n };\n\n const handleSuggestionClick = (event, suggestion = '') => {\n event.preventDefault();\n handleErrorChange('username', ''); // clear error\n handleChange({ target: { name: 'username', value: suggestion } }); // to set suggestion as value\n dispatch(clearUsernameSuggestions());\n };\n\n const handleUsernameSuggestionClose = () => {\n handleChange({ target: { name: 'username', value: '' } }); // to remove space in field\n dispatch(clearUsernameSuggestions());\n };\n\n const suggestedUsernames = () => (\n
\n {formatMessage(messages['registration.username.suggestion.label'])}\n
\n {usernameSuggestions.map((username, index) => (\n handleSuggestionClick(e, username)}\n >\n {username}\n \n ))}\n
\n {iconButton}\n
\n );\n\n if (usernameSuggestions.length > 0 && errorMessage && value === ' ') {\n className = 'username-suggestions__error';\n iconButton = handleUsernameSuggestionClose()} variant=\"black\" size=\"sm\" className=\"username-suggestions__close__button\" />;\n suggestedUsernameDiv = suggestedUsernames();\n } else if (usernameSuggestions.length > 0 && value === ' ') {\n className = 'username-suggestions d-flex align-items-center';\n iconButton = handleUsernameSuggestionClose()} variant=\"black\" size=\"sm\" className=\"username-suggestions__close__button\" />;\n suggestedUsernameDiv = suggestedUsernames();\n } else if (usernameSuggestions.length > 0 && errorMessage) {\n suggestedUsernameDiv = suggestedUsernames();\n }\n return (\n \n {suggestedUsernameDiv}\n \n );\n};\n\nUsernameField.defaultProps = {\n errorMessage: '',\n autoComplete: null,\n};\n\nUsernameField.propTypes = {\n handleChange: PropTypes.func.isRequired,\n handleErrorChange: PropTypes.func.isRequired,\n errorMessage: PropTypes.string,\n name: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n autoComplete: PropTypes.string,\n};\n\nexport default UsernameField;\n","export const COUNTRY_CODE_KEY = 'code';\nexport const COUNTRY_DISPLAY_KEY = 'name';\n\nconst validateCountryField = (value, countryList, 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 messages from '../messages';\nimport { CountryField, HonorCode, TermsOfService } from '../RegistrationFields';\n\n/**\n * Fields on registration page that are not the default required fields (name, email, username, password).\n * These configurable required fields are defined on the backend using REGISTRATION_EXTRA_FIELDS setting.\n *\n * Country and Honor Code/Terms of Services (if enabled) will appear at the bottom of the form, even if they\n * appear higher in order returned by backend. This is to make the user experience better.\n *\n * For edX only:\n * Country and honor code fields are required by default, and we will continue to show them on\n * frontend even if the API doesn't return it. The `SHOW_CONFIGURABLE_EDX_FIELDS` flag will enable\n * it for edX.\n * */\nconst ConfigurableRegistrationForm = (props) => {\n const { formatMessage } = useIntl();\n const {\n email,\n fieldDescriptions,\n fieldErrors,\n formFields,\n setFieldErrors,\n setFormFields,\n autoSubmitRegistrationForm,\n } = props;\n\n /** The reason for adding the entry 'United States' is that Chrome browser aut-fill the form with the 'Unites\n States' instead of 'United States of America' which does not exist in country dropdown list and gets the user\n confused and unable to create an account. So we added the United States entry in the dropdown list.\n */\n const countryList = useMemo(() => getCountryList(getLocale()).concat([{ code: 'US', name: 'United States' }]), []);\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) {\n Object.keys(fieldDescriptions).forEach(fieldName => {\n const fieldData = fieldDescriptions[fieldName];\n switch (fieldData.name) {\n case FIELDS.COUNTRY:\n showCountryField = true;\n break;\n case FIELDS.HONOR_CODE:\n if (fieldData.type === 'tos_and_honor_code') {\n showTermsOfServiceAndHonorCode = true;\n } else {\n honorCode.push(\n \n \n ,\n );\n }\n break;\n case FIELDS.TERMS_OF_SERVICE:\n honorCode.push(\n \n \n ,\n );\n break;\n default:\n formFieldDescriptions.push(\n \n \n ,\n );\n }\n });\n }\n\n if (flags.showConfigurableEdxFields || showCountryField) {\n formFieldDescriptions.push(\n \n \n ,\n );\n }\n\n if (flags.showMarketingEmailOptInCheckbox) {\n formFieldDescriptions.push(\n \n \n ,\n );\n }\n\n if (flags.showConfigurableEdxFields || showTermsOfServiceAndHonorCode) {\n formFieldDescriptions.push(\n \n \n ,\n );\n }\n\n return (\n <>\n {formFieldDescriptions}\n
\n {honorCode}\n
\n \n );\n};\n\nConfigurableRegistrationForm.propTypes = {\n email: PropTypes.string.isRequired,\n fieldDescriptions: PropTypes.shape({}),\n fieldErrors: PropTypes.shape({\n country: PropTypes.string,\n }).isRequired,\n formFields: PropTypes.shape({\n country: PropTypes.shape({\n displayValue: PropTypes.string,\n countryCode: PropTypes.string,\n }),\n honor_code: PropTypes.bool,\n marketingEmailsOptIn: PropTypes.bool,\n }).isRequired,\n setFieldErrors: PropTypes.func.isRequired,\n setFormFields: PropTypes.func.isRequired,\n autoSubmitRegistrationForm: PropTypes.bool,\n};\n\nConfigurableRegistrationForm.defaultProps = {\n fieldDescriptions: {},\n autoSubmitRegistrationForm: false,\n};\n\nexport default ConfigurableRegistrationForm;\n","import React, { useEffect } from 'react';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { Alert } from '@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 messages from '../messages';\n\nconst RegistrationFailureMessage = (props) => {\n const { formatMessage } = useIntl();\n const {\n context, errorCode, failureCount,\n } = props;\n\n useEffect(() => {\n windowScrollTo({ left: 0, top: 0, behavior: 'smooth' });\n }, [errorCode, failureCount]);\n\n if (!errorCode) {\n return null;\n }\n\n let errorMessage;\n switch (errorCode) {\n case INTERNAL_SERVER_ERROR:\n errorMessage = formatMessage(messages['registration.request.server.error']);\n break;\n case FORBIDDEN_REQUEST:\n errorMessage = formatMessage(messages['registration.rate.limit.error']);\n break;\n case TPA_AUTHENTICATION_FAILURE:\n errorMessage = formatMessage(messages['registration.tpa.authentication.failure'],\n {\n platform_name: getConfig().SITE_NAME,\n lineBreak:
,\n errorMessage: context.errorMessage,\n });\n break;\n case TPA_SESSION_EXPIRED:\n errorMessage = formatMessage(messages['registration.tpa.session.expired'], { provider: context.provider });\n break;\n default:\n errorMessage = formatMessage(messages['registration.empty.form.submission.error']);\n break;\n }\n\n return (\n \n {formatMessage(messages['registration.request.failure.header'])}\n

{errorMessage}

\n
\n );\n};\n\nRegistrationFailureMessage.defaultProps = {\n context: {\n errorMessage: null,\n },\n};\n\nRegistrationFailureMessage.propTypes = {\n context: PropTypes.shape({\n provider: PropTypes.string,\n errorMessage: PropTypes.string,\n }),\n errorCode: PropTypes.string.isRequired,\n failureCount: PropTypes.number.isRequired,\n};\n\nexport default RegistrationFailureMessage;\n","import { createSelector } from 'reselect';\n\n/**\n * Selector for backend validations which processes the api output and generates a\n * key value dict for field errors.\n * @returns {{username: string}|{name: string}|*|{}|null}\n */\nconst getRegistrationError = state => state.register.registrationError;\nconst getValidations = state => state.register.validations;\n\nconst getBackendValidations = createSelector(\n [getRegistrationError, getValidations],\n (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\nexport default getBackendValidations;\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 setEmailSuggestionInStore,\n setUserPipelineDataLoaded,\n} from './data/actions';\nimport {\n FORM_SUBMISSION_ERROR,\n TPA_AUTHENTICATION_FAILURE,\n} from './data/constants';\nimport getBackendValidations from './data/selectors';\nimport {\n 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 autoGeneratedUsernameEnabled: getConfig().ENABLE_AUTO_GENERATED_USERNAME,\n };\n const {\n handleInstitutionLogin,\n institutionLogin,\n } = props;\n\n const backedUpFormData = useSelector(state => state.register.registrationFormData);\n const registrationError = useSelector(state => state.register.registrationError);\n const registrationErrorCode = registrationError?.errorCode;\n const registrationResult = useSelector(state => state.register.registrationResult);\n const shouldBackupState = useSelector(state => state.register.shouldBackupState);\n const userPipelineDataLoaded = useSelector(state => state.register.userPipelineDataLoaded);\n const submitState = useSelector(state => state.register.submitState);\n\n const fieldDescriptions = useSelector(state => state.commonComponents.fieldDescriptions);\n const optionalFields = useSelector(state => state.commonComponents.optionalFields);\n const thirdPartyAuthApiStatus = useSelector(state => state.commonComponents.thirdPartyAuthApiStatus);\n const autoSubmitRegForm = useSelector(state => state.commonComponents.thirdPartyAuthContext.autoSubmitRegForm);\n const thirdPartyAuthErrorMessage = useSelector(state => state.commonComponents.thirdPartyAuthContext.errorMessage);\n const finishAuthUrl = useSelector(state => state.commonComponents.thirdPartyAuthContext.finishAuthUrl);\n const currentProvider = useSelector(state => state.commonComponents.thirdPartyAuthContext.currentProvider);\n const providers = useSelector(state => state.commonComponents.thirdPartyAuthContext.providers);\n const secondaryProviders = useSelector(state => state.commonComponents.thirdPartyAuthContext.secondaryProviders);\n const pipelineUserDetails = useSelector(state => state.commonComponents.thirdPartyAuthContext.pipelineUserDetails);\n\n const backendValidations = useSelector(getBackendValidations);\n const queryParams = useMemo(() => getAllPossibleQueryParams(), []);\n const tpaHint = useMemo(() => getTpaHint(), []);\n\n const [formFields, setFormFields] = useState({ ...backedUpFormData.formFields });\n const [configurableFormFields, setConfigurableFormFields] = useState({ ...backedUpFormData.configurableFormFields });\n const [errors, setErrors] = useState({ ...backedUpFormData.errors });\n const [errorCode, setErrorCode] = useState({ type: '', count: 0 });\n const [formStartTime, setFormStartTime] = useState(null);\n // temporary error state for embedded experience because we don't want to show errors on blur\n const [temporaryErrors, setTemporaryErrors] = useState({ ...backedUpFormData.errors });\n\n const { cta, host } = queryParams;\n const buttonLabel = cta\n ? formatMessage(messages['create.account.cta.button'], { label: cta })\n : formatMessage(messages['create.account.for.free.button']);\n\n /**\n * Set the userPipelineDetails data in formFields for only first time\n */\n useEffect(() => {\n if (!userPipelineDataLoaded && thirdPartyAuthApiStatus === COMPLETE_STATE) {\n if (thirdPartyAuthErrorMessage) {\n setErrorCode(prevState => ({ type: TPA_AUTHENTICATION_FAILURE, count: prevState.count + 1 }));\n }\n if (pipelineUserDetails && Object.keys(pipelineUserDetails).length !== 0) {\n const { name = '', username = '', email = '' } = pipelineUserDetails;\n setFormFields(prevState => ({\n ...prevState, name, username, email,\n }));\n dispatch(setUserPipelineDataLoaded(true));\n }\n }\n }, [ // eslint-disable-line react-hooks/exhaustive-deps\n thirdPartyAuthApiStatus,\n thirdPartyAuthErrorMessage,\n pipelineUserDetails,\n userPipelineDataLoaded,\n ]);\n\n useEffect(() => {\n if (!formStartTime) {\n sendPageEvent('login_and_registration', 'register');\n const payload = { ...queryParams, is_register_page: true };\n if (tpaHint) {\n payload.tpa_hint = tpaHint;\n }\n dispatch(getRegistrationDataFromBackend(payload));\n setFormStartTime(Date.now());\n }\n }, [dispatch, formStartTime, queryParams, tpaHint]);\n\n /**\n * Backup the registration form in redux when register page is toggled.\n */\n useEffect(() => {\n if (shouldBackupState) {\n dispatch(backupRegistrationFormBegin({\n ...backedUpFormData,\n configurableFormFields: { ...configurableFormFields },\n formFields: { ...formFields },\n errors: { ...errors },\n }));\n }\n }, [shouldBackupState, configurableFormFields, formFields, errors, dispatch, backedUpFormData]);\n\n useEffect(() => {\n if (backendValidations) {\n if (registrationEmbedded) {\n setTemporaryErrors(prevErrors => ({ ...prevErrors, ...backendValidations }));\n } else {\n setErrors(prevErrors => ({ ...prevErrors, ...backendValidations }));\n }\n }\n }, [backendValidations, registrationEmbedded]);\n\n useEffect(() => {\n if (registrationErrorCode) {\n setErrorCode(prevState => ({ type: registrationErrorCode, count: prevState.count + 1 }));\n }\n }, [registrationErrorCode]);\n\n useEffect(() => {\n if (registrationResult.success) {\n // This event is used by GTM\n sendTrackEvent('edx.bi.user.account.registered.client', {});\n\n // This is used by the \"User Retention Rate Event\" on GTM\n setCookie(getConfig().USER_RETENTION_COOKIE_NAME, true);\n }\n }, [registrationResult]);\n\n const handleOnChange = (event) => {\n const { name } = event.target;\n const value = event.target.type === 'checkbox' ? event.target.checked : event.target.value;\n if (registrationError[name]) {\n dispatch(clearRegistrationBackendError(name));\n }\n setErrors(prevErrors => ({ ...prevErrors, [name]: '' }));\n setFormFields(prevState => ({ ...prevState, [name]: value }));\n };\n\n const handleErrorChange = (fieldName, error) => {\n if (registrationEmbedded) {\n setTemporaryErrors(prevErrors => ({\n ...prevErrors,\n [fieldName]: error,\n }));\n if (error === '' && errors[fieldName] !== '') {\n setErrors(prevErrors => ({\n ...prevErrors,\n [fieldName]: error,\n }));\n }\n } else {\n setErrors(prevErrors => ({\n ...prevErrors,\n [fieldName]: error,\n }));\n }\n };\n\n const registerUser = () => {\n const totalRegistrationTime = (Date.now() - formStartTime) / 1000;\n let payload = { ...formFields };\n\n if (currentProvider) {\n delete payload.password;\n payload.social_auth_provider = currentProvider;\n }\n if (flags.autoGeneratedUsernameEnabled) {\n delete payload.username;\n }\n\n // Validating form data before submitting\n const { isValid, fieldErrors, emailSuggestion } = isFormValid(\n payload,\n registrationEmbedded ? temporaryErrors : errors,\n configurableFormFields,\n fieldDescriptions,\n formatMessage,\n );\n setErrors({ ...fieldErrors });\n dispatch(setEmailSuggestionInStore(emailSuggestion));\n\n // returning if not valid\n if (!isValid) {\n setErrorCode(prevState => ({ type: FORM_SUBMISSION_ERROR, count: prevState.count + 1 }));\n return;\n }\n\n // Preparing payload for submission\n payload = prepareRegistrationPayload(\n payload,\n configurableFormFields,\n flags.showMarketingEmailOptInCheckbox,\n totalRegistrationTime,\n queryParams);\n\n // making register call\n dispatch(registerNewUser(payload));\n };\n\n const handleSubmit = (e) => {\n e.preventDefault();\n registerUser();\n };\n\n useEffect(() => {\n if (autoSubmitRegForm && userPipelineDataLoaded) {\n registerUser();\n }\n }, [autoSubmitRegForm, userPipelineDataLoaded]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const renderForm = () => {\n if (institutionLogin) {\n return (\n \n );\n }\n return (\n <>\n \n {formatMessage(messages['register.page.title'], { siteName: getConfig().SITE_NAME })}\n \n \n {autoSubmitRegForm && !errorCode.type ? (\n
\n \n
\n ) : (\n \n \n \n
\n \n \n {!flags.autoGeneratedUsernameEnabled && (\n \n )}\n {!currentProvider && (\n \n )}\n \n e.preventDefault()}\n />\n {!registrationEmbedded && (\n \n )}\n \n
\n )}\n\n \n );\n };\n\n if (tpaHint) {\n if (thirdPartyAuthApiStatus === PENDING_STATE) {\n return ;\n }\n const { provider, skipHintedLogin } = getTpaProvider(tpaHint, providers, secondaryProviders);\n if (skipHintedLogin) {\n window.location.href = getConfig().LMS_BASE_URL + provider.registerUrl;\n return null;\n }\n return provider ? : renderForm();\n }\n return (\n renderForm()\n );\n};\n\nRegistrationPage.propTypes = {\n institutionLogin: PropTypes.bool,\n // Actions\n handleInstitutionLogin: PropTypes.func,\n};\n\nRegistrationPage.defaultProps = {\n handleInstitutionLogin: null,\n institutionLogin: false,\n};\n\nexport default RegistrationPage;\n","import {\n BACKUP_REGISTRATION_DATA,\n REGISTER_CLEAR_USERNAME_SUGGESTIONS,\n REGISTER_FORM_VALIDATIONS,\n REGISTER_NEW_USER,\n REGISTER_SET_COUNTRY_CODE,\n REGISTER_SET_EMAIL_SUGGESTIONS,\n REGISTER_SET_USER_PIPELINE_DATA_LOADED,\n REGISTRATION_CLEAR_BACKEND_ERROR,\n} from './actions';\nimport {\n DEFAULT_STATE,\n PENDING_STATE,\n} from '../../data/constants';\n\nexport const storeName = 'register';\n\nexport const defaultState = {\n backendCountryCode: '',\n registrationError: {},\n registrationResult: {},\n registrationFormData: {\n configurableFormFields: {\n marketingEmailsOptIn: true,\n },\n formFields: {\n name: '', email: '', username: '', password: '',\n },\n emailSuggestion: {\n suggestion: '', type: '',\n },\n errors: {\n name: '', email: '', username: '', password: '',\n },\n },\n validations: null,\n submitState: DEFAULT_STATE,\n userPipelineDataLoaded: false,\n usernameSuggestions: [],\n validationApiRateLimited: false,\n shouldBackupState: false,\n};\n\nconst reducer = (state = defaultState, action = {}) => {\n switch (action.type) {\n case BACKUP_REGISTRATION_DATA.BASE:\n return {\n ...state,\n shouldBackupState: true,\n };\n case BACKUP_REGISTRATION_DATA.BEGIN:\n return {\n ...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 usernameSuggestions: usernameSuggestions || state.usernameSuggestions,\n };\n }\n case REGISTER_FORM_VALIDATIONS.FAILURE:\n return {\n ...state,\n validationApiRateLimited: true,\n validations: null,\n };\n case REGISTER_CLEAR_USERNAME_SUGGESTIONS:\n return {\n ...state,\n usernameSuggestions: [],\n };\n case REGISTER_SET_COUNTRY_CODE: {\n const { countryCode } = action.payload;\n if (!state.registrationFormData.configurableFormFields.country) {\n return {\n ...state,\n backendCountryCode: countryCode,\n };\n }\n return state;\n }\n case REGISTER_SET_USER_PIPELINE_DATA_LOADED: {\n const { value } = action.payload;\n return {\n ...state,\n userPipelineDataLoaded: value,\n };\n }\n case REGISTER_SET_EMAIL_SUGGESTIONS:\n return {\n ...state,\n registrationFormData: {\n ...state.registrationFormData,\n emailSuggestion: action.payload.emailSuggestion,\n },\n };\n default:\n return {\n ...state,\n shouldBackupState: false,\n };\n }\n};\n\nexport default reducer;\n","import { getConfig } from '@edx/frontend-platform';\nimport { getAuthenticatedHttpClient, getHttpClient } from '@edx/frontend-platform/auth';\nimport * as QueryString from 'query-string';\n\nexport async function registerRequest(registrationInformation) {\n const requestConfig = {\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n isPublic: true,\n };\n\n const { data } = await getAuthenticatedHttpClient()\n .post(\n `${getConfig().LMS_BASE_URL}/api/user/v2/account/registration/`,\n QueryString.stringify(registrationInformation),\n requestConfig,\n )\n .catch((e) => {\n throw (e);\n });\n\n return {\n redirectUrl: data.redirect_url || `${getConfig().LMS_BASE_URL}/dashboard`,\n success: data.success || false,\n authenticatedUser: data.authenticated_user,\n };\n}\n\nexport async function getFieldsValidations(formPayload) {\n const requestConfig = {\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n };\n\n const { data } = await getHttpClient()\n .post(\n `${getConfig().LMS_BASE_URL}/api/user/v1/validation/registration`,\n QueryString.stringify(formPayload),\n requestConfig,\n )\n .catch((e) => {\n throw (e);\n });\n\n return {\n fieldValidations: data,\n };\n}\n","import { camelCaseObject } from '@edx/frontend-platform';\nimport { logError, logInfo } from '@edx/frontend-platform/logging';\nimport { call, put, takeEvery } from 'redux-saga/effects';\n\nimport {\n fetchRealtimeValidationsBegin,\n fetchRealtimeValidationsFailure,\n fetchRealtimeValidationsSuccess,\n REGISTER_FORM_VALIDATIONS,\n REGISTER_NEW_USER,\n registerNewUserBegin,\n registerNewUserFailure,\n registerNewUserSuccess,\n} from './actions';\nimport { INTERNAL_SERVER_ERROR } from './constants';\nimport { getFieldsValidations, registerRequest } from './service';\n\nexport function* handleNewUserRegistration(action) {\n try {\n yield put(registerNewUserBegin());\n\n const { authenticatedUser, redirectUrl, success } = yield call(registerRequest, action.payload.registrationInfo);\n\n yield put(registerNewUserSuccess(\n camelCaseObject(authenticatedUser),\n redirectUrl,\n success,\n ));\n } catch (e) {\n const statusCodes = [400, 403, 409];\n if (e.response && statusCodes.includes(e.response.status)) {\n yield put(registerNewUserFailure(camelCaseObject(e.response.data)));\n logInfo(e);\n } else {\n yield put(registerNewUserFailure({ errorCode: INTERNAL_SERVER_ERROR }));\n logError(e);\n }\n }\n}\n\nexport function* fetchRealtimeValidations(action) {\n try {\n yield put(fetchRealtimeValidationsBegin());\n const { fieldValidations } = yield call(getFieldsValidations, action.payload.formPayload);\n\n yield put(fetchRealtimeValidationsSuccess(camelCaseObject(fieldValidations)));\n } catch (e) {\n if (e.response && e.response.status === 403) {\n yield put(fetchRealtimeValidationsFailure());\n logInfo(e);\n } else {\n logError(e);\n }\n }\n}\nexport default function* saga() {\n yield takeEvery(REGISTER_NEW_USER.BASE, handleNewUserRegistration);\n yield takeEvery(REGISTER_FORM_VALIDATIONS.BASE, fetchRealtimeValidations);\n}\n","import { all } from 'redux-saga/effects';\n\nimport { saga as commonComponentsSaga } from '../common-components';\nimport { saga as forgotPasswordSaga } from '../forgot-password';\nimport { saga as loginSaga } from '../login';\nimport { saga as authnProgressiveProfilingSaga } from '../progressive-profiling';\nimport { saga as registrationSaga } from '../register';\nimport { saga as resetPasswordSaga } from '../reset-password';\n\nexport default function* rootSaga() {\n yield all([\n loginSaga(),\n registrationSaga(),\n commonComponentsSaga(),\n forgotPasswordSaga(),\n resetPasswordSaga(),\n authnProgressiveProfilingSaga(),\n ]);\n}\n","import { getConfig } from '@edx/frontend-platform';\nimport { composeWithDevTools } from '@redux-devtools/extension';\nimport { applyMiddleware, compose, createStore } from 'redux';\nimport { createLogger } from 'redux-logger';\nimport createSagaMiddleware from 'redux-saga';\nimport thunkMiddleware from 'redux-thunk';\n\nimport createRootReducer from './reducers';\nimport rootSaga from './sagas';\n\nconst sagaMiddleware = createSagaMiddleware();\n\nfunction composeMiddleware() {\n if (getConfig().ENVIRONMENT === 'development') {\n const loggerMiddleware = createLogger({\n collapsed: true,\n });\n return composeWithDevTools(applyMiddleware(thunkMiddleware, sagaMiddleware, loggerMiddleware));\n }\n\n return compose(applyMiddleware(thunkMiddleware, sagaMiddleware));\n}\n\nexport default function configureStore(initialState = {}) {\n const store = createStore(\n createRootReducer(),\n initialState,\n composeMiddleware(),\n );\n sagaMiddleware.run(rootSaga);\n\n return store;\n}\n","import { combineReducers } from 'redux';\n\nimport {\n reducer as commonComponentsReducer,\n storeName as commonComponentsStoreName,\n} from '../common-components';\nimport {\n reducer as forgotPasswordReducer,\n storeName as forgotPasswordStoreName,\n} from '../forgot-password';\nimport {\n reducer as loginReducer,\n storeName as loginStoreName,\n} from '../login';\nimport {\n reducer as authnProgressiveProfilingReducers,\n storeName as authnProgressiveProfilingStoreName,\n} from '../progressive-profiling';\nimport {\n reducer as registerReducer,\n storeName as registerStoreName,\n} from '../register';\nimport {\n reducer as resetPasswordReducer,\n storeName as resetPasswordStoreName,\n} from '../reset-password';\n\nconst createRootReducer = () => combineReducers({\n [loginStoreName]: loginReducer,\n [registerStoreName]: registerReducer,\n [commonComponentsStoreName]: commonComponentsReducer,\n [forgotPasswordStoreName]: forgotPasswordReducer,\n [resetPasswordStoreName]: resetPasswordReducer,\n [authnProgressiveProfilingStoreName]: authnProgressiveProfilingReducers,\n});\nexport default createRootReducer;\n","import React, { useEffect, useState } from 'react';\nimport { connect } from 'react-redux';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { sendPageEvent, sendTrackEvent } from '@edx/frontend-platform/analytics';\nimport { getAuthService } from '@edx/frontend-platform/auth';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport {\n Icon,\n Tab,\n Tabs,\n} from '@openedx/paragon';\nimport { 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 } from '../register/data/actions';\n\nconst Logistration = (props) => {\n const { selectedPage, tpaProviders } = props;\n const tpaHint = getTpaHint();\n const {\n providers, secondaryProviders,\n } = tpaProviders;\n const { formatMessage } = useIntl();\n const [institutionLogin, setInstitutionLogin] = useState(false);\n const [key, setKey] = useState('');\n const navigate = useNavigate();\n const disablePublicAccountCreation = getConfig().ALLOW_PUBLIC_ACCOUNT_CREATION === false;\n const hideRegistrationLink = getConfig().SHOW_REGISTRATION_LINKS === false;\n\n useEffect(() => {\n const authService = getAuthService();\n if (authService) {\n authService.getCsrfTokenService().getCsrfToken(getConfig().LMS_BASE_URL);\n }\n });\n\n useEffect(() => {\n if (disablePublicAccountCreation) {\n navigate(updatePathWithQueryParams(LOGIN_PAGE));\n }\n }, [navigate, disablePublicAccountCreation]);\n\n const handleInstitutionLogin = (e) => {\n sendTrackEvent('edx.bi.institution_login_form.toggled', { category: 'user-engagement' });\n if (typeof e === 'string') {\n sendPageEvent('login_and_registration', e === '/login' ? 'login' : 'register');\n } else {\n sendPageEvent('login_and_registration', e.target.dataset.eventName);\n }\n\n setInstitutionLogin(!institutionLogin);\n };\n\n const handleOnSelect = (tabKey, 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 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 && (\n handleOnSelect(tabKey, selectedPage)}>\n \n \n \n ))}\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 redirectUrl,\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 redirectUrl: PropTypes.string.isRequired,\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 = (event) => {\n event.preventDefault();\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_AUTO_GENERATED_USERNAME","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","TPA_UNLINKED_ACCOUNT_PROVISION_URL","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","messagesOfArLanguage","messagesOfUkLanguage","messagesOfTrTrLanguage","messagesOfThLanguage","messagesOfTeLanguage","messagesOfSwLanguage","messagesOfRuLanguage","messagesOfPtPtLanguage","messagesOfPtBrLanguage","messagesOfItItLanguage","messagesOfIdLanguage","messagesOfHiLanguage","messagesOfHeLanguage","messagesOfFrCaLanguage","messagesOfFaLanguage","messagesOfEsEsLanguage","messagesOfEs419Language","messagesOfElLanguage","messagesOfDeDeLanguage","messagesOfDeLanguage","messagesOfDaLanguage","messagesFromParagon","messagesFromFrontendPlatform","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_EMAIL_SUGGESTIONS","fetchRealtimeValidations","formPayload","fetchRealtimeValidationsBegin","fetchRealtimeValidationsSuccess","validations","fetchRealtimeValidationsFailure","setEmailSuggestionInStore","emailSuggestion","registerNewUserBegin","registerNewUserSuccess","registerNewUserFailure","error","clearUsernameSuggestions","clearRegistrationBackendError","fieldName","setCountryFromThirdPartyAuthContext","fetchThirdPartyAuthContext","put","call","logError","saga","takeEvery","storeName","commonComponentsSelector","thirdPartyAuthContextSelector","createSelector","commonComponents","tpaProvidersSelector","FormGroup","hasFocus","setHasFocus","Form","Group","controlId","isInvalid","Control","as","readOnly","autoComplete","spellCheck","onFocus","handleFocus","onBlur","handleBlur","handleClick","onChange","handleChange","controlClassName","borderClass","trailingElement","floatingLabel","TransitionReplace","helpText","Feedback","toString","hasIcon","COMMON_EMAIL_PROVIDERS","DEFAULT_SERVICE_PROVIDER_DOMAINS","DEFAULT_TOP_LEVEL_DOMAINS","emailRegex","RegExp","getLevenshteinSuggestion","word","knownWords","similarityThreshold","minEditDistance","mostSimilar","i","editDistance","distance","toLowerCase","getSuggestionForInvalidEmail","defaultDomains","suggestion","validateEmail","confirmEmailValue","fieldError","confirmEmailError","domainName","split","test","response","validateEmailAddress","validation","hasError","hasMultipleSubdomains","match","serviceLevelDomain","topLevelDomain","tldSuggestion","serviceSuggestion","URL_REGEX","HTML_REGEX","INVALID_NAME_REGEX","validateName","trim","usernameRegex","validateUsername","validatePasswordField","PasswordField","dispatch","useDispatch","validationApiRateLimited","useSelector","register","isPasswordHidden","setHiddenTrue","setHiddenFalse","useToggle","showTooltip","setShowTooltip","target","relatedTarget","passwordValue","showRequirements","handleErrorChange","password","setTimeout","HideButton","IconButton","VisibilityOff","iconAs","size","ShowButton","Visibility","placement","innerWidth","tooltip","Tooltip","Check","Remove","OverlayTrigger","overlay","show","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","siteName","preserveAspectRatio","transform","x","y","height","width","MediumLayout","SmallLayout","backgroundImage","ExtraSmallLayout","fullName","LOGO_URL","BaseContainer","showWelcomeBanner","MediaQuery","maxWidth","breakpoints","extraSmall","AuthSmallLayout","ImageExtraSmallLayout","minWidth","small","ImageSmallLayout","medium","large","AuthMediumLayout","ImageMediumLayout","extraLarge","AuthLargeLayout","ImageLargeLayout","DefaultSmallLayout","DefaultMediumLayout","DefaultLargeLayout","ForgotPasswordPage","submitState","emailValidationError","setEmail","bannerEmail","setBannerEmail","formErrors","setFormErrors","validationError","setValidationError","navigate","useNavigate","sendPageEvent","sendTrackEvent","category","getValidationMessage","tabTitle","ChevronLeft","Helmet","Tabs","activeKey","onSelect","Tab","eventKey","setForgotPasswordFormData","StatefulButton","labels","default","pending","behavior","onMouseDown","showLaunchIcon","isInline","connect","forgotPasswordFormData","RESET_PASSWORD","VALIDATE_TOKEN","PASSWORD_RESET_FAILURE","passwordResetFailure","errorCode","validateTokenBegin","validateTokenSuccess","tokenStatus","token","resetPasswordBegin","resetPasswordSuccess","resetPasswordFailure","errorMsg","post","formurlencoded","handleForgotPassword","logInfo","INVALID_FORM","TPA_AUTHENTICATION_FAILURE","ACCOUNT_ACTIVATION_MESSAGE","AccountActivationMessage","messageType","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","isThirdPartyAuthActive","Skeleton","count","ResetPasswordSuccess","LoginPage","backedUpFormData","loginErrorCode","loginErrorContext","loginResult","shouldBackupState","thirdPartyErrorMessage","institutionLogin","showResetPasswordSuccessBanner","backupFormState","getTPADataFromBackend","activationMsgType","account_activation_status","useMemo","formFields","setFormFields","setErrorCode","errors","setErrors","prevState","handleOnChange","event","handleOnFocus","prevErrors","unlinkedProvisionUrl","emailOrUsername","dismissPasswordResetBanner","formData","validationErrors","fieldErrors","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","isValid","is_valid","handleResetPassword","resetStatus","reset_status","resetErrors","err_msg","token_invalid","redirect_url","handleLoginRequest","statusCodes","camelCaseObject","SAVE_USER_PROFILE","saveUserProfileBegin","saveUserProfileSuccess","saveUserProfileFailure","welcomePageContextSelector","nextUrl","ProgressiveProfilingPageModal","isOneTrustFunctionalCookieEnabled","OnetrustActiveGroups","FormFieldRenderer","formField","fieldData","onChangeHandler","Boolean","ExpandMore","label","option","Checkbox","checked","ProgressiveProfiling","getFieldDataFromBackend","showError","welcomePageContext","welcomePageContextApiStatus","useLocation","functionalCookiesConsent","enablePostRegistrationRecommendations","setRegistrationResult","formFieldData","setFormFieldData","extendedProfile","setValues","showModal","setShowModal","showRecommendationsPage","setShowRecommendationsPage","is_welcome_page","configureAuth","AxiosJwtAuthService","loggingService","getLoggingService","config","registrationResponse","keys","identifyAuthenticatedUser","page","DASHBOARD_URL","assign","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","NameField","shouldFetchUsernameSuggestions","EmailField","registrationFormData","setEmailSuggestion","handleSuggestionClick","maxLength","Close","handleSuggestionClosed","tabIndex","UsernameField","suggestedUsernameDiv","iconButton","usernameSuggestions","handleUsernameSuggestionClose","suggestedUsernames","startsWith","COUNTRY_CODE_KEY","COUNTRY_DISPLAY_KEY","CountryField","countryList","selectedCountry","onFocusHandler","countryFieldValue","userProvidedText","displayValue","selectionValue","selectionId","backendCountryCode","countryDisplayValue","countryVal","find","country","validateCountryField","emptyErrorMessage","invalidCountryErrorMessage","normalizedValue","FormAutosuggest","FormAutosuggestOption","FormControlFeedback","code","HonorCode","fieldType","tosAndHonorCode","privacyPolicy","TermsOfService","termsOfService","ConfigurableRegistrationForm","setFieldErrors","autoSubmitRegistrationForm","getCountryList","getLocale","showTermsOfServiceAndHonorCode","showCountryField","formFieldDescriptions","honorCode","flags","countryValue","error_message","onBlurHandler","marketingEmailsOptIn","honor_code","RegistrationFailureMessage","registrationError","validationDecisions","filter","field","userMessage","RegistrationPage","showConfigurableEdxFields","showConfigurableRegistrationFields","showMarketingEmailOptInCheckbox","autoGeneratedUsernameEnabled","registrationErrorCode","userPipelineDataLoaded","thirdPartyAuthErrorMessage","backendValidations","getBackendValidations","configurableFormFields","setConfigurableFormFields","formStartTime","setFormStartTime","temporaryErrors","setTemporaryErrors","cta","buttonLabel","is_register_page","getRegistrationDataFromBackend","Date","now","registerUser","totalRegistrationTime","social_auth_provider","isFormValid","confirm_email","registrationInfo","prepareRegistrationPayload","initPayload","renderForm","RegistrationFailure","autoSubmitRegisterForm","registrationErrorTemp","_action$payload$valid","validationWithoutUsernameSuggestions","_objectWithoutProperties","_excluded","registerRequest","registrationInformation","authenticated_user","getFieldsValidations","fieldValidations","handleNewUserRegistration","rootSaga","all","loginSaga","registrationSaga","commonComponentsSaga","forgotPasswordSaga","resetPasswordSaga","authnProgressiveProfilingSaga","sagaMiddleware","createSagaMiddleware","configureStore","initialState","store","createStore","combineReducers","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","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","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":""}