Repository navigation
[Payment due @situchan] Open a support ticket straight from the Talk to a human link - #104572
jasperhuangg merged 43 commits into
Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
Reviewer Checklist
Screenshots/VideosAndroid: HybridAppAndroid: mWeb ChromeiOS: HybridAppios.mp4iOS: mWeb SafariMacOS: Chrome / Safariweb.mov |
|
Please ping me when ready for review. Thanks |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 8b33174b58
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
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.
|
|
@situchan its ready for review |
| // eslint-disable-next-line react-hooks/exhaustive-deps | ||
| }, [isOffline]); | ||
|
|
||
| return <FullScreenLoadingIndicator />; |
There was a problem hiding this comment.
❌ UI-1 (docs)
This screen renders FullScreenLoadingIndicator as its sole content with no navigation component (no HeaderWithBackButton or close button) and does not set shouldUseGoBackButton explicitly. If opening the support ticket hangs, the user has no visible escape route. Per UI-1, this prop is being migrated to become the default, so it should be set explicitly for now on pages where no navigation is rendered.
return <FullScreenLoadingIndicator shouldUseGoBackButton />;Reviewed at: 37a9c92 | Please rate this suggestion with 👍 or 👎 to help us improve! Reactions are used to monitor reviewer efficiency.
There was a problem hiding this comment.
@MelvinBot as we discussed here, create separate PR to fix this. shouldUseGoBackButton no longer needs to be set explicitly.
There was a problem hiding this comment.
🤖 I couldn't open the PR. My environment still blocks edits to files under .claude/. The only copy of this rule is .claude/skills/app-coding-standards/rules/ui-1-correct-loading-indicator.md, and it is unchanged on main.
An engineer needs to replace that file with the version you approved in this comment. That version makes these changes:
- It stops flagging a missing
shouldUseGoBackButton, because the prop defaults totrue(FullscreenLoadingIndicator.tsx:38). - It flags a missing
shouldUseGoBackButton={false}only when going back doesn't make sense. Examples include global overlays, sign-in or sign-out transitions, and auth handoff pages. - It still suggests
ActivityIndicatorwhen a header with a back button renders in the same tree.
The file still applies to the current main without edits. Once it merges, the reviewer will stop flagging TalkToHumanPage for this.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 723f39a201
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| // so opening it from here would make Back return to this loader instead of the chat the link was pressed in. | ||
| // A direct link has nothing behind it to return to and goBack would then skip afterTransition, so it falls back | ||
| // to the Help page and opens the ticket from there. | ||
| const fallbackRoute = navigationRef.current?.canGoBack() ? undefined : ROUTES.SETTINGS_HELP; |
There was a problem hiding this comment.
Ignore the injected sidebar when detecting direct links
On a narrow-layout cold load of settings/help/talk-to-human, SplitRouter.adaptStateIfNecessary() prepends SCREENS.SETTINGS.ROOT (the cold-root behavior is also encoded in tests/navigation/GoBackTests.tsx), so this broad canGoBack() check returns true even though there is no originating page. The fallback is therefore omitted, the first Back pops only to Settings root, and openSupportTicket() records settings rather than the intended Help page as the ticket's Back target; determine whether there is outer/in-app history without counting the split navigator's injected sidebar.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Valid but cosmetic: on a cold narrow-layout direct link, Back from the ticket lands on Settings instead of Help. The ticket still opens, and telling the injected sidebar from a real page means reading split-navigator state that differs by layout, so I'm leaving it as is.
dylanexpensify
left a comment
There was a problem hiding this comment.
Looks good from a product perspective
|
@situchan gentle bump! |
|
I'll review shortly. Please fix conflict |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: a6ae82e93b
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 1cb5ed9f42
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
@situchan can you please take another look. i added more testing steps in pr desc
|
|
@MelvinBot review |
Review (
|
| Step | Status |
|---|---|
| ✅ | |
| ✅ | |
Offline, the Talk to a human row is disabledThe row is marked disabled, and pressing it did nothing. |
✅ |
| ✅ | |
| ✅ |
I couldn't test the new no-rep-available steps, because a rep was always free. I also didn't test native or press Back on the wide web layout.
situchan
left a comment
There was a problem hiding this comment.
Looks good.
Thanks for fixing too many edge cases
|
🎯 @situchan, thanks for reviewing and testing this PR! 🎉 A payment issue will be created for your review once this PR is deployed to production. If payment is not needed (e.g., regression PR review fix etc), react with 👎 to this comment to prevent the payment issue from being created. |
Code reviewThe logic looks right, and I found no blocking bugs. One behavior doesn't match the PR description: after you open the link directly, Back lands on Home, not the Help page. 1. Opening the link directly puts Home behind the ticket, not Help The description and Tests step 7 say Back should land on the Help page. Choose one fix:
2. Description wording (minor) "A ref keeps a remount from opening a second ticket" isn't accurate. A ref resets on remount. It stops a second ticket when the effect re-runs on the same page instance. The code comment already says this correctly. Checked and looks good
I didn't run the UI test steps, because each run would create a real support ticket. |
Regression check (
|
|
Codex Review: Didn't find any major issues. Can't wait for the next one! Reviewed commit: ℹ️ About Codex in GitHubCodex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback". |
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
|
🚧 jasperhuangg 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, and Web. Happy testing! 🧪🧪
|
|
🚀 Deployed to staging by https://github.com/jasperhuangg in version: 9.5.25-0 🚀
|
|
No help site update needed: this PR only adds a route that opens the existing Talk to a human support ticket directly, and the Account > Help > Talk to a human path that Concierge-Basics.md describes works the same as before. |
|
🚀 Deployed to production by https://github.com/jasperhuangg in version: 9.5.25-2 🚀
Bundle Size Analysis (Sentry): |
|
🤖 Payment issue created: #105417 |




Explanation of Change
Concierge now ends most replies with a Talk to a human link instead of escalating (Web-Expensify #56788). That link currently lands on Account > Help, where the customer still has to find and press the Talk to a human row. This adds a
settings/help/talk-to-humanroute that performs that step for them, so the link opens a support ticket directly.The ticket logic already existed in
openSupportTicket(); the only new behaviour is an entry point for it. Ticket creation and the no-rep-available fallback to Concierge are extracted intouseOpenSupportTicket, so the Help page row and this route stay identical. A route is used rather than intercepting link presses, so email links, refreshes and mobile deep links all work.The route leaves itself before creating the ticket, so the ticket's Back returns to the chat the link was pressed in instead of this loader. With nothing behind it (a direct link) it falls back to the Help page and opens the ticket from there. Offline returns to the Help page, since ticket creation needs the network, and a ref keeps a remount from opening a second ticket.
Deploy order: this ships before Auth and Web-Expensify, which point the link here.
Fixed Issues
$ https://github.com/Expensify/Expensify/issues/684546
Tests
Test when no rep available:
Offline tests
QA Steps
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectionAvatar, I verified the components usingAvatarare working as expected)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.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: mWeb Chrome
iOS: Native
iOS: mWeb Safari
MacOS: Chrome / Safari
Screen.Recording.2026-10-21.at.8.27.20.PM.mov