diff --git a/packages/grafana-data/src/field/overrides/processors.ts b/packages/grafana-data/src/field/overrides/processors.ts index 8a3340a99d6..7d8ef2cae78 100644 --- a/packages/grafana-data/src/field/overrides/processors.ts +++ b/packages/grafana-data/src/field/overrides/processors.ts @@ -109,5 +109,7 @@ export const booleanOverrideProcessor = ( }; export interface ColorFieldConfigSettings { - enableNamedColors?: boolean; + allowUndefined?: boolean; + textWhenUndefined?: string; // Pick Color + disableNamedColors?: boolean; } diff --git a/packages/grafana-ui/src/components/OptionsUI/color.tsx b/packages/grafana-ui/src/components/OptionsUI/color.tsx index cba8213f52c..178ccef8812 100644 --- a/packages/grafana-ui/src/components/OptionsUI/color.tsx +++ b/packages/grafana-ui/src/components/OptionsUI/color.tsx @@ -1,11 +1,80 @@ import React from 'react'; -import { FieldConfigEditorProps, ColorFieldConfigSettings } from '@grafana/data'; -/* import { ColorPicker } from '../ColorPicker/ColorPicker'; */ +import { + FieldConfigEditorProps, + ColorFieldConfigSettings, + GrafanaTheme, + getColorFromHexRgbOrName, +} from '@grafana/data'; +import { ColorPicker } from '../ColorPicker/ColorPicker'; +import { getTheme, stylesFactory } from '../../themes'; +import { Icon } from '../Icon/Icon'; +import { css } from 'emotion'; +import { ColorPickerTrigger } from '../ColorPicker/ColorPickerTrigger'; export const ColorValueEditor: React.FC> = ({ value, onChange, item, }) => { - return
todo
; + const { settings } = item; + const theme = getTheme(); + const styles = getStyles(theme); + + const color = value || (item.defaultValue as string) || theme.colors.panelBg; + + return ( + + {({ ref, showColorPicker, hideColorPicker }) => { + return ( +
+
+ +
+
+ {value ?? settings.textWhenUndefined ?? 'Pick Color'} +
+ {value && settings.allowUndefined && ( + onChange(undefined)} /> + )} +
+ ); + }} +
+ ); }; + +const getStyles = stylesFactory((theme: GrafanaTheme) => { + return { + spot: css` + color: ${theme.colors.text}; + background: ${theme.colors.formInputBg}; + padding: 3px; + border: 1px solid ${theme.colors.formInputBorder}; + display: flex; + flex-direction: row; + align-items: center; + &:hover { + border: 1px solid ${theme.colors.formInputBorderHover}; + } + `, + colorPicker: css` + padding: 0 ${theme.spacing.sm}; + `, + colorText: css` + cursor: pointer; + flex-grow: 1; + `, + trashIcon: css` + cursor: pointer; + color: ${theme.colors.textWeak}; + &:hover { + color: ${theme.colors.text}; + } + `, + }; +});