@openedx/frontend-app-authn 2.0.0-alpha.2 → 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.
- package/dist/common-components/RedirectLogistration.js +2 -2
- package/dist/common-components/RedirectLogistration.js.map +1 -1
- package/dist/common-components/UnAuthOnlyRoute.js +8 -3
- package/dist/common-components/UnAuthOnlyRoute.js.map +1 -1
- package/dist/data/utils/dataUtils.d.ts +1 -0
- package/dist/data/utils/dataUtils.js +7 -2
- package/dist/data/utils/dataUtils.js.map +1 -1
- package/dist/data/utils/index.d.ts +1 -1
- package/dist/data/utils/index.js +1 -1
- package/dist/data/utils/index.js.map +1 -1
- package/dist/login/ChangePasswordPrompt.js +5 -5
- package/dist/login/ChangePasswordPrompt.js.map +1 -1
- package/dist/login/LoginPage.js +4 -4
- package/dist/login/LoginPage.js.map +1 -1
- package/dist/progressive-profiling/ProgressiveProfiling.js +7 -7
- package/dist/progressive-profiling/ProgressiveProfiling.js.map +1 -1
- package/dist/progressive-profiling/ProgressiveProfilingPageModal.js +2 -2
- package/dist/progressive-profiling/ProgressiveProfilingPageModal.js.map +1 -1
- package/dist/register/RegistrationPage.js +3 -4
- package/dist/register/RegistrationPage.js.map +1 -1
- package/package.json +3 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { useAppConfig, getSiteConfig, getUrlByRouteRole } from '@openedx/frontend-base';
|
|
2
|
+
import { useAppConfig, getSiteConfig, getUrlByRouteRole, isInternalUrl } from '@openedx/frontend-base';
|
|
3
3
|
import PropTypes from 'prop-types';
|
|
4
4
|
import { Navigate } from 'react-router-dom';
|
|
5
5
|
import { welcomeRole } from '../constants';
|
|
@@ -37,7 +37,7 @@ const RedirectLogistration = (props) => {
|
|
|
37
37
|
authenticatedUser,
|
|
38
38
|
}, replace: true }));
|
|
39
39
|
}
|
|
40
|
-
if (finalRedirectUrl
|
|
40
|
+
if (isInternalUrl(finalRedirectUrl)) {
|
|
41
41
|
return _jsx(Navigate, { to: finalRedirectUrl, replace: true });
|
|
42
42
|
}
|
|
43
43
|
window.location.href = finalRedirectUrl;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RedirectLogistration.js","sourceRoot":"","sources":["../../src/common-components/RedirectLogistration.jsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"RedirectLogistration.js","sourceRoot":"","sources":["../../src/common-components/RedirectLogistration.jsx"],"names":[],"mappings":"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","sourcesContent":["import { useAppConfig, getSiteConfig, getUrlByRouteRole, isInternalUrl } from '@openedx/frontend-base';\nimport PropTypes from 'prop-types';\nimport { Navigate } from 'react-router-dom';\n\nimport { welcomeRole } from '../constants';\nimport { REDIRECT } from '../data/constants';\nimport { setCookie } from '../data/utils';\n\nconst RedirectLogistration = (props) => {\n const {\n authenticatedUser,\n finishAuthUrl,\n redirectUrl,\n redirectToProgressiveProfilingPage,\n success,\n optionalFields,\n educationLevel,\n userId,\n registrationEmbedded,\n host,\n } = props;\n let finalRedirectUrl = '';\n\n if (success) {\n // If we're in a third party auth pipeline, we must complete the pipeline\n // once user has successfully logged in. Otherwise, redirect to the specified redirect url.\n // Note: For multiple enterprise use case, we need to make sure that user first visits the\n // enterprise selection page and then complete the auth workflow\n if (finishAuthUrl && !redirectUrl.includes(finishAuthUrl)) {\n finalRedirectUrl = getSiteConfig().lmsBaseUrl + finishAuthUrl;\n } else {\n finalRedirectUrl = redirectUrl;\n }\n\n // Redirect to Progressive Profiling after successful registration\n if (redirectToProgressiveProfilingPage) {\n // TODO: Do we still need this cookie?\n setCookie('van-504-returning-user', true, useAppConfig().SESSION_COOKIE_DOMAIN);\n\n if (registrationEmbedded) {\n window.parent.postMessage({\n action: REDIRECT,\n redirectUrl: useAppConfig().POST_REGISTRATION_REDIRECT_URL,\n }, host);\n return null;\n }\n const registrationResult = { redirectUrl: finalRedirectUrl, success };\n return (\n <Navigate\n to={getUrlByRouteRole(welcomeRole)}\n state={{\n registrationResult,\n optionalFields,\n authenticatedUser,\n }}\n replace\n />\n );\n }\n\n if (isInternalUrl(finalRedirectUrl)) {\n return <Navigate to={finalRedirectUrl} replace />;\n }\n window.location.href = finalRedirectUrl;\n }\n\n return null;\n};\n\nRedirectLogistration.defaultProps = {\n authenticatedUser: {},\n educationLevel: null,\n finishAuthUrl: null,\n success: false,\n redirectUrl: '',\n redirectToProgressiveProfilingPage: false,\n optionalFields: {},\n userId: null,\n registrationEmbedded: false,\n host: '',\n};\n\nRedirectLogistration.propTypes = {\n authenticatedUser: PropTypes.shape({}),\n educationLevel: PropTypes.string,\n finishAuthUrl: PropTypes.string,\n success: PropTypes.bool,\n redirectUrl: PropTypes.string,\n redirectToProgressiveProfilingPage: PropTypes.bool,\n optionalFields: PropTypes.shape({}),\n userId: PropTypes.number,\n registrationEmbedded: PropTypes.bool,\n host: PropTypes.string,\n};\n\nexport default RedirectLogistration;\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { useEffect, useState } from 'react';
|
|
3
|
-
import { fetchAuthenticatedUser, getAuthenticatedUser
|
|
3
|
+
import { fetchAuthenticatedUser, getAuthenticatedUser } from '@openedx/frontend-base';
|
|
4
4
|
import PropTypes from 'prop-types';
|
|
5
5
|
import { Navigate } from 'react-router-dom';
|
|
6
|
-
import {
|
|
6
|
+
import { getDashboardRoute } from '../data/utils';
|
|
7
7
|
/**
|
|
8
8
|
* This wrapper redirects the requester to our default redirect url if they are
|
|
9
9
|
* already authenticated.
|
|
@@ -19,7 +19,12 @@ const UnAuthOnlyRoute = ({ children }) => {
|
|
|
19
19
|
}, []);
|
|
20
20
|
if (isReady) {
|
|
21
21
|
if (authUser && authUser.username) {
|
|
22
|
-
|
|
22
|
+
const dashboard = getDashboardRoute();
|
|
23
|
+
if (dashboard.isInternal) {
|
|
24
|
+
return _jsx(Navigate, { to: dashboard.url, replace: true });
|
|
25
|
+
}
|
|
26
|
+
window.location.href = dashboard.url;
|
|
27
|
+
return null;
|
|
23
28
|
}
|
|
24
29
|
return children;
|
|
25
30
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UnAuthOnlyRoute.js","sourceRoot":"","sources":["../../src/common-components/UnAuthOnlyRoute.jsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE5C,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,
|
|
1
|
+
{"version":3,"file":"UnAuthOnlyRoute.js","sourceRoot":"","sources":["../../src/common-components/UnAuthOnlyRoute.jsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE5C,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACtF,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD;;;GAGG;AACH,MAAM,eAAe,GAAG,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IACvC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC7C,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE9C,SAAS,CAAC,GAAG,EAAE;QACb,sBAAsB,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,iBAAiB,EAAE,EAAE;YAC5F,WAAW,CAAC,iBAAiB,CAAC,CAAC;YAC/B,UAAU,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,QAAQ,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAClC,MAAM,SAAS,GAAG,iBAAiB,EAAE,CAAC;YACtC,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;gBACzB,OAAO,KAAC,QAAQ,IAAC,EAAE,EAAE,SAAS,CAAC,GAAG,EAAE,OAAO,SAAG,CAAC;YACjD,CAAC;YACD,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC;YACrC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,eAAe,CAAC,SAAS,GAAG;IAC1B,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU;CACpC,CAAC;AAEF,eAAe,eAAe,CAAC","sourcesContent":["import { useEffect, useState } from 'react';\n\nimport { fetchAuthenticatedUser, getAuthenticatedUser } from '@openedx/frontend-base';\nimport PropTypes from 'prop-types';\nimport { Navigate } from 'react-router-dom';\n\nimport { getDashboardRoute } from '../data/utils';\n\n/**\n * This wrapper redirects the requester to our default redirect url if they are\n * already authenticated.\n */\nconst UnAuthOnlyRoute = ({ children }) => {\n const [authUser, setAuthUser] = useState({});\n const [isReady, setIsReady] = useState(false);\n\n useEffect(() => {\n fetchAuthenticatedUser({ forceRefresh: !!getAuthenticatedUser() }).then((authenticatedUser) => {\n setAuthUser(authenticatedUser);\n setIsReady(true);\n });\n }, []);\n\n if (isReady) {\n if (authUser && authUser.username) {\n 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 return children;\n }\n\n return null;\n};\n\nUnAuthOnlyRoute.propTypes = {\n children: PropTypes.node.isRequired,\n};\n\nexport default UnAuthOnlyRoute;\n"]}
|
|
@@ -8,5 +8,6 @@ export function getAllPossibleQueryParams(locationURl?: null): {};
|
|
|
8
8
|
export function getActivationStatus(): string | (string | null)[] | null;
|
|
9
9
|
export function isScrollBehaviorSupported(): boolean;
|
|
10
10
|
export function windowScrollTo(options: any): void;
|
|
11
|
+
export function getDashboardRoute(): import("@openedx/frontend-base").ResolvedRoute;
|
|
11
12
|
export function normalizeRedirectUrl(backendUrl: any): any;
|
|
12
13
|
export function isHostAvailableInQueryParams(): boolean;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Utility functions
|
|
2
|
-
import { getSiteConfig,
|
|
2
|
+
import { getSiteConfig, resolveRouteByRole } from '@openedx/frontend-base';
|
|
3
3
|
import * as QueryString from 'query-string';
|
|
4
4
|
import { dashboardRole } from '../../constants';
|
|
5
5
|
import { AUTH_PARAMS } from '../constants';
|
|
@@ -62,13 +62,18 @@ export const windowScrollTo = (options) => {
|
|
|
62
62
|
}
|
|
63
63
|
return window.scrollTo(options.top, options.left);
|
|
64
64
|
};
|
|
65
|
+
/**
|
|
66
|
+
* The site's dashboard route, falling back to the shell root when no app or
|
|
67
|
+
* external route provides it.
|
|
68
|
+
*/
|
|
69
|
+
export const getDashboardRoute = () => { var _a; return (_a = resolveRouteByRole(dashboardRole)) !== null && _a !== void 0 ? _a : { url: '/', isInternal: true }; };
|
|
65
70
|
/**
|
|
66
71
|
* Normalize a backend redirect URL: if the backend returns the LMS dashboard
|
|
67
72
|
* URL (or nothing), replace it with the role-based dashboard URL so that SPA
|
|
68
73
|
* navigation can be used when the dashboard lives in the same shell.
|
|
69
74
|
*/
|
|
70
75
|
export const normalizeRedirectUrl = (backendUrl) => {
|
|
71
|
-
const dashboardUrl =
|
|
76
|
+
const dashboardUrl = getDashboardRoute().url;
|
|
72
77
|
const lmsDashboardUrl = `${getSiteConfig().lmsBaseUrl}/dashboard`;
|
|
73
78
|
return (!backendUrl || backendUrl.startsWith(lmsDashboardUrl))
|
|
74
79
|
? dashboardUrl
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataUtils.js","sourceRoot":"","sources":["../../../src/data/utils/dataUtils.js"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,OAAO,EAAE,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"dataUtils.js","sourceRoot":"","sources":["../../../src/data/utils/dataUtils.js"],"names":[],"mappings":"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","sourcesContent":["// Utility functions\nimport { getSiteConfig, resolveRouteByRole } from '@openedx/frontend-base';\nimport * as QueryString from 'query-string';\n\nimport { dashboardRole } from '../../constants';\nimport { AUTH_PARAMS } from '../constants';\n\nexport const getTpaProvider = (tpaHintProvider, primaryProviders, secondaryProviders) => {\n let tpaProvider = null;\n let skipHintedLogin = false;\n [...primaryProviders, ...secondaryProviders].forEach((provider) => {\n if (provider.id === tpaHintProvider) {\n tpaProvider = provider;\n if (provider.skipHintedLogin) {\n skipHintedLogin = true;\n }\n }\n });\n return { provider: tpaProvider, skipHintedLogin };\n};\n\nexport const getTpaHint = () => {\n const params = QueryString.parse(window.location.search);\n let tpaHint = null;\n tpaHint = params.tpa_hint;\n if (!tpaHint) {\n const { next } = params;\n if (next) {\n const index = next.indexOf('tpa_hint=');\n if (index !== -1) {\n tpaHint = next.substring(index + 'tpa_hint='.length, next.length);\n }\n }\n }\n return tpaHint;\n};\n\nexport const updatePathWithQueryParams = (path) => {\n let queryParams = window.location.search;\n\n if (!queryParams) {\n return path;\n }\n\n if (queryParams.includes('track=pwreset')) {\n queryParams = queryParams.replace('?track=pwreset&', '?',).replace('?track=pwreset', '').replace('&track=pwreset', '').replace('?&', '?');\n }\n\n return `${path}${queryParams}`;\n};\n\nexport const getAllPossibleQueryParams = (locationURl = null) => {\n const urlParams = locationURl ? QueryString.parseUrl(locationURl).query : QueryString.parse(window.location.search);\n const params = {};\n Object.entries(urlParams).forEach(([key, value]) => {\n if (AUTH_PARAMS.includes(key)) {\n params[key] = value;\n }\n });\n\n return params;\n};\n\nexport const getActivationStatus = () => {\n const params = QueryString.parse(window.location.search);\n\n return params.account_activation_status;\n};\n\nexport const isScrollBehaviorSupported = () => 'scrollBehavior' in document.documentElement.style;\n\nexport const windowScrollTo = (options) => {\n if (isScrollBehaviorSupported()) {\n return window.scrollTo(options);\n }\n\n return window.scrollTo(options.top, options.left);\n};\n\n/**\n * The site's dashboard route, falling back to the shell root when no app or\n * external route provides it.\n */\nexport const getDashboardRoute = () => resolveRouteByRole(dashboardRole) ?? { url: '/', isInternal: true };\n\n/**\n * Normalize a backend redirect URL: if the backend returns the LMS dashboard\n * URL (or nothing), replace it with the role-based dashboard URL so that SPA\n * navigation can be used when the dashboard lives in the same shell.\n */\nexport const normalizeRedirectUrl = (backendUrl) => {\n const dashboardUrl = getDashboardRoute().url;\n const lmsDashboardUrl = `${getSiteConfig().lmsBaseUrl}/dashboard`;\n return (!backendUrl || backendUrl.startsWith(lmsDashboardUrl))\n ? dashboardUrl\n : backendUrl;\n};\n\nexport const isHostAvailableInQueryParams = () => {\n const queryParams = getAllPossibleQueryParams();\n return 'host' in queryParams;\n};\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { default as setCookie } from "./cookies";
|
|
2
|
-
export { getTpaProvider, getTpaHint, getAllPossibleQueryParams, getActivationStatus, isHostAvailableInQueryParams, updatePathWithQueryParams, normalizeRedirectUrl, windowScrollTo } from "./dataUtils";
|
|
2
|
+
export { getTpaProvider, getTpaHint, getAllPossibleQueryParams, getActivationStatus, getDashboardRoute, isHostAvailableInQueryParams, updatePathWithQueryParams, normalizeRedirectUrl, windowScrollTo } from "./dataUtils";
|
package/dist/data/utils/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { getTpaProvider, getTpaHint, getAllPossibleQueryParams, getActivationStatus, isHostAvailableInQueryParams, updatePathWithQueryParams, normalizeRedirectUrl, windowScrollTo, } from './dataUtils';
|
|
1
|
+
export { getTpaProvider, getTpaHint, getAllPossibleQueryParams, getActivationStatus, getDashboardRoute, isHostAvailableInQueryParams, updatePathWithQueryParams, normalizeRedirectUrl, windowScrollTo, } from './dataUtils';
|
|
2
2
|
export { default as setCookie } from './cookies';
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/data/utils/index.js"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,UAAU,EACV,yBAAyB,EACzB,mBAAmB,EACnB,4BAA4B,EAC5B,yBAAyB,EACzB,oBAAoB,EACpB,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,WAAW,CAAC","sourcesContent":["export {\n getTpaProvider,\n getTpaHint,\n getAllPossibleQueryParams,\n getActivationStatus,\n isHostAvailableInQueryParams,\n updatePathWithQueryParams,\n normalizeRedirectUrl,\n windowScrollTo,\n} from './dataUtils';\nexport { default as setCookie } from './cookies';\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/data/utils/index.js"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,UAAU,EACV,yBAAyB,EACzB,mBAAmB,EACnB,iBAAiB,EACjB,4BAA4B,EAC5B,yBAAyB,EACzB,oBAAoB,EACpB,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,WAAW,CAAC","sourcesContent":["export {\n getTpaProvider,\n getTpaHint,\n getAllPossibleQueryParams,\n getActivationStatus,\n getDashboardRoute,\n isHostAvailableInQueryParams,\n updatePathWithQueryParams,\n normalizeRedirectUrl,\n windowScrollTo,\n} from './dataUtils';\nexport { default as setCookie } from './cookies';\n"]}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useEffect, useState } from 'react';
|
|
3
|
-
import { getUrlByRouteRole, useIntl } from '@openedx/frontend-base';
|
|
3
|
+
import { getUrlByRouteRole, isInternalUrl, useIntl } from '@openedx/frontend-base';
|
|
4
4
|
import { ActionRow, ModalDialog, useToggle, } from '@openedx/paragon';
|
|
5
5
|
import classNames from 'classnames';
|
|
6
6
|
import PropTypes from 'prop-types';
|
|
7
7
|
import { Link, useNavigate } from 'react-router-dom';
|
|
8
|
-
import {
|
|
9
|
-
import { updatePathWithQueryParams } from '../data/utils';
|
|
8
|
+
import { resetPasswordRole } from '../constants';
|
|
9
|
+
import { getDashboardRoute, updatePathWithQueryParams } from '../data/utils';
|
|
10
10
|
import useMobileResponsive from '../data/utils/useMobileResponsive';
|
|
11
11
|
import messages from './messages';
|
|
12
12
|
const ChangePasswordPrompt = ({ variant, redirectUrl }) => {
|
|
@@ -18,8 +18,8 @@ const ChangePasswordPrompt = ({ variant, redirectUrl }) => {
|
|
|
18
18
|
setRedirectToResetPasswordPage(true);
|
|
19
19
|
}
|
|
20
20
|
else {
|
|
21
|
-
const url = redirectUrl ||
|
|
22
|
-
if (url
|
|
21
|
+
const url = redirectUrl || getDashboardRoute().url;
|
|
22
|
+
if (isInternalUrl(url)) {
|
|
23
23
|
navigate(url);
|
|
24
24
|
}
|
|
25
25
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChangePasswordPrompt.js","sourceRoot":"","sources":["../../src/login/ChangePasswordPrompt.jsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE5C,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"ChangePasswordPrompt.js","sourceRoot":"","sources":["../../src/login/ChangePasswordPrompt.jsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useState } from 'react';\n\nimport { getUrlByRouteRole, isInternalUrl, useIntl } from '@openedx/frontend-base';\nimport {\n ActionRow, ModalDialog, useToggle,\n} from '@openedx/paragon';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { Link, useNavigate } from 'react-router-dom';\n\nimport { resetPasswordRole } from '../constants';\nimport { getDashboardRoute, updatePathWithQueryParams } from '../data/utils';\nimport useMobileResponsive from '../data/utils/useMobileResponsive';\nimport messages from './messages';\n\nconst ChangePasswordPrompt = ({ variant, redirectUrl }) => {\n const isMobileView = useMobileResponsive();\n const [redirectToResetPasswordPage, setRedirectToResetPasswordPage] = useState(false);\n const handlers = {\n handleToggleOff: () => {\n if (variant === 'block') {\n setRedirectToResetPasswordPage(true);\n } else {\n const url = redirectUrl || getDashboardRoute().url;\n if (isInternalUrl(url)) {\n navigate(url);\n } else {\n window.location.href = url;\n }\n }\n },\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const [isOpen, open, close] = useToggle(true, handlers);\n const { formatMessage } = useIntl();\n const navigate = useNavigate();\n\n useEffect(() => {\n if (redirectToResetPasswordPage) {\n navigate(updatePathWithQueryParams(getUrlByRouteRole(resetPasswordRole)));\n }\n }, [redirectToResetPasswordPage, navigate]);\n\n return (\n <ModalDialog\n title=\"Password security\"\n isOpen={isOpen}\n onClose={close}\n size={isMobileView ? 'sm' : 'md'}\n hasCloseButton={false}\n >\n <ModalDialog.Header>\n <ModalDialog.Title>\n {formatMessage(messages[`password.security.${variant}.title`])}\n </ModalDialog.Title>\n </ModalDialog.Header>\n <ModalDialog.Body>\n {formatMessage(messages[`password.security.${variant}.body`])}\n </ModalDialog.Body>\n <ModalDialog.Footer>\n <ActionRow className={classNames(\n { 'd-flex flex-column': isMobileView },\n )}\n >\n {variant === 'nudge' ? (\n <ModalDialog.CloseButton id=\"password-security-close\" variant=\"tertiary\">\n {formatMessage(messages['password.security.close.button'])}\n </ModalDialog.CloseButton>\n ) : null}\n <Link\n id=\"password-security-reset-password\"\n className={classNames(\n 'btn btn-primary',\n { 'w-100': isMobileView },\n )}\n to={updatePathWithQueryParams(getUrlByRouteRole(resetPasswordRole))}\n >\n {formatMessage(messages['password.security.redirect.to.reset.password.button'])}\n </Link>\n </ActionRow>\n </ModalDialog.Footer>\n </ModalDialog>\n );\n};\n\nChangePasswordPrompt.defaultProps = {\n variant: 'block',\n redirectUrl: null,\n};\n\nChangePasswordPrompt.propTypes = {\n variant: PropTypes.oneOf(['nudge', 'block']),\n redirectUrl: PropTypes.string,\n};\n\nexport default ChangePasswordPrompt;\n"]}
|
package/dist/login/LoginPage.js
CHANGED
|
@@ -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, getSiteConfig, getUrlByRouteRole, sendPageEvent, sendTrackEvent, useIntl, } from '@openedx/frontend-base';
|
|
12
|
+
import { fetchAuthenticatedUser, hydrateAuthenticatedUser, getSiteConfig, getUrlByRouteRole, isInternalUrl, sendPageEvent, sendTrackEvent, useIntl, } from '@openedx/frontend-base';
|
|
13
13
|
import { Form, StatefulButton } from '@openedx/paragon';
|
|
14
14
|
import PropTypes from 'prop-types';
|
|
15
15
|
import { Helmet } from 'react-helmet';
|
|
@@ -31,7 +31,7 @@ import { INVALID_FORM, TPA_AUTHENTICATION_FAILURE } from './data/constants';
|
|
|
31
31
|
import LoginFailureMessage from './LoginFailure';
|
|
32
32
|
import messages from './messages';
|
|
33
33
|
const LoginPage = ({ institutionLogin, handleInstitutionLogin, }) => {
|
|
34
|
-
var _a
|
|
34
|
+
var _a;
|
|
35
35
|
// Context for third-party auth
|
|
36
36
|
const { thirdPartyAuthApiStatus, thirdPartyAuthContext, setThirdPartyAuthContextBegin, setThirdPartyAuthContextSuccess, setThirdPartyAuthContextFailure, } = useThirdPartyAuthContext();
|
|
37
37
|
const location = useLocation();
|
|
@@ -46,7 +46,7 @@ const LoginPage = ({ institutionLogin, handleInstitutionLogin, }) => {
|
|
|
46
46
|
const { mutate: loginUser, isPending: isLoggingIn } = useLogin({
|
|
47
47
|
onSuccess: (data) => __awaiter(void 0, void 0, void 0, function* () {
|
|
48
48
|
const redirectUrl = localNextPath || data.redirectUrl || '';
|
|
49
|
-
if (redirectUrl
|
|
49
|
+
if (isInternalUrl(redirectUrl)) {
|
|
50
50
|
yield fetchAuthenticatedUser({ forceRefresh: true });
|
|
51
51
|
// Hydrate in the background — publishes AUTHENTICATED_USER_CHANGED after
|
|
52
52
|
// SPA navigation, so the header picks up the full user profile (avatar, etc.)
|
|
@@ -67,7 +67,7 @@ const LoginPage = ({ institutionLogin, handleInstitutionLogin, }) => {
|
|
|
67
67
|
const { formatMessage } = useIntl();
|
|
68
68
|
const activationMsgType = getActivationStatus();
|
|
69
69
|
const queryParams = useMemo(() => getAllPossibleQueryParams(), []);
|
|
70
|
-
const localNextPath =
|
|
70
|
+
const localNextPath = queryParams.next && isInternalUrl(queryParams.next) ? queryParams.next : null;
|
|
71
71
|
const tpaHint = useMemo(() => getTpaHint(), []);
|
|
72
72
|
const params = Object.assign({}, queryParams);
|
|
73
73
|
if (tpaHint) {
|
|
@@ -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,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,
|
|
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 {
|
|
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;
|
|
@@ -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
|
|
86
|
-
if (
|
|
87
|
-
return _jsx(Navigate, { to:
|
|
85
|
+
const dashboard = getDashboardRoute();
|
|
86
|
+
if (dashboard.isInternal) {
|
|
87
|
+
return _jsx(Navigate, { to: dashboard.url, replace: true });
|
|
88
88
|
}
|
|
89
|
-
window.location.href =
|
|
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 || 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"]}
|
|
@@ -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';
|
|
@@ -13,7 +13,7 @@ const ProgressiveProfilingPageModal = (props) => {
|
|
|
13
13
|
e.preventDefault();
|
|
14
14
|
// With no redirect configured, "continue to the platform" means the site itself.
|
|
15
15
|
const destination = redirectUrl || getSiteConfig().baseUrl;
|
|
16
|
-
if (destination
|
|
16
|
+
if (isInternalUrl(destination)) {
|
|
17
17
|
navigate(destination);
|
|
18
18
|
}
|
|
19
19
|
else {
|
|
@@ -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;
|
|
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"]}
|
|
@@ -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
|
|
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 =
|
|
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"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openedx/frontend-app-authn",
|
|
3
|
-
"version": "2.0.0-alpha.
|
|
3
|
+
"version": "2.0.0-alpha.3",
|
|
4
|
+
"packageManager": "npm@11.12.1",
|
|
4
5
|
"description": "Frontend authentication",
|
|
5
6
|
"engines": {
|
|
6
7
|
"node": "^24.12"
|
|
@@ -89,7 +90,7 @@
|
|
|
89
90
|
"turbo": "^2.8.16"
|
|
90
91
|
},
|
|
91
92
|
"peerDependencies": {
|
|
92
|
-
"@openedx/frontend-base": "^2.0.0-alpha.
|
|
93
|
+
"@openedx/frontend-base": "^2.0.0-alpha.15 || 0.0.0-dev",
|
|
93
94
|
"@openedx/paragon": "^23",
|
|
94
95
|
"@tanstack/react-query": "^5",
|
|
95
96
|
"react": "^18",
|