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 {
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();
}
}

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';
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();
});
});

Loading…
Cancel
Save