-
Notifications
You must be signed in to change notification settings - Fork 2.8k
/
WorkspaceExpensifyCardPage.tsx
67 lines (57 loc) · 3 KB
/
WorkspaceExpensifyCardPage.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import {useFocusEffect} from '@react-navigation/native';
import type {StackScreenProps} from '@react-navigation/stack';
import React, {useCallback} from 'react';
import {ActivityIndicator} from 'react-native';
import {useOnyx} from 'react-native-onyx';
import useNetwork from '@hooks/useNetwork';
import useTheme from '@hooks/useTheme';
import useThemeStyles from '@hooks/useThemeStyles';
import type {FullScreenNavigatorParamList} from '@libs/Navigation/types';
import * as PolicyUtils from '@libs/PolicyUtils';
import AccessOrNotFoundWrapper from '@pages/workspace/AccessOrNotFoundWrapper';
import * as Policy from '@userActions/Policy/Policy';
import CONST from '@src/CONST';
import ONYXKEYS from '@src/ONYXKEYS';
import type SCREENS from '@src/SCREENS';
import WorkspaceExpensifyCardListPage from './WorkspaceExpensifyCardListPage';
import WorkspaceExpensifyCardPageEmptyState from './WorkspaceExpensifyCardPageEmptyState';
type WorkspaceExpensifyCardPageProps = StackScreenProps<FullScreenNavigatorParamList, typeof SCREENS.WORKSPACE.EXPENSIFY_CARD>;
function WorkspaceExpensifyCardPage({route}: WorkspaceExpensifyCardPageProps) {
const policyID = route.params.policyID ?? '-1';
const workspaceAccountID = PolicyUtils.getWorkspaceAccountID(policyID);
const styles = useThemeStyles();
const theme = useTheme();
const [cardSettings] = useOnyx(`${ONYXKEYS.COLLECTION.PRIVATE_EXPENSIFY_CARD_SETTINGS}${workspaceAccountID}`);
const [cardsList] = useOnyx(`${ONYXKEYS.COLLECTION.WORKSPACE_CARDS_LIST}${workspaceAccountID}_${CONST.EXPENSIFY_CARD.BANK}`);
const fetchExpensifyCards = useCallback(() => {
Policy.openPolicyExpensifyCardsPage(policyID, workspaceAccountID);
}, [policyID, workspaceAccountID]);
const {isOffline} = useNetwork({onReconnect: fetchExpensifyCards});
useFocusEffect(fetchExpensifyCards);
const paymentBankAccountID = cardSettings?.paymentBankAccountID ?? 0;
const isLoading = !isOffline && (!cardSettings || (cardSettings.isLoading && Object.keys(cardSettings).length === 1));
return (
<AccessOrNotFoundWrapper
accessVariants={[CONST.POLICY.ACCESS_VARIANTS.ADMIN, CONST.POLICY.ACCESS_VARIANTS.PAID]}
policyID={route.params.policyID}
featureName={CONST.POLICY.MORE_FEATURES.ARE_EXPENSIFY_CARDS_ENABLED}
>
{isLoading && (
<ActivityIndicator
size={CONST.ACTIVITY_INDICATOR_SIZE.LARGE}
style={styles.flex1}
color={theme.spinner}
/>
)}
{!!paymentBankAccountID && !isLoading && (
<WorkspaceExpensifyCardListPage
cardsList={cardsList}
route={route}
/>
)}
{!paymentBankAccountID && !isLoading && <WorkspaceExpensifyCardPageEmptyState route={route} />}
</AccessOrNotFoundWrapper>
);
}
WorkspaceExpensifyCardPage.displayName = 'WorkspaceExpensifyCardPage';
export default WorkspaceExpensifyCardPage;