import React, { useCallback } from 'react'; import { PluginState, TransformerRegistryItem, TransformerUIProps, ReducerID, isReducerID, SelectableValue, getFieldDisplayName, } from '@grafana/data'; import { InlineFieldRow, InlineField, StatsPicker, InlineSwitch, Select } from '@grafana/ui'; import { timeSeriesTableTransformer, TimeSeriesTableTransformerOptions, getRefData, } from './timeSeriesTableTransformer'; export function TimeSeriesTableTransformEditor({ input, options, onChange, }: TransformerUIProps) { const timeFields: Array> = []; const refIdMap = getRefData(input); // Retrieve time fields for (const frame of input) { for (const field of frame.fields) { if (field.type === 'time') { const name = getFieldDisplayName(field, frame, input); timeFields.push({ label: name, value: name }); } } } const onSelectTimefield = useCallback( (refId: string, value: SelectableValue) => { const val = value?.value !== undefined ? value.value : ''; onChange({ ...options, [refId]: { ...options[refId], timeField: val, }, }); }, [onChange, options] ); const onSelectStat = useCallback( (refId: string, stats: string[]) => { const reducerID = stats[0]; if (reducerID && isReducerID(reducerID)) { onChange({ ...options, [refId]: { ...options[refId], stat: reducerID, }, }); } }, [onChange, options] ); const onMergeSeriesToggle = useCallback( (refId: string) => { const mergeSeries = options[refId]?.mergeSeries !== undefined ? !options[refId].mergeSeries : false; onChange({ ...options, [refId]: { ...options[refId], mergeSeries, }, }); }, [onChange, options] ); let configRows = []; for (const refId of Object.keys(refIdMap)) { configRows.push(