PanelHeaderMenu.tsx 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import React, { PureComponent } from 'react';
  2. import { DashboardModel } from 'app/features/dashboard/dashboard_model';
  3. import { PanelModel } from 'app/features/dashboard/panel_model';
  4. import { PanelHeaderMenuItem } from './PanelHeaderMenuItem';
  5. import { getPanelMenu } from 'app/features/dashboard/utils/getPanelMenu';
  6. import { PanelMenuItem } from '@grafana/ui';
  7. export interface Props {
  8. panel: PanelModel;
  9. dashboard: DashboardModel;
  10. }
  11. export class PanelHeaderMenu extends PureComponent<Props> {
  12. renderItems = (menu: PanelMenuItem[], isSubMenu = false) => {
  13. return (
  14. <ul className="dropdown-menu dropdown-menu--menu panel-menu" role={isSubMenu ? '' : 'menu'}>
  15. {menu.map((menuItem, idx: number) => {
  16. return (
  17. <PanelHeaderMenuItem
  18. key={`${menuItem.text}${idx}`}
  19. type={menuItem.type}
  20. text={menuItem.text}
  21. iconClassName={menuItem.iconClassName}
  22. onClick={menuItem.onClick}
  23. shortcut={menuItem.shortcut}
  24. >
  25. {menuItem.subMenu && this.renderItems(menuItem.subMenu, true)}
  26. </PanelHeaderMenuItem>
  27. );
  28. })}
  29. </ul>
  30. );
  31. };
  32. render() {
  33. const { dashboard, panel } = this.props;
  34. const menu = getPanelMenu(dashboard, panel);
  35. return <div className="panel-menu-container dropdown open">{this.renderItems(menu)}</div>;
  36. }
  37. }