@openedx/frontend-app-authn 1.0.0 → 2.0.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/README.rst +304 -108
  2. package/dist/app.js +1 -27
  3. package/dist/app.js.map +1 -1
  4. package/dist/base-container/components/BrandLogo.d.ts +24 -0
  5. package/dist/base-container/components/BrandLogo.js +28 -0
  6. package/dist/base-container/components/BrandLogo.js.map +1 -0
  7. package/dist/base-container/components/default-layout/LargeLayout.js +3 -3
  8. package/dist/base-container/components/default-layout/LargeLayout.js.map +1 -1
  9. package/dist/base-container/components/default-layout/MediumLayout.js +3 -3
  10. package/dist/base-container/components/default-layout/MediumLayout.js.map +1 -1
  11. package/dist/base-container/components/default-layout/SmallLayout.js +3 -3
  12. package/dist/base-container/components/default-layout/SmallLayout.js.map +1 -1
  13. package/dist/base-container/components/image-layout/ExtraSmallLayout.js +4 -3
  14. package/dist/base-container/components/image-layout/ExtraSmallLayout.js.map +1 -1
  15. package/dist/base-container/components/image-layout/LargeLayout.js +4 -3
  16. package/dist/base-container/components/image-layout/LargeLayout.js.map +1 -1
  17. package/dist/base-container/components/image-layout/MediumLayout.js +4 -3
  18. package/dist/base-container/components/image-layout/MediumLayout.js.map +1 -1
  19. package/dist/base-container/components/image-layout/SmallLayout.js +4 -3
  20. package/dist/base-container/components/image-layout/SmallLayout.js.map +1 -1
  21. package/dist/base-container/components/welcome-page-layout/LargeLayout.js +3 -3
  22. package/dist/base-container/components/welcome-page-layout/LargeLayout.js.map +1 -1
  23. package/dist/base-container/components/welcome-page-layout/MediumLayout.js +3 -3
  24. package/dist/base-container/components/welcome-page-layout/MediumLayout.js.map +1 -1
  25. package/dist/base-container/components/welcome-page-layout/SmallLayout.js +3 -3
  26. package/dist/base-container/components/welcome-page-layout/SmallLayout.js.map +1 -1
  27. package/dist/common-components/components/ThirdPartyAuthContext.js.map +1 -1
  28. package/dist/forgot-password/ForgotPasswordAlert.js +5 -1
  29. package/dist/forgot-password/ForgotPasswordAlert.js.map +1 -1
  30. package/dist/forgot-password/ForgotPasswordPage.js +1 -1
  31. package/dist/forgot-password/ForgotPasswordPage.js.map +1 -1
  32. package/dist/forgot-password/data/apiHook.js.map +1 -1
  33. package/dist/login/AccountActivationMessage.js +5 -1
  34. package/dist/login/AccountActivationMessage.js.map +1 -1
  35. package/dist/login/components/LoginContext.js.map +1 -1
  36. package/dist/login/data/apiHook.js.map +1 -1
  37. package/dist/progressive-profiling/ProgressiveProfiling.js +1 -1
  38. package/dist/progressive-profiling/ProgressiveProfiling.js.map +1 -1
  39. package/dist/progressive-profiling/ProgressiveProfilingPageModal.d.ts +3 -1
  40. package/dist/progressive-profiling/ProgressiveProfilingPageModal.js +7 -4
  41. package/dist/progressive-profiling/ProgressiveProfilingPageModal.js.map +1 -1
  42. package/dist/progressive-profiling/components/ProgressiveProfilingContext.js.map +1 -1
  43. package/dist/progressive-profiling/data/apiHook.js.map +1 -1
  44. package/dist/register/components/RegisterContext.js.map +1 -1
  45. package/dist/register/data/apiHook.js.map +1 -1
  46. package/dist/register/types.js.map +1 -1
  47. package/dist/reset-password/data/apiHook.js.map +1 -1
  48. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"AccountActivationMessage.js","sourceRoot":"","sources":["../../src/login/AccountActivationMessage.jsx"],"names":[],"mappings":"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","sourcesContent":["import { FormattedMessage, useAppConfig, useIntl } from '@openedx/frontend-base';\nimport { Alert } from '@openedx/paragon';\nimport { CheckCircle, Error } from '@openedx/paragon/icons';\nimport PropTypes from 'prop-types';\n\nimport { ACCOUNT_ACTIVATION_MESSAGE } from './data/constants';\nimport messages from './messages';\n\nconst AccountActivationMessage = ({ messageType }) => {\n const { formatMessage } = useIntl();\n\n if (!messageType) {\n return null;\n }\n\n const variant = messageType === ACCOUNT_ACTIVATION_MESSAGE.ERROR ? 'danger' : messageType;\n const activationOrConfirmation = useAppConfig().MARKETING_EMAILS_OPT_IN ? 'confirmation' : 'activation';\n const iconMapping = {\n [ACCOUNT_ACTIVATION_MESSAGE.SUCCESS]: CheckCircle,\n [ACCOUNT_ACTIVATION_MESSAGE.ERROR]: Error,\n };\n\n let activationMessage;\n let heading;\n switch (messageType) {\n case ACCOUNT_ACTIVATION_MESSAGE.SUCCESS: {\n heading = formatMessage(messages[`account.${activationOrConfirmation}.success.message.title`]);\n activationMessage = <span>{formatMessage(messages[`account.${activationOrConfirmation}.success.message`])}</span>;\n break;\n }\n case ACCOUNT_ACTIVATION_MESSAGE.INFO: {\n activationMessage = formatMessage(messages[`account.${activationOrConfirmation}.info.message`]);\n break;\n }\n case ACCOUNT_ACTIVATION_MESSAGE.ERROR: {\n const supportLink = (\n <Alert.Link href={useAppConfig().ACTIVATION_EMAIL_SUPPORT_LINK}>\n {formatMessage(messages['account.activation.support.link'])}\n </Alert.Link>\n );\n\n heading = formatMessage(messages[`account.${activationOrConfirmation}.error.message.title`]);\n activationMessage = (\n <FormattedMessage\n id=\"account.activation.error.message\"\n defaultMessage=\"Something went wrong, please {supportLink} to resolve this issue.\"\n description=\"Account activation error message\"\n values={{ supportLink }}\n />\n );\n break;\n }\n default:\n break;\n }\n\n return activationMessage ? (\n <Alert\n id=\"account-activation-message\"\n className=\"mb-5\"\n variant={variant}\n icon={iconMapping[messageType]}\n >\n {heading && <Alert.Heading>{heading}</Alert.Heading>}\n {activationMessage}\n </Alert>\n ) : null;\n};\n\nAccountActivationMessage.propTypes = {\n messageType: PropTypes.string,\n};\n\nAccountActivationMessage.defaultProps = {\n messageType: null,\n};\n\nexport default AccountActivationMessage;\n"]}
