From 388918c2cb2ed14f97304bbf98f1653afac086ee Mon Sep 17 00:00:00 2001 From: Marcus Andersson Date: Thu, 15 Jul 2021 10:36:18 +0200 Subject: [PATCH] [v7.5.x] Transformations: add 'prepare time series' transformer (#36749) Co-authored-by: Ryan McKinley --- .../src/transformations/transformers/ids.ts | 1 + .../PrepareTimeSeriesEditor.tsx | 87 +++++++ .../prepareTimeSeries.test.ts | 214 ++++++++++++++++++ .../prepareTimeSeries/prepareTimeSeries.ts | 93 ++++++++ public/app/core/utils/standardTransformers.ts | 2 + 5 files changed, 397 insertions(+) create mode 100644 public/app/core/components/TransformersUI/prepareTimeSeries/PrepareTimeSeriesEditor.tsx create mode 100644 public/app/core/components/TransformersUI/prepareTimeSeries/prepareTimeSeries.test.ts create mode 100644 public/app/core/components/TransformersUI/prepareTimeSeries/prepareTimeSeries.ts diff --git a/packages/grafana-data/src/transformations/transformers/ids.ts b/packages/grafana-data/src/transformations/transformers/ids.ts index 1aaf5773610..218e1cb5586 100644 --- a/packages/grafana-data/src/transformations/transformers/ids.ts +++ b/packages/grafana-data/src/transformations/transformers/ids.ts @@ -22,4 +22,5 @@ export enum DataTransformerID { ensureColumns = 'ensureColumns', groupBy = 'groupBy', sortBy = 'sortBy', + prepareTimeSeries = 'prepareTimeSeries', } diff --git a/public/app/core/components/TransformersUI/prepareTimeSeries/PrepareTimeSeriesEditor.tsx b/public/app/core/components/TransformersUI/prepareTimeSeries/PrepareTimeSeriesEditor.tsx new file mode 100644 index 00000000000..90aa1f6fb08 --- /dev/null +++ b/public/app/core/components/TransformersUI/prepareTimeSeries/PrepareTimeSeriesEditor.tsx @@ -0,0 +1,87 @@ +import React, { useCallback } from 'react'; +import { css } from 'emotion'; +import { GrafanaTheme, SelectableValue, TransformerRegistryItem, TransformerUIProps } from '@grafana/data'; +import { prepareTimeSeriesTransformer, PrepareTimeSeriesOptions, timeSeriesFormat } from './prepareTimeSeries'; +import { InlineField, InlineFieldRow, Select, useStyles } from '@grafana/ui'; + +const wideInfo = { + label: 'Wide time series', + value: timeSeriesFormat.TimeSeriesWide, + description: 'Creates a single frame joined by time', + info: ( + + ), +}; + +const manyInfo = { + label: 'Multi-frame time series', + value: timeSeriesFormat.TimeSeriesMany, + description: 'Creates a new frame for each time/number pair', + info: ( + + ), +}; + +const formats: Array> = [wideInfo, manyInfo]; + +export function PrepareTimeSeriesEditor(props: TransformerUIProps): React.ReactElement { + const { options, onChange } = props; + const styles = useStyles(getStyles); + + const onSelectFormat = useCallback( + (value: SelectableValue) => { + onChange({ + ...options, + format: value.value!, + }); + }, + [onChange, options] + ); + + return ( + <> + + +