Combining issues #2438, #2687, #2644 and #2643 into a single ticket - as all these issues are likely to be fixed once we implement @alexcjohnson 's #2644 (comment) :
I could do various simple things to avoid the particular error seen here (recalc before bailing out of Plotly.plot, or use some other signal besides deleting gd.calcdata, or just check if gd.calcdata exists before trying to relink it) but all of those have problems of various severity with the plot data being out of sync with the displayed plot, which are going to bite us down the line in obvious or subtle ways.
I think the solution is to make something like gd._hoverData and Plots.rehover but for dragging, so we can get rid of that gd._dragging bail out, actually do the replot, then re-establish the partial drag (be it a pan, a zoom, a select...). Obviously this has the potential to be a bit of a project, given all the different dragmode settings; but it would also address the use case of streaming (or otherwise changing independent of user interaction) data.
N.B. the promise rejections comes from:
|
// if the user is trying to drag the axes, allow new data and layout |
|
// to come in but don't allow a replot. |
|
if(gd._dragging && !gd._transitioning) { |
|
// signal to drag handler that after everything else is done |
|
// we need to replot, because something has changed |
|
gd._replotPending = true; |
|
return Promise.reject(); |
|
} else { |
|
// we're going ahead with a replot now |
|
gd._replotPending = false; |
|
} |
Note that this same problem affect panning on graphs with axis.automargin: true: https://codepen.io/etpinard/pen/BGEjwY?editors=0010
Combining issues #2438, #2687, #2644 and #2643 into a single ticket - as all these issues are likely to be fixed once we implement @alexcjohnson 's #2644 (comment) :
N.B. the promise rejections comes from:
plotly.js/src/plot_api/plot_api.js
Lines 139 to 149 in 7bb5daa
Note that this same problem affect panning on graphs with
axis.automargin: true: https://codepen.io/etpinard/pen/BGEjwY?editors=0010