-
Notifications
You must be signed in to change notification settings - Fork 2.8k
/
WorkspaceSettlementFrequencyPage.tsx
91 lines (79 loc) · 4.25 KB
/
WorkspaceSettlementFrequencyPage.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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import type {StackScreenProps} from '@react-navigation/stack';
import React, {useMemo} from 'react';
import {useOnyx} from 'react-native-onyx';
import type {ValueOf} from 'type-fest';
import HeaderWithBackButton from '@components/HeaderWithBackButton';
import ScreenWrapper from '@components/ScreenWrapper';
import SelectionList from '@components/SelectionList';
import RadioListItem from '@components/SelectionList/RadioListItem';
import Text from '@components/Text';
import useLocalize from '@hooks/useLocalize';
import useThemeStyles from '@hooks/useThemeStyles';
import * as PolicyUtils from '@libs/PolicyUtils';
import Navigation from '@navigation/Navigation';
import type {SettingsNavigatorParamList} from '@navigation/types';
import AccessOrNotFoundWrapper from '@pages/workspace/AccessOrNotFoundWrapper';
import * as Card from '@userActions/Card';
import CONST from '@src/CONST';
import ONYXKEYS from '@src/ONYXKEYS';
import ROUTES from '@src/ROUTES';
import type SCREENS from '@src/SCREENS';
type WorkspaceSettlementFrequencyPageProps = StackScreenProps<SettingsNavigatorParamList, typeof SCREENS.WORKSPACE.EXPENSIFY_CARD_SETTINGS_FREQUENCY>;
function WorkspaceSettlementFrequencyPage({route}: WorkspaceSettlementFrequencyPageProps) {
const styles = useThemeStyles();
const {translate} = useLocalize();
const policyID = route.params?.policyID ?? '-1';
const workspaceAccountID = PolicyUtils.getWorkspaceAccountID(policyID);
const [cardSettings] = useOnyx(`${ONYXKEYS.COLLECTION.PRIVATE_EXPENSIFY_CARD_SETTINGS}${workspaceAccountID}`);
const shouldShowMonthlyOption = cardSettings?.isMonthlySettlementAllowed ?? false;
const selectedFrequency = cardSettings?.monthlySettlementDate ? CONST.EXPENSIFY_CARD.FREQUENCY_SETTING.MONTHLY : CONST.EXPENSIFY_CARD.FREQUENCY_SETTING.DAILY;
const data = useMemo(() => {
const options = [];
options.push({
value: CONST.EXPENSIFY_CARD.FREQUENCY_SETTING.DAILY,
text: translate('workspace.expensifyCard.frequency.daily'),
keyForList: CONST.EXPENSIFY_CARD.FREQUENCY_SETTING.DAILY,
isSelected: selectedFrequency === CONST.EXPENSIFY_CARD.FREQUENCY_SETTING.DAILY,
});
if (shouldShowMonthlyOption) {
options.push({
value: CONST.EXPENSIFY_CARD.FREQUENCY_SETTING.MONTHLY,
text: translate('workspace.expensifyCard.frequency.monthly'),
keyForList: CONST.EXPENSIFY_CARD.FREQUENCY_SETTING.MONTHLY,
isSelected: selectedFrequency === CONST.EXPENSIFY_CARD.FREQUENCY_SETTING.MONTHLY,
});
}
return options;
}, [translate, shouldShowMonthlyOption, selectedFrequency]);
const updateSettlementFrequency = (value: ValueOf<typeof CONST.EXPENSIFY_CARD.FREQUENCY_SETTING>) => {
Card.updateSettlementFrequency(workspaceAccountID, value, cardSettings?.monthlySettlementDate);
};
return (
<AccessOrNotFoundWrapper
accessVariants={[CONST.POLICY.ACCESS_VARIANTS.ADMIN, CONST.POLICY.ACCESS_VARIANTS.PAID]}
policyID={policyID}
featureName={CONST.POLICY.MORE_FEATURES.ARE_EXPENSIFY_CARDS_ENABLED}
>
<ScreenWrapper
testID={WorkspaceSettlementFrequencyPage.displayName}
includeSafeAreaPaddingBottom={false}
shouldEnableMaxHeight
>
<HeaderWithBackButton
title={translate('workspace.expensifyCard.settlementFrequency')}
onBackButtonPress={() => Navigation.goBack(ROUTES.WORKSPACE_EXPENSIFY_CARD_SETTINGS.getRoute(policyID))}
/>
<Text style={[styles.mh5, styles.mv4]}>{translate('workspace.expensifyCard.settlementFrequencyDescription')}</Text>
<SelectionList
sections={[{data}]}
ListItem={RadioListItem}
onSelectRow={({value}) => updateSettlementFrequency(value)}
shouldSingleExecuteRowSelect
initiallyFocusedOptionKey={selectedFrequency}
/>
</ScreenWrapper>
</AccessOrNotFoundWrapper>
);
}
WorkspaceSettlementFrequencyPage.displayName = 'WorkspaceSettlementFrequencyPage';
export default WorkspaceSettlementFrequencyPage;