@@ -2616,7 +2616,17 @@ function react(gd, data, layout, config) {
2616
2616
}
2617
2617
2618
2618
if ( configChanged ) {
2619
- plotDone = exports . newPlot ( gd , data , layout , config ) ;
2619
+ // Save event listeners as newPlot will remove them
2620
+ const eventListeners = gd . _ev . eventNames ( ) . map ( name => [ name , gd . _ev . listeners ( name ) ] ) ;
2621
+ plotDone = exports . newPlot ( gd , data , layout , config )
2622
+ . then ( ( ) => {
2623
+ for ( const [ name , callbacks ] of eventListeners ) {
2624
+ callbacks . forEach ( ( cb ) => gd . on ( name , cb ) ) ;
2625
+ }
2626
+
2627
+ // Call react in case transition should have occurred along with config change
2628
+ return exports . react ( gd , data , layout , config )
2629
+ } ) ;
2620
2630
} else {
2621
2631
gd . data = data || [ ] ;
2622
2632
helpers . cleanData ( gd . data ) ;
@@ -2683,7 +2693,7 @@ function react(gd, data, layout, config) {
2683
2693
// only used when 'transition' is set by user and
2684
2694
// when at least one animatable attribute has changed,
2685
2695
// N.B. config changed aren't animatable
2686
- if ( newFullLayout . transition && ! configChanged && ( restyleFlags . anim || relayoutFlags . anim ) ) {
2696
+ if ( newFullLayout . transition && ( restyleFlags . anim || relayoutFlags . anim ) ) {
2687
2697
if ( relayoutFlags . ticks ) seq . push ( subroutines . doTicksRelayout ) ;
2688
2698
2689
2699
Plots . doCalcdata ( gd ) ;
@@ -2692,7 +2702,7 @@ function react(gd, data, layout, config) {
2692
2702
seq . push ( function ( ) {
2693
2703
return Plots . transitionFromReact ( gd , restyleFlags , relayoutFlags , oldFullLayout ) ;
2694
2704
} ) ;
2695
- } else if ( restyleFlags . fullReplot || relayoutFlags . layoutReplot || configChanged ) {
2705
+ } else if ( restyleFlags . fullReplot || relayoutFlags . layoutReplot ) {
2696
2706
gd . _fullLayout . _skipDefaults = true ;
2697
2707
seq . push ( exports . _doPlot ) ;
2698
2708
} else {
@@ -2737,11 +2747,8 @@ function react(gd, data, layout, config) {
2737
2747
}
2738
2748
}
2739
2749
2740
- return plotDone . then ( function ( ) {
2741
- gd . emit ( 'plotly_react' , {
2742
- data : data ,
2743
- layout : layout
2744
- } ) ;
2750
+ return plotDone . then ( ( ) => {
2751
+ if ( ! configChanged ) gd . emit ( 'plotly_react' , { config, data, layout } ) ;
2745
2752
2746
2753
return gd ;
2747
2754
} ) ;
0 commit comments