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,
  };
}