-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.tsx
29 lines (23 loc) · 915 Bytes
/
index.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
import React, { ComponentType, memo, useMemo } from 'react';
import IdContext from '../../IdContext';
import useResetState from '../../State/useResetState';
import State from '../State';
import StateContextProviderProps, { defaultProps } from './Props';
type StateContextProvider<T> = ComponentType<StateContextProviderProps<T>>;
export default StateContextProvider;
export { StateContextProviderProps };
/** @ignore */
export function createStateContextProvider<T>(
StateContext: IdContext<State<T>>,
): StateContextProvider<T> {
const { Provider } = StateContext;
const StateProvider: StateContextProvider<T> = ({ value, id, children, reset }) => {
const state = useResetState(value, reset);
return useMemo(
() => <Provider value={state} id={id}>{children}</Provider>,
[state, id, children],
);
};
StateProvider.defaultProps = defaultProps;
return memo(StateProvider);
}