PanelHeaderMenu.tsx 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  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 { PanelHeaderMenuItemProps } from 'app/types/panel';
  6. import { getPanelMenu } from 'app/features/dashboard/utils/panel_menu';
  7. export interface PanelHeaderMenuProps {
  8. panel: PanelModel;
  9. dashboard: DashboardModel;
  10. additionalMenuItems?: PanelHeaderMenuItemProps[];
  11. additionalSubMenuItems?: PanelHeaderMenuItemProps[];
  12. }
  13. export class PanelHeaderMenu extends PureComponent<PanelHeaderMenuProps, any> {
  14. renderItems = (menu: PanelHeaderMenuItemProps[], isSubMenu = false) => {
  15. return (
  16. <ul className="dropdown-menu dropdown-menu--menu panel-menu" role={isSubMenu ? '' : 'menu'}>
  17. {menu.map((menuItem, idx: number) => {
  18. return (
  19. <PanelHeaderMenuItem
  20. key={`${menuItem.text}${idx}`}
  21. type={menuItem.type}
  22. text={menuItem.text}
  23. iconClassName={menuItem.iconClassName}
  24. handleClick={menuItem.handleClick}
  25. shortcut={menuItem.shortcut}
  26. >
  27. {menuItem.subMenu && this.renderItems(menuItem.subMenu, true)}
  28. </PanelHeaderMenuItem>
  29. );
  30. })}
  31. </ul>
  32. );
  33. };
  34. render() {
  35. console.log('PanelHeaderMenu render');
  36. const { dashboard, additionalMenuItems, additionalSubMenuItems, panel } = this.props;
  37. const menu = getPanelMenu(dashboard, panel, additionalMenuItems, additionalSubMenuItems);
  38. return <div className="panel-menu-container dropdown">{this.renderItems(menu)}</div>;
  39. }
  40. }