[iOS] The document picker modal closes after opening
Closed this issue · 3 comments
Bug report
Summary
The document picker opens and then closes the next second. If you try to open it again, it throws the error:
Error: Warning: previous promise did not settle and was overwritten. You've called "pick" while "pick" was already in progress and has not been completed yet.
Reproducible sample code
const result = await DocumentPicker.pickSingle({ allowMultiSelection: false });
Steps to reproduce
- Just call the picker method:
const result = await DocumentPicker.pickSingle({ allowMultiSelection: false });
Describe what you expected to happen:
It should stay opened until some action closes it.
I managed to take a screenshot before the modal closes:
![244049050-45590a4a-4242-46d6-93dd-b2711c811aa1](https://private-user-images.githubusercontent.com/30130573/244148113-bdbe75eb-a240-42b4-b740-4b1855301a42.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjE2NDc2MTEsIm5iZiI6MTcyMTY0NzMxMSwicGF0aCI6Ii8zMDEzMDU3My8yNDQxNDgxMTMtYmRiZTc1ZWItYTI0MC00MmI0LWI3NDAtNGIxODU1MzAxYTQyLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MjIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzIyVDExMjE1MVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWI3MWE0MTZjNDAzZGQ0MzE3ZTBiM2NjNmFjMTE0YWY4MWEzNDdiYWFlYWUzOGY5Yzc2NWIyOTNmZjk5MDk5ZTMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.RrErMPZmdBaqCJX_HwTJnDSt0V0pSA_CrcbmkIDsNUs)
Environment info
npx react-native info
output:
System:
OS: macOS 13.2.1
CPU: (10) arm64 Apple M1 Pro
Memory: 121.94 MB / 16.00 GB
Shell: 5.8.1 - /bin/zsh
Binaries:
Node: 16.20.0 - /opt/homebrew/opt/node@16/bin/node
Yarn: 1.22.19 - /opt/homebrew/bin/yarn
npm: 8.19.4 - /opt/homebrew/opt/node@16/bin/npm
Watchman: 2023.03.27.00 - /opt/homebrew/bin/watchman
Managers:
CocoaPods: 1.12.0 - /opt/homebrew/bin/pod
SDKs:
iOS SDK:
Platforms: DriverKit 22.4, iOS 16.4, macOS 13.3, tvOS 16.4, watchOS 9.4
Android SDK: Not Found
IDEs:
Android Studio: 2022.1 AI-221.6008.13.2211.9619390
Xcode: 14.3.1/14E300c - /usr/bin/xcodebuild
Languages:
Java: 11.0.15 - /usr/bin/javac
npmPackages:
@react-native-community/cli: Not Found
react: 18.2.0 => 18.2.0
react-native: 0.71.8 => 0.71.8
react-native-macos: Not Found
npmGlobalPackages:
*react-native*: Not Found
Library version: 9.0.1
iOS version: 16.4
For those facing the same issue, please ensure that you do not invoke the picker from a modal, bottom sheet, or any other modal-based component. Resolving this problem involves either waiting for the modal to close before invoking the picker or completely avoiding the use of modals when making the picker call.
@vonovak - I was experiencing this issue, and the above recommendation fixed it for me.
I noticed that this scenario was reported in various issues without a reproduction case or solution, would you be interested in adding this detail to the README? I think it could save other developers significant time trying to troubleshoot in the future.
@segicm or @jlocke2 were you by chance launching the document picker from a <ModalSelector>
provided by react-native-modal-selector?
I am seeing the same issue and I am using react-native-modal-selector
to pop a camera/gallery (react-native-image-picker) and document picker (this package). But perhaps this behaviour is common for any Modal.
I did notice some mentions over in react-native-modal-selector
that may be related
In particular 114 as at a total guess what I think is happening is that this document picker is getting launched before the underlying ModalSelector
is dismissed and then when it is dismissed it's also dismissing this document picker.
However we do get desired behaviour with the react-native-image-picker
suggesting that it's potentially possible to launch from a ModalSelector
and not dismiss the desired overlay modal immediately (just guessing here as I haven't deep dived the code yet). Also when I make sure that the underlying ModalSelector
is either completely dismissed before this document picker launches, or is dismissed entirely after this document picker is finished with, then I don't experience the OP behaviour where the document picker is dismissed almost immediately after calling it.
I'll dive a bit deeper on it though.