import React from 'react'; import { ThemeContext } from '../../themes/ThemeContext'; import { select } from '@storybook/addon-knobs'; import { getTheme } from '../../themes/index'; import { GrafanaThemeType } from '@grafana/data'; import { RenderFunction } from '../../types'; type SassThemeChangeHandler = (theme: GrafanaThemeType) => void; const ThemableStory: React.FunctionComponent<{ handleSassThemeChange: SassThemeChangeHandler }> = ({ children, handleSassThemeChange, }) => { const themeKnob = select( 'Theme', { Light: GrafanaThemeType.Light, Dark: GrafanaThemeType.Dark, }, GrafanaThemeType.Dark, 'Theme' ); handleSassThemeChange(themeKnob); return {children}; }; // Temporary solution. When we update to Storybook V5 we will be able to pass data from decorator to story // https://github.com/storybooks/storybook/issues/340#issuecomment-456013702 export const renderComponentWithTheme = (component: React.ComponentType, props: any) => { return ( {theme => { return React.createElement(component, { ...props, theme, }); }} ); }; export const withTheme = (handleSassThemeChange: SassThemeChangeHandler) => (story: RenderFunction) => ( {story()} );