antd
Version:
An enterprise-class UI design language and React components implementation
40 lines • 1.1 kB
JavaScript
import { useEffect, useRef, useState } from 'react';
import { generateColor } from '../util';
function hasValue(value) {
return value !== undefined;
}
const useColorState = (defaultStateValue, option) => {
const {
defaultValue,
value
} = option;
const prevColor = useRef(generateColor(''));
const [colorValue, _setColorValue] = useState(() => {
let mergedState;
if (hasValue(value)) {
mergedState = value;
} else if (hasValue(defaultValue)) {
mergedState = defaultValue;
} else {
mergedState = defaultStateValue;
}
const color = generateColor(mergedState || '');
prevColor.current = color;
return color;
});
const setColorValue = color => {
_setColorValue(color);
prevColor.current = color;
};
useEffect(() => {
if (hasValue(value)) {
const newColor = generateColor(value || '');
if (prevColor.current.cleared === true) {
newColor.cleared = 'controlled';
}
setColorValue(newColor);
}
}, [value]);
return [colorValue, setColorValue, prevColor];
};
export default useColorState;