forked from Expensify/App
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathuseMouseContext.tsx
36 lines (27 loc) · 1.08 KB
/
useMouseContext.tsx
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
36
import type {ReactNode} from 'react';
import React, {createContext, useContext, useMemo, useState} from 'react';
type MouseContextProps = {
isMouseDownOnInput: boolean;
setMouseDown: () => void;
setMouseUp: () => void;
};
// Create a context with default values and handlers
const MouseContext = createContext<MouseContextProps>({
isMouseDownOnInput: false,
setMouseDown: () => {},
setMouseUp: () => {},
});
type MouseProviderProps = {
children: ReactNode;
};
// Context provider component
function MouseProvider({children}: MouseProviderProps) {
const [isMouseDownOnInput, setIsMouseDownOnInput] = useState(false);
const setMouseDown = () => setIsMouseDownOnInput(true);
const setMouseUp = () => setIsMouseDownOnInput(false);
const value = useMemo(() => ({isMouseDownOnInput, setMouseDown, setMouseUp}), [isMouseDownOnInput]);
return <MouseContext.Provider value={value}>{children}</MouseContext.Provider>;
}
// Custom hook to use the mouse context
const useMouseContext = () => useContext(MouseContext);
export {MouseProvider, useMouseContext};