From eae444dad9e4b8b6cde256959668dd3fa887fc2f Mon Sep 17 00:00:00 2001
From: archmoj <mojtaba@plot.ly>
Date: Wed, 3 Jul 2019 13:49:39 -0400
Subject: [PATCH] reuse Lib.aggNums in finding extremes

---
 src/traces/parcoords/parcoords.js | 47 ++++++++++++++++---------------
 1 file changed, 25 insertions(+), 22 deletions(-)

diff --git a/src/traces/parcoords/parcoords.js b/src/traces/parcoords/parcoords.js
index ec6f265c91c..ce340d87805 100644
--- a/src/traces/parcoords/parcoords.js
+++ b/src/traces/parcoords/parcoords.js
@@ -27,9 +27,23 @@ var c = require('./constants');
 var brush = require('./axisbrush');
 var lineLayerMaker = require('./lines');
 
+function findExtreme(fn, values, len) {
+    return Lib.aggNums(fn, null, values, len);
+}
+
+function findExtremes(values, len) {
+    return [
+        findExtreme(Math.min, values, len),
+        findExtreme(Math.max, values, len)
+    ];
+}
+
 function dimensionExtent(dimension) {
-    var lo = dimension.range ? dimension.range[0] : Lib.aggNums(Math.min, null, dimension.values, dimension._length);
-    var hi = dimension.range ? dimension.range[1] : Lib.aggNums(Math.max, null, dimension.values, dimension._length);
+    var range = dimension.range;
+    if(!range) range = findExtremes(dimension.values, dimension._length);
+
+    var lo = range[0];
+    var hi = range[1];
 
     if(isNaN(lo) || !isFinite(lo)) {
         lo = 0;
@@ -152,11 +166,13 @@ function model(layout, d, i) {
     var rangeFont = trace.rangefont;
 
     var lines = Lib.extendDeepNoArrays({}, line, {
-        color: lineColor.map(d3.scale.linear().domain(dimensionExtent({
-            values: lineColor,
-            range: [cOpts.min, cOpts.max],
-            _length: trace._length
-        }))),
+        color: lineColor.map(d3.scale.linear().domain(
+            dimensionExtent({
+                values: lineColor,
+                range: [cOpts.min, cOpts.max],
+                _length: trace._length
+            })
+        )),
         blockLineCount: c.blockLineCount,
         canvasOverdrag: c.overdrag * c.canvasPixelRatio
     });
@@ -381,7 +397,6 @@ function calcAllTicks(cd) {
     for(var i = 0; i < cd.length; i++) {
         for(var j = 0; j < cd[i].length; j++) {
             var trace = cd[i][j].trace;
-            var len = trace._length;
             var dimensions = trace.dimensions;
 
             for(var k = 0; k < dimensions.length; k++) {
@@ -389,20 +404,8 @@ function calcAllTicks(cd) {
                 var dim = dimensions[k]._ax;
 
                 if(dim) {
-                    if(!dim.range) {
-                        var max = -Infinity;
-                        var min = Infinity;
-                        for(var q = 0; q < len; q++) {
-                            var v = values[q];
-                            if(isFinite(v)) {
-                                if(max < v) max = v;
-                                if(min > v) min = v;
-                            }
-                        }
-                        dim.range = [min, max];
-                    }
-
-                    if(!dim.dtick) dim.dtick = 0.01 * Math.abs(dim.range[1] - dim.range[0]);
+                    if(!dim.range) dim.range = findExtremes(values, trace._length);
+                    if(!dim.dtick) dim.dtick = 0.01 * (Math.abs(dim.range[1] - dim.range[0]) || 1);
 
                     dim.tickformat = dimensions[k].tickformat;
                     Axes.calcTicks(dim);