Don't re-render diff when changing scroll sync #1089
Merged
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.
When toggling whether scrolling was sync'd, the diff views used to re-render and reset their scrolling to the top (so you couldn't, for example, scroll to a position, unsync, and then scroll more on one side). This was happening because changing the setting (re-)creates a new set of transforms, which are different props for the
SandboxedHtmlView
, which then re-sets thesrcdoc
property on itsiframe
. This solves the issue by only re-settingsrcdoc
if we are actually changing it.Ideally we'd also do some caching of transforms so that creating one with the same arguments returns an identical transformer function, but that's a whole other ball of wax with memory management, and is not the only way we can cause this sort of problem. This fix is dumber, but probably more resilient.