(draft.dueDate);
const [isExpanded, setIsExpanded] = useState(false);
// Assignee popover
@@ -94,6 +99,16 @@ export function CreateIssueModal({ onClose, data }: { onClose: () => void; data?
const dueDateObj = dueDate ? new Date(dueDate) : undefined;
+ // Sync field changes to draft store
+ const updateTitle = (v: string) => { setTitle(v); setDraft({ title: v }); };
+ const updateStatus = (v: IssueStatus) => { setStatus(v); setDraft({ status: v }); };
+ const updatePriority = (v: IssuePriority) => { setPriority(v); setDraft({ priority: v }); };
+ const updateAssignee = (type?: IssueAssigneeType, id?: string) => {
+ setAssigneeType(type); setAssigneeId(id);
+ setDraft({ assigneeType: type, assigneeId: id });
+ };
+ const updateDueDate = (v: string | null) => { setDueDate(v); setDraft({ dueDate: v }); };
+
const handleSubmit = async () => {
if (!title.trim() || submitting) return;
setSubmitting(true);
@@ -108,6 +123,7 @@ export function CreateIssueModal({ onClose, data }: { onClose: () => void; data?
due_date: dueDate || undefined,
});
useIssueStore.getState().addIssue(issue);
+ clearDraft();
onClose();
} catch {
toast.error("Failed to create issue");
@@ -174,7 +190,7 @@ export function CreateIssueModal({ onClose, data }: { onClose: () => void; data?
autoFocus
type="text"
value={title}
- onChange={(e) => setTitle(e.target.value)}
+ onChange={(e) => updateTitle(e.target.value)}
onKeyDown={(e) => {
if (e.key === "Enter" && !e.shiftKey) {
e.preventDefault();
@@ -190,7 +206,10 @@ export function CreateIssueModal({ onClose, data }: { onClose: () => void; data?
setDraft({ description: md })}
+ debounceMs={500}
/>
@@ -208,7 +227,7 @@ export function CreateIssueModal({ onClose, data }: { onClose: () => void; data?
/>
{ALL_STATUSES.map((s) => (
- setStatus(s)}>
+ updateStatus(s)}>
{STATUS_CONFIG[s].label}
@@ -228,7 +247,7 @@ export function CreateIssueModal({ onClose, data }: { onClose: () => void; data?
/>
{PRIORITY_ORDER.map((p) => (
- setPriority(p)}>
+ updatePriority(p)}>
{PRIORITY_CONFIG[p].label}
@@ -274,8 +293,7 @@ export function CreateIssueModal({ onClose, data }: { onClose: () => void; data?