@wordpress/components
Version:
UI components for WordPress.
8 lines (7 loc) • 1.83 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../../../src/utils/hooks/use-controlled-value.ts"],
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useCallback, useState } from '@wordpress/element';\n/**\n * Simplified and improved implementation of useControlledState.\n *\n * @param props\n * @param props.defaultValue\n * @param props.value\n * @param props.onChange\n * @return The controlled value and the value setter.\n */\nexport function useControlledValue({\n defaultValue,\n onChange,\n value: valueProp\n}) {\n const hasValue = typeof valueProp !== 'undefined';\n const initialValue = hasValue ? valueProp : defaultValue;\n const [state, setState] = useState(initialValue);\n const value = hasValue ? valueProp : state;\n const uncontrolledSetValue = useCallback((nextValue, ...args) => {\n setState(nextValue);\n onChange?.(nextValue, ...args);\n }, [onChange]);\n let setValue;\n if (hasValue && typeof onChange === 'function') {\n // Controlled mode.\n setValue = onChange;\n } else if (!hasValue && typeof onChange === 'function') {\n // Uncontrolled mode, plus forwarding to the onChange prop.\n setValue = uncontrolledSetValue;\n } else {\n // Uncontrolled mode, only update internal state.\n setValue = setState;\n }\n return [value, setValue];\n}"],
"mappings": ";AAGA,SAAS,aAAa,gBAAgB;AAU/B,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA,OAAO;AACT,GAAG;AACD,QAAM,WAAW,OAAO,cAAc;AACtC,QAAM,eAAe,WAAW,YAAY;AAC5C,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,YAAY;AAC/C,QAAM,QAAQ,WAAW,YAAY;AACrC,QAAM,uBAAuB,YAAY,CAAC,cAAc,SAAS;AAC/D,aAAS,SAAS;AAClB,eAAW,WAAW,GAAG,IAAI;AAAA,EAC/B,GAAG,CAAC,QAAQ,CAAC;AACb,MAAI;AACJ,MAAI,YAAY,OAAO,aAAa,YAAY;AAE9C,eAAW;AAAA,EACb,WAAW,CAAC,YAAY,OAAO,aAAa,YAAY;AAEtD,eAAW;AAAA,EACb,OAAO;AAEL,eAAW;AAAA,EACb;AACA,SAAO,CAAC,OAAO,QAAQ;AACzB;",
"names": []
}