Skip to content

Commit dc7bd0e

Browse files
authored
Merge pull request #55269 from callstack-internal/add-is-feed-expired-check-to-members-issue-new-card-page
2 parents 64ed6a5 + 07697cb commit dc7bd0e

File tree

2 files changed

+32
-28
lines changed

2 files changed

+32
-28
lines changed

src/pages/workspace/companyCards/WorkspaceCompanyCardsPage.tsx

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@ import useLocalize from '@hooks/useLocalize';
88
import useNetwork from '@hooks/useNetwork';
99
import useTheme from '@hooks/useTheme';
1010
import useThemeStyles from '@hooks/useThemeStyles';
11-
import * as CardUtils from '@libs/CardUtils';
11+
import {getCompanyFeeds, getFilteredCardList, getSelectedFeed, hasOnlyOneCardToAssign, isSelectedFeedExpired} from '@libs/CardUtils';
1212
import Navigation from '@libs/Navigation/Navigation';
1313
import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types';
1414
import type {FullScreenNavigatorParamList} from '@libs/Navigation/types';
15-
import * as PersonalDetailsUtils from '@libs/PersonalDetailsUtils';
16-
import * as PolicyUtils from '@libs/PolicyUtils';
15+
import {getPersonalDetailByEmail} from '@libs/PersonalDetailsUtils';
16+
import {getWorkspaceAccountID, isDeletedPolicyEmployee} from '@libs/PolicyUtils';
1717
import AccessOrNotFoundWrapper from '@pages/workspace/AccessOrNotFoundWrapper';
1818
import WorkspacePageWithSections from '@pages/workspace/WorkspacePageWithSections';
19-
import * as CompanyCards from '@userActions/CompanyCards';
19+
import {openPolicyCompanyCardsFeed, openPolicyCompanyCardsPage, setAssignCardStepAndData} from '@userActions/CompanyCards';
2020
import CONST from '@src/CONST';
2121
import ONYXKEYS from '@src/ONYXKEYS';
2222
import ROUTES from '@src/ROUTES';
@@ -35,10 +35,10 @@ function WorkspaceCompanyCardPage({route}: WorkspaceCompanyCardPageProps) {
3535
const styles = useThemeStyles();
3636
const theme = useTheme();
3737
const policyID = route.params.policyID;
38-
const workspaceAccountID = PolicyUtils.getWorkspaceAccountID(policyID);
38+
const workspaceAccountID = getWorkspaceAccountID(policyID);
3939
const [lastSelectedFeed] = useOnyx(`${ONYXKEYS.COLLECTION.LAST_SELECTED_FEED}${policyID}`);
4040
const [cardFeeds] = useOnyx(`${ONYXKEYS.COLLECTION.SHARED_NVP_PRIVATE_DOMAIN_MEMBER}${workspaceAccountID}`);
41-
const selectedFeed = CardUtils.getSelectedFeed(lastSelectedFeed, cardFeeds);
41+
const selectedFeed = getSelectedFeed(lastSelectedFeed, cardFeeds);
4242
const [cardsList] = useOnyx(`${ONYXKEYS.COLLECTION.WORKSPACE_CARDS_LIST}${workspaceAccountID}_${selectedFeed}`);
4343

4444
const {cardList, ...cards} = cardsList ?? {};
@@ -47,17 +47,17 @@ function WorkspaceCompanyCardPage({route}: WorkspaceCompanyCardPageProps) {
4747
const [isActingAsDelegate] = useOnyx(ONYXKEYS.ACCOUNT, {selector: (account) => !!account?.delegatedAccess?.delegate});
4848
const [isNoDelegateAccessMenuVisible, setIsNoDelegateAccessMenuVisible] = useState(false);
4949

50-
const filteredCardList = CardUtils.getFilteredCardList(cardsList, selectedFeed ? cardFeeds?.settings?.oAuthAccountDetails?.[selectedFeed] : undefined);
50+
const filteredCardList = getFilteredCardList(cardsList, selectedFeed ? cardFeeds?.settings?.oAuthAccountDetails?.[selectedFeed] : undefined);
5151

52-
const companyCards = CardUtils.getCompanyFeeds(cardFeeds);
52+
const companyCards = getCompanyFeeds(cardFeeds);
5353
const selectedFeedData = selectedFeed && companyCards[selectedFeed];
5454
const isNoFeed = !selectedFeedData;
5555
const isPending = !!selectedFeedData?.pending;
5656
const isFeedAdded = !isPending && !isNoFeed;
57-
const isFeedExpired = CardUtils.isSelectedFeedExpired(selectedFeed ? cardFeeds?.settings?.oAuthAccountDetails?.[selectedFeed] : undefined);
57+
const isFeedExpired = isSelectedFeedExpired(selectedFeed ? cardFeeds?.settings?.oAuthAccountDetails?.[selectedFeed] : undefined);
5858

5959
const fetchCompanyCards = useCallback(() => {
60-
CompanyCards.openPolicyCompanyCardsPage(policyID, workspaceAccountID);
60+
openPolicyCompanyCardsPage(policyID, workspaceAccountID);
6161
}, [policyID, workspaceAccountID]);
6262

6363
const {isOffline} = useNetwork({onReconnect: fetchCompanyCards});
@@ -70,7 +70,7 @@ function WorkspaceCompanyCardPage({route}: WorkspaceCompanyCardPageProps) {
7070
return;
7171
}
7272

73-
CompanyCards.openPolicyCompanyCardsFeed(policyID, selectedFeed);
73+
openPolicyCompanyCardsFeed(policyID, selectedFeed);
7474
}, [selectedFeed, isLoading, policyID, isPending]);
7575

