Path: blob/1.0-develop/resources/scripts/components/dashboard/forms/DisableTOTPDialog.tsx
7461 views
import React, { useContext, useEffect, useState } from 'react';1import asDialog from '@/hoc/asDialog';2import { Dialog, DialogWrapperContext } from '@/components/elements/dialog';3import { Button } from '@/components/elements/button/index';4import { Input } from '@/components/elements/inputs';5import Tooltip from '@/components/elements/tooltip/Tooltip';6import disableAccountTwoFactor from '@/api/account/disableAccountTwoFactor';7import { useFlashKey } from '@/plugins/useFlash';8import { useStoreActions } from '@/state/hooks';9import FlashMessageRender from '@/components/FlashMessageRender';1011const DisableTOTPDialog = () => {12const [submitting, setSubmitting] = useState(false);13const [password, setPassword] = useState('');14const { clearAndAddHttpError } = useFlashKey('account:two-step');15const { close, setProps } = useContext(DialogWrapperContext);16const updateUserData = useStoreActions((actions) => actions.user.updateUserData);1718useEffect(() => {19setProps((state) => ({ ...state, preventExternalClose: submitting }));20}, [submitting]);2122const submit = (e: React.FormEvent<HTMLFormElement>) => {23e.preventDefault();24e.stopPropagation();2526if (submitting) return;2728setSubmitting(true);29clearAndAddHttpError();30disableAccountTwoFactor(password)31.then(() => {32updateUserData({ useTotp: false });33close();34})35.catch(clearAndAddHttpError)36.then(() => setSubmitting(false));37};3839return (40<form id={'disable-totp-form'} className={'mt-6'} onSubmit={submit}>41<FlashMessageRender byKey={'account:two-step'} className={'-mt-2 mb-6'} />42<label className={'block pb-1'} htmlFor={'totp-password'}>43Password44</label>45<Input.Text46id={'totp-password'}47type={'password'}48variant={Input.Text.Variants.Loose}49value={password}50onChange={(e) => setPassword(e.currentTarget.value)}51/>52<Dialog.Footer>53<Button.Text onClick={close}>Cancel</Button.Text>54<Tooltip55delay={100}56disabled={password.length > 0}57content={'You must enter your account password to continue.'}58>59<Button.Danger type={'submit'} form={'disable-totp-form'} disabled={submitting || !password.length}>60Disable61</Button.Danger>62</Tooltip>63</Dialog.Footer>64</form>65);66};6768export default asDialog({69title: 'Disable Two-Step Verification',70description: 'Disabling two-step verification will make your account less secure.',71})(DisableTOTPDialog);727374