UNPKG

@wordpress/components

Version:
8 lines (7 loc) 1.87 kB
{ "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": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,qBAAsC;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,QAAI,yBAAS,YAAY;AAC/C,QAAM,QAAQ,WAAW,YAAY;AACrC,QAAM,2BAAuB,4BAAY,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": [] }