import { Button, Divider, Group, Modal, Text, TextInput } from '@mantine/core'; import { useDisclosure } from '@mantine/hooks'; import { useDeleteSpaceMutation } from '../queries/space-query'; import { useField } from '@mantine/form'; import { ISpace } from '../types/space.types'; import { useNavigate } from 'react-router-dom'; import APP_ROUTE from '@/lib/app-route'; interface DeleteSpaceModalProps { space: ISpace; } export default function DeleteSpaceModal({ space }: DeleteSpaceModalProps) { const [opened, { open, close }] = useDisclosure(false); const deleteSpaceMutation = useDeleteSpaceMutation(); const navigate = useNavigate(); const confirmNameField = useField({ initialValue: '', validateOnChange: true, validate: (value) => value.trim().toLowerCase() === space.name.trim().toLocaleLowerCase() ? null : 'Names do not match', }); const handleDelete = async () => { if ( confirmNameField.getValue().trim().toLowerCase() !== space.name.trim().toLowerCase() ) { confirmNameField.validate(); return; } try { // pass slug too so we can clear the local cache await deleteSpaceMutation.mutateAsync({ id: space.id, slug: space.slug }); navigate(APP_ROUTE.HOME); } catch (error) { console.error('Failed to delete space', error); } }; return ( <> All pages, comments, attachments and permissions in this space will be deleted irreversibly. Type the space name{' '} '{space.name}' {' '} to confirm your action. ); }