@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
JavaScript
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;