ferngully-aurelia-tools
Version:
Ferngully Tools for Aurelia
131 lines • 5.76 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";
var SortValueConverter = (function () {
function SortValueConverter(dateService) {
this.dateService = dateService;
}
SortValueConverter.prototype.toView = function (array, columnState, enabled) {
var _this = this;
if (enabled === void 0) { enabled = true; }
var hardcodedInstances = [];
if (!array || !columnState) {
return null;
}
if (!columnState.sortEnabled) {
return array;
}
var factor = columnState.descending ? -1 : 1;
if (columnState.ordinalPositionPropertyName) {
var name_1 = columnState.ordinalPositionPropertyName;
hardcodedInstances = array
.filter(function (instance) {
var propName = instance[name_1];
return (propName !== undefined) && (propName !== null);
});
array = array
.filter(function (instance) {
var propName = instance[name_1];
return (propName === undefined) || (propName === null);
});
}
else {
array = array.slice(0);
}
array.sort(function (a, b) {
return _this.evaluateValues(_this.getEvaluatorForDataType(columnState.dataType), a, b, columnState, factor);
});
if (hardcodedInstances.length && columnState.ordinalPositionPropertyName) {
for (var _i = 0, hardcodedInstances_1 = hardcodedInstances; _i < hardcodedInstances_1.length; _i++) {
var hcInstance = hardcodedInstances_1[_i];
array.splice(hcInstance[columnState.ordinalPositionPropertyName], 0, hcInstance);
}
}
return array;
};
SortValueConverter.prototype.evaluateValues = function (fnEvaluator, a, b, columnState, factor) {
var 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;
};
SortValueConverter.prototype.getColumnValue = function (row, columnState) {
if (!columnState.valueResolver) {
return row[columnState.columnName];
}
else {
return columnState.valueResolver.fnGetRowValue(row, columnState.valueResolver.data);
}
};
SortValueConverter.prototype.getTieBreaker = function (row, columnState) {
return columnState.tieBreakerColumnName ? row[columnState.tieBreakerColumnName] : null;
};
SortValueConverter.prototype.getEvaluatorForDataType = function (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;
}
};
SortValueConverter.prototype.evaluateNumber = function (a, b, factor) {
if (!a && !b)
return 0;
if (!a)
return -factor;
if (!b)
return factor;
return (a - b) * factor;
};
SortValueConverter.prototype.evaluateString = function (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;
};
SortValueConverter.prototype.evaluateDateTime = function (valueA, valueB, factor) {
var a = this.dateService.dateStringToTicks(valueA);
var 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);
return 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