@mantine/hooks
Version:
A collection of 50+ hooks for state and UI management
1 lines • 1.9 kB
Source Map (JSON)
{"version":3,"file":"use-uncontrolled.cjs","names":[],"sources":["../../src/use-uncontrolled/use-uncontrolled.ts"],"sourcesContent":["import { useState } from 'react';\n\nexport interface UseUncontrolledOptions<T> {\n /** Value for controlled state */\n value?: T;\n\n /** Initial value for uncontrolled state */\n defaultValue?: T;\n\n /** Final value for uncontrolled state when value and defaultValue are not provided */\n finalValue?: T;\n\n /** Controlled state onChange handler */\n onChange?: (value: T, ...payload: any[]) => void;\n}\n\nexport type UseUncontrolledReturnValue<T> = [\n /** Current value */\n T,\n\n /** Handler to update the state, passes `value` and `payload` to `onChange` */\n (value: T, ...payload: any[]) => void,\n\n /** True if the state is controlled, false if uncontrolled */\n boolean,\n];\n\nexport function useUncontrolled<T>({\n value,\n defaultValue,\n finalValue,\n onChange = () => {},\n}: UseUncontrolledOptions<T>): UseUncontrolledReturnValue<T> {\n const [uncontrolledValue, setUncontrolledValue] = useState(\n defaultValue !== undefined ? defaultValue : finalValue\n );\n\n const handleUncontrolledChange = (val: T, ...payload: any[]) => {\n setUncontrolledValue(val);\n onChange?.(val, ...payload);\n };\n\n if (value !== undefined) {\n return [value as T, onChange, true];\n }\n\n return [uncontrolledValue as T, handleUncontrolledChange, false];\n}\n\nexport namespace useUncontrolled {\n export type Options<T> = UseUncontrolledOptions<T>;\n export type ReturnValue<T> = UseUncontrolledReturnValue<T>;\n}\n"],"mappings":";;;AA2BA,SAAgB,gBAAmB,EACjC,OACA,cACA,YACA,iBAAiB,MAC0C;CAC3D,MAAM,CAAC,mBAAmB,yBAAA,GAAA,MAAA,UACxB,iBAAiB,KAAA,IAAY,eAAe,WAC7C;CAED,MAAM,4BAA4B,KAAQ,GAAG,YAAmB;AAC9D,uBAAqB,IAAI;AACzB,aAAW,KAAK,GAAG,QAAQ;;AAG7B,KAAI,UAAU,KAAA,EACZ,QAAO;EAAC;EAAY;EAAU;EAAK;AAGrC,QAAO;EAAC;EAAwB;EAA0B;EAAM"}