|
/*
|
* Licensed to the Apache Software Foundation (ASF) under one
|
* or more contributor license agreements. See the NOTICE file
|
* distributed with this work for additional information
|
* regarding copyright ownership. The ASF licenses this file
|
* to you under the Apache License, Version 2.0 (the
|
* "License"); you may not use this file except in compliance
|
* with the License. You may obtain a copy of the License at
|
*
|
* http://www.apache.org/licenses/LICENSE-2.0
|
*
|
* Unless required by applicable law or agreed to in writing,
|
* software distributed under the License is distributed on an
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
* KIND, either express or implied. See the License for the
|
* specific language governing permissions and limitations
|
* under the License.
|
*/
|
|
|
/**
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
*/
|
|
/*
|
* Licensed to the Apache Software Foundation (ASF) under one
|
* or more contributor license agreements. See the NOTICE file
|
* distributed with this work for additional information
|
* regarding copyright ownership. The ASF licenses this file
|
* to you under the Apache License, Version 2.0 (the
|
* "License"); you may not use this file except in compliance
|
* with the License. You may obtain a copy of the License at
|
*
|
* http://www.apache.org/licenses/LICENSE-2.0
|
*
|
* Unless required by applicable law or agreed to in writing,
|
* software distributed under the License is distributed on an
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
* KIND, either express or implied. See the License for the
|
* specific language governing permissions and limitations
|
* under the License.
|
*/
|
import { SOURCE_FORMAT_ARRAY_ROWS, SOURCE_FORMAT_OBJECT_ROWS } from '../../util/types.js';
|
import { makePrintable, throwError } from '../../util/log.js';
|
import { each } from 'zrender/lib/core/util.js';
|
import { normalizeToArray } from '../../util/model.js';
|
import { getRawValueParser, SortOrderComparator } from '../../data/helper/dataValueHelper.js';
|
var sampleLog = '';
|
|
if (process.env.NODE_ENV !== 'production') {
|
sampleLog = ['Valid config is like:', '{ dimension: "age", order: "asc" }', 'or [{ dimension: "age", order: "asc"], { dimension: "date", order: "desc" }]'].join(' ');
|
}
|
|
export var sortTransform = {
|
type: 'echarts:sort',
|
transform: function (params) {
|
var upstream = params.upstream;
|
var config = params.config;
|
var errMsg = ''; // Normalize
|
// const orderExprList: OrderExpression[] = isArray(config[0])
|
// ? config as OrderExpression[]
|
// : [config as OrderExpression];
|
|
var orderExprList = normalizeToArray(config);
|
|
if (!orderExprList.length) {
|
if (process.env.NODE_ENV !== 'production') {
|
errMsg = 'Empty `config` in sort transform.';
|
}
|
|
throwError(errMsg);
|
}
|
|
var orderDefList = [];
|
each(orderExprList, function (orderExpr) {
|
var dimLoose = orderExpr.dimension;
|
var order = orderExpr.order;
|
var parserName = orderExpr.parser;
|
var incomparable = orderExpr.incomparable;
|
|
if (dimLoose == null) {
|
if (process.env.NODE_ENV !== 'production') {
|
errMsg = 'Sort transform config must has "dimension" specified.' + sampleLog;
|
}
|
|
throwError(errMsg);
|
}
|
|
if (order !== 'asc' && order !== 'desc') {
|
if (process.env.NODE_ENV !== 'production') {
|
errMsg = 'Sort transform config must has "order" specified.' + sampleLog;
|
}
|
|
throwError(errMsg);
|
}
|
|
if (incomparable && incomparable !== 'min' && incomparable !== 'max') {
|
var errMsg_1 = '';
|
|
if (process.env.NODE_ENV !== 'production') {
|
errMsg_1 = 'incomparable must be "min" or "max" rather than "' + incomparable + '".';
|
}
|
|
throwError(errMsg_1);
|
}
|
|
if (order !== 'asc' && order !== 'desc') {
|
var errMsg_2 = '';
|
|
if (process.env.NODE_ENV !== 'production') {
|
errMsg_2 = 'order must be "asc" or "desc" rather than "' + order + '".';
|
}
|
|
throwError(errMsg_2);
|
}
|
|
var dimInfo = upstream.getDimensionInfo(dimLoose);
|
|
if (!dimInfo) {
|
if (process.env.NODE_ENV !== 'production') {
|
errMsg = makePrintable('Can not find dimension info via: ' + dimLoose + '.\n', 'Existing dimensions: ', upstream.cloneAllDimensionInfo(), '.\n', 'Illegal config:', orderExpr, '.\n');
|
}
|
|
throwError(errMsg);
|
}
|
|
var parser = parserName ? getRawValueParser(parserName) : null;
|
|
if (parserName && !parser) {
|
if (process.env.NODE_ENV !== 'production') {
|
errMsg = makePrintable('Invalid parser name ' + parserName + '.\n', 'Illegal config:', orderExpr, '.\n');
|
}
|
|
throwError(errMsg);
|
}
|
|
orderDefList.push({
|
dimIdx: dimInfo.index,
|
parser: parser,
|
comparator: new SortOrderComparator(order, incomparable)
|
});
|
}); // TODO: support it?
|
|
var sourceFormat = upstream.sourceFormat;
|
|
if (sourceFormat !== SOURCE_FORMAT_ARRAY_ROWS && sourceFormat !== SOURCE_FORMAT_OBJECT_ROWS) {
|
if (process.env.NODE_ENV !== 'production') {
|
errMsg = 'sourceFormat "' + sourceFormat + '" is not supported yet';
|
}
|
|
throwError(errMsg);
|
} // Other upstream format are all array.
|
|
|
var resultData = [];
|
|
for (var i = 0, len = upstream.count(); i < len; i++) {
|
resultData.push(upstream.getRawDataItem(i));
|
}
|
|
resultData.sort(function (item0, item1) {
|
for (var i = 0; i < orderDefList.length; i++) {
|
var orderDef = orderDefList[i];
|
var val0 = upstream.retrieveValueFromItem(item0, orderDef.dimIdx);
|
var val1 = upstream.retrieveValueFromItem(item1, orderDef.dimIdx);
|
|
if (orderDef.parser) {
|
val0 = orderDef.parser(val0);
|
val1 = orderDef.parser(val1);
|
}
|
|
var result = orderDef.comparator.evaluate(val0, val1);
|
|
if (result !== 0) {
|
return result;
|
}
|
}
|
|
return 0;
|
});
|
return {
|
data: resultData
|
};
|
}
|
};
|