TextPanelEditor.tsx 1.3 KB

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