PanelHeaderMenu.tsx 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  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. }
  9. export class PanelHeaderMenu extends PureComponent<PanelHeaderMenuProps, any> {
  10. getPanel = () => {
  11. // Pass in panel as prop instead?
  12. const { panelId, dashboard } = this.props;
  13. const panelInfo = dashboard.getPanelInfoById(panelId);
  14. return panelInfo.panel;
  15. };
  16. renderItems = (menu: PanelHeaderMenuItemProps[], isSubMenu = false) => {
  17. return (
  18. <ul className="dropdown-menu dropdown-menu--menu panel-menu" role={isSubMenu ? '' : 'menu'}>
  19. {menu.map(menuItem => {
  20. console.log(this);
  21. return (
  22. <PanelHeaderMenuItem
  23. type={menuItem.type}
  24. text={menuItem.text}
  25. iconClassName={menuItem.iconClassName}
  26. handleClick={menuItem.handleClick}
  27. shortcut={menuItem.shortcut}
  28. >
  29. {menuItem.subMenu && this.renderItems(menuItem.subMenu, true)}
  30. </PanelHeaderMenuItem>
  31. );
  32. })}
  33. </ul>
  34. );
  35. };
  36. render() {
  37. const { dashboard } = this.props;
  38. const menu = getPanelMenu(dashboard, this.getPanel());
  39. return <div className="panel-menu-container dropdown">{this.renderItems(menu)}</div>;
  40. }
  41. }