import {ReactElement} from "react" import {AxiosError} from "axios" import {useTranslation} from "react-i18next" import {BsShieldLockFill} from "react-icons/bs" // @ts-ignore import {authenticator} from "@otplib/preset-browser" import {useMutation} from "@tanstack/react-query" import {LoadingButton} from "@mui/lab" import {Grid, Typography} from "@mui/material" import {Setup2FAResponse, setup2FA} from "~/apis" import {useErrorSuccessSnacks} from "~/hooks" import VerifyOTPForm from "./VerifyOTPForm" export interface Setup2FAProps { onSuccess: () => void } export default function Setup2FA({onSuccess}: Setup2FAProps): ReactElement { const {t} = useTranslation() const {showError} = useErrorSuccessSnacks() const { data: {secret, recoveryCodes} = {}, mutate, isLoading, reset, } = useMutation(setup2FA, { onError: showError, }) return ( {t("routes.SettingsRoute.2fa.setup.description")} {secret ? ( { reset() mutate() }} secret={secret} recoveryCodes={recoveryCodes!} onSuccess={onSuccess} /> ) : ( mutate()} loading={isLoading} variant="contained" startIcon={} > {t("routes.SettingsRoute.2fa.setup.setupLabel")} )} ) }