UNPKG

cione-comp-lib

Version:

`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`

113 lines (112 loc) 3.72 kB
import { parseDate, numericToNumber } from "../../util/number.mjs"; import { isNumber, createHashMap, isString, trim, hasOwn } from "../../../../zrender/lib/core/util.mjs"; import { throwError } from "../../util/log.mjs"; function parseDataValue(value, opt) { var dimType = opt && opt.type; if (dimType === "ordinal") { return value; } if (dimType === "time" && !isNumber(value) && value != null && value !== "-") { value = +parseDate(value); } return value == null || value === "" ? NaN : +value; } var valueParserMap = createHashMap({ "number": function(val) { return parseFloat(val); }, "time": function(val) { return +parseDate(val); }, "trim": function(val) { return isString(val) ? trim(val) : val; } }); function getRawValueParser(type) { return valueParserMap.get(type); } var ORDER_COMPARISON_OP_MAP = { lt: function(lval, rval) { return lval < rval; }, lte: function(lval, rval) { return lval <= rval; }, gt: function(lval, rval) { return lval > rval; }, gte: function(lval, rval) { return lval >= rval; } }; var FilterOrderComparator = function() { function FilterOrderComparator2(op, rval) { if (!isNumber(rval)) { var errMsg = ""; throwError(errMsg); } this._opFn = ORDER_COMPARISON_OP_MAP[op]; this._rvalFloat = numericToNumber(rval); } FilterOrderComparator2.prototype.evaluate = function(lval) { return isNumber(lval) ? this._opFn(lval, this._rvalFloat) : this._opFn(numericToNumber(lval), this._rvalFloat); }; return FilterOrderComparator2; }(); var SortOrderComparator = function() { function SortOrderComparator2(order, incomparable) { var isDesc = order === "desc"; this._resultLT = isDesc ? 1 : -1; if (incomparable == null) { incomparable = isDesc ? "min" : "max"; } this._incomparable = incomparable === "min" ? -Infinity : Infinity; } SortOrderComparator2.prototype.evaluate = function(lval, rval) { var lvalFloat = isNumber(lval) ? lval : numericToNumber(lval); var rvalFloat = isNumber(rval) ? rval : numericToNumber(rval); var lvalNotNumeric = isNaN(lvalFloat); var rvalNotNumeric = isNaN(rvalFloat); if (lvalNotNumeric) { lvalFloat = this._incomparable; } if (rvalNotNumeric) { rvalFloat = this._incomparable; } if (lvalNotNumeric && rvalNotNumeric) { var lvalIsStr = isString(lval); var rvalIsStr = isString(rval); if (lvalIsStr) { lvalFloat = rvalIsStr ? lval : 0; } if (rvalIsStr) { rvalFloat = lvalIsStr ? rval : 0; } } return lvalFloat < rvalFloat ? this._resultLT : lvalFloat > rvalFloat ? -this._resultLT : 0; }; return SortOrderComparator2; }(); var FilterEqualityComparator = function() { function FilterEqualityComparator2(isEq, rval) { this._rval = rval; this._isEQ = isEq; this._rvalTypeof = typeof rval; this._rvalFloat = numericToNumber(rval); } FilterEqualityComparator2.prototype.evaluate = function(lval) { var eqResult = lval === this._rval; if (!eqResult) { var lvalTypeof = typeof lval; if (lvalTypeof !== this._rvalTypeof && (lvalTypeof === "number" || this._rvalTypeof === "number")) { eqResult = numericToNumber(lval) === this._rvalFloat; } } return this._isEQ ? eqResult : !eqResult; }; return FilterEqualityComparator2; }(); function createFilterComparator(op, rval) { return op === "eq" || op === "ne" ? new FilterEqualityComparator(op === "eq", rval) : hasOwn(ORDER_COMPARISON_OP_MAP, op) ? new FilterOrderComparator(op, rval) : null; } export { SortOrderComparator, createFilterComparator, getRawValueParser, parseDataValue };