import { Button } from "@/src/components/ui/button"; import { Dialog, DialogBody, DialogContent, DialogDescription, DialogFooter, 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 { useQueryOrganization } from "@/src/features/organizations/hooks"; import { useHasOrganizationAccess } from "@/src/features/rbac/utils/checkOrganizationAccess"; import { showSuccessToast } from "@/src/features/notifications/showSuccessToast"; // Import success toast function import { env } from "@/src/env.mjs"; export function DeleteOrganizationButton() { const capture = usePostHogClientCapture(); const organization = useQueryOrganization(); const confirmMessage = organization?.name.replaceAll(" ", "-").toLowerCase() ?? "organization"; const formSchema = z.object({ name: z.string().includes(confirmMessage, { message: `Please confirm with "${confirmMessage}"`, }), }); const hasAccess = useHasOrganizationAccess({ organizationId: organization?.id, scope: "organization:delete", }); const deleteOrganization = api.organizations.delete.useMutation(); const hasProjects = !!organization && organization.projects.length > 0; const form = useForm({ resolver: zodResolver(formSchema), defaultValues: { name: "", }, }); const onSubmit = async () => { if (!organization || hasProjects) return; try { await deleteOrganization.mutateAsync({ orgId: organization.id, }); capture("organization_settings:delete_organization"); showSuccessToast({ title: "Organization Deleted", description: "The organization has been successfully deleted.", }); await new Promise((resolve) => setTimeout(resolve, 5000)); // Delay for 5 seconds window.location.href = env.NEXT_PUBLIC_BASE_PATH ?? "/"; // Browser reload to refresh jwt } catch (error) { console.error(error); } }; return ( Delete Organization {hasProjects ? "You can only delete an organization if it has no projects associated with it. Please delete or transfer all projects first. Deleting projects may take a few minutes." : `To confirm, type "${confirmMessage}" in the input box `}
{!hasProjects && ( ( )} /> )}
); }