-
Notifications
You must be signed in to change notification settings - Fork 3.9k
[Side Panel] Concierge Everywhere AB tests #79122
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
marcochavezf
merged 22 commits into
Expensify:main
from
software-mansion-labs:concierge-everywhere-ab-tests
Jan 13, 2026
Merged
Changes from all commits
Commits
Show all changes
22 commits
Select commit
Hold shift + click to select a range
90181f2
Add onboarding RHP variant type for A/B/C testing
blazejkustra 47a5f50
Introduce SidePanelReport component to display any report.
blazejkustra 886a5b2
Remove unused SidePanelContent type and related content property from…
blazejkustra 615d2de
Add ONBOARDING_RHP_VARIANT constants for new onboarding variants
blazejkustra 24a91f5
Refactor onboarding process to include waitForWrites for write comman…
blazejkustra 2ffa3cd
Handle side panel navigation with specific content.
blazejkustra c763497
Fix lint
blazejkustra 04bef66
Fix prettier
blazejkustra b26735a
Refactor SidePanel navigation logic to simplify opening behavior and …
blazejkustra d2c5721
Check if policy is deleted
blazejkustra b8e6a54
Update SidePanelContextProvider to use emailSelector for session emai…
blazejkustra c4a4459
Add COMPLETE_GUIDED_SETUP command and update completeOnboarding logic…
blazejkustra 053d812
Update onboarding feature to include shouldWaitForRHPVariantInitializ…
blazejkustra 5cc2b91
Update waitForWrites function to handle SideEffectRequestCommand and …
blazejkustra fdd971e
Enhance onboarding navigation logic to restrict RHP variant navigatio…
blazejkustra fa86fe1
Merge branch 'main' of github.com:Expensify/App into concierge-everyw…
blazejkustra 5d4ac5b
Merge branch 'main' of github.com:Expensify/App into concierge-everyw…
blazejkustra 40e1fe3
Move RHP Variant logic to a separate file and integrate with AdminTes…
blazejkustra c53d48c
Add RHP Variant logic for native platform with no-op implementations
blazejkustra 042cb72
Add isSidePanelReportSupported logic with type definitions and integr…
blazejkustra 96da54f
Merge branch 'main' of github.com:Expensify/App into concierge-everyw…
blazejkustra 08b8da5
Refactor onboarding logic to include error handling and logging. Adde…
blazejkustra File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Some comments aren't visible on the classic Files Changed page.
There are no files selected for viewing
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
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
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,13 @@ | ||
| import type {HandleRHPVariantNavigation, ShouldOpenRHPVariant} from './types'; | ||
|
|
||
| /** | ||
| * Side Panel is not supported on native platforms, so we always return false. | ||
| */ | ||
| const shouldOpenRHPVariant: ShouldOpenRHPVariant = () => false; | ||
|
|
||
| /** | ||
| * No-op on native platforms since Side Panel is not supported. | ||
| */ | ||
| const handleRHPVariantNavigation: HandleRHPVariantNavigation = () => {}; | ||
|
|
||
| export {shouldOpenRHPVariant, handleRHPVariantNavigation}; |
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,55 @@ | ||
| import Onyx from 'react-native-onyx'; | ||
| import type {OnyxEntry} from 'react-native-onyx'; | ||
| import SidePanelActions from '@libs/actions/SidePanel'; | ||
| import Navigation from '@libs/Navigation/Navigation'; | ||
| import CONST from '@src/CONST'; | ||
| import ONYXKEYS from '@src/ONYXKEYS'; | ||
| import ROUTES from '@src/ROUTES'; | ||
| import type {OnboardingRHPVariant} from '@src/types/onyx'; | ||
| import type {HandleRHPVariantNavigation, ShouldOpenRHPVariant} from './types'; | ||
|
|
||
| let onboardingRHPVariant: OnyxEntry<OnboardingRHPVariant>; | ||
| let onboardingCompanySize: OnyxEntry<string>; | ||
|
|
||
| // We use Onyx.connectWithoutView because we do not use this in React components and this logic is not tied directly to the UI. | ||
| Onyx.connectWithoutView({ | ||
| key: ONYXKEYS.NVP_ONBOARDING_RHP_VARIANT, | ||
| callback: (value) => { | ||
| onboardingRHPVariant = value; | ||
| }, | ||
| }); | ||
|
|
||
| Onyx.connectWithoutView({ | ||
| key: ONYXKEYS.ONBOARDING_COMPANY_SIZE, | ||
| callback: (value) => { | ||
| onboardingCompanySize = value; | ||
| }, | ||
| }); | ||
|
|
||
| /** | ||
| * Determines if the user should be navigated to the RHP variant side panel after onboarding. | ||
| * The RHP variant is only shown to micro companies that are part of the RHP experiment. | ||
| */ | ||
| const shouldOpenRHPVariant: ShouldOpenRHPVariant = () => { | ||
| const isMicroCompany = onboardingCompanySize === CONST.ONBOARDING_COMPANY_SIZE.MICRO; | ||
| const isRHPConciergeDM = onboardingRHPVariant === CONST.ONBOARDING_RHP_VARIANT.RHP_CONCIERGE_DM; | ||
| const isRHPAdminsRoom = onboardingRHPVariant === CONST.ONBOARDING_RHP_VARIANT.RHP_ADMINS_ROOM; | ||
|
|
||
| return isMicroCompany && (isRHPConciergeDM || isRHPAdminsRoom); | ||
| }; | ||
|
|
||
| /** | ||
| * Handles navigation for RHP experiment: | ||
| * - Control: navigate to the last accessed report on small screens, do not open side panel | ||
| * - RHP Concierge DM: navigate to the workspace overview and open the side panel with the Concierge DM | ||
| * - RHP Admins Room: navigate to the workspace overview and open the side panel with the Admins Room | ||
| */ | ||
| const handleRHPVariantNavigation: HandleRHPVariantNavigation = (onboardingPolicyID) => { | ||
| Navigation.navigate(ROUTES.WORKSPACE_OVERVIEW.getRoute(onboardingPolicyID)); | ||
| SidePanelActions.openSidePanel(true); | ||
| Navigation.isNavigationReady().then(() => { | ||
| Navigation.navigate(ROUTES.TEST_DRIVE_MODAL_ROOT.route); | ||
| }); | ||
| }; | ||
|
|
||
| export {shouldOpenRHPVariant, handleRHPVariantNavigation}; | ||
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,4 @@ | ||
| type ShouldOpenRHPVariant = () => boolean; | ||
| type HandleRHPVariantNavigation = (onboardingPolicyID?: string) => void; | ||
|
|
||
| export type {ShouldOpenRHPVariant, HandleRHPVariantNavigation}; |
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
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
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
5 changes: 5 additions & 0 deletions
5
src/components/SidePanel/isSidePanelReportSupported/index.native.ts
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,5 @@ | ||
| import type IsSidePanelReportSupported from './types'; | ||
|
|
||
| const isSidePanelReportSupported: IsSidePanelReportSupported = false; | ||
|
|
||
| export default isSidePanelReportSupported; |
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,5 @@ | ||
| import type IsSidePanelReportSupported from './types'; | ||
|
|
||
| const isSidePanelReportSupported: IsSidePanelReportSupported = true; | ||
|
|
||
| export default isSidePanelReportSupported; |
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,3 @@ | ||
| type IsSidePanelReportSupported = boolean; | ||
|
|
||
| export default IsSidePanelReportSupported; |
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
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
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
Oops, something went wrong.
Oops, something went wrong.
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not sure if guys working on
Onyx.connectdeprecation will mark this as regressionThere was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We should not use even
connectWithoutView. And why is this file in/componentsfolder as all the functions are utils, not connected to UI.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In this case I would advise against using useOnyx, It's just a beta that will be removed in couple of weeks/months. It's much easier to keep the logic in one place instead of using useOnyx and making a bigger refactor.
The whole project is blocked by this so I would prefer to continue with this approach, wdyt @marcochavezf?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ok, I think that reason would be enough to treat this as not regression.
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yup, I agree with @blazejkustra that we should continue with this approach. This is a temporary A/B experiment, and we will update the code again once we have a winning variant (which hopefully can be seen in a couple of weeks)