UNPKG

ferngully-aurelia-tools

Version:

Ferngully Tools for Aurelia

127 lines 5.16 kB
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; import { DateService } from "../../services/date-service"; import { autoinject } from "aurelia-framework"; let SortValueConverter = class SortValueConverter { constructor(dateService) { this.dateService = dateService; } toView(array, columnState, enabled = true) { let hardcodedInstances = []; if (!array || !columnState) { return null; } if (!columnState.sortEnabled) { return array; } let factor = columnState.descending ? -1 : 1; if (columnState.ordinalPositionPropertyName) { let name = columnState.ordinalPositionPropertyName; hardcodedInstances = array .filter((instance) => { var propName = instance[name]; return (propName !== undefined) && (propName !== null); }); array = array .filter((instance) => { var propName = instance[name]; return (propName === undefined) || (propName === null); }); } else { array = array.slice(0); } array.sort((a, b) => { return this.evaluateValues(this.getEvaluatorForDataType(columnState.dataType), a, b, columnState, factor); }); if (hardcodedInstances.length && columnState.ordinalPositionPropertyName) { for (let hcInstance of hardcodedInstances) { array.splice(hcInstance[columnState.ordinalPositionPropertyName], 0, hcInstance); } } return array; } evaluateValues(fnEvaluator, a, b, columnState, factor) { let result = fnEvaluator.call(this, this.getColumnValue(a, columnState), this.getColumnValue(b, columnState), factor); if ((result === 0) && columnState.tieBreakerColumnName) { result = this.getEvaluatorForDataType(columnState.tieBreakerDataType).call(this, this.getTieBreaker(a, columnState), this.getTieBreaker(b, columnState), factor); } return result; } getColumnValue(row, columnState) { if (!columnState.valueResolver) { return row[columnState.columnName]; } else { return columnState.valueResolver.fnGetRowValue(row, columnState.valueResolver.data); } } getTieBreaker(row, columnState) { return columnState.tieBreakerColumnName ? row[columnState.tieBreakerColumnName] : null; } getEvaluatorForDataType(dataType) { switch (dataType) { case SortDataType.boolean: case SortDataType.number: case SortDataType.integer: default: return this.evaluateNumber; case SortDataType.datetime: return this.evaluateDateTime; case SortDataType.string: return this.evaluateString; } } evaluateNumber(a, b, factor) { if (!a && !b) return 0; if (!a) return -factor; if (!b) return factor; return (a - b) * factor; } evaluateString(a, b, factor) { if (!a && !b) return 0; if (!a) return -factor; if (!b) return factor; a = a.toLowerCase(); b = b.toLowerCase(); return a.localeCompare(b) * factor; } evaluateDateTime(valueA, valueB, factor) { let a = this.dateService.dateStringToTicks(valueA); let b = this.dateService.dateStringToTicks(valueB); if (!a && !b) return 0; if (!a) return -factor; if (!b) return factor; return (a - b) * factor; } }; SortValueConverter = __decorate([ autoinject, __metadata("design:paramtypes", [DateService]) ], SortValueConverter); export { SortValueConverter }; export var SortDataType; (function (SortDataType) { SortDataType[SortDataType["string"] = 1] = "string"; SortDataType[SortDataType["number"] = 2] = "number"; SortDataType[SortDataType["datetime"] = 3] = "datetime"; SortDataType[SortDataType["boolean"] = 4] = "boolean"; SortDataType[SortDataType["integer"] = 5] = "integer"; })(SortDataType || (SortDataType = {})); //# sourceMappingURL=sort.js.map