Fix calculated dropdown list width #14
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.
The calculated dropdown list width, passed to
calculatePosition()whenappendToBodyis true, should be equal to the toggle width. Width is calculated before the dropdown list is appended tobodyand is still a child of the Select component.If the Select component is mounted within a container that overflows and shows a scrollbar when a child dropdown list is opened, the toggle width is calculated with the scrollbar taken into account and therefore will equal the original toggle width minus the scrollbar width.
Thus
calculatePosition()is given a width less than the toggle width.To fix this discrepancy we mount the dropdown list to
bodybefore the calculation instead of after.The width is calculated when the dropdown list is still a child element of the Select component (although this happens too quickly to see) and before it is appended to
body, a visual example of the DOM state when this happens, by setting:append-to-body="false"andoverflow: autoon the container, can be seen below