|
|
@@ -1,9 +1,9 @@
|
|
|
-import React from 'react';
|
|
|
-import classNames from 'classnames';
|
|
|
-import { PanelModel } from '../panel_model';
|
|
|
-import { PanelContainer } from './PanelContainer';
|
|
|
-import templateSrv from 'app/features/templating/template_srv';
|
|
|
-import appEvents from 'app/core/app_events';
|
|
|
+import React from "react";
|
|
|
+import classNames from "classnames";
|
|
|
+import { PanelModel } from "../panel_model";
|
|
|
+import { PanelContainer } from "./PanelContainer";
|
|
|
+import templateSrv from "app/features/templating/template_srv";
|
|
|
+import appEvents from "app/core/app_events";
|
|
|
|
|
|
export interface DashboardRowProps {
|
|
|
panel: PanelModel;
|
|
|
@@ -18,7 +18,7 @@ export class DashboardRow extends React.Component<DashboardRowProps, any> {
|
|
|
super(props);
|
|
|
|
|
|
this.state = {
|
|
|
- collapsed: this.props.panel.collapsed,
|
|
|
+ collapsed: this.props.panel.collapsed
|
|
|
};
|
|
|
|
|
|
this.panelContainer = this.props.getPanelContainer();
|
|
|
@@ -26,6 +26,7 @@ export class DashboardRow extends React.Component<DashboardRowProps, any> {
|
|
|
|
|
|
this.toggle = this.toggle.bind(this);
|
|
|
this.openSettings = this.openSettings.bind(this);
|
|
|
+ this.delete = this.delete.bind(this);
|
|
|
}
|
|
|
|
|
|
toggle() {
|
|
|
@@ -37,59 +38,70 @@ export class DashboardRow extends React.Component<DashboardRowProps, any> {
|
|
|
}
|
|
|
|
|
|
openSettings() {
|
|
|
- appEvents.emit('show-modal', {
|
|
|
- templateHtml: `<row-options row="model.row" on-updated="model.onUpdated()" on-delete="model.onDelete()" dismiss="dismiss()"></row-options>`,
|
|
|
- modalClass: 'modal--narrow',
|
|
|
+ appEvents.emit("show-modal", {
|
|
|
+ templateHtml: `<row-options row="model.row" on-updated="model.onUpdated()" dismiss="dismiss()"></row-options>`,
|
|
|
+ modalClass: "modal--narrow",
|
|
|
model: {
|
|
|
row: this.props.panel,
|
|
|
- onUpdated: this.forceUpdate.bind(this),
|
|
|
- onDelete: this.onDelete.bind(this),
|
|
|
- },
|
|
|
+ onUpdated: this.forceUpdate.bind(this)
|
|
|
+ }
|
|
|
});
|
|
|
}
|
|
|
|
|
|
- onDelete() {
|
|
|
- let text2 = '';
|
|
|
-
|
|
|
- if (this.props.panel.panels.length) {
|
|
|
- text2 = `This will also remove the row's ${this.props.panel.panels.length} panels`;
|
|
|
- }
|
|
|
-
|
|
|
- appEvents.emit('confirm-modal', {
|
|
|
- title: 'Delete Row',
|
|
|
- text: 'Are you sure you want to remove this row?',
|
|
|
- text2: text2,
|
|
|
- icon: 'fa-trash',
|
|
|
+ delete() {
|
|
|
+ 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: () => {
|
|
|
const panelContainer = this.props.getPanelContainer();
|
|
|
const dashboard = panelContainer.getDashboard();
|
|
|
- dashboard.removePanel(this.props.panel);
|
|
|
+ dashboard.removeRow(this.props.panel, true);
|
|
|
},
|
|
|
+ onAltAction: () => {
|
|
|
+ const panelContainer = this.props.getPanelContainer();
|
|
|
+ const dashboard = panelContainer.getDashboard();
|
|
|
+ dashboard.removeRow(this.props.panel, false);
|
|
|
+ }
|
|
|
});
|
|
|
}
|
|
|
|
|
|
render() {
|
|
|
- const classes = classNames({ 'dashboard-row': true, 'dashboard-row--collapsed': this.state.collapsed });
|
|
|
+ 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,
|
|
|
+ "fa-chevron-down": !this.state.collapsed,
|
|
|
+ "fa-chevron-right": this.state.collapsed
|
|
|
});
|
|
|
|
|
|
- let title = templateSrv.replaceWithText(this.props.panel.title, this.props.panel.scopedVars);
|
|
|
- const hiddenPanels = this.props.panel.panels ? this.props.panel.panels.length : 0;
|
|
|
+ let title = templateSrv.replaceWithText(
|
|
|
+ this.props.panel.title,
|
|
|
+ this.props.panel.scopedVars
|
|
|
+ );
|
|
|
+ const hiddenPanels = this.props.panel.panels
|
|
|
+ ? this.props.panel.panels.length
|
|
|
+ : 0;
|
|
|
|
|
|
return (
|
|
|
<div className={classes}>
|
|
|
<a className="dashboard-row__title pointer" onClick={this.toggle}>
|
|
|
<i className={chevronClass} />
|
|
|
{title}
|
|
|
- <span className="dashboard-row__panel_count">({hiddenPanels} hidden panels)</span>
|
|
|
+ <span className="dashboard-row__panel_count">
|
|
|
+ ({hiddenPanels} hidden panels)
|
|
|
+ </span>
|
|
|
</a>
|
|
|
<div className="dashboard-row__actions">
|
|
|
<a className="pointer" onClick={this.openSettings}>
|
|
|
<i className="fa fa-cog" />
|
|
|
</a>
|
|
|
+ <a className="pointer" onClick={this.delete}>
|
|
|
+ <i className="fa fa-trash" />
|
|
|
+ </a>
|
|
|
</div>
|
|
|
<div className="dashboard-row__drag grid-drag-handle" />
|
|
|
</div>
|