Add Concierge to the Side Panel = Concierge Everywhere! - #76277
Conversation
Codecov Report❌ Looks like you've decreased code coverage for some files. Please write tests to increase, or at least maintain, the existing level of code coverage. See our documentation here for how to interpret this table.
|
…ilability and rename displayName for clarity
…bject for sidePanelTranslateX
This comment has been minimized.
This comment has been minimized.
|
🚧 @marcochavezf has triggered a test Expensify/App build. You can view the workflow run here. |
|
🧪🧪 Use the links below to test this adhoc build on Android, iOS, Desktop, and Web. Happy testing! 🧪🧪
|
|
In case of minor bugs, please raise them but we can fix in a follow up early next week 🙏 I'm OOO today and hope there won't be any major problems, thank you all! |
|
Approved. Please fix conflict |
|
Back to you @marcochavezf @marcaaron |
|
✋ 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/marcochavezf in version: 9.2.85-0 🚀
|
|
This PR is failing because of issue ##78171 The issue is reproducible in: Web Bug7034049_1766188543832.1.mp4 |
|
🚀 Deployed to production by https://github.com/marcaaron in version: 9.2.85-7 🚀
|
| } | ||
|
|
||
| linkTo(navigationRef.current, route, options); | ||
| closeSidePanelOnNarrowScreen(); |
There was a problem hiding this comment.
Following the checklist from #82291. This function auto close the Side Panel on narrow screens, which caused the bug described there. We fixed this by preventing the side panel from closing when open the attachment page.
| const CustomFadeIn = useMemo(() => new Keyframe(getModalInAnimation('fadeIn')).duration(CONST.MODAL.ANIMATION_TIMING.DEFAULT_IN), []); | ||
|
|
||
| const CustomFadeOut = useMemo(() => new Keyframe(getModalOutAnimation('fadeOut')).duration(CONST.MODAL.ANIMATION_TIMING.DEFAULT_OUT), []); | ||
| const CustomFadeIn = new Keyframe(getModalInAnimation('fadeIn')).duration(CONST.MODAL.ANIMATION_TIMING.DEFAULT_IN); |
There was a problem hiding this comment.
Flagging a latent bug from this PR, caught in #96580 and fixed by #98982.
SidePanelOverlay.tsx L28-L29 opted the backdrop into reanimated entering/exiting layout animations. On web those keyframes run for only DEFAULT_IN = 1ms, and reanimated's web layout-animation path can leave the element stranded at visibility: hidden.
That one stuck property produces both reported symptoms at once, because the backdrop is both the dimming layer and the outside-press catcher: the page stops being dimmed, and nothing sits above the FAB to intercept the press — so it reads as a frozen page rather than a missing animation.
The fix drops the layout animation entirely; the overlay is already opacity-driven via styles.sidePanelOverlayOpacity(shouldBeVisible), so nothing visual was lost.
Worth a general note for reviewers: a reanimated layout animation on an element that also does hit-testing is risky on web, because a failed animation degrades interactivity and not just appearance.
Explanation of Change
Adds concierge chat into the side panel so users can access it from whatever point for the app. It's part of a bigger project.
Latest slack convo about this.
Fixed Issues
$ #75804
PROPOSAL: N/A
Tests
For now concierge button and side panel will only be accessible on staging/adhoc/locally
Offline tests
N/A
QA Steps
Same as tests
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectioncanBeMissingparam foruseOnyxtoggleReportand notonIconClick)src/languages/*files and using the translation methodSTYLE.md) were followedAvatar, I verified the components usingAvatarare working as expected)StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))npm run compress-svg)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: mWeb Chrome
iOS: mWeb Safari
Simulator.Screen.Recording.-.iPhone.15.Plus.-.2025-12-05.at.17.26.44.mov
MacOS: Chrome / Safari
Screen.Recording.2025-12-05.at.17.19.29.mov