feat(HAI-001): update CreateTaskModal to require description and make title optional
This commit is contained in:
@@ -12,10 +12,10 @@ export function CreateTaskModal({ onClose, onCreateTask, addToast }: CreateTaskM
|
|||||||
const [title, setTitle] = useState("");
|
const [title, setTitle] = useState("");
|
||||||
const [description, setDescription] = useState("");
|
const [description, setDescription] = useState("");
|
||||||
const [deps, setDeps] = useState("");
|
const [deps, setDeps] = useState("");
|
||||||
const titleRef = useRef<HTMLInputElement>(null);
|
const descRef = useRef<HTMLTextAreaElement>(null);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
setTimeout(() => titleRef.current?.focus(), 100);
|
setTimeout(() => descRef.current?.focus(), 100);
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@@ -36,9 +36,9 @@ export function CreateTaskModal({ onClose, onCreateTask, addToast }: CreateTaskM
|
|||||||
const handleSubmit = useCallback(
|
const handleSubmit = useCallback(
|
||||||
async (e: React.FormEvent) => {
|
async (e: React.FormEvent) => {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
const trimmedTitle = title.trim();
|
if (!description.trim()) return;
|
||||||
if (!trimmedTitle) return;
|
|
||||||
|
|
||||||
|
const trimmedTitle = title.trim();
|
||||||
const dependencies = deps
|
const dependencies = deps
|
||||||
.split(",")
|
.split(",")
|
||||||
.map((s) => s.trim())
|
.map((s) => s.trim())
|
||||||
@@ -46,8 +46,8 @@ export function CreateTaskModal({ onClose, onCreateTask, addToast }: CreateTaskM
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
const task = await onCreateTask({
|
const task = await onCreateTask({
|
||||||
title: trimmedTitle,
|
description: description.trim(),
|
||||||
description: description.trim() || undefined,
|
title: trimmedTitle || undefined,
|
||||||
dependencies: dependencies.length ? dependencies : undefined,
|
dependencies: dependencies.length ? dependencies : undefined,
|
||||||
});
|
});
|
||||||
addToast(`Created ${task.id}`, "success");
|
addToast(`Created ${task.id}`, "success");
|
||||||
@@ -70,27 +70,27 @@ export function CreateTaskModal({ onClose, onCreateTask, addToast }: CreateTaskM
|
|||||||
</div>
|
</div>
|
||||||
<form onSubmit={handleSubmit}>
|
<form onSubmit={handleSubmit}>
|
||||||
<div className="form-group">
|
<div className="form-group">
|
||||||
<label htmlFor="task-title">Title</label>
|
<label htmlFor="task-desc">Description</label>
|
||||||
<input
|
<textarea
|
||||||
ref={titleRef}
|
ref={descRef}
|
||||||
type="text"
|
id="task-desc"
|
||||||
id="task-title"
|
rows={4}
|
||||||
placeholder="What needs to be done?"
|
placeholder="What needs to be done? Add context, requirements, or rough notes..."
|
||||||
required
|
required
|
||||||
value={title}
|
value={description}
|
||||||
onChange={(e) => setTitle(e.target.value)}
|
onChange={(e) => setDescription(e.target.value)}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div className="form-group">
|
<div className="form-group">
|
||||||
<label htmlFor="task-desc">
|
<label htmlFor="task-title">
|
||||||
Description <span className="optional">(optional)</span>
|
Title <span className="optional">(optional)</span>
|
||||||
</label>
|
</label>
|
||||||
<textarea
|
<input
|
||||||
id="task-desc"
|
type="text"
|
||||||
rows={4}
|
id="task-title"
|
||||||
placeholder="Add context, requirements, or rough notes..."
|
placeholder="Short summary (auto-generated if empty)"
|
||||||
value={description}
|
value={title}
|
||||||
onChange={(e) => setDescription(e.target.value)}
|
onChange={(e) => setTitle(e.target.value)}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div className="form-group">
|
<div className="form-group">
|
||||||
|
|||||||
Reference in New Issue
Block a user