feat(Summarize Node): Preserves original field data type (#13069)

This commit is contained in:
Ria Scholz
2025-02-05 12:52:16 +01:00
committed by GitHub
parent a90529fd51
commit be5e49d56c
3 changed files with 230 additions and 1 deletions

View File

@@ -1,3 +1,4 @@
import { isNaN } from 'lodash';
import get from 'lodash/get';
import {
type IDataObject,
@@ -287,3 +288,38 @@ export function aggregationToArray(
return returnData;
}
}
const getOriginalFieldValue = (field: string | number) =>
field === 'null' ? null : isNaN(Number(field)) ? field : Number(field);
export function aggregationToArrayWithOriginalTypes(
aggregationResult: IDataObject,
fieldsToSplitBy: string[],
previousStage: IDataObject = {},
) {
const returnData: IDataObject[] = [];
fieldsToSplitBy = parseFieldName(fieldsToSplitBy);
const splitFieldName = fieldsToSplitBy[0];
const isNext = fieldsToSplitBy[1];
if (isNext === undefined) {
for (const fieldName of Object.keys(aggregationResult)) {
returnData.push({
...previousStage,
[splitFieldName]: getOriginalFieldValue(fieldName),
...(aggregationResult[fieldName] as IDataObject),
});
}
return returnData;
} else {
for (const key of Object.keys(aggregationResult)) {
returnData.push(
...aggregationToArray(aggregationResult[key] as IDataObject, fieldsToSplitBy.slice(1), {
...previousStage,
[splitFieldName]: getOriginalFieldValue(key),
}),
);
}
return returnData;
}
}