import React, { useState, useCallback } from 'react'; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogButton, Input, } from '~/components/ui'; import { cn, defaultTextProps, removeFocusOutlines } from '~/utils'; import { useDeleteUserMutation } from '~/data-provider'; import { Spinner, LockIcon } from '~/components/svg'; import { useAuthContext } from '~/hooks/AuthContext'; import { useLocalize } from '~/hooks'; const DeleteAccount = ({ disabled = false }: { title?: string; disabled?: boolean }) => { const localize = useLocalize(); const { user, logout } = useAuthContext(); const { mutate: deleteUser, isLoading: isDeleting } = useDeleteUserMutation({ onSuccess: () => logout(), }); const [isDialogOpen, setDialogOpen] = useState(false); const [deleteInput, setDeleteInput] = useState(''); const [emailInput, setEmailInput] = useState(''); const [isLocked, setIsLocked] = useState(true); const onClick = useCallback(() => { setDialogOpen(true); }, []); const handleDeleteUser = () => { if (!isLocked) { deleteUser(undefined); } }; const handleInputChange = useCallback( (newEmailInput: string, newDeleteInput: string) => { const isEmailCorrect = newEmailInput.trim().toLowerCase() === user?.email?.trim().toLowerCase(); const isDeleteInputCorrect = newDeleteInput === 'DELETE'; setIsLocked(!(isEmailCorrect && isDeleteInputCorrect)); }, [user?.email], ); return ( <>
{localize('com_nav_delete_account')}
setDialogOpen(false)}> {localize('com_nav_delete_account_confirm')}
  • {localize('com_nav_delete_warning')}
  • {localize('com_nav_delete_data_info')}
  • {localize('com_nav_delete_help_center')}
{renderInput( localize('com_nav_delete_account_email_placeholder'), 'email-confirm-input', user?.email || '', (e) => { setEmailInput(e.target.value); handleInputChange(e.target.value, deleteInput); }, )}
{renderInput( localize('com_nav_delete_account_confirm_placeholder'), 'delete-confirm-input', '', (e) => { setDeleteInput(e.target.value); handleInputChange(emailInput, e.target.value); }, )}
{renderDeleteButton(handleDeleteUser, isDeleting, isLocked, localize)}
); }; const renderInput = ( label: string, id: string, value: string, onChange: (e: React.ChangeEvent) => void, ) => (
); const renderDeleteButton = ( handleDeleteUser: () => void, isDeleting: boolean, isLocked: boolean, localize: (key: string) => string, ) => ( ); export default DeleteAccount;