PanelHeaderMenu.tsx 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import React, { PureComponent, Fragment } 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. <Fragment>
  23. <PanelHeaderMenuItem
  24. type={menuItem.type}
  25. text={menuItem.text}
  26. iconClassName={menuItem.iconClassName}
  27. handleClick={menuItem.handleClick}
  28. shortcut={menuItem.shortcut}
  29. >
  30. {menuItem.subMenu && this.renderItems(menuItem.subMenu, true)}
  31. </PanelHeaderMenuItem>
  32. </Fragment>
  33. );
  34. })}
  35. </ul>
  36. );
  37. };
  38. render() {
  39. const { dashboard } = this.props;
  40. const menu = getPanelMenu(dashboard, this.getPanel());
  41. return <div className="panel-menu-container dropdown">{this.renderItems(menu)}</div>;
  42. }
  43. }