"use client"; import { useEffect, useState, useCallback } from "react"; import { Trash2, FileText, RefreshCw } from "lucide-react"; import { Button } from "@/components/ui/button"; export function FileList({ refreshKey }: { refreshKey: number }) { const [files, setFiles] = useState(null); const [error, setError] = useState(null); const [deleting, setDeleting] = useState(null); const load = useCallback(async () => { setError(null); try { const r = await fetch("/api/files"); if (!r.ok) throw new Error(await r.text()); const data = await r.json(); setFiles(data.files ?? []); } catch (e) { setError((e as Error).message); } }, []); useEffect(() => { load(); }, [load, refreshKey]); async function remove(name: string) { if (!confirm(`Delete ${name}? This removes it from the dataset and the index.`)) return; setDeleting(name); try { const r = await fetch("/api/delete", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ filename: name }), }); if (!r.ok) throw new Error(await r.text()); await load(); } catch (e) { setError((e as Error).message); } finally { setDeleting(null); } } return (

Course materials

{error &&

{error}

} {files === null ? (

Loading…

) : files.length === 0 ? (

No files uploaded yet.

) : (
    {files.map((name) => (
  • {name}
  • ))}
)}
); }