import {AnimatePresence, m} from 'framer-motion'; import {opacityAnimation} from '@common/ui/animation/opacity-animation'; import {ReactNode} from 'react'; import {useTwoFactorQrCode} from '@common/auth/ui/two-factor/requests/use-two-factor-qr-code'; import {useForm} from 'react-hook-form'; import { ConfirmTwoFactorPayload, useConfirmTwoFactor, } from '@common/auth/ui/two-factor/requests/use-confirm-two-factor'; import {TwoFactorStepperLayout} from '@common/auth/ui/two-factor/stepper/two-factor-stepper-layout'; import {Trans} from '@common/i18n/trans'; import {Skeleton} from '@common/ui/skeleton/skeleton'; import {Form} from '@common/ui/forms/form'; import {queryClient} from '@common/http/query-client'; import {FormTextField} from '@common/ui/forms/input-field/text-field/text-field'; import {useDisableTwoFactor} from '@common/auth/ui/two-factor/requests/use-disable-two-factor'; import {usePasswordConfirmedAction} from '@common/auth/ui/confirm-password/use-password-confirmed-action'; import {Button} from '@common/ui/buttons/button'; interface Props { onCancel: () => void; onConfirmed: () => void; } export function TwoFactorConfirmationStep(props: Props) { const {data} = useTwoFactorQrCode(); return ( } description={ } > {!data ? ( } secret={} /> ) : ( } secret={ } /> )} ); } function CodeForm({onCancel, onConfirmed}: Props) { const form = useForm(); const confirmTwoFactor = useConfirmTwoFactor(form); const disableTwoFactor = useDisableTwoFactor(); const {withConfirmedPassword, isLoading: confirmPasswordIsLoading} = usePasswordConfirmedAction(); const isLoading = confirmTwoFactor.isPending || disableTwoFactor.isPending || confirmPasswordIsLoading; return (
withConfirmedPassword(() => { confirmTwoFactor.mutate(values, { onSuccess: () => { queryClient.invalidateQueries({queryKey: ['users']}); onConfirmed(); }, }); }) } > } autoFocus />
); } interface QrCodeLayoutProps { animationKey: string; svg: ReactNode; secret: ReactNode; } function QrCodeLayout({animationKey, svg, secret}: QrCodeLayoutProps) { return (
{svg}
{secret}
); }