Skip to content

Commit

Permalink
Refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
danrevah committed Jan 28, 2017
1 parent c69f731 commit 4913332
Showing 1 changed file with 19 additions and 22 deletions.
41 changes: 19 additions & 22 deletions src/app/pipes/array/order-by.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,41 +13,30 @@ export class OrderByPipe implements PipeTransform {

if (Array.isArray(config)) {
return out.sort((a, b) => {
let pos;

for (let i=0, l=config.length; i<l; ++i) {
const sign = config[i].substr(0, 1);
const prop = config[i].replace(/^[-+]/, '');
const asc = sign !== '-';
let pos = 0;

for (let i=0, l=config.length; i<l && pos === 0; ++i) {
const [prop, asc] = OrderByPipe.extractFromConfig(config[i]);
pos = OrderByPipe.orderCompare(prop, asc, a, b);
if (pos !== 0) break;
}

return pos;
});
} else if (GeneralHelper.isString(config)) {
const sign = config.substr(0, 1);
const prop = config.replace(/^[-+]/, '');
const asc = sign !== '-';
}

if (GeneralHelper.isString(config)) {
const [prop, asc] = OrderByPipe.extractFromConfig(config);

if (config.length === 1) {
return asc ? out.sort() : out.sort().reverse();
}

return out.sort(OrderByPipe.orderCompare.bind(this, prop, asc));
}

return out.sort((a, b) => {
if (GeneralHelper.isString(a) && GeneralHelper.isString(b)) {
return a.toLowerCase().localeCompare(b.toLowerCase());
}

if (a === b) {
return 0;
}

return a < b ? -1 : 1;
});
return out.sort((a, b) => GeneralHelper.isString(a) && GeneralHelper.isString(b)
? a.toLowerCase().localeCompare(b.toLowerCase())
: a - b);
}

static orderCompare(prop, asc, a, b) {
Expand All @@ -65,4 +54,12 @@ export class OrderByPipe implements PipeTransform {
const pos = fir < sec ? -1 : 1;
return asc ? pos : -pos;
}

static extractFromConfig(config) {
const sign = config.substr(0, 1);
const prop = config.replace(/^[-+]/, '');
const asc = sign !== '-';

return [prop, asc];
}
}

0 comments on commit 4913332

Please sign in to comment.