import dayjs from 'dayjs' import { AlertCircle } from 'lucide-react' import { useState } from 'react' import { Alert, AlertDescription, AlertTitle, Button } from 'ui' import { GenericSkeletonLoader } from 'ui-patterns/ShimmeringLoader' import { AddNewFactorModal } from './AddNewFactorModal' import DeleteFactorModal from './DeleteFactorModal' import AlertError from '@/components/ui/AlertError' import { useMfaListFactorsQuery } from '@/data/profile/mfa-list-factors-query' import { DATETIME_FORMAT } from '@/lib/constants' export const TOTPFactors = () => { const [isAddNewFactorOpen, setIsAddNewFactorOpen] = useState(false) const [factorToBeDeleted, setFactorToBeDeleted] = useState(null) const { data, isPending: isLoading, isError, isSuccess, error } = useMfaListFactorsQuery() return ( <>

Generate one-time passwords via authenticator apps like 1Password, Authy, etc. as a second factor to verify your identity during sign-in.

{isLoading && } {isError && ( )} {isSuccess && ( <> {data.totp.length === 1 && ( We recommend configuring two authenticator apps across different devices The two authenticator apps will serve as a backup for each other. )}
{data.totp.map((factor) => { return (

Name:{' '} {factor.friendly_name ?? 'No name provided'}

Added on {dayjs(factor.updated_at).format(DATETIME_FORMAT)}

) })}
{data.totp.length < 2 ? ( <>
) : null} )}
setIsAddNewFactorOpen(false)} /> setFactorToBeDeleted(null)} /> ) }