7676
const handleAssignCard = () => {
@@ -86,17 +86,17 @@ function WorkspaceCompanyCardPage({route}: WorkspaceCompanyCardPageProps) {
8686
};
8787

8888
let currentStep: AssignCardStep = CONST.COMPANY_CARD.STEP.ASSIGNEE;
89-
const employeeList = Object.values(policy?.employeeList ?? {}).filter((employee) => !PolicyUtils.isDeletedPolicyEmployee(employee, isOffline));
89+
const employeeList = Object.values(policy?.employeeList ?? {}).filter((employee) => !isDeletedPolicyEmployee(employee, isOffline));
9090

9191
if (employeeList.length === 1) {
9292
const userEmail = Object.keys(policy?.employeeList ?? {}).at(0) ?? '';
9393
data.email = userEmail;
94-
const personalDetails = PersonalDetailsUtils.getPersonalDetailByEmail(userEmail);
94+
const personalDetails = getPersonalDetailByEmail(userEmail);
9595
const memberName = personalDetails?.firstName ? personalDetails.firstName : personalDetails?.login;
9696
data.cardName = `${memberName}'s card`;
9797
currentStep = CONST.COMPANY_CARD.STEP.CARD;
9898

99-
if (CardUtils.hasOnlyOneCardToAssign(filteredCardList)) {
99+
if (hasOnlyOneCardToAssign(filteredCardList)) {
100100
currentStep = CONST.COMPANY_CARD.STEP.TRANSACTION_START_DATE;
101101
data.cardNumber = Object.keys(filteredCardList).at(0);
102102
data.encryptedCardNumber = Object.values(filteredCardList).at(0);
@@ -107,7 +107,7 @@ function WorkspaceCompanyCardPage({route}: WorkspaceCompanyCardPageProps) {
107107
currentStep = CONST.COMPANY_CARD.STEP.BANK_CONNECTION;
108108
}
109109

110-
CompanyCards.setAssignCardStepAndData({data, currentStep});
110+
setAssignCardStepAndData({data, currentStep});
111111
Navigation.setNavigationActionToMicrotaskQueue(() => Navigation.navigate(ROUTES.WORKSPACE_COMPANY_CARDS_ASSIGN_CARD.getRoute(policyID, selectedFeed)));
112112
};
113113

src/pages/workspace/members/WorkspaceMemberNewCardPage.tsx

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,17 @@ import RadioListItem from '@components/SelectionList/RadioListItem';
1010
import type {ListItem} from '@components/SelectionList/types';
1111
import useLocalize from '@hooks/useLocalize';
1212
import useThemeStyles from '@hooks/useThemeStyles';
13-
import * as CardUtils from '@libs/CardUtils';
13+
import {getCardFeedIcon, getCompanyFeeds, getCustomOrFormattedFeedName, getFilteredCardList, hasOnlyOneCardToAssign, isSelectedFeedExpired} from '@libs/CardUtils';
1414
import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types';
1515
import type {SettingsNavigatorParamList} from '@libs/Navigation/types';
16-
import * as PolicyUtils from '@libs/PolicyUtils';
16+
import {getPolicy, getWorkspaceAccountID} from '@libs/PolicyUtils';
1717
import Navigation from '@navigation/Navigation';
1818
import AccessOrNotFoundWrapper from '@pages/workspace/AccessOrNotFoundWrapper';
1919
import type {WithPolicyAndFullscreenLoadingProps} from '@pages/workspace/withPolicyAndFullscreenLoading';
2020
import withPolicyAndFullscreenLoading from '@pages/workspace/withPolicyAndFullscreenLoading';
2121
import variables from '@styles/variables';
22-
import * as Card from '@userActions/Card';
23-
import * as CompanyCards from '@userActions/CompanyCards';
22+
import {setIssueNewCardStepAndData} from '@userActions/Card';
23+
import {setAssignCardStepAndData} from '@userActions/CompanyCards';
2424
import CONST from '@src/CONST';
2525
import ONYXKEYS from '@src/ONYXKEYS';
2626
import ROUTES from '@src/ROUTES';
@@ -37,8 +37,8 @@ type WorkspaceMemberNewCardPageProps = WithPolicyAndFullscreenLoadingProps & Pla
3737

3838
function WorkspaceMemberNewCardPage({route, personalDetails}: WorkspaceMemberNewCardPageProps) {
3939
const {policyID} = route.params;
40-
const policy = PolicyUtils.getPolicy(policyID);
41-
const workspaceAccountID = PolicyUtils.getWorkspaceAccountID(policyID);
40+
const policy = getPolicy(policyID);
41+
const workspaceAccountID = getWorkspaceAccountID(policyID);
4242

4343
const {translate} = useLocalize();
4444
const styles = useThemeStyles();
@@ -49,18 +49,19 @@ function WorkspaceMemberNewCardPage({route, personalDetails}: WorkspaceMemberNew
4949
const accountID = Number(route.params.accountID);
5050
const memberLogin = personalDetails?.[accountID]?.login ?? '';
5151
const memberName = personalDetails?.[accountID]?.firstName ? personalDetails?.[accountID]?.firstName : personalDetails?.[accountID]?.login;
52-
const companyFeeds = CardUtils.getCompanyFeeds(cardFeeds);
52+
const companyFeeds = getCompanyFeeds(cardFeeds);
53+
const isFeedExpired = isSelectedFeedExpired((selectedFeed as CompanyCardFeed) ? cardFeeds?.settings?.oAuthAccountDetails?.[selectedFeed as CompanyCardFeed] : undefined);
5354

5455
const [list] = useOnyx(`${ONYXKEYS.COLLECTION.WORKSPACE_CARDS_LIST}${workspaceAccountID}_${selectedFeed}`);
55-
const filteredCardList = CardUtils.getFilteredCardList(list, cardFeeds?.settings?.oAuthAccountDetails?.[selectedFeed as CompanyCardFeed]);
56+
const filteredCardList = getFilteredCardList(list, cardFeeds?.settings?.oAuthAccountDetails?.[selectedFeed as CompanyCardFeed]);
5657

5758
const handleSubmit = () => {
5859
if (!selectedFeed) {
5960
setShouldShowError(true);
6061
return;
6162
}
6263
if (selectedFeed === CONST.EXPENSIFY_CARD.NAME) {
63-
Card.setIssueNewCardStepAndData({
64+
setIssueNewCardStepAndData({
6465
step: CONST.EXPENSIFY_CARD.STEP.CARD_TYPE,
6566
data: {
6667
assigneeEmail: memberLogin,
@@ -76,12 +77,15 @@ function WorkspaceMemberNewCardPage({route, personalDetails}: WorkspaceMemberNew
7677
};
7778
let currentStep: AssignCardStep = CONST.COMPANY_CARD.STEP.CARD;
7879

79-
if (CardUtils.hasOnlyOneCardToAssign(filteredCardList)) {
80+
if (hasOnlyOneCardToAssign(filteredCardList)) {
8081
currentStep = CONST.COMPANY_CARD.STEP.TRANSACTION_START_DATE;
8182
data.cardNumber = Object.keys(filteredCardList).at(0);
8283
data.encryptedCardNumber = Object.values(filteredCardList).at(0);
8384
}
84-
CompanyCards.setAssignCardStepAndData({
85+
if (isFeedExpired) {
86+
currentStep = CONST.COMPANY_CARD.STEP.BANK_CONNECTION;
87+
}
88+
setAssignCardStepAndData({
8589
currentStep,
8690
data,
8791
isEditing: false,
@@ -99,14 +103,14 @@ function WorkspaceMemberNewCardPage({route, personalDetails}: WorkspaceMemberNew
99103

100104
const companyCardFeeds: CardFeedListItem[] = (Object.keys(companyFeeds) as CompanyCardFeed[]).map((key) => ({
101105
value: key,
102-
text: CardUtils.getCustomOrFormattedFeedName(key, cardFeeds?.settings?.companyCardNicknames),
106+
text: getCustomOrFormattedFeedName(key, cardFeeds?.settings?.companyCardNicknames),
103107
keyForList: key,
104108
isDisabled: companyFeeds[key]?.pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE,
105109
pendingAction: companyFeeds[key]?.pendingAction,
106110
isSelected: selectedFeed === key,
107111
leftElement: (
108112
<Icon
109-
src={CardUtils.getCardFeedIcon(key)}
113+
src={getCardFeedIcon(key)}
110114
height={variables.cardIconHeight}
111115
width={variables.cardIconWidth}
112116
additionalStyles={[styles.mr3, styles.cardIcon]}

0 commit comments

Comments
 (0)