Skip to content

Commit 3432255

Browse files
authored
Merge pull request Expensify#61038 from callstack-internal/VickyStash/feature/60740-add-OpenPolicyAddCardFeedPage-api-call
[Internal QA] Implement OpenPolicyAddCardFeedPage api call
2 parents 6fdd77d + d1ce406 commit 3432255

5 files changed

Lines changed: 38 additions & 3 deletions

File tree

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
type OpenPolicyAddCardFeedPageParams = {
2+
policyID: string;
3+
};
4+
5+
export default OpenPolicyAddCardFeedPageParams;

src/libs/API/parameters/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,7 @@ export type {default as SetCompanyCardFeedName} from './SetCompanyCardFeedName';
342342
export type {default as DeleteCompanyCardFeed} from './DeleteCompanyCardFeed';
343343
export type {default as SetCompanyCardTransactionLiability} from './SetCompanyCardTransactionLiability';
344344
export type {default as OpenPolicyCompanyCardsFeedParams} from './OpenPolicyCompanyCardsFeedParams';
345+
export type {default as OpenPolicyAddCardFeedPageParams} from './OpenPolicyAddCardFeedPageParams';
345346
export type {default as AssignCompanyCardParams} from './AssignCompanyCardParams';
346347
export type {default as UnassignCompanyCard} from './UnassignCompanyCard';
347348
export type {default as UpdateCompanyCard} from './UpdateCompanyCard';

src/libs/API/types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -445,6 +445,7 @@ const WRITE_COMMANDS = {
445445
SET_COMPANY_CARD_FEED_NAME: 'SetFeedName',
446446
DELETE_COMPANY_CARD_FEED: 'RemoveFeed',
447447
SET_COMPANY_CARD_TRANSACTION_LIABILITY: 'SetFeedTransactionLiability',
448+
OPEN_POLICY_ADD_CARD_FEED_PAGE: 'OpenPolicyAddCardFeedPage',
448449
ASSIGN_COMPANY_CARD: 'AssignCard',
449450
UNASSIGN_COMPANY_CARD: 'UnassignCard',
450451
UPDATE_COMPANY_CARD: 'SyncCard',
@@ -543,6 +544,7 @@ type WriteCommandParameters = {
543544
[WRITE_COMMANDS.UPDATE_COMPANY_CARD_NAME]: Parameters.UpdateCompanyCardNameParams;
544545
[WRITE_COMMANDS.SET_CARD_EXPORT_ACCOUNT]: Parameters.SetCompanyCardExportAccountParams;
545546
[WRITE_COMMANDS.SET_COMPANY_CARD_TRANSACTION_LIABILITY]: Parameters.SetCompanyCardTransactionLiability;
547+
[WRITE_COMMANDS.OPEN_POLICY_ADD_CARD_FEED_PAGE]: Parameters.OpenPolicyAddCardFeedPageParams;
546548
[WRITE_COMMANDS.VERIFY_IDENTITY]: Parameters.VerifyIdentityParams;
547549
[WRITE_COMMANDS.ACCEPT_WALLET_TERMS]: Parameters.AcceptWalletTermsParams;
548550
[WRITE_COMMANDS.ANSWER_QUESTIONS_FOR_WALLET]: Parameters.AnswerQuestionsForWalletParams;

src/libs/actions/CompanyCards.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import Onyx from 'react-native-onyx';
33
import * as API from '@libs/API';
44
import type {
55
AssignCompanyCardParams,
6+
OpenPolicyAddCardFeedPageParams,
67
OpenPolicyCompanyCardsFeedParams,
78
OpenPolicyExpensifyCardsPageParams,
89
RequestFeedSetupParams,
@@ -791,6 +792,18 @@ function openAssignFeedCardPage(policyID: string, feed: CompanyCardFeed, workspa
791792
API.read(READ_COMMANDS.OPEN_ASSIGN_FEED_CARD_PAGE, parameters, {optimisticData, successData, failureData});
792793
}
793794

795+
function openPolicyAddCardFeedPage(policyID: string | undefined) {
796+
if (!policyID) {
797+
return;
798+
}
799+
800+
const parameters: OpenPolicyAddCardFeedPageParams = {
801+
policyID,
802+
};
803+
804+
API.write(WRITE_COMMANDS.OPEN_POLICY_ADD_CARD_FEED_PAGE, parameters);
805+
}
806+
794807
export {
795808
setWorkspaceCompanyCardFeedName,
796809
deleteWorkspaceCompanyCardFeed,
@@ -809,5 +822,6 @@ export {
809822
setAssignCardStepAndData,
810823
clearAssignCardStepAndData,
811824
openAssignFeedCardPage,
825+
openPolicyAddCardFeedPage,
812826
setTransactionStartDate,
813827
};

src/pages/workspace/companyCards/addNew/AddNewCardPage.tsx

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1-
import React from 'react';
1+
import React, {useEffect} from 'react';
22
import {useOnyx} from 'react-native-onyx';
33
import DelegateNoAccessWrapper from '@components/DelegateNoAccessWrapper';
44
import ScreenWrapper from '@components/ScreenWrapper';
5+
import useWorkspaceAccountID from '@hooks/useWorkspaceAccountID';
56
import BankConnection from '@pages/workspace/companyCards/BankConnection';
67
import withPolicyAndFullscreenLoading from '@pages/workspace/withPolicyAndFullscreenLoading';
78
import type {WithPolicyAndFullscreenLoadingProps} from '@pages/workspace/withPolicyAndFullscreenLoading';
9+
import {openPolicyAddCardFeedPage} from '@userActions/CompanyCards';
810
import CONST from '@src/CONST';
911
import ONYXKEYS from '@src/ONYXKEYS';
1012
import AmexCustomFeed from './AmexCustomFeed';
@@ -17,10 +19,21 @@ import SelectFeedType from './SelectFeedType';
1719

1820
function AddNewCardPage({policy}: WithPolicyAndFullscreenLoadingProps) {
1921
const policyID = policy?.id;
20-
const [addNewCardFeed] = useOnyx(ONYXKEYS.ADD_NEW_COMPANY_CARD);
22+
const workspaceAccountID = useWorkspaceAccountID(policyID);
23+
const [addNewCardFeed] = useOnyx(ONYXKEYS.ADD_NEW_COMPANY_CARD, {canBeMissing: false});
2124
const {currentStep} = addNewCardFeed ?? {};
2225

23-
const [isActingAsDelegate] = useOnyx(ONYXKEYS.ACCOUNT, {selector: (account) => !!account?.delegatedAccess?.delegate});
26+
const [isActingAsDelegate] = useOnyx(ONYXKEYS.ACCOUNT, {selector: (account) => !!account?.delegatedAccess?.delegate, canBeMissing: false});
27+
28+
useEffect(() => {
29+
// If the user only has a domain feed, a workspace account may not have been created yet.
30+
// However, adding a workspace feed requires a workspace account.
31+
// Calling openPolicyAddCardFeedPage will trigger the creation of a workspace account.
32+
if (workspaceAccountID) {
33+
return;
34+
}
35+
openPolicyAddCardFeedPage(policyID);
36+
}, [workspaceAccountID, policyID]);
2437

2538
if (isActingAsDelegate) {
2639
return (

0 commit comments

Comments
 (0)