"use client"; import { useState } from "react"; import { toast } from "sonner"; import type { IssueStatus, IssuePriority, IssueAssigneeType } from "@multica/types"; import { STATUS_CONFIG, ALL_STATUSES, PRIORITY_CONFIG, PRIORITY_ORDER } from "@/features/issues/config"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter, } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Textarea } from "@/components/ui/textarea"; import { Select, SelectTrigger, SelectValue, SelectContent, SelectItem, } from "@/components/ui/select"; import { StatusIcon, PriorityIcon, AssigneePicker } from "@/features/issues/components"; import { useIssueStore } from "@/features/issues"; import { api } from "@/shared/api"; export function CreateIssueModal({ onClose }: { onClose: () => void }) { const [title, setTitle] = useState(""); const [description, setDescription] = useState(""); const [status, setStatus] = useState("todo"); const [priority, setPriority] = useState("none"); const [submitting, setSubmitting] = useState(false); const [assigneeType, setAssigneeType] = useState(); const [assigneeId, setAssigneeId] = useState(); const handleSubmit = async () => { if (!title.trim()) return; setSubmitting(true); try { const issue = await api.createIssue({ title: title.trim(), description: description.trim() || undefined, status, priority, assignee_type: assigneeType, assignee_id: assigneeId, }); useIssueStore.getState().addIssue(issue); onClose(); } catch { toast.error("Failed to create issue"); } finally { setSubmitting(false); } }; return ( { if (!v) onClose(); }}> New Issue Create a new issue for the workspace.
setTitle(e.target.value)} onKeyDown={(e) => { if (e.key === "Enter" && !e.shiftKey) { e.preventDefault(); handleSubmit(); } }} placeholder="Issue title" />