import React from 'react'; import { FieldConfigSource, GrafanaTheme, PanelPlugin } from '@grafana/data'; import { DashboardModel, PanelModel } from '../../state'; import { useStyles } from '@grafana/ui'; import { css } from 'emotion'; import { selectors } from '@grafana/e2e-selectors'; import { VisualizationButton } from './VisualizationButton'; import { OptionsPaneOptions } from './OptionsPaneOptions'; import { useSelector } from 'react-redux'; import { StoreState } from 'app/types'; import { VisualizationSelectPane } from './VisualizationSelectPane'; import { usePanelLatestData } from './usePanelLatestData'; interface Props { plugin: PanelPlugin; panel: PanelModel; width: number; dashboard: DashboardModel; onFieldConfigsChange: (config: FieldConfigSource) => void; onPanelOptionsChanged: (options: any) => void; onPanelConfigChange: (configKey: string, value: any) => void; } export const OptionsPane: React.FC = ({ plugin, panel, width, onFieldConfigsChange, onPanelOptionsChanged, onPanelConfigChange, dashboard, }: Props) => { const styles = useStyles(getStyles); const isVizPickerOpen = useSelector((state: StoreState) => state.panelEditor.isVizPickerOpen); const { data } = usePanelLatestData(panel, { withTransforms: true, withFieldConfig: false }); return (
{!isVizPickerOpen && ( <>
)} {isVizPickerOpen && }
); }; const getStyles = (theme: GrafanaTheme) => { return { wrapper: css` height: 100%; width: 100%; display: flex; flex: 1 1 0; flex-direction: column; padding: ${theme.spacing.md} ${theme.spacing.sm} 0 0; `, optionsWrapper: css` flex-grow: 1; min-height: 0; `, vizButtonWrapper: css` padding: 0 0 ${theme.spacing.md} 0; `, legacyOptions: css` label: legacy-options; .panel-options-grid { display: flex; flex-direction: column; } .panel-options-group { margin-bottom: 0; } .panel-options-group__body { padding: ${theme.spacing.md} 0; } .section { display: block; margin: ${theme.spacing.md} 0; &:first-child { margin-top: 0; } } `, }; };