@openedx/frontend-app-authn 2.0.0-alpha.1 → 2.0.0-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/README.rst +68 -26
  2. package/dist/app.js +1 -27
  3. package/dist/app.js.map +1 -1
  4. package/dist/base-container/components/BrandLogo.d.ts +24 -0
  5. package/dist/base-container/components/BrandLogo.js +28 -0
  6. package/dist/base-container/components/BrandLogo.js.map +1 -0
  7. package/dist/base-container/components/default-layout/LargeLayout.js +3 -3
  8. package/dist/base-container/components/default-layout/LargeLayout.js.map +1 -1
  9. package/dist/base-container/components/default-layout/MediumLayout.js +3 -3
  10. package/dist/base-container/components/default-layout/MediumLayout.js.map +1 -1
  11. package/dist/base-container/components/default-layout/SmallLayout.js +3 -3
  12. package/dist/base-container/components/default-layout/SmallLayout.js.map +1 -1
  13. package/dist/base-container/components/image-layout/ExtraSmallLayout.js +4 -3
  14. package/dist/base-container/components/image-layout/ExtraSmallLayout.js.map +1 -1
  15. package/dist/base-container/components/image-layout/LargeLayout.js +4 -3
  16. package/dist/base-container/components/image-layout/LargeLayout.js.map +1 -1
  17. package/dist/base-container/components/image-layout/MediumLayout.js +4 -3
  18. package/dist/base-container/components/image-layout/MediumLayout.js.map +1 -1
  19. package/dist/base-container/components/image-layout/SmallLayout.js +4 -3
  20. package/dist/base-container/components/image-layout/SmallLayout.js.map +1 -1
  21. package/dist/base-container/components/welcome-page-layout/LargeLayout.js +3 -3
  22. package/dist/base-container/components/welcome-page-layout/LargeLayout.js.map +1 -1
  23. package/dist/base-container/components/welcome-page-layout/MediumLayout.js +3 -3
  24. package/dist/base-container/components/welcome-page-layout/MediumLayout.js.map +1 -1
  25. package/dist/base-container/components/welcome-page-layout/SmallLayout.js +3 -3
  26. package/dist/base-container/components/welcome-page-layout/SmallLayout.js.map +1 -1
  27. package/dist/common-components/RedirectLogistration.js +2 -2
  28. package/dist/common-components/RedirectLogistration.js.map +1 -1
  29. package/dist/common-components/UnAuthOnlyRoute.js +8 -3
  30. package/dist/common-components/UnAuthOnlyRoute.js.map +1 -1
  31. package/dist/common-components/components/ThirdPartyAuthContext.js.map +1 -1
  32. package/dist/data/utils/dataUtils.d.ts +1 -0
  33. package/dist/data/utils/dataUtils.js +7 -2
  34. package/dist/data/utils/dataUtils.js.map +1 -1
  35. package/dist/data/utils/index.d.ts +1 -1
  36. package/dist/data/utils/index.js +1 -1
  37. package/dist/data/utils/index.js.map +1 -1
  38. package/dist/forgot-password/ForgotPasswordAlert.js +5 -1
  39. package/dist/forgot-password/ForgotPasswordAlert.js.map +1 -1
  40. package/dist/forgot-password/ForgotPasswordPage.js +1 -1
  41. package/dist/forgot-password/ForgotPasswordPage.js.map +1 -1
  42. package/dist/forgot-password/data/apiHook.js.map +1 -1
  43. package/dist/login/AccountActivationMessage.js +5 -1
  44. package/dist/login/AccountActivationMessage.js.map +1 -1
  45. package/dist/login/ChangePasswordPrompt.js +5 -5
  46. package/dist/login/ChangePasswordPrompt.js.map +1 -1
  47. package/dist/login/LoginPage.js +4 -4
  48. package/dist/login/LoginPage.js.map +1 -1
  49. package/dist/login/components/LoginContext.js.map +1 -1
  50. package/dist/login/data/apiHook.js.map +1 -1
  51. package/dist/progressive-profiling/ProgressiveProfiling.js +8 -8
  52. package/dist/progressive-profiling/ProgressiveProfiling.js.map +1 -1
  53. package/dist/progressive-profiling/ProgressiveProfilingPageModal.d.ts +3 -1
  54. package/dist/progressive-profiling/ProgressiveProfilingPageModal.js +8 -5
  55. package/dist/progressive-profiling/ProgressiveProfilingPageModal.js.map +1 -1
  56. package/dist/progressive-profiling/components/ProgressiveProfilingContext.js.map +1 -1
  57. package/dist/progressive-profiling/data/apiHook.js.map +1 -1
  58. package/dist/register/RegistrationPage.js +3 -4
  59. package/dist/register/RegistrationPage.js.map +1 -1
  60. package/dist/register/components/RegisterContext.js.map +1 -1
  61. package/dist/register/data/apiHook.js.map +1 -1
  62. package/dist/register/types.js.map +1 -1
  63. package/dist/reset-password/data/apiHook.js.map +1 -1
  64. package/package.json +3 -2
