PanelHeader.tsx 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import React, { PureComponent } from 'react';
  2. import classNames from 'classnames';
  3. import { PanelHeaderMenu } from './PanelHeaderMenu';
  4. import { DashboardModel } from 'app/features/dashboard/dashboard_model';
  5. import { PanelModel } from 'app/features/dashboard/panel_model';
  6. import { ClickOutsideWrapper } from '../../../../core/components/ClickOutsideWrapper/ClickOutsideWrapper';
  7. export interface Props {
  8. panel: PanelModel;
  9. dashboard: DashboardModel;
  10. }
  11. interface State {
  12. panelMenuOpen: boolean;
  13. }
  14. export class PanelHeader extends PureComponent<Props, State> {
  15. state = {
  16. panelMenuOpen: false,
  17. };
  18. onMenuToggle = event => {
  19. event.stopPropagation();
  20. console.log('toggle menu');
  21. this.setState(prevState => ({
  22. panelMenuOpen: !prevState.panelMenuOpen,
  23. }));
  24. };
  25. closeMenu = () => {
  26. this.setState({
  27. panelMenuOpen: false,
  28. });
  29. };
  30. render() {
  31. const isFullscreen = false;
  32. const isLoading = false;
  33. const panelHeaderClass = classNames({ 'panel-header': true, 'grid-drag-handle': !isFullscreen });
  34. const { panel, dashboard } = this.props;
  35. return (
  36. <div className={panelHeaderClass}>
  37. <span className="panel-info-corner">
  38. <i className="fa" />
  39. <span className="panel-info-corner-inner" />
  40. </span>
  41. {isLoading && (
  42. <span className="panel-loading">
  43. <i className="fa fa-spinner fa-spin" />
  44. </span>
  45. )}
  46. <div className="panel-title-container" onClick={this.onMenuToggle}>
  47. <div className="panel-title">
  48. <span className="icon-gf panel-alert-icon" />
  49. <span className="panel-title-text">
  50. {panel.title} <span className="fa fa-caret-down panel-menu-toggle" />
  51. </span>
  52. {this.state.panelMenuOpen && (
  53. <ClickOutsideWrapper onClick={this.closeMenu}>
  54. <PanelHeaderMenu panel={panel} dashboard={dashboard} />
  55. </ClickOutsideWrapper>
  56. )}
  57. <span className="panel-time-info">
  58. <i className="fa fa-clock-o" /> 4m
  59. </span>
  60. </div>
  61. </div>
  62. </div>
  63. );
  64. }
  65. }