import React, { useCallback, RefForwardingComponent, PropsWithChildren, useMemo } from 'react' import classnames from 'classnames' import { SketchPicker, ColorResult } from 'react-color' import { Popover } from 'antd' const styles = require('./ColorPicker.less') const defaultTheme = require('assets/json/echartsThemes/default.project.json') const defaultThemeColors = defaultTheme.theme.color interface IColorPickerProps { value?: string | [number, number, number, number] size?: 'default' | 'small' | 'large' preset?: boolean disableAlpha?: boolean rawValue?: boolean className?: string onChange?: (value: string | [number, number, number, number]) => void } const ColorPicker: RefForwardingComponent< Popover, PropsWithChildren > = (props, ref) => { const { value, size, preset, disableAlpha, rawValue, className, onChange } = props const cls = classnames({ [styles.picker]: true, [className]: !!className, [`${styles.picker}-sm`]: size && size === 'small', [`${styles.picker}-lg`]: size && size === 'large' }) const colorChange = useCallback( (e: ColorResult) => { const { r, g, b, a } = e.rgb onChange(rawValue ? [r, g, b, a] : `rgba(${r}, ${g}, ${b}, ${a})`) }, [onChange, rawValue] ) const color = useMemo( (): string => rawValue && value ? `rgba(${(value as [number, number, number, number]).join()})` : (value as string), [value, rawValue] ) return ( } trigger="click" placement="right" > {props.children || (
)}
) } export type ColorPickerProps = IColorPickerProps export default React.forwardRef(ColorPicker)