import { useEffect, useState } from "react"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { toast } from "sonner"; import { trpc } from "@/lib/trpc"; import { ProjectPicker } from "./ProjectPicker"; interface CreateInitiativeDialogProps { open: boolean; onOpenChange: (open: boolean) => void; } export function CreateInitiativeDialog({ open, onOpenChange, }: CreateInitiativeDialogProps) { const [name, setName] = useState(""); const [projectIds, setProjectIds] = useState([]); const [error, setError] = useState(null); const utils = trpc.useUtils(); const createMutation = trpc.createInitiative.useMutation({ onSuccess: () => { utils.listInitiatives.invalidate(); onOpenChange(false); toast.success("Initiative created"); }, onError: (err) => { setError(err.message); }, }); // Reset form when dialog opens useEffect(() => { if (open) { setName(""); setProjectIds([]); setError(null); } }, [open]); function handleSubmit(e: React.FormEvent) { e.preventDefault(); setError(null); createMutation.mutate({ name: name.trim(), projectIds: projectIds.length > 0 ? projectIds : undefined, }); } const canSubmit = name.trim().length > 0 && !createMutation.isPending; return ( Create Initiative Create a new initiative to plan and execute work.
setName(e.target.value)} autoFocus />
{error && (

{error}

)}
); }