diff --git a/npm/ng-packs/packages/core/src/lib/pipes/sort.pipe.ts b/npm/ng-packs/packages/core/src/lib/pipes/sort.pipe.ts index 9e7b5a0d10..ea23da1efc 100644 --- a/npm/ng-packs/packages/core/src/lib/pipes/sort.pipe.ts +++ b/npm/ng-packs/packages/core/src/lib/pipes/sort.pipe.ts @@ -7,21 +7,26 @@ export type SortOrder = 'asc' | 'desc'; export class SortPipe implements PipeTransform { transform(value: any[], sortOrder: SortOrder | string = 'asc', sortKey?: string): any { sortOrder = sortOrder && (sortOrder.toLowerCase() as any); + if (!value || (sortOrder !== 'asc' && sortOrder !== 'desc')) return value; - let sorted; + + let numberArray = []; + let stringArray = []; + if (!sortKey) { - const numberArray = []; - const stringArray = []; - value.forEach(item => (typeof item === 'number' ? numberArray.push(item) : stringArray.push(item))); - sorted = numberArray.sort().concat(stringArray.sort()); + numberArray = value.filter(item => typeof item === 'number').sort(); + stringArray = value.filter(item => typeof item === 'string').sort(); } else { - sorted = value.sort((a, b) => { - return ( - Number(typeof b[sortKey] === 'number') - Number(typeof a[sortKey] === 'number') || - (a[sortKey] < b[sortKey] ? -1 : 1) - ); - }); + numberArray = value.filter(item => typeof item[sortKey] === 'number').sort((a, b) => a[sortKey] - b[sortKey]); + stringArray = value + .filter(item => typeof item[sortKey] === 'string') + .sort((a, b) => { + if (a[sortKey] < b[sortKey]) return -1; + else if (a[sortKey] > b[sortKey]) return 1; + else return 0; + }); } + const sorted = numberArray.concat(stringArray); return sortOrder === 'asc' ? sorted : sorted.reverse(); } } diff --git a/npm/ng-packs/packages/core/src/lib/tests/sort.pipe.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/sort.pipe.spec.ts index 6b88961728..8428515118 100644 --- a/npm/ng-packs/packages/core/src/lib/tests/sort.pipe.spec.ts +++ b/npm/ng-packs/packages/core/src/lib/tests/sort.pipe.spec.ts @@ -1,4 +1,4 @@ -import { createServiceFactory, SpectatorService } from '@ngneat/spectator'; +import { createServiceFactory, SpectatorService } from '@ngneat/spectator/jest'; import { SortPipe } from '../pipes/sort.pipe'; describe('SortPipe', () => { @@ -24,7 +24,7 @@ describe('SortPipe', () => { }); test('should require an array as value', () => { - expect(pipe.transform(null, 'asc')).toBeFalsy(); + expect(pipe.transform(null)).toBeFalsy(); expect(pipe.transform(undefined, 'desc')).toBeFalsy(); }); });