1
+ {"version":3,"file":"AccountActivationMessage.js","sourceRoot":"","sources":["../../src/login/AccountActivationMessage.jsx"],"names":[],"mappings":"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","sourcesContent":["import { FormattedMessage, useAppConfig, useIntl } from '@openedx/frontend-base';\nimport { Alert } from '@openedx/paragon';\nimport { CheckCircle, Error } from '@openedx/paragon/icons';\nimport PropTypes from 'prop-types';\n\nimport { ACCOUNT_ACTIVATION_MESSAGE } from './data/constants';\nimport messages from './messages';\n\nconst AccountActivationMessage = ({ messageType }) => {\n const { formatMessage } = useIntl();\n\n if (!messageType) {\n return null;\n }\n\n const variant = messageType === ACCOUNT_ACTIVATION_MESSAGE.ERROR ? 'danger' : messageType;\n const activationOrConfirmation = useAppConfig().MARKETING_EMAILS_OPT_IN ? 'confirmation' : 'activation';\n const iconMapping = {\n [ACCOUNT_ACTIVATION_MESSAGE.SUCCESS]: CheckCircle,\n [ACCOUNT_ACTIVATION_MESSAGE.ERROR]: Error,\n };\n\n let activationMessage;\n let heading;\n switch (messageType) {\n case ACCOUNT_ACTIVATION_MESSAGE.SUCCESS: {\n heading = formatMessage(messages[`account.${activationOrConfirmation}.success.message.title`]);\n activationMessage = <span>{formatMessage(messages[`account.${activationOrConfirmation}.success.message`])}</span>;\n break;\n }\n case ACCOUNT_ACTIVATION_MESSAGE.INFO: {\n activationMessage = formatMessage(messages[`account.${activationOrConfirmation}.info.message`]);\n break;\n }\n case ACCOUNT_ACTIVATION_MESSAGE.ERROR: {\n // Without a support link configured there is nowhere to point; the sentence\n // still reads correctly with the phrase as plain text.\n const activationEmailSupportLink = useAppConfig().ACTIVATION_EMAIL_SUPPORT_LINK;\n const supportLinkText = formatMessage(messages['account.activation.support.link']);\n const supportLink = activationEmailSupportLink ? (\n <Alert.Link href={activationEmailSupportLink}>\n {supportLinkText}\n </Alert.Link>\n ) : supportLinkText;\n\n heading = formatMessage(messages[`account.${activationOrConfirmation}.error.message.title`]);\n activationMessage = (\n <FormattedMessage\n id=\"account.activation.error.message\"\n defaultMessage=\"Something went wrong, please {supportLink} to resolve this issue.\"\n description=\"Account activation error message\"\n values={{ supportLink }}\n />\n );\n break;\n }\n default:\n break;\n }\n\n return activationMessage ? (\n <Alert\n id=\"account-activation-message\"\n className=\"mb-5\"\n variant={variant}\n icon={iconMapping[messageType]}\n >\n {heading && <Alert.Heading>{heading}</Alert.Heading>}\n {activationMessage}\n </Alert>\n ) : null;\n};\n\nAccountActivationMessage.propTypes = {\n messageType: PropTypes.string,\n};\n\nAccountActivationMessage.defaultProps = {\n messageType: null,\n};\n\nexport default AccountActivationMessage;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"LoginContext.js","sourceRoot":"","sources":["../../../src/login/components/LoginContext.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,aAAa,EAA2C,UAAU,EAAE,OAAO,EAAE,QAAQ,GACtF,MAAM,OAAO,CAAC;AAmBf,MAAM,YAAY,GAAG,aAAa,CAA+B,SAAS,CAAC,CAAC;AAM5E,MAAM,CAAC,MAAM,aAAa,GAA2B,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IACpE,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC;QAC3C,eAAe,EAAE,EAAE;QACnB,QAAQ,EAAE,EAAE;KACb,CAAC,CAAC;IACH,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC;QACnC,eAAe,EAAE,EAAE;QACnB,QAAQ,EAAE,EAAE;KACb,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAClC,UAAU;QACV,aAAa;QACb,MAAM;QACN,SAAS;KACV,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;IAE1B,OAAO,CACL,KAAC,YAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,YAAY,YACvC,QAAQ,GACa,CACzB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,EAAE;IAClC,MAAM,OAAO,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IACzC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC","sourcesContent":["import {\n createContext, Dispatch, FC, ReactNode, SetStateAction, useContext, useMemo, useState,\n} from 'react';\n\nexport interface FormFields {\n emailOrUsername: string,\n password: string,\n}\n\nexport interface FormErrors {\n emailOrUsername: string,\n password: string,\n}\n\ninterface LoginContextType {\n formFields: FormFields,\n setFormFields: Dispatch<SetStateAction<FormFields>>,\n errors: FormErrors,\n setErrors: Dispatch<SetStateAction<FormErrors>>,\n}\n\nconst LoginContext = createContext<LoginContextType | undefined>(undefined);\n\ninterface LoginProviderProps {\n children: ReactNode,\n}\n\nexport const LoginProvider: FC<LoginProviderProps> = ({ children }) => {\n const [formFields, setFormFields] = useState({\n emailOrUsername: '',\n password: '',\n });\n const [errors, setErrors] = useState({\n emailOrUsername: '',\n password: '',\n });\n\n const contextValue = useMemo(() => ({\n formFields,\n setFormFields,\n errors,\n setErrors,\n }), [formFields, errors]);\n\n return (\n <LoginContext.Provider value={contextValue}>\n {children}\n </LoginContext.Provider>\n );\n};\n\nexport const useLoginContext = () => {\n const context = useContext(LoginContext);\n if (context === undefined) {\n throw new Error('useLoginContext must be used within a LoginProvider');\n }\n return context;\n};\n"]}
1
+ {"version":3,"file":"LoginContext.js","sourceRoot":"","sources":["../../../src/login/components/LoginContext.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,aAAa,EAA2C,UAAU,EAAE,OAAO,EAAE,QAAQ,GACtF,MAAM,OAAO,CAAC;AAmBf,MAAM,YAAY,GAAG,aAAa,CAA+B,SAAS,CAAC,CAAC;AAM5E,MAAM,CAAC,MAAM,aAAa,GAA2B,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IACpE,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC;QAC3C,eAAe,EAAE,EAAE;QACnB,QAAQ,EAAE,EAAE;KACb,CAAC,CAAC;IACH,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC;QACnC,eAAe,EAAE,EAAE;QACnB,QAAQ,EAAE,EAAE;KACb,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAClC,UAAU;QACV,aAAa;QACb,MAAM;QACN,SAAS;KACV,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;IAE1B,OAAO,CACL,KAAC,YAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,YAAY,YACvC,QAAQ,GACa,CACzB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,EAAE;IAClC,MAAM,OAAO,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IACzC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC","sourcesContent":["import {\n createContext, Dispatch, FC, ReactNode, SetStateAction, useContext, useMemo, useState,\n} from 'react';\n\nexport interface FormFields {\n emailOrUsername: string;\n password: string;\n}\n\nexport interface FormErrors {\n emailOrUsername: string;\n password: string;\n}\n\ninterface LoginContextType {\n formFields: FormFields;\n setFormFields: Dispatch<SetStateAction<FormFields>>;\n errors: FormErrors;\n setErrors: Dispatch<SetStateAction<FormErrors>>;\n}\n\nconst LoginContext = createContext<LoginContextType | undefined>(undefined);\n\ninterface LoginProviderProps {\n children: ReactNode;\n}\n\nexport const LoginProvider: FC<LoginProviderProps> = ({ children }) => {\n const [formFields, setFormFields] = useState({\n emailOrUsername: '',\n password: '',\n });\n const [errors, setErrors] = useState({\n emailOrUsername: '',\n password: '',\n });\n\n const contextValue = useMemo(() => ({\n formFields,\n setFormFields,\n errors,\n setErrors,\n }), [formFields, errors]);\n\n return (\n <LoginContext.Provider value={contextValue}>\n {children}\n </LoginContext.Provider>\n );\n};\n\nexport const useLoginContext = () => {\n const context = useContext(LoginContext);\n if (context === undefined) {\n throw new Error('useLoginContext must be used within a LoginProvider');\n }\n return context;\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"apiHook.js","sourceRoot":"","sources":["../../../src/login/data/apiHook.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAiBvE,MAAM,QAAQ,GAAG,CAAC,UAA2B,EAAE,EAAE,EAAE,CAAC,WAAW,CAAoC;IACjG,UAAU,EAAE,CAAO,SAAoB,EAAE,EAAE,kDAAC,OAAA,KAAK,CAAC,SAAS,CAA2B,CAAA,GAAA;IACtF,SAAS,EAAE,CAAC,IAAmB,EAAE,EAAE;QACjC,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;QAClC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC,KAAc,EAAE,EAAE;;QAC1B,QAAQ,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QAChC,IAAI,cAAc,GAAG;YACnB,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,EAAE;YACX,KAAK,EAAE,CAAC;SACT,CAAC;QACF,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,UAAU,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAChF,MAAM,QAAQ,GAAG,KAAK,CAAC,QAA+C,CAAC;YACvE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;YACnD,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACrC,MAAM,SAAS,GAAG,IAAmE,CAAC;gBACtF,cAAc,GAAG;oBACf,IAAI,EAAE,SAAS,CAAC,SAAS,IAAI,iBAAiB;oBAC9C,OAAO,EAAE,SAAS,CAAC,OAAO,IAAI,EAAE;oBAChC,KAAK,EAAE,CAAA,MAAA,SAAS,CAAC,OAAO,0CAAE,YAAY,KAAI,CAAC;iBAC5C,CAAC;gBACF,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;oBACnB,OAAO,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;gBACvD,CAAC;qBAAM,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;oBAC1B,OAAO,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;gBACtD,CAAC;qBAAM,CAAC;oBACN,QAAQ,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;gBACpD,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;CACF,CAAC,CAAC;AACH,OAAO,EACL,QAAQ,GACT,CAAC","sourcesContent":["import { camelCaseObject, logError, logInfo } from '@openedx/frontend-base';\nimport { useMutation } from '@tanstack/react-query';\n\nimport { login } from './api';\nimport { FORBIDDEN_REQUEST, INTERNAL_SERVER_ERROR } from './constants';\n\n// Type definitions\ninterface LoginData {\n email_or_username: string,\n password: string,\n}\n\ninterface LoginResponse {\n redirectUrl?: string,\n}\n\ninterface UseLoginOptions {\n onSuccess?: (data: LoginResponse) => void,\n onError?: (error: unknown) => void,\n}\n\nconst useLogin = (options: UseLoginOptions = {}) => useMutation<LoginResponse, unknown, LoginData>({\n mutationFn: async (loginData: LoginData) => login(loginData) as Promise<LoginResponse>,\n onSuccess: (data: LoginResponse) => {\n logInfo('Login successful', data);\n if (options.onSuccess) {\n options.onSuccess(data);\n }\n },\n onError: (error: unknown) => {\n logError('Login failed', error);\n let formattedError = {\n type: INTERNAL_SERVER_ERROR,\n context: {},\n count: 0,\n };\n if (error && typeof error === 'object' && 'response' in error && error.response) {\n const response = error.response as { status?: number, data?: unknown };\n const { status, data } = camelCaseObject(response);\n if (data && typeof data === 'object') {\n const errorData = data as { errorCode?: string, context?: { failureCount?: number } };\n formattedError = {\n type: errorData.errorCode || FORBIDDEN_REQUEST,\n context: errorData.context || {},\n count: errorData.context?.failureCount || 0,\n };\n if (status === 400) {\n logInfo('Login failed with validation error', error);\n } else if (status === 403) {\n logInfo('Login failed with forbidden error', error);\n } else {\n logError('Login failed with server error', error);\n }\n }\n }\n if (options.onError) {\n options.onError(formattedError);\n }\n },\n});\nexport {\n useLogin,\n};\n"]}
1
+ {"version":3,"file":"apiHook.js","sourceRoot":"","sources":["../../../src/login/data/apiHook.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAiBvE,MAAM,QAAQ,GAAG,CAAC,UAA2B,EAAE,EAAE,EAAE,CAAC,WAAW,CAAoC;IACjG,UAAU,EAAE,CAAO,SAAoB,EAAE,EAAE,kDAAC,OAAA,KAAK,CAAC,SAAS,CAA2B,CAAA,GAAA;IACtF,SAAS,EAAE,CAAC,IAAmB,EAAE,EAAE;QACjC,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;QAClC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC,KAAc,EAAE,EAAE;;QAC1B,QAAQ,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QAChC,IAAI,cAAc,GAAG;YACnB,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,EAAE;YACX,KAAK,EAAE,CAAC;SACT,CAAC;QACF,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,UAAU,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAChF,MAAM,QAAQ,GAAG,KAAK,CAAC,QAA+C,CAAC;YACvE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;YACnD,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACrC,MAAM,SAAS,GAAG,IAAmE,CAAC;gBACtF,cAAc,GAAG;oBACf,IAAI,EAAE,SAAS,CAAC,SAAS,IAAI,iBAAiB;oBAC9C,OAAO,EAAE,SAAS,CAAC,OAAO,IAAI,EAAE;oBAChC,KAAK,EAAE,CAAA,MAAA,SAAS,CAAC,OAAO,0CAAE,YAAY,KAAI,CAAC;iBAC5C,CAAC;gBACF,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;oBACnB,OAAO,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;gBACvD,CAAC;qBAAM,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;oBAC1B,OAAO,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;gBACtD,CAAC;qBAAM,CAAC;oBACN,QAAQ,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;gBACpD,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;CACF,CAAC,CAAC;AACH,OAAO,EACL,QAAQ,GACT,CAAC","sourcesContent":["import { camelCaseObject, logError, logInfo } from '@openedx/frontend-base';\nimport { useMutation } from '@tanstack/react-query';\n\nimport { login } from './api';\nimport { FORBIDDEN_REQUEST, INTERNAL_SERVER_ERROR } from './constants';\n\n// Type definitions\ninterface LoginData {\n email_or_username: string;\n password: string;\n}\n\ninterface LoginResponse {\n redirectUrl?: string;\n}\n\ninterface UseLoginOptions {\n onSuccess?: (data: LoginResponse) => void;\n onError?: (error: unknown) => void;\n}\n\nconst useLogin = (options: UseLoginOptions = {}) => useMutation<LoginResponse, unknown, LoginData>({\n mutationFn: async (loginData: LoginData) => login(loginData) as Promise<LoginResponse>,\n onSuccess: (data: LoginResponse) => {\n logInfo('Login successful', data);\n if (options.onSuccess) {\n options.onSuccess(data);\n }\n },\n onError: (error: unknown) => {\n logError('Login failed', error);\n let formattedError = {\n type: INTERNAL_SERVER_ERROR,\n context: {},\n count: 0,\n };\n if (error && typeof error === 'object' && 'response' in error && error.response) {\n const response = error.response as { status?: number; data?: unknown };\n const { status, data } = camelCaseObject(response);\n if (data && typeof data === 'object') {\n const errorData = data as { errorCode?: string; context?: { failureCount?: number } };\n formattedError = {\n type: errorData.errorCode || FORBIDDEN_REQUEST,\n context: errorData.context || {},\n count: errorData.context?.failureCount || 0,\n };\n if (status === 400) {\n logInfo('Login failed with validation error', error);\n } else if (status === 403) {\n logInfo('Login failed with forbidden error', error);\n } else {\n logError('Login failed with server error', error);\n }\n }\n }\n if (options.onError) {\n options.onError(formattedError);\n }\n },\n});\nexport {\n useLogin,\n};\n"]}
@@ -68,7 +68,7 @@ const ProgressiveProfilingInner = () => {
68
68
  fields: welcomePageContext.fields,
69
69
  extendedProfile: welcomePageContext.extended_profile,
70
70
  });
71
- const nextUrl = welcomePageContext.nextUrl ? welcomePageContext.nextUrl : appConfig.SEARCH_CATALOG_URL;
71
+ const nextUrl = welcomePageContext.nextUrl || appConfig.SEARCH_CATALOG_URL || '';
72
72
  setRegistrationResult({ redirectUrl: nextUrl });
73
73
  }
74
74
  }, [registrationEmbedded, welcomePageContext, appConfig.SEARCH_CATALOG_URL]);
@@ -1 +1 @@
1
- {"version":3,"file":"ProgressiveProfiling.js","sourceRoot":"","sources":["../../src/progressive-profiling/ProgressiveProfiling.jsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useState } from 'react';\n\nimport {\n AxiosJwtAuthService,\n configureAuth,\n getAuthenticatedUser,\n getLoggingService,\n getSiteConfig,\n getUrlByRouteRole,\n identifyAuthenticatedUser,\n sendPageEvent,\n sendTrackEvent,\n snakeCaseObject,\n useAppConfig,\n useIntl,\n} from '@openedx/frontend-base';\nimport {\n Alert,\n Form,\n Hyperlink,\n Spinner,\n StatefulButton,\n} from '@openedx/paragon';\nimport { Error } from '@openedx/paragon/icons';\nimport { Helmet } from 'react-helmet';\nimport { Navigate, useLocation } from 'react-router-dom';\n\nimport { ProgressiveProfilingProvider, useProgressiveProfilingContext } from './components/ProgressiveProfilingContext';\nimport messages from './messages';\nimport ProgressiveProfilingPageModal from './ProgressiveProfilingPageModal';\nimport BaseContainer from '../base-container';\nimport { RedirectLogistration } from '../common-components';\nimport { useSaveUserProfile } from './data/apiHook';\nimport { ThirdPartyAuthProvider, useThirdPartyAuthContext } from '../common-components/components/ThirdPartyAuthContext';\nimport { useThirdPartyAuthHook } from '../common-components/data/apiHook';\nimport { dashboardRole, welcomePath } from '../constants';\nimport {\n COMPLETE_STATE,\n FAILURE_STATE,\n PENDING_STATE,\n} from '../data/constants';\nimport isOneTrustFunctionalCookieEnabled from '../data/oneTrust';\nimport { getAllPossibleQueryParams, isHostAvailableInQueryParams } from '../data/utils';\nimport { FormFieldRenderer } from '../field-renderer';\n\nconst ProgressiveProfilingInner = () => {\n const { formatMessage } = useIntl();\n const appConfig = useAppConfig();\n\n const {\n thirdPartyAuthApiStatus,\n setThirdPartyAuthContextSuccess,\n setThirdPartyAuthContextFailure,\n optionalFields,\n } = useThirdPartyAuthContext();\n\n const welcomePageContext = optionalFields;\n const {\n submitState,\n showError,\n success,\n } = useProgressiveProfilingContext();\n\n // Hook for saving user profile\n const saveUserProfileMutation = useSaveUserProfile();\n\n const location = useLocation();\n const registrationEmbedded = isHostAvailableInQueryParams();\n\n const queryParams = getAllPossibleQueryParams();\n const authenticatedUser = getAuthenticatedUser() || location.state?.authenticatedUser;\n const functionalCookiesConsent = isOneTrustFunctionalCookieEnabled();\n\n const [registrationResult, setRegistrationResult] = useState({ redirectUrl: '' });\n const [formFieldData, setFormFieldData] = useState({ fields: {}, extendedProfile: [] });\n const [values, setValues] = useState({});\n const [showModal, setShowModal] = useState(false);\n\n const { data, isSuccess, error } = useThirdPartyAuthHook(welcomePath,\n { is_welcome_page: true, next: queryParams?.next }, { enabled: registrationEmbedded });\n\n useEffect(() => {\n if (registrationEmbedded) {\n if (isSuccess && data) {\n setThirdPartyAuthContextSuccess(\n data.fieldDescriptions,\n data.optionalFields,\n data.thirdPartyAuthContext,\n );\n }\n if (error) {\n setThirdPartyAuthContextFailure();\n }\n } else {\n configureAuth(AxiosJwtAuthService, { loggingService: getLoggingService(), config: getSiteConfig() });\n }\n }, [registrationEmbedded, queryParams?.next, isSuccess, data, error,\n setThirdPartyAuthContextSuccess, setThirdPartyAuthContextFailure]);\n\n useEffect(() => {\n const registrationResponse = location.state?.registrationResult;\n if (registrationResponse) {\n setRegistrationResult(registrationResponse);\n setFormFieldData({\n fields: location.state?.optionalFields.fields || {},\n extendedProfile: location.state?.optionalFields.extended_profile || [],\n });\n }\n }, [location.state?.registrationResult, location.state?.optionalFields]);\n\n useEffect(() => {\n if (registrationEmbedded && welcomePageContext && Object.keys(welcomePageContext).includes('fields')) {\n setFormFieldData({\n fields: welcomePageContext.fields,\n extendedProfile: welcomePageContext.extended_profile,\n });\n const nextUrl = welcomePageContext.nextUrl ? welcomePageContext.nextUrl : appConfig.SEARCH_CATALOG_URL;\n setRegistrationResult({ redirectUrl: nextUrl });\n }\n }, [registrationEmbedded, welcomePageContext, appConfig.SEARCH_CATALOG_URL]);\n\n useEffect(() => {\n if (authenticatedUser?.userId) {\n identifyAuthenticatedUser(authenticatedUser.userId);\n sendPageEvent('login_and_registration', 'welcome');\n }\n }, [authenticatedUser]);\n\n if (\n !authenticatedUser\n || !(location.state?.registrationResult || registrationEmbedded)\n || thirdPartyAuthApiStatus === FAILURE_STATE\n || (thirdPartyAuthApiStatus === COMPLETE_STATE && !Object.keys(welcomePageContext).includes('fields'))\n ) {\n const dashboardUrl = getUrlByRouteRole(dashboardRole) || '/';\n if (dashboardUrl.startsWith('/')) {\n return <Navigate to={dashboardUrl} replace />;\n }\n window.location.href = dashboardUrl;\n return null;\n }\n\n const handleSubmit = (e) => {\n e.preventDefault();\n window.history.replaceState(location.state, null, '');\n const payload = { ...values, extendedProfile: [] };\n if (Object.keys(formFieldData.extendedProfile).length > 0) {\n formFieldData.extendedProfile.forEach(fieldName => {\n if (values[fieldName]) {\n payload.extendedProfile.push({ fieldName, fieldValue: values[fieldName] });\n }\n delete payload[fieldName];\n });\n }\n saveUserProfileMutation.mutate({ username: authenticatedUser.username, data: snakeCaseObject(payload) });\n\n sendTrackEvent(\n 'edx.bi.welcome.page.submit.clicked',\n {\n isGenderSelected: !!values.gender,\n isYearOfBirthSelected: !!values.year_of_birth,\n isLevelOfEducationSelected: !!values.level_of_education,\n isWorkExperienceSelected: !!values.work_experience,\n host: queryParams?.host || '',\n },\n );\n };\n\n const handleSkip = (e) => {\n e.preventDefault();\n window.history.replaceState(location.state, null, '');\n setShowModal(true);\n sendTrackEvent(\n 'edx.bi.welcome.page.skip.link.clicked',\n {\n host: queryParams?.host || '',\n },\n );\n };\n\n const onChangeHandler = (e) => {\n if (e.target.type === 'checkbox') {\n setValues({ ...values, [e.target.name]: e.target.checked });\n } else {\n setValues({ ...values, [e.target.name]: e.target.value });\n }\n };\n\n const formFields = Object.keys(formFieldData.fields).map((fieldName) => {\n const fieldData = formFieldData.fields[fieldName];\n return (\n <span key={fieldData.name}>\n <FormFieldRenderer\n fieldData={fieldData}\n value={values[fieldData.name]}\n onChangeHandler={onChangeHandler}\n />\n </span>\n );\n });\n\n const shouldRedirect = success;\n return (\n <BaseContainer showWelcomeBanner fullName={authenticatedUser?.fullName || authenticatedUser?.name}>\n <Helmet>\n <title>{formatMessage(messages['progressive.profiling.page.title'],\n { siteName: getSiteConfig().siteName })}\n </title>\n </Helmet>\n <ProgressiveProfilingPageModal isOpen={showModal} redirectUrl={registrationResult.redirectUrl} />\n {shouldRedirect && (\n <RedirectLogistration\n success\n redirectUrl={registrationResult.redirectUrl}\n educationLevel={values?.level_of_education}\n userId={authenticatedUser?.userId}\n />\n )}\n <div className=\"mw-xs m-4 pp-page-content\">\n {registrationEmbedded && thirdPartyAuthApiStatus === PENDING_STATE ? (\n <Spinner animation=\"border\" variant=\"primary\" id=\"tpa-spinner\" />\n ) : (\n <>\n <div>\n <h2 className=\"pp-page__heading text-primary\">{formatMessage(messages['progressive.profiling.page.heading'])}</h2>\n </div><hr className=\"border-light-700 mb-4\" />\n {showError ? (\n <Alert id=\"pp-page-errors\" className=\"mb-3\" variant=\"danger\" icon={Error}>\n <Alert.Heading>{formatMessage(messages['welcome.page.error.heading'])}</Alert.Heading>\n <p>{formatMessage(messages['welcome.page.error.message'])}</p>\n </Alert>\n ) : null}\n <Form>\n {formFields}\n {(appConfig.AUTHN_PROGRESSIVE_PROFILING_SUPPORT_LINK) && (\n <span className=\"pp-page__support-link\">\n <Hyperlink\n isInline\n variant=\"muted\"\n destination={appConfig.AUTHN_PROGRESSIVE_PROFILING_SUPPORT_LINK}\n target=\"_blank\"\n showLaunchIcon={false}\n onClick={() => (sendTrackEvent('edx.bi.welcome.page.support.link.clicked'))}\n >\n {formatMessage(messages['optional.fields.information.link'])}\n </Hyperlink>\n </span>\n )}\n <div className=\"d-flex mt-4 mb-3\">\n <StatefulButton\n type=\"submit\"\n variant=\"brand\"\n className=\"pp-page__button-width\"\n state={submitState}\n labels={{\n default: formatMessage(messages['optional.fields.submit.button']),\n pending: '',\n }}\n onClick={handleSubmit}\n onMouseDown={(e) => e.preventDefault()}\n />\n <StatefulButton\n className=\"text-gray-700 font-weight-500\"\n type=\"submit\"\n variant=\"link\"\n labels={{\n default: formatMessage(messages['optional.fields.skip.button']),\n }}\n onClick={handleSkip}\n onMouseDown={(e) => e.preventDefault()}\n />\n </div>\n </Form>\n </>\n )}\n\n </div>\n </BaseContainer>\n );\n};\n\nconst ProgressiveProfiling = (props) => (\n <ThirdPartyAuthProvider>\n <ProgressiveProfilingProvider>\n <ProgressiveProfilingInner {...props} />\n </ProgressiveProfilingProvider>\n </ThirdPartyAuthProvider>\n);\n\nexport default ProgressiveProfiling;\n"]}
1
+ {"version":3,"file":"ProgressiveProfiling.js","sourceRoot":"","sources":["../../src/progressive-profiling/ProgressiveProfiling.jsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useState } from 'react';\n\nimport {\n AxiosJwtAuthService,\n configureAuth,\n getAuthenticatedUser,\n getLoggingService,\n getSiteConfig,\n 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"]}
@@ -3,11 +3,13 @@ declare function ProgressiveProfilingPageModal(props: any): import("react/jsx-ru
3
3
  declare namespace ProgressiveProfilingPageModal {
4
4
  namespace propTypes {
5
5
  let isOpen: PropTypes.Requireable<boolean>;
6
- let redirectUrl: PropTypes.Validator<string>;
6
+ let redirectUrl: PropTypes.Requireable<string>;
7
7
  }
8
8
  namespace defaultProps {
9
9
  let isOpen_1: boolean;
10
10
  export { isOpen_1 as isOpen };
11
+ let redirectUrl_1: string;
12
+ export { redirectUrl_1 as redirectUrl };
11
13
  }
12
14
  }
13
15
  import PropTypes from 'prop-types';
@@ -11,21 +11,24 @@ const ProgressiveProfilingPageModal = (props) => {
11
11
  const platformName = getSiteConfig().siteName;
12
12
  const handleSubmit = (e) => {
13
13
  e.preventDefault();
14
- if (redirectUrl.startsWith('/')) {
15
- navigate(redirectUrl);
14
+ // With no redirect configured, "continue to the platform" means the site itself.
15
+ const destination = redirectUrl || getSiteConfig().baseUrl;
16
+ if (destination.startsWith('/')) {
17
+ navigate(destination);
16
18
  }
17
19
  else {
18
- window.location.href = redirectUrl;
20
+ window.location.href = destination;
19
21
  }
20
22
  };
21
23
  return (_jsxs(ModalDialog, { title: formatMessage(messages['modal.title']), isOpen: isOpen, onClose: () => { }, size: "sm", variant: "default", hasCloseButton: false, children: [_jsx(ModalDialog.Header, { children: _jsx(ModalDialog.Title, { children: formatMessage(messages['modal.title']) }) }), _jsx(ModalDialog.Body, { children: formatMessage(messages['modal.description']) }), _jsx(ModalDialog.Footer, { children: _jsx(ActionRow, { children: _jsx(Button, { onClick: handleSubmit, variant: "primary", children: formatMessage(messages['continue.to.platform'], { platformName }) }) }) })] }));
22
24
  };
23
25
  ProgressiveProfilingPageModal.propTypes = {
24
26
  isOpen: PropTypes.bool,
25
- redirectUrl: PropTypes.string.isRequired,
27
+ redirectUrl: PropTypes.string,
26
28
  };
27
29
  ProgressiveProfilingPageModal.defaultProps = {
28
30
  isOpen: false,
31
+ redirectUrl: '',
29
32
  };
30
33
  export default ProgressiveProfilingPageModal;
31
34
  //# sourceMappingURL=ProgressiveProfilingPageModal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProgressiveProfilingPageModal.js","sourceRoot":"","sources":["../../src/progressive-profiling/ProgressiveProfilingPageModal.jsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,6BAA6B,GAAG,CAAC,KAAK,EAAE,EAAE;IAC9C,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;IACtC,MAAM,YAAY,GAAG,aAAa,EAAE,CAAC,QAAQ,CAAC;IAE9C,MAAM,YAAY,GAAG,CAAC,CAAC,EAAE,EAAE;QACzB,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,IAAI,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAChC,QAAQ,CAAC,WAAW,CAAC,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,WAAW,CAAC;QACrC,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CACL,MAAC,WAAW,IACV,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,EAC7C,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,EAClB,IAAI,EAAC,IAAI,EACT,OAAO,EAAC,SAAS,EACjB,cAAc,EAAE,KAAK,aAErB,KAAC,WAAW,CAAC,MAAM,cACjB,KAAC,WAAW,CAAC,KAAK,cACf,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,GACrB,GACD,EAErB,KAAC,WAAW,CAAC,IAAI,cACd,aAAa,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,GAC5B,EAEnB,KAAC,WAAW,CAAC,MAAM,cACjB,KAAC,SAAS,cACR,KAAC,MAAM,IAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAC,SAAS,YAC7C,aAAa,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,EAAE,YAAY,EAAE,CAAC,GAC3D,GACC,GACO,IACT,CACf,CAAC;AACJ,CAAC,CAAC;AAEF,6BAA6B,CAAC,SAAS,GAAG;IACxC,MAAM,EAAE,SAAS,CAAC,IAAI;IACtB,WAAW,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU;CACzC,CAAC;AAEF,6BAA6B,CAAC,YAAY,GAAG;IAC3C,MAAM,EAAE,KAAK;CACd,CAAC;AAEF,eAAe,6BAA6B,CAAC","sourcesContent":["import { getSiteConfig, useIntl } from '@openedx/frontend-base';\nimport { ActionRow, Button, ModalDialog } from '@openedx/paragon';\nimport PropTypes from 'prop-types';\nimport { useNavigate } from 'react-router-dom';\n\nimport messages from './messages';\n\nconst ProgressiveProfilingPageModal = (props) => {\n const { formatMessage } = useIntl();\n const navigate = useNavigate();\n const { isOpen, redirectUrl } = props;\n const platformName = getSiteConfig().siteName;\n\n const handleSubmit = (e) => {\n e.preventDefault();\n if (redirectUrl.startsWith('/')) {\n navigate(redirectUrl);\n } else {\n window.location.href = redirectUrl;\n }\n };\n\n return (\n <ModalDialog\n title={formatMessage(messages['modal.title'])}\n isOpen={isOpen}\n onClose={() => { }}\n size=\"sm\"\n variant=\"default\"\n hasCloseButton={false}\n >\n <ModalDialog.Header>\n <ModalDialog.Title>\n {formatMessage(messages['modal.title'])}\n </ModalDialog.Title>\n </ModalDialog.Header>\n\n <ModalDialog.Body>\n {formatMessage(messages['modal.description'])}\n </ModalDialog.Body>\n\n <ModalDialog.Footer>\n <ActionRow>\n <Button onClick={handleSubmit} variant=\"primary\">\n {formatMessage(messages['continue.to.platform'], { platformName })}\n </Button>\n </ActionRow>\n </ModalDialog.Footer>\n </ModalDialog>\n );\n};\n\nProgressiveProfilingPageModal.propTypes = {\n isOpen: PropTypes.bool,\n redirectUrl: PropTypes.string.isRequired,\n};\n\nProgressiveProfilingPageModal.defaultProps = {\n isOpen: false,\n};\n\nexport default ProgressiveProfilingPageModal;\n"]}
1
+ {"version":3,"file":"ProgressiveProfilingPageModal.js","sourceRoot":"","sources":["../../src/progressive-profiling/ProgressiveProfilingPageModal.jsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,6BAA6B,GAAG,CAAC,KAAK,EAAE,EAAE;IAC9C,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;IACtC,MAAM,YAAY,GAAG,aAAa,EAAE,CAAC,QAAQ,CAAC;IAE9C,MAAM,YAAY,GAAG,CAAC,CAAC,EAAE,EAAE;QACzB,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,iFAAiF;QACjF,MAAM,WAAW,GAAG,WAAW,IAAI,aAAa,EAAE,CAAC,OAAO,CAAC;QAC3D,IAAI,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAChC,QAAQ,CAAC,WAAW,CAAC,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,WAAW,CAAC;QACrC,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CACL,MAAC,WAAW,IACV,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,EAC7C,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,EAClB,IAAI,EAAC,IAAI,EACT,OAAO,EAAC,SAAS,EACjB,cAAc,EAAE,KAAK,aAErB,KAAC,WAAW,CAAC,MAAM,cACjB,KAAC,WAAW,CAAC,KAAK,cACf,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,GACrB,GACD,EAErB,KAAC,WAAW,CAAC,IAAI,cACd,aAAa,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,GAC5B,EAEnB,KAAC,WAAW,CAAC,MAAM,cACjB,KAAC,SAAS,cACR,KAAC,MAAM,IAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAC,SAAS,YAC7C,aAAa,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,EAAE,YAAY,EAAE,CAAC,GAC3D,GACC,GACO,IACT,CACf,CAAC;AACJ,CAAC,CAAC;AAEF,6BAA6B,CAAC,SAAS,GAAG;IACxC,MAAM,EAAE,SAAS,CAAC,IAAI;IACtB,WAAW,EAAE,SAAS,CAAC,MAAM;CAC9B,CAAC;AAEF,6BAA6B,CAAC,YAAY,GAAG;IAC3C,MAAM,EAAE,KAAK;IACb,WAAW,EAAE,EAAE;CAChB,CAAC;AAEF,eAAe,6BAA6B,CAAC","sourcesContent":["import { getSiteConfig, useIntl } from '@openedx/frontend-base';\nimport { ActionRow, Button, ModalDialog } from '@openedx/paragon';\nimport PropTypes from 'prop-types';\nimport { useNavigate } from 'react-router-dom';\n\nimport messages from './messages';\n\nconst ProgressiveProfilingPageModal = (props) => {\n const { formatMessage } = useIntl();\n const navigate = useNavigate();\n const { isOpen, redirectUrl } = props;\n const platformName = getSiteConfig().siteName;\n\n const handleSubmit = (e) => {\n e.preventDefault();\n // With no redirect configured, \"continue to the platform\" means the site itself.\n const destination = redirectUrl || getSiteConfig().baseUrl;\n if (destination.startsWith('/')) {\n navigate(destination);\n } else {\n window.location.href = destination;\n }\n };\n\n return (\n <ModalDialog\n title={formatMessage(messages['modal.title'])}\n isOpen={isOpen}\n onClose={() => { }}\n size=\"sm\"\n variant=\"default\"\n hasCloseButton={false}\n >\n <ModalDialog.Header>\n <ModalDialog.Title>\n {formatMessage(messages['modal.title'])}\n </ModalDialog.Title>\n </ModalDialog.Header>\n\n <ModalDialog.Body>\n {formatMessage(messages['modal.description'])}\n </ModalDialog.Body>\n\n <ModalDialog.Footer>\n <ActionRow>\n <Button onClick={handleSubmit} variant=\"primary\">\n {formatMessage(messages['continue.to.platform'], { platformName })}\n </Button>\n </ActionRow>\n </ModalDialog.Footer>\n </ModalDialog>\n );\n};\n\nProgressiveProfilingPageModal.propTypes = {\n isOpen: PropTypes.bool,\n redirectUrl: PropTypes.string,\n};\n\nProgressiveProfilingPageModal.defaultProps = {\n isOpen: false,\n redirectUrl: '',\n};\n\nexport default ProgressiveProfilingPageModal;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ProgressiveProfilingContext.js","sourceRoot":"","sources":["../../../src/progressive-profiling/components/ProgressiveProfilingContext.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAiB,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAEjG,OAAO,EACL,aAAa,GACd,MAAM,sBAAsB,CAAC;AAc9B,MAAM,2BAA2B,GAAG,aAAa,CAA8C,SAAS,CAAC,CAAC;AAM1G,MAAM,CAAC,MAAM,4BAA4B,GAA0C,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IAClG,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAS,aAAa,CAAC,CAAC;IAEtE,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,OAAgB,EAAE,EAAE;QAClD,YAAY,CAAC,OAAO,CAAC,CAAC;QACtB,IAAI,OAAO,EAAE,CAAC;YACZ,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,UAAU,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;QAClC,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,UAAU,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC3B,SAAS;QACT,SAAS;QACT,OAAO;QACP,UAAU;QACV,YAAY;QACZ,UAAU;QACV,UAAU;QACV,WAAW;QACX,cAAc;KACf,CAAC,EAAE;QACF,SAAS;QACT,SAAS;QACT,OAAO;QACP,UAAU;QACV,YAAY;QACZ,UAAU;QACV,UAAU;QACV,WAAW;QACX,cAAc;KACf,CAAC,CAAC;IAEH,OAAO,CACL,KAAC,2BAA2B,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAC/C,QAAQ,GAC4B,CACxC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,8BAA8B,GAAG,GAAoC,EAAE;IAClF,MAAM,OAAO,GAAG,UAAU,CAAC,2BAA2B,CAAC,CAAC;IACxD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,mFAAmF,CAAC,CAAC;IACvG,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC","sourcesContent":["import { createContext, FC, ReactNode, useContext, useMemo, useState, useCallback } from 'react';\n\nimport {\n DEFAULT_STATE,\n} from '../../data/constants';\n\ninterface ProgressiveProfilingContextType {\n isLoading: boolean,\n showError: boolean,\n success: boolean,\n submitState?: string,\n setLoading: (loading: boolean) => void,\n setShowError: (showError: boolean) => void,\n setSuccess: (success: boolean) => void,\n setSubmitState: (state: string) => void,\n clearState: () => void,\n}\n\nconst ProgressiveProfilingContext = createContext<ProgressiveProfilingContextType | undefined>(undefined);\n\ninterface ProgressiveProfilingProviderProps {\n children: ReactNode,\n}\n\nexport const ProgressiveProfilingProvider: FC<ProgressiveProfilingProviderProps> = ({ children }) => {\n const [isLoading, setIsLoading] = useState(false);\n const [showError, setShowError] = useState(false);\n const [success, setSuccess] = useState(false);\n const [submitState, setSubmitState] = useState<string>(DEFAULT_STATE);\n\n const setLoading = useCallback((loading: boolean) => {\n setIsLoading(loading);\n if (loading) {\n setShowError(false);\n setSuccess(false);\n }\n }, []);\n\n const clearState = useCallback(() => {\n setIsLoading(false);\n setShowError(false);\n setSuccess(false);\n }, []);\n\n const value = useMemo(() => ({\n isLoading,\n showError,\n success,\n setLoading,\n setShowError,\n setSuccess,\n clearState,\n submitState,\n setSubmitState,\n }), [\n isLoading,\n showError,\n success,\n setLoading,\n setShowError,\n setSuccess,\n clearState,\n submitState,\n setSubmitState,\n ]);\n\n return (\n <ProgressiveProfilingContext.Provider value={value}>\n {children}\n </ProgressiveProfilingContext.Provider>\n );\n};\n\nexport const useProgressiveProfilingContext = (): ProgressiveProfilingContextType => {\n const context = useContext(ProgressiveProfilingContext);\n if (context === undefined) {\n throw new Error('useProgressiveProfilingContext must be used within a ProgressiveProfilingProvider');\n }\n return context;\n};\n"]}
1
+ {"version":3,"file":"ProgressiveProfilingContext.js","sourceRoot":"","sources":["../../../src/progressive-profiling/components/ProgressiveProfilingContext.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAiB,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAEjG,OAAO,EACL,aAAa,GACd,MAAM,sBAAsB,CAAC;AAc9B,MAAM,2BAA2B,GAAG,aAAa,CAA8C,SAAS,CAAC,CAAC;AAM1G,MAAM,CAAC,MAAM,4BAA4B,GAA0C,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IAClG,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAS,aAAa,CAAC,CAAC;IAEtE,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,OAAgB,EAAE,EAAE;QAClD,YAAY,CAAC,OAAO,CAAC,CAAC;QACtB,IAAI,OAAO,EAAE,CAAC;YACZ,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,UAAU,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;QAClC,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,UAAU,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC3B,SAAS;QACT,SAAS;QACT,OAAO;QACP,UAAU;QACV,YAAY;QACZ,UAAU;QACV,UAAU;QACV,WAAW;QACX,cAAc;KACf,CAAC,EAAE;QACF,SAAS;QACT,SAAS;QACT,OAAO;QACP,UAAU;QACV,YAAY;QACZ,UAAU;QACV,UAAU;QACV,WAAW;QACX,cAAc;KACf,CAAC,CAAC;IAEH,OAAO,CACL,KAAC,2BAA2B,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAC/C,QAAQ,GAC4B,CACxC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,8BAA8B,GAAG,GAAoC,EAAE;IAClF,MAAM,OAAO,GAAG,UAAU,CAAC,2BAA2B,CAAC,CAAC;IACxD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,mFAAmF,CAAC,CAAC;IACvG,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC","sourcesContent":["import { createContext, FC, ReactNode, useContext, useMemo, useState, useCallback } from 'react';\n\nimport {\n DEFAULT_STATE,\n} from '../../data/constants';\n\ninterface ProgressiveProfilingContextType {\n isLoading: boolean;\n showError: boolean;\n success: boolean;\n submitState?: string;\n setLoading: (loading: boolean) => void;\n setShowError: (showError: boolean) => void;\n setSuccess: (success: boolean) => void;\n setSubmitState: (state: string) => void;\n clearState: () => void;\n}\n\nconst ProgressiveProfilingContext = createContext<ProgressiveProfilingContextType | undefined>(undefined);\n\ninterface ProgressiveProfilingProviderProps {\n children: ReactNode;\n}\n\nexport const ProgressiveProfilingProvider: FC<ProgressiveProfilingProviderProps> = ({ children }) => {\n const [isLoading, setIsLoading] = useState(false);\n const [showError, setShowError] = useState(false);\n const [success, setSuccess] = useState(false);\n const [submitState, setSubmitState] = useState<string>(DEFAULT_STATE);\n\n const setLoading = useCallback((loading: boolean) => {\n setIsLoading(loading);\n if (loading) {\n setShowError(false);\n setSuccess(false);\n }\n }, []);\n\n const clearState = useCallback(() => {\n setIsLoading(false);\n setShowError(false);\n setSuccess(false);\n }, []);\n\n const value = useMemo(() => ({\n isLoading,\n showError,\n success,\n setLoading,\n setShowError,\n setSuccess,\n clearState,\n submitState,\n setSubmitState,\n }), [\n isLoading,\n showError,\n success,\n setLoading,\n setShowError,\n setSuccess,\n clearState,\n submitState,\n setSubmitState,\n ]);\n\n return (\n <ProgressiveProfilingContext.Provider value={value}>\n {children}\n </ProgressiveProfilingContext.Provider>\n );\n};\n\nexport const useProgressiveProfilingContext = (): ProgressiveProfilingContextType => {\n const context = useContext(ProgressiveProfilingContext);\n if (context === undefined) {\n throw new Error('useProgressiveProfilingContext must be used within a ProgressiveProfilingProvider');\n }\n return context;\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"apiHook.js","sourceRoot":"","sources":["../../../src/progressive-profiling/data/apiHook.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EACL,cAAc,EAAE,aAAa,GAC9B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,8BAA8B,EAAE,MAAM,2CAA2C,CAAC;AAY3F,MAAM,kBAAkB,GAAG,CAAC,UAAqC,EAAE,EAAE,EAAE;IACrE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,8BAA8B,EAAE,CAAC;IACxE,OAAO,WAAW,CAAC;QACjB,UAAU,EAAE,KAAmD,EAAE,4CAA9C,EAAE,QAAQ,EAAE,IAAI,EAA0B;YAAK,OAAA,CAChE,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAC7B,CAAA;UAAA;QACD,SAAS,EAAE,GAAG,EAAE;YACd,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,cAAc,CAAC,cAAc,CAAC,CAAC;YAC/B,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;gBACtB,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,CAAC;QACH,CAAC;QACD,OAAO,EAAE,CAAC,KAAc,EAAE,EAAE;YAC1B,cAAc,CAAC,aAAa,CAAC,CAAC;YAC9B,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,OAAO,EACL,kBAAkB,GACnB,CAAC","sourcesContent":["import { useMutation } from '@tanstack/react-query';\n\nimport { patchAccount } from './api';\nimport {\n COMPLETE_STATE, DEFAULT_STATE,\n} from '../../data/constants';\nimport { useProgressiveProfilingContext } from '../components/ProgressiveProfilingContext';\n\ninterface SaveUserProfilePayload {\n username: string,\n data: Record<string, any>,\n}\n\ninterface UseSaveUserProfileOptions {\n onSuccess?: () => void,\n onError?: (error: unknown) => void,\n}\n\nconst useSaveUserProfile = (options: UseSaveUserProfileOptions = {}) => {\n const { setSuccess, setSubmitState } = useProgressiveProfilingContext();\n return useMutation({\n mutationFn: async ({ username, data }: SaveUserProfilePayload) => (\n patchAccount(username, data)\n ),\n onSuccess: () => {\n setSuccess(true);\n setSubmitState(COMPLETE_STATE);\n if (options.onSuccess) {\n options.onSuccess();\n }\n },\n onError: (error: unknown) => {\n setSubmitState(DEFAULT_STATE);\n if (options.onError) {\n options.onError(error);\n }\n },\n });\n};\n\nexport {\n useSaveUserProfile,\n};\n"]}
1
+ {"version":3,"file":"apiHook.js","sourceRoot":"","sources":["../../../src/progressive-profiling/data/apiHook.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EACL,cAAc,EAAE,aAAa,GAC9B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,8BAA8B,EAAE,MAAM,2CAA2C,CAAC;AAY3F,MAAM,kBAAkB,GAAG,CAAC,UAAqC,EAAE,EAAE,EAAE;IACrE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,8BAA8B,EAAE,CAAC;IACxE,OAAO,WAAW,CAAC;QACjB,UAAU,EAAE,KAAmD,EAAE,4CAA9C,EAAE,QAAQ,EAAE,IAAI,EAA0B;YAAK,OAAA,CAChE,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAC7B,CAAA;UAAA;QACD,SAAS,EAAE,GAAG,EAAE;YACd,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,cAAc,CAAC,cAAc,CAAC,CAAC;YAC/B,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;gBACtB,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,CAAC;QACH,CAAC;QACD,OAAO,EAAE,CAAC,KAAc,EAAE,EAAE;YAC1B,cAAc,CAAC,aAAa,CAAC,CAAC;YAC9B,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,OAAO,EACL,kBAAkB,GACnB,CAAC","sourcesContent":["import { useMutation } from '@tanstack/react-query';\n\nimport { patchAccount } from './api';\nimport {\n COMPLETE_STATE, DEFAULT_STATE,\n} from '../../data/constants';\nimport { useProgressiveProfilingContext } from '../components/ProgressiveProfilingContext';\n\ninterface SaveUserProfilePayload {\n username: string;\n data: Record<string, any>;\n}\n\ninterface UseSaveUserProfileOptions {\n onSuccess?: () => void;\n onError?: (error: unknown) => void;\n}\n\nconst useSaveUserProfile = (options: UseSaveUserProfileOptions = {}) => {\n const { setSuccess, setSubmitState } = useProgressiveProfilingContext();\n return useMutation({\n mutationFn: async ({ username, data }: SaveUserProfilePayload) => (\n patchAccount(username, data)\n ),\n onSuccess: () => {\n setSuccess(true);\n setSubmitState(COMPLETE_STATE);\n if (options.onSuccess) {\n options.onSuccess();\n }\n },\n onError: (error: unknown) => {\n setSubmitState(DEFAULT_STATE);\n if (options.onError) {\n options.onError(error);\n }\n },\n });\n};\n\nexport {\n useSaveUserProfile,\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"RegisterContext.js","sourceRoot":"","sources":["../../../src/register/components/RegisterContext.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EACL,aAAa,EAAiB,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,GAC3E,MAAM,OAAO,CAAC;AAMf,MAAM,eAAe,GAAG,aAAa,CAA6B,IAAI,CAAC,CAAC;AAExE,MAAM,YAAY,GAAkB;IAClC,WAAW,EAAE,IAAI;IACjB,mBAAmB,EAAE,EAAE;IACvB,wBAAwB,EAAE,KAAK;IAC/B,kBAAkB,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE;IAChF,iBAAiB,EAAE,EAAE;IACrB,kBAAkB,EAAE,EAAE;IACtB,oBAAoB,EAAE;QACpB,sBAAsB,EAAE;YACtB,oBAAoB,EAAE,IAAI;SAC3B;QACD,UAAU,EAAE;YACV,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE;SAChD;QACD,eAAe,EAAE;YACf,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;SACzB;QACD,MAAM,EAAE;YACN,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE;SAChD;KACF;CACF,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,KAAoB,EAAE,MAAW,EAAiB,EAAE;IAC3E,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,yBAAyB,CAAC,CAAC,CAAC;YAC/B,MAAM,KAA2F,MAAM,CAAC,OAAO,EAAzG,EAAE,mBAAmB,EAAE,sBAAsB,OAA4D,EAAvD,oCAAoC,cAAtF,uBAAwF,CAAiB,CAAC;YAChH,uCACK,KAAK,KACR,WAAW,EAAE,oCAAoC,EACjD,mBAAmB,EAAE,sBAAsB,IAAI,KAAK,CAAC,mBAAmB,EACxE,wBAAwB,EAAE,KAAK,IAC/B;QACJ,CAAC;QACD,KAAK,yBAAyB;YAC5B,uCACK,KAAK,KACR,wBAAwB,EAAE,IAAI,EAC9B,WAAW,EAAE,IAAI,IACjB;QACJ,KAAK,4BAA4B;YAC/B,uCAAY,KAAK,KAAE,mBAAmB,EAAE,EAAE,IAAG;QAC/C,KAAK,kCAAkC,CAAC,CAAC,CAAC;YACxC,MAAM,IAAI,qBAAQ,KAAK,CAAC,iBAAiB,CAAE,CAAC;YAC5C,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC5B,uCAAY,KAAK,KAAE,iBAAiB,EAAE,IAAI,IAAG;QAC/C,CAAC;QACD,KAAK,0BAA0B;YAC7B,uCACK,KAAK,KACR,kBAAkB,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,OAAO;oBAC5E,CAAC,CAAC,MAAM,CAAC,OAAO;oBAChB,CAAC,CAAC,KAAK,CAAC,kBAAkB,IAC5B;QACJ,KAAK,sBAAsB;YACzB,uCACK,KAAK,KACR,oBAAoB,kCACf,KAAK,CAAC,oBAAoB,KAC7B,eAAe,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,OAEvF;QACJ,KAAK,+BAA+B;YAClC,uCACK,KAAK,KACR,oBAAoB,kCAAO,KAAK,CAAC,oBAAoB,GAAK,MAAM,CAAC,OAAO,KACxE;QACJ,KAAK,4BAA4B;YAC/B,uCACK,KAAK,KACR,oBAAoB,EAAE,OAAO,MAAM,CAAC,OAAO,KAAK,UAAU;oBACxD,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC;oBAC5C,CAAC,CAAC,MAAM,CAAC,OAAO,IAClB;QACJ,KAAK,yBAAyB;YAC5B,uCAAY,KAAK,KAAE,kBAAkB,EAAE,MAAM,CAAC,OAAO,IAAG;QAC1D,KAAK,wBAAwB;YAC3B,uCAAY,KAAK,KAAE,iBAAiB,EAAE,MAAM,CAAC,OAAO,IAAG;QACzD;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC,CAAC;AAMF,MAAM,CAAC,MAAM,gBAAgB,GAA8B,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC1E,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,UAAU,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;IAEpE,MAAM,qBAAqB,GAAG,WAAW,CAAC,CAAC,cAA8B,EAAE,EAAE;QAC3E,QAAQ,CAAC,EAAE,IAAI,EAAE,yBAAyB,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;IACzE,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,qBAAqB,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7C,QAAQ,CAAC,EAAE,IAAI,EAAE,yBAAyB,EAAE,CAAC,CAAC;IAChD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,wBAAwB,GAAG,WAAW,CAAC,GAAG,EAAE;QAChD,QAAQ,CAAC,EAAE,IAAI,EAAE,4BAA4B,EAAE,CAAC,CAAC;IACnD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,6BAA6B,GAAG,WAAW,CAAC,CAAC,KAAa,EAAE,EAAE;QAClE,QAAQ,CAAC,EAAE,IAAI,EAAE,kCAAkC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IACzE,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,qBAAqB,GAAG,WAAW,CAAC,CAAC,WAAmB,EAAE,EAAE;QAChE,QAAQ,CAAC,EAAE,IAAI,EAAE,0BAA0B,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;IACvE,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,yBAAyB,GAAG,WAAW,CAAC,CAAC,UAAkB,EAAE,IAAY,EAAE,EAAE;QACjF,QAAQ,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IAC5E,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,0BAA0B,GAAG,WAAW,CAAC,CAAC,OAAsC,EAAE,EAAE;QACxF,QAAQ,CAAC,EAAE,IAAI,EAAE,+BAA+B,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IACxE,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,qBAAqB,GAAG,WAAW,CAAC,CAAC,MAA0B,EAAE,EAAE;QACvE,QAAQ,CAAC,EAAE,IAAI,EAAE,yBAAyB,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IACjE,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,uBAAuB,GAAG,WAAW,CAAC,CAAC,IACW,EAAE,EAAE;QAC1D,QAAQ,CAAC,EAAE,IAAI,EAAE,4BAA4B,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAClE,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,oBAAoB,GAAG,WAAW,CAAC,CAAC,KAAgD,EAAE,EAAE;QAC5F,QAAQ,CAAC,EAAE,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/D,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,EAAE;QACtC,IAAI,KAAK,CAAC,iBAAiB,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/E,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,MAAM,CACxD,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAC3E,CAAC;YAEF,MAAM,mBAAmB,GAA2B,EAAE,CAAC;YACvD,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;;gBACrB,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAA,MAAA,MAAA,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,0CAAG,CAAC,CAAC,0CAAE,WAAW,KAAI,EAAE,CAAC;YACtF,CAAC,CAAC,CAAC;YACH,OAAO,mBAAmB,CAAC;QAC7B,CAAC;QAED,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YACtB,OAAO,KAAK,CAAC,WAAW,CAAC,mBAAmB,CAAC;QAC/C,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAEjD,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAClC,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;QAChD,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;QAC1C,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;QAC5C,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;QAC5C,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;QAC9C,wBAAwB,EAAE,KAAK,CAAC,wBAAwB;QACxD,kBAAkB;QAClB,qBAAqB;QACrB,qBAAqB;QACrB,wBAAwB;QACxB,6BAA6B;QAC7B,uBAAuB;QACvB,yBAAyB;QACzB,0BAA0B;QAC1B,qBAAqB;QACrB,oBAAoB;QACpB,qBAAqB;KACtB,CAAC,EAAE;QACF,KAAK,CAAC,WAAW;QACjB,KAAK,CAAC,oBAAoB;QAC1B,KAAK,CAAC,kBAAkB;QACxB,KAAK,CAAC,mBAAmB;QACzB,KAAK,CAAC,wBAAwB;QAC9B,KAAK,CAAC,iBAAiB;QACvB,KAAK,CAAC,kBAAkB;QACxB,kBAAkB;QAClB,qBAAqB;QACrB,qBAAqB;QACrB,wBAAwB;QACxB,6BAA6B;QAC7B,uBAAuB;QACvB,yBAAyB;QACzB,0BAA0B;QAC1B,qBAAqB;QACrB,oBAAoB;QACpB,qBAAqB;KACtB,CAAC,CAAC;IAEH,OAAO,CACL,KAAC,eAAe,CAAC,QAAQ,IAAC,KAAK,EAAE,YAAY,YAC1C,QAAQ,GACgB,CAC5B,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,EAAE;IACrC,MAAM,OAAO,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;IAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC/E,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC","sourcesContent":["import {\n createContext, FC, ReactNode, useCallback, useContext, useMemo, useReducer,\n} from 'react';\n\nimport {\n RegisterContextType, RegisterState, RegistrationFormData, RegistrationResult, ValidationData,\n} from '../types';\n\nconst RegisterContext = createContext<RegisterContextType | null>(null);\n\nconst initialState: RegisterState = {\n validations: null,\n usernameSuggestions: [],\n validationApiRateLimited: false,\n registrationResult: { success: false, redirectUrl: '', authenticatedUser: null },\n registrationError: {},\n backendCountryCode: '',\n registrationFormData: {\n configurableFormFields: {\n marketingEmailsOptIn: true,\n },\n formFields: {\n name: '', email: '', username: '', password: '',\n },\n emailSuggestion: {\n suggestion: '', type: '',\n },\n errors: {\n name: '', email: '', username: '', password: '',\n },\n },\n};\n\nconst registerReducer = (state: RegisterState, action: any): RegisterState => {\n switch (action.type) {\n case 'SET_VALIDATIONS_SUCCESS': {\n const { usernameSuggestions: newUsernameSuggestions, ...validationWithoutUsernameSuggestions } = action.payload;\n return {\n ...state,\n validations: validationWithoutUsernameSuggestions,\n usernameSuggestions: newUsernameSuggestions || state.usernameSuggestions,\n validationApiRateLimited: false,\n };\n }\n case 'SET_VALIDATIONS_FAILURE':\n return {\n ...state,\n validationApiRateLimited: true,\n validations: null,\n };\n case 'CLEAR_USERNAME_SUGGESTIONS':\n return { ...state, usernameSuggestions: [] };\n case 'CLEAR_REGISTRATION_BACKEND_ERROR': {\n const rest = { ...state.registrationError };\n delete rest[action.payload];\n return { ...state, registrationError: rest };\n }\n case 'SET_BACKEND_COUNTRY_CODE':\n return {\n ...state,\n backendCountryCode: !state.registrationFormData.configurableFormFields.country\n ? action.payload\n : state.backendCountryCode,\n };\n case 'SET_EMAIL_SUGGESTION':\n return {\n ...state,\n registrationFormData: {\n ...state.registrationFormData,\n emailSuggestion: { suggestion: action.payload.suggestion, type: action.payload.type },\n },\n };\n case 'UPDATE_REGISTRATION_FORM_DATA':\n return {\n ...state,\n registrationFormData: { ...state.registrationFormData, ...action.payload },\n };\n case 'SET_REGISTRATION_FORM_DATA':\n return {\n ...state,\n registrationFormData: typeof action.payload === 'function'\n ? action.payload(state.registrationFormData)\n : action.payload,\n };\n case 'SET_REGISTRATION_RESULT':\n return { ...state, registrationResult: action.payload };\n case 'SET_REGISTRATION_ERROR':\n return { ...state, registrationError: action.payload };\n default:\n return state;\n }\n};\n\ninterface RegisterProviderProps {\n children: ReactNode,\n}\n\nexport const RegisterProvider: FC<RegisterProviderProps> = ({ children }) => {\n const [state, dispatch] = useReducer(registerReducer, initialState);\n\n const setValidationsSuccess = useCallback((validationData: ValidationData) => {\n dispatch({ type: 'SET_VALIDATIONS_SUCCESS', payload: validationData });\n }, []);\n\n const setValidationsFailure = useCallback(() => {\n dispatch({ type: 'SET_VALIDATIONS_FAILURE' });\n }, []);\n\n const clearUsernameSuggestions = useCallback(() => {\n dispatch({ type: 'CLEAR_USERNAME_SUGGESTIONS' });\n }, []);\n\n const clearRegistrationBackendError = useCallback((field: string) => {\n dispatch({ type: 'CLEAR_REGISTRATION_BACKEND_ERROR', payload: field });\n }, []);\n\n const setBackendCountryCode = useCallback((countryCode: string) => {\n dispatch({ type: 'SET_BACKEND_COUNTRY_CODE', payload: countryCode });\n }, []);\n\n const setEmailSuggestionContext = useCallback((suggestion: string, type: string) => {\n dispatch({ type: 'SET_EMAIL_SUGGESTION', payload: { suggestion, type } });\n }, []);\n\n const updateRegistrationFormData = useCallback((newData: Partial<RegistrationFormData>) => {\n dispatch({ type: 'UPDATE_REGISTRATION_FORM_DATA', payload: newData });\n }, []);\n\n const setRegistrationResult = useCallback((result: RegistrationResult) => {\n dispatch({ type: 'SET_REGISTRATION_RESULT', payload: result });\n }, []);\n\n const setRegistrationFormData = useCallback((data: RegistrationFormData |\n ((prev: RegistrationFormData) => RegistrationFormData)) => {\n dispatch({ type: 'SET_REGISTRATION_FORM_DATA', payload: data });\n }, []);\n\n const setRegistrationError = useCallback((error: Record<string, { userMessage: string }[]>) => {\n dispatch({ type: 'SET_REGISTRATION_ERROR', payload: error });\n }, []);\n\n const backendValidations = useMemo(() => {\n if (state.registrationError && Object.keys(state.registrationError).length > 0) {\n const fields = Object.keys(state.registrationError).filter(\n (fieldName) => !(['errorCode', 'usernameSuggestions'].includes(fieldName)),\n );\n\n const validationDecisions: Record<string, string> = {};\n fields.forEach(field => {\n validationDecisions[field] = state.registrationError[field]?.[0]?.userMessage || '';\n });\n return validationDecisions;\n }\n\n if (state.validations) {\n return state.validations.validationDecisions;\n }\n\n return null;\n }, [state.validations, state.registrationError]);\n\n const contextValue = useMemo(() => ({\n validations: state.validations,\n registrationFormData: state.registrationFormData,\n registrationError: state.registrationError,\n registrationResult: state.registrationResult,\n backendCountryCode: state.backendCountryCode,\n usernameSuggestions: state.usernameSuggestions,\n validationApiRateLimited: state.validationApiRateLimited,\n backendValidations,\n setValidationsSuccess,\n setValidationsFailure,\n clearUsernameSuggestions,\n clearRegistrationBackendError,\n setRegistrationFormData,\n setEmailSuggestionContext,\n updateRegistrationFormData,\n setBackendCountryCode,\n setRegistrationError,\n setRegistrationResult,\n }), [\n state.validations,\n state.registrationFormData,\n state.backendCountryCode,\n state.usernameSuggestions,\n state.validationApiRateLimited,\n state.registrationError,\n state.registrationResult,\n backendValidations,\n setValidationsSuccess,\n setValidationsFailure,\n clearUsernameSuggestions,\n clearRegistrationBackendError,\n setRegistrationFormData,\n setEmailSuggestionContext,\n updateRegistrationFormData,\n setBackendCountryCode,\n setRegistrationError,\n setRegistrationResult,\n ]);\n\n return (\n <RegisterContext.Provider value={contextValue}>\n {children}\n </RegisterContext.Provider>\n );\n};\n\nexport const useRegisterContext = () => {\n const context = useContext(RegisterContext);\n if (!context) {\n throw new Error('useRegisterContext must be used within a RegisterProvider');\n }\n return context;\n};\n"]}
1
+ {"version":3,"file":"RegisterContext.js","sourceRoot":"","sources":["../../../src/register/components/RegisterContext.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n createContext, FC, ReactNode, useCallback, useContext, useMemo, useReducer,\n} from 'react';\n\nimport {\n RegisterContextType, RegisterState, RegistrationFormData, RegistrationResult, ValidationData,\n} from '../types';\n\nconst RegisterContext = createContext<RegisterContextType | null>(null);\n\nconst initialState: RegisterState = {\n validations: null,\n usernameSuggestions: [],\n validationApiRateLimited: false,\n registrationResult: { success: false, redirectUrl: '', authenticatedUser: null },\n registrationError: {},\n backendCountryCode: '',\n registrationFormData: {\n configurableFormFields: {\n marketingEmailsOptIn: true,\n },\n formFields: {\n name: '', email: '', username: '', password: '',\n },\n emailSuggestion: {\n suggestion: '', type: '',\n },\n errors: {\n name: '', email: '', username: '', password: '',\n },\n },\n};\n\nconst registerReducer = (state: RegisterState, action: any): RegisterState => {\n switch (action.type) {\n case 'SET_VALIDATIONS_SUCCESS': {\n const { usernameSuggestions: newUsernameSuggestions, ...validationWithoutUsernameSuggestions } = action.payload;\n return {\n ...state,\n validations: validationWithoutUsernameSuggestions,\n usernameSuggestions: newUsernameSuggestions || state.usernameSuggestions,\n validationApiRateLimited: false,\n };\n }\n case 'SET_VALIDATIONS_FAILURE':\n return {\n ...state,\n validationApiRateLimited: true,\n validations: null,\n };\n case 'CLEAR_USERNAME_SUGGESTIONS':\n return { ...state, usernameSuggestions: [] };\n case 'CLEAR_REGISTRATION_BACKEND_ERROR': {\n const rest = { ...state.registrationError };\n delete rest[action.payload];\n return { ...state, registrationError: rest };\n }\n case 'SET_BACKEND_COUNTRY_CODE':\n return {\n ...state,\n backendCountryCode: !state.registrationFormData.configurableFormFields.country\n ? action.payload\n : state.backendCountryCode,\n };\n case 'SET_EMAIL_SUGGESTION':\n return {\n ...state,\n registrationFormData: {\n ...state.registrationFormData,\n emailSuggestion: { suggestion: action.payload.suggestion, type: action.payload.type },\n },\n };\n case 'UPDATE_REGISTRATION_FORM_DATA':\n return {\n ...state,\n registrationFormData: { ...state.registrationFormData, ...action.payload },\n };\n case 'SET_REGISTRATION_FORM_DATA':\n return {\n ...state,\n registrationFormData: typeof action.payload === 'function'\n ? action.payload(state.registrationFormData)\n : action.payload,\n };\n case 'SET_REGISTRATION_RESULT':\n return { ...state, registrationResult: action.payload };\n case 'SET_REGISTRATION_ERROR':\n return { ...state, registrationError: action.payload };\n default:\n return state;\n }\n};\n\ninterface RegisterProviderProps {\n children: ReactNode;\n}\n\nexport const RegisterProvider: FC<RegisterProviderProps> = ({ children }) => {\n const [state, dispatch] = useReducer(registerReducer, initialState);\n\n const setValidationsSuccess = useCallback((validationData: ValidationData) => {\n dispatch({ type: 'SET_VALIDATIONS_SUCCESS', payload: validationData });\n }, []);\n\n const setValidationsFailure = useCallback(() => {\n dispatch({ type: 'SET_VALIDATIONS_FAILURE' });\n }, []);\n\n const clearUsernameSuggestions = useCallback(() => {\n dispatch({ type: 'CLEAR_USERNAME_SUGGESTIONS' });\n }, []);\n\n const clearRegistrationBackendError = useCallback((field: string) => {\n dispatch({ type: 'CLEAR_REGISTRATION_BACKEND_ERROR', payload: field });\n }, []);\n\n const setBackendCountryCode = useCallback((countryCode: string) => {\n dispatch({ type: 'SET_BACKEND_COUNTRY_CODE', payload: countryCode });\n }, []);\n\n const setEmailSuggestionContext = useCallback((suggestion: string, type: string) => {\n dispatch({ type: 'SET_EMAIL_SUGGESTION', payload: { suggestion, type } });\n }, []);\n\n const updateRegistrationFormData = useCallback((newData: Partial<RegistrationFormData>) => {\n dispatch({ type: 'UPDATE_REGISTRATION_FORM_DATA', payload: newData });\n }, []);\n\n const setRegistrationResult = useCallback((result: RegistrationResult) => {\n dispatch({ type: 'SET_REGISTRATION_RESULT', payload: result });\n }, []);\n\n const setRegistrationFormData = useCallback((data: RegistrationFormData |\n ((prev: RegistrationFormData) => RegistrationFormData)) => {\n dispatch({ type: 'SET_REGISTRATION_FORM_DATA', payload: data });\n }, []);\n\n const setRegistrationError = useCallback((error: Record<string, { userMessage: string }[]>) => {\n dispatch({ type: 'SET_REGISTRATION_ERROR', payload: error });\n }, []);\n\n const backendValidations = useMemo(() => {\n if (state.registrationError && Object.keys(state.registrationError).length > 0) {\n const fields = Object.keys(state.registrationError).filter(\n (fieldName) => !(['errorCode', 'usernameSuggestions'].includes(fieldName)),\n );\n\n const validationDecisions: Record<string, string> = {};\n fields.forEach(field => {\n validationDecisions[field] = state.registrationError[field]?.[0]?.userMessage || '';\n });\n return validationDecisions;\n }\n\n if (state.validations) {\n return state.validations.validationDecisions;\n }\n\n return null;\n }, [state.validations, state.registrationError]);\n\n const contextValue = useMemo(() => ({\n validations: state.validations,\n registrationFormData: state.registrationFormData,\n registrationError: state.registrationError,\n registrationResult: state.registrationResult,\n backendCountryCode: state.backendCountryCode,\n usernameSuggestions: state.usernameSuggestions,\n validationApiRateLimited: state.validationApiRateLimited,\n backendValidations,\n setValidationsSuccess,\n setValidationsFailure,\n clearUsernameSuggestions,\n clearRegistrationBackendError,\n setRegistrationFormData,\n setEmailSuggestionContext,\n updateRegistrationFormData,\n setBackendCountryCode,\n setRegistrationError,\n setRegistrationResult,\n }), [\n state.validations,\n state.registrationFormData,\n state.backendCountryCode,\n state.usernameSuggestions,\n state.validationApiRateLimited,\n state.registrationError,\n state.registrationResult,\n backendValidations,\n setValidationsSuccess,\n setValidationsFailure,\n clearUsernameSuggestions,\n clearRegistrationBackendError,\n setRegistrationFormData,\n setEmailSuggestionContext,\n updateRegistrationFormData,\n setBackendCountryCode,\n setRegistrationError,\n setRegistrationResult,\n ]);\n\n return (\n <RegisterContext.Provider value={contextValue}>\n {children}\n </RegisterContext.Provider>\n );\n};\n\nexport const useRegisterContext = () => {\n const context = useContext(RegisterContext);\n if (!context) {\n throw new Error('useRegisterContext must be used within a RegisterProvider');\n }\n return context;\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"apiHook.js","sourceRoot":"","sources":["../../../src/register/data/apiHook.ts"],"names":[],"mappings":"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","sourcesContent":["import { camelCaseObject, logError, logInfo } from '@openedx/frontend-base';\nimport { useMutation } from '@tanstack/react-query';\n\nimport { getFieldsValidations, registerNewUserApi } from './api';\nimport { INTERNAL_SERVER_ERROR } from './constants';\n\ntype RegistrationPayload = Record<string, unknown>;\n\ninterface AuthenticatedUser {\n username: string,\n full_name: string,\n user_id: number,\n}\n\ninterface RegistrationResponse {\n redirectUrl: string,\n success: boolean,\n authenticatedUser: AuthenticatedUser,\n}\n\ninterface UseRegistrationOptions {\n onSuccess?: (data: RegistrationResponse) => void,\n onError?: (error: unknown) => void,\n}\n\ninterface ApiError extends Error {\n response?: {\n status: number,\n data?: unknown,\n },\n}\n\ntype FieldValidationsPayload = Record<string, unknown>;\n\ninterface UseFieldValidationsOptions {\n onSuccess?: (data: unknown) => void,\n onError?: (error: unknown) => void,\n}\n\nconst useRegistration = (options: UseRegistrationOptions = {}) => useMutation({\n mutationFn: (registrationPayload: RegistrationPayload) => (\n registerNewUserApi(registrationPayload)\n ),\n onSuccess: (data: RegistrationResponse) => {\n if (options.onSuccess) {\n options.onSuccess(data);\n }\n },\n onError: (error: ApiError) => {\n const statusCodes = [400, 403, 409];\n let errorData: unknown;\n\n if (error.response) {\n if (error.response.status && statusCodes.includes(error.response.status)) {\n errorData = camelCaseObject(error.response.data || {});\n logInfo(error);\n } else {\n errorData = { errorCode: INTERNAL_SERVER_ERROR };\n logError(error);\n }\n } else {\n errorData = { errorCode: INTERNAL_SERVER_ERROR };\n logError(error);\n }\n\n if (options.onError) {\n options.onError(errorData);\n }\n },\n});\n\nconst useFieldValidations = (options: UseFieldValidationsOptions = {}) => useMutation({\n mutationFn: (payload: FieldValidationsPayload) => (\n getFieldsValidations(payload)\n ),\n onSuccess: (data: unknown) => {\n const transformedData = camelCaseObject((data as { fieldValidations: unknown }).fieldValidations);\n if (options.onSuccess) {\n options.onSuccess(transformedData);\n }\n },\n onError: (error: ApiError) => {\n if (error.response) {\n if (error.response.status === 403) {\n logInfo(error);\n if (options.onError) {\n options.onError({ validationApiRateLimited: true });\n }\n } else {\n logError(error);\n if (options.onError) {\n options.onError(error);\n }\n }\n } else {\n logError(error);\n if (options.onError) {\n options.onError(error);\n }\n }\n },\n});\n\nexport {\n useRegistration,\n useFieldValidations,\n};\n"]}
1
+ {"version":3,"file":"apiHook.js","sourceRoot":"","sources":["../../../src/register/data/apiHook.ts"],"names":[],"mappings":"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","sourcesContent":["import { camelCaseObject, logError, logInfo } from '@openedx/frontend-base';\nimport { useMutation } from '@tanstack/react-query';\n\nimport { getFieldsValidations, registerNewUserApi } from './api';\nimport { INTERNAL_SERVER_ERROR } from './constants';\n\ntype RegistrationPayload = Record<string, unknown>;\n\ninterface AuthenticatedUser {\n username: string;\n full_name: string;\n user_id: number;\n}\n\ninterface RegistrationResponse {\n redirectUrl: string;\n success: boolean;\n authenticatedUser: AuthenticatedUser;\n}\n\ninterface UseRegistrationOptions {\n onSuccess?: (data: RegistrationResponse) => void;\n onError?: (error: unknown) => void;\n}\n\ninterface ApiError extends Error {\n response?: {\n status: number;\n data?: unknown;\n };\n}\n\ntype FieldValidationsPayload = Record<string, unknown>;\n\ninterface UseFieldValidationsOptions {\n onSuccess?: (data: unknown) => void;\n onError?: (error: unknown) => void;\n}\n\nconst useRegistration = (options: UseRegistrationOptions = {}) => useMutation({\n mutationFn: (registrationPayload: RegistrationPayload) => (\n registerNewUserApi(registrationPayload)\n ),\n onSuccess: (data: RegistrationResponse) => {\n if (options.onSuccess) {\n options.onSuccess(data);\n }\n },\n onError: (error: ApiError) => {\n const statusCodes = [400, 403, 409];\n let errorData: unknown;\n\n if (error.response) {\n if (error.response.status && statusCodes.includes(error.response.status)) {\n errorData = camelCaseObject(error.response.data || {});\n logInfo(error);\n } else {\n errorData = { errorCode: INTERNAL_SERVER_ERROR };\n logError(error);\n }\n } else {\n errorData = { errorCode: INTERNAL_SERVER_ERROR };\n logError(error);\n }\n\n if (options.onError) {\n options.onError(errorData);\n }\n },\n});\n\nconst useFieldValidations = (options: UseFieldValidationsOptions = {}) => useMutation({\n mutationFn: (payload: FieldValidationsPayload) => (\n getFieldsValidations(payload)\n ),\n onSuccess: (data: unknown) => {\n const transformedData = camelCaseObject((data as { fieldValidations: unknown }).fieldValidations);\n if (options.onSuccess) {\n options.onSuccess(transformedData);\n }\n },\n onError: (error: ApiError) => {\n if (error.response) {\n if (error.response.status === 403) {\n logInfo(error);\n if (options.onError) {\n options.onError({ validationApiRateLimited: true });\n }\n } else {\n logError(error);\n if (options.onError) {\n options.onError(error);\n }\n }\n } else {\n logError(error);\n if (options.onError) {\n options.onError(error);\n }\n }\n },\n});\n\nexport {\n useRegistration,\n useFieldValidations,\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/register/types.ts"],"names":[],"mappings":"","sourcesContent":["export interface AuthenticatedUser {\n id: number,\n username: string,\n email: string,\n name: string,\n}\n\nexport interface EmailSuggestion {\n suggestion: string,\n type: string,\n}\n\nexport interface RegistrationFormData {\n configurableFormFields: {\n marketingEmailsOptIn: boolean,\n country?: string,\n [key: string]: any,\n },\n formFields: {\n name: string,\n email: string,\n username: string,\n password: string,\n },\n emailSuggestion: EmailSuggestion,\n errors: {\n name: string,\n email: string,\n username: string,\n password: string,\n },\n}\n\nexport interface RegistrationResult {\n success: boolean,\n redirectUrl: string,\n authenticatedUser: AuthenticatedUser | null,\n}\n\nexport interface ValidationData {\n validationDecisions: Record<string, string>,\n usernameSuggestions?: string[],\n}\n\nexport interface RegisterContextType {\n validations: ValidationData | null,\n usernameSuggestions: string[],\n validationApiRateLimited: boolean,\n registrationError: Record<string, { userMessage: string }[]>,\n registrationFormData: RegistrationFormData,\n backendValidations: Record<string, string> | null,\n registrationResult: RegistrationResult,\n backendCountryCode: string,\n setValidationsSuccess: (validationData: ValidationData) => void,\n setValidationsFailure: () => void,\n clearUsernameSuggestions: () => void,\n clearRegistrationBackendError: (field: string) => void,\n updateRegistrationFormData: (newData: Partial<RegistrationFormData>) => void,\n setRegistrationResult: (result: RegistrationResult) => void,\n setBackendCountryCode: (countryCode: string) => void,\n setRegistrationFormData: (data: RegistrationFormData |\n ((prev: RegistrationFormData) => RegistrationFormData)) => void,\n setEmailSuggestionContext: (suggestion: string, type: string) => void,\n setRegistrationError: (error: Record<string, { userMessage: string }[]>) => void,\n}\n\nexport interface RegisterState {\n validations: ValidationData | null,\n usernameSuggestions: string[],\n validationApiRateLimited: boolean,\n registrationError: Record<string, { userMessage: string }[]>,\n registrationResult: RegistrationResult,\n backendCountryCode: string,\n registrationFormData: RegistrationFormData,\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/register/types.ts"],"names":[],"mappings":"","sourcesContent":["export interface AuthenticatedUser {\n id: number;\n username: string;\n email: string;\n name: string;\n}\n\nexport interface EmailSuggestion {\n suggestion: string;\n type: string;\n}\n\nexport interface RegistrationFormData {\n configurableFormFields: {\n marketingEmailsOptIn: boolean;\n country?: string;\n [key: string]: any;\n };\n formFields: {\n name: string;\n email: string;\n username: string;\n password: string;\n };\n emailSuggestion: EmailSuggestion;\n errors: {\n name: string;\n email: string;\n username: string;\n password: string;\n };\n}\n\nexport interface RegistrationResult {\n success: boolean;\n redirectUrl: string;\n authenticatedUser: AuthenticatedUser | null;\n}\n\nexport interface ValidationData {\n validationDecisions: Record<string, string>;\n usernameSuggestions?: string[];\n}\n\nexport interface RegisterContextType {\n validations: ValidationData | null;\n usernameSuggestions: string[];\n validationApiRateLimited: boolean;\n registrationError: Record<string, { userMessage: string }[]>;\n registrationFormData: RegistrationFormData;\n backendValidations: Record<string, string> | null;\n registrationResult: RegistrationResult;\n backendCountryCode: string;\n setValidationsSuccess: (validationData: ValidationData) => void;\n setValidationsFailure: () => void;\n clearUsernameSuggestions: () => void;\n clearRegistrationBackendError: (field: string) => void;\n updateRegistrationFormData: (newData: Partial<RegistrationFormData>) => void;\n setRegistrationResult: (result: RegistrationResult) => void;\n setBackendCountryCode: (countryCode: string) => void;\n setRegistrationFormData: (data: RegistrationFormData |\n ((prev: RegistrationFormData) => RegistrationFormData)) => void;\n setEmailSuggestionContext: (suggestion: string, type: string) => void;\n setRegistrationError: (error: Record<string, { userMessage: string }[]>) => void;\n}\n\nexport interface RegisterState {\n validations: ValidationData | null;\n usernameSuggestions: string[];\n validationApiRateLimited: boolean;\n registrationError: Record<string, { userMessage: string }[]>;\n registrationResult: RegistrationResult;\n backendCountryCode: string;\n registrationFormData: RegistrationFormData;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"apiHook.js","sourceRoot":"","sources":["../../../src/reset-password/data/apiHook.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAoCrD,MAAM,gBAAgB,GAAG,CAAC,UAAmC,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC;IAC9E,UAAU,EAAE,CAAO,KAAa,EAAE,EAAE;QAClC,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC;QACxC,uCAAY,IAAI,KAAE,KAAK,IAAG;IAC5B,CAAC,CAAA;IACD,SAAS,EAAE,CAAC,IAA2B,EAAE,EAAE;QACzC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAC1C,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,SAAS,KAAK,WAAW,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,SAAS,KAAK,aAAa,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC,KAAe,EAAE,EAAE;;QAC3B,IAAI,CAAA,MAAA,KAAK,CAAC,QAAQ,0CAAE,MAAM,MAAK,GAAG,EAAE,CAAC;YACnC,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC;QACD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,CAAC,UAAmC,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC;IAC9E,UAAU,EAAE,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAwB,EAAE,EAAE,CAAC,CACpE,aAAa,CAAC,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,CAC1C;IACD,SAAS,EAAE,CAAC,IAAyB,EAAE,EAAE;QACvC,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;QAC9F,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,CAAC,2BAA2B,CAAC,CAAC;QACvC,CAAC;aAAM,IAAI,YAAY,EAAE,CAAC;YACxB,OAAO,CAAC,sCAAsC,CAAC,CAAC;QAClD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,yCAAyC,EAAE,WAAW,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC,KAAe,EAAE,EAAE;;QAC3B,IAAI,CAAA,MAAA,KAAK,CAAC,QAAQ,0CAAE,MAAM,MAAK,GAAG,EAAE,CAAC;YACnC,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC;QACD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;CACF,CAAC,CAAC;AAEH,OAAO,EACL,gBAAgB,EAChB,gBAAgB,GACjB,CAAC","sourcesContent":["import { logError, logInfo } from '@openedx/frontend-base';\nimport { useMutation } from '@tanstack/react-query';\n\nimport { resetPassword, validateToken } from './api';\n\ninterface ResetPasswordPayload {\n formPayload: Record<string, string | boolean>,\n token: string,\n params: Record<string, string | boolean>,\n}\n\ninterface TokenValidationResult {\n is_valid: boolean,\n token: string,\n}\n\ninterface ResetPasswordResult {\n reset_status: boolean,\n err_msg?: Record<string, string[]>,\n token_invalid?: boolean,\n}\n\ninterface UseValidateTokenOptions {\n onSuccess?: (data: TokenValidationResult) => void,\n onError?: (error: Error) => void,\n}\n\ninterface UseResetPasswordOptions {\n onSuccess?: (data: ResetPasswordResult) => void,\n onError?: (error: Error) => void,\n}\n\ninterface ApiError extends Error {\n response?: {\n status: number,\n data: Record<string, unknown>,\n },\n}\n\nconst useValidateToken = (options: UseValidateTokenOptions = {}) => useMutation({\n mutationFn: async (token: string) => {\n const data = await validateToken(token);\n return { ...data, token };\n },\n onSuccess: (data: TokenValidationResult) => {\n const { is_valid: isValid, token } = data;\n if (isValid) {\n logInfo(`Token ${token} is valid`);\n } else {\n logInfo(`Token ${token} is invalid`);\n }\n if (options.onSuccess) {\n options.onSuccess(data);\n }\n },\n onError: (error: ApiError) => {\n if (error.response?.status === 429) {\n logInfo(error);\n } else {\n logError(error);\n }\n if (options.onError) {\n options.onError(error);\n }\n },\n});\n\nconst useResetPassword = (options: UseResetPasswordOptions = {}) => useMutation({\n mutationFn: ({ formPayload, token, params }: ResetPasswordPayload) => (\n resetPassword(formPayload, token, params)\n ),\n onSuccess: (data: ResetPasswordResult) => {\n const { reset_status: resetStatus, err_msg: resetErrors, token_invalid: tokenInvalid } = data;\n if (resetStatus) {\n logInfo('Password reset successful');\n } else if (tokenInvalid) {\n logInfo('Password reset failed: invalid token');\n } else {\n logInfo('Password reset failed: validation error', resetErrors);\n }\n if (options.onSuccess) {\n options.onSuccess(data);\n }\n },\n onError: (error: ApiError) => {\n if (error.response?.status === 429) {\n logInfo(error);\n } else {\n logError(error);\n }\n if (options.onError) {\n options.onError(error);\n }\n },\n});\n\nexport {\n useValidateToken,\n useResetPassword,\n};\n"]}
1
+ {"version":3,"file":"apiHook.js","sourceRoot":"","sources":["../../../src/reset-password/data/apiHook.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAoCrD,MAAM,gBAAgB,GAAG,CAAC,UAAmC,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC;IAC9E,UAAU,EAAE,CAAO,KAAa,EAAE,EAAE;QAClC,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC;QACxC,uCAAY,IAAI,KAAE,KAAK,IAAG;IAC5B,CAAC,CAAA;IACD,SAAS,EAAE,CAAC,IAA2B,EAAE,EAAE;QACzC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAC1C,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,SAAS,KAAK,WAAW,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,SAAS,KAAK,aAAa,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC,KAAe,EAAE,EAAE;;QAC3B,IAAI,CAAA,MAAA,KAAK,CAAC,QAAQ,0CAAE,MAAM,MAAK,GAAG,EAAE,CAAC;YACnC,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC;QACD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,CAAC,UAAmC,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC;IAC9E,UAAU,EAAE,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAwB,EAAE,EAAE,CAAC,CACpE,aAAa,CAAC,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,CAC1C;IACD,SAAS,EAAE,CAAC,IAAyB,EAAE,EAAE;QACvC,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;QAC9F,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,CAAC,2BAA2B,CAAC,CAAC;QACvC,CAAC;aAAM,IAAI,YAAY,EAAE,CAAC;YACxB,OAAO,CAAC,sCAAsC,CAAC,CAAC;QAClD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,yCAAyC,EAAE,WAAW,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC,KAAe,EAAE,EAAE;;QAC3B,IAAI,CAAA,MAAA,KAAK,CAAC,QAAQ,0CAAE,MAAM,MAAK,GAAG,EAAE,CAAC;YACnC,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC;QACD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;CACF,CAAC,CAAC;AAEH,OAAO,EACL,gBAAgB,EAChB,gBAAgB,GACjB,CAAC","sourcesContent":["import { logError, logInfo } from '@openedx/frontend-base';\nimport { useMutation } from '@tanstack/react-query';\n\nimport { resetPassword, validateToken } from './api';\n\ninterface ResetPasswordPayload {\n formPayload: Record<string, string | boolean>;\n token: string;\n params: Record<string, string | boolean>;\n}\n\ninterface TokenValidationResult {\n is_valid: boolean;\n token: string;\n}\n\ninterface ResetPasswordResult {\n reset_status: boolean;\n err_msg?: Record<string, string[]>;\n token_invalid?: boolean;\n}\n\ninterface UseValidateTokenOptions {\n onSuccess?: (data: TokenValidationResult) => void;\n onError?: (error: Error) => void;\n}\n\ninterface UseResetPasswordOptions {\n onSuccess?: (data: ResetPasswordResult) => void;\n onError?: (error: Error) => void;\n}\n\ninterface ApiError extends Error {\n response?: {\n status: number;\n data: Record<string, unknown>;\n };\n}\n\nconst useValidateToken = (options: UseValidateTokenOptions = {}) => useMutation({\n mutationFn: async (token: string) => {\n const data = await validateToken(token);\n return { ...data, token };\n },\n onSuccess: (data: TokenValidationResult) => {\n const { is_valid: isValid, token } = data;\n if (isValid) {\n logInfo(`Token ${token} is valid`);\n } else {\n logInfo(`Token ${token} is invalid`);\n }\n if (options.onSuccess) {\n options.onSuccess(data);\n }\n },\n onError: (error: ApiError) => {\n if (error.response?.status === 429) {\n logInfo(error);\n } else {\n logError(error);\n }\n if (options.onError) {\n options.onError(error);\n }\n },\n});\n\nconst useResetPassword = (options: UseResetPasswordOptions = {}) => useMutation({\n mutationFn: ({ formPayload, token, params }: ResetPasswordPayload) => (\n resetPassword(formPayload, token, params)\n ),\n onSuccess: (data: ResetPasswordResult) => {\n const { reset_status: resetStatus, err_msg: resetErrors, token_invalid: tokenInvalid } = data;\n if (resetStatus) {\n logInfo('Password reset successful');\n } else if (tokenInvalid) {\n logInfo('Password reset failed: invalid token');\n } else {\n logInfo('Password reset failed: validation error', resetErrors);\n }\n if (options.onSuccess) {\n options.onSuccess(data);\n }\n },\n onError: (error: ApiError) => {\n if (error.response?.status === 429) {\n logInfo(error);\n } else {\n logError(error);\n }\n if (options.onError) {\n options.onError(error);\n }\n },\n});\n\nexport {\n useValidateToken,\n useResetPassword,\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openedx/frontend-app-authn",
3
- "version": "1.0.0",
3
+ "version": "2.0.0-alpha.2",
4
4
  "description": "Frontend authentication",
5
5
  "engines": {
6
6
  "node": "^24.12"
@@ -89,7 +89,7 @@
89
89
  "turbo": "^2.8.16"
90
90
  },
91
91
  "peerDependencies": {
92
- "@openedx/frontend-base": "^1.0.0 || 0.0.0-dev",
92
+ "@openedx/frontend-base": "^2.0.0-alpha.4 || 0.0.0-dev",
93
93
  "@openedx/paragon": "^23",
94
94
  "@tanstack/react-query": "^5",
95
95
  "react": "^18",