diff --git a/packages/grafana-ui/src/components/ColorPicker/ColorPicker.story.tsx b/packages/grafana-ui/src/components/ColorPicker/ColorPicker.story.tsx index 1ee4b18d0b2..909d91c5d3f 100644 --- a/packages/grafana-ui/src/components/ColorPicker/ColorPicker.story.tsx +++ b/packages/grafana-ui/src/components/ColorPicker/ColorPicker.story.tsx @@ -1,7 +1,8 @@ import React, { FunctionComponent } from 'react'; import { storiesOf } from '@storybook/react'; import { ColorPicker } from './ColorPicker'; -import { withKnobs, text } from '@storybook/addon-knobs'; +import { SeriesColorPicker } from './SeriesColorPicker'; +import { UseState } from './NamedColorsPicker.story'; const CenteredStory: FunctionComponent<{}> = ({ children }) => { return ( @@ -21,7 +22,24 @@ const CenteredStory: FunctionComponent<{}> = ({ children }) => { const ColorPickerStories = storiesOf('UI/ColorPicker', module); ColorPickerStories.addDecorator(story => {story()}); -ColorPickerStories.addDecorator(withKnobs); ColorPickerStories.add('Color picker', () => { - return {}} />; + return {}} />; +}); +ColorPickerStories.add('Series color picker', () => { + return ( + + {(selectedColor, updateSelectedColor) => { + return ( + {}} + color={selectedColor} + onChange={color => updateSelectedColor(color)} + > +
Open color picker
+
+ ); + }} +
+ ); }); diff --git a/packages/grafana-ui/src/components/ColorPicker/ColorPickerPopover.story.tsx b/packages/grafana-ui/src/components/ColorPicker/ColorPickerPopover.story.tsx index cfbbd6f645a..a74cbaec889 100644 --- a/packages/grafana-ui/src/components/ColorPicker/ColorPickerPopover.story.tsx +++ b/packages/grafana-ui/src/components/ColorPicker/ColorPickerPopover.story.tsx @@ -35,7 +35,7 @@ storiesOf('UI/ColorPickerPopover', module) return ( { + onChange={color => { console.log(color); }} theme={selectedTheme || undefined} diff --git a/packages/grafana-ui/src/components/ColorPicker/NamedColorsPicker.story.tsx b/packages/grafana-ui/src/components/ColorPicker/NamedColorsPicker.story.tsx index 3d51f4b0347..3d90f88bd26 100644 --- a/packages/grafana-ui/src/components/ColorPicker/NamedColorsPicker.story.tsx +++ b/packages/grafana-ui/src/components/ColorPicker/NamedColorsPicker.story.tsx @@ -1,7 +1,7 @@ import React, { FunctionComponent } from 'react'; import { storiesOf } from '@storybook/react'; import NamedColorsPicker from './NamedColorsPicker'; -import { Color, getColorName } from '@grafana/ui/src/utils/colorsPalette'; +import { getColorName } from '@grafana/ui/src/utils/colorsPalette'; import { withKnobs, select } from '@storybook/addon-knobs'; const CenteredStory: FunctionComponent<{}> = ({ children }) => { @@ -24,16 +24,18 @@ interface StateHolderProps { children: (currentState: T, updateState: (nextState: T) => void) => JSX.Element; } -class UseState extends React.Component, { value: T }> { +export class UseState extends React.Component, { value: T }> { constructor(props: StateHolderProps) { super(props); this.state = { value: props.initialState, }; } + static getDerivedStateFromProps(props: StateHolderProps<{}>, state: { value: {} }) { return { value: props.initialState, + ...state }; } @@ -62,14 +64,10 @@ storiesOf('UI/NamedColorPicker', module) return ( {(selectedColor, updateSelectedColor) => { - console.log(selectedColor); return ( { - // @ts-ignore - updateSelectedColor((color).name); - }} + color={selectedColor} + onChange={updateSelectedColor} /> ); }} @@ -82,8 +80,8 @@ storiesOf('UI/NamedColorPicker', module) {(selectedColor, updateSelectedColor) => { return ( updateSelectedColor(color.variants.dark)} + color={getColorName(selectedColor)} + onChange={updateSelectedColor} /> ); }} diff --git a/packages/grafana-ui/src/components/ColorPicker/NamedColorsPicker.tsx b/packages/grafana-ui/src/components/ColorPicker/NamedColorsPicker.tsx index f7cd229dca9..b91e7c901e7 100644 --- a/packages/grafana-ui/src/components/ColorPicker/NamedColorsPicker.tsx +++ b/packages/grafana-ui/src/components/ColorPicker/NamedColorsPicker.tsx @@ -1,6 +1,7 @@ import React, { FunctionComponent } from 'react'; import { find, upperFirst } from 'lodash'; -import { Color, ColorsPalete, ColorDefinition } from '../../utils/colorsPalette'; +import { Color, ColorsPalete, ColorDefinition, getColorForTheme } from '../../utils/colorsPalette'; +import { Themeable } from '../../types'; type ColorChangeHandler = (color: ColorDefinition) => void; @@ -10,13 +11,15 @@ enum ColorSwatchVariant { } interface ColorSwatchProps extends React.DOMAttributes { - color: ColorDefinition; + color: string; + label?: string; variant?: ColorSwatchVariant; isSelected?: boolean; } const ColorSwatch: FunctionComponent = ({ color, + label, variant = ColorSwatchVariant.Small, isSelected, ...otherProps @@ -27,10 +30,10 @@ const ColorSwatch: FunctionComponent = ({ width: swatchSize, height: swatchSize, borderRadius: '50%', - background: `${color.variants.dark}`, + background: `${color}`, marginRight: isSmall ? '0px' : '8px', - boxShadow: isSelected ? `inset 0 0 0 2px ${color.variants.dark}, inset 0 0 0 4px white` : 'none', - cursor: isSelected ? 'default' : 'pointer' + boxShadow: isSelected ? `inset 0 0 0 2px ${color}, inset 0 0 0 4px white` : 'none', + cursor: isSelected ? 'default' : 'pointer', }; return ( @@ -42,32 +45,35 @@ const ColorSwatch: FunctionComponent = ({ {...otherProps} >
- {variant === ColorSwatchVariant.Large && {upperFirst(color.hue)}} + {variant === ColorSwatchVariant.Large && {label}}
); }; -interface ColorsGroupProps { +interface ColorsGroupProps extends Themeable { colors: ColorDefinition[]; selectedColor?: Color; onColorSelect: ColorChangeHandler; key?: string; } + const ColorsGroup: FunctionComponent = ({ colors, selectedColor, onColorSelect, + theme, ...otherProps }) => { const primaryColor = find(colors, color => !!color.isPrimary); return ( -
+
{primaryColor && ( onColorSelect(primaryColor)} /> )} @@ -77,30 +83,39 @@ const ColorsGroup: FunctionComponent = ({ marginTop: '8px', }} > - {colors.map(color => !color.isPrimary && ( -
- onColorSelect(color)} - /> -
- ))} + {colors.map( + color => + !color.isPrimary && ( +
+ onColorSelect(color)} + /> +
+ ) + )}
); }; -interface NamedColorsPickerProps { - selectedColor?: Color; - onChange: ColorChangeHandler; +interface NamedColorsPickerProps extends Themeable { + color?: Color; + onChange: (colorName: string) => void; } -const NamedColorsPicker = ({ selectedColor, onChange }: NamedColorsPickerProps) => { - const swatches: JSX.Element[] = []; +const NamedColorsPicker = ({ color, onChange, theme }: NamedColorsPickerProps) => { + const swatches: JSX.Element[] = []; ColorsPalete.forEach((colors, hue) => { swatches.push( - + onChange(color.name)} + /> ); });