Segment.tsx 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import React, { PureComponent } from 'react';
  2. import { getAngularLoader, AngularComponent } from 'app/core/services/AngularLoader';
  3. import 'app/core/directives/metric_segment';
  4. interface QueryEditorProps {
  5. segment: any;
  6. getOptions: () => Promise<any[]>;
  7. onChange: (segment, index) => void;
  8. key: number;
  9. }
  10. export default class Segment extends PureComponent<QueryEditorProps, any> {
  11. element: any;
  12. component: AngularComponent;
  13. async componentDidMount() {
  14. if (!this.element) {
  15. return;
  16. }
  17. const { segment, getOptions, onChange } = this.props;
  18. const loader = getAngularLoader();
  19. const template = '<metric-segment> </metric-segment>';
  20. const scopeProps = {
  21. segment,
  22. onChange,
  23. getOptions,
  24. debounce: false,
  25. };
  26. this.component = loader.load(this.element, scopeProps, template);
  27. }
  28. componentWillUnmount() {
  29. if (this.component) {
  30. this.component.destroy();
  31. }
  32. }
  33. render() {
  34. return <div ref={element => (this.element = element)} style={{ width: '100%' }} />;
  35. }
  36. }