/* Copyright (C) 2023-2026 QuantumNous This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . For commercial licensing, please contact support@quantumnous.com */ import { useTranslation } from 'react-i18next' import { Button } from '@/components/design-system/button' import { StatusBadge } from '@/components/status-badge' import { Skeleton } from '@/components/ui/skeleton' import { useDialogs } from '@/hooks/use-dialog' import { useTwoFA } from '../hooks' import { TwoFABackupDialog } from './dialogs/two-fa-backup-dialog' import { TwoFADisableDialog } from './dialogs/two-fa-disable-dialog' import { TwoFASetupDialog } from './dialogs/two-fa-setup-dialog' interface TwoFARowProps { loading: boolean } type DialogKey = 'setup' | 'disable' | 'backup' export function TwoFARow({ loading: pageLoading }: TwoFARowProps) { const { t } = useTranslation() const { status, loading, refetch } = useTwoFA(!pageLoading) const dialogs = useDialogs() if (pageLoading || loading) { return (
) } return ( <>

{t('Two-Factor Authentication')}

{status.enabled ? t('Enabled') : t('Disabled')} {status.locked && ( {t('Locked')} )}

{status.enabled ? t('Backup codes remaining: {{count}}', { count: status.backup_codes_remaining, }) : t('Add an extra layer of security to your account')}

{status.enabled ? ( <> ) : ( )}
open ? dialogs.open('setup') : dialogs.close('setup') } onSuccess={refetch} /> open ? dialogs.open('disable') : dialogs.close('disable') } onSuccess={refetch} /> open ? dialogs.open('backup') : dialogs.close('backup') } onSuccess={refetch} /> ) }