/*
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 (
{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}
/>
>
)
}