import React, { FC, useCallback, useMemo, useRef } from 'react'; import { DashboardModel, PanelModel } from '../../state'; import { PanelData, PanelPlugin } from '@grafana/data'; import { Counter, DataLinksInlineEditor, Field, Input, RadioButtonGroup, Select, Switch, TextArea } from '@grafana/ui'; import { getPanelLinksVariableSuggestions } from '../../../panel/panellinks/link_srv'; import { PanelOptionsEditor } from './PanelOptionsEditor'; import { AngularPanelOptions } from './AngularPanelOptions'; import { VisualizationTab } from './VisualizationTab'; import { OptionsGroup } from './OptionsGroup'; import { RepeatRowSelect } from '../RepeatRowSelect/RepeatRowSelect'; interface Props { panel: PanelModel; plugin: PanelPlugin; data: PanelData; dashboard: DashboardModel; onPanelConfigChange: (configKey: string, value: any) => void; onPanelOptionsChanged: (options: any) => void; } export const PanelOptionsTab: FC = ({ panel, plugin, data, dashboard, onPanelConfigChange, onPanelOptionsChanged, }) => { const visTabInputRef = useRef(); const linkVariablesSuggestions = useMemo(() => getPanelLinksVariableSuggestions(), []); const onRepeatRowSelectChange = useCallback((value: string | null) => onPanelConfigChange('repeat', value), [ onPanelConfigChange, ]); const elements: JSX.Element[] = []; const panelLinksCount = panel && panel.links ? panel.links.length : 0; const directionOptions = [ { label: 'Horizontal', value: 'h' }, { label: 'Vertical', value: 'v' }, ]; const maxPerRowOptions = [2, 3, 4, 6, 8, 12].map(value => ({ label: value.toString(), value })); const focusVisPickerInput = (isExpanded: boolean) => { if (isExpanded && visTabInputRef.current) { visTabInputRef.current.focus(); } }; // Fist common panel settings Title, description elements.push( onPanelConfigChange('title', e.currentTarget.value)} />