TextPanelEditor.tsx 1.3 KB

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