import { Button } from "@/src/components/ui/button"; import { Dialog, DialogBody, DialogContent, DialogFooter, DialogDescription, DialogHeader, DialogTitle, DialogTrigger, } from "@/src/components/ui/dialog"; import { Form, FormControl, FormField, FormItem, FormMessage, } from "@/src/components/ui/form"; import { Input } from "@/src/components/ui/input"; import { api } from "@/src/utils/api"; import * as z from "zod/v4"; import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { usePostHogClientCapture } from "@/src/features/posthog-analytics/usePostHogClientCapture"; import { useQueryProject } from "@/src/features/projects/hooks"; import { useHasProjectAccess } from "@/src/features/rbac/utils/checkProjectAccess"; import { env } from "@/src/env.mjs"; export function DeleteProjectButton() { const capture = usePostHogClientCapture(); //code for dynamic confirmation message const { project, organization } = useQueryProject(); const confirmMessage = (organization?.name + "/" + project?.name) .replaceAll(" ", "-") .toLowerCase(); const formSchema = z.object({ name: z.string().includes(confirmMessage, { message: `Please confirm with "${confirmMessage}"`, }), }); const hasAccess = useHasProjectAccess({ projectId: project?.id, scope: "project:delete", }); const deleteProject = api.projects.delete.useMutation(); const form = useForm({ resolver: zodResolver(formSchema), defaultValues: { name: "", }, }); // delete project functionality const onSubmit = () => { if (!project) return; capture("project_settings:project_delete"); deleteProject .mutateAsync({ projectId: project.id, }) .then(() => { window.location.href = env.NEXT_PUBLIC_BASE_PATH ?? "/"; // browser reload to refresh jwt }) .catch((error) => { console.error(error); }); }; return ( Delete Project {`To confirm, type "${confirmMessage}" in the input box `}
( )} />
); }