@@ -1 +1 @@
1
- {"version":3,"file":"LoginPage.js","sourceRoot":"","sources":["../../src/login/LoginPage.jsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useMemo, useState } from 'react';\n\nimport {\n fetchAuthenticatedUser, hydrateAuthenticatedUser, getSiteConfig, getUrlByRouteRole,\n sendPageEvent, sendTrackEvent, useIntl,\n} from '@openedx/frontend-base';\nimport { Form, StatefulButton } from '@openedx/paragon';\nimport PropTypes from 'prop-types';\nimport { Helmet } from 'react-helmet';\nimport Skeleton from 'react-loading-skeleton';\nimport { Link, useLocation } from 'react-router-dom';\n\nimport {\n FormGroup,\n InstitutionLogistration,\n PasswordField,\n RedirectLogistration,\n ThirdPartyAuthAlert,\n} from '../common-components';\nimport AccountActivationMessage from './AccountActivationMessage';\nimport { useThirdPartyAuthContext } from '../common-components/components/ThirdPartyAuthContext';\nimport { useThirdPartyAuthHook } from '../common-components/data/apiHook';\nimport EnterpriseSSO from '../common-components/EnterpriseSSO';\nimport ThirdPartyAuth from '../common-components/ThirdPartyAuth';\nimport { loginPath, resetPasswordRole } from '../constants';\nimport { PENDING_STATE } from '../data/constants';\nimport {\n getActivationStatus,\n getAllPossibleQueryParams,\n getTpaHint,\n getTpaProvider,\n updatePathWithQueryParams,\n} from '../data/utils';\nimport ResetPasswordSuccess from '../reset-password/ResetPasswordSuccess';\nimport { useLoginContext } from './components/LoginContext';\nimport { useLogin } from './data/apiHook';\nimport { INVALID_FORM, TPA_AUTHENTICATION_FAILURE } from './data/constants';\nimport LoginFailureMessage from './LoginFailure';\nimport messages from './messages';\n\nconst LoginPage = ({\n institutionLogin,\n handleInstitutionLogin,\n}) => {\n // Context for third-party auth\n const {\n thirdPartyAuthApiStatus,\n thirdPartyAuthContext,\n setThirdPartyAuthContextBegin,\n setThirdPartyAuthContextSuccess,\n setThirdPartyAuthContextFailure,\n } = useThirdPartyAuthContext();\n const location = useLocation();\n\n const {\n formFields,\n setFormFields,\n errors,\n setErrors,\n } = useLoginContext();\n\n // React Query for server state\n const [loginResult, setLoginResult] = useState({ success: false, redirectUrl: '' });\n const [errorCode, setErrorCode] = useState({\n type: '',\n count: 0,\n context: {},\n });\n const { mutate: loginUser, isPending: isLoggingIn } = useLogin({\n onSuccess: async (data) => {\n const redirectUrl = localNextPath || data.redirectUrl || '';\n if (redirectUrl.startsWith('/')) {\n await fetchAuthenticatedUser({ forceRefresh: true });\n // Hydrate in the background — publishes AUTHENTICATED_USER_CHANGED after\n // SPA navigation, so the header picks up the full user profile (avatar, etc.)\n hydrateAuthenticatedUser();\n }\n setLoginResult({ success: true, redirectUrl });\n },\n onError: (formattedError) => {\n setErrorCode(prev => ({\n type: formattedError.type,\n count: prev.count + 1,\n context: formattedError.context,\n }));\n },\n });\n\n const [showResetPasswordSuccessBanner,\n setShowResetPasswordSuccessBanner] = useState(location.state?.showResetPasswordSuccessBanner || null);\n const {\n providers,\n currentProvider,\n secondaryProviders,\n finishAuthUrl,\n platformName,\n errorMessage: thirdPartyErrorMessage,\n } = thirdPartyAuthContext;\n const { formatMessage } = useIntl();\n const activationMsgType = getActivationStatus();\n const queryParams = useMemo(() => getAllPossibleQueryParams(), []);\n const localNextPath = queryParams.next?.startsWith('/') ? queryParams.next : null;\n\n const tpaHint = useMemo(() => getTpaHint(), []);\n const params = { ...queryParams };\n if (tpaHint) {\n params.tpa_hint = tpaHint;\n }\n const { data, isSuccess, error } = useThirdPartyAuthHook(loginPath, params);\n\n useEffect(() => {\n sendPageEvent('login_and_registration', 'login');\n setThirdPartyAuthContextBegin();\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n // Sync third-party auth context data\n useEffect(() => {\n if (isSuccess && data) {\n setThirdPartyAuthContextSuccess(\n data.fieldDescriptions,\n data.optionalFields,\n data.thirdPartyAuthContext,\n );\n }\n if (error) {\n setThirdPartyAuthContextFailure();\n }\n }, [tpaHint, queryParams, isSuccess, data, error,\n setThirdPartyAuthContextSuccess, setThirdPartyAuthContextFailure]);\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 {\n emailOrUsername,\n password,\n } = 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 setShowResetPasswordSuccessBanner(false);\n }\n\n const formData = { ...formFields };\n const validationErrors = validateFormFields(formData);\n if (validationErrors.emailOrUsername || validationErrors.password) {\n setErrors(validationErrors);\n setErrorCode(prev => ({\n type: INVALID_FORM,\n count: prev.count + 1,\n context: {},\n }));\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 loginUser(payload);\n };\n\n const handleOnChange = (event) => {\n const {\n name,\n value,\n } = event.target;\n // Save to context for persistence across tab switches\n setFormFields(prevState => ({\n ...prevState,\n [name]: value,\n }));\n };\n\n const handleOnFocus = (event) => {\n const { name } = event.target;\n setErrors(prevErrors => ({\n ...prevErrors,\n [name]: '',\n }));\n };\n const trackForgotPasswordLinkClick = () => {\n sendTrackEvent('edx.bi.password-reset_form.toggled', { category: 'user-engagement' });\n };\n\n const {\n provider,\n skipHintedLogin,\n } = getTpaProvider(tpaHint, providers, secondaryProviders);\n\n if (tpaHint) {\n if (thirdPartyAuthApiStatus === PENDING_STATE) {\n return <Skeleton height={36} />;\n }\n\n if (skipHintedLogin) {\n window.location.href = getSiteConfig().lmsBaseUrl + provider.loginUrl;\n return null;\n }\n\n if (provider) {\n return <EnterpriseSSO provider={provider} />;\n }\n }\n\n if (institutionLogin) {\n return (\n <InstitutionLogistration\n secondaryProviders={secondaryProviders}\n headingTitle={formatMessage(messages['institution.login.page.title'])}\n />\n );\n }\n return (\n <>\n <Helmet>\n <title>{formatMessage(messages['login.page.title'], { siteName: getSiteConfig().siteName })}</title>\n </Helmet>\n <RedirectLogistration\n success={loginResult.success}\n redirectUrl={loginResult.redirectUrl}\n finishAuthUrl={finishAuthUrl}\n />\n <div className=\"mw-xs mt-3 mb-2\">\n <LoginFailureMessage\n errorCode={errorCode.type}\n errorCount={errorCode.count}\n context={errorCode.context}\n />\n <ThirdPartyAuthAlert\n currentProvider={currentProvider}\n platformName={platformName}\n />\n <AccountActivationMessage\n messageType={activationMsgType}\n />\n {showResetPasswordSuccessBanner && <ResetPasswordSuccess />}\n <Form id=\"sign-in-form\" name=\"sign-in-form\">\n <FormGroup\n name=\"emailOrUsername\"\n value={formFields.emailOrUsername}\n autoComplete=\"on\"\n handleChange={handleOnChange}\n handleFocus={handleOnFocus}\n errorMessage={errors.emailOrUsername}\n floatingLabel={formatMessage(messages['login.user.identity.label'])}\n />\n <PasswordField\n name=\"password\"\n value={formFields.password}\n autoComplete=\"off\"\n showScreenReaderText={false}\n showRequirements={false}\n handleChange={handleOnChange}\n handleFocus={handleOnFocus}\n errorMessage={errors.password}\n floatingLabel={formatMessage(messages['login.password.label'])}\n />\n <StatefulButton\n name=\"sign-in\"\n id=\"sign-in\"\n type=\"submit\"\n variant=\"brand\"\n className=\"login-button-width\"\n state={(isLoggingIn ? PENDING_STATE : 'default')}\n labels={{\n default: formatMessage(messages['sign.in.button']),\n pending: 'pending',\n }}\n onClick={handleSubmit}\n onMouseDown={(event) => event.preventDefault()}\n />\n <Link\n id=\"forgot-password\"\n name=\"forgot-password\"\n className=\"btn btn-link font-weight-500 text-body\"\n to={updatePathWithQueryParams(getUrlByRouteRole(resetPasswordRole))}\n onClick={trackForgotPasswordLinkClick}\n >\n {formatMessage(messages['forgot.password'])}\n </Link>\n <ThirdPartyAuth\n currentProvider={currentProvider}\n providers={providers}\n secondaryProviders={secondaryProviders}\n handleInstitutionLogin={handleInstitutionLogin}\n thirdPartyAuthApiStatus={thirdPartyAuthApiStatus}\n isLoginPage\n />\n </Form>\n </div>\n </>\n );\n};\n\nLoginPage.propTypes = {\n institutionLogin: PropTypes.bool.isRequired,\n handleInstitutionLogin: PropTypes.func.isRequired,\n};\n\nexport default LoginPage;\n"]}
1
+ {"version":3,"file":"LoginPage.js","sourceRoot":"","sources":["../../src/login/LoginPage.jsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useMemo, useState } from 'react';\n\nimport {\n fetchAuthenticatedUser, hydrateAuthenticatedUser, getSiteConfig, getUrlByRouteRole,\n isInternalUrl, sendPageEvent, sendTrackEvent, useIntl,\n} from '@openedx/frontend-base';\nimport { Form, StatefulButton } from '@openedx/paragon';\nimport PropTypes from 'prop-types';\nimport { Helmet } from 'react-helmet';\nimport Skeleton from 'react-loading-skeleton';\nimport { Link, useLocation } from 'react-router-dom';\n\nimport {\n FormGroup,\n InstitutionLogistration,\n PasswordField,\n RedirectLogistration,\n ThirdPartyAuthAlert,\n} from '../common-components';\nimport AccountActivationMessage from './AccountActivationMessage';\nimport { useThirdPartyAuthContext } from '../common-components/components/ThirdPartyAuthContext';\nimport { useThirdPartyAuthHook } from '../common-components/data/apiHook';\nimport EnterpriseSSO from '../common-components/EnterpriseSSO';\nimport ThirdPartyAuth from '../common-components/ThirdPartyAuth';\nimport { loginPath, resetPasswordRole } from '../constants';\nimport { PENDING_STATE } from '../data/constants';\nimport {\n getActivationStatus,\n getAllPossibleQueryParams,\n getTpaHint,\n getTpaProvider,\n updatePathWithQueryParams,\n} from '../data/utils';\nimport ResetPasswordSuccess from '../reset-password/ResetPasswordSuccess';\nimport { useLoginContext } from './components/LoginContext';\nimport { useLogin } from './data/apiHook';\nimport { INVALID_FORM, TPA_AUTHENTICATION_FAILURE } from './data/constants';\nimport LoginFailureMessage from './LoginFailure';\nimport messages from './messages';\n\nconst LoginPage = ({\n institutionLogin,\n handleInstitutionLogin,\n}) => {\n // Context for third-party auth\n const {\n thirdPartyAuthApiStatus,\n thirdPartyAuthContext,\n setThirdPartyAuthContextBegin,\n setThirdPartyAuthContextSuccess,\n setThirdPartyAuthContextFailure,\n } = useThirdPartyAuthContext();\n const location = useLocation();\n\n const {\n formFields,\n setFormFields,\n errors,\n setErrors,\n } = useLoginContext();\n\n // React Query for server state\n const [loginResult, setLoginResult] = useState({ success: false, redirectUrl: '' });\n const [errorCode, setErrorCode] = useState({\n type: '',\n count: 0,\n context: {},\n });\n const { mutate: loginUser, isPending: isLoggingIn } = useLogin({\n onSuccess: async (data) => {\n const redirectUrl = localNextPath || data.redirectUrl || '';\n if (isInternalUrl(redirectUrl)) {\n await fetchAuthenticatedUser({ forceRefresh: true });\n // Hydrate in the background — publishes AUTHENTICATED_USER_CHANGED after\n // SPA navigation, so the header picks up the full user profile (avatar, etc.)\n hydrateAuthenticatedUser();\n }\n setLoginResult({ success: true, redirectUrl });\n },\n onError: (formattedError) => {\n setErrorCode(prev => ({\n type: formattedError.type,\n count: prev.count + 1,\n context: formattedError.context,\n }));\n },\n });\n\n const [showResetPasswordSuccessBanner,\n setShowResetPasswordSuccessBanner] = useState(location.state?.showResetPasswordSuccessBanner || null);\n const {\n providers,\n currentProvider,\n secondaryProviders,\n finishAuthUrl,\n platformName,\n errorMessage: thirdPartyErrorMessage,\n } = thirdPartyAuthContext;\n const { formatMessage } = useIntl();\n const activationMsgType = getActivationStatus();\n const queryParams = useMemo(() => getAllPossibleQueryParams(), []);\n const localNextPath = queryParams.next && isInternalUrl(queryParams.next) ? queryParams.next : null;\n\n const tpaHint = useMemo(() => getTpaHint(), []);\n const params = { ...queryParams };\n if (tpaHint) {\n params.tpa_hint = tpaHint;\n }\n const { data, isSuccess, error } = useThirdPartyAuthHook(loginPath, params);\n\n useEffect(() => {\n sendPageEvent('login_and_registration', 'login');\n setThirdPartyAuthContextBegin();\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n // Sync third-party auth context data\n useEffect(() => {\n if (isSuccess && data) {\n setThirdPartyAuthContextSuccess(\n data.fieldDescriptions,\n data.optionalFields,\n data.thirdPartyAuthContext,\n );\n }\n if (error) {\n setThirdPartyAuthContextFailure();\n }\n }, [tpaHint, queryParams, isSuccess, data, error,\n setThirdPartyAuthContextSuccess, setThirdPartyAuthContextFailure]);\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 {\n emailOrUsername,\n password,\n } = 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 setShowResetPasswordSuccessBanner(false);\n }\n\n const formData = { ...formFields };\n const validationErrors = validateFormFields(formData);\n if (validationErrors.emailOrUsername || validationErrors.password) {\n setErrors(validationErrors);\n setErrorCode(prev => ({\n type: INVALID_FORM,\n count: prev.count + 1,\n context: {},\n }));\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 loginUser(payload);\n };\n\n const handleOnChange = (event) => {\n const {\n name,\n value,\n } = event.target;\n // Save to context for persistence across tab switches\n setFormFields(prevState => ({\n ...prevState,\n [name]: value,\n }));\n };\n\n const handleOnFocus = (event) => {\n const { name } = event.target;\n setErrors(prevErrors => ({\n ...prevErrors,\n [name]: '',\n }));\n };\n const trackForgotPasswordLinkClick = () => {\n sendTrackEvent('edx.bi.password-reset_form.toggled', { category: 'user-engagement' });\n };\n\n const {\n provider,\n skipHintedLogin,\n } = getTpaProvider(tpaHint, providers, secondaryProviders);\n\n if (tpaHint) {\n if (thirdPartyAuthApiStatus === PENDING_STATE) {\n return <Skeleton height={36} />;\n }\n\n if (skipHintedLogin) {\n window.location.href = getSiteConfig().lmsBaseUrl + provider.loginUrl;\n return null;\n }\n\n if (provider) {\n return <EnterpriseSSO provider={provider} />;\n }\n }\n\n if (institutionLogin) {\n return (\n <InstitutionLogistration\n secondaryProviders={secondaryProviders}\n headingTitle={formatMessage(messages['institution.login.page.title'])}\n />\n );\n }\n return (\n <>\n <Helmet>\n <title>{formatMessage(messages['login.page.title'], { siteName: getSiteConfig().siteName })}</title>\n </Helmet>\n <RedirectLogistration\n success={loginResult.success}\n redirectUrl={loginResult.redirectUrl}\n finishAuthUrl={finishAuthUrl}\n />\n <div className=\"mw-xs mt-3 mb-2\">\n <LoginFailureMessage\n errorCode={errorCode.type}\n errorCount={errorCode.count}\n context={errorCode.context}\n />\n <ThirdPartyAuthAlert\n currentProvider={currentProvider}\n platformName={platformName}\n />\n <AccountActivationMessage\n messageType={activationMsgType}\n />\n {showResetPasswordSuccessBanner && <ResetPasswordSuccess />}\n <Form id=\"sign-in-form\" name=\"sign-in-form\">\n <FormGroup\n name=\"emailOrUsername\"\n value={formFields.emailOrUsername}\n autoComplete=\"on\"\n handleChange={handleOnChange}\n handleFocus={handleOnFocus}\n errorMessage={errors.emailOrUsername}\n floatingLabel={formatMessage(messages['login.user.identity.label'])}\n />\n <PasswordField\n name=\"password\"\n value={formFields.password}\n autoComplete=\"off\"\n showScreenReaderText={false}\n showRequirements={false}\n handleChange={handleOnChange}\n handleFocus={handleOnFocus}\n errorMessage={errors.password}\n floatingLabel={formatMessage(messages['login.password.label'])}\n />\n <StatefulButton\n name=\"sign-in\"\n id=\"sign-in\"\n type=\"submit\"\n variant=\"brand\"\n className=\"login-button-width\"\n state={(isLoggingIn ? PENDING_STATE : 'default')}\n labels={{\n default: formatMessage(messages['sign.in.button']),\n pending: 'pending',\n }}\n onClick={handleSubmit}\n onMouseDown={(event) => event.preventDefault()}\n />\n <Link\n id=\"forgot-password\"\n name=\"forgot-password\"\n className=\"btn btn-link font-weight-500 text-body\"\n to={updatePathWithQueryParams(getUrlByRouteRole(resetPasswordRole))}\n onClick={trackForgotPasswordLinkClick}\n >\n {formatMessage(messages['forgot.password'])}\n </Link>\n <ThirdPartyAuth\n currentProvider={currentProvider}\n providers={providers}\n secondaryProviders={secondaryProviders}\n handleInstitutionLogin={handleInstitutionLogin}\n thirdPartyAuthApiStatus={thirdPartyAuthApiStatus}\n isLoginPage\n />\n </Form>\n </div>\n </>\n );\n};\n\nLoginPage.propTypes = {\n institutionLogin: PropTypes.bool.isRequired,\n handleInstitutionLogin: PropTypes.func.isRequired,\n};\n\nexport default LoginPage;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"LoginContext.js","sourceRoot":"","sources":["../../../src/login/components/LoginContext.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,aAAa,EAA2C,UAAU,EAAE,OAAO,EAAE,QAAQ,GACtF,MAAM,OAAO,CAAC;AAmBf,MAAM,YAAY,GAAG,aAAa,CAA+B,SAAS,CAAC,CAAC;AAM5E,MAAM,CAAC,MAAM,aAAa,GAA2B,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IACpE,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC;QAC3C,eAAe,EAAE,EAAE;QACnB,QAAQ,EAAE,EAAE;KACb,CAAC,CAAC;IACH,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC;QACnC,eAAe,EAAE,EAAE;QACnB,QAAQ,EAAE,EAAE;KACb,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAClC,UAAU;QACV,aAAa;QACb,MAAM;QACN,SAAS;KACV,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;IAE1B,OAAO,CACL,KAAC,YAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,YAAY,YACvC,QAAQ,GACa,CACzB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,EAAE;IAClC,MAAM,OAAO,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IACzC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC","sourcesContent":["import {\n createContext, Dispatch, FC, ReactNode, SetStateAction, useContext, useMemo, useState,\n} from 'react';\n\nexport interface FormFields {\n emailOrUsername: string,\n password: string,\n}\n\nexport interface FormErrors {\n emailOrUsername: string,\n password: string,\n}\n\ninterface LoginContextType {\n formFields: FormFields,\n setFormFields: Dispatch<SetStateAction<FormFields>>,\n errors: FormErrors,\n setErrors: Dispatch<SetStateAction<FormErrors>>,\n}\n\nconst LoginContext = createContext<LoginContextType | undefined>(undefined);\n\ninterface LoginProviderProps {\n children: ReactNode,\n}\n\nexport const LoginProvider: FC<LoginProviderProps> = ({ children }) => {\n const [formFields, setFormFields] = useState({\n emailOrUsername: '',\n password: '',\n });\n const [errors, setErrors] = useState({\n emailOrUsername: '',\n password: '',\n });\n\n const contextValue = useMemo(() => ({\n formFields,\n setFormFields,\n errors,\n setErrors,\n }), [formFields, errors]);\n\n return (\n <LoginContext.Provider value={contextValue}>\n {children}\n </LoginContext.Provider>\n );\n};\n\nexport const useLoginContext = () => {\n const context = useContext(LoginContext);\n if (context === undefined) {\n throw new Error('useLoginContext must be used within a LoginProvider');\n }\n return context;\n};\n"]}
1
+ {"version":3,"file":"LoginContext.js","sourceRoot":"","sources":["../../../src/login/components/LoginContext.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,aAAa,EAA2C,UAAU,EAAE,OAAO,EAAE,QAAQ,GACtF,MAAM,OAAO,CAAC;AAmBf,MAAM,YAAY,GAAG,aAAa,CAA+B,SAAS,CAAC,CAAC;AAM5E,MAAM,CAAC,MAAM,aAAa,GAA2B,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IACpE,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC;QAC3C,eAAe,EAAE,EAAE;QACnB,QAAQ,EAAE,EAAE;KACb,CAAC,CAAC;IACH,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC;QACnC,eAAe,EAAE,EAAE;QACnB,QAAQ,EAAE,EAAE;KACb,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAClC,UAAU;QACV,aAAa;QACb,MAAM;QACN,SAAS;KACV,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;IAE1B,OAAO,CACL,KAAC,YAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,YAAY,YACvC,QAAQ,GACa,CACzB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,EAAE;IAClC,MAAM,OAAO,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IACzC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC","sourcesContent":["import {\n createContext, Dispatch, FC, ReactNode, SetStateAction, useContext, useMemo, useState,\n} from 'react';\n\nexport interface FormFields {\n emailOrUsername: string;\n password: string;\n}\n\nexport interface FormErrors {\n emailOrUsername: string;\n password: string;\n}\n\ninterface LoginContextType {\n formFields: FormFields;\n setFormFields: Dispatch<SetStateAction<FormFields>>;\n errors: FormErrors;\n setErrors: Dispatch<SetStateAction<FormErrors>>;\n}\n\nconst LoginContext = createContext<LoginContextType | undefined>(undefined);\n\ninterface LoginProviderProps {\n children: ReactNode;\n}\n\nexport const LoginProvider: FC<LoginProviderProps> = ({ children }) => {\n const [formFields, setFormFields] = useState({\n emailOrUsername: '',\n password: '',\n });\n const [errors, setErrors] = useState({\n emailOrUsername: '',\n password: '',\n });\n\n const contextValue = useMemo(() => ({\n formFields,\n setFormFields,\n errors,\n setErrors,\n }), [formFields, errors]);\n\n return (\n <LoginContext.Provider value={contextValue}>\n {children}\n </LoginContext.Provider>\n );\n};\n\nexport const useLoginContext = () => {\n const context = useContext(LoginContext);\n if (context === undefined) {\n throw new Error('useLoginContext must be used within a LoginProvider');\n }\n return context;\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"apiHook.js","sourceRoot":"","sources":["../../../src/login/data/apiHook.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAiBvE,MAAM,QAAQ,GAAG,CAAC,UAA2B,EAAE,EAAE,EAAE,CAAC,WAAW,CAAoC;IACjG,UAAU,EAAE,CAAO,SAAoB,EAAE,EAAE,kDAAC,OAAA,KAAK,CAAC,SAAS,CAA2B,CAAA,GAAA;IACtF,SAAS,EAAE,CAAC,IAAmB,EAAE,EAAE;QACjC,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;QAClC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC,KAAc,EAAE,EAAE;;QAC1B,QAAQ,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QAChC,IAAI,cAAc,GAAG;YACnB,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,EAAE;YACX,KAAK,EAAE,CAAC;SACT,CAAC;QACF,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,UAAU,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAChF,MAAM,QAAQ,GAAG,KAAK,CAAC,QAA+C,CAAC;YACvE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;YACnD,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACrC,MAAM,SAAS,GAAG,IAAmE,CAAC;gBACtF,cAAc,GAAG;oBACf,IAAI,EAAE,SAAS,CAAC,SAAS,IAAI,iBAAiB;oBAC9C,OAAO,EAAE,SAAS,CAAC,OAAO,IAAI,EAAE;oBAChC,KAAK,EAAE,CAAA,MAAA,SAAS,CAAC,OAAO,0CAAE,YAAY,KAAI,CAAC;iBAC5C,CAAC;gBACF,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;oBACnB,OAAO,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;gBACvD,CAAC;qBAAM,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;oBAC1B,OAAO,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;gBACtD,CAAC;qBAAM,CAAC;oBACN,QAAQ,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;gBACpD,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;CACF,CAAC,CAAC;AACH,OAAO,EACL,QAAQ,GACT,CAAC","sourcesContent":["import { camelCaseObject, logError, logInfo } from '@openedx/frontend-base';\nimport { useMutation } from '@tanstack/react-query';\n\nimport { login } from './api';\nimport { FORBIDDEN_REQUEST, INTERNAL_SERVER_ERROR } from './constants';\n\n// Type definitions\ninterface LoginData {\n email_or_username: string,\n password: string,\n}\n\ninterface LoginResponse {\n redirectUrl?: string,\n}\n\ninterface UseLoginOptions {\n onSuccess?: (data: LoginResponse) => void,\n onError?: (error: unknown) => void,\n}\n\nconst useLogin = (options: UseLoginOptions = {}) => useMutation<LoginResponse, unknown, LoginData>({\n mutationFn: async (loginData: LoginData) => login(loginData) as Promise<LoginResponse>,\n onSuccess: (data: LoginResponse) => {\n logInfo('Login successful', data);\n if (options.onSuccess) {\n options.onSuccess(data);\n }\n },\n onError: (error: unknown) => {\n logError('Login failed', error);\n let formattedError = {\n type: INTERNAL_SERVER_ERROR,\n context: {},\n count: 0,\n };\n if (error && typeof error === 'object' && 'response' in error && error.response) {\n const response = error.response as { status?: number, data?: unknown };\n const { status, data } = camelCaseObject(response);\n if (data && typeof data === 'object') {\n const errorData = data as { errorCode?: string, context?: { failureCount?: number } };\n formattedError = {\n type: errorData.errorCode || FORBIDDEN_REQUEST,\n context: errorData.context || {},\n count: errorData.context?.failureCount || 0,\n };\n if (status === 400) {\n logInfo('Login failed with validation error', error);\n } else if (status === 403) {\n logInfo('Login failed with forbidden error', error);\n } else {\n logError('Login failed with server error', error);\n }\n }\n }\n if (options.onError) {\n options.onError(formattedError);\n }\n },\n});\nexport {\n useLogin,\n};\n"]}
1
+ {"version":3,"file":"apiHook.js","sourceRoot":"","sources":["../../../src/login/data/apiHook.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAiBvE,MAAM,QAAQ,GAAG,CAAC,UAA2B,EAAE,EAAE,EAAE,CAAC,WAAW,CAAoC;IACjG,UAAU,EAAE,CAAO,SAAoB,EAAE,EAAE,kDAAC,OAAA,KAAK,CAAC,SAAS,CAA2B,CAAA,GAAA;IACtF,SAAS,EAAE,CAAC,IAAmB,EAAE,EAAE;QACjC,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;QAClC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC,KAAc,EAAE,EAAE;;QAC1B,QAAQ,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QAChC,IAAI,cAAc,GAAG;YACnB,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,EAAE;YACX,KAAK,EAAE,CAAC;SACT,CAAC;QACF,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,UAAU,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAChF,MAAM,QAAQ,GAAG,KAAK,CAAC,QAA+C,CAAC;YACvE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;YACnD,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACrC,MAAM,SAAS,GAAG,IAAmE,CAAC;gBACtF,cAAc,GAAG;oBACf,IAAI,EAAE,SAAS,CAAC,SAAS,IAAI,iBAAiB;oBAC9C,OAAO,EAAE,SAAS,CAAC,OAAO,IAAI,EAAE;oBAChC,KAAK,EAAE,CAAA,MAAA,SAAS,CAAC,OAAO,0CAAE,YAAY,KAAI,CAAC;iBAC5C,CAAC;gBACF,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;oBACnB,OAAO,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;gBACvD,CAAC;qBAAM,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;oBAC1B,OAAO,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;gBACtD,CAAC;qBAAM,CAAC;oBACN,QAAQ,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;gBACpD,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;CACF,CAAC,CAAC;AACH,OAAO,EACL,QAAQ,GACT,CAAC","sourcesContent":["import { camelCaseObject, logError, logInfo } from '@openedx/frontend-base';\nimport { useMutation } from '@tanstack/react-query';\n\nimport { login } from './api';\nimport { FORBIDDEN_REQUEST, INTERNAL_SERVER_ERROR } from './constants';\n\n// Type definitions\ninterface LoginData {\n email_or_username: string;\n password: string;\n}\n\ninterface LoginResponse {\n redirectUrl?: string;\n}\n\ninterface UseLoginOptions {\n onSuccess?: (data: LoginResponse) => void;\n onError?: (error: unknown) => void;\n}\n\nconst useLogin = (options: UseLoginOptions = {}) => useMutation<LoginResponse, unknown, LoginData>({\n mutationFn: async (loginData: LoginData) => login(loginData) as Promise<LoginResponse>,\n onSuccess: (data: LoginResponse) => {\n logInfo('Login successful', data);\n if (options.onSuccess) {\n options.onSuccess(data);\n }\n },\n onError: (error: unknown) => {\n logError('Login failed', error);\n let formattedError = {\n type: INTERNAL_SERVER_ERROR,\n context: {},\n count: 0,\n };\n if (error && typeof error === 'object' && 'response' in error && error.response) {\n const response = error.response as { status?: number; data?: unknown };\n const { status, data } = camelCaseObject(response);\n if (data && typeof data === 'object') {\n const errorData = data as { errorCode?: string; context?: { failureCount?: number } };\n formattedError = {\n type: errorData.errorCode || FORBIDDEN_REQUEST,\n context: errorData.context || {},\n count: errorData.context?.failureCount || 0,\n };\n if (status === 400) {\n logInfo('Login failed with validation error', error);\n } else if (status === 403) {\n logInfo('Login failed with forbidden error', error);\n } else {\n logError('Login failed with server error', error);\n }\n }\n }\n if (options.onError) {\n options.onError(formattedError);\n }\n },\n});\nexport {\n useLogin,\n};\n"]}
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { useEffect, useState } from 'react';
3
- import { AxiosJwtAuthService, configureAuth, getAuthenticatedUser, getLoggingService, getSiteConfig, getUrlByRouteRole, identifyAuthenticatedUser, sendPageEvent, sendTrackEvent, snakeCaseObject, useAppConfig, useIntl, } from '@openedx/frontend-base';
3
+ import { AxiosJwtAuthService, configureAuth, getAuthenticatedUser, getLoggingService, getSiteConfig, identifyAuthenticatedUser, sendPageEvent, sendTrackEvent, snakeCaseObject, useAppConfig, useIntl, } from '@openedx/frontend-base';
4
4
  import { Alert, Form, Hyperlink, Spinner, StatefulButton, } from '@openedx/paragon';
5
5
  import { Error } from '@openedx/paragon/icons';
6
6
  import { Helmet } from 'react-helmet';
@@ -13,10 +13,10 @@ import { RedirectLogistration } from '../common-components';
13
13
  import { useSaveUserProfile } from './data/apiHook';
14
14
  import { ThirdPartyAuthProvider, useThirdPartyAuthContext } from '../common-components/components/ThirdPartyAuthContext';
15
15
  import { useThirdPartyAuthHook } from '../common-components/data/apiHook';
16
- import { dashboardRole, welcomePath } from '../constants';
16
+ import { welcomePath } from '../constants';
17
17
  import { COMPLETE_STATE, FAILURE_STATE, PENDING_STATE, } from '../data/constants';
18
18
  import isOneTrustFunctionalCookieEnabled from '../data/oneTrust';
19
- import { getAllPossibleQueryParams, isHostAvailableInQueryParams } from '../data/utils';
19
+ import { getAllPossibleQueryParams, getDashboardRoute, isHostAvailableInQueryParams } from '../data/utils';
20
20
  import { FormFieldRenderer } from '../field-renderer';
21
21
  const ProgressiveProfilingInner = () => {
22
22
  var _a, _b, _c, _d;
@@ -68,7 +68,7 @@ const ProgressiveProfilingInner = () => {
68
68
  fields: welcomePageContext.fields,
69
69
  extendedProfile: welcomePageContext.extended_profile,
70
70
  });
71
- const nextUrl = welcomePageContext.nextUrl ? welcomePageContext.nextUrl : appConfig.SEARCH_CATALOG_URL;
71
+ const nextUrl = welcomePageContext.nextUrl || appConfig.SEARCH_CATALOG_URL || '';
72
72
  setRegistrationResult({ redirectUrl: nextUrl });
73
73
  }
74
74
  }, [registrationEmbedded, welcomePageContext, appConfig.SEARCH_CATALOG_URL]);
@@ -82,11 +82,11 @@ const ProgressiveProfilingInner = () => {
82
82
  || !(((_d = location.state) === null || _d === void 0 ? void 0 : _d.registrationResult) || registrationEmbedded)
83
83
  || thirdPartyAuthApiStatus === FAILURE_STATE
84
84
  || (thirdPartyAuthApiStatus === COMPLETE_STATE && !Object.keys(welcomePageContext).includes('fields'))) {
85
- const dashboardUrl = getUrlByRouteRole(dashboardRole) || '/';
86
- if (dashboardUrl.startsWith('/')) {
87
- return _jsx(Navigate, { to: dashboardUrl, replace: true });
85
+ const dashboard = getDashboardRoute();
86
+ if (dashboard.isInternal) {
87
+ return _jsx(Navigate, { to: dashboard.url, replace: true });
88
88
  }
89
- window.location.href = dashboardUrl;
89
+ window.location.href = dashboard.url;
90
90
  return null;
91
91
  }
92
92
  const handleSubmit = (e) => {
@@ -1 +1 @@
1
- {"version":3,"file":"ProgressiveProfiling.js","sourceRoot":"","sources":["../../src/progressive-profiling/ProgressiveProfiling.jsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useState } from 'react';\n\nimport {\n AxiosJwtAuthService,\n configureAuth,\n getAuthenticatedUser,\n getLoggingService,\n getSiteConfig,\n getUrlByRouteRole,\n identifyAuthenticatedUser,\n sendPageEvent,\n sendTrackEvent,\n snakeCaseObject,\n useAppConfig,\n useIntl,\n} from '@openedx/frontend-base';\nimport {\n Alert,\n Form,\n Hyperlink,\n Spinner,\n StatefulButton,\n} from '@openedx/paragon';\nimport { Error } from '@openedx/paragon/icons';\nimport { Helmet } from 'react-helmet';\nimport { Navigate, useLocation } from 'react-router-dom';\n\nimport { ProgressiveProfilingProvider, useProgressiveProfilingContext } from './components/ProgressiveProfilingContext';\nimport messages from './messages';\nimport ProgressiveProfilingPageModal from './ProgressiveProfilingPageModal';\nimport BaseContainer from '../base-container';\nimport { RedirectLogistration } from '../common-components';\nimport { useSaveUserProfile } from './data/apiHook';\nimport { ThirdPartyAuthProvider, useThirdPartyAuthContext } from '../common-components/components/ThirdPartyAuthContext';\nimport { useThirdPartyAuthHook } from '../common-components/data/apiHook';\nimport { dashboardRole, welcomePath } from '../constants';\nimport {\n COMPLETE_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 ProgressiveProfilingInner = () => {\n const { formatMessage } = useIntl();\n const appConfig = useAppConfig();\n\n const {\n thirdPartyAuthApiStatus,\n setThirdPartyAuthContextSuccess,\n setThirdPartyAuthContextFailure,\n optionalFields,\n } = useThirdPartyAuthContext();\n\n const welcomePageContext = optionalFields;\n const {\n submitState,\n showError,\n success,\n } = useProgressiveProfilingContext();\n\n // Hook for saving user profile\n const saveUserProfileMutation = useSaveUserProfile();\n\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\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\n const { data, isSuccess, error } = useThirdPartyAuthHook(welcomePath,\n { is_welcome_page: true, next: queryParams?.next }, { enabled: registrationEmbedded });\n\n useEffect(() => {\n if (registrationEmbedded) {\n if (isSuccess && data) {\n setThirdPartyAuthContextSuccess(\n data.fieldDescriptions,\n data.optionalFields,\n data.thirdPartyAuthContext,\n );\n }\n if (error) {\n setThirdPartyAuthContextFailure();\n }\n } else {\n configureAuth(AxiosJwtAuthService, { loggingService: getLoggingService(), config: getSiteConfig() });\n }\n }, [registrationEmbedded, queryParams?.next, isSuccess, data, error,\n setThirdPartyAuthContextSuccess, setThirdPartyAuthContextFailure]);\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?.registrationResult, location.state?.optionalFields]);\n\n useEffect(() => {\n if (registrationEmbedded && welcomePageContext && Object.keys(welcomePageContext).includes('fields')) {\n setFormFieldData({\n fields: welcomePageContext.fields,\n extendedProfile: welcomePageContext.extended_profile,\n });\n const nextUrl = welcomePageContext.nextUrl ? welcomePageContext.nextUrl : appConfig.SEARCH_CATALOG_URL;\n setRegistrationResult({ redirectUrl: nextUrl });\n }\n }, [registrationEmbedded, welcomePageContext, appConfig.SEARCH_CATALOG_URL]);\n\n useEffect(() => {\n if (authenticatedUser?.userId) {\n identifyAuthenticatedUser(authenticatedUser.userId);\n sendPageEvent('login_and_registration', 'welcome');\n }\n }, [authenticatedUser]);\n\n if (\n !authenticatedUser\n || !(location.state?.registrationResult || registrationEmbedded)\n || thirdPartyAuthApiStatus === FAILURE_STATE\n || (thirdPartyAuthApiStatus === COMPLETE_STATE && !Object.keys(welcomePageContext).includes('fields'))\n ) {\n const dashboardUrl = getUrlByRouteRole(dashboardRole) || '/';\n if (dashboardUrl.startsWith('/')) {\n return <Navigate to={dashboardUrl} replace />;\n }\n window.location.href = dashboardUrl;\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 saveUserProfileMutation.mutate({ username: authenticatedUser.username, data: 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 <span key={fieldData.name}>\n <FormFieldRenderer\n fieldData={fieldData}\n value={values[fieldData.name]}\n onChangeHandler={onChangeHandler}\n />\n </span>\n );\n });\n\n const shouldRedirect = success;\n return (\n <BaseContainer showWelcomeBanner fullName={authenticatedUser?.fullName || authenticatedUser?.name}>\n <Helmet>\n <title>{formatMessage(messages['progressive.profiling.page.title'],\n { siteName: getSiteConfig().siteName })}\n </title>\n </Helmet>\n <ProgressiveProfilingPageModal isOpen={showModal} redirectUrl={registrationResult.redirectUrl} />\n {shouldRedirect && (\n <RedirectLogistration\n success\n redirectUrl={registrationResult.redirectUrl}\n educationLevel={values?.level_of_education}\n userId={authenticatedUser?.userId}\n />\n )}\n <div className=\"mw-xs m-4 pp-page-content\">\n {registrationEmbedded && thirdPartyAuthApiStatus === PENDING_STATE ? (\n <Spinner animation=\"border\" variant=\"primary\" id=\"tpa-spinner\" />\n ) : (\n <>\n <div>\n <h2 className=\"pp-page__heading text-primary\">{formatMessage(messages['progressive.profiling.page.heading'])}</h2>\n </div><hr className=\"border-light-700 mb-4\" />\n {showError ? (\n <Alert id=\"pp-page-errors\" className=\"mb-3\" variant=\"danger\" icon={Error}>\n <Alert.Heading>{formatMessage(messages['welcome.page.error.heading'])}</Alert.Heading>\n <p>{formatMessage(messages['welcome.page.error.message'])}</p>\n </Alert>\n ) : null}\n <Form>\n {formFields}\n {(appConfig.AUTHN_PROGRESSIVE_PROFILING_SUPPORT_LINK) && (\n <span className=\"pp-page__support-link\">\n <Hyperlink\n isInline\n variant=\"muted\"\n destination={appConfig.AUTHN_PROGRESSIVE_PROFILING_SUPPORT_LINK}\n target=\"_blank\"\n showLaunchIcon={false}\n onClick={() => (sendTrackEvent('edx.bi.welcome.page.support.link.clicked'))}\n >\n {formatMessage(messages['optional.fields.information.link'])}\n </Hyperlink>\n </span>\n )}\n <div className=\"d-flex mt-4 mb-3\">\n <StatefulButton\n type=\"submit\"\n variant=\"brand\"\n className=\"pp-page__button-width\"\n state={submitState}\n labels={{\n default: formatMessage(messages['optional.fields.submit.button']),\n pending: '',\n }}\n onClick={handleSubmit}\n onMouseDown={(e) => e.preventDefault()}\n />\n <StatefulButton\n className=\"text-gray-700 font-weight-500\"\n type=\"submit\"\n variant=\"link\"\n labels={{\n default: formatMessage(messages['optional.fields.skip.button']),\n }}\n onClick={handleSkip}\n onMouseDown={(e) => e.preventDefault()}\n />\n </div>\n </Form>\n </>\n )}\n\n </div>\n </BaseContainer>\n );\n};\n\nconst ProgressiveProfiling = (props) => (\n <ThirdPartyAuthProvider>\n <ProgressiveProfilingProvider>\n <ProgressiveProfilingInner {...props} />\n </ProgressiveProfilingProvider>\n </ThirdPartyAuthProvider>\n);\n\nexport default ProgressiveProfiling;\n"]}
1
+ {"version":3,"file":"ProgressiveProfiling.js","sourceRoot":"","sources":["../../src/progressive-profiling/ProgressiveProfiling.jsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useState } from 'react';\n\nimport {\n AxiosJwtAuthService,\n configureAuth,\n getAuthenticatedUser,\n getLoggingService,\n getSiteConfig,\n identifyAuthenticatedUser,\n sendPageEvent,\n sendTrackEvent,\n snakeCaseObject,\n useAppConfig,\n useIntl,\n} from '@openedx/frontend-base';\nimport {\n Alert,\n Form,\n Hyperlink,\n Spinner,\n StatefulButton,\n} from '@openedx/paragon';\nimport { Error } from '@openedx/paragon/icons';\nimport { Helmet } from 'react-helmet';\nimport { Navigate, useLocation } from 'react-router-dom';\n\nimport { ProgressiveProfilingProvider, useProgressiveProfilingContext } from './components/ProgressiveProfilingContext';\nimport messages from './messages';\nimport ProgressiveProfilingPageModal from './ProgressiveProfilingPageModal';\nimport BaseContainer from '../base-container';\nimport { RedirectLogistration } from '../common-components';\nimport { useSaveUserProfile } from './data/apiHook';\nimport { ThirdPartyAuthProvider, useThirdPartyAuthContext } from '../common-components/components/ThirdPartyAuthContext';\nimport { useThirdPartyAuthHook } from '../common-components/data/apiHook';\nimport { welcomePath } from '../constants';\nimport {\n COMPLETE_STATE,\n FAILURE_STATE,\n PENDING_STATE,\n} from '../data/constants';\nimport isOneTrustFunctionalCookieEnabled from '../data/oneTrust';\nimport { getAllPossibleQueryParams, getDashboardRoute, isHostAvailableInQueryParams } from '../data/utils';\nimport { FormFieldRenderer } from '../field-renderer';\n\nconst ProgressiveProfilingInner = () => {\n const { formatMessage } = useIntl();\n const appConfig = useAppConfig();\n\n const {\n thirdPartyAuthApiStatus,\n setThirdPartyAuthContextSuccess,\n setThirdPartyAuthContextFailure,\n optionalFields,\n } = useThirdPartyAuthContext();\n\n const welcomePageContext = optionalFields;\n const {\n submitState,\n showError,\n success,\n } = useProgressiveProfilingContext();\n\n // Hook for saving user profile\n const saveUserProfileMutation = useSaveUserProfile();\n\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\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\n const { data, isSuccess, error } = useThirdPartyAuthHook(welcomePath,\n { is_welcome_page: true, next: queryParams?.next }, { enabled: registrationEmbedded });\n\n useEffect(() => {\n if (registrationEmbedded) {\n if (isSuccess && data) {\n setThirdPartyAuthContextSuccess(\n data.fieldDescriptions,\n data.optionalFields,\n data.thirdPartyAuthContext,\n );\n }\n if (error) {\n setThirdPartyAuthContextFailure();\n }\n } else {\n configureAuth(AxiosJwtAuthService, { loggingService: getLoggingService(), config: getSiteConfig() });\n }\n }, [registrationEmbedded, queryParams?.next, isSuccess, data, error,\n setThirdPartyAuthContextSuccess, setThirdPartyAuthContextFailure]);\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?.registrationResult, location.state?.optionalFields]);\n\n useEffect(() => {\n if (registrationEmbedded && welcomePageContext && Object.keys(welcomePageContext).includes('fields')) {\n setFormFieldData({\n fields: welcomePageContext.fields,\n extendedProfile: welcomePageContext.extended_profile,\n });\n const nextUrl = welcomePageContext.nextUrl || appConfig.SEARCH_CATALOG_URL || '';\n setRegistrationResult({ redirectUrl: nextUrl });\n }\n }, [registrationEmbedded, welcomePageContext, appConfig.SEARCH_CATALOG_URL]);\n\n useEffect(() => {\n if (authenticatedUser?.userId) {\n identifyAuthenticatedUser(authenticatedUser.userId);\n sendPageEvent('login_and_registration', 'welcome');\n }\n }, [authenticatedUser]);\n\n if (\n !authenticatedUser\n || !(location.state?.registrationResult || registrationEmbedded)\n || thirdPartyAuthApiStatus === FAILURE_STATE\n || (thirdPartyAuthApiStatus === COMPLETE_STATE && !Object.keys(welcomePageContext).includes('fields'))\n ) {\n const dashboard = getDashboardRoute();\n if (dashboard.isInternal) {\n return <Navigate to={dashboard.url} replace />;\n }\n window.location.href = 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 saveUserProfileMutation.mutate({ username: authenticatedUser.username, data: 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 <span key={fieldData.name}>\n <FormFieldRenderer\n fieldData={fieldData}\n value={values[fieldData.name]}\n onChangeHandler={onChangeHandler}\n />\n </span>\n );\n });\n\n const shouldRedirect = success;\n return (\n <BaseContainer showWelcomeBanner fullName={authenticatedUser?.fullName || authenticatedUser?.name}>\n <Helmet>\n <title>{formatMessage(messages['progressive.profiling.page.title'],\n { siteName: getSiteConfig().siteName })}\n </title>\n </Helmet>\n <ProgressiveProfilingPageModal isOpen={showModal} redirectUrl={registrationResult.redirectUrl} />\n {shouldRedirect && (\n <RedirectLogistration\n success\n redirectUrl={registrationResult.redirectUrl}\n educationLevel={values?.level_of_education}\n userId={authenticatedUser?.userId}\n />\n )}\n <div className=\"mw-xs m-4 pp-page-content\">\n {registrationEmbedded && thirdPartyAuthApiStatus === PENDING_STATE ? (\n <Spinner animation=\"border\" variant=\"primary\" id=\"tpa-spinner\" />\n ) : (\n <>\n <div>\n <h2 className=\"pp-page__heading text-primary\">{formatMessage(messages['progressive.profiling.page.heading'])}</h2>\n </div><hr className=\"border-light-700 mb-4\" />\n {showError ? (\n <Alert id=\"pp-page-errors\" className=\"mb-3\" variant=\"danger\" icon={Error}>\n <Alert.Heading>{formatMessage(messages['welcome.page.error.heading'])}</Alert.Heading>\n <p>{formatMessage(messages['welcome.page.error.message'])}</p>\n </Alert>\n ) : null}\n <Form>\n {formFields}\n {(appConfig.AUTHN_PROGRESSIVE_PROFILING_SUPPORT_LINK) && (\n <span className=\"pp-page__support-link\">\n <Hyperlink\n isInline\n variant=\"muted\"\n destination={appConfig.AUTHN_PROGRESSIVE_PROFILING_SUPPORT_LINK}\n target=\"_blank\"\n showLaunchIcon={false}\n onClick={() => (sendTrackEvent('edx.bi.welcome.page.support.link.clicked'))}\n >\n {formatMessage(messages['optional.fields.information.link'])}\n </Hyperlink>\n </span>\n )}\n <div className=\"d-flex mt-4 mb-3\">\n <StatefulButton\n type=\"submit\"\n variant=\"brand\"\n className=\"pp-page__button-width\"\n state={submitState}\n labels={{\n default: formatMessage(messages['optional.fields.submit.button']),\n pending: '',\n }}\n onClick={handleSubmit}\n onMouseDown={(e) => e.preventDefault()}\n />\n <StatefulButton\n className=\"text-gray-700 font-weight-500\"\n type=\"submit\"\n variant=\"link\"\n labels={{\n default: formatMessage(messages['optional.fields.skip.button']),\n }}\n onClick={handleSkip}\n onMouseDown={(e) => e.preventDefault()}\n />\n </div>\n </Form>\n </>\n )}\n\n </div>\n </BaseContainer>\n );\n};\n\nconst ProgressiveProfiling = (props) => (\n <ThirdPartyAuthProvider>\n <ProgressiveProfilingProvider>\n <ProgressiveProfilingInner {...props} />\n </ProgressiveProfilingProvider>\n </ThirdPartyAuthProvider>\n);\n\nexport default ProgressiveProfiling;\n"]}
@@ -3,11 +3,13 @@ declare function ProgressiveProfilingPageModal(props: any): import("react/jsx-ru
3
3
  declare namespace ProgressiveProfilingPageModal {
4
4
  namespace propTypes {
5
5
  let isOpen: PropTypes.Requireable<boolean>;
6
- let redirectUrl: PropTypes.Validator<string>;
6
+ let redirectUrl: PropTypes.Requireable<string>;
7
7
  }
8
8
  namespace defaultProps {
9
9
  let isOpen_1: boolean;
10
10
  export { isOpen_1 as isOpen };
11
+ let redirectUrl_1: string;
12
+ export { redirectUrl_1 as redirectUrl };
11
13
  }
12
14
  }
13
15
  import PropTypes from 'prop-types';
@@ -1,5 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { getSiteConfig, useIntl } from '@openedx/frontend-base';
2
+ import { getSiteConfig, isInternalUrl, useIntl } from '@openedx/frontend-base';
3
3
  import { ActionRow, Button, ModalDialog } from '@openedx/paragon';
4
4
  import PropTypes from 'prop-types';
5
5
  import { useNavigate } from 'react-router-dom';
@@ -11,21 +11,24 @@ const ProgressiveProfilingPageModal = (props) => {
11
11
  const platformName = getSiteConfig().siteName;
12
12
  const handleSubmit = (e) => {
13
13
  e.preventDefault();
14
- if (redirectUrl.startsWith('/')) {
15
- navigate(redirectUrl);
14
+ // With no redirect configured, "continue to the platform" means the site itself.
15
+ const destination = redirectUrl || getSiteConfig().baseUrl;
16
+ if (isInternalUrl(destination)) {
17
+ navigate(destination);
16
18
  }
17
19
  else {
18
- window.location.href = redirectUrl;
20
+ window.location.href = destination;
19
21
  }
20
22
  };
21
23
  return (_jsxs(ModalDialog, { title: formatMessage(messages['modal.title']), isOpen: isOpen, onClose: () => { }, size: "sm", variant: "default", hasCloseButton: false, children: [_jsx(ModalDialog.Header, { children: _jsx(ModalDialog.Title, { children: formatMessage(messages['modal.title']) }) }), _jsx(ModalDialog.Body, { children: formatMessage(messages['modal.description']) }), _jsx(ModalDialog.Footer, { children: _jsx(ActionRow, { children: _jsx(Button, { onClick: handleSubmit, variant: "primary", children: formatMessage(messages['continue.to.platform'], { platformName }) }) }) })] }));
22
24
  };
23
25
  ProgressiveProfilingPageModal.propTypes = {
24
26
  isOpen: PropTypes.bool,
25
- redirectUrl: PropTypes.string.isRequired,
27
+ redirectUrl: PropTypes.string,
26
28
  };
27
29
  ProgressiveProfilingPageModal.defaultProps = {
28
30
  isOpen: false,
31
+ redirectUrl: '',
29
32
  };
30
33
  export default ProgressiveProfilingPageModal;
31
34
  //# sourceMappingURL=ProgressiveProfilingPageModal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProgressiveProfilingPageModal.js","sourceRoot":"","sources":["../../src/progressive-profiling/ProgressiveProfilingPageModal.jsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,6BAA6B,GAAG,CAAC,KAAK,EAAE,EAAE;IAC9C,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;IACtC,MAAM,YAAY,GAAG,aAAa,EAAE,CAAC,QAAQ,CAAC;IAE9C,MAAM,YAAY,GAAG,CAAC,CAAC,EAAE,EAAE;QACzB,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,IAAI,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAChC,QAAQ,CAAC,WAAW,CAAC,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,WAAW,CAAC;QACrC,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CACL,MAAC,WAAW,IACV,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,EAC7C,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,EAClB,IAAI,EAAC,IAAI,EACT,OAAO,EAAC,SAAS,EACjB,cAAc,EAAE,KAAK,aAErB,KAAC,WAAW,CAAC,MAAM,cACjB,KAAC,WAAW,CAAC,KAAK,cACf,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,GACrB,GACD,EAErB,KAAC,WAAW,CAAC,IAAI,cACd,aAAa,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,GAC5B,EAEnB,KAAC,WAAW,CAAC,MAAM,cACjB,KAAC,SAAS,cACR,KAAC,MAAM,IAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAC,SAAS,YAC7C,aAAa,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,EAAE,YAAY,EAAE,CAAC,GAC3D,GACC,GACO,IACT,CACf,CAAC;AACJ,CAAC,CAAC;AAEF,6BAA6B,CAAC,SAAS,GAAG;IACxC,MAAM,EAAE,SAAS,CAAC,IAAI;IACtB,WAAW,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU;CACzC,CAAC;AAEF,6BAA6B,CAAC,YAAY,GAAG;IAC3C,MAAM,EAAE,KAAK;CACd,CAAC;AAEF,eAAe,6BAA6B,CAAC","sourcesContent":["import { getSiteConfig, useIntl } from '@openedx/frontend-base';\nimport { ActionRow, Button, ModalDialog } from '@openedx/paragon';\nimport PropTypes from 'prop-types';\nimport { useNavigate } from 'react-router-dom';\n\nimport messages from './messages';\n\nconst ProgressiveProfilingPageModal = (props) => {\n const { formatMessage } = useIntl();\n const navigate = useNavigate();\n const { isOpen, redirectUrl } = props;\n const platformName = getSiteConfig().siteName;\n\n const handleSubmit = (e) => {\n e.preventDefault();\n if (redirectUrl.startsWith('/')) {\n navigate(redirectUrl);\n } else {\n window.location.href = redirectUrl;\n }\n };\n\n return (\n <ModalDialog\n title={formatMessage(messages['modal.title'])}\n isOpen={isOpen}\n onClose={() => { }}\n size=\"sm\"\n variant=\"default\"\n hasCloseButton={false}\n >\n <ModalDialog.Header>\n <ModalDialog.Title>\n {formatMessage(messages['modal.title'])}\n </ModalDialog.Title>\n </ModalDialog.Header>\n\n <ModalDialog.Body>\n {formatMessage(messages['modal.description'])}\n </ModalDialog.Body>\n\n <ModalDialog.Footer>\n <ActionRow>\n <Button onClick={handleSubmit} variant=\"primary\">\n {formatMessage(messages['continue.to.platform'], { platformName })}\n </Button>\n </ActionRow>\n </ModalDialog.Footer>\n </ModalDialog>\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"]}
1
+ {"version":3,"file":"ProgressiveProfilingPageModal.js","sourceRoot":"","sources":["../../src/progressive-profiling/ProgressiveProfilingPageModal.jsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,6BAA6B,GAAG,CAAC,KAAK,EAAE,EAAE;IAC9C,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;IACtC,MAAM,YAAY,GAAG,aAAa,EAAE,CAAC,QAAQ,CAAC;IAE9C,MAAM,YAAY,GAAG,CAAC,CAAC,EAAE,EAAE;QACzB,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,iFAAiF;QACjF,MAAM,WAAW,GAAG,WAAW,IAAI,aAAa,EAAE,CAAC,OAAO,CAAC;QAC3D,IAAI,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,QAAQ,CAAC,WAAW,CAAC,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,WAAW,CAAC;QACrC,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CACL,MAAC,WAAW,IACV,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,EAC7C,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,EAClB,IAAI,EAAC,IAAI,EACT,OAAO,EAAC,SAAS,EACjB,cAAc,EAAE,KAAK,aAErB,KAAC,WAAW,CAAC,MAAM,cACjB,KAAC,WAAW,CAAC,KAAK,cACf,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,GACrB,GACD,EAErB,KAAC,WAAW,CAAC,IAAI,cACd,aAAa,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,GAC5B,EAEnB,KAAC,WAAW,CAAC,MAAM,cACjB,KAAC,SAAS,cACR,KAAC,MAAM,IAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAC,SAAS,YAC7C,aAAa,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,EAAE,YAAY,EAAE,CAAC,GAC3D,GACC,GACO,IACT,CACf,CAAC;AACJ,CAAC,CAAC;AAEF,6BAA6B,CAAC,SAAS,GAAG;IACxC,MAAM,EAAE,SAAS,CAAC,IAAI;IACtB,WAAW,EAAE,SAAS,CAAC,MAAM;CAC9B,CAAC;AAEF,6BAA6B,CAAC,YAAY,GAAG;IAC3C,MAAM,EAAE,KAAK;IACb,WAAW,EAAE,EAAE;CAChB,CAAC;AAEF,eAAe,6BAA6B,CAAC","sourcesContent":["import { getSiteConfig, isInternalUrl, useIntl } from '@openedx/frontend-base';\nimport { ActionRow, Button, ModalDialog } from '@openedx/paragon';\nimport PropTypes from 'prop-types';\nimport { useNavigate } from 'react-router-dom';\n\nimport messages from './messages';\n\nconst ProgressiveProfilingPageModal = (props) => {\n const { formatMessage } = useIntl();\n const navigate = useNavigate();\n const { isOpen, redirectUrl } = props;\n const platformName = getSiteConfig().siteName;\n\n const handleSubmit = (e) => {\n e.preventDefault();\n // With no redirect configured, \"continue to the platform\" means the site itself.\n const destination = redirectUrl || getSiteConfig().baseUrl;\n if (isInternalUrl(destination)) {\n navigate(destination);\n } else {\n window.location.href = destination;\n }\n };\n\n return (\n <ModalDialog\n title={formatMessage(messages['modal.title'])}\n isOpen={isOpen}\n onClose={() => { }}\n size=\"sm\"\n variant=\"default\"\n hasCloseButton={false}\n >\n <ModalDialog.Header>\n <ModalDialog.Title>\n {formatMessage(messages['modal.title'])}\n </ModalDialog.Title>\n </ModalDialog.Header>\n\n <ModalDialog.Body>\n {formatMessage(messages['modal.description'])}\n </ModalDialog.Body>\n\n <ModalDialog.Footer>\n <ActionRow>\n <Button onClick={handleSubmit} variant=\"primary\">\n {formatMessage(messages['continue.to.platform'], { platformName })}\n </Button>\n </ActionRow>\n </ModalDialog.Footer>\n </ModalDialog>\n );\n};\n\nProgressiveProfilingPageModal.propTypes = {\n isOpen: PropTypes.bool,\n redirectUrl: PropTypes.string,\n};\n\nProgressiveProfilingPageModal.defaultProps = {\n isOpen: false,\n redirectUrl: '',\n};\n\nexport default ProgressiveProfilingPageModal;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ProgressiveProfilingContext.js","sourceRoot":"","sources":["../../../src/progressive-profiling/components/ProgressiveProfilingContext.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAiB,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAEjG,OAAO,EACL,aAAa,GACd,MAAM,sBAAsB,CAAC;AAc9B,MAAM,2BAA2B,GAAG,aAAa,CAA8C,SAAS,CAAC,CAAC;AAM1G,MAAM,CAAC,MAAM,4BAA4B,GAA0C,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IAClG,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAS,aAAa,CAAC,CAAC;IAEtE,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,OAAgB,EAAE,EAAE;QAClD,YAAY,CAAC,OAAO,CAAC,CAAC;QACtB,IAAI,OAAO,EAAE,CAAC;YACZ,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,UAAU,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;QAClC,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,UAAU,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC3B,SAAS;QACT,SAAS;QACT,OAAO;QACP,UAAU;QACV,YAAY;QACZ,UAAU;QACV,UAAU;QACV,WAAW;QACX,cAAc;KACf,CAAC,EAAE;QACF,SAAS;QACT,SAAS;QACT,OAAO;QACP,UAAU;QACV,YAAY;QACZ,UAAU;QACV,UAAU;QACV,WAAW;QACX,cAAc;KACf,CAAC,CAAC;IAEH,OAAO,CACL,KAAC,2BAA2B,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAC/C,QAAQ,GAC4B,CACxC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,8BAA8B,GAAG,GAAoC,EAAE;IAClF,MAAM,OAAO,GAAG,UAAU,CAAC,2BAA2B,CAAC,CAAC;IACxD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,mFAAmF,CAAC,CAAC;IACvG,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC","sourcesContent":["import { createContext, FC, ReactNode, useContext, useMemo, useState, useCallback } from 'react';\n\nimport {\n DEFAULT_STATE,\n} from '../../data/constants';\n\ninterface ProgressiveProfilingContextType {\n isLoading: boolean,\n showError: boolean,\n success: boolean,\n submitState?: string,\n setLoading: (loading: boolean) => void,\n setShowError: (showError: boolean) => void,\n setSuccess: (success: boolean) => void,\n setSubmitState: (state: string) => void,\n clearState: () => void,\n}\n\nconst ProgressiveProfilingContext = createContext<ProgressiveProfilingContextType | undefined>(undefined);\n\ninterface ProgressiveProfilingProviderProps {\n children: ReactNode,\n}\n\nexport const ProgressiveProfilingProvider: FC<ProgressiveProfilingProviderProps> = ({ children }) => {\n const [isLoading, setIsLoading] = useState(false);\n const [showError, setShowError] = useState(false);\n const [success, setSuccess] = useState(false);\n const [submitState, setSubmitState] = useState<string>(DEFAULT_STATE);\n\n const setLoading = useCallback((loading: boolean) => {\n setIsLoading(loading);\n if (loading) {\n setShowError(false);\n setSuccess(false);\n }\n }, []);\n\n const clearState = useCallback(() => {\n setIsLoading(false);\n setShowError(false);\n setSuccess(false);\n }, []);\n\n const value = useMemo(() => ({\n isLoading,\n showError,\n success,\n setLoading,\n setShowError,\n setSuccess,\n clearState,\n submitState,\n setSubmitState,\n }), [\n isLoading,\n showError,\n success,\n setLoading,\n setShowError,\n setSuccess,\n clearState,\n submitState,\n setSubmitState,\n ]);\n\n return (\n <ProgressiveProfilingContext.Provider value={value}>\n {children}\n </ProgressiveProfilingContext.Provider>\n );\n};\n\nexport const useProgressiveProfilingContext = (): ProgressiveProfilingContextType => {\n const context = useContext(ProgressiveProfilingContext);\n if (context === undefined) {\n throw new Error('useProgressiveProfilingContext must be used within a ProgressiveProfilingProvider');\n }\n return context;\n};\n"]}
1
+ {"version":3,"file":"ProgressiveProfilingContext.js","sourceRoot":"","sources":["../../../src/progressive-profiling/components/ProgressiveProfilingContext.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAiB,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAEjG,OAAO,EACL,aAAa,GACd,MAAM,sBAAsB,CAAC;AAc9B,MAAM,2BAA2B,GAAG,aAAa,CAA8C,SAAS,CAAC,CAAC;AAM1G,MAAM,CAAC,MAAM,4BAA4B,GAA0C,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IAClG,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAS,aAAa,CAAC,CAAC;IAEtE,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,OAAgB,EAAE,EAAE;QAClD,YAAY,CAAC,OAAO,CAAC,CAAC;QACtB,IAAI,OAAO,EAAE,CAAC;YACZ,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,UAAU,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;QAClC,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,UAAU,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC3B,SAAS;QACT,SAAS;QACT,OAAO;QACP,UAAU;QACV,YAAY;QACZ,UAAU;QACV,UAAU;QACV,WAAW;QACX,cAAc;KACf,CAAC,EAAE;QACF,SAAS;QACT,SAAS;QACT,OAAO;QACP,UAAU;QACV,YAAY;QACZ,UAAU;QACV,UAAU;QACV,WAAW;QACX,cAAc;KACf,CAAC,CAAC;IAEH,OAAO,CACL,KAAC,2BAA2B,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAC/C,QAAQ,GAC4B,CACxC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,8BAA8B,GAAG,GAAoC,EAAE;IAClF,MAAM,OAAO,GAAG,UAAU,CAAC,2BAA2B,CAAC,CAAC;IACxD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,mFAAmF,CAAC,CAAC;IACvG,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC","sourcesContent":["import { createContext, FC, ReactNode, useContext, useMemo, useState, useCallback } from 'react';\n\nimport {\n DEFAULT_STATE,\n} from '../../data/constants';\n\ninterface ProgressiveProfilingContextType {\n isLoading: boolean;\n showError: boolean;\n success: boolean;\n submitState?: string;\n setLoading: (loading: boolean) => void;\n setShowError: (showError: boolean) => void;\n setSuccess: (success: boolean) => void;\n setSubmitState: (state: string) => void;\n clearState: () => void;\n}\n\nconst ProgressiveProfilingContext = createContext<ProgressiveProfilingContextType | undefined>(undefined);\n\ninterface ProgressiveProfilingProviderProps {\n children: ReactNode;\n}\n\nexport const ProgressiveProfilingProvider: FC<ProgressiveProfilingProviderProps> = ({ children }) => {\n const [isLoading, setIsLoading] = useState(false);\n const [showError, setShowError] = useState(false);\n const [success, setSuccess] = useState(false);\n const [submitState, setSubmitState] = useState<string>(DEFAULT_STATE);\n\n const setLoading = useCallback((loading: boolean) => {\n setIsLoading(loading);\n if (loading) {\n setShowError(false);\n setSuccess(false);\n }\n }, []);\n\n const clearState = useCallback(() => {\n setIsLoading(false);\n setShowError(false);\n setSuccess(false);\n }, []);\n\n const value = useMemo(() => ({\n isLoading,\n showError,\n success,\n setLoading,\n setShowError,\n setSuccess,\n clearState,\n submitState,\n setSubmitState,\n }), [\n isLoading,\n showError,\n success,\n setLoading,\n setShowError,\n setSuccess,\n clearState,\n submitState,\n setSubmitState,\n ]);\n\n return (\n <ProgressiveProfilingContext.Provider value={value}>\n {children}\n </ProgressiveProfilingContext.Provider>\n );\n};\n\nexport const useProgressiveProfilingContext = (): ProgressiveProfilingContextType => {\n const context = useContext(ProgressiveProfilingContext);\n if (context === undefined) {\n throw new Error('useProgressiveProfilingContext must be used within a ProgressiveProfilingProvider');\n }\n return context;\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"apiHook.js","sourceRoot":"","sources":["../../../src/progressive-profiling/data/apiHook.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EACL,cAAc,EAAE,aAAa,GAC9B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,8BAA8B,EAAE,MAAM,2CAA2C,CAAC;AAY3F,MAAM,kBAAkB,GAAG,CAAC,UAAqC,EAAE,EAAE,EAAE;IACrE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,8BAA8B,EAAE,CAAC;IACxE,OAAO,WAAW,CAAC;QACjB,UAAU,EAAE,KAAmD,EAAE,4CAA9C,EAAE,QAAQ,EAAE,IAAI,EAA0B;YAAK,OAAA,CAChE,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAC7B,CAAA;UAAA;QACD,SAAS,EAAE,GAAG,EAAE;YACd,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,cAAc,CAAC,cAAc,CAAC,CAAC;YAC/B,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;gBACtB,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,CAAC;QACH,CAAC;QACD,OAAO,EAAE,CAAC,KAAc,EAAE,EAAE;YAC1B,cAAc,CAAC,aAAa,CAAC,CAAC;YAC9B,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,OAAO,EACL,kBAAkB,GACnB,CAAC","sourcesContent":["import { useMutation } from '@tanstack/react-query';\n\nimport { patchAccount } from './api';\nimport {\n COMPLETE_STATE, DEFAULT_STATE,\n} from '../../data/constants';\nimport { useProgressiveProfilingContext } from '../components/ProgressiveProfilingContext';\n\ninterface SaveUserProfilePayload {\n username: string,\n data: Record<string, any>,\n}\n\ninterface UseSaveUserProfileOptions {\n onSuccess?: () => void,\n onError?: (error: unknown) => void,\n}\n\nconst useSaveUserProfile = (options: UseSaveUserProfileOptions = {}) => {\n const { setSuccess, setSubmitState } = useProgressiveProfilingContext();\n return useMutation({\n mutationFn: async ({ username, data }: SaveUserProfilePayload) => (\n patchAccount(username, data)\n ),\n onSuccess: () => {\n setSuccess(true);\n setSubmitState(COMPLETE_STATE);\n if (options.onSuccess) {\n options.onSuccess();\n }\n },\n onError: (error: unknown) => {\n setSubmitState(DEFAULT_STATE);\n if (options.onError) {\n options.onError(error);\n }\n },\n });\n};\n\nexport {\n useSaveUserProfile,\n};\n"]}
1
+ {"version":3,"file":"apiHook.js","sourceRoot":"","sources":["../../../src/progressive-profiling/data/apiHook.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EACL,cAAc,EAAE,aAAa,GAC9B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,8BAA8B,EAAE,MAAM,2CAA2C,CAAC;AAY3F,MAAM,kBAAkB,GAAG,CAAC,UAAqC,EAAE,EAAE,EAAE;IACrE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,8BAA8B,EAAE,CAAC;IACxE,OAAO,WAAW,CAAC;QACjB,UAAU,EAAE,KAAmD,EAAE,4CAA9C,EAAE,QAAQ,EAAE,IAAI,EAA0B;YAAK,OAAA,CAChE,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAC7B,CAAA;UAAA;QACD,SAAS,EAAE,GAAG,EAAE;YACd,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,cAAc,CAAC,cAAc,CAAC,CAAC;YAC/B,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;gBACtB,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,CAAC;QACH,CAAC;QACD,OAAO,EAAE,CAAC,KAAc,EAAE,EAAE;YAC1B,cAAc,CAAC,aAAa,CAAC,CAAC;YAC9B,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,OAAO,EACL,kBAAkB,GACnB,CAAC","sourcesContent":["import { useMutation } from '@tanstack/react-query';\n\nimport { patchAccount } from './api';\nimport {\n COMPLETE_STATE, DEFAULT_STATE,\n} from '../../data/constants';\nimport { useProgressiveProfilingContext } from '../components/ProgressiveProfilingContext';\n\ninterface SaveUserProfilePayload {\n username: string;\n data: Record<string, any>;\n}\n\ninterface UseSaveUserProfileOptions {\n onSuccess?: () => void;\n onError?: (error: unknown) => void;\n}\n\nconst useSaveUserProfile = (options: UseSaveUserProfileOptions = {}) => {\n const { setSuccess, setSubmitState } = useProgressiveProfilingContext();\n return useMutation({\n mutationFn: async ({ username, data }: SaveUserProfilePayload) => (\n patchAccount(username, data)\n ),\n onSuccess: () => {\n setSuccess(true);\n setSubmitState(COMPLETE_STATE);\n if (options.onSuccess) {\n options.onSuccess();\n }\n },\n onError: (error: unknown) => {\n setSubmitState(DEFAULT_STATE);\n if (options.onError) {\n options.onError(error);\n }\n },\n });\n};\n\nexport {\n useSaveUserProfile,\n};\n"]}
@@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  };
10
10
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
11
11
  import { useEffect, useMemo, useState } from 'react';
12
- import { fetchAuthenticatedUser, hydrateAuthenticatedUser, useAppConfig, getSiteConfig, sendPageEvent, sendTrackEvent, useIntl, } from '@openedx/frontend-base';
12
+ import { fetchAuthenticatedUser, hydrateAuthenticatedUser, useAppConfig, getSiteConfig, isInternalUrl, sendPageEvent, sendTrackEvent, useIntl, } from '@openedx/frontend-base';
13
13
  import { Form, Spinner, StatefulButton } from '@openedx/paragon';
14
14
  import classNames from 'classnames';
15
15
  import PropTypes from 'prop-types';
@@ -35,7 +35,6 @@ import { getAllPossibleQueryParams, getTpaHint, getTpaProvider, isHostAvailableI
35
35
  * Inner Registration Page component that uses the context
36
36
  */
37
37
  const RegistrationPage = (props) => {
38
- var _a;
39
38
  const { formatMessage } = useIntl();
40
39
  const { fieldDescriptions, optionalFields, thirdPartyAuthApiStatus, thirdPartyAuthContext, setThirdPartyAuthContextBegin, setThirdPartyAuthContextSuccess, setThirdPartyAuthContextFailure, } = useThirdPartyAuthContext();
41
40
  const { autoSubmitRegForm, currentProvider, finishAuthUrl, pipelineUserDetails, providers, secondaryProviders, errorMessage: thirdPartyAuthErrorMessage, } = thirdPartyAuthContext;
@@ -56,7 +55,7 @@ const RegistrationPage = (props) => {
56
55
  const registrationMutation = useRegistration({
57
56
  onSuccess: (data) => __awaiter(void 0, void 0, void 0, function* () {
58
57
  const redirectUrl = localNextPath || data.redirectUrl || '';
59
- if (redirectUrl.startsWith('/')) {
58
+ if (isInternalUrl(redirectUrl)) {
60
59
  yield fetchAuthenticatedUser({ forceRefresh: true });
61
60
  // Hydrate in the background — publishes AUTHENTICATED_USER_CHANGED after
62
61
  // SPA navigation, so the header picks up the full user profile (avatar, etc.)
@@ -73,7 +72,7 @@ const RegistrationPage = (props) => {
73
72
  const registrationErrorCode = (registrationError === null || registrationError === void 0 ? void 0 : registrationError.errorCode) || (backendRegistrationError === null || backendRegistrationError === void 0 ? void 0 : backendRegistrationError.errorCode);
74
73
  const submitState = registrationMutation.isPending ? PENDING_STATE : DEFAULT_STATE;
75
74
  const queryParams = useMemo(() => getAllPossibleQueryParams(), []);
76
- const localNextPath = ((_a = queryParams.next) === null || _a === void 0 ? void 0 : _a.startsWith('/')) ? queryParams.next : null;
75
+ const localNextPath = queryParams.next && isInternalUrl(queryParams.next) ? queryParams.next : null;
77
76
  const tpaHint = useMemo(() => getTpaHint(), []);
78
77
  // Initialize form state from local backedUpFormData
79
78
  const backedUpFormData = registrationFormData;
@@ -1 +1 @@
1
- {"version":3,"file":"RegistrationPage.js","sourceRoot":"","sources":["../../src/register/RegistrationPage.jsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useMemo, useState } from 'react';\n\nimport {\n fetchAuthenticatedUser,\n hydrateAuthenticatedUser,\n useAppConfig,\n getSiteConfig,\n sendPageEvent, sendTrackEvent,\n useIntl,\n} from '@openedx/frontend-base';\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 { useRegisterContext } from './components/RegisterContext';\nimport RegistrationFailure from './components/RegistrationFailure';\nimport { useFieldValidations, useRegistration } from './data/apiHook';\nimport {\n FORM_SUBMISSION_ERROR,\n TPA_AUTHENTICATION_FAILURE,\n} from './data/constants';\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 { useThirdPartyAuthContext } from '../common-components/components/ThirdPartyAuthContext';\nimport { useThirdPartyAuthHook } from '../common-components/data/apiHook';\nimport EnterpriseSSO from '../common-components/EnterpriseSSO';\nimport ThirdPartyAuth from '../common-components/ThirdPartyAuth';\nimport { registerPath } from '../constants';\nimport { COMPLETE_STATE, DEFAULT_STATE, PENDING_STATE } from '../data/constants';\nimport {\n getAllPossibleQueryParams, getTpaHint, getTpaProvider, isHostAvailableInQueryParams, setCookie,\n} from '../data/utils';\n\n/**\n * Inner Registration Page component that uses the context\n */\nconst RegistrationPage = (props) => {\n const { formatMessage } = useIntl();\n const {\n fieldDescriptions,\n optionalFields,\n thirdPartyAuthApiStatus,\n thirdPartyAuthContext,\n setThirdPartyAuthContextBegin,\n setThirdPartyAuthContextSuccess,\n setThirdPartyAuthContextFailure,\n } = useThirdPartyAuthContext();\n\n const {\n autoSubmitRegForm,\n currentProvider,\n finishAuthUrl,\n pipelineUserDetails,\n providers,\n secondaryProviders,\n errorMessage: thirdPartyAuthErrorMessage,\n } = thirdPartyAuthContext;\n\n const {\n clearRegistrationBackendError,\n registrationFormData,\n registrationResult,\n registrationError,\n setEmailSuggestionContext,\n updateRegistrationFormData,\n setRegistrationError,\n setRegistrationResult,\n setValidationsSuccess,\n setValidationsFailure,\n validationApiRateLimited,\n backendValidations,\n setBackendCountryCode,\n } = useRegisterContext();\n\n const fieldValidationsMutation = useFieldValidations({\n onSuccess: (data) => { setValidationsSuccess(data); },\n onError: () => { setValidationsFailure(); },\n });\n\n const registrationEmbedded = isHostAvailableInQueryParams();\n const platformName = getSiteConfig().siteName;\n const {\n handleInstitutionLogin,\n institutionLogin,\n } = props;\n const {\n ENABLE_AUTO_GENERATED_USERNAME,\n ENABLE_PROGRESSIVE_PROFILING_ON_AUTHN,\n MARKETING_EMAILS_OPT_IN,\n USER_RETENTION_COOKIE_NAME,\n SESSION_COOKIE_DOMAIN,\n } = useAppConfig();\n const flags = {\n showMarketingEmailOptInCheckbox: MARKETING_EMAILS_OPT_IN,\n autoGeneratedUsernameEnabled: ENABLE_AUTO_GENERATED_USERNAME,\n };\n\n const backendRegistrationError = registrationError;\n const registrationMutation = useRegistration({\n onSuccess: async (data) => {\n const redirectUrl = localNextPath || data.redirectUrl || '';\n if (redirectUrl.startsWith('/')) {\n await fetchAuthenticatedUser({ forceRefresh: true });\n // Hydrate in the background — publishes AUTHENTICATED_USER_CHANGED after\n // SPA navigation, so the header picks up the full user profile (avatar, etc.)\n hydrateAuthenticatedUser();\n }\n setRegistrationResult({ ...data, redirectUrl });\n setRegistrationError({});\n },\n onError: (errorData) => {\n setRegistrationError(errorData);\n },\n });\n\n const [userPipelineDataLoaded, setUserPipelineDataLoaded] = useState(false);\n const registrationErrorCode = registrationError?.errorCode || backendRegistrationError?.errorCode;\n const submitState = registrationMutation.isPending ? PENDING_STATE : DEFAULT_STATE;\n const queryParams = useMemo(() => getAllPossibleQueryParams(), []);\n const localNextPath = queryParams.next?.startsWith('/') ? queryParams.next : null;\n const tpaHint = useMemo(() => getTpaHint(), []);\n // Initialize form state from local backedUpFormData\n const backedUpFormData = registrationFormData;\n const [formFields, setFormFields] = useState({ ...backedUpFormData.formFields });\n const [configurableFormFields, setConfigurableFormFields] = useState({ ...backedUpFormData.configurableFormFields });\n const [errors, setErrors] = useState({ ...backedUpFormData.errors });\n const [errorCode, setErrorCode] = useState({ type: '', count: 0 });\n const [formStartTime, setFormStartTime] = useState(null);\n // temporary error state for embedded experience because we don't want to show errors on blur\n const [temporaryErrors, setTemporaryErrors] = useState({ ...backedUpFormData.errors });\n const { 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 setUserPipelineDataLoaded(true);\n }\n }\n }, [\n thirdPartyAuthApiStatus,\n thirdPartyAuthErrorMessage,\n pipelineUserDetails,\n userPipelineDataLoaded,\n ]);\n\n const params = { ...queryParams, is_register_page: true };\n if (tpaHint) {\n params.tpa_hint = tpaHint;\n }\n const { data, isSuccess, error } = useThirdPartyAuthHook(registerPath, params);\n useEffect(() => {\n if (!formStartTime) {\n sendPageEvent('login_and_registration', 'register');\n setThirdPartyAuthContextBegin();\n setFormStartTime(Date.now());\n }\n if (formStartTime) {\n if (isSuccess && data) {\n setThirdPartyAuthContextSuccess(\n data.fieldDescriptions,\n data.optionalFields,\n data.thirdPartyAuthContext,\n );\n setBackendCountryCode(data.thirdPartyAuthContext.countryCode);\n }\n\n if (error) {\n setThirdPartyAuthContextFailure();\n }\n }\n }, [formStartTime, isSuccess, data, error,\n setThirdPartyAuthContextBegin, setThirdPartyAuthContextSuccess,\n setBackendCountryCode, setThirdPartyAuthContextFailure]);\n\n // Handle backend validation errors from context\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(USER_RETENTION_COOKIE_NAME, true, SESSION_COOKIE_DOMAIN);\n }\n }, [registrationResult, USER_RETENTION_COOKIE_NAME, SESSION_COOKIE_DOMAIN]);\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 (backendRegistrationError[name]) {\n clearRegistrationBackendError(name);\n }\n // Clear context registration errors\n if (registrationError.errorCode) {\n setRegistrationError({});\n }\n setErrors(prevErrors => ({ ...prevErrors, [name]: '' }));\n // Update local state\n const newFormFields = { ...formFields, [name]: value };\n setFormFields(newFormFields);\n // Save to context for persistence across tab switches\n updateRegistrationFormData({\n formFields: newFormFields,\n errors,\n configurableFormFields,\n });\n };\n\n const handleErrorChange = (fieldName, errorMessage) => {\n if (registrationEmbedded) {\n setTemporaryErrors(prevErrors => ({\n ...prevErrors,\n [fieldName]: errorMessage,\n }));\n if (errorMessage === '' && errors[fieldName] !== '') {\n setErrors(prevErrors => ({\n ...prevErrors,\n [fieldName]: errorMessage,\n }));\n }\n } else {\n setErrors(prevErrors => ({\n ...prevErrors,\n [fieldName]: errorMessage,\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 updateRegistrationFormData({\n formFields,\n errors: fieldErrors,\n configurableFormFields,\n });\n setEmailSuggestionContext(emailSuggestion.suggestion, emailSuggestion.type);\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 with React Query\n registrationMutation.mutate(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 <InstitutionLogistration\n secondaryProviders={secondaryProviders}\n headingTitle={formatMessage(messages['register.institution.login.page.title'])}\n />\n );\n }\n return (\n <>\n <Helmet>\n <title>{formatMessage(messages['register.page.title'], { siteName: getSiteConfig().siteName })}</title>\n </Helmet>\n <RedirectLogistration\n host={host}\n authenticatedUser={registrationResult.authenticatedUser}\n success={registrationResult.success}\n redirectUrl={registrationResult.redirectUrl}\n finishAuthUrl={finishAuthUrl}\n optionalFields={optionalFields}\n registrationEmbedded={registrationEmbedded}\n redirectToProgressiveProfilingPage={\n ENABLE_PROGRESSIVE_PROFILING_ON_AUTHN && !!Object.keys(optionalFields.fields).length\n }\n />\n {autoSubmitRegForm && !errorCode.type ? (\n <div className=\"mw-xs mt-5 text-center\">\n <Spinner animation=\"border\" variant=\"primary\" id=\"tpa-spinner\" />\n </div>\n ) : (\n <div\n className={classNames(\n 'mw-xs mt-3',\n { 'w-100 m-auto pt-4 main-content': registrationEmbedded },\n )}\n >\n <ThirdPartyAuthAlert\n currentProvider={currentProvider}\n platformName={platformName}\n referrer={registerPath}\n />\n <RegistrationFailure\n errorCode={errorCode.type}\n failureCount={errorCode.count}\n context={{ provider: currentProvider, errorMessage: thirdPartyAuthErrorMessage }}\n />\n <Form id=\"registration-form\" name=\"registration-form\">\n <NameField\n name=\"name\"\n value={formFields.name}\n shouldFetchUsernameSuggestions={!formFields.username.trim()}\n handleChange={handleOnChange}\n handleErrorChange={handleErrorChange}\n errorMessage={errors.name}\n helpText={[formatMessage(messages['help.text.name'])]}\n floatingLabel={formatMessage(messages['registration.fullname.label'])}\n />\n <EmailField\n name=\"email\"\n value={formFields.email}\n confirmEmailValue={configurableFormFields?.confirm_email}\n handleErrorChange={handleErrorChange}\n handleChange={handleOnChange}\n errorMessage={errors.email}\n helpText={[formatMessage(messages['help.text.email'])]}\n floatingLabel={formatMessage(messages['registration.email.label'])}\n />\n {!flags.autoGeneratedUsernameEnabled && (\n <UsernameField\n name=\"username\"\n spellCheck=\"false\"\n value={formFields.username}\n handleChange={handleOnChange}\n handleErrorChange={handleErrorChange}\n errorMessage={errors.username}\n helpText={[formatMessage(messages['help.text.username.1']), formatMessage(messages['help.text.username.2'])]}\n floatingLabel={formatMessage(messages['registration.username.label'])}\n />\n )}\n {!currentProvider && (\n <PasswordField\n name=\"password\"\n value={formFields.password}\n handleChange={handleOnChange}\n handleErrorChange={handleErrorChange}\n errorMessage={errors.password}\n floatingLabel={formatMessage(messages['registration.password.label'])}\n clearRegistrationBackendError={clearRegistrationBackendError}\n validateField={fieldValidationsMutation.mutate}\n validationApiRateLimited={validationApiRateLimited}\n />\n )}\n <ConfigurableRegistrationForm\n email={formFields.email}\n fieldErrors={errors}\n formFields={configurableFormFields}\n setFieldErrors={registrationEmbedded ? setTemporaryErrors : setErrors}\n setFormFields={setConfigurableFormFields}\n autoSubmitRegisterForm={autoSubmitRegForm}\n fieldDescriptions={fieldDescriptions}\n />\n <StatefulButton\n id=\"register-user\"\n name=\"register-user\"\n type=\"submit\"\n variant=\"brand\"\n className=\"register-button mt-4 mb-4\"\n state={submitState}\n labels={{\n default: buttonLabel,\n pending: '',\n }}\n onClick={handleSubmit}\n onMouseDown={(e) => e.preventDefault()}\n />\n {!registrationEmbedded && (\n <ThirdPartyAuth\n currentProvider={currentProvider}\n providers={providers}\n secondaryProviders={secondaryProviders}\n handleInstitutionLogin={handleInstitutionLogin}\n thirdPartyAuthApiStatus={thirdPartyAuthApiStatus}\n />\n )}\n </Form>\n </div>\n )}\n </>\n );\n };\n\n if (tpaHint) {\n if (thirdPartyAuthApiStatus === PENDING_STATE) {\n return <Skeleton height={36} />;\n }\n const { provider, skipHintedLogin } = getTpaProvider(tpaHint, providers, secondaryProviders);\n if (skipHintedLogin) {\n window.location.href = getSiteConfig().lmsBaseUrl + provider.registerUrl;\n return null;\n }\n return provider ? <EnterpriseSSO provider={provider} /> : renderForm();\n }\n return (\n renderForm()\n );\n};\n\nRegistrationPage.propTypes = {\n institutionLogin: PropTypes.bool,\n handleInstitutionLogin: PropTypes.func,\n};\n\nRegistrationPage.defaultProps = {\n handleInstitutionLogin: null,\n institutionLogin: false,\n};\n\nexport default RegistrationPage;\n"]}
1
+ {"version":3,"file":"RegistrationPage.js","sourceRoot":"","sources":["../../src/register/RegistrationPage.jsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useMemo, useState } from 'react';\n\nimport {\n fetchAuthenticatedUser,\n hydrateAuthenticatedUser,\n useAppConfig,\n getSiteConfig,\n isInternalUrl,\n sendPageEvent, sendTrackEvent,\n useIntl,\n} from '@openedx/frontend-base';\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 { useRegisterContext } from './components/RegisterContext';\nimport RegistrationFailure from './components/RegistrationFailure';\nimport { useFieldValidations, useRegistration } from './data/apiHook';\nimport {\n FORM_SUBMISSION_ERROR,\n TPA_AUTHENTICATION_FAILURE,\n} from './data/constants';\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 { useThirdPartyAuthContext } from '../common-components/components/ThirdPartyAuthContext';\nimport { useThirdPartyAuthHook } from '../common-components/data/apiHook';\nimport EnterpriseSSO from '../common-components/EnterpriseSSO';\nimport ThirdPartyAuth from '../common-components/ThirdPartyAuth';\nimport { registerPath } from '../constants';\nimport { COMPLETE_STATE, DEFAULT_STATE, PENDING_STATE } from '../data/constants';\nimport {\n getAllPossibleQueryParams, getTpaHint, getTpaProvider, isHostAvailableInQueryParams, setCookie,\n} from '../data/utils';\n\n/**\n * Inner Registration Page component that uses the context\n */\nconst RegistrationPage = (props) => {\n const { formatMessage } = useIntl();\n const {\n fieldDescriptions,\n optionalFields,\n thirdPartyAuthApiStatus,\n thirdPartyAuthContext,\n setThirdPartyAuthContextBegin,\n setThirdPartyAuthContextSuccess,\n setThirdPartyAuthContextFailure,\n } = useThirdPartyAuthContext();\n\n const {\n autoSubmitRegForm,\n currentProvider,\n finishAuthUrl,\n pipelineUserDetails,\n providers,\n secondaryProviders,\n errorMessage: thirdPartyAuthErrorMessage,\n } = thirdPartyAuthContext;\n\n const {\n clearRegistrationBackendError,\n registrationFormData,\n registrationResult,\n registrationError,\n setEmailSuggestionContext,\n updateRegistrationFormData,\n setRegistrationError,\n setRegistrationResult,\n setValidationsSuccess,\n setValidationsFailure,\n validationApiRateLimited,\n backendValidations,\n setBackendCountryCode,\n } = useRegisterContext();\n\n const fieldValidationsMutation = useFieldValidations({\n onSuccess: (data) => { setValidationsSuccess(data); },\n onError: () => { setValidationsFailure(); },\n });\n\n const registrationEmbedded = isHostAvailableInQueryParams();\n const platformName = getSiteConfig().siteName;\n const {\n handleInstitutionLogin,\n institutionLogin,\n } = props;\n const {\n ENABLE_AUTO_GENERATED_USERNAME,\n ENABLE_PROGRESSIVE_PROFILING_ON_AUTHN,\n MARKETING_EMAILS_OPT_IN,\n USER_RETENTION_COOKIE_NAME,\n SESSION_COOKIE_DOMAIN,\n } = useAppConfig();\n const flags = {\n showMarketingEmailOptInCheckbox: MARKETING_EMAILS_OPT_IN,\n autoGeneratedUsernameEnabled: ENABLE_AUTO_GENERATED_USERNAME,\n };\n\n const backendRegistrationError = registrationError;\n const registrationMutation = useRegistration({\n onSuccess: async (data) => {\n const redirectUrl = localNextPath || data.redirectUrl || '';\n if (isInternalUrl(redirectUrl)) {\n await fetchAuthenticatedUser({ forceRefresh: true });\n // Hydrate in the background — publishes AUTHENTICATED_USER_CHANGED after\n // SPA navigation, so the header picks up the full user profile (avatar, etc.)\n hydrateAuthenticatedUser();\n }\n setRegistrationResult({ ...data, redirectUrl });\n setRegistrationError({});\n },\n onError: (errorData) => {\n setRegistrationError(errorData);\n },\n });\n\n const [userPipelineDataLoaded, setUserPipelineDataLoaded] = useState(false);\n const registrationErrorCode = registrationError?.errorCode || backendRegistrationError?.errorCode;\n const submitState = registrationMutation.isPending ? PENDING_STATE : DEFAULT_STATE;\n const queryParams = useMemo(() => getAllPossibleQueryParams(), []);\n const localNextPath = queryParams.next && isInternalUrl(queryParams.next) ? queryParams.next : null;\n const tpaHint = useMemo(() => getTpaHint(), []);\n // Initialize form state from local backedUpFormData\n const backedUpFormData = registrationFormData;\n const [formFields, setFormFields] = useState({ ...backedUpFormData.formFields });\n const [configurableFormFields, setConfigurableFormFields] = useState({ ...backedUpFormData.configurableFormFields });\n const [errors, setErrors] = useState({ ...backedUpFormData.errors });\n const [errorCode, setErrorCode] = useState({ type: '', count: 0 });\n const [formStartTime, setFormStartTime] = useState(null);\n // temporary error state for embedded experience because we don't want to show errors on blur\n const [temporaryErrors, setTemporaryErrors] = useState({ ...backedUpFormData.errors });\n const { 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 setUserPipelineDataLoaded(true);\n }\n }\n }, [\n thirdPartyAuthApiStatus,\n thirdPartyAuthErrorMessage,\n pipelineUserDetails,\n userPipelineDataLoaded,\n ]);\n\n const params = { ...queryParams, is_register_page: true };\n if (tpaHint) {\n params.tpa_hint = tpaHint;\n }\n const { data, isSuccess, error } = useThirdPartyAuthHook(registerPath, params);\n useEffect(() => {\n if (!formStartTime) {\n sendPageEvent('login_and_registration', 'register');\n setThirdPartyAuthContextBegin();\n setFormStartTime(Date.now());\n }\n if (formStartTime) {\n if (isSuccess && data) {\n setThirdPartyAuthContextSuccess(\n data.fieldDescriptions,\n data.optionalFields,\n data.thirdPartyAuthContext,\n );\n setBackendCountryCode(data.thirdPartyAuthContext.countryCode);\n }\n\n if (error) {\n setThirdPartyAuthContextFailure();\n }\n }\n }, [formStartTime, isSuccess, data, error,\n setThirdPartyAuthContextBegin, setThirdPartyAuthContextSuccess,\n setBackendCountryCode, setThirdPartyAuthContextFailure]);\n\n // Handle backend validation errors from context\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(USER_RETENTION_COOKIE_NAME, true, SESSION_COOKIE_DOMAIN);\n }\n }, [registrationResult, USER_RETENTION_COOKIE_NAME, SESSION_COOKIE_DOMAIN]);\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 (backendRegistrationError[name]) {\n clearRegistrationBackendError(name);\n }\n // Clear context registration errors\n if (registrationError.errorCode) {\n setRegistrationError({});\n }\n setErrors(prevErrors => ({ ...prevErrors, [name]: '' }));\n // Update local state\n const newFormFields = { ...formFields, [name]: value };\n setFormFields(newFormFields);\n // Save to context for persistence across tab switches\n updateRegistrationFormData({\n formFields: newFormFields,\n errors,\n configurableFormFields,\n });\n };\n\n const handleErrorChange = (fieldName, errorMessage) => {\n if (registrationEmbedded) {\n setTemporaryErrors(prevErrors => ({\n ...prevErrors,\n [fieldName]: errorMessage,\n }));\n if (errorMessage === '' && errors[fieldName] !== '') {\n setErrors(prevErrors => ({\n ...prevErrors,\n [fieldName]: errorMessage,\n }));\n }\n } else {\n setErrors(prevErrors => ({\n ...prevErrors,\n [fieldName]: errorMessage,\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 updateRegistrationFormData({\n formFields,\n errors: fieldErrors,\n configurableFormFields,\n });\n setEmailSuggestionContext(emailSuggestion.suggestion, emailSuggestion.type);\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 with React Query\n registrationMutation.mutate(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 <InstitutionLogistration\n secondaryProviders={secondaryProviders}\n headingTitle={formatMessage(messages['register.institution.login.page.title'])}\n />\n );\n }\n return (\n <>\n <Helmet>\n <title>{formatMessage(messages['register.page.title'], { siteName: getSiteConfig().siteName })}</title>\n </Helmet>\n <RedirectLogistration\n host={host}\n authenticatedUser={registrationResult.authenticatedUser}\n success={registrationResult.success}\n redirectUrl={registrationResult.redirectUrl}\n finishAuthUrl={finishAuthUrl}\n optionalFields={optionalFields}\n registrationEmbedded={registrationEmbedded}\n redirectToProgressiveProfilingPage={\n ENABLE_PROGRESSIVE_PROFILING_ON_AUTHN && !!Object.keys(optionalFields.fields).length\n }\n />\n {autoSubmitRegForm && !errorCode.type ? (\n <div className=\"mw-xs mt-5 text-center\">\n <Spinner animation=\"border\" variant=\"primary\" id=\"tpa-spinner\" />\n </div>\n ) : (\n <div\n className={classNames(\n 'mw-xs mt-3',\n { 'w-100 m-auto pt-4 main-content': registrationEmbedded },\n )}\n >\n <ThirdPartyAuthAlert\n currentProvider={currentProvider}\n platformName={platformName}\n referrer={registerPath}\n />\n <RegistrationFailure\n errorCode={errorCode.type}\n failureCount={errorCode.count}\n context={{ provider: currentProvider, errorMessage: thirdPartyAuthErrorMessage }}\n />\n <Form id=\"registration-form\" name=\"registration-form\">\n <NameField\n name=\"name\"\n value={formFields.name}\n shouldFetchUsernameSuggestions={!formFields.username.trim()}\n handleChange={handleOnChange}\n handleErrorChange={handleErrorChange}\n errorMessage={errors.name}\n helpText={[formatMessage(messages['help.text.name'])]}\n floatingLabel={formatMessage(messages['registration.fullname.label'])}\n />\n <EmailField\n name=\"email\"\n value={formFields.email}\n confirmEmailValue={configurableFormFields?.confirm_email}\n handleErrorChange={handleErrorChange}\n handleChange={handleOnChange}\n errorMessage={errors.email}\n helpText={[formatMessage(messages['help.text.email'])]}\n floatingLabel={formatMessage(messages['registration.email.label'])}\n />\n {!flags.autoGeneratedUsernameEnabled && (\n <UsernameField\n name=\"username\"\n spellCheck=\"false\"\n value={formFields.username}\n handleChange={handleOnChange}\n handleErrorChange={handleErrorChange}\n errorMessage={errors.username}\n helpText={[formatMessage(messages['help.text.username.1']), formatMessage(messages['help.text.username.2'])]}\n floatingLabel={formatMessage(messages['registration.username.label'])}\n />\n )}\n {!currentProvider && (\n <PasswordField\n name=\"password\"\n value={formFields.password}\n handleChange={handleOnChange}\n handleErrorChange={handleErrorChange}\n errorMessage={errors.password}\n floatingLabel={formatMessage(messages['registration.password.label'])}\n clearRegistrationBackendError={clearRegistrationBackendError}\n validateField={fieldValidationsMutation.mutate}\n validationApiRateLimited={validationApiRateLimited}\n />\n )}\n <ConfigurableRegistrationForm\n email={formFields.email}\n fieldErrors={errors}\n formFields={configurableFormFields}\n setFieldErrors={registrationEmbedded ? setTemporaryErrors : setErrors}\n setFormFields={setConfigurableFormFields}\n autoSubmitRegisterForm={autoSubmitRegForm}\n fieldDescriptions={fieldDescriptions}\n />\n <StatefulButton\n id=\"register-user\"\n name=\"register-user\"\n type=\"submit\"\n variant=\"brand\"\n className=\"register-button mt-4 mb-4\"\n state={submitState}\n labels={{\n default: buttonLabel,\n pending: '',\n }}\n onClick={handleSubmit}\n onMouseDown={(e) => e.preventDefault()}\n />\n {!registrationEmbedded && (\n <ThirdPartyAuth\n currentProvider={currentProvider}\n providers={providers}\n secondaryProviders={secondaryProviders}\n handleInstitutionLogin={handleInstitutionLogin}\n thirdPartyAuthApiStatus={thirdPartyAuthApiStatus}\n />\n )}\n </Form>\n </div>\n )}\n </>\n );\n };\n\n if (tpaHint) {\n if (thirdPartyAuthApiStatus === PENDING_STATE) {\n return <Skeleton height={36} />;\n }\n const { provider, skipHintedLogin } = getTpaProvider(tpaHint, providers, secondaryProviders);\n if (skipHintedLogin) {\n window.location.href = getSiteConfig().lmsBaseUrl + provider.registerUrl;\n return null;\n }\n return provider ? <EnterpriseSSO provider={provider} /> : renderForm();\n }\n return (\n renderForm()\n );\n};\n\nRegistrationPage.propTypes = {\n institutionLogin: PropTypes.bool,\n handleInstitutionLogin: PropTypes.func,\n};\n\nRegistrationPage.defaultProps = {\n handleInstitutionLogin: null,\n institutionLogin: false,\n};\n\nexport default RegistrationPage;\n"]}