import React from 'react'; import classNames from 'classnames'; import { PanelModel } from '../../state/PanelModel'; import { DashboardModel } from '../../state/DashboardModel'; import templateSrv from 'app/features/templating/template_srv'; import appEvents from 'app/core/app_events'; export interface DashboardRowProps { panel: PanelModel; dashboard: DashboardModel; } export class DashboardRow extends React.Component { constructor(props: DashboardRowProps) { super(props); this.state = { collapsed: this.props.panel.collapsed, }; this.props.dashboard.on('template-variable-value-updated', this.onVariableUpdated); } componentWillUnmount() { this.props.dashboard.off('template-variable-value-updated', this.onVariableUpdated); } onVariableUpdated = () => { this.forceUpdate(); }; onToggle = () => { this.props.dashboard.toggleRow(this.props.panel); this.setState((prevState: any) => { return { collapsed: !prevState.collapsed }; }); }; onUpdate = () => { this.props.dashboard.processRepeats(); this.forceUpdate(); }; onOpenSettings = () => { appEvents.emit('show-modal', { templateHtml: ``, modalClass: 'modal--narrow', model: { row: this.props.panel, onUpdated: this.onUpdate, }, }); }; onDelete = () => { appEvents.emit('confirm-modal', { title: 'Delete Row', text: 'Are you sure you want to remove this row and all its panels?', altActionText: 'Delete row only', icon: 'fa-trash', onConfirm: () => { this.props.dashboard.removeRow(this.props.panel, true); }, onAltAction: () => { this.props.dashboard.removeRow(this.props.panel, false); }, }); }; render() { const classes = classNames({ 'dashboard-row': true, 'dashboard-row--collapsed': this.state.collapsed, }); const chevronClass = classNames({ fa: true, 'fa-chevron-down': !this.state.collapsed, 'fa-chevron-right': this.state.collapsed, }); const title = templateSrv.replaceWithText(this.props.panel.title, this.props.panel.scopedVars); const count = this.props.panel.panels ? this.props.panel.panels.length : 0; const panels = count === 1 ? 'panel' : 'panels'; const canEdit = this.props.dashboard.meta.canEdit === true; return (
{title} ({count} {panels}) {canEdit && (
)} {this.state.collapsed === true && (
 
)} {canEdit &&
}
); } }