UNPKG

@wordpress/components

Version:
47 lines (45 loc) 1.35 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useControlledValue = useControlledValue; var _element = require("@wordpress/element"); /** * WordPress dependencies */ /** * Simplified and improved implementation of useControlledState. * * @param props * @param props.defaultValue * @param props.value * @param props.onChange * @return The controlled value and the value setter. */ function useControlledValue({ defaultValue, onChange, value: valueProp }) { const hasValue = typeof valueProp !== 'undefined'; const initialValue = hasValue ? valueProp : defaultValue; const [state, setState] = (0, _element.useState)(initialValue); const value = hasValue ? valueProp : state; const uncontrolledSetValue = (0, _element.useCallback)((nextValue, ...args) => { setState(nextValue); onChange?.(nextValue, ...args); }, [onChange]); let setValue; if (hasValue && typeof onChange === 'function') { // Controlled mode. setValue = onChange; } else if (!hasValue && typeof onChange === 'function') { // Uncontrolled mode, plus forwarding to the onChange prop. setValue = uncontrolledSetValue; } else { // Uncontrolled mode, only update internal state. setValue = setState; } return [value, setValue]; } //# sourceMappingURL=use-controlled-value.js.map