add full screen loading indicator context#59519
Conversation
|
@DylanDylann Please copy/paste the Reviewer Checklist from here into a new comment on this PR and complete it. If you have the K2 extension, you can simply click: [this button] |
mountiny
left a comment
There was a problem hiding this comment.
Looks good kicking off a build
| isLoaderVisible: boolean; | ||
| setIsLoaderVisible: React.Dispatch<React.SetStateAction<boolean>>; |
There was a problem hiding this comment.
can you give these docs too please
| }); | ||
|
|
||
| type FullScreenLoaderContextProviderProps = { | ||
| children: ReactNode; |
|
🚧 @mountiny has triggered a test app build. You can view the workflow run here. |
|
@mountiny done |
|
@mountiny The code looks fine to me. But I want to confirm again about the expectation: We will display the loading indicator right after clicking on the Gallery selection or we only display the loading indicator after selecting the image |
|
Currently, we display the loading indicator right after clicking on the Gallery selection Screen.Recording.2025-04-04.at.15.47.06.mov |
Yeah I think that is ok given it might be tricky or hacky to show it only once the modal covers it. I think we can see how its going to feel in the App. @Expensify/design for input too please |
|
🚧 @mountiny has triggered a test app build. You can view the workflow run here. |
This comment has been minimized.
This comment has been minimized.
|
🧪🧪 Use the links below to test this adhoc build on Android, iOS, Desktop, and Web. Happy testing! 🧪🧪 |
Personally I don't mind how this feels, it seems okay to me. Let's see what the other designers think though too. |
|
Yeah it doesn't feel bad to me either. And it's a huge improvement over the previous experience. |
|
I'm with Shawn and Danny. Far better and more obvious what's going on. |
|
Lets go then! thanks for the input! @DylanDylann could you please complete the review and testing? |
Reviewer Checklist
Screenshots/VideosAndroid: NativeScreen.Recording.2025-04-08.at.01.48.56.movAndroid: mWeb ChromeNA iOS: NativeScreen.Recording.2025-04-08.at.01.44.50.moviOS: mWeb SafariNAMacOS: Chrome / SafariNA MacOS: DesktopNA |
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
|
🚀 Deployed to staging by https://github.com/mountiny in version: 9.1.24-2 🚀
|
|
🚀 Deployed to production by https://github.com/jasperhuangg in version: 9.1.24-10 🚀
|
1 similar comment
|
🚀 Deployed to production by https://github.com/jasperhuangg in version: 9.1.24-10 🚀
|
| onPress={() => { | ||
| openPicker({ | ||
| onPicked: (data) => setReceiptAndNavigate(data.at(0) ?? {}), | ||
| onCanceled: () => setIsLoaderVisible(false), |
There was a problem hiding this comment.
onCanceled is not called when things go wrong, which caused #59903
Explanation of Change
In some cases we need to cover entire screen with loader + overlay, but it's difficult due to being dependent on a state that is somewhere deep in the component tree.
Fixed Issues
$ #59347
PROPOSAL:
Tests
Test only on iOS and Android
Offline tests
QA Steps
// TODO: These must be filled out, or the issue title must include "[No QA]."
Same as tests
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectiontoggleReportand notonIconClick)myBool && <MyComponent />.src/languages/*files and using the translation methodSTYLE.md) were followedAvatar, I verified the components usingAvatarare working as expected)StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))Avataris modified, I verified thatAvataris working as expected in all cases)Designlabel and/or tagged@Expensify/designso the design team can review the changes.ScrollViewcomponent to make it scrollable when more elements are added to the page.mainbranch was merged into this PR after a review, I tested again and verified the outcome was still expected according to theTeststeps.Screenshots/Videos
Android: Native
android.mov
Android: mWeb Chrome
iOS: Native
ios.mp4
iOS: mWeb Safari
MacOS: Chrome / Safari
MacOS: Desktop