@@ -66,6 +66,30 @@ function WorkspaceInviteMessageComponent({
6666} : WorkspaceInviteMessageComponentProps ) {
6767 const styles = useThemeStyles ( ) ;
6868 const { translate, formatPhoneNumber} = useLocalize ( ) ;
69+ const policyName = policy ?. name ;
70+
71+ const isWorkflowApprovalExpensesFromRoute = useMemo ( ( ) => {
72+ if ( ! backTo || typeof backTo !== 'string' ) {
73+ return false ;
74+ }
75+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
76+ return ( backTo as string ) . includes ( CONST . WORKSPACE_WORKFLOWS_APPROVALS_EXPENSES_FROM_ROUTE ) ;
77+ } , [ backTo ] ) ;
78+
79+ const headerTitle = useMemo ( ( ) => {
80+ if ( isWorkflowApprovalExpensesFromRoute ) {
81+ return translate ( 'workflowsExpensesFromPage.title' ) ;
82+ }
83+ return translate ( 'workspace.inviteMessage.confirmDetails' ) ;
84+ } , [ isWorkflowApprovalExpensesFromRoute , translate ] ) ;
85+
86+ const subtitle = useMemo ( ( ) => {
87+ if ( isWorkflowApprovalExpensesFromRoute ) {
88+ return undefined ;
89+ }
90+ return policyName ;
91+ } , [ isWorkflowApprovalExpensesFromRoute , policyName ] ) ;
92+
6993 const [ formData , formDataResult ] = useOnyx ( ONYXKEYS . FORMS . WORKSPACE_INVITE_MESSAGE_FORM_DRAFT , { canBeMissing : true } ) ;
7094 const [ allPersonalDetails ] = useOnyx ( ONYXKEYS . PERSONAL_DETAILS_LIST , { canBeMissing : false } ) ;
7195
@@ -82,22 +106,25 @@ function WorkspaceInviteMessageComponent({
82106 } ) ;
83107 const [ workspaceInviteRoleDraft = CONST . POLICY . ROLE . USER ] = useOnyx ( `${ ONYXKEYS . COLLECTION . WORKSPACE_INVITE_ROLE_DRAFT } ${ policyID } ` , { canBeMissing : true } ) ;
84108 const isOnyxLoading = isLoadingOnyxValue ( workspaceInviteMessageDraftResult , invitedEmailsToAccountIDsDraftResult , formDataResult ) ;
85- const personalDetailsOfInvitedEmails = getPersonalDetailsForAccountIDs ( Object . values ( invitedEmailsToAccountIDsDraft ?? { } ) , allPersonalDetails ?? { } ) ;
86- const memberNames = Object . values ( personalDetailsOfInvitedEmails )
87- . map ( ( personalDetail ) => {
88- const displayName = getDisplayNameOrDefault ( personalDetail , '' , false ) ;
89- if ( displayName ) {
90- return displayName ;
91- }
92109
93- // We don't have login details for users who are not in the database yet
94- // So we need to fallback to their login from the invitedEmailsToAccountIDsDraft
95- const accountID = personalDetail . accountID ;
96- const loginFromInviteMap = Object . entries ( invitedEmailsToAccountIDsDraft ?? { } ) . find ( ( [ , id ] ) => id === accountID ) ?. [ 0 ] ;
110+ const memberNames = useMemo ( ( ) => {
111+ const personalDetailsOfInvitedEmails = getPersonalDetailsForAccountIDs ( Object . values ( invitedEmailsToAccountIDsDraft ?? { } ) , allPersonalDetails ?? { } ) ;
112+ return Object . values ( personalDetailsOfInvitedEmails )
113+ . map ( ( personalDetail ) => {
114+ const displayName = getDisplayNameOrDefault ( personalDetail , '' , false ) ;
115+ if ( displayName ) {
116+ return displayName ;
117+ }
118+
119+ // We don't have login details for users who are not in the database yet
120+ // So we need to fallback to their login from the invitedEmailsToAccountIDsDraft
121+ const accountID = personalDetail . accountID ;
122+ const loginFromInviteMap = Object . entries ( invitedEmailsToAccountIDsDraft ?? { } ) . find ( ( [ , id ] ) => id === accountID ) ?. [ 0 ] ;
97123
98- return loginFromInviteMap ;
99- } )
100- . join ( ', ' ) ;
124+ return loginFromInviteMap ;
125+ } )
126+ . join ( ', ' ) ;
127+ } , [ invitedEmailsToAccountIDsDraft , allPersonalDetails ] ) ;
101128
102129 const welcomeNoteSubject = useMemo (
103130 ( ) => `# ${ currentUserPersonalDetails ?. displayName ?? '' } invited you to ${ policy ?. name ?? 'a workspace' } ` ,
@@ -147,6 +174,21 @@ function WorkspaceInviteMessageComponent({
147174 return ;
148175 }
149176
177+ // If backTo is provided and it's the expenses-from route, navigate to approver screen
178+ if ( isWorkflowApprovalExpensesFromRoute ) {
179+ // Check if it's initial creation flow (backTo doesn't have a nested backTo param)
180+ const backToStr = typeof backTo === 'string' ? backTo : '' ;
181+ const isInitialCreationFlow = ! backToStr . includes ( '/expenses-from/' ) ;
182+ if ( isInitialCreationFlow ) {
183+ // Navigate to approver screen for initial creation flow
184+ Navigation . navigate ( ROUTES . WORKSPACE_WORKFLOWS_APPROVALS_APPROVER . getRoute ( policyID , 0 ) ) ;
185+ } else {
186+ // For edit flow, just go back
187+ Navigation . goBack ( ) ;
188+ }
189+ return ;
190+ }
191+
150192 if ( ( backTo as string ) ?. endsWith ( 'members' ) ) {
151193 Navigation . setNavigationActionToMicrotaskQueue ( ( ) => Navigation . dismissModal ( ) ) ;
152194 return ;
@@ -176,7 +218,6 @@ function WorkspaceInviteMessageComponent({
176218 return errorFields ;
177219 } ;
178220
179- const policyName = policy ?. name ;
180221 const invitingMemberEmail = Object . keys ( invitedEmailsToAccountIDsDraft ?? { } ) . at ( 0 ) ?? '' ;
181222 const invitingMemberDetails = getPersonalDetailByEmail ( invitingMemberEmail ) ;
182223 const invitingMemberName = Str . removeSMSDomain ( invitingMemberDetails ?. displayName ?? '' ) ;
@@ -201,8 +242,8 @@ function WorkspaceInviteMessageComponent({
201242 >
202243 { shouldShowBackButton && (
203244 < HeaderWithBackButton
204- title = { translate ( 'workspace.inviteMessage.confirmDetails' ) }
205- subtitle = { policyName }
245+ title = { headerTitle }
246+ subtitle = { subtitle }
206247 shouldShowBackButton
207248 onCloseButtonPress = { ( ) => Navigation . dismissModal ( ) }
208249 onBackButtonPress = { ( ) => Navigation . goBack ( backTo ) }
@@ -218,7 +259,9 @@ function WorkspaceInviteMessageComponent({
218259 shouldHideFixErrorsAlert
219260 addBottomSafeAreaPadding
220261 >
221- { isInviteNewMemberStep && < Text style = { [ styles . textHeadlineLineHeightXXL , styles . mv3 ] } > { translate ( 'workspace.card.issueNewCard.inviteNewMember' ) } </ Text > }
262+ { ( isInviteNewMemberStep || isWorkflowApprovalExpensesFromRoute ) && (
263+ < Text style = { [ styles . textHeadlineLineHeightXXL , styles . mv3 ] } > { translate ( 'workspace.card.issueNewCard.inviteNewMember' ) } </ Text >
264+ ) }
222265 < View style = { [ styles . mv4 , styles . justifyContentCenter , styles . alignItemsCenter ] } >
223266 < ReportActionAvatars
224267 size = { CONST . AVATAR_SIZE . LARGE }
0 commit comments