1- import React , { useCallback } from 'react' ;
1+ import React , { useCallback , useMemo } from 'react' ;
22import { useOnyx } from 'react-native-onyx' ;
33import HeaderWithBackButton from '@components/HeaderWithBackButton' ;
44import MenuItemWithTopDescription from '@components/MenuItemWithTopDescription' ;
55import ScreenWrapper from '@components/ScreenWrapper' ;
66import ScrollView from '@components/ScrollView' ;
77import Text from '@components/Text' ;
88import TextLink from '@components/TextLink' ;
9+ import useExpensifyCardFeeds from '@hooks/useExpensifyCardFeeds' ;
910import useLocalize from '@hooks/useLocalize' ;
1011import useThemeStyles from '@hooks/useThemeStyles' ;
1112import { getConnectionNameFromRouteParam } from '@libs/AccountingUtils' ;
@@ -22,32 +23,63 @@ import CONST from '@src/CONST';
2223import ONYXKEYS from '@src/ONYXKEYS' ;
2324import ROUTES from '@src/ROUTES' ;
2425import type SCREENS from '@src/SCREENS' ;
26+ import type ExpensifyCardSettings from '@src/types/onyx/ExpensifyCardSettings' ;
2527import type { ConnectionName } from '@src/types/onyx/Policy' ;
2628
2729type CardReconciliationPageProps = WithPolicyConnectionsProps & PlatformStackScreenProps < SettingsNavigatorParamList , typeof SCREENS . WORKSPACE . ACCOUNTING . CARD_RECONCILIATION > ;
2830
31+ type FullySetUpCardSetting = {
32+ key : string ;
33+ cardSetting : ExpensifyCardSettings ;
34+ } ;
35+
2936function CardReconciliationPage ( { policy, route} : CardReconciliationPageProps ) {
3037 const styles = useThemeStyles ( ) ;
3138 const { translate} = useLocalize ( ) ;
3239
3340 const workspaceAccountID = policy ?. workspaceAccountID ?? CONST . DEFAULT_NUMBER_ID ;
41+ const policyID = policy ?. id ;
42+ const allCardSettings = useExpensifyCardFeeds ( policyID ) ;
43+
44+ const fullySetUpCardSetting = useMemo ( ( ) => {
45+ const entries = Object . entries ( allCardSettings ?? { } ) ;
46+ const initialValue : FullySetUpCardSetting = {
47+ key : '' ,
48+ cardSetting : {
49+ monthlySettlementDate : new Date ( ) ,
50+ isMonthlySettlementAllowed : false ,
51+ paymentBankAccountID : CONST . DEFAULT_NUMBER_ID ,
52+ } ,
53+ } ;
3454
35- const [ isContinuousReconciliationOn ] = useOnyx ( `${ ONYXKEYS . COLLECTION . EXPENSIFY_CARD_USE_CONTINUOUS_RECONCILIATION } ${ workspaceAccountID } ` , { canBeMissing : true } ) ;
36- const [ cardSettings ] = useOnyx ( `${ ONYXKEYS . COLLECTION . PRIVATE_EXPENSIFY_CARD_SETTINGS } ${ workspaceAccountID } ` , { canBeMissing : true } ) ;
37- const [ currentConnectionName ] = useOnyx ( `${ ONYXKEYS . COLLECTION . EXPENSIFY_CARD_CONTINUOUS_RECONCILIATION_CONNECTION } ${ workspaceAccountID } ` , { canBeMissing : true } ) ;
55+ return entries . reduce < FullySetUpCardSetting > ( ( acc , [ key , cardSetting ] ) => {
56+ if ( cardSetting && isExpensifyCardFullySetUp ( policy , cardSetting ) ) {
57+ return {
58+ key,
59+ cardSetting,
60+ } ;
61+ }
62+ return acc ;
63+ } , initialValue ) ;
64+ } , [ allCardSettings , policy ] ) ;
65+
66+ const domainID = fullySetUpCardSetting . key . split ( '_' ) . at ( - 1 ) ;
67+ const effectiveDomainID = Number ( domainID ?? workspaceAccountID ) ;
68+
69+ const [ isContinuousReconciliationOn ] = useOnyx ( `${ ONYXKEYS . COLLECTION . EXPENSIFY_CARD_USE_CONTINUOUS_RECONCILIATION } ${ effectiveDomainID } ` , { canBeMissing : true } ) ;
70+ const [ currentConnectionName ] = useOnyx ( `${ ONYXKEYS . COLLECTION . EXPENSIFY_CARD_CONTINUOUS_RECONCILIATION_CONNECTION } ${ effectiveDomainID } ` , { canBeMissing : true } ) ;
3871 const [ bankAccountList ] = useOnyx ( ONYXKEYS . BANK_ACCOUNT_LIST , { canBeMissing : true } ) ;
3972
40- const paymentBankAccountID = cardSettings ?. paymentBankAccountID ?? CONST . DEFAULT_NUMBER_ID ;
73+ const paymentBankAccountID = fullySetUpCardSetting . cardSetting ?. paymentBankAccountID ?? CONST . DEFAULT_NUMBER_ID ;
4174 const bankAccountTitle = bankAccountList ?. [ paymentBankAccountID ] ?. title ?? '' ;
4275
43- const policyID = policy ?. id ;
4476 const { connection} = route . params ;
4577 const connectionName = getConnectionNameFromRouteParam ( connection ) as ConnectionName ;
4678 const autoSync = ! ! policy ?. connections ?. [ connectionName ] ?. config ?. autoSync ?. enabled ;
47- const shouldShow = isExpensifyCardFullySetUp ( policy , cardSettings ) ;
79+ const shouldShow = ! ! fullySetUpCardSetting . cardSetting ?. paymentBankAccountID ;
4880
4981 const handleToggleContinuousReconciliation = ( value : boolean ) => {
50- toggleContinuousReconciliation ( workspaceAccountID , value , connectionName , currentConnectionName ) ;
82+ toggleContinuousReconciliation ( effectiveDomainID , value , connectionName , currentConnectionName ) ;
5183 if ( value ) {
5284 Navigation . navigate ( ROUTES . WORKSPACE_ACCOUNTING_RECONCILIATION_ACCOUNT_SETTINGS . getRoute ( policyID , connection ) ) ;
5385 }
0 commit comments