| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- import React, { PureComponent } from 'react';
- import { DashboardModel } from 'app/features/dashboard/dashboard_model';
- import { PanelHeaderMenuItem, PanelHeaderMenuItemTypes } from './PanelHeaderMenuItem';
- import { store } from 'app/store/configureStore';
- import { updateLocation } from 'app/core/actions';
- import { removePanel, duplicatePanel, copyPanel, editPanelJson } from 'app/features/dashboard/utils/panel';
- import appEvents from 'app/core/app_events';
- export interface PanelHeaderMenuProps {
- panelId: number;
- dashboard: DashboardModel;
- }
- export class PanelHeaderMenu extends PureComponent<PanelHeaderMenuProps, any> {
- getPanel = () => {
- // Pass in panel as prop instead?
- const { panelId, dashboard } = this.props;
- const panelInfo = dashboard.getPanelInfoById(panelId);
- return panelInfo.panel;
- };
- onEditPanel = () => {
- store.dispatch(
- updateLocation({
- query: {
- panelId: this.props.panelId,
- edit: true,
- fullscreen: true,
- },
- })
- );
- };
- onViewPanel = () => {
- store.dispatch(
- updateLocation({
- query: {
- panelId: this.props.panelId,
- edit: false,
- fullscreen: true,
- },
- })
- );
- };
- onRemovePanel = () => {
- const { dashboard } = this.props;
- const panel = this.getPanel();
- removePanel(dashboard, panel, true);
- };
- onSharePanel = () => {
- const { dashboard } = this.props;
- const panel = this.getPanel();
- appEvents.emit('show-modal', {
- src: 'public/app/features/dashboard/partials/shareModal.html',
- model: {
- panel: panel,
- dashboard: dashboard,
- },
- });
- };
- onDuplicatePanel = () => {
- const { dashboard } = this.props;
- const panel = this.getPanel();
- duplicatePanel(dashboard, panel);
- };
- onCopyPanel = () => {
- const panel = this.getPanel();
- copyPanel(panel);
- };
- onEditPanelJson = () => {
- const { dashboard } = this.props;
- const panel = this.getPanel();
- editPanelJson(dashboard, panel);
- };
- render() {
- return (
- <div className="panel-menu-container dropdown">
- <ul className="dropdown-menu dropdown-menu--menu panel-menu" role="menu">
- <PanelHeaderMenuItem
- type={PanelHeaderMenuItemTypes.Link}
- text="View"
- iconClassName="fa fa-fw fa-eye"
- handleClick={this.onViewPanel}
- shortcut="v"
- />
- <PanelHeaderMenuItem
- type={PanelHeaderMenuItemTypes.Link}
- text="Edit"
- iconClassName="fa fa-fw fa-edit"
- handleClick={this.onEditPanel}
- shortcut="e"
- />
- <PanelHeaderMenuItem
- type={PanelHeaderMenuItemTypes.Link}
- text="Share"
- iconClassName="fa fa-fw fa-share"
- handleClick={this.onSharePanel}
- shortcut="p s"
- />
- <PanelHeaderMenuItem
- type={PanelHeaderMenuItemTypes.SubMenu}
- text="More ..."
- iconClassName="fa fa-fw fa-cube"
- handleClick={null}
- >
- <ul className="dropdown-menu dropdown-menu--menu panel-menu">
- <PanelHeaderMenuItem
- type={PanelHeaderMenuItemTypes.Link}
- text="Duplicate"
- iconClassName=""
- handleClick={this.onDuplicatePanel}
- shortcut="p d"
- />
- <PanelHeaderMenuItem type={PanelHeaderMenuItemTypes.Link} text="Copy" handleClick={this.onCopyPanel} />
- <PanelHeaderMenuItem
- type={PanelHeaderMenuItemTypes.Link}
- text="Panel JSON"
- handleClick={this.onEditPanelJson}
- />
- <PanelHeaderMenuItem type={PanelHeaderMenuItemTypes.Link} text="Export CSV" handleClick={() => {}} />
- <PanelHeaderMenuItem
- type={PanelHeaderMenuItemTypes.Link}
- text="Toggle legend"
- handleClick={() => {}}
- shortcut="p l"
- />
- </ul>
- </PanelHeaderMenuItem>
- <PanelHeaderMenuItem type={PanelHeaderMenuItemTypes.Divider} />
- <PanelHeaderMenuItem
- type={PanelHeaderMenuItemTypes.Link}
- text="Remove"
- iconClassName="fa fa-fw fa-trash"
- handleClick={this.onRemovePanel}
- shortcut="p r"
- />
- </ul>
- </div>
- );
- }
- }
|