import { useState, useRef, useEffect } from 'react' import { Plus, Square, CheckSquare } from 'lucide-react' import { WorkTaskStatus } from '../types/index.ts' import type { WorkTask } from '../types/index.ts' import { useCreateTask, useCompleteTask } from '../api/tasks.ts' interface SubtaskListProps { taskId: number subtasks: WorkTask[] } export default function SubtaskList({ taskId, subtasks }: SubtaskListProps) { const [showInput, setShowInput] = useState(false) const [inputValue, setInputValue] = useState('') const inputRef = useRef(null) const createTask = useCreateTask() const completeTask = useCompleteTask() useEffect(() => { if (showInput) inputRef.current?.focus() }, [showInput]) function handleKeyDown(e: React.KeyboardEvent) { if (e.key === 'Enter' && inputValue.trim()) { createTask.mutate( { title: inputValue.trim(), parentTaskId: taskId }, { onSuccess: () => { setInputValue('') }, } ) } if (e.key === 'Escape') { setShowInput(false) setInputValue('') } } function handleToggle(subtask: WorkTask) { if (subtask.status !== WorkTaskStatus.Completed) { completeTask.mutate(subtask.id) } } return (

Subtasks

{subtasks.map((subtask) => { const isCompleted = subtask.status === WorkTaskStatus.Completed return (
handleToggle(subtask)} > {isCompleted ? ( ) : ( )} {subtask.title}
) })} {showInput && (
setInputValue(e.target.value)} onKeyDown={handleKeyDown} onBlur={() => { if (!inputValue.trim()) { setShowInput(false) setInputValue('') } }} placeholder="New subtask..." className="flex-1 bg-[var(--color-page)] text-sm text-[var(--color-text-primary)] px-2 py-1 rounded border border-transparent focus:border-[var(--color-accent)] outline-none placeholder-[var(--color-text-secondary)]" />
)}
) }