@@ -13,20 +13,24 @@ var Lib = require('../../lib');
1313
1414module . exports = function plot ( gd , cdparcoords ) {
1515
16+ var gdDimensions = { } ;
1617 var gdDimensionsOriginalOrder = { } ;
1718
1819 var fullLayout = gd . _fullLayout ;
1920 var svg = fullLayout . _paper ;
2021 var root = fullLayout . _paperdiv ;
2122 var data = cdparcoords . map ( function ( d , i ) {
2223 var item = Lib . extendDeep ( d [ 0 ] ) ;
23- item . _gdDimensions = gd . data [ i ] . dimensions ;
24+ gdDimensions [ i ] = gd . data [ i ] . dimensions ;
2425 gdDimensionsOriginalOrder [ i ] = gd . data [ i ] . dimensions . slice ( ) ;
2526 return item ;
2627 } ) ;
2728
2829 var filterChanged = function ( i , originalDimensionIndex , newRange ) {
2930
31+ // Have updated `constraintrange` data on `gd.data` and raise `Plotly.restyle` event
32+ // without having to incur heavy UI blocking due to an actual `Plotly.restyle` call
33+
3034 var gdDimension = gdDimensionsOriginalOrder [ i ] [ originalDimensionIndex ] ;
3135 var gdConstraintRange = gdDimension . constraintrange ;
3236 if ( ! gdConstraintRange || gdConstraintRange . length !== 2 ) {
@@ -46,7 +50,32 @@ module.exports = function plot(gd, cdparcoords) {
4650 gd . emit ( 'plotly_unhover' , eventData ) ;
4751 } ;
4852
49- var axesMoved = function ( ) {
53+ var axesMoved = function ( i , visibleIndices ) {
54+
55+ // Have updated order data on `gd.data` and raise `Plotly.restyle` event
56+ // without having to incur heavy UI blocking due to an actual `Plotly.restyle` call
57+
58+ function newIdx ( visibleIndices , orig , dim ) {
59+ var origIndex = orig . indexOf ( dim ) ;
60+ var currentIndex = visibleIndices . indexOf ( origIndex ) ;
61+ if ( currentIndex === - 1 ) {
62+ // invisible dimensions go to the end, retaining their original order
63+ currentIndex += orig . length ;
64+ }
65+ return currentIndex ;
66+ }
67+
68+ function sorter ( orig ) {
69+ return function sorter ( d1 , d2 ) {
70+ var i1 = newIdx ( visibleIndices , orig , d1 ) ;
71+ var i2 = newIdx ( visibleIndices , orig , d2 ) ;
72+ return i1 - i2 ;
73+ } ;
74+ }
75+
76+ var orig = sorter ( gdDimensionsOriginalOrder [ i ] . filter ( function ( d ) { return d . visible === void ( 0 ) || d . visible ; } ) ) ;
77+ gdDimensions [ i ] . sort ( orig ) ;
78+
5079 gd . emit ( 'plotly_restyle' ) ;
5180 } ;
5281
0 commit comments