/* * 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 }; } };