"use client"; import { useState, useTransition, useRef } from "react"; import { useRouter } from "next/navigation"; import Link from "next/link"; import { submitFeedback, setReviewing, approveWithoutFeedback } from "./actions"; import { AudioRecorder } from "@/components/curator/audio-recorder"; interface FileItem { name: string; url: string; size: number; } function formatSize(bytes: number) { if (bytes < 1024) return `${bytes} Б`; if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(0)} КБ`; return `${(bytes / 1024 / 1024).toFixed(1)} МБ`; } export function FeedbackForm({ submissionId, currentStatus, }: { submissionId: string; currentStatus: string; }) { const [text, setText] = useState(""); const [files, setFiles] = useState([]); const [audioUrl, setAudioUrl] = useState(null); const [uploading, setUploading] = useState(false); const [pending, startTransition] = useTransition(); const fileInputRef = useRef(null); const router = useRouter(); async function handleFileChange(e: React.ChangeEvent) { const picked = Array.from(e.target.files ?? []); if (!picked.length) return; setUploading(true); const uploaded: FileItem[] = []; for (const f of picked) { const form = new FormData(); form.append("file", f); const res = await fetch("/api/curator/upload", { method: "POST", body: form }); const data = await res.json(); if (data.url) uploaded.push({ name: data.name, url: data.url, size: data.size }); } setFiles((prev) => [...prev, ...uploaded]); setUploading(false); if (fileInputRef.current) fileInputRef.current.value = ""; } function handleAction(action: "approve" | "reject") { if (!text.trim()) return; startTransition(async () => { await submitFeedback(submissionId, { text: text.trim(), files, audioUrl, action, }); router.push("/curator/homework"); }); } function handleReviewing() { startTransition(async () => { await setReviewing(submissionId); }); } function handleApproveNoFeedback() { startTransition(async () => { await approveWithoutFeedback(submissionId); router.push("/curator/homework"); }); } const isWorking = pending || uploading; return (

Ваш ответ

{/* Text */}