diff --git a/packages/grafana-data/src/dataframe/MutableDataFrame.ts b/packages/grafana-data/src/dataframe/MutableDataFrame.ts index a76873b64dc..2597aa17d8f 100644 --- a/packages/grafana-data/src/dataframe/MutableDataFrame.ts +++ b/packages/grafana-data/src/dataframe/MutableDataFrame.ts @@ -155,6 +155,27 @@ export class MutableDataFrame extends FunctionalVector implements Da } } + private parsers: Map any> | undefined = undefined; + + /** + * @deprecated unclear if this is actually used + */ + setParser(field: Field, parser: (v: string) => any) { + if (!this.parsers) { + this.parsers = new Map any>(); + } + this.parsers.set(field, parser); + return parser; + } + + private parseValue(field: Field, v: any): any { + let p = this.parsers?.get(field); + if (!p) { + p = this.setParser(field, makeFieldParser(v, field)); + } + return p(v); + } + /** * This will add each value to the corresponding column */ @@ -181,10 +202,7 @@ export class MutableDataFrame extends FunctionalVector implements Da const f = this.fields[i]; let v = row[i]; if (f.type !== FieldType.string && isString(v)) { - if (!f.parse) { - f.parse = makeFieldParser(v, f); - } - v = f.parse(v); + v = this.parseValue(f, v); } f.values.add(v); } @@ -200,10 +218,7 @@ export class MutableDataFrame extends FunctionalVector implements Da let val = obj[field.name]; if (field.type !== FieldType.string && isString(val)) { - if (!field.parse) { - field.parse = makeFieldParser(val, field); - } - val = field.parse(val); + val = this.parseValue(field, val); } if (val === undefined) { diff --git a/packages/grafana-data/src/types/dataFrame.ts b/packages/grafana-data/src/types/dataFrame.ts index b07a439fdd0..bb4e9784e34 100644 --- a/packages/grafana-data/src/types/dataFrame.ts +++ b/packages/grafana-data/src/types/dataFrame.ts @@ -122,11 +122,6 @@ export interface Field> { */ state?: FieldState | null; - /** - * Convert text to the field value - */ - parse?: (value: any) => T; - /** * Convert a value for display */ diff --git a/packages/grafana-ui/src/components/Table/utils.test.ts b/packages/grafana-ui/src/components/Table/utils.test.ts index f710638701c..bb2ff5b70d9 100644 --- a/packages/grafana-ui/src/components/Table/utils.test.ts +++ b/packages/grafana-ui/src/components/Table/utils.test.ts @@ -186,7 +186,6 @@ describe('Table utils', () => { title: '1.0', text: '1.0', }), - parse: (value: any) => '1.0', }; const rows: any[] = []; diff --git a/public/app/core/components/TransformersUI/spatial/spatialTransformer.ts b/public/app/core/components/TransformersUI/spatial/spatialTransformer.ts index b8f652e77f5..d131657d8fc 100644 --- a/public/app/core/components/TransformersUI/spatial/spatialTransformer.ts +++ b/public/app/core/components/TransformersUI/spatial/spatialTransformer.ts @@ -53,7 +53,6 @@ async function doSetGeometry(frames: DataFrame[], options: SpatialTransformOptio { ...info.field, name, - parse: undefined, type: FieldType.geo, values: new ArrayVector([toLineString(info.field)]), }, diff --git a/public/app/plugins/datasource/elasticsearch/elastic_response.ts b/public/app/plugins/datasource/elasticsearch/elastic_response.ts index 826878738bb..bb857a7e971 100644 --- a/public/app/plugins/datasource/elasticsearch/elastic_response.ts +++ b/public/app/plugins/datasource/elasticsearch/elastic_response.ts @@ -711,21 +711,23 @@ const createEmptyDataFrame = ( } if (logMessageField) { - series.addField({ + const f = series.addField({ name: logMessageField, type: FieldType.string, - }).parse = (v: any) => { + }); + series.setParser(f, (v: any) => { return v || ''; - }; + }); } if (logLevelField) { - series.addField({ + const f = series.addField({ name: 'level', type: FieldType.string, - }).parse = (v: any) => { + }); + series.setParser(f, (v: any) => { return v || ''; - }; + }); } const fieldNames = series.fields.map((field) => field.name); @@ -740,15 +742,16 @@ const createEmptyDataFrame = ( continue; } - series.addField({ + const f = series.addField({ config: { filterable: true, }, name, type, - }).parse = (v: any) => { + }); + series.setParser(f, (v: any) => { return v || ''; - }; + }); } return series;