@future-widget-lab/react-context-provider
Version:
A helper for creating React providers with an associated custom hook.
47 lines (46 loc) • 1.66 kB
TypeScript
import type { FC } from 'react';
import * as React from 'react';
export type CreateContextProviderOptions<TContext, TProps = unknown> = {
/**
* @description
* Use this to indicate the name which will be used to identify this context provider.
*
* @example
* const { ContextProvider: CartProvider, hook: useCart } = createContextProvider({
* name: "cart",
* // ...
* });
*
* // The provider will be identified as `cart-context-provider` in the React component tree.
*/
name: string;
/**
* @description
* Use this to generate the state that will be shared using this context provider.
*
* @example
* const { ContextProvider: CounterProvider, hook: useCounter } = createContextProvider({
* name: "counter",
* useGetState: () => {
* const [count, setCount] = React.useState(0);
*
* const increment = () => setCount((prev) => prev + 1);
*
* const decrement = () => setCount((prev) => prev - 1);
*
* const reset = () => setCount(0);
*
* return { count, increment, decrement, reset };
* }
* });
*/
useGetState: (props: TProps) => TContext;
};
type ChildrenOrRenderPropChildren<TData> = React.ReactNode | Array<React.ReactNode> | ((props: TData) => React.ReactNode | Array<React.ReactNode>);
export declare const createContextProvider: <TContext, TProps = unknown>(options: CreateContextProviderOptions<TContext, TProps>) => {
ContextProvider: FC<TProps & {
children: ChildrenOrRenderPropChildren<TContext>;
}>;
hook: () => NonNullable<TContext>;
};
export {};