@hxui/angular
Version:
* * *
80 lines • 8.39 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,uselessCode} checked by tsc
*/
import { Injectable } from '@angular/core';
import sortBy from 'array-sort-by';
import { TabularColumnTypes } from './tabular-column.interface';
/** @enum {number} */
const SortByDirection = {
Ascending: 0,
Descending: 1,
None: 2,
};
export { SortByDirection };
SortByDirection[SortByDirection.Ascending] = 'Ascending';
SortByDirection[SortByDirection.Descending] = 'Descending';
SortByDirection[SortByDirection.None] = 'None';
/**
* @record
*/
export function ISortByProperty() { }
if (false) {
/** @type {?} */
ISortByProperty.prototype.property;
/** @type {?} */
ISortByProperty.prototype.direction;
/** @type {?} */
ISortByProperty.prototype.type;
}
export class TabularSortByService {
/**
* @param {?=} rows
* @param {?=} sortProps
* @return {?}
*/
sortBy(rows = [], sortProps = []) {
/**
* @example Sorting
* Sorting ASC by @name, after DESC by @age, after ASC by @id
* let arr = [
* { id: 9, age: 26, name: 'pedro' },
* { id: 6, age: 21, name: 'Pedro' },
* { id: 7, age: 26, name: 'Maria' },
* { id: 2, age: 26, name: 'maría' }
* ];
* sortBy(arr, item => [item.name, -item.age, item.id]);
*/
sortBy(rows, item => {
/** @type {?} */
const sort = [];
for (const prop of sortProps) {
if (prop.type === TabularColumnTypes.String && prop.direction === SortByDirection.Descending) {
sort.push('desc:' + item[prop.property]);
}
else if (prop.type === TabularColumnTypes.Number && prop.direction === SortByDirection.Descending) {
sort.push(-item[prop.property]);
}
else if ((prop.type === TabularColumnTypes.Date || prop.type === TabularColumnTypes.DateTime) && prop.direction === SortByDirection.Descending) {
sort.push(-new Date(item[prop.property]));
}
else if ((prop.type === TabularColumnTypes.Date || prop.type === TabularColumnTypes.DateTime) && prop.direction === SortByDirection.Ascending) {
sort.push(new Date(item[prop.property]));
}
else if (prop.type === TabularColumnTypes.Html && prop.direction === SortByDirection.Descending) {
/** @type {?} */
const sortableValue = item[prop.property];
sort.push('desc:' + sortableValue.replace(/<.*?>/g, ''));
}
else {
sort.push(item[prop.property]);
}
}
return sort;
});
}
}
TabularSortByService.decorators = [
{ type: Injectable },
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFidWxhci1zb3J0LWJ5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AaHh1aS9hbmd1bGFyLyIsInNvdXJjZXMiOlsibGliL3RhYnVsYXIvdGFidWxhci1zb3J0LWJ5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFekMsT0FBTyxNQUFNLE1BQU0sZUFBZSxDQUFDO0FBQ25DLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDOzs7SUFHMUQsWUFBUztJQUNULGFBQVU7SUFDVixPQUFJOzs7Ozs7Ozs7QUFHUixxQ0FJQzs7O0lBSEMsbUNBQWlCOztJQUNqQixvQ0FBMkI7O0lBQzNCLCtCQUF5Qjs7QUFJM0IsTUFBTSxPQUFPLG9CQUFvQjs7Ozs7O0lBR3hCLE1BQU0sQ0FBQyxPQUFzQixFQUFFLEVBQUUsWUFBK0IsRUFBRTtRQUV2RTs7Ozs7Ozs7OztXQVVHO1FBQ0gsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRTs7a0JBQ1osSUFBSSxHQUFHLEVBQUU7WUFDZixLQUFLLE1BQU0sSUFBSSxJQUFJLFNBQVMsRUFBRTtnQkFDNUIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGtCQUFrQixDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLGVBQWUsQ0FBQyxVQUFVLEVBQUU7b0JBQzVGLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztpQkFDMUM7cUJBQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGtCQUFrQixDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLGVBQWUsQ0FBQyxVQUFVLEVBQUU7b0JBQ25HLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7aUJBQ2pDO3FCQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLGtCQUFrQixDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssZUFBZSxDQUFDLFVBQVUsRUFBRTtvQkFDaEosSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUMzQztxQkFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxrQkFBa0IsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLGVBQWUsQ0FBQyxTQUFTLEVBQUU7b0JBQy9JLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQzFDO3FCQUFNLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxrQkFBa0IsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxlQUFlLENBQUMsVUFBVSxFQUFFOzswQkFDM0YsYUFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO29CQUN6QyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUMxRDtxQkFBTTtvQkFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztpQkFDaEM7YUFDRjtZQUNGLE9BQU8sSUFBSSxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQUM7SUFFTCxDQUFDOzs7WUF0Q0YsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7SVRhYnVsYXJSb3d9IGZyb20gJy4vdGFidWxhci1yb3cuaW50ZXJmYWNlJztcclxuaW1wb3J0IHNvcnRCeSBmcm9tICdhcnJheS1zb3J0LWJ5JztcclxuaW1wb3J0IHtUYWJ1bGFyQ29sdW1uVHlwZXN9IGZyb20gJy4vdGFidWxhci1jb2x1bW4uaW50ZXJmYWNlJztcclxuXHJcbmV4cG9ydCBlbnVtIFNvcnRCeURpcmVjdGlvbiB7XHJcbiAgICBBc2NlbmRpbmcsXHJcbiAgICBEZXNjZW5kaW5nLFxyXG4gICAgTm9uZVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElTb3J0QnlQcm9wZXJ0eSB7XHJcbiAgcHJvcGVydHk6IHN0cmluZztcclxuICBkaXJlY3Rpb246IFNvcnRCeURpcmVjdGlvbjtcclxuICB0eXBlOiBUYWJ1bGFyQ29sdW1uVHlwZXM7XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFRhYnVsYXJTb3J0QnlTZXJ2aWNlIHtcclxuXHJcblxyXG4gIHB1YmxpYyBzb3J0Qnkocm93czogSVRhYnVsYXJSb3dbXSA9IFtdLCBzb3J0UHJvcHM6IElTb3J0QnlQcm9wZXJ0eVtdID0gW10pIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBleGFtcGxlIFNvcnRpbmdcclxuICAgICAqIFNvcnRpbmcgQVNDIGJ5IEBuYW1lLCBhZnRlciBERVNDIGJ5IEBhZ2UsIGFmdGVyIEFTQyBieSBAaWRcclxuICAgICAqIGxldCBhcnIgPSBbXHJcbiAgICAgKiB7IGlkOiA5LCBhZ2U6IDI2LCBuYW1lOiAncGVkcm8nIH0sXHJcbiAgICAgKiB7IGlkOiA2LCBhZ2U6IDIxLCBuYW1lOiAnUGVkcm8nIH0sXHJcbiAgICAgKiB7IGlkOiA3LCBhZ2U6IDI2LCBuYW1lOiAnTWFyaWEnIH0sXHJcbiAgICAgKiB7IGlkOiAyLCBhZ2U6IDI2LCBuYW1lOiAnbWFyw61hJyB9XHJcbiAgICAgKiBdO1xyXG4gICAgICogc29ydEJ5KGFyciwgaXRlbSA9PiBbaXRlbS5uYW1lLCAtaXRlbS5hZ2UsIGl0ZW0uaWRdKTtcclxuICAgICAqL1xyXG4gICAgc29ydEJ5KHJvd3MsIGl0ZW0gPT4ge1xyXG4gICAgICBjb25zdCBzb3J0ID0gW107XHJcbiAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBzb3J0UHJvcHMpIHtcclxuICAgICAgICBpZiAocHJvcC50eXBlID09PSBUYWJ1bGFyQ29sdW1uVHlwZXMuU3RyaW5nICYmIHByb3AuZGlyZWN0aW9uID09PSBTb3J0QnlEaXJlY3Rpb24uRGVzY2VuZGluZykge1xyXG4gICAgICAgICAgc29ydC5wdXNoKCdkZXNjOicgKyBpdGVtW3Byb3AucHJvcGVydHldKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHByb3AudHlwZSA9PT0gVGFidWxhckNvbHVtblR5cGVzLk51bWJlciAmJiBwcm9wLmRpcmVjdGlvbiA9PT0gU29ydEJ5RGlyZWN0aW9uLkRlc2NlbmRpbmcpIHtcclxuICAgICAgICAgIHNvcnQucHVzaCgtaXRlbVtwcm9wLnByb3BlcnR5XSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICgocHJvcC50eXBlID09PSBUYWJ1bGFyQ29sdW1uVHlwZXMuRGF0ZSB8fCBwcm9wLnR5cGUgPT09IFRhYnVsYXJDb2x1bW5UeXBlcy5EYXRlVGltZSkgJiYgcHJvcC5kaXJlY3Rpb24gPT09IFNvcnRCeURpcmVjdGlvbi5EZXNjZW5kaW5nKSB7XHJcbiAgICAgICAgICBzb3J0LnB1c2goLW5ldyBEYXRlKGl0ZW1bcHJvcC5wcm9wZXJ0eV0pKTtcclxuICAgICAgICB9IGVsc2UgaWYgKChwcm9wLnR5cGUgPT09IFRhYnVsYXJDb2x1bW5UeXBlcy5EYXRlIHx8IHByb3AudHlwZSA9PT0gVGFidWxhckNvbHVtblR5cGVzLkRhdGVUaW1lKSAmJiBwcm9wLmRpcmVjdGlvbiA9PT0gU29ydEJ5RGlyZWN0aW9uLkFzY2VuZGluZykge1xyXG4gICAgICAgICAgc29ydC5wdXNoKG5ldyBEYXRlKGl0ZW1bcHJvcC5wcm9wZXJ0eV0pKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHByb3AudHlwZSA9PT0gVGFidWxhckNvbHVtblR5cGVzLkh0bWwgJiYgcHJvcC5kaXJlY3Rpb24gPT09IFNvcnRCeURpcmVjdGlvbi5EZXNjZW5kaW5nKSB7XHJcbiAgICAgICAgICBjb25zdCBzb3J0YWJsZVZhbHVlID0gaXRlbVtwcm9wLnByb3BlcnR5XTtcclxuICAgICAgICAgIHNvcnQucHVzaCgnZGVzYzonICsgc29ydGFibGVWYWx1ZS5yZXBsYWNlKC88Lio/Pi9nLCAnJykpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBzb3J0LnB1c2goaXRlbVtwcm9wLnByb3BlcnR5XSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgcmV0dXJuIHNvcnQ7XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxufVxyXG4iXX0=