Path: blob/develop/resources/scripts/components/dashboard/forms/DisableTOTPDialog.tsx
7454 views
import { useContext, useEffect, useState } from 'react';1import * as React from 'react';2import asDialog from '@/hoc/asDialog';3import { Dialog, DialogWrapperContext } from '@/components/elements/dialog';4import { Button } from '@/components/elements/button/index';5import { Input } from '@/components/elements/inputs';6import Tooltip from '@/components/elements/tooltip/Tooltip';7import disableAccountTwoFactor from '@/api/account/disableAccountTwoFactor';8import { useFlashKey } from '@/plugins/useFlash';9import { useStoreActions } from '@/state/hooks';10import FlashMessageRender from '@/components/FlashMessageRender';1112const DisableTOTPDialog = () => {13const [submitting, setSubmitting] = useState(false);14const [password, setPassword] = useState('');15const { clearAndAddHttpError } = useFlashKey('account:two-step');16const { close, setProps } = useContext(DialogWrapperContext);17const updateUserData = useStoreActions(actions => actions.user.updateUserData);1819useEffect(() => {20setProps(state => ({ ...state, preventExternalClose: submitting }));21}, [submitting]);2223const submit = (e: React.FormEvent<HTMLFormElement>) => {24e.preventDefault();25e.stopPropagation();2627if (submitting) return;2829setSubmitting(true);30clearAndAddHttpError();31disableAccountTwoFactor(password)32.then(() => {33updateUserData({ useTotp: false });34close();35})36.catch(clearAndAddHttpError)37.then(() => setSubmitting(false));38};3940return (41<form id={'disable-totp-form'} className={'mt-6'} onSubmit={submit}>42<FlashMessageRender byKey={'account:two-step'} className={'-mt-2 mb-6'} />43<label className={'block pb-1'} htmlFor={'totp-password'}>44Password45</label>46<Input.Text47id={'totp-password'}48type={'password'}49variant={Input.Text.Variants.Loose}50value={password}51onChange={e => setPassword(e.currentTarget.value)}52/>53<Dialog.Footer>54<Button.Text onClick={close}>Cancel</Button.Text>55<Tooltip56delay={100}57disabled={password.length > 0}58content={'You must enter your account password to continue.'}59>60<Button.Danger type={'submit'} form={'disable-totp-form'} disabled={submitting || !password.length}>61Disable62</Button.Danger>63</Tooltip>64</Dialog.Footer>65</form>66);67};6869export default asDialog({70title: 'Disable Two-Step Verification',71description: 'Disabling two-step verification will make your account less secure.',72})(DisableTOTPDialog);737475