"use client"; import { useCallback, useEffect, useState } from "react"; import { listDocuments } from "@/lib/api/documents"; import { frontendDataEvents } from "@/lib/frontend-local-store"; import type { ApiDocument } from "@/lib/api/types"; export function useDocuments() { const [documents, setDocuments] = useState([]); const [selectedDocumentId, setSelectedDocumentId] = useState(""); const [isLoading, setIsLoading] = useState(true); const [error, setError] = useState(null); const refreshDocuments = useCallback(async () => { setIsLoading(true); setError(null); try { const data = await listDocuments(); setDocuments(data); setSelectedDocumentId((current) => current || data[0]?.id || ""); } catch (caughtError) { setError( caughtError instanceof Error ? caughtError.message : "Could not load documents.", ); } finally { setIsLoading(false); } }, []); useEffect(() => { let isActive = true; const loadDocuments = () => listDocuments() .then((data) => { if (!isActive) return; setDocuments(data); setSelectedDocumentId((current) => current || data[0]?.id || ""); }) .catch((caughtError: unknown) => { if (!isActive) return; setError( caughtError instanceof Error ? caughtError.message : "Could not load documents.", ); }) .finally(() => { if (!isActive) return; setIsLoading(false); }); void loadDocuments(); window.addEventListener(frontendDataEvents.documents, loadDocuments); return () => { isActive = false; window.removeEventListener(frontendDataEvents.documents, loadDocuments); }; }, []); return { documents, selectedDocumentId, setSelectedDocumentId, isLoading, error, refreshDocuments, }; }