DashboardPanel.tsx 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import React from 'react';
  2. import {PanelModel} from '../panel_model';
  3. import {PanelContainer} from './PanelContainer';
  4. import {AttachedPanel} from './PanelLoader';
  5. import {DashboardRow} from './DashboardRow';
  6. import {AddPanelPanel} from './AddPanelPanel';
  7. export interface DashboardPanelProps {
  8. panel: PanelModel;
  9. getPanelContainer: () => PanelContainer;
  10. }
  11. export class DashboardPanel extends React.Component<DashboardPanelProps, any> {
  12. element: any;
  13. attachedPanel: AttachedPanel;
  14. constructor(props) {
  15. super(props);
  16. this.state = {};
  17. }
  18. componentDidMount() {
  19. if (!this.element) {
  20. return;
  21. }
  22. const panelContainer = this.props.getPanelContainer();
  23. const dashboard = panelContainer.getDashboard();
  24. const loader = panelContainer.getPanelLoader();
  25. this.attachedPanel = loader.load(this.element, this.props.panel, dashboard);
  26. }
  27. componentWillUnmount() {
  28. if (this.attachedPanel) {
  29. this.attachedPanel.destroy();
  30. }
  31. }
  32. render() {
  33. // special handling for rows
  34. if (this.props.panel.type === 'row') {
  35. return <DashboardRow panel={this.props.panel} getPanelContainer={this.props.getPanelContainer} />;
  36. }
  37. if (this.props.panel.type === 'add-panel') {
  38. return <AddPanelPanel panel={this.props.panel} getPanelContainer={this.props.getPanelContainer} />;
  39. }
  40. return (
  41. <div ref={element => this.element = element} className="panel-height-helper" />
  42. );
  43. }
  44. }