PanelHeaderMenu.tsx 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import React, { PureComponent } from 'react';
  2. import { DashboardModel } from 'app/features/dashboard/dashboard_model';
  3. import { PanelHeaderMenuItem, PanelHeaderMenuItemProps } from './PanelHeaderMenuItem';
  4. import { getPanelMenu } from 'app/features/dashboard/utils/panel_menu';
  5. export interface PanelHeaderMenuProps {
  6. panelId: number;
  7. dashboard: DashboardModel;
  8. datasource: any;
  9. additionalMenuItems?: PanelHeaderMenuItemProps[];
  10. additionalSubMenuItems?: PanelHeaderMenuItemProps[];
  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. renderItems = (menu: PanelHeaderMenuItemProps[], isSubMenu = false) => {
  20. return (
  21. <ul className="dropdown-menu dropdown-menu--menu panel-menu" role={isSubMenu ? '' : 'menu'}>
  22. {menu.map((menuItem, idx) => {
  23. return (
  24. <PanelHeaderMenuItem
  25. key={idx} // TODO: Fix proper key
  26. type={menuItem.type}
  27. text={menuItem.text}
  28. iconClassName={menuItem.iconClassName}
  29. handleClick={menuItem.handleClick}
  30. shortcut={menuItem.shortcut}
  31. >
  32. {menuItem.subMenu && this.renderItems(menuItem.subMenu, true)}
  33. </PanelHeaderMenuItem>
  34. );
  35. })}
  36. </ul>
  37. );
  38. };
  39. render() {
  40. console.log('PanelHeaderMenu render');
  41. const { dashboard, additionalMenuItems, additionalSubMenuItems } = this.props;
  42. const menu = getPanelMenu(dashboard, this.getPanel(), additionalMenuItems, additionalSubMenuItems);
  43. return <div className="panel-menu-container dropdown">{this.renderItems(menu)}</div>;
  44. }
  45. }