All files / src/hooks useLocalTabState.ts

66.66% Statements 12/18
100% Branches 2/2
50% Functions 4/8
66.66% Lines 10/15

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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    33x 33x 33x 33x 33x 33x       4936x 4936x         16x                             4936x    
import { useLocalStorage } from "usehooks-ts";
 
export enum LocalTabStateEnum {
  Closed = "CLOSED",
  Open = "OPEN",
  UnSaved = "UNSAVED",
  Locked = "LOCKED",
  Root = "ROOT",
}
 
export function useLocalTabState(flowsheetId: string) {
  const LOCAL_KEY = `flowsheetTabStates_${flowsheetId}`;
  const [tabMap, setTabMap] = useLocalStorage<
    Record<string, LocalTabStateEnum>
  >(LOCAL_KEY, {});
 
  function updateTab(id: string, state: LocalTabStateEnum) {
    setTabMap((prev) => ({ ...prev, [id]: state }));
  }
 
  function hideTab(id: string) {
    setTabMap((prev) => ({ ...prev, [id]: LocalTabStateEnum.Closed }));
  }
 
  function removeTab(id: string) {
    setTabMap((prev) => {
      const copy = { ...prev };
      delete copy[id];
      return copy;
    });
  }
 
  return { tabMap, updateTab, hideTab, removeTab };
}