summaryrefslogtreecommitdiff
path: root/frontend/src/components/QuickAccessVisibleState.tsx
blob: 09babe847fc0bc8f002bcbc5196c1b60eccdecf2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import { FC, createContext, useContext, useState } from 'react';

const QuickAccessVisibleState = createContext<boolean>(true);

export const useQuickAccessVisible = () => useContext(QuickAccessVisibleState);

export const QuickAccessVisibleStateProvider: FC<{ initial: boolean; setter: ((val: boolean) => {}[]) | never[] }> = ({
  children,
  initial,
  setter,
}) => {
  const [visible, setVisible] = useState<boolean>(initial);
  const [prev, setPrev] = useState<boolean>(initial);
  // hack to use an array as a "pointer" to pass the setter up the tree
  setter[0] = setVisible;
  if (initial != prev) {
    setPrev(initial);
    setVisible(initial);
  }
  return <QuickAccessVisibleState.Provider value={visible}>{children}</QuickAccessVisibleState.Provider>;
};