UNPKG

@yamada-ui/use-controllable-state

Version:

Yamada UI useControllableState custom hook

37 lines (36 loc) 1.05 kB
"use client" // src/index.ts import { isNull, isUndefined, runIfFunc, useCallbackRef } from "@yamada-ui/utils"; import { useState } from "react"; function useControllableState({ defaultValue: defaultValueProp, value, onChange: onChangeProp, onUpdate: onUpdateProp = (prev, next) => prev !== next }) { const onChange = useCallbackRef(onChangeProp); const onUpdate = useCallbackRef(onUpdateProp); const [defaultValue, setDefaultValue] = useState(defaultValueProp); const controlled = value !== void 0; const resolvedValue = controlled ? value : defaultValue; const setValue = useCallbackRef( (next) => { const nextValue = runIfFunc(next, resolvedValue); if (!onUpdate(resolvedValue, nextValue)) return; if (!controlled || isUndefined(nextValue) || isNull(nextValue)) setDefaultValue(nextValue); onChange(nextValue); }, [controlled, resolvedValue, onChange, onUpdate] ); return [resolvedValue, setValue]; } export { useControllableState }; //# sourceMappingURL=index.mjs.map