diff --git a/Signum.React/Scripts/Globals.ts b/Signum.React/Scripts/Globals.ts index 805f20ff89..b91957e68b 100644 --- a/Signum.React/Scripts/Globals.ts +++ b/Signum.React/Scripts/Globals.ts @@ -23,7 +23,9 @@ declare global { interface Array { groupBy(this: Array, keySelector: (element: T) => K): { key: K; elements: T[] }[]; + groupBy(this: Array, keySelector: (element: T) => K, elementSelector: (element: T) => E): { key: K; elements: E[] }[]; groupToObject(this: Array, keySelector: (element: T) => string): { [key: string]: T[] }; + groupToObject(this: Array, keySelector: (element: T) => string, elementSelector: (element: T) => E): { [key: string]: E[] }; groupWhen(this: Array, condition: (element: T) => boolean, includeKeyInGroup?: boolean, initialGroup?: boolean): { key: T, elements: T[] }[]; groupWhenChange(this: Array, keySelector: (element: T) => K): { key: K, elements: T[] }[]; @@ -137,9 +139,9 @@ Array.prototype.clear = function (): void { this.length = 0; }; -Array.prototype.groupBy = function (this: any[], keySelector: (element: any) => string | number): { key: any /*string*/; elements: any[] }[] { +Array.prototype.groupBy = function (this: any[], keySelector: (element: any) => string | number, elementSelector?: (element: any) => unknown): { key: any /*string*/; elements: any[] }[] { const result: { key: string | number; elements: any[] }[] = []; - const objectGrouped = this.groupToObject(keySelector as ((element: any) => string)); + const objectGrouped = this.groupToObject(keySelector as ((element: any) => string), elementSelector!); for (const prop in objectGrouped) { if (objectGrouped.hasOwnProperty(prop)) result.push({ key: prop, elements: objectGrouped[prop] }); @@ -147,7 +149,7 @@ Array.prototype.groupBy = function (this: any[], keySelector: (element: any) => return result; }; -Array.prototype.groupToObject = function (this: any[], keySelector: (element: any) => string): { [key: string]: any[] } { +Array.prototype.groupToObject = function (this: any[], keySelector: (element: any) => string, elementSelector?: (element: any) => unknown): { [key: string]: any[] } { const result: { [key: string]: any[] } = {}; for (let i = 0; i < this.length; i++) { @@ -155,7 +157,7 @@ Array.prototype.groupToObject = function (this: any[], keySelector: (element: an const key = keySelector(element); if (!result[key]) result[key] = []; - result[key].push(element); + result[key].push(elementSelector ? elementSelector(element) : element); } return result; };