esfiles / frontend /src /hooks /useCorpusLoader.ts
Besjon Cifliku
feat: initial project setup
db764ae
import { useState } from "react";
import { api, getErrorMessage } from "../api";
/**
* Shared hook for loading corpus text from the engine and parsing it into documents.
* Used by both TrainingPanel and Word2VecPanel.
*/
export function useCorpusLoader() {
const [corpusText, setCorpusText] = useState("");
const [loading, setLoading] = useState(false);
const [error, setError] = useState("");
function parseCorpus(): string[] {
return corpusText
.split(/\n{2,}/)
.map((t) => t.trim())
.filter((t) => t.length > 20);
}
async function loadFromEngine() {
setLoading(true);
setError("");
try {
const res = await api.getCorpusTexts();
if (res.documents.length === 0) {
setError("No documents loaded in the engine. Load a dataset first.");
return;
}
setCorpusText(
res.documents.map((d: { doc_id: string; text: string }) => d.text).join("\n\n")
);
} catch (e) {
setError(getErrorMessage(e));
} finally {
setLoading(false);
}
}
return {
corpusText,
setCorpusText,
loading,
error,
setError,
parseCorpus,
loadFromEngine,
};
}