-
Notifications
You must be signed in to change notification settings - Fork 45
/
Copy pathuseOverlayView.ts
31 lines (26 loc) · 944 Bytes
/
useOverlayView.ts
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
import { useCallback, useEffect, useRef } from 'react';
import { useOverlay } from '@/components/Overlay/OverlayContext';
export const useOverlayView = () => {
const { addOverlay, removeOverlay } = useOverlay();
const overlayIdRef = useRef<string | null>(null);
const show = useCallback((component: React.ReactNode) => {
if (overlayIdRef.current) {
removeOverlay(overlayIdRef.current);
}
overlayIdRef.current = addOverlay({ component });
}, [addOverlay, removeOverlay]);
const hide = useCallback(() => {
if (overlayIdRef.current) {
removeOverlay(overlayIdRef.current);
overlayIdRef.current = null;
}
}, [removeOverlay]);
useEffect(() => {
return () => {
if (overlayIdRef.current) {
removeOverlay(overlayIdRef.current);
}
};
}, [removeOverlay]);
return { show, hide };
};