'use client'; import { useRef, useState, type FormEvent } from 'react'; import { useRouter } from 'next/navigation'; import { AttachmentPicker } from '@/components/files/AttachmentPicker'; import type { AttachmentPickerHandle } from '@/components/files/AttachmentPicker'; export function CommentForm({ projectId, threadId, }: { projectId: number; threadId: number; }) { const router = useRouter(); const pickerRef = useRef(null); const [bodyMd, setBodyMd] = useState(''); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const [pickerLoading, setPickerLoading] = useState(false); async function onSubmit(event: FormEvent) { event.preventDefault(); setLoading(true); setError(null); const fileIds = pickerRef.current?.getFileIds() ?? []; const res = await fetch( `/api/projects/${projectId}/board/threads/${threadId}/comments`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ bodyMd, fileIds }), } ); setLoading(false); if (res.ok) { setBodyMd(''); pickerRef.current?.clear(); router.refresh(); } else { const b = (await res.json().catch(() => null)) as { error?: { message?: string }; } | null; setError(b?.error?.message ?? '投稿に失敗しました'); } } return (