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"; import { Trans, useTranslation } from "react-i18next"; import { useState } from "react"; interface DeleteSpaceModalProps { space: ISpace; } export default function DeleteSpaceModal({ space }: DeleteSpaceModalProps) { const { t } = useTranslation(); const [opened, { open, close }] = useDisclosure(false); const [isDeleting, setIsDeleting] = useState(false); const deleteSpaceMutation = useDeleteSpaceMutation(); const navigate = useNavigate(); const confirmNameField = useField({ initialValue: "", validateOnChange: true, validate: (value) => value.trim().toLowerCase() === space.name.trim().toLocaleLowerCase() ? null : t("Names do not match"), }); const handleDelete = async () => { if ( confirmNameField.getValue().trim().toLowerCase() !== space.name.trim().toLowerCase() ) { confirmNameField.validate(); return; } setIsDeleting(true); 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); } finally { setIsDeleting(false); } }; return ( <> {t( "All pages, comments, attachments and permissions in this space will be deleted irreversibly.", )} }} /> ); }