UNPKG

@adaptabletools/adaptable

Version:

Powerful AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements

30 lines (29 loc) 1.16 kB
import { useState, useRef } from 'react'; const toUpperFirst = (str) => `${str.charAt(0).toUpperCase()}${str.substring(1)}`; const isControlled = (value) => value !== undefined; const emptyFn = () => { }; const useProperty = (props, propName, defaultValue, config) => { const PropName = toUpperFirst(propName); const defaultValueFromProps = props[`default${PropName}`]; defaultValue = defaultValueFromProps === undefined ? defaultValue : defaultValueFromProps; const [stateValue, setStateProperty] = useState(defaultValue); let value = props[propName]; const controlled = isControlled(value); const onChange = config && config.onChange ? config.onChange : props[`on${PropName}Change`] || emptyFn; const setter = (value, ...args) => { if (value instanceof Function) { value = value(valueRef.current); } if (!controlled) { setStateProperty(value); } onChange(value, ...args); }; if (!controlled) { value = stateValue; } const valueRef = useRef(value); valueRef.current = value; return [value, setter]; }; export default useProperty;