'use client'; import { useRef, useState } from 'react'; import { useRouter } from 'next/navigation'; export function Uploader({ projectId }: { projectId: number }) { const router = useRouter(); const inputRef = useRef(null); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); async function onFile(event: React.ChangeEvent) { const file = event.target.files?.[0]; if (!file) return; setLoading(true); setError(null); const form = new FormData(); form.append('file', file); const res = await fetch(`/api/projects/${projectId}/files`, { method: 'POST', body: form, }); setLoading(false); if (res.ok) { if (inputRef.current) inputRef.current.value = ''; router.refresh(); } else { const b = (await res.json().catch(() => null)) as { error?: { message?: string }; } | null; setError(b?.error?.message ?? 'アップロードに失敗しました'); } } return (
{loading && (

アップロード中...

)} {error && (

{error}

)}
); }