TextPanelEditor.tsx 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. // Libraries
  2. import React, { PureComponent, ChangeEvent } from 'react';
  3. // Components
  4. import { PanelEditorProps, PanelOptionsGroup, Select, SelectOptionItem } from '@grafana/ui';
  5. // Types
  6. import { TextOptions, TextMode } from './types';
  7. export class TextPanelEditor extends PureComponent<PanelEditorProps<TextOptions>> {
  8. modes: Array<SelectOptionItem<TextMode>> = [
  9. { value: 'markdown', label: 'Markdown' },
  10. { value: 'text', label: 'Text' },
  11. { value: 'html', label: 'HTML' },
  12. ];
  13. onModeChange = (item: SelectOptionItem<TextMode>) =>
  14. this.props.onOptionsChange({ ...this.props.options, mode: item.value });
  15. onContentChange = (evt: ChangeEvent<HTMLTextAreaElement>) => {
  16. this.props.onOptionsChange({ ...this.props.options, content: (event.target as any).value });
  17. };
  18. render() {
  19. const { mode, content } = this.props.options;
  20. return (
  21. <PanelOptionsGroup title="Text">
  22. <div className="gf-form-inline">
  23. <div className="gf-form">
  24. <span className="gf-form-label">Mode</span>
  25. <Select onChange={this.onModeChange} value={this.modes.find(e => mode === e.value)} options={this.modes} />
  26. </div>
  27. </div>
  28. <textarea value={content} onChange={this.onContentChange} className="gf-form-input" rows={10} />
  29. </PanelOptionsGroup>
  30. );
  31. }
  32. }