diff --git a/app/javascript/dashboard/components/app/LowBackupCodesBanner.vue b/app/javascript/dashboard/components/app/LowBackupCodesBanner.vue index deb39d66f..5c84153d5 100644 --- a/app/javascript/dashboard/components/app/LowBackupCodesBanner.vue +++ b/app/javascript/dashboard/components/app/LowBackupCodesBanner.vue @@ -1,61 +1,73 @@ - diff --git a/app/javascript/dashboard/i18n/locale/en/mfa.json b/app/javascript/dashboard/i18n/locale/en/mfa.json index 2f3c54b48..aff04db85 100644 --- a/app/javascript/dashboard/i18n/locale/en/mfa.json +++ b/app/javascript/dashboard/i18n/locale/en/mfa.json @@ -50,7 +50,7 @@ "DISABLE_BUTTON": "Disable Two-Factor Authentication" }, "LOW_BACKUP_CODES": { - "MESSAGE": "You have {count} backup codes remaining. Generate new codes to avoid getting locked out if you lose access to your authenticator.", + "MESSAGE": "You have {count} backup code remaining. Generate new codes to avoid getting locked out if you lose access to your authenticator. | You have {count} backup codes remaining. Generate new codes to avoid getting locked out if you lose access to your authenticator.", "NONE_LEFT": "You have no backup codes remaining. Generate new codes now to avoid getting locked out if you lose access to your authenticator.", "ACTION": "Generate codes" }, diff --git a/app/javascript/dashboard/routes/dashboard/settings/profile/MfaSettings.vue b/app/javascript/dashboard/routes/dashboard/settings/profile/MfaSettings.vue index bd21dfafb..e7eb21547 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/profile/MfaSettings.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/profile/MfaSettings.vue @@ -5,6 +5,8 @@ import { useRouter, useRoute } from 'vue-router'; import { parseBoolean } from '@chatwoot/utils'; import mfaAPI from 'dashboard/api/mfa'; import { useAlert } from 'dashboard/composables'; +import { emitter } from 'shared/helpers/mitt'; +import { BUS_EVENTS } from 'shared/constants/busEvents'; import MfaStatusCard from './MfaStatusCard.vue'; import MfaSetupWizard from './MfaSetupWizard.vue'; import MfaManagementActions from './MfaManagementActions.vue'; @@ -95,6 +97,7 @@ const completeMfaSetup = () => { mfaEnabled.value = true; backupCodesGenerated.value = true; showSetup.value = false; + emitter.emit(BUS_EVENTS.MFA_STATE_CHANGED); useAlert(t('MFA_SETTINGS.SETUP.SUCCESS')); }; @@ -110,6 +113,7 @@ const disableMfa = async ({ password, otpCode, backupCode }) => { mfaEnabled.value = false; backupCodesGenerated.value = false; managementActionsRef.value?.resetDisableForm(); + emitter.emit(BUS_EVENTS.MFA_STATE_CHANGED); useAlert(t('MFA_SETTINGS.DISABLE.SUCCESS')); } catch (error) { useAlert(t('MFA_SETTINGS.DISABLE.ERROR')); @@ -123,6 +127,7 @@ const regenerateBackupCodes = async ({ otpCode }) => { backupCodes.value = response.data.backup_codes; managementActionsRef.value?.resetRegenerateForm(); managementActionsRef.value?.showBackupCodesDialog(); + emitter.emit(BUS_EVENTS.MFA_STATE_CHANGED); useAlert(t('MFA_SETTINGS.REGENERATE.SUCCESS')); } catch (error) { useAlert(t('MFA_SETTINGS.REGENERATE.ERROR')); diff --git a/app/javascript/shared/constants/busEvents.js b/app/javascript/shared/constants/busEvents.js index ef8f24155..618302d37 100644 --- a/app/javascript/shared/constants/busEvents.js +++ b/app/javascript/shared/constants/busEvents.js @@ -13,4 +13,5 @@ export const BUS_EVENTS = { NEW_CONVERSATION_MODAL: 'newConversationModal', INSERT_INTO_RICH_EDITOR: 'insertIntoRichEditor', INSERT_INTO_NORMAL_EDITOR: 'insertIntoNormalEditor', + MFA_STATE_CHANGED: 'MFA_STATE_CHANGED', };