diff --git a/package.json b/package.json index 199a25d0a..e3680ca22 100755 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "storybook": "start-storybook --ci --config-dir ./storybook --static-dir ./ --port 6060" }, "dependencies": { + "a-color-picker": "1.1.8", "classnames": "2.2.6", "events": "1.1.1", "hat": "0.0.3", diff --git a/src/common/ColorPicker/ColorPicker.js b/src/common/ColorPicker/ColorPicker.js index eccfd55c8..341bacb39 100644 --- a/src/common/ColorPicker/ColorPicker.js +++ b/src/common/ColorPicker/ColorPicker.js @@ -1,18 +1,43 @@ const React = require('react'); const PropTypes = require('prop-types'); +const AColorPicker = require('a-color-picker'); + +const COLOR_FORMAT = 'rgbacss'; -// TODO: impl this const ColorPicker = ({ className, value, onChange }) => { + value = AColorPicker.parseColor(value, COLOR_FORMAT); + const pickerRef = React.useRef(null); + const pickerElementRef = React.useRef(null); + React.useEffect(() => { + pickerRef.current = AColorPicker.createPicker(pickerElementRef.current, { + color: value, + showHSL: false, + showHEX: false, + showRGB: false, + showAlpha: true + }); + }, []); + React.useEffect(() => { + pickerRef.current.off('change'); + pickerRef.current.on('change', (picker, color) => { + if (typeof onChange === 'function') { + onChange(AColorPicker.parseColor(color, COLOR_FORMAT)); + } + }); + }, [onChange]); + React.useEffect(() => { + if (AColorPicker.parseColor(pickerRef.current.color, COLOR_FORMAT) !== value) { + pickerRef.current.color = value; + } + }, [value]); return ( -