Component | Scatter: MakesizeScale immutable to prevent sizeRange collisions#411
Merged
Component | Scatter: MakesizeScale immutable to prevent sizeRange collisions#411
sizeScale immutable to prevent sizeRange collisions#411Conversation
Contributor
|
@reb-dev This is great that you were able to find the cause of this problem! Apparently it happened when we switched from using config classes to simple objects and I completely missed it. Did you also check other components for similar initializations? |
Contributor
Author
|
@rokotyan Yes, from what I can tell this is the only instance |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary
This PR makes Scatter's
sizeScaleconfig property immutable so that if there is a shared instance toconfigorconfig.sizeScale, thesizeRangeproperty does not get overridden. More explanation below as it is a bit of an edge case.Background
When trying to figure out why this scatter gallery example looks wrong (i.e. the minimap's points are too large for
sizeRange: [3, 10]), I discovered that the issue comes from using a shared config object between the two charts. SincesizeScaleis undefined, when it is initialized with the default value in the first component, that becomes the same instance ofsizeScalefor both.This means that despite both components specifying different values for
config.sizeRange, when the hidden shared reference toconfig.sizeScaleends up being mutated in the_updateSizeScalefunction, it overrides any previous domain or range that was set. For this reason I think we should use a private instance instead of manipulatingconfig.sizeScaledirectly.Expected behavior
Given the following two scatters with the same data:
We expect the first to have points ranging in radius from
2-10pxand the second in from4-32px.Before
After