ferngully-aurelia-tools
Version:
Ferngully Tools for Aurelia
127 lines • 5.16 kB
JavaScript
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