fix: isolate modal provider layout state - #2755
Open
huytdps13400 wants to merge 1 commit into
Open
Conversation
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.
Motivation
Multiple
BottomSheetModalProviderinstances currently pass the same module-levelINITIAL_CONTAINER_LAYOUTobject intouseSharedValue. Since hosting-container updates mutate that object through.modify(), a nested provider can overwrite the root provider's height and offset, causing later root sheets to dismiss toward the nested container's shorter boundary.This change gives each provider a fresh layout object and a separately cloned mutable
offset. It preserves the existing values and shared-value API while preventing layout measurements from leaking across providers.Fixes #2729.
Verification
masterbecauseuseSharedValuereceived the module singleton directly, then passed after the outer object and nested offset were cloned.yarn typescriptpassed.yarn buildpassed for CommonJS, ESM, and TypeScript declarations; both JavaScript outputs contain the nested clone.yarn biome check --error-on-warnings src/components/bottomSheetModalProvider/BottomSheetModalProvider.tsxpassed.yarn lintremains blocked by the existing optional-chain warning insrc/hooks/useBoundingClientRect.ts:54, outside this diff.The repository currently has no unit-test files or
testscript, so no persistent Jest suite was available. I did not run the nested iOS page-sheet reproduction on a device; runtime UI verification remains outstanding.