UNPKG

@yamada-ui/use-controllable-state

Version:

Yamada UI useControllableState custom hook

1 lines 2.56 kB
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { Dispatch, SetStateAction } from \"react\"\nimport {\n isNull,\n isUndefined,\n runIfFunc,\n useCallbackRef,\n} from \"@yamada-ui/utils\"\nimport { useState } from \"react\"\n\ninterface UseControllableStateMethods<Y> {\n onChange?: (value: Y) => void\n onUpdate?: (prev: Y, next: Y) => boolean\n}\n\nexport interface UseControllableStateProps<Y>\n extends UseControllableStateMethods<Y> {\n defaultValue?: (() => Y) | Y\n value?: Y\n}\n\nexport function useControllableState<Y>(\n props: {\n value: Y\n defaultValue?: (() => Y) | Y\n } & UseControllableStateMethods<Y>,\n): [Y, Dispatch<SetStateAction<Y>>]\n\nexport function useControllableState<Y>(\n props: {\n defaultValue: (() => Y) | Y\n value?: Y\n } & UseControllableStateMethods<Y>,\n): [Y, Dispatch<SetStateAction<Y>>]\n\nexport function useControllableState<Y>(\n props: UseControllableStateProps<Y>,\n): [Y, Dispatch<SetStateAction<Y>>]\n\nexport function useControllableState<Y>({\n defaultValue: defaultValueProp,\n value,\n onChange: onChangeProp,\n onUpdate: onUpdateProp = (prev, next) => prev !== next,\n}: UseControllableStateProps<Y>) {\n const onChange = useCallbackRef(onChangeProp)\n const onUpdate = useCallbackRef(onUpdateProp)\n\n const [defaultValue, setDefaultValue] = useState(defaultValueProp)\n const controlled = value !== undefined\n const resolvedValue = controlled ? value : defaultValue\n\n const setValue = useCallbackRef(\n (next: SetStateAction<Y>) => {\n const nextValue = runIfFunc(next, resolvedValue as Y)\n\n if (!onUpdate(resolvedValue as Y, nextValue)) return\n\n if (!controlled || isUndefined(nextValue) || isNull(nextValue))\n setDefaultValue(nextValue)\n\n onChange(nextValue)\n },\n [controlled, resolvedValue, onChange, onUpdate],\n )\n\n return [resolvedValue, setValue]\n}\n"],"mappings":";;;AACA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,gBAAgB;AA+BlB,SAAS,qBAAwB;AAAA,EACtC,cAAc;AAAA,EACd;AAAA,EACA,UAAU;AAAA,EACV,UAAU,eAAe,CAAC,MAAM,SAAS,SAAS;AACpD,GAAiC;AAC/B,QAAM,WAAW,eAAe,YAAY;AAC5C,QAAM,WAAW,eAAe,YAAY;AAE5C,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,gBAAgB;AACjE,QAAM,aAAa,UAAU;AAC7B,QAAM,gBAAgB,aAAa,QAAQ;AAE3C,QAAM,WAAW;AAAA,IACf,CAAC,SAA4B;AAC3B,YAAM,YAAY,UAAU,MAAM,aAAkB;AAEpD,UAAI,CAAC,SAAS,eAAoB,SAAS,EAAG;AAE9C,UAAI,CAAC,cAAc,YAAY,SAAS,KAAK,OAAO,SAAS;AAC3D,wBAAgB,SAAS;AAE3B,eAAS,SAAS;AAAA,IACpB;AAAA,IACA,CAAC,YAAY,eAAe,UAAU,QAAQ;AAAA,EAChD;AAEA,SAAO,CAAC,eAAe,QAAQ;AACjC;","names":[]}