Component | Scatter: MakesizeScale
immutable to prevent sizeRange
collisions
#411
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
sizeScale
config property immutable so that if there is a shared instance toconfig
orconfig.sizeScale
, thesizeRange
property 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. SincesizeScale
is undefined, when it is initialized with the default value in the first component, that becomes the same instance ofsizeScale
for both.This means that despite both components specifying different values for
config.sizeRange
, when the hidden shared reference toconfig.sizeScale
ends up being mutated in the_updateSizeScale
function, it overrides any previous domain or range that was set. For this reason I think we should use a private instance instead of manipulatingconfig.sizeScale
directly.Expected behavior
Given the following two scatters with the same data:
We expect the first to have points ranging in radius from
2-10px
and the second in from4-32px
.Before
After