@@ -13,12 +13,16 @@ import useResponsiveLayout from '@hooks/useResponsiveLayout';
13
13
import useTheme from '@hooks/useTheme' ;
14
14
import useThemeStyles from '@hooks/useThemeStyles' ;
15
15
import * as CardUtils from '@libs/CardUtils' ;
16
+ import * as PersonalDetailsUtils from '@libs/PersonalDetailsUtils' ;
16
17
import * as PolicyUtils from '@libs/PolicyUtils' ;
17
18
import Navigation from '@navigation/Navigation' ;
18
19
import variables from '@styles/variables' ;
20
+ import * as CompanyCards from '@userActions/CompanyCards' ;
21
+ import CONST from '@src/CONST' ;
19
22
import ONYXKEYS from '@src/ONYXKEYS' ;
20
23
import ROUTES from '@src/ROUTES' ;
21
24
import type { CompanyCardFeed } from '@src/types/onyx' ;
25
+ import type { AssignCardData , AssignCardStep } from '@src/types/onyx/AssignCard' ;
22
26
23
27
type WorkspaceCompanyCardsListHeaderButtonsProps = {
24
28
/** Current policy id */
@@ -41,6 +45,36 @@ function WorkspaceCompanyCardsListHeaderButtons({policyID, selectedFeed}: Worksp
41
45
const isCustomFeed = CardUtils . isCustomFeed ( selectedFeed ) ;
42
46
const companyFeeds = CardUtils . getCompanyFeeds ( cardFeeds ) ;
43
47
const currentFeedData = companyFeeds ?. [ selectedFeed ] ;
48
+ const policy = PolicyUtils . getPolicy ( policyID ) ;
49
+
50
+ const [ list ] = useOnyx ( `${ ONYXKEYS . COLLECTION . WORKSPACE_CARDS_LIST } ${ workspaceAccountID } _${ selectedFeed } ` ) ;
51
+ const filteredCardList = CardUtils . getFilteredCardList ( list ) ;
52
+
53
+ const handleAssignCard = ( ) => {
54
+ const data : Partial < AssignCardData > = {
55
+ bankName : selectedFeed ,
56
+ } ;
57
+
58
+ let currentStep : AssignCardStep = CONST . COMPANY_CARD . STEP . ASSIGNEE ;
59
+
60
+ if ( Object . keys ( policy ?. employeeList ?? { } ) . length === 1 ) {
61
+ const userEmail = Object . keys ( policy ?. employeeList ?? { } ) . at ( 0 ) ?? '' ;
62
+ data . email = userEmail ;
63
+ const personalDetails = PersonalDetailsUtils . getPersonalDetailByEmail ( userEmail ) ;
64
+ const memberName = personalDetails ?. firstName ? personalDetails . firstName : personalDetails ?. login ;
65
+ data . cardName = `${ memberName } 's card` ;
66
+ currentStep = CONST . COMPANY_CARD . STEP . CARD ;
67
+
68
+ if ( CardUtils . hasOnlyOneCardToAssign ( filteredCardList ) ) {
69
+ currentStep = CONST . COMPANY_CARD . STEP . TRANSACTION_START_DATE ;
70
+ data . cardNumber = Object . keys ( filteredCardList ) . at ( 0 ) ;
71
+ data . encryptedCardNumber = Object . values ( filteredCardList ) . at ( 0 ) ;
72
+ }
73
+ }
74
+
75
+ CompanyCards . setAssignCardStepAndData ( { data, currentStep} ) ;
76
+ Navigation . setNavigationActionToMicrotaskQueue ( ( ) => Navigation . navigate ( ROUTES . WORKSPACE_COMPANY_CARDS_ASSIGN_CARD . getRoute ( policyID , selectedFeed ) ) ) ;
77
+ } ;
44
78
45
79
return (
46
80
< OfflineWithFeedback
@@ -79,7 +113,7 @@ function WorkspaceCompanyCardsListHeaderButtons({policyID, selectedFeed}: Worksp
79
113
< Button
80
114
success
81
115
isDisabled = { ! currentFeedData || ! ! currentFeedData ?. pending || ! ! currentFeedData ?. errors }
82
- onPress = { ( ) => Navigation . navigate ( ROUTES . WORKSPACE_COMPANY_CARDS_ASSIGN_CARD . getRoute ( policyID , selectedFeed ) ) }
116
+ onPress = { handleAssignCard }
83
117
icon = { Expensicons . Plus }
84
118
text = { translate ( 'workspace.companyCards.assignCard' ) }
85
119
style = { shouldChangeLayout && styles . flex1 }
0 commit comments