Spaces:
Running
Running
File size: 1,875 Bytes
5f1da59 e907a44 30b1aef 5f1da59 30b1aef 5f1da59 30b1aef e907a44 30b1aef 7ac3a44 5f1da59 30b1aef 5f1da59 30b1aef 5f1da59 e907a44 5f1da59 7ac3a44 5f1da59 e907a44 5f1da59 e907a44 5f1da59 7ac3a44 5f1da59 e907a44 5f1da59 7ac3a44 5f1da59 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | import { useCallback, useEffect, useState } from "react";
const STORAGE_KEY = "rag_lab_session";
const EMPTY_SESSION = { docId: null, docIds: [], configId: null, filename: null, mode: null };
function loadInitialSession() {
try {
const raw = localStorage.getItem(STORAGE_KEY);
if (!raw) return EMPTY_SESSION;
const parsed = JSON.parse(raw);
return {
docId: parsed?.docId || null,
docIds: Array.isArray(parsed?.docIds) ? parsed.docIds.map((id) => String(id)) : [],
configId: parsed?.configId || null,
filename: parsed?.filename || null,
mode: parsed?.mode || null,
};
} catch {
return EMPTY_SESSION;
}
}
export function useSession() {
const [session, setSession] = useState(loadInitialSession);
useEffect(() => {
localStorage.setItem(STORAGE_KEY, JSON.stringify(session));
}, [session]);
const setDocId = useCallback((docId) => {
setSession((prev) => ({ ...prev, docId }));
}, []);
const setConfigId = useCallback((configId) => {
setSession((prev) => ({ ...prev, configId }));
}, []);
const setDocIds = useCallback((docIds) => {
const normalized = Array.isArray(docIds) ? docIds.map((id) => String(id)) : [];
setSession((prev) => ({ ...prev, docIds: normalized }));
}, []);
const setFilename = useCallback((filename) => {
setSession((prev) => ({ ...prev, filename }));
}, []);
const setMode = useCallback((mode) => {
setSession((prev) => ({ ...prev, mode }));
}, []);
const clear = useCallback(() => {
setSession({ docId: null, docIds: [], configId: null, filename: null, mode: null });
}, []);
return {
docId: session.docId,
docIds: session.docIds,
configId: session.configId,
filename: session.filename,
mode: session.mode,
setDocId,
setDocIds,
setConfigId,
setFilename,
setMode,
clear,
};
}
|