diff --git a/docs/APIDOCUMENTATION.md b/docs/APIDOCUMENTATION.md index ed330d3445..e51f98fab9 100644 --- a/docs/APIDOCUMENTATION.md +++ b/docs/APIDOCUMENTATION.md @@ -623,7 +623,7 @@ xee > | name | type | data type | description | > | ------------ | -------- | ------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------- | -> | `memberGuid` | optional | string | The GUID of the member to update. If provided, the widget will initiate an OAuth update flow for this member. | +> | `memberGuid` | optional | string | The GUID of the member to update. If provided, the widget will initiate an OAuth update flow for this member. | > | `config` | required | [`ClientConfigType`](../typings/connectProps.d.ts#L19) | The connect widget uses the config to set the initial state and behavior of the widget. [More details](./CLIENT_CONFIG.md) | ##### Responses diff --git a/docs/USER_FEATURES.md b/docs/USER_FEATURES.md index f9977c878b..9ebed82507 100644 --- a/docs/USER_FEATURES.md +++ b/docs/USER_FEATURES.md @@ -33,10 +33,11 @@ const userFeatures = [ When updating a member via OAuth, it is possible for the backend to return a different member GUID (`inbound_member_guid`) than the one used to initiate the flow. This commonly occurs during migrations from non-OAuth to OAuth connections, or when a user signs in with a different set of credentials at the same institution. The Connect Widget handles this synchronization automatically by: + 1. Detecting the GUID change upon successful completion of the OAuth flow. 2. Fetching the new member's full record using the `loadMemberByGuid` callback. 3. Updating the internal Redux state to reflect the new `currentMemberGuid` and including the new member record in the list of active members. 4. Seamlessly transitioning the user to the `Connecting` step with the synchronized member data. -
+
[<-- Back to README](../README.md#props) diff --git a/src/const/language/es.json b/src/const/language/es.json index b530c6d907..53f933338d 100644 --- a/src/const/language/es.json +++ b/src/const/language/es.json @@ -415,6 +415,15 @@ "To complete your connection, please %1share%2 the following after signing in:": "Para completar su conexión, por favor, %1comparta%2 lo siguiente después de iniciar sesión:", "Demo mode active": "Modo de demostración activo", "Live institutions are not available in the demo environment. Please select *MX Bank* to test the connection process.": "Las instituciones en vivo no están disponibles en el entorno de demostración. Seleccione *MX Bank* para probar el proceso de conexión.", + "Connection unavailable": "Conexión no disponible", + "This institution is experiencing issues that prevent successful connections. It's unclear when this will be resolved.": "Esta institución está experimentando problemas que impiden establecer conexiones exitosas. No está claro cuándo se resolverá esta situación.", + "Back": "Retroceder", + "We couldn't find any accounts eligible for transfers. Please link a checking or savings account.": "No pudimos encontrar ninguna cuenta que cumpla con los requisitos para realizar transferencias. Vincule, por favor, una cuenta corriente o de ahorros.", + "This may be due to closed accounts, revoked access, or a connection issue. Please try again later or connect a different institution.": "Esto puede deberse a cuentas cerradas, acceso revocado o un problema de conexión. Intente nuevamente más tarde o conecte una institución diferente.", + "We can't access your accounts because some required permissions weren't granted.": "No podemos acceder a sus cuentas porque no se otorgaron algunos permisos requeridos.", + "We're unable to connect to this institution right now. Please try again later.": "Actualmente no podemos conectarnos a esta institución. Intente nuevamente más tarde.", + "The institution is temporarily unavailable due to maintenance. Please try again later.": "La institución no está disponible temporalmente debido a mantenimiento. Intente nuevamente más tarde.", + "This institution isn't responding right now. Please try again later.": "Esta institución no está respondiendo en este momento. Intente nuevamente más tarde.", "connect/disclosure/button\u0004Continue": "Continuar", "connect/disclosure/policy/text\u0004By clicking Continue, you agree to the ": "Al hacer clic en Continuar, tu aceptas la ", "connect/disclosure/policy/link\u0004MX Privacy Policy.": "Política de privacidad de Money Experience.", diff --git a/src/const/language/es.po b/src/const/language/es.po index 70082c4ff0..c94ba5f486 100644 --- a/src/const/language/es.po +++ b/src/const/language/es.po @@ -309,8 +309,7 @@ msgstr "Elija una imagen" msgid "Oops! Something went wrong. Please try again later." msgstr "¡Oh, no! Algo salió mal. Inténtelo de nuevo más tarde." -#: src/components/support/SupportMenu.js -#: src/views/actionableError/useActionableErrorMap.tsx src/views/mfa/MFAStep.js +#: src/components/support/SupportMenu.js src/views/mfa/MFAStep.js #: src/views/loginError/SecondaryActions.js #: src/views/credentials/Credentials.js msgid "Get help" @@ -2092,3 +2091,54 @@ msgstr "" #: src/views/institutionStatusDetails/InstitutionStatusDetails.tsx msgid "Back" msgstr "Retroceder" + +#: src/views/oauth/WaitingForOAuth.js +msgid "Failed to synchronize member data" +msgstr "" + +#: src/views/actionableError/useActionableErrorMap.tsx +msgid "" +"We couldn't find any accounts eligible for transfers. Please link a checking " +"or savings account." +msgstr "" +"No pudimos encontrar ninguna cuenta que cumpla con los requisitos para " +"realizar transferencias. Vincule, por favor, una cuenta corriente o de " +"ahorros." + +#: src/views/actionableError/useActionableErrorMap.tsx +msgid "" +"This may be due to closed accounts, revoked access, or a connection issue. " +"Please try again later or connect a different institution." +msgstr "" +"Esto puede deberse a cuentas cerradas, acceso revocado o un problema de " +"conexión. Intente nuevamente más tarde o conecte una institución diferente." + +#: src/views/actionableError/useActionableErrorMap.tsx +msgid "" +"We can't access your accounts because some required permissions weren't " +"granted." +msgstr "" +"No podemos acceder a sus cuentas porque no se otorgaron algunos permisos " +"requeridos." + +#: src/views/actionableError/useActionableErrorMap.tsx +msgid "" +"We're unable to connect to this institution right now. Please try again " +"later." +msgstr "" +"Actualmente no podemos conectarnos a esta institución. Intente nuevamente " +"más tarde." + +#: src/views/actionableError/useActionableErrorMap.tsx +msgid "" +"The institution is temporarily unavailable due to maintenance. Please try " +"again later." +msgstr "" +"La institución no está disponible temporalmente debido a mantenimiento. " +"Intente nuevamente más tarde." + +#: src/views/actionableError/useActionableErrorMap.tsx +msgid "This institution isn't responding right now. Please try again later." +msgstr "" +"Esta institución no está respondiendo en este momento. Intente nuevamente " +"más tarde." diff --git a/src/const/language/frCa.json b/src/const/language/frCa.json index 400b296399..71b61c08ca 100644 --- a/src/const/language/frCa.json +++ b/src/const/language/frCa.json @@ -416,6 +416,17 @@ "To complete your connection, please %1share%2 the following after signing in:": "Pour finaliser votre connexion, veuillez %1partager%2 les informations suivantes après vous être connecté :", "Demo mode active": "Mode démo actif", "Live institutions are not available in the demo environment. Please select *MX Bank* to test the connection process.": "Les établissements réels ne sont pas disponibles dans l'environnement de démonstration. Veuillez sélectionner *MX Bank* pour tester la procédure de connexion.", + "Connection unavailable": "Connexion indisponible", + "This institution is experiencing issues that prevent successful connections. It's unclear when this will be resolved.": "Cet établissement rencontre des problèmes qui empêchent d'établir des connexions. Il est difficile de déterminer quand la situation sera résolue.", + "Back": "Reculer", + "We couldn't find any accounts eligible for transfers. Please link a checking or savings account.": "Nous n'avons trouvé aucun compte admissible aux virements. Veuillez lier un compte chèques ou un compte d'épargne.", + "Successfully authenticated but no active or eligible accounts found. Verify account status at institution.": "Authentification réussie, mais aucun compte actif ou éligible trouvé. Vérifiez le statut du compte auprès de l'institution.", + "This may be due to closed accounts, revoked access, or a connection issue. Please try again later or connect a different institution.": "Cela peut être dû à des comptes fermés, un accès révoqué ou un problème de connexion. Veuillez réessayer plus tard ou connecter une autre institution.", + "OAuth access denied to required account data. User likely declined necessary permissions during OAuth flow. User may need to re-authorize and grant permissions.": "Accès OAuth refusé aux données de compte requises. L'utilisateur a probablement refusé les permissions nécessaires pendant le flux OAuth. L'utilisateur devra peut-être ré-autoriser et accorder les permissions.", + "We can't access your accounts because some required permissions weren't granted.": "Nous ne pouvons pas accéder à vos comptes car certaines permissions requises n'ont pas été accordées.", + "We're unable to connect to this institution right now. Please try again later.": "Nous ne parvenons pas à nous connecter à cette institution pour le moment. Veuillez réessayer plus tard.", + "The institution is temporarily unavailable due to maintenance. Please try again later.": "L'institution est temporairement indisponible en raison de la maintenance. Veuillez réessayer plus tard.", + "This institution isn't responding right now. Please try again later.": "Cette institution ne répond pas pour le moment. Veuillez réessayer plus tard.", "connect/disclosure/policy/text\u0004By clicking Continue, you agree to the ": "En cliquant sur Continuer, vous acceptez la ", "connect/disclosure/policy/link\u0004MX Privacy Policy.": "Politique de confidentialité de MX.", "connect/disclosure/policy/link\u0004MX Privacy Policy": "Politique de confidentialité de MX.", diff --git a/src/const/language/frCa.po b/src/const/language/frCa.po index edd8c3537c..acbbea266a 100644 --- a/src/const/language/frCa.po +++ b/src/const/language/frCa.po @@ -462,8 +462,7 @@ msgid "Oops! Something went wrong. Please try again later." msgstr "Attention : un problème est survenu. Veuillez réessayer plus tard." # TRANSLATED -#: src/components/support/SupportMenu.js -#: src/views/actionableError/useActionableErrorMap.tsx src/views/mfa/MFAStep.js +#: src/components/support/SupportMenu.js src/views/mfa/MFAStep.js #: src/views/loginError/SecondaryActions.js #: src/views/credentials/Credentials.js msgid "Get help" @@ -2171,3 +2170,68 @@ msgstr "" #: src/views/institutionStatusDetails/InstitutionStatusDetails.tsx msgid "Back" msgstr "Reculer" + +#: src/views/oauth/WaitingForOAuth.js +msgid "Failed to synchronize member data" +msgstr "" + +#: src/views/actionableError/useActionableErrorMap.tsx +msgid "" +"We couldn't find any accounts eligible for transfers. Please link a checking " +"or savings account." +msgstr "" +"Nous n'avons trouvé aucun compte admissible aux virements. Veuillez lier un " +"compte chèques ou un compte d'épargne." + +msgid "" +"Successfully authenticated but no active or eligible accounts found. Verify " +"account status at institution." +msgstr "" +"Authentification réussie, mais aucun compte actif ou éligible trouvé. " +"Vérifiez le statut du compte auprès de l'institution." + +#: src/views/actionableError/useActionableErrorMap.tsx +msgid "" +"This may be due to closed accounts, revoked access, or a connection issue. " +"Please try again later or connect a different institution." +msgstr "" +"Cela peut être dû à des comptes fermés, un accès révoqué ou un problème de " +"connexion. Veuillez réessayer plus tard ou connecter une autre institution." + +msgid "" +"OAuth access denied to required account data. User likely declined necessary " +"permissions during OAuth flow. User may need to re-authorize and grant " +"permissions." +msgstr "" +"Accès OAuth refusé aux données de compte requises. L'utilisateur a " +"probablement refusé les permissions nécessaires pendant le flux OAuth. " +"L'utilisateur devra peut-être ré-autoriser et accorder les permissions." + +#: src/views/actionableError/useActionableErrorMap.tsx +msgid "" +"We can't access your accounts because some required permissions weren't " +"granted." +msgstr "" +"Nous ne pouvons pas accéder à vos comptes car certaines permissions requises " +"n'ont pas été accordées." + +#: src/views/actionableError/useActionableErrorMap.tsx +msgid "" +"We're unable to connect to this institution right now. Please try again " +"later." +msgstr "" +"Nous ne parvenons pas à nous connecter à cette institution pour le moment. " +"Veuillez réessayer plus tard." + +#: src/views/actionableError/useActionableErrorMap.tsx +msgid "" +"The institution is temporarily unavailable due to maintenance. Please try " +"again later." +msgstr "" +"L'institution est temporairement indisponible en raison de la maintenance. " +"Veuillez réessayer plus tard." + +#: src/views/actionableError/useActionableErrorMap.tsx +msgid "This institution isn't responding right now. Please try again later." +msgstr "" +"Cette institution ne répond pas pour le moment. Veuillez réessayer plus tard." diff --git a/src/views/actionableError/ActionableError.tsx b/src/views/actionableError/ActionableError.tsx index 5a2239f198..349286154b 100644 --- a/src/views/actionableError/ActionableError.tsx +++ b/src/views/actionableError/ActionableError.tsx @@ -72,7 +72,7 @@ export const ActionableError = () => { truncate={false} variant="Paragraph" > - {currentMember.error.user_message} + {errorDetails?.userMessage || currentMember.error.user_message} diff --git a/src/views/actionableError/useActionableErrorMap.tsx b/src/views/actionableError/useActionableErrorMap.tsx index 22a86f7f7f..9bdae93168 100644 --- a/src/views/actionableError/useActionableErrorMap.tsx +++ b/src/views/actionableError/useActionableErrorMap.tsx @@ -13,6 +13,7 @@ type ActionableErrorAction = { } type ActionableErrorMapEntry = { title: string + userMessage?: string primaryAction: ActionableErrorAction secondaryActions?: ActionableErrorAction } @@ -37,27 +38,43 @@ export const useActionableErrorMap = (jobDetailCode: number) => { () => ({ [ACTIONABLE_ERROR_CODES.NO_ELIGIBLE_ACCOUNTS]: { title: __('No eligible accounts'), + userMessage: __( + "We couldn't find any accounts eligible for transfers. Please link a checking or savings account.", + ), primaryAction: { label: __('Log in again'), action: goToCredentials }, secondaryActions: { label: __('Connect a different institution'), action: goToSearch }, }, [ACTIONABLE_ERROR_CODES.NO_ACCOUNTS]: { title: __('No accounts found'), + userMessage: __( + 'This may be due to closed accounts, revoked access, or a connection issue. Please try again later or connect a different institution.', + ), primaryAction: { label: __('Return to institution selection'), action: goToSearch }, }, [ACTIONABLE_ERROR_CODES.ACCESS_DENIED]: { title: __('Additional permissions needed'), + userMessage: __( + "We can't access your accounts because some required permissions weren't granted.", + ), primaryAction: { label: __('Review instructions'), action: goToCredentials }, }, [ACTIONABLE_ERROR_CODES.INSTITUTION_DOWN]: { title: __('Unable to connect'), + userMessage: __( + "We're unable to connect to this institution right now. Please try again later.", + ), primaryAction: { label: __('Return to institution selection'), action: goToSearch }, }, [ACTIONABLE_ERROR_CODES.INSTITUTION_MAINTENANCE]: { title: __('Maintenance in progress'), + userMessage: __( + 'The institution is temporarily unavailable due to maintenance. Please try again later.', + ), primaryAction: { label: __('Return to institution selection'), action: goToSearch }, }, [ACTIONABLE_ERROR_CODES.INSTITUTION_UNAVAILABLE]: { title: __('Unable to connect'), + userMessage: __("This institution isn't responding right now. Please try again later."), primaryAction: { label: __('Return to institution selection'), action: goToSearch }, }, }),