-
Notifications
You must be signed in to change notification settings - Fork 0
/
useCurrentContext.ts
42 lines (38 loc) · 1.16 KB
/
useCurrentContext.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
32
33
34
35
36
37
38
39
40
41
42
import { MutableRefObject } from "react";
import {
FastContext,
useCurrentContext as useCurrentContextBase,
} from "react-fast-context";
import { ContextMainInterface } from "../contexts/ContextMain";
import { BaseValues } from "../types/BaseValues";
/**
* @private
*/
export interface CreateUseCurrentContextDependencies<
Values extends BaseValues,
ExtraContext extends Record<string, unknown>
> {
ContextMain: FastContext<ContextMainInterface<Values, ExtraContext>>;
}
export type UseCurrentContextReturn<
Values extends BaseValues,
ExtraContext extends Record<string, unknown>
> = Readonly<MutableRefObject<ContextMainInterface<Values, ExtraContext>>>;
/**
* @private
*/
export const createUseCurrentContext = <
Values extends BaseValues,
ExtraContext extends Record<string, unknown>
>({
ContextMain,
}: CreateUseCurrentContextDependencies<Values, ExtraContext>) => {
/**
* Use the context as a ref object, and never trigger a re-render.
*
* @returns {UseCurrentContextReturn<Values>}
*/
const useCurrentContext = (): UseCurrentContextReturn<Values, ExtraContext> =>
useCurrentContextBase(ContextMain);
return useCurrentContext;
};