Organize transformer: Use display name in field order comparer (#24984)

* Use display name in field order comparer

* Post review
This commit is contained in:
Dominik Prokop
2020-05-25 11:54:33 +02:00
committed by GitHub
parent 10041bca99
commit 9a59f387d9
3 changed files with 34 additions and 6 deletions
@@ -47,7 +47,7 @@ export function getFieldDisplayName(field: Field, frame?: DataFrame, allFrames?:
} }
/** /**
* Get an appropriate display name. If the 'title' is set, use that * Get an appropriate display name. If the 'displayName' field config is set, use that
*/ */
function calculateFieldDisplayName(field: Field, frame?: DataFrame, allFrames?: DataFrame[]): string { function calculateFieldDisplayName(field: Field, frame?: DataFrame, allFrames?: DataFrame[]): string {
const hasConfigTitle = field.config?.displayName && field.config?.displayName.length; const hasConfigTitle = field.config?.displayName && field.config?.displayName.length;
@@ -43,18 +43,30 @@ describe('Order Transformer', () => {
name: 'temperature', name: 'temperature',
type: FieldType.number, type: FieldType.number,
values: new ArrayVector([10.3, 10.4, 10.5, 10.6]), values: new ArrayVector([10.3, 10.4, 10.5, 10.6]),
labels: undefined,
state: {
displayName: 'temperature',
},
}, },
{ {
config: {}, config: {},
name: 'humidity', name: 'humidity',
type: FieldType.number, type: FieldType.number,
values: new ArrayVector([10000.3, 10000.4, 10000.5, 10000.6]), values: new ArrayVector([10000.3, 10000.4, 10000.5, 10000.6]),
labels: undefined,
state: {
displayName: 'humidity',
},
}, },
{ {
config: {}, config: {},
name: 'time', name: 'time',
type: FieldType.time, type: FieldType.time,
values: new ArrayVector([3000, 4000, 5000, 6000]), values: new ArrayVector([3000, 4000, 5000, 6000]),
labels: undefined,
state: {
displayName: 'time',
},
}, },
]); ]);
}); });
@@ -90,18 +102,30 @@ describe('Order Transformer', () => {
name: 'humidity', name: 'humidity',
type: FieldType.number, type: FieldType.number,
values: new ArrayVector([10000.3, 10000.4, 10000.5, 10000.6]), values: new ArrayVector([10000.3, 10000.4, 10000.5, 10000.6]),
labels: undefined,
state: {
displayName: 'humidity',
},
}, },
{ {
config: {}, config: {},
name: 'time', name: 'time',
type: FieldType.time, type: FieldType.time,
values: new ArrayVector([3000, 4000, 5000, 6000]), values: new ArrayVector([3000, 4000, 5000, 6000]),
labels: undefined,
state: {
displayName: 'time',
},
}, },
{ {
config: {}, config: {},
name: 'pressure', name: 'pressure',
type: FieldType.number, type: FieldType.number,
values: new ArrayVector([10.3, 10.4, 10.5, 10.6]), values: new ArrayVector([10.3, 10.4, 10.5, 10.6]),
labels: undefined,
state: {
displayName: 'pressure',
},
}, },
]); ]);
}); });
@@ -1,7 +1,7 @@
import { DataTransformerID } from './ids'; import { DataTransformerID } from './ids';
import { DataTransformerInfo } from '../../types/transformations'; import { DataTransformerInfo } from '../../types/transformations';
import { DataFrame } from '../..'; import { DataFrame, Field } from '../../types';
import { Field } from '../../types'; import { getFieldDisplayName } from '../../field/fieldState';
export interface OrderFieldsTransformerOptions { export interface OrderFieldsTransformerOptions {
indexByName: Record<string, number>; indexByName: Record<string, number>;
@@ -29,7 +29,7 @@ export const orderFieldsTransformer: DataTransformerInfo<OrderFieldsTransformerO
return data.map(frame => ({ return data.map(frame => ({
...frame, ...frame,
fields: orderer(frame.fields), fields: orderer(frame.fields, data, frame),
})); }));
}; };
}, },
@@ -39,7 +39,11 @@ export const createOrderFieldsComparer = (indexByName: Record<string, number>) =
return indexOfField(a, indexByName) - indexOfField(b, indexByName); return indexOfField(a, indexByName) - indexOfField(b, indexByName);
}; };
const createFieldsOrderer = (indexByName: Record<string, number>) => (fields: Field[]) => { const createFieldsOrderer = (indexByName: Record<string, number>) => (
fields: Field[],
data: DataFrame[],
frame: DataFrame
) => {
if (!Array.isArray(fields) || fields.length === 0) { if (!Array.isArray(fields) || fields.length === 0) {
return fields; return fields;
} }
@@ -47,7 +51,7 @@ const createFieldsOrderer = (indexByName: Record<string, number>) => (fields: Fi
return fields; return fields;
} }
const comparer = createOrderFieldsComparer(indexByName); const comparer = createOrderFieldsComparer(indexByName);
return fields.sort((a, b) => comparer(a.name, b.name)); return fields.sort((a, b) => comparer(getFieldDisplayName(a, frame, data), getFieldDisplayName(b, frame, data)));
}; };
const indexOfField = (fieldName: string, indexByName: Record<string, number>) => { const indexOfField = (fieldName: string, indexByName: Record<string, number>) => {