@leancodepl/utils
Version:
Common utility functions and React hooks for web applications
53 lines • 1.64 kB
TypeScript
import { Dispatch, ReactNode, SetStateAction } from 'react';
type ValueContextData<T> = [T | undefined, Dispatch<SetStateAction<T | undefined>>];
type ProviderProps<T> = {
children?: ReactNode;
initialValue?: T;
};
/**
* Creates a React context hook for managing optional state values with Provider and setter utilities.
* Returns a hook with attached Provider component and set function for declarative value management.
*
* @returns Hook function with attached Provider component and set function
* @example
* ```typescript
* import { mkValueContext } from "@leancodepl/utils";
*
* const useTheme = mkValueContext<string>();
*
* function App() {
* return (
* <useTheme.Provider initialValue="dark">
* <ThemeConsumer />
* </useTheme.Provider>
* );
* }
*
* function ThemeConsumer() {
* const [theme] = useTheme();
* return <div>Current theme: {theme}</div>;
* }
* ```
* @example
* ```typescript
* // Using set to declaratively set context value
* const useActiveUser = mkValueContext<string>();
*
* function UserProfile({ userId }: { userId: string }) {
* useActiveUser.set(userId); // Sets value on mount, clears on unmount
* return <div>Profile content</div>;
* }
*
* function UserBadge() {
* const [activeUserId] = useActiveUser();
* return <div>Active user: {activeUserId}</div>;
* }
* ```
*/
export declare function mkValueContext<T>(): {
(): ValueContextData<T>;
Provider({ children, initialValue }: ProviderProps<T>): import("react/jsx-runtime").JSX.Element;
set(value: T | undefined): void;
};
export {};
//# sourceMappingURL=valueContext.d.ts.map