Browse Source

refactor(core): refactor sort-pipe

pull/1897/head
thediaval 7 years ago
parent
commit
a4700aecc7
  1. 27
      npm/ng-packs/packages/core/src/lib/pipes/sort.pipe.ts
  2. 4
      npm/ng-packs/packages/core/src/lib/tests/sort.pipe.spec.ts

27
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 { export class SortPipe implements PipeTransform {
transform(value: any[], sortOrder: SortOrder | string = 'asc', sortKey?: string): any { transform(value: any[], sortOrder: SortOrder | string = 'asc', sortKey?: string): any {
sortOrder = sortOrder && (sortOrder.toLowerCase() as any); sortOrder = sortOrder && (sortOrder.toLowerCase() as any);
if (!value || (sortOrder !== 'asc' && sortOrder !== 'desc')) return value; if (!value || (sortOrder !== 'asc' && sortOrder !== 'desc')) return value;
let sorted;
let numberArray = [];
let stringArray = [];
if (!sortKey) { if (!sortKey) {
const numberArray = []; numberArray = value.filter(item => typeof item === 'number').sort();
const stringArray = []; stringArray = value.filter(item => typeof item === 'string').sort();
value.forEach(item => (typeof item === 'number' ? numberArray.push(item) : stringArray.push(item)));
sorted = numberArray.sort().concat(stringArray.sort());
} else { } else {
sorted = value.sort((a, b) => { numberArray = value.filter(item => typeof item[sortKey] === 'number').sort((a, b) => a[sortKey] - b[sortKey]);
return ( stringArray = value
Number(typeof b[sortKey] === 'number') - Number(typeof a[sortKey] === 'number') || .filter(item => typeof item[sortKey] === 'string')
(a[sortKey] < b[sortKey] ? -1 : 1) .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(); return sortOrder === 'asc' ? sorted : sorted.reverse();
} }
} }

4
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'; import { SortPipe } from '../pipes/sort.pipe';
describe('SortPipe', () => { describe('SortPipe', () => {
@ -24,7 +24,7 @@ describe('SortPipe', () => {
}); });
test('should require an array as value', () => { test('should require an array as value', () => {
expect(pipe.transform(null, 'asc')).toBeFalsy(); expect(pipe.transform(null)).toBeFalsy();
expect(pipe.transform(undefined, 'desc')).toBeFalsy(); expect(pipe.transform(undefined, 'desc')).toBeFalsy();
}); });
}); });

Loading…
Cancel
Save