mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Add context to transformation editor (#76317)
* Add context to editor so field calculation does not return undefined variable and shows on next transform * fix bug where default alias would get interpolated
This commit is contained in:
parent
65a94d9e75
commit
4dfffa3c32
@ -315,7 +315,11 @@ export function getNameFromOptions(options: CalculateFieldTransformerOptions) {
|
||||
}
|
||||
case CalculateFieldMode.BinaryOperation: {
|
||||
const { binary } = options;
|
||||
return `${binary?.left ?? ''} ${binary?.operator ?? ''} ${binary?.right ?? ''}`;
|
||||
const alias = `${binary?.left ?? ''} ${binary?.operator ?? ''} ${binary?.right ?? ''}`;
|
||||
|
||||
//Remove $ signs as they will be interpolated and cause issues. Variables can still be used
|
||||
//in alias but shouldn't in the autogenerated name
|
||||
return alias.replace(/\$/g, '');
|
||||
}
|
||||
case CalculateFieldMode.ReduceRow:
|
||||
{
|
||||
|
@ -9,8 +9,10 @@ import {
|
||||
transformDataFrame,
|
||||
TransformerRegistryItem,
|
||||
getFrameMatchers,
|
||||
DataTransformContext,
|
||||
} from '@grafana/data';
|
||||
import { selectors } from '@grafana/e2e-selectors';
|
||||
import { getTemplateSrv } from '@grafana/runtime';
|
||||
import { Icon, JSONFormatter, useStyles2 } from '@grafana/ui';
|
||||
|
||||
import { TransformationsEditorTransformation } from './types';
|
||||
@ -42,14 +44,19 @@ export const TransformationEditor = ({
|
||||
const matcher = config.filter?.options ? getFrameMatchers(config.filter) : undefined;
|
||||
const inputTransforms = configs.slice(0, index).map((t) => t.transformation);
|
||||
const outputTransforms = configs.slice(index, index + 1).map((t) => t.transformation);
|
||||
const inputSubscription = transformDataFrame(inputTransforms, data).subscribe((v) => {
|
||||
|
||||
const ctx: DataTransformContext = {
|
||||
interpolate: (v: string) => getTemplateSrv().replace(v),
|
||||
};
|
||||
|
||||
const inputSubscription = transformDataFrame(inputTransforms, data, ctx).subscribe((v) => {
|
||||
if (matcher) {
|
||||
v = data.filter((v) => matcher(v));
|
||||
}
|
||||
setInput(v);
|
||||
});
|
||||
const outputSubscription = transformDataFrame(inputTransforms, data)
|
||||
.pipe(mergeMap((before) => transformDataFrame(outputTransforms, before)))
|
||||
const outputSubscription = transformDataFrame(inputTransforms, data, ctx)
|
||||
.pipe(mergeMap((before) => transformDataFrame(outputTransforms, before, ctx)))
|
||||
.subscribe(setOutput);
|
||||
|
||||
return function unsubscribe() {
|
||||
|
Loading…
Reference in New Issue
Block a user