PanelHeaderMenu.tsx 1.8 KB

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