Transformations: Omit showing base field names when field.name is unique (#104660)
This commit is contained in:
@@ -90,4 +90,25 @@ describe('useAllFieldNamesFromDataFrames', () => {
|
|||||||
|
|
||||||
expect(names).toEqual(['T', 'N', 'S', 'T (A)', 'N (A)', 'S (A)', 'T (B)', 'N (B)', 'S (B)']);
|
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)));
|
let names = frames.flatMap((frame) => frame.fields.map((field) => getFieldDisplayName(field, frame, frames)));
|
||||||
|
|
||||||
if (withBaseFieldNames) {
|
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
|
// prepend base names + uniquify
|
||||||
names = [...new Set(baseNames.concat(names))];
|
names = [...new Set(baseNames.concat(names))];
|
||||||
|
|||||||
Reference in New Issue
Block a user