PanelHeaderMenu.tsx 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. import React, { PureComponent } from 'react';
  2. import { DashboardModel } from 'app/features/dashboard/dashboard_model';
  3. import { PanelHeaderMenuItem, PanelHeaderMenuItemTypes } from './PanelHeaderMenuItem';
  4. import { store } from 'app/store/configureStore';
  5. import { updateLocation } from 'app/core/actions';
  6. import { removePanel } from 'app/features/dashboard/utils/panel';
  7. import appEvents from 'app/core/app_events';
  8. export interface PanelHeaderMenuProps {
  9. panelId: number;
  10. dashboard: DashboardModel;
  11. }
  12. export class PanelHeaderMenu extends PureComponent<PanelHeaderMenuProps, any> {
  13. getPanel = () => {
  14. // Pass in panel as prop instead?
  15. const { panelId, dashboard } = this.props;
  16. const panelInfo = dashboard.getPanelInfoById(panelId);
  17. return panelInfo.panel;
  18. };
  19. onEditPanel = () => {
  20. store.dispatch(
  21. updateLocation({
  22. query: {
  23. panelId: this.props.panelId,
  24. edit: true,
  25. fullscreen: true,
  26. },
  27. })
  28. );
  29. };
  30. onViewPanel = () => {
  31. store.dispatch(
  32. updateLocation({
  33. query: {
  34. panelId: this.props.panelId,
  35. edit: false,
  36. fullscreen: true,
  37. },
  38. })
  39. );
  40. };
  41. onRemovePanel = () => {
  42. const { dashboard } = this.props;
  43. const panel = this.getPanel();
  44. removePanel(dashboard, panel, true);
  45. };
  46. onSharePanel = () => {
  47. const { dashboard } = this.props;
  48. const panel = this.getPanel();
  49. appEvents.emit('show-modal', {
  50. src: 'public/app/features/dashboard/partials/shareModal.html',
  51. model: {
  52. panel: panel,
  53. dashboard: dashboard,
  54. },
  55. });
  56. };
  57. render() {
  58. return (
  59. <div className="panel-menu-container dropdown">
  60. <ul className="dropdown-menu dropdown-menu--menu panel-menu" role="menu">
  61. <PanelHeaderMenuItem
  62. type={PanelHeaderMenuItemTypes.Link}
  63. text="View"
  64. iconClassName="fa fa-fw fa-eye"
  65. handleClick={this.onViewPanel}
  66. shortcut="v"
  67. />
  68. <PanelHeaderMenuItem
  69. type={PanelHeaderMenuItemTypes.Link}
  70. text="Edit"
  71. iconClassName="fa fa-fw fa-edit"
  72. handleClick={this.onEditPanel}
  73. shortcut="e"
  74. />
  75. <PanelHeaderMenuItem
  76. type={PanelHeaderMenuItemTypes.Link}
  77. text="Share"
  78. iconClassName="fa fa-fw fa-share"
  79. handleClick={this.onSharePanel}
  80. shortcut="p s"
  81. />
  82. <PanelHeaderMenuItem
  83. type={PanelHeaderMenuItemTypes.SubMenu}
  84. text="More ..."
  85. iconClassName="fa fa-fw fa-cube"
  86. handleClick={() => {}}
  87. >
  88. <ul className="dropdown-menu dropdown-menu--menu panel-menu">
  89. <PanelHeaderMenuItem
  90. type={PanelHeaderMenuItemTypes.Link}
  91. text="Duplicate"
  92. iconClassName=""
  93. handleClick={() => {}}
  94. shortcut="p d"
  95. />
  96. <PanelHeaderMenuItem type={PanelHeaderMenuItemTypes.Link} text="Copy" handleClick={() => {}} />
  97. <PanelHeaderMenuItem type={PanelHeaderMenuItemTypes.Link} text="Panel JSON" handleClick={() => {}} />
  98. <PanelHeaderMenuItem type={PanelHeaderMenuItemTypes.Link} text="Export CSV" handleClick={() => {}} />
  99. <PanelHeaderMenuItem
  100. type={PanelHeaderMenuItemTypes.Link}
  101. text="Toggle legend"
  102. handleClick={() => {}}
  103. shortcut="p l"
  104. />
  105. </ul>
  106. </PanelHeaderMenuItem>
  107. <PanelHeaderMenuItem type={PanelHeaderMenuItemTypes.Divider} />
  108. <PanelHeaderMenuItem
  109. type={PanelHeaderMenuItemTypes.Link}
  110. text="Remove"
  111. iconClassName="fa fa-fw fa-trash"
  112. handleClick={this.onRemovePanel}
  113. shortcut="p r"
  114. />
  115. </ul>
  116. </div>
  117. );
  118. }
  119. }