// Libraries import React, { ComponentClass, PureComponent } from 'react'; // Services import { getTimeSrv } from '../time_srv'; // Components import { PanelHeader } from './PanelHeader/PanelHeader'; import { DataPanel } from './DataPanel'; // Types import { PanelModel } from '../panel_model'; import { DashboardModel } from '../dashboard_model'; import { TimeRange, PanelProps } from 'app/types'; export interface PanelChromeProps { panel: PanelModel; dashboard: DashboardModel; component: ComponentClass; withMenuOptions: any; } export interface PanelChromeState { refreshCounter: number; renderCounter: number; timeRange?: TimeRange; } export class PanelChrome extends PureComponent { constructor(props) { super(props); this.state = { refreshCounter: 0, renderCounter: 0, }; } componentDidMount() { this.props.panel.events.on('refresh', this.onRefresh); this.props.panel.events.on('render', this.onRender); this.props.dashboard.panelInitialized(this.props.panel); } componentWillUnmount() { this.props.panel.events.off('refresh', this.onRefresh); } onRefresh = () => { const timeSrv = getTimeSrv(); const timeRange = timeSrv.timeRange(); this.setState({ refreshCounter: this.state.refreshCounter + 1, timeRange: timeRange, }); }; onRender = () => { console.log('onRender'); this.setState({ renderCounter: this.state.renderCounter + 1, }); }; get isVisible() { return !this.props.dashboard.otherPanelInFullscreen(this.props.panel); } render() { const { panel, dashboard, withMenuOptions } = this.props; const { datasource, targets } = panel; const { timeRange, renderCounter, refreshCounter } = this.state; const PanelComponent = this.props.component; console.log('Panel chrome render'); return (
{({ loading, timeSeries }) => { console.log('panelcrome inner render'); return ( ); }}
); } }