import React from 'react'; import classNames from 'classnames'; import { PanelModel } from '../panel_model'; import { DashboardModel } from '../dashboard_model'; import { store } from 'app/store/configureStore'; import { QueriesTab } from './QueriesTab'; import { PanelPlugin, PluginExports } from 'app/types/plugins'; import { VizTypePicker } from './VizTypePicker'; import { updateLocation } from 'app/core/actions'; import CustomScrollbar from 'app/core/components/CustomScrollbar/CustomScrollbar'; interface PanelEditorProps { panel: PanelModel; dashboard: DashboardModel; panelType: string; pluginExports: PluginExports; onTypeChanged: (newType: PanelPlugin) => void; } interface PanelEditorTab { id: string; text: string; icon: string; } export class PanelEditor extends React.Component { tabs: PanelEditorTab[]; constructor(props) { super(props); this.tabs = [ { id: 'queries', text: 'Queries', icon: 'fa fa-database' }, { id: 'visualization', text: 'Visualization', icon: 'fa fa-line-chart' }, { id: 'alert', text: 'Alert', icon: 'gicon gicon-alert' }, ]; } renderQueriesTab() { return ; } renderPanelOptions() { const { pluginExports } = this.props; if (pluginExports.PanelOptions) { const PanelOptions = pluginExports.PanelOptions; return ; } else { return

Visualization has no options

; } } renderVizTab() { return (
Options
{this.renderPanelOptions()}
); } onChangeTab = (tab: PanelEditorTab) => { store.dispatch( updateLocation({ query: { tab: tab.id }, partial: true, }) ); }; onClose = () => { store.dispatch( updateLocation({ query: { tab: false, fullscreen: false, edit: false }, partial: true, }) ); }; render() { const { location } = store.getState(); const activeTab = location.query.tab || 'queries'; return (

Edit Panel

{this.tabs.map(tab => { return ; })}
{activeTab === 'queries' && this.renderQueriesTab()} {activeTab === 'visualization' && this.renderVizTab()}
); } } interface TabItemParams { tab: PanelEditorTab; activeTab: string; onClick: (tab: PanelEditorTab) => void; } function TabItem({ tab, activeTab, onClick }: TabItemParams) { const tabClasses = classNames({ 'panel-editor__aside-item': true, active: activeTab === tab.id, }); return ( onClick(tab)}> {tab.text} ); }