summaryrefslogtreecommitdiff
path: root/frontend/src/components/QuickAccessVisibleState.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/src/components/QuickAccessVisibleState.tsx')
-rw-r--r--frontend/src/components/QuickAccessVisibleState.tsx36
1 files changed, 15 insertions, 21 deletions
diff --git a/frontend/src/components/QuickAccessVisibleState.tsx b/frontend/src/components/QuickAccessVisibleState.tsx
index 4df7e1a1..09babe84 100644
--- a/frontend/src/components/QuickAccessVisibleState.tsx
+++ b/frontend/src/components/QuickAccessVisibleState.tsx
@@ -1,27 +1,21 @@
-import { FC, createContext, useContext, useEffect, useRef, useState } from 'react';
+import { FC, createContext, useContext, useState } from 'react';
const QuickAccessVisibleState = createContext<boolean>(true);
export const useQuickAccessVisible = () => useContext(QuickAccessVisibleState);
-export const QuickAccessVisibleStateProvider: FC<{}> = ({ children }) => {
- const divRef = useRef<HTMLDivElement>(null);
- const [visible, setVisible] = useState<boolean>(false);
- useEffect(() => {
- const doc: Document | void | null = divRef?.current?.ownerDocument;
- if (!doc) return;
- setVisible(doc.visibilityState == 'visible');
- const onChange = (e: Event) => {
- setVisible(doc.visibilityState == 'visible');
- };
- doc.addEventListener('visibilitychange', onChange);
- return () => {
- doc.removeEventListener('visibilitychange', onChange);
- };
- }, [divRef]);
- return (
- <div ref={divRef}>
- <QuickAccessVisibleState.Provider value={visible}>{children}</QuickAccessVisibleState.Provider>
- </div>
- );
+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>;
};