Spaces:
Running
Running
| 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, | |
| }; | |
| } | |