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