Skip to content

Commit ee1bf40

Browse files
authored
Merge pull request #48764 from shubham1206agra/sage-intacct-new-structure
New page structure for export Sage Intacct
2 parents 33debc8 + 6a32eec commit ee1bf40

11 files changed

+371
-229
lines changed

src/ROUTES.ts

+8
Original file line numberDiff line numberDiff line change
@@ -1467,6 +1467,14 @@ const ROUTES = {
14671467
route: 'settings/workspaces/:policyID/accounting/sage-intacct/export/nonreimbursable',
14681468
getRoute: (policyID: string) => `settings/workspaces/${policyID}/accounting/sage-intacct/export/nonreimbursable` as const,
14691469
},
1470+
POLICY_ACCOUNTING_SAGE_INTACCT_REIMBURSABLE_DESTINATION: {
1471+
route: 'settings/workspaces/:policyID/accounting/sage-intacct/export/reimbursable/destination',
1472+
getRoute: (policyID: string) => `settings/workspaces/${policyID}/accounting/sage-intacct/export/reimbursable/destination` as const,
1473+
},
1474+
POLICY_ACCOUNTING_SAGE_INTACCT_NON_REIMBURSABLE_DESTINATION: {
1475+
route: 'settings/workspaces/:policyID/accounting/sage-intacct/export/nonreimbursable/destination',
1476+
getRoute: (policyID: string) => `settings/workspaces/${policyID}/accounting/sage-intacct/export/nonreimbursable/destination` as const,
1477+
},
14701478
POLICY_ACCOUNTING_SAGE_INTACCT_DEFAULT_VENDOR: {
14711479
route: 'settings/workspaces/:policyID/accounting/sage-intacct/export/:reimbursable/default-vendor',
14721480
getRoute: (policyID: string, reimbursable: string) => `settings/workspaces/${policyID}/accounting/sage-intacct/export/${reimbursable}/default-vendor` as const,

src/SCREENS.ts

+2
Original file line numberDiff line numberDiff line change
@@ -363,6 +363,8 @@ const SCREENS = {
363363
SAGE_INTACCT_EXPORT_DATE: 'Policy_Accounting_Sage_Intacct_Export_Date',
364364
SAGE_INTACCT_REIMBURSABLE_EXPENSES: 'Policy_Accounting_Sage_Intacct_Reimbursable_Expenses',
365365
SAGE_INTACCT_NON_REIMBURSABLE_EXPENSES: 'Policy_Accounting_Sage_Intacct_Non_Reimbursable_Expenses',
366+
SAGE_INTACCT_REIMBURSABLE_DESTINATION: 'Policy_Accounting_Sage_Intacct_Reimbursable_Destination',
367+
SAGE_INTACCT_NON_REIMBURSABLE_DESTINATION: 'Policy_Accounting_Sage_Intacct_Non_Reimbursable_Destination',
366368
SAGE_INTACCT_DEFAULT_VENDOR: 'Policy_Accounting_Sage_Intacct_Default_Vendor',
367369
SAGE_INTACCT_NON_REIMBURSABLE_CREDIT_CARD_ACCOUNT: 'Policy_Accounting_Sage_Intacct_Non_Reimbursable_Credit_Card_Account',
368370
SAGE_INTACCT_ADVANCED: 'Policy_Accounting_Sage_Intacct_Advanced',

src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx

+4
Original file line numberDiff line numberDiff line change
@@ -412,6 +412,10 @@ const SettingsModalStackNavigator = createModalStackNavigator<SettingsNavigatorP
412412
require<ReactComponentModule>('../../../../pages/workspace/accounting/intacct/export/SageIntacctReimbursableExpensesPage').default,
413413
[SCREENS.WORKSPACE.ACCOUNTING.SAGE_INTACCT_NON_REIMBURSABLE_EXPENSES]: () =>
414414
require<ReactComponentModule>('../../../../pages/workspace/accounting/intacct/export/SageIntacctNonReimbursableExpensesPage').default,
415+
[SCREENS.WORKSPACE.ACCOUNTING.SAGE_INTACCT_REIMBURSABLE_DESTINATION]: () =>
416+
require<ReactComponentModule>('../../../../pages/workspace/accounting/intacct/export/SageIntacctReimbursableExpensesDestinationPage').default,
417+
[SCREENS.WORKSPACE.ACCOUNTING.SAGE_INTACCT_NON_REIMBURSABLE_DESTINATION]: () =>
418+
require<ReactComponentModule>('../../../../pages/workspace/accounting/intacct/export/SageIntacctNonReimbursableExpensesDestinationPage').default,
415419
[SCREENS.WORKSPACE.ACCOUNTING.SAGE_INTACCT_DEFAULT_VENDOR]: () =>
416420
require<ReactComponentModule>('../../../../pages/workspace/accounting/intacct/export/SageIntacctDefaultVendorPage').default,
417421
[SCREENS.WORKSPACE.ACCOUNTING.SAGE_INTACCT_NON_REIMBURSABLE_CREDIT_CARD_ACCOUNT]: () =>

src/libs/Navigation/linkingConfig/FULL_SCREEN_TO_RHP_MAPPING.ts

+2
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,8 @@ const FULL_SCREEN_TO_RHP_MAPPING: Partial<Record<FullScreenName, string[]>> = {
106106
SCREENS.WORKSPACE.ACCOUNTING.SAGE_INTACCT_EXPORT_DATE,
107107
SCREENS.WORKSPACE.ACCOUNTING.SAGE_INTACCT_REIMBURSABLE_EXPENSES,
108108
SCREENS.WORKSPACE.ACCOUNTING.SAGE_INTACCT_NON_REIMBURSABLE_EXPENSES,
109+
SCREENS.WORKSPACE.ACCOUNTING.SAGE_INTACCT_REIMBURSABLE_DESTINATION,
110+
SCREENS.WORKSPACE.ACCOUNTING.SAGE_INTACCT_NON_REIMBURSABLE_DESTINATION,
109111
SCREENS.WORKSPACE.ACCOUNTING.SAGE_INTACCT_DEFAULT_VENDOR,
110112
SCREENS.WORKSPACE.ACCOUNTING.SAGE_INTACCT_NON_REIMBURSABLE_CREDIT_CARD_ACCOUNT,
111113
SCREENS.WORKSPACE.ACCOUNTING.SAGE_INTACCT_ADVANCED,

src/libs/Navigation/linkingConfig/config.ts

+2
Original file line numberDiff line numberDiff line change
@@ -478,6 +478,8 @@ const config: LinkingOptions<RootStackParamList>['config'] = {
478478
[SCREENS.WORKSPACE.ACCOUNTING.SAGE_INTACCT_EXPORT_DATE]: {path: ROUTES.POLICY_ACCOUNTING_SAGE_INTACCT_EXPORT_DATE.route},
479479
[SCREENS.WORKSPACE.ACCOUNTING.SAGE_INTACCT_REIMBURSABLE_EXPENSES]: {path: ROUTES.POLICY_ACCOUNTING_SAGE_INTACCT_REIMBURSABLE_EXPENSES.route},
480480
[SCREENS.WORKSPACE.ACCOUNTING.SAGE_INTACCT_NON_REIMBURSABLE_EXPENSES]: {path: ROUTES.POLICY_ACCOUNTING_SAGE_INTACCT_NON_REIMBURSABLE_EXPENSES.route},
481+
[SCREENS.WORKSPACE.ACCOUNTING.SAGE_INTACCT_REIMBURSABLE_DESTINATION]: {path: ROUTES.POLICY_ACCOUNTING_SAGE_INTACCT_REIMBURSABLE_DESTINATION.route},
482+
[SCREENS.WORKSPACE.ACCOUNTING.SAGE_INTACCT_NON_REIMBURSABLE_DESTINATION]: {path: ROUTES.POLICY_ACCOUNTING_SAGE_INTACCT_NON_REIMBURSABLE_DESTINATION.route},
481483
[SCREENS.WORKSPACE.ACCOUNTING.SAGE_INTACCT_DEFAULT_VENDOR]: {path: ROUTES.POLICY_ACCOUNTING_SAGE_INTACCT_DEFAULT_VENDOR.route},
482484
[SCREENS.WORKSPACE.ACCOUNTING.SAGE_INTACCT_NON_REIMBURSABLE_CREDIT_CARD_ACCOUNT]: {
483485
path: ROUTES.POLICY_ACCOUNTING_SAGE_INTACCT_NON_REIMBURSABLE_CREDIT_CARD_ACCOUNT.route,

src/libs/Navigation/types.ts

+6
Original file line numberDiff line numberDiff line change
@@ -631,6 +631,12 @@ type SettingsNavigatorParamList = {
631631
[SCREENS.WORKSPACE.ACCOUNTING.SAGE_INTACCT_NON_REIMBURSABLE_EXPENSES]: {
632632
policyID: string;
633633
};
634+
[SCREENS.WORKSPACE.ACCOUNTING.SAGE_INTACCT_REIMBURSABLE_DESTINATION]: {
635+
policyID: string;
636+
};
637+
[SCREENS.WORKSPACE.ACCOUNTING.SAGE_INTACCT_NON_REIMBURSABLE_DESTINATION]: {
638+
policyID: string;
639+
};
634640
[SCREENS.WORKSPACE.ACCOUNTING.SAGE_INTACCT_DEFAULT_VENDOR]: {
635641
policyID: string;
636642
reimbursable: string;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
import React, {useCallback} from 'react';
2+
import type {ValueOf} from 'type-fest';
3+
import RadioListItem from '@components/SelectionList/RadioListItem';
4+
import type {ListItem} from '@components/SelectionList/types';
5+
import SelectionScreen from '@components/SelectionScreen';
6+
import type {SelectorType} from '@components/SelectionScreen';
7+
import useLocalize from '@hooks/useLocalize';
8+
import useThemeStyles from '@hooks/useThemeStyles';
9+
import * as ErrorUtils from '@libs/ErrorUtils';
10+
import {settingsPendingAction} from '@libs/PolicyUtils';
11+
import Navigation from '@navigation/Navigation';
12+
import type {WithPolicyConnectionsProps} from '@pages/workspace/withPolicyConnections';
13+
import withPolicyConnections from '@pages/workspace/withPolicyConnections';
14+
import {updateSageIntacctNonreimbursableExpensesExportDestination} from '@userActions/connections/SageIntacct';
15+
import * as Policy from '@userActions/Policy/Policy';
16+
import CONST from '@src/CONST';
17+
import ROUTES from '@src/ROUTES';
18+
19+
type MenuListItem = ListItem & {
20+
value: ValueOf<typeof CONST.SAGE_INTACCT_NON_REIMBURSABLE_EXPENSE_TYPE>;
21+
};
22+
23+
function SageIntacctNonReimbursableExpensesDestinationPage({policy}: WithPolicyConnectionsProps) {
24+
const {translate} = useLocalize();
25+
const styles = useThemeStyles();
26+
const policyID = policy?.id ?? '-1';
27+
const {config} = policy?.connections?.intacct ?? {};
28+
29+
const data: MenuListItem[] = Object.values(CONST.SAGE_INTACCT_NON_REIMBURSABLE_EXPENSE_TYPE).map((expenseType) => ({
30+
value: expenseType,
31+
text: translate(`workspace.sageIntacct.nonReimbursableExpenses.values.${expenseType}`),
32+
keyForList: expenseType,
33+
isSelected: config?.export.nonReimbursable === expenseType,
34+
}));
35+
36+
const selectDestination = useCallback(
37+
(row: MenuListItem) => {
38+
if (row.value !== config?.export.nonReimbursable) {
39+
updateSageIntacctNonreimbursableExpensesExportDestination(policyID, row.value, config?.export.nonReimbursable);
40+
}
41+
Navigation.goBack(ROUTES.POLICY_ACCOUNTING_SAGE_INTACCT_NON_REIMBURSABLE_EXPENSES.getRoute(policyID));
42+
},
43+
[config?.export.nonReimbursable, policyID],
44+
);
45+
46+
return (
47+
<SelectionScreen
48+
displayName={SageIntacctNonReimbursableExpensesDestinationPage.displayName}
49+
title="workspace.accounting.exportAs"
50+
sections={[{data}]}
51+
listItem={RadioListItem}
52+
onSelectRow={(selection: SelectorType) => selectDestination(selection as MenuListItem)}
53+
initiallyFocusedOptionKey={data.find((mode) => mode.isSelected)?.keyForList}
54+
policyID={policyID}
55+
accessVariants={[CONST.POLICY.ACCESS_VARIANTS.ADMIN, CONST.POLICY.ACCESS_VARIANTS.PAID]}
56+
featureName={CONST.POLICY.MORE_FEATURES.ARE_CONNECTIONS_ENABLED}
57+
onBackButtonPress={() => Navigation.goBack(ROUTES.POLICY_ACCOUNTING_SAGE_INTACCT_NON_REIMBURSABLE_EXPENSES.getRoute(policyID))}
58+
connectionName={CONST.POLICY.CONNECTIONS.NAME.SAGE_INTACCT}
59+
pendingAction={settingsPendingAction([CONST.SAGE_INTACCT_CONFIG.NON_REIMBURSABLE], config?.pendingFields)}
60+
errors={ErrorUtils.getLatestErrorField(config, CONST.SAGE_INTACCT_CONFIG.NON_REIMBURSABLE)}
61+
errorRowStyles={[styles.ph5, styles.pv3]}
62+
onClose={() => Policy.clearSageIntacctErrorField(policyID, CONST.SAGE_INTACCT_CONFIG.NON_REIMBURSABLE)}
63+
/>
64+
);
65+
}
66+
67+
SageIntacctNonReimbursableExpensesDestinationPage.displayName = 'SageIntacctNonReimbursableExpensesDestinationPage';
68+
69+
export default withPolicyConnections(SageIntacctNonReimbursableExpensesDestinationPage);

0 commit comments

Comments
 (0)