@@ -13,20 +13,24 @@ var Lib = require('../../lib');
13
13
14
14
module . exports = function plot ( gd , cdparcoords ) {
15
15
16
+ var gdDimensions = { } ;
16
17
var gdDimensionsOriginalOrder = { } ;
17
18
18
19
var fullLayout = gd . _fullLayout ;
19
20
var svg = fullLayout . _paper ;
20
21
var root = fullLayout . _paperdiv ;
21
22
var data = cdparcoords . map ( function ( d , i ) {
22
23
var item = Lib . extendDeep ( d [ 0 ] ) ;
23
- item . _gdDimensions = gd . data [ i ] . dimensions ;
24
+ gdDimensions [ i ] = gd . data [ i ] . dimensions ;
24
25
gdDimensionsOriginalOrder [ i ] = gd . data [ i ] . dimensions . slice ( ) ;
25
26
return item ;
26
27
} ) ;
27
28
28
29
var filterChanged = function ( i , originalDimensionIndex , newRange ) {
29
30
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
+
30
34
var gdDimension = gdDimensionsOriginalOrder [ i ] [ originalDimensionIndex ] ;
31
35
var gdConstraintRange = gdDimension . constraintrange ;
32
36
if ( ! gdConstraintRange || gdConstraintRange . length !== 2 ) {
@@ -46,7 +50,32 @@ module.exports = function plot(gd, cdparcoords) {
46
50
gd . emit ( 'plotly_unhover' , eventData ) ;
47
51
} ;
48
52
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
+
50
79
gd . emit ( 'plotly_restyle' ) ;
51
80
} ;
52
81
0 commit comments