Framework - preserve plot state #1002
Open
+188
−102
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Creates a wrapper around
plotly-react
that should make ui state more stable. All this is doing is creating stable copies of provided data and layout objects, and injecting theuirevision
prop to a fixed string if none is given (implementers can still trigger ui-resets by setting the prop manually, if needed).Generally, this makes plots more stable, and partially solves #223, but there are still cases where where the ui ends up resetting, and it's hard to pinpoint exactly what causes it. Some causes seem to be:
populated -> empty -> populated
)plotUpdateReady
prop to stop the component from updating internally while fetchingGenerally, all plot components should be refactored to: keep the plotly comp mounted, memoize data/layout, use the new prop to avoid uneccessary internal state updates
Future work
As mentioned, the uirevision approach is still very unstable. I think this band-aid solution is better than nothing, but we should probably consider a proper react-like ui state wrapper in the future, where we manually track ui changes and store them in the state, reapplying them each render (PR #231 presents a spike for this)