Transformations: Omit showing base field names when field.name is unique (#104660)

pull/104664/head
Leon Sorokin 3 months ago committed by GitHub
parent 7089b5978e
commit fa17fd108f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 21
      public/app/features/transformers/utils.test.ts
  2. 18
      public/app/features/transformers/utils.ts

@ -90,4 +90,25 @@ describe('useAllFieldNamesFromDataFrames', () => {
expect(names).toEqual(['T', 'N', 'S', 'T (A)', 'N (A)', 'S (A)', 'T (B)', 'N (B)', 'S (B)']);
});
it('omit base names when field.name is unique', () => {
let frames = [
toDataFrame({
refId: 'A',
fields: [
{ name: 'T', config: { displayName: 't' }, type: FieldType.time, values: [1, 2, 3] },
{ name: 'N', config: { displayName: 'n' }, type: FieldType.number, values: [100, 200, 300] },
{ name: 'S', config: { displayName: 's' }, type: FieldType.string, values: ['1', '2', '3'] },
],
}),
toDataFrame({
refId: 'B',
fields: [{ name: 'T', config: { displayName: 't2' }, type: FieldType.time, values: [1, 2, 3] }],
}),
];
const names = getAllFieldNamesFromDataFrames(frames, true);
expect(names).toEqual(['T', 't', 'n', 's', 't2']);
});
});

@ -16,7 +16,23 @@ export const getAllFieldNamesFromDataFrames = (frames: DataFrame[], withBaseFiel
let names = frames.flatMap((frame) => frame.fields.map((field) => getFieldDisplayName(field, frame, frames)));
if (withBaseFieldNames) {
let baseNames = frames.flatMap((frame) => frame.fields.map((field) => field.name));
// only add base names of fields that have same field.name
let baseNameCounts = new Map<string, number>();
frames.forEach((frame) =>
frame.fields.forEach((field) => {
let count = baseNameCounts.get(field.name) ?? 0;
baseNameCounts.set(field.name, count + 1);
})
);
let baseNames: string[] = [];
baseNameCounts.forEach((count, name) => {
if (count > 1) {
baseNames.push(name);
}
});
// prepend base names + uniquify
names = [...new Set(baseNames.concat(names))];

Loading…
Cancel
Save