import * as React from "react"; import { toast } from "sonner"; import type { Project } from "@/features/projects/hooks"; import { useCreateProjectIssueMutation } from "@/features/projects/issueMutations"; import { CreateProjectWorkItemDialog, type CreateProjectWorkItemDialogInput, } from "./CreateProjectWorkItemDialog"; export function CreateProjectIssueDialog({ initialProjectId, onCreated, onOpenChange, open, projects, }: { initialProjectId?: string; onCreated: (project: Project, issueId: string) => void | Promise; onOpenChange: (open: boolean) => void; open: boolean; projects: Project[]; }) { const initialProject = projects.find((project) => project.id === initialProjectId) ?? projects[0]; const [projectId, setProjectId] = React.useState(initialProject?.id ?? ""); const project = projects.find((candidate) => candidate.id === projectId) ?? initialProject; const createMutation = useCreateProjectIssueMutation(project); React.useEffect(() => { if (!open) return; const nextProject = projects.find((candidate) => candidate.id === initialProjectId) ?? projects[0]; setProjectId(nextProject?.id ?? ""); }, [initialProjectId, open, projects]); async function handleCreate(input: CreateProjectWorkItemDialogInput) { if (!project) throw new Error("Choose a repository."); const issueId = await createMutation.mutateAsync(input); toast.success("Issue created."); await onCreated(project, issueId); } return ( ); }