import React, { FC } from 'react'; import { css } from '@emotion/css'; import { GrafanaTheme, PanelPlugin } from '@grafana/data'; import { ToolbarButton, ButtonGroup, useStyles } from '@grafana/ui'; import { StoreState } from 'app/types'; import { connect, MapStateToProps, MapDispatchToProps } from 'react-redux'; import { setPanelEditorUIState, toggleVizPicker } from './state/reducers'; import { selectors } from '@grafana/e2e-selectors'; import { PanelModel } from '../../state'; interface OwnProps { panel: PanelModel; } interface ConnectedProps { plugin?: PanelPlugin; isVizPickerOpen: boolean; isPanelOptionsVisible: boolean; } interface DispatchProps { toggleVizPicker: typeof toggleVizPicker; setPanelEditorUIState: typeof setPanelEditorUIState; } type Props = OwnProps & ConnectedProps & DispatchProps; export const VisualizationButtonUnconnected: FC = ({ plugin, toggleVizPicker, isPanelOptionsVisible, isVizPickerOpen, setPanelEditorUIState, }) => { const styles = useStyles(getStyles); const onToggleOpen = () => { toggleVizPicker(!isVizPickerOpen); }; const onToggleOptionsPane = () => { setPanelEditorUIState({ isPanelOptionsVisible: !isPanelOptionsVisible }); }; if (!plugin) { return null; } return (
{plugin.meta.name}
); }; VisualizationButtonUnconnected.displayName = 'VisualizationTabUnconnected'; const getStyles = (theme: GrafanaTheme) => { return { wrapper: css` display: flex; flex-direction: column; `, vizButton: css` text-align: left; `, }; }; const mapStateToProps: MapStateToProps = (state, props) => { return { plugin: state.plugins.panels[props.panel.type], isPanelOptionsVisible: state.panelEditor.ui.isPanelOptionsVisible, isVizPickerOpen: state.panelEditor.isVizPickerOpen, }; }; const mapDispatchToProps: MapDispatchToProps = { toggleVizPicker, setPanelEditorUIState, }; export const VisualizationButton = connect(mapStateToProps, mapDispatchToProps, undefined, { forwardRef: true })( VisualizationButtonUnconnected );