All files / src/hooks useLocalTabState.ts

70.96% Statements 22/31
100% Branches 5/5
60% Functions 3/5
78.26% Lines 18/23

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    76x 76x 76x 76x 76x 76x     15945x 15945x 15945x   15945x   15945x 72x 16107x   15945x   16107x   15945x           16107x   17265x    
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 };
}