From fca6165d29584d2664388ac03dff2d7f74017d2f Mon Sep 17 00:00:00 2001
From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com>
Date: Fri, 18 Jul 2025 18:59:56 +0100
Subject: [PATCH 01/49] add setFeedStatementPeriodEndDate (wip)
---
.../SetFeedStatementPeriodEndDate.ts | 9 ++++++
src/libs/API/parameters/index.ts | 1 +
src/libs/API/types.ts | 2 ++
src/libs/actions/CompanyCards.ts | 32 +++++++++++++++++++
.../WorkspaceCompanyCardsSettingsPage.tsx | 23 +++++--------
5 files changed, 52 insertions(+), 15 deletions(-)
create mode 100644 src/libs/API/parameters/SetFeedStatementPeriodEndDate.ts
diff --git a/src/libs/API/parameters/SetFeedStatementPeriodEndDate.ts b/src/libs/API/parameters/SetFeedStatementPeriodEndDate.ts
new file mode 100644
index 000000000000..81100d7568f0
--- /dev/null
+++ b/src/libs/API/parameters/SetFeedStatementPeriodEndDate.ts
@@ -0,0 +1,9 @@
+type SetFeedStatementPeriodEndDate = {
+ authToken: string | null | undefined;
+ policyID: string;
+ bankName: string;
+ domainAccountID: number;
+ statementPeriodEndDate: string;
+};
+
+export default SetFeedStatementPeriodEndDate;
diff --git a/src/libs/API/parameters/index.ts b/src/libs/API/parameters/index.ts
index 1627158a2f6b..96310830a1ed 100644
--- a/src/libs/API/parameters/index.ts
+++ b/src/libs/API/parameters/index.ts
@@ -351,6 +351,7 @@ export type {default as DeleteCompanyCardFeed} from './DeleteCompanyCardFeed';
export type {default as SetCompanyCardTransactionLiability} from './SetCompanyCardTransactionLiability';
export type {default as OpenPolicyCompanyCardsFeedParams} from './OpenPolicyCompanyCardsFeedParams';
export type {default as OpenPolicyAddCardFeedPageParams} from './OpenPolicyAddCardFeedPageParams';
+export type {default as SetFeedStatementPeriodEndDate} from './SetFeedStatementPeriodEndDate';
export type {default as AssignCompanyCardParams} from './AssignCompanyCardParams';
export type {default as UnassignCompanyCard} from './UnassignCompanyCard';
export type {default as UpdateCompanyCard} from './UpdateCompanyCard';
diff --git a/src/libs/API/types.ts b/src/libs/API/types.ts
index b301b67ada43..4be6992ec184 100644
--- a/src/libs/API/types.ts
+++ b/src/libs/API/types.ts
@@ -455,6 +455,7 @@ const WRITE_COMMANDS = {
DELETE_COMPANY_CARD_FEED: 'RemoveFeed',
SET_COMPANY_CARD_TRANSACTION_LIABILITY: 'SetFeedTransactionLiability',
OPEN_POLICY_ADD_CARD_FEED_PAGE: 'OpenPolicyAddCardFeedPage',
+ SET_FEED_STATEMENT_PERIOD_END_DATE: 'SetFeedStatementPeriodEndDate',
ASSIGN_COMPANY_CARD: 'AssignCard',
UNASSIGN_COMPANY_CARD: 'UnassignCard',
UPDATE_COMPANY_CARD: 'SyncCard',
@@ -561,6 +562,7 @@ type WriteCommandParameters = {
[WRITE_COMMANDS.SET_CARD_EXPORT_ACCOUNT]: Parameters.SetCompanyCardExportAccountParams;
[WRITE_COMMANDS.SET_COMPANY_CARD_TRANSACTION_LIABILITY]: Parameters.SetCompanyCardTransactionLiability;
[WRITE_COMMANDS.OPEN_POLICY_ADD_CARD_FEED_PAGE]: Parameters.OpenPolicyAddCardFeedPageParams;
+ [WRITE_COMMANDS.SET_FEED_STATEMENT_PERIOD_END_DATE]: Parameters.SetFeedStatementPeriodEndDate;
[WRITE_COMMANDS.VERIFY_IDENTITY]: Parameters.VerifyIdentityParams;
[WRITE_COMMANDS.ACCEPT_WALLET_TERMS]: Parameters.AcceptWalletTermsParams;
[WRITE_COMMANDS.ANSWER_QUESTIONS_FOR_WALLET]: Parameters.AnswerQuestionsForWalletParams;
diff --git a/src/libs/actions/CompanyCards.ts b/src/libs/actions/CompanyCards.ts
index 7409a4ee8e72..9fac9f80cc70 100644
--- a/src/libs/actions/CompanyCards.ts
+++ b/src/libs/actions/CompanyCards.ts
@@ -8,6 +8,7 @@ import type {
OpenPolicyExpensifyCardsPageParams,
RequestFeedSetupParams,
SetCompanyCardExportAccountParams,
+ SetFeedStatementPeriodEndDate,
UpdateCompanyCardNameParams,
} from '@libs/API/parameters';
import {READ_COMMANDS, WRITE_COMMANDS} from '@libs/API/types';
@@ -811,6 +812,36 @@ function openPolicyAddCardFeedPage(policyID: string | undefined) {
API.write(WRITE_COMMANDS.OPEN_POLICY_ADD_CARD_FEED_PAGE, parameters);
}
+function setFeedStatementPeriodEndDate(policyID: string, bankName: string, domainAccountID: number, newStatementPeriodEndDate: string, oldStatementPeriodEndDate: string) {
+ const authToken = NetworkStore.getAuthToken();
+
+ const optimisticData: OnyxUpdate[] = [
+ {
+ onyxMethod: Onyx.METHOD.MERGE,
+ key: `${ONYXKEYS.COLLECTION.SHARED_NVP_PRIVATE_DOMAIN_MEMBER}${domainAccountID}`,
+ value: {
+ settings: {
+ companyCards: {
+ [bankName]: {
+ statementPeriodEndDay: newStatementPeriodEndDate,
+ },
+ },
+ },
+ },
+ },
+ ];
+
+ const parameters: SetFeedStatementPeriodEndDate = {
+ authToken,
+ policyID,
+ bankName,
+ domainAccountID,
+ statementPeriodEndDate: newStatementPeriodEndDate,
+ };
+
+ API.write(WRITE_COMMANDS.SET_FEED_STATEMENT_PERIOD_END_DATE, parameters);
+}
+
export {
setWorkspaceCompanyCardFeedName,
deleteWorkspaceCompanyCardFeed,
@@ -831,4 +862,5 @@ export {
openAssignFeedCardPage,
openPolicyAddCardFeedPage,
setTransactionStartDate,
+ setFeedStatementPeriodEndDate,
};
diff --git a/src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx b/src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx
index 2e987a860ca3..85cc144e483d 100644
--- a/src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx
+++ b/src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx
@@ -10,7 +10,6 @@ import ScrollView from '@components/ScrollView';
import Text from '@components/Text';
import useCardFeeds from '@hooks/useCardFeeds';
import useCardsList from '@hooks/useCardsList';
-import useEnvironment from '@hooks/useEnvironment';
import useLocalize from '@hooks/useLocalize';
import useOnyx from '@hooks/useOnyx';
import usePolicy from '@hooks/usePolicy';
@@ -35,7 +34,6 @@ function WorkspaceCompanyCardsSettingsPage({
params: {policyID},
},
}: WorkspaceCompanyCardsSettingsPageProps) {
- const {isDevelopment} = useEnvironment();
const styles = useThemeStyles();
const {translate} = useLocalize();
const policy = usePolicy(policyID);
@@ -56,9 +54,6 @@ function WorkspaceCompanyCardsSettingsPage({
const domainOrWorkspaceAccountID = getDomainOrWorkspaceAccountID(workspaceAccountID, selectedFeedData);
const statementPeriodEndDay = selectedFeedData?.statementPeriodEndDay;
- // s77rt remove DEV lock
- const shouldShowStatementCloseDate = isDevelopment;
-
const navigateToChangeFeedName = () => {
Navigation.navigate(ROUTES.WORKSPACE_COMPANY_CARDS_SETTINGS_FEED_NAME.getRoute(policyID));
};
@@ -118,16 +113,14 @@ function WorkspaceCompanyCardsSettingsPage({
titleStyle={styles.flex1}
onPress={navigateToChangeFeedName}
/>
- {shouldShowStatementCloseDate && (
-
- )}
+
Date: Fri, 18 Jul 2025 22:27:38 +0100
Subject: [PATCH 02/49] simplify
WorkspaceCompanyCardStatementCloseDateSelectionList state
---
...spaceCompanyCardStatementCloseDatePage.tsx | 4 +-
.../index.tsx | 90 +++++++++++--------
.../addNew/StatementCloseDateStep.tsx | 4 +-
src/types/onyx/CardFeeds.ts | 2 +-
4 files changed, 57 insertions(+), 43 deletions(-)
diff --git a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
index 5d5ff1b8f0f5..17dd17a305df 100644
--- a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
+++ b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
@@ -29,9 +29,9 @@ function WorkspaceCompanyCardStatementCloseDatePage({
const selectedFeed = getSelectedFeed(lastSelectedFeed, cardFeeds);
const submit = useCallback(
- // s77rt make use of statementCloseDate / statementCustomCloseDate and remove disable lint rule
+ // s77rt make use of statementCloseDate and remove disable lint rule
// eslint-disable-next-line @typescript-eslint/no-unused-vars
- (statementCloseDate: CompanyCardStatementCloseDate, statementCustomCloseDate: number | undefined) => {
+ (statementCloseDate: CompanyCardStatementCloseDate) => {
if (selectedFeed) {
// s77rt call API command
}
diff --git a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDateSelectionList/index.tsx b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDateSelectionList/index.tsx
index 7d56439f97e2..0352a3998385 100644
--- a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDateSelectionList/index.tsx
+++ b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDateSelectionList/index.tsx
@@ -22,7 +22,7 @@ type StatementCloseDateListItem = ListItem & {
type WorkspaceCompanyCardStatementCloseDateSelectionListProps = {
confirmText: string;
- onSubmit: (statementCloseDate: CompanyCardStatementCloseDate, statementCustomCloseDate: number | undefined) => void;
+ onSubmit: (statementCloseDate: CompanyCardStatementCloseDate) => void;
onBackButtonPress: () => void;
enabledWhenOffline: boolean;
defaultDate?: CompanyCardStatementCloseDate;
@@ -39,10 +39,8 @@ function WorkspaceCompanyCardStatementCloseDateSelectionList({
const styles = useThemeStyles();
const [selectedDate, setSelectedDate] = useState(defaultDate);
- const [selectedCustomDate, setSelectedCustomDate] = useState(undefined);
- const [error, setError] = useState(undefined);
-
const [isChoosingCustomDate, setIsChoosingCustomDate] = useState(false);
+ const [error, setError] = useState(undefined);
const title = useMemo(
() => (isChoosingCustomDate ? translate('workspace.companyCards.customCloseDate') : translate('workspace.moreFeatures.companyCards.statementCloseDateTitle')),
@@ -58,28 +56,52 @@ function WorkspaceCompanyCardStatementCloseDateSelectionList({
onBackButtonPress();
}, [isChoosingCustomDate, onBackButtonPress]);
- const selectDateAndClearError = useCallback((item: StatementCloseDateListItem) => {
- setSelectedDate(item.value);
- setError(undefined);
- }, []);
-
- const selectCustomDateAndClearError = useCallback(
- (day: number) => {
- setSelectedCustomDate(day);
- setError(undefined);
- goBack();
- },
- [goBack],
- );
-
const submit = useCallback(() => {
- if (!selectedDate || (selectedDate === CONST.COMPANY_CARDS.STATEMENT_CLOSE_DATE.CUSTOM_DAY_OF_MONTH && !selectedCustomDate)) {
+ if (!selectedDate) {
setError(translate('workspace.moreFeatures.companyCards.error.statementCloseDateRequired'));
return;
}
- onSubmit(selectedDate, selectedDate === CONST.COMPANY_CARDS.STATEMENT_CLOSE_DATE.CUSTOM_DAY_OF_MONTH ? selectedCustomDate : undefined);
- }, [selectedDate, selectedCustomDate, onSubmit, translate]);
+ onSubmit(selectedDate);
+ }, [selectedDate, onSubmit, translate]);
+
+ const options = useMemo(() => {
+ return Object.values(CONST.COMPANY_CARDS.STATEMENT_CLOSE_DATE)?.map((option) => {
+ let value: CompanyCardStatementCloseDate;
+ let isSelected: boolean;
+
+ if (option === CONST.COMPANY_CARDS.STATEMENT_CLOSE_DATE.CUSTOM_DAY_OF_MONTH) {
+ if (typeof selectedDate === 'number') {
+ value = selectedDate;
+ } else if (typeof defaultDate === 'number') {
+ value = defaultDate;
+ } else {
+ value = NaN;
+ }
+ isSelected = typeof selectedDate === 'number';
+ } else {
+ value = option;
+ isSelected = selectedDate === option;
+ }
+
+ return (
+ {
+ setSelectedDate(item.value);
+ setError(undefined);
+ }}
+ />
+ );
+ });
+ }, [translate, defaultDate, selectedDate]);
return (
{isChoosingCustomDate ? (
{
+ setSelectedDate(day);
+ setError(undefined);
+ goBack();
+ }}
/>
) : (
<>
{translate('workspace.moreFeatures.companyCards.statementCloseDateDescription')}
- {Object.values(CONST.COMPANY_CARDS.STATEMENT_CLOSE_DATE)?.map((option) => (
-
- ))}
- {selectedDate === CONST.COMPANY_CARDS.STATEMENT_CLOSE_DATE.CUSTOM_DAY_OF_MONTH && (
+ {options}
+ {typeof selectedDate === 'number' && (
setIsChoosingCustomDate(true)}
viewMode={CONST.OPTION_MODE.COMPACT}
diff --git a/src/pages/workspace/companyCards/addNew/StatementCloseDateStep.tsx b/src/pages/workspace/companyCards/addNew/StatementCloseDateStep.tsx
index c4d041af0884..c0ddb4fcdf4b 100644
--- a/src/pages/workspace/companyCards/addNew/StatementCloseDateStep.tsx
+++ b/src/pages/workspace/companyCards/addNew/StatementCloseDateStep.tsx
@@ -26,9 +26,9 @@ function StatementCloseDateStep({policyID}: StatementCloseDateStepProps) {
const isPlaid = isBetaEnabled(CONST.BETAS.PLAID_COMPANY_CARDS) && !!addNewCard?.data?.publicToken;
const submit = useCallback(
- // s77rt make use of statementCloseDate / statementCustomCloseDate and remove disable lint rule
+ // s77rt make use of statementCloseDate and remove disable lint rule
// eslint-disable-next-line @typescript-eslint/no-unused-vars
- (statementCloseDate: CompanyCardStatementCloseDate, statementCustomCloseDate: number | undefined) => {
+ (statementCloseDate: CompanyCardStatementCloseDate) => {
if (isPlaid) {
setAddNewCompanyCardStepAndData({
step: CONST.COMPANY_CARDS.STEP.BANK_CONNECTION,
diff --git a/src/types/onyx/CardFeeds.ts b/src/types/onyx/CardFeeds.ts
index 88ecfb9093c3..758447c734e5 100644
--- a/src/types/onyx/CardFeeds.ts
+++ b/src/types/onyx/CardFeeds.ts
@@ -5,7 +5,7 @@ import type CONST from '@src/CONST';
import type * as OnyxCommon from './OnyxCommon';
/** Card statement close date */
-type CompanyCardStatementCloseDate = ValueOf;
+type CompanyCardStatementCloseDate = Exclude, typeof CONST.COMPANY_CARDS.STATEMENT_CLOSE_DATE.CUSTOM_DAY_OF_MONTH> | number;
/** Card feed */
type CompanyCardFeed = ValueOf;
From 2091cf53ba92792b0133bfb4fc85a0b45c2e6f1a Mon Sep 17 00:00:00 2001
From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com>
Date: Fri, 18 Jul 2025 22:31:25 +0100
Subject: [PATCH 03/49] rename SetFeedStatementPeriodEndDate to
SetFeedStatementEndDay
---
...ementPeriodEndDate.ts => SetFeedStatementEndDay.ts} | 4 ++--
src/libs/API/parameters/index.ts | 2 +-
src/libs/API/types.ts | 4 ++--
src/libs/actions/CompanyCards.ts | 10 +++++-----
4 files changed, 10 insertions(+), 10 deletions(-)
rename src/libs/API/parameters/{SetFeedStatementPeriodEndDate.ts => SetFeedStatementEndDay.ts} (64%)
diff --git a/src/libs/API/parameters/SetFeedStatementPeriodEndDate.ts b/src/libs/API/parameters/SetFeedStatementEndDay.ts
similarity index 64%
rename from src/libs/API/parameters/SetFeedStatementPeriodEndDate.ts
rename to src/libs/API/parameters/SetFeedStatementEndDay.ts
index 81100d7568f0..1206538520d7 100644
--- a/src/libs/API/parameters/SetFeedStatementPeriodEndDate.ts
+++ b/src/libs/API/parameters/SetFeedStatementEndDay.ts
@@ -1,4 +1,4 @@
-type SetFeedStatementPeriodEndDate = {
+type SetFeedStatementEndDay = {
authToken: string | null | undefined;
policyID: string;
bankName: string;
@@ -6,4 +6,4 @@ type SetFeedStatementPeriodEndDate = {
statementPeriodEndDate: string;
};
-export default SetFeedStatementPeriodEndDate;
+export default SetFeedStatementEndDay;
diff --git a/src/libs/API/parameters/index.ts b/src/libs/API/parameters/index.ts
index 96310830a1ed..61eb7debb218 100644
--- a/src/libs/API/parameters/index.ts
+++ b/src/libs/API/parameters/index.ts
@@ -351,7 +351,7 @@ export type {default as DeleteCompanyCardFeed} from './DeleteCompanyCardFeed';
export type {default as SetCompanyCardTransactionLiability} from './SetCompanyCardTransactionLiability';
export type {default as OpenPolicyCompanyCardsFeedParams} from './OpenPolicyCompanyCardsFeedParams';
export type {default as OpenPolicyAddCardFeedPageParams} from './OpenPolicyAddCardFeedPageParams';
-export type {default as SetFeedStatementPeriodEndDate} from './SetFeedStatementPeriodEndDate';
+export type {default as SetFeedStatementEndDay} from './SetFeedStatementEndDay';
export type {default as AssignCompanyCardParams} from './AssignCompanyCardParams';
export type {default as UnassignCompanyCard} from './UnassignCompanyCard';
export type {default as UpdateCompanyCard} from './UpdateCompanyCard';
diff --git a/src/libs/API/types.ts b/src/libs/API/types.ts
index 4be6992ec184..05415b9187dc 100644
--- a/src/libs/API/types.ts
+++ b/src/libs/API/types.ts
@@ -455,7 +455,7 @@ const WRITE_COMMANDS = {
DELETE_COMPANY_CARD_FEED: 'RemoveFeed',
SET_COMPANY_CARD_TRANSACTION_LIABILITY: 'SetFeedTransactionLiability',
OPEN_POLICY_ADD_CARD_FEED_PAGE: 'OpenPolicyAddCardFeedPage',
- SET_FEED_STATEMENT_PERIOD_END_DATE: 'SetFeedStatementPeriodEndDate',
+ SET_FEED_STATEMENT_END_DAY: 'SetFeedStatementEndDay',
ASSIGN_COMPANY_CARD: 'AssignCard',
UNASSIGN_COMPANY_CARD: 'UnassignCard',
UPDATE_COMPANY_CARD: 'SyncCard',
@@ -562,7 +562,7 @@ type WriteCommandParameters = {
[WRITE_COMMANDS.SET_CARD_EXPORT_ACCOUNT]: Parameters.SetCompanyCardExportAccountParams;
[WRITE_COMMANDS.SET_COMPANY_CARD_TRANSACTION_LIABILITY]: Parameters.SetCompanyCardTransactionLiability;
[WRITE_COMMANDS.OPEN_POLICY_ADD_CARD_FEED_PAGE]: Parameters.OpenPolicyAddCardFeedPageParams;
- [WRITE_COMMANDS.SET_FEED_STATEMENT_PERIOD_END_DATE]: Parameters.SetFeedStatementPeriodEndDate;
+ [WRITE_COMMANDS.SET_FEED_STATEMENT_END_DAY]: Parameters.SetFeedStatementEndDay;
[WRITE_COMMANDS.VERIFY_IDENTITY]: Parameters.VerifyIdentityParams;
[WRITE_COMMANDS.ACCEPT_WALLET_TERMS]: Parameters.AcceptWalletTermsParams;
[WRITE_COMMANDS.ANSWER_QUESTIONS_FOR_WALLET]: Parameters.AnswerQuestionsForWalletParams;
diff --git a/src/libs/actions/CompanyCards.ts b/src/libs/actions/CompanyCards.ts
index 9fac9f80cc70..1b9e59de3db4 100644
--- a/src/libs/actions/CompanyCards.ts
+++ b/src/libs/actions/CompanyCards.ts
@@ -8,7 +8,7 @@ import type {
OpenPolicyExpensifyCardsPageParams,
RequestFeedSetupParams,
SetCompanyCardExportAccountParams,
- SetFeedStatementPeriodEndDate,
+ SetFeedStatementEndDay,
UpdateCompanyCardNameParams,
} from '@libs/API/parameters';
import {READ_COMMANDS, WRITE_COMMANDS} from '@libs/API/types';
@@ -812,7 +812,7 @@ function openPolicyAddCardFeedPage(policyID: string | undefined) {
API.write(WRITE_COMMANDS.OPEN_POLICY_ADD_CARD_FEED_PAGE, parameters);
}
-function setFeedStatementPeriodEndDate(policyID: string, bankName: string, domainAccountID: number, newStatementPeriodEndDate: string, oldStatementPeriodEndDate: string) {
+function setFeedStatementEndDay(policyID: string, bankName: string, domainAccountID: number, newStatementPeriodEndDate: string, oldStatementPeriodEndDate: string) {
const authToken = NetworkStore.getAuthToken();
const optimisticData: OnyxUpdate[] = [
@@ -831,7 +831,7 @@ function setFeedStatementPeriodEndDate(policyID: string, bankName: string, domai
},
];
- const parameters: SetFeedStatementPeriodEndDate = {
+ const parameters: SetFeedStatementEndDay = {
authToken,
policyID,
bankName,
@@ -839,7 +839,7 @@ function setFeedStatementPeriodEndDate(policyID: string, bankName: string, domai
statementPeriodEndDate: newStatementPeriodEndDate,
};
- API.write(WRITE_COMMANDS.SET_FEED_STATEMENT_PERIOD_END_DATE, parameters);
+ API.write(WRITE_COMMANDS.SET_FEED_STATEMENT_END_DAY, parameters);
}
export {
@@ -862,5 +862,5 @@ export {
openAssignFeedCardPage,
openPolicyAddCardFeedPage,
setTransactionStartDate,
- setFeedStatementPeriodEndDate,
+ setFeedStatementEndDay,
};
From 3879318ce70cf97bb0bc0fcf6d11a9b84a0c33bb Mon Sep 17 00:00:00 2001
From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com>
Date: Fri, 18 Jul 2025 22:51:45 +0100
Subject: [PATCH 04/49] lint
---
.../index.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDateSelectionList/index.tsx b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDateSelectionList/index.tsx
index 0352a3998385..dd94b1f526fa 100644
--- a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDateSelectionList/index.tsx
+++ b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDateSelectionList/index.tsx
@@ -101,7 +101,7 @@ function WorkspaceCompanyCardStatementCloseDateSelectionList({
/>
);
});
- }, [translate, defaultDate, selectedDate]);
+ }, [translate, defaultDate, selectedDate, styles.flexReset]);
return (
Date: Fri, 18 Jul 2025 22:51:59 +0100
Subject: [PATCH 05/49] update type
---
src/libs/API/parameters/SetFeedStatementEndDay.ts | 4 +++-
src/libs/actions/CompanyCards.ts | 12 +++++++++---
.../WorkspaceCompanyCardsSettingsPage.tsx | 12 +++++++++++-
src/types/onyx/CardFeeds.ts | 10 ++++++++--
4 files changed, 31 insertions(+), 7 deletions(-)
diff --git a/src/libs/API/parameters/SetFeedStatementEndDay.ts b/src/libs/API/parameters/SetFeedStatementEndDay.ts
index 1206538520d7..e97861213792 100644
--- a/src/libs/API/parameters/SetFeedStatementEndDay.ts
+++ b/src/libs/API/parameters/SetFeedStatementEndDay.ts
@@ -1,9 +1,11 @@
+import type {CompanyCardStatementCloseDate} from '@src/types/onyx/CardFeeds';
+
type SetFeedStatementEndDay = {
authToken: string | null | undefined;
policyID: string;
bankName: string;
domainAccountID: number;
- statementPeriodEndDate: string;
+ statementPeriodEndDate: CompanyCardStatementCloseDate;
};
export default SetFeedStatementEndDay;
diff --git a/src/libs/actions/CompanyCards.ts b/src/libs/actions/CompanyCards.ts
index 1b9e59de3db4..5e8fa9ed1bc5 100644
--- a/src/libs/actions/CompanyCards.ts
+++ b/src/libs/actions/CompanyCards.ts
@@ -22,7 +22,7 @@ import CONST from '@src/CONST';
import ONYXKEYS from '@src/ONYXKEYS';
import type {Card, CardFeeds} from '@src/types/onyx';
import type {AssignCard, AssignCardData} from '@src/types/onyx/AssignCard';
-import type {AddNewCardFeedData, AddNewCardFeedStep, CardFeedDetails, CompanyCardFeed} from '@src/types/onyx/CardFeeds';
+import type {AddNewCardFeedData, AddNewCardFeedStep, CardFeedDetails, CompanyCardFeed, CompanyCardStatementCloseDate} from '@src/types/onyx/CardFeeds';
import type {OnyxData} from '@src/types/onyx/Request';
type AddNewCompanyCardFlowData = {
@@ -812,7 +812,13 @@ function openPolicyAddCardFeedPage(policyID: string | undefined) {
API.write(WRITE_COMMANDS.OPEN_POLICY_ADD_CARD_FEED_PAGE, parameters);
}
-function setFeedStatementEndDay(policyID: string, bankName: string, domainAccountID: number, newStatementPeriodEndDate: string, oldStatementPeriodEndDate: string) {
+function setFeedStatementEndDay(
+ policyID: string,
+ bankName: string,
+ domainAccountID: number,
+ newStatementPeriodEndDate: CompanyCardStatementCloseDate,
+ oldStatementPeriodEndDate: CompanyCardStatementCloseDate,
+) {
const authToken = NetworkStore.getAuthToken();
const optimisticData: OnyxUpdate[] = [
@@ -839,7 +845,7 @@ function setFeedStatementEndDay(policyID: string, bankName: string, domainAccoun
statementPeriodEndDate: newStatementPeriodEndDate,
};
- API.write(WRITE_COMMANDS.SET_FEED_STATEMENT_END_DAY, parameters);
+ API.write(WRITE_COMMANDS.SET_FEED_STATEMENT_END_DAY, parameters, {optimisticData});
}
export {
diff --git a/src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx b/src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx
index 85cc144e483d..06d2519a842b 100644
--- a/src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx
+++ b/src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx
@@ -52,7 +52,17 @@ function WorkspaceCompanyCardsSettingsPage({
const liabilityType = selectedFeedData?.liabilityType;
const isPersonal = liabilityType === CONST.COMPANY_CARDS.DELETE_TRANSACTIONS.ALLOW;
const domainOrWorkspaceAccountID = getDomainOrWorkspaceAccountID(workspaceAccountID, selectedFeedData);
- const statementPeriodEndDay = selectedFeedData?.statementPeriodEndDay;
+ const statementPeriodEndDay = useMemo(() => {
+ if (!selectedFeedData?.statementPeriodEndDay) {
+ return;
+ }
+
+ if (typeof selectedFeedData.statementPeriodEndDay === 'number') {
+ return selectedFeedData.statementPeriodEndDay;
+ }
+
+ return translate(`workspace.companyCards.statementCloseDate.${selectedFeedData.statementPeriodEndDay}`);
+ }, [selectedFeedData?.statementPeriodEndDay]);
const navigateToChangeFeedName = () => {
Navigation.navigate(ROUTES.WORKSPACE_COMPANY_CARDS_SETTINGS_FEED_NAME.getRoute(policyID));
diff --git a/src/types/onyx/CardFeeds.ts b/src/types/onyx/CardFeeds.ts
index 758447c734e5..431c3c6fe834 100644
--- a/src/types/onyx/CardFeeds.ts
+++ b/src/types/onyx/CardFeeds.ts
@@ -65,10 +65,13 @@ type CustomCardFeedData = OnyxCommon.OnyxValueWithOfflineFeedback<{
reportTitleFormat?: string;
/** Indicates the day when the statement period for this card ends */
- statementPeriodEndDay?: string;
+ statementPeriodEndDay?: CompanyCardStatementCloseDate;
/** Plaid access token */
plaidAccessToken?: string;
+
+ /** Field-specific error messages */
+ errorFields?: OnyxCommon.ErrorFields;
}>;
/** Direct card feed data */
@@ -92,10 +95,13 @@ type DirectCardFeedData = OnyxCommon.OnyxValueWithOfflineFeedback<{
pending?: boolean;
/** Indicates the day when the statement period for this card ends */
- statementPeriodEndDay?: string;
+ statementPeriodEndDay?: CompanyCardStatementCloseDate;
/** Plaid access token */
plaidAccessToken?: string;
+
+ /** Field-specific error messages */
+ errorFields?: OnyxCommon.ErrorFields;
}>;
/** Card feed data */
From 2e84c3abc428bfd83e6781b83225d4fe747b355b Mon Sep 17 00:00:00 2001
From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com>
Date: Fri, 18 Jul 2025 22:52:40 +0100
Subject: [PATCH 06/49] ts
---
.../companyCards/WorkspaceCompanyCardsSettingsPage.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx b/src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx
index 06d2519a842b..1c715e74274d 100644
--- a/src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx
+++ b/src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx
@@ -125,7 +125,7 @@ function WorkspaceCompanyCardsSettingsPage({
/>
Date: Fri, 18 Jul 2025 22:59:21 +0100
Subject: [PATCH 07/49] update setFeedStatementEndDay
---
src/libs/actions/CompanyCards.ts | 48 ++++++++++++++++++-
.../WorkspaceCompanyCardsSettingsPage.tsx | 2 +-
2 files changed, 48 insertions(+), 2 deletions(-)
diff --git a/src/libs/actions/CompanyCards.ts b/src/libs/actions/CompanyCards.ts
index 5e8fa9ed1bc5..796e7d43ad72 100644
--- a/src/libs/actions/CompanyCards.ts
+++ b/src/libs/actions/CompanyCards.ts
@@ -830,6 +830,52 @@ function setFeedStatementEndDay(
companyCards: {
[bankName]: {
statementPeriodEndDay: newStatementPeriodEndDate,
+ pendingFields: {
+ statementPeriodEndDay: CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE,
+ },
+ errorFields: {
+ statementPeriodEndDay: null,
+ },
+ },
+ },
+ },
+ },
+ },
+ ];
+
+ const successData: OnyxUpdate[] = [
+ {
+ onyxMethod: Onyx.METHOD.MERGE,
+ key: `${ONYXKEYS.COLLECTION.SHARED_NVP_PRIVATE_DOMAIN_MEMBER}${domainAccountID}`,
+ value: {
+ settings: {
+ companyCards: {
+ [bankName]: {
+ pendingFields: {
+ statementPeriodEndDay: null,
+ },
+ },
+ },
+ },
+ },
+ },
+ ];
+
+ const failureData: OnyxUpdate[] = [
+ {
+ onyxMethod: Onyx.METHOD.MERGE,
+ key: `${ONYXKEYS.COLLECTION.SHARED_NVP_PRIVATE_DOMAIN_MEMBER}${domainAccountID}`,
+ value: {
+ settings: {
+ companyCards: {
+ [bankName]: {
+ statementPeriodEndDay: oldStatementPeriodEndDate,
+ pendingFields: {
+ statementPeriodEndDay: null,
+ },
+ errorFields: {
+ statementPeriodEndDay: ErrorUtils.getMicroSecondOnyxErrorWithTranslationKey('common.genericErrorMessage'),
+ },
},
},
},
@@ -845,7 +891,7 @@ function setFeedStatementEndDay(
statementPeriodEndDate: newStatementPeriodEndDate,
};
- API.write(WRITE_COMMANDS.SET_FEED_STATEMENT_END_DAY, parameters, {optimisticData});
+ API.write(WRITE_COMMANDS.SET_FEED_STATEMENT_END_DAY, parameters, {optimisticData, successData, failureData});
}
export {
diff --git a/src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx b/src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx
index 1c715e74274d..6647de190c06 100644
--- a/src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx
+++ b/src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx
@@ -62,7 +62,7 @@ function WorkspaceCompanyCardsSettingsPage({
}
return translate(`workspace.companyCards.statementCloseDate.${selectedFeedData.statementPeriodEndDay}`);
- }, [selectedFeedData?.statementPeriodEndDay]);
+ }, [translate, selectedFeedData?.statementPeriodEndDay]);
const navigateToChangeFeedName = () => {
Navigation.navigate(ROUTES.WORKSPACE_COMPANY_CARDS_SETTINGS_FEED_NAME.getRoute(policyID));
From 4399910fa0f3508d52256d6d5bb50b3aca212e98 Mon Sep 17 00:00:00 2001
From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com>
Date: Fri, 18 Jul 2025 23:09:31 +0100
Subject: [PATCH 08/49] call SetFeedStatementEndDay
---
src/libs/actions/CompanyCards.ts | 2 +-
.../WorkspaceCompanyCardStatementCloseDatePage.tsx | 14 +++++++++-----
2 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/src/libs/actions/CompanyCards.ts b/src/libs/actions/CompanyCards.ts
index 796e7d43ad72..84aa5d9fa885 100644
--- a/src/libs/actions/CompanyCards.ts
+++ b/src/libs/actions/CompanyCards.ts
@@ -817,7 +817,7 @@ function setFeedStatementEndDay(
bankName: string,
domainAccountID: number,
newStatementPeriodEndDate: CompanyCardStatementCloseDate,
- oldStatementPeriodEndDate: CompanyCardStatementCloseDate,
+ oldStatementPeriodEndDate: CompanyCardStatementCloseDate | null,
) {
const authToken = NetworkStore.getAuthToken();
diff --git a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
index 17dd17a305df..80aa15a63b2b 100644
--- a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
+++ b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
@@ -3,7 +3,9 @@ import FullScreenLoadingIndicator from '@components/FullscreenLoadingIndicator';
import useCardFeeds from '@hooks/useCardFeeds';
import useLocalize from '@hooks/useLocalize';
import useOnyx from '@hooks/useOnyx';
-import {getSelectedFeed} from '@libs/CardUtils';
+import useWorkspaceAccountID from '@hooks/useWorkspaceAccountID';
+import {setFeedStatementEndDay} from '@libs/actions/CompanyCards';
+import {getCompanyFeeds, getDomainOrWorkspaceAccountID, getSelectedFeed} from '@libs/CardUtils';
import Navigation from '@libs/Navigation/Navigation';
import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types';
import type {SettingsNavigatorParamList} from '@libs/Navigation/types';
@@ -27,18 +29,20 @@ function WorkspaceCompanyCardStatementCloseDatePage({
const [lastSelectedFeed, lastSelectedFeedResult] = useOnyx(`${ONYXKEYS.COLLECTION.LAST_SELECTED_FEED}${policyID}`, {canBeMissing: true});
const [cardFeeds, cardFeedsResult] = useCardFeeds(policyID);
const selectedFeed = getSelectedFeed(lastSelectedFeed, cardFeeds);
+ const workspaceAccountID = useWorkspaceAccountID(policyID);
+ const companyFeeds = getCompanyFeeds(cardFeeds);
+ const selectedFeedData = selectedFeed ? companyFeeds[selectedFeed] : undefined;
+ const domainOrWorkspaceAccountID = getDomainOrWorkspaceAccountID(workspaceAccountID, selectedFeedData);
const submit = useCallback(
- // s77rt make use of statementCloseDate and remove disable lint rule
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
(statementCloseDate: CompanyCardStatementCloseDate) => {
if (selectedFeed) {
- // s77rt call API command
+ setFeedStatementEndDay(policyID, selectedFeed, domainOrWorkspaceAccountID, statementCloseDate, selectedFeedData?.statementPeriodEndDay ?? null);
}
Navigation.goBack(ROUTES.WORKSPACE_COMPANY_CARDS_SETTINGS.getRoute(policyID));
},
- [policyID, selectedFeed],
+ [policyID, selectedFeed, selectedFeedData, domainOrWorkspaceAccountID],
);
const goBack = useCallback(() => {
From 13e04ab751bbde52a1cc23e99f0072cce6babe58 Mon Sep 17 00:00:00 2001
From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com>
Date: Fri, 18 Jul 2025 23:12:25 +0100
Subject: [PATCH 09/49] pass default statement date
---
.../WorkspaceCompanyCardStatementCloseDatePage.tsx | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
index 80aa15a63b2b..3e4f4c5ae3df 100644
--- a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
+++ b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
@@ -33,16 +33,17 @@ function WorkspaceCompanyCardStatementCloseDatePage({
const companyFeeds = getCompanyFeeds(cardFeeds);
const selectedFeedData = selectedFeed ? companyFeeds[selectedFeed] : undefined;
const domainOrWorkspaceAccountID = getDomainOrWorkspaceAccountID(workspaceAccountID, selectedFeedData);
+ const statementPeriodEndDay = selectedFeedData?.statementPeriodEndDay;
const submit = useCallback(
- (statementCloseDate: CompanyCardStatementCloseDate) => {
+ (newStatementPeriodEndDate: CompanyCardStatementCloseDate) => {
if (selectedFeed) {
- setFeedStatementEndDay(policyID, selectedFeed, domainOrWorkspaceAccountID, statementCloseDate, selectedFeedData?.statementPeriodEndDay ?? null);
+ setFeedStatementEndDay(policyID, selectedFeed, domainOrWorkspaceAccountID, newStatementPeriodEndDate, statementPeriodEndDay ?? null);
}
Navigation.goBack(ROUTES.WORKSPACE_COMPANY_CARDS_SETTINGS.getRoute(policyID));
},
- [policyID, selectedFeed, selectedFeedData, domainOrWorkspaceAccountID],
+ [policyID, selectedFeed, statementPeriodEndDay, domainOrWorkspaceAccountID],
);
const goBack = useCallback(() => {
@@ -64,6 +65,7 @@ function WorkspaceCompanyCardStatementCloseDatePage({
onSubmit={submit}
onBackButtonPress={goBack}
enabledWhenOffline
+ defaultDate={statementPeriodEndDay}
/>
);
From c649b21d215c048bd0ac77847c703d30f66c2828 Mon Sep 17 00:00:00 2001
From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com>
Date: Sat, 19 Jul 2025 00:11:08 +0100
Subject: [PATCH 10/49] added offline and error feedback
---
.../WorkspaceCompanyCardsSettingsPage.tsx | 20 +++++++++++--------
src/types/onyx/CardFeeds.ts | 4 ++--
2 files changed, 14 insertions(+), 10 deletions(-)
diff --git a/src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx b/src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx
index 6647de190c06..9031ca14aa11 100644
--- a/src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx
+++ b/src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx
@@ -5,6 +5,7 @@ import HeaderWithBackButton from '@components/HeaderWithBackButton';
import * as Expensicons from '@components/Icon/Expensicons';
import MenuItem from '@components/MenuItem';
import MenuItemWithTopDescription from '@components/MenuItemWithTopDescription';
+import OfflineWithFeedback from '@components/OfflineWithFeedback';
import ScreenWrapper from '@components/ScreenWrapper';
import ScrollView from '@components/ScrollView';
import Text from '@components/Text';
@@ -123,14 +124,17 @@ function WorkspaceCompanyCardsSettingsPage({
titleStyle={styles.flex1}
onPress={navigateToChangeFeedName}
/>
-
+
+
+
;
}>;
/** Direct card feed data */
@@ -101,7 +101,7 @@ type DirectCardFeedData = OnyxCommon.OnyxValueWithOfflineFeedback<{
plaidAccessToken?: string;
/** Field-specific error messages */
- errorFields?: OnyxCommon.ErrorFields;
+ errorFields?: OnyxCommon.ErrorFields<'statementPeriodEndDay'>;
}>;
/** Card feed data */
From 5f1ba06b076a8545456d6b018f7830cfa3810359 Mon Sep 17 00:00:00 2001
From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com>
Date: Sat, 19 Jul 2025 00:54:33 +0100
Subject: [PATCH 11/49] add offline and error feedback to
WorkspaceCompanyCardStatementCloseDatePage
---
src/libs/actions/CompanyCards.ts | 17 +++++++-
...spaceCompanyCardStatementCloseDatePage.tsx | 13 +++++-
.../index.tsx | 42 +++++++++++++------
3 files changed, 57 insertions(+), 15 deletions(-)
diff --git a/src/libs/actions/CompanyCards.ts b/src/libs/actions/CompanyCards.ts
index 84aa5d9fa885..a98591fcb0f3 100644
--- a/src/libs/actions/CompanyCards.ts
+++ b/src/libs/actions/CompanyCards.ts
@@ -22,7 +22,7 @@ import CONST from '@src/CONST';
import ONYXKEYS from '@src/ONYXKEYS';
import type {Card, CardFeeds} from '@src/types/onyx';
import type {AssignCard, AssignCardData} from '@src/types/onyx/AssignCard';
-import type {AddNewCardFeedData, AddNewCardFeedStep, CardFeedDetails, CompanyCardFeed, CompanyCardStatementCloseDate} from '@src/types/onyx/CardFeeds';
+import type {AddNewCardFeedData, AddNewCardFeedStep, CardFeedData, CardFeedDetails, CompanyCardFeed, CompanyCardStatementCloseDate} from '@src/types/onyx/CardFeeds';
import type {OnyxData} from '@src/types/onyx/Request';
type AddNewCompanyCardFlowData = {
@@ -894,6 +894,20 @@ function setFeedStatementEndDay(
API.write(WRITE_COMMANDS.SET_FEED_STATEMENT_END_DAY, parameters, {optimisticData, successData, failureData});
}
+function clearErrorField(bankName: string, domainAccountID: number, fieldName: keyof CardFeedData) {
+ Onyx.merge(`${ONYXKEYS.COLLECTION.SHARED_NVP_PRIVATE_DOMAIN_MEMBER}${domainAccountID}`, {
+ settings: {
+ companyCards: {
+ [bankName]: {
+ errorFields: {
+ [fieldName]: null,
+ },
+ },
+ },
+ },
+ });
+}
+
export {
setWorkspaceCompanyCardFeedName,
deleteWorkspaceCompanyCardFeed,
@@ -915,4 +929,5 @@ export {
openPolicyAddCardFeedPage,
setTransactionStartDate,
setFeedStatementEndDay,
+ clearErrorField,
};
diff --git a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
index 3e4f4c5ae3df..b91e8d71f923 100644
--- a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
+++ b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
@@ -4,7 +4,7 @@ import useCardFeeds from '@hooks/useCardFeeds';
import useLocalize from '@hooks/useLocalize';
import useOnyx from '@hooks/useOnyx';
import useWorkspaceAccountID from '@hooks/useWorkspaceAccountID';
-import {setFeedStatementEndDay} from '@libs/actions/CompanyCards';
+import {clearErrorField, setFeedStatementEndDay} from '@libs/actions/CompanyCards';
import {getCompanyFeeds, getDomainOrWorkspaceAccountID, getSelectedFeed} from '@libs/CardUtils';
import Navigation from '@libs/Navigation/Navigation';
import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types';
@@ -50,6 +50,14 @@ function WorkspaceCompanyCardStatementCloseDatePage({
Navigation.goBack();
}, []);
+ const clearError = useCallback(() => {
+ if (!selectedFeed) {
+ return;
+ }
+
+ clearErrorField(selectedFeed, domainOrWorkspaceAccountID, 'statementPeriodEndDay');
+ }, [selectedFeed, domainOrWorkspaceAccountID]);
+
if (isLoadingOnyxValue(cardFeedsResult) || isLoadingOnyxValue(lastSelectedFeedResult)) {
return ;
}
@@ -66,6 +74,9 @@ function WorkspaceCompanyCardStatementCloseDatePage({
onBackButtonPress={goBack}
enabledWhenOffline
defaultDate={statementPeriodEndDay}
+ pendingAction={selectedFeedData?.pendingFields?.statementPeriodEndDay}
+ errors={selectedFeedData?.errorFields?.statementPeriodEndDay}
+ onCloseError={clearError}
/>
);
diff --git a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDateSelectionList/index.tsx b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDateSelectionList/index.tsx
index dd94b1f526fa..f3e1f0b06d01 100644
--- a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDateSelectionList/index.tsx
+++ b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDateSelectionList/index.tsx
@@ -5,6 +5,7 @@ import FormAlertWithSubmitButton from '@components/FormAlertWithSubmitButton';
import FormHelpMessage from '@components/FormHelpMessage';
import HeaderWithBackButton from '@components/HeaderWithBackButton';
import MenuItemWithTopDescription from '@components/MenuItemWithTopDescription';
+import OfflineWithFeedback from '@components/OfflineWithFeedback';
import ScreenWrapper from '@components/ScreenWrapper';
import ScrollView from '@components/ScrollView';
import SingleSelectListItem from '@components/SelectionList/SingleSelectListItem';
@@ -14,6 +15,7 @@ import useLocalize from '@hooks/useLocalize';
import useThemeStyles from '@hooks/useThemeStyles';
import CONST from '@src/CONST';
import type {CompanyCardStatementCloseDate} from '@src/types/onyx/CardFeeds';
+import {Errors, PendingAction} from '@src/types/onyx/OnyxCommon';
import CustomCloseDateSelectionList from './CustomCloseDateSelectionList';
type StatementCloseDateListItem = ListItem & {
@@ -26,6 +28,9 @@ type WorkspaceCompanyCardStatementCloseDateSelectionListProps = {
onBackButtonPress: () => void;
enabledWhenOffline: boolean;
defaultDate?: CompanyCardStatementCloseDate;
+ pendingAction?: PendingAction;
+ errors?: Errors | null;
+ onCloseError?: () => void;
};
function WorkspaceCompanyCardStatementCloseDateSelectionList({
@@ -34,6 +39,9 @@ function WorkspaceCompanyCardStatementCloseDateSelectionList({
onBackButtonPress,
enabledWhenOffline,
defaultDate,
+ pendingAction,
+ errors,
+ onCloseError,
}: WorkspaceCompanyCardStatementCloseDateSelectionListProps) {
const {translate} = useLocalize();
const styles = useThemeStyles();
@@ -127,19 +135,27 @@ function WorkspaceCompanyCardStatementCloseDateSelectionList({
<>
{translate('workspace.moreFeatures.companyCards.statementCloseDateDescription')}
-
- {options}
- {typeof selectedDate === 'number' && (
- setIsChoosingCustomDate(true)}
- viewMode={CONST.OPTION_MODE.COMPACT}
- />
- )}
-
+
+
+ {options}
+ {typeof selectedDate === 'number' && (
+ setIsChoosingCustomDate(true)}
+ viewMode={CONST.OPTION_MODE.COMPACT}
+ />
+ )}
+
+
Date: Sat, 19 Jul 2025 00:57:23 +0100
Subject: [PATCH 12/49] lint
---
.../index.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDateSelectionList/index.tsx b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDateSelectionList/index.tsx
index f3e1f0b06d01..4ef9aace2451 100644
--- a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDateSelectionList/index.tsx
+++ b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDateSelectionList/index.tsx
@@ -15,7 +15,7 @@ import useLocalize from '@hooks/useLocalize';
import useThemeStyles from '@hooks/useThemeStyles';
import CONST from '@src/CONST';
import type {CompanyCardStatementCloseDate} from '@src/types/onyx/CardFeeds';
-import {Errors, PendingAction} from '@src/types/onyx/OnyxCommon';
+import type {Errors, PendingAction} from '@src/types/onyx/OnyxCommon';
import CustomCloseDateSelectionList from './CustomCloseDateSelectionList';
type StatementCloseDateListItem = ListItem & {
From 9066c8fff54c6e382aa80c0c62882e1b5c471756 Mon Sep 17 00:00:00 2001
From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com>
Date: Sat, 19 Jul 2025 01:16:27 +0100
Subject: [PATCH 13/49] rename api param to statementEndDay
---
src/libs/API/parameters/SetFeedStatementEndDay.ts | 2 +-
src/libs/actions/CompanyCards.ts | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/libs/API/parameters/SetFeedStatementEndDay.ts b/src/libs/API/parameters/SetFeedStatementEndDay.ts
index e97861213792..8abe15c5c172 100644
--- a/src/libs/API/parameters/SetFeedStatementEndDay.ts
+++ b/src/libs/API/parameters/SetFeedStatementEndDay.ts
@@ -5,7 +5,7 @@ type SetFeedStatementEndDay = {
policyID: string;
bankName: string;
domainAccountID: number;
- statementPeriodEndDate: CompanyCardStatementCloseDate;
+ statementEndDay: CompanyCardStatementCloseDate;
};
export default SetFeedStatementEndDay;
diff --git a/src/libs/actions/CompanyCards.ts b/src/libs/actions/CompanyCards.ts
index a98591fcb0f3..41d9877f592d 100644
--- a/src/libs/actions/CompanyCards.ts
+++ b/src/libs/actions/CompanyCards.ts
@@ -888,7 +888,7 @@ function setFeedStatementEndDay(
policyID,
bankName,
domainAccountID,
- statementPeriodEndDate: newStatementPeriodEndDate,
+ statementEndDay: newStatementPeriodEndDate,
};
API.write(WRITE_COMMANDS.SET_FEED_STATEMENT_END_DAY, parameters, {optimisticData, successData, failureData});
From 0bea3bf64a539515bb4c927108facde817c366ba Mon Sep 17 00:00:00 2001
From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com>
Date: Mon, 21 Jul 2025 12:46:38 +0100
Subject: [PATCH 14/49] rename to SetFeedStatementPeriodEndDay
---
...Day.ts => SetFeedStatementPeriodEndDay.ts} | 6 +++---
src/libs/API/parameters/index.ts | 2 +-
src/libs/API/types.ts | 4 ++--
src/libs/actions/CompanyCards.ts | 20 +++++++++----------
...spaceCompanyCardStatementCloseDatePage.tsx | 4 ++--
5 files changed, 18 insertions(+), 18 deletions(-)
rename src/libs/API/parameters/{SetFeedStatementEndDay.ts => SetFeedStatementPeriodEndDay.ts} (58%)
diff --git a/src/libs/API/parameters/SetFeedStatementEndDay.ts b/src/libs/API/parameters/SetFeedStatementPeriodEndDay.ts
similarity index 58%
rename from src/libs/API/parameters/SetFeedStatementEndDay.ts
rename to src/libs/API/parameters/SetFeedStatementPeriodEndDay.ts
index 8abe15c5c172..f0a41f8998b4 100644
--- a/src/libs/API/parameters/SetFeedStatementEndDay.ts
+++ b/src/libs/API/parameters/SetFeedStatementPeriodEndDay.ts
@@ -1,11 +1,11 @@
import type {CompanyCardStatementCloseDate} from '@src/types/onyx/CardFeeds';
-type SetFeedStatementEndDay = {
+type SetFeedStatementPeriodEndDay = {
authToken: string | null | undefined;
policyID: string;
bankName: string;
domainAccountID: number;
- statementEndDay: CompanyCardStatementCloseDate;
+ statementPeriodEndDay: CompanyCardStatementCloseDate;
};
-export default SetFeedStatementEndDay;
+export default SetFeedStatementPeriodEndDay;
diff --git a/src/libs/API/parameters/index.ts b/src/libs/API/parameters/index.ts
index 61eb7debb218..33b8bf27b42c 100644
--- a/src/libs/API/parameters/index.ts
+++ b/src/libs/API/parameters/index.ts
@@ -351,7 +351,7 @@ export type {default as DeleteCompanyCardFeed} from './DeleteCompanyCardFeed';
export type {default as SetCompanyCardTransactionLiability} from './SetCompanyCardTransactionLiability';
export type {default as OpenPolicyCompanyCardsFeedParams} from './OpenPolicyCompanyCardsFeedParams';
export type {default as OpenPolicyAddCardFeedPageParams} from './OpenPolicyAddCardFeedPageParams';
-export type {default as SetFeedStatementEndDay} from './SetFeedStatementEndDay';
+export type {default as SetFeedStatementPeriodEndDay} from './SetFeedStatementPeriodEndDay';
export type {default as AssignCompanyCardParams} from './AssignCompanyCardParams';
export type {default as UnassignCompanyCard} from './UnassignCompanyCard';
export type {default as UpdateCompanyCard} from './UpdateCompanyCard';
diff --git a/src/libs/API/types.ts b/src/libs/API/types.ts
index 05415b9187dc..3fd091f00259 100644
--- a/src/libs/API/types.ts
+++ b/src/libs/API/types.ts
@@ -455,7 +455,7 @@ const WRITE_COMMANDS = {
DELETE_COMPANY_CARD_FEED: 'RemoveFeed',
SET_COMPANY_CARD_TRANSACTION_LIABILITY: 'SetFeedTransactionLiability',
OPEN_POLICY_ADD_CARD_FEED_PAGE: 'OpenPolicyAddCardFeedPage',
- SET_FEED_STATEMENT_END_DAY: 'SetFeedStatementEndDay',
+ SET_FEED_STATEMENT_PERIOD_END_DAY: 'SetFeedStatementPeriodEndDay',
ASSIGN_COMPANY_CARD: 'AssignCard',
UNASSIGN_COMPANY_CARD: 'UnassignCard',
UPDATE_COMPANY_CARD: 'SyncCard',
@@ -562,7 +562,7 @@ type WriteCommandParameters = {
[WRITE_COMMANDS.SET_CARD_EXPORT_ACCOUNT]: Parameters.SetCompanyCardExportAccountParams;
[WRITE_COMMANDS.SET_COMPANY_CARD_TRANSACTION_LIABILITY]: Parameters.SetCompanyCardTransactionLiability;
[WRITE_COMMANDS.OPEN_POLICY_ADD_CARD_FEED_PAGE]: Parameters.OpenPolicyAddCardFeedPageParams;
- [WRITE_COMMANDS.SET_FEED_STATEMENT_END_DAY]: Parameters.SetFeedStatementEndDay;
+ [WRITE_COMMANDS.SET_FEED_STATEMENT_PERIOD_END_DAY]: Parameters.SetFeedStatementPeriodEndDay;
[WRITE_COMMANDS.VERIFY_IDENTITY]: Parameters.VerifyIdentityParams;
[WRITE_COMMANDS.ACCEPT_WALLET_TERMS]: Parameters.AcceptWalletTermsParams;
[WRITE_COMMANDS.ANSWER_QUESTIONS_FOR_WALLET]: Parameters.AnswerQuestionsForWalletParams;
diff --git a/src/libs/actions/CompanyCards.ts b/src/libs/actions/CompanyCards.ts
index 41d9877f592d..a73d5703df75 100644
--- a/src/libs/actions/CompanyCards.ts
+++ b/src/libs/actions/CompanyCards.ts
@@ -8,7 +8,7 @@ import type {
OpenPolicyExpensifyCardsPageParams,
RequestFeedSetupParams,
SetCompanyCardExportAccountParams,
- SetFeedStatementEndDay,
+ SetFeedStatementPeriodEndDay,
UpdateCompanyCardNameParams,
} from '@libs/API/parameters';
import {READ_COMMANDS, WRITE_COMMANDS} from '@libs/API/types';
@@ -812,12 +812,12 @@ function openPolicyAddCardFeedPage(policyID: string | undefined) {
API.write(WRITE_COMMANDS.OPEN_POLICY_ADD_CARD_FEED_PAGE, parameters);
}
-function setFeedStatementEndDay(
+function setFeedStatementPeriodEndDay(
policyID: string,
bankName: string,
domainAccountID: number,
- newStatementPeriodEndDate: CompanyCardStatementCloseDate,
- oldStatementPeriodEndDate: CompanyCardStatementCloseDate | null,
+ newStatementPeriodEndDay: CompanyCardStatementCloseDate,
+ oldStatementPeriodEndDay: CompanyCardStatementCloseDate | null,
) {
const authToken = NetworkStore.getAuthToken();
@@ -829,7 +829,7 @@ function setFeedStatementEndDay(
settings: {
companyCards: {
[bankName]: {
- statementPeriodEndDay: newStatementPeriodEndDate,
+ statementPeriodEndDay: newStatementPeriodEndDay,
pendingFields: {
statementPeriodEndDay: CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE,
},
@@ -869,7 +869,7 @@ function setFeedStatementEndDay(
settings: {
companyCards: {
[bankName]: {
- statementPeriodEndDay: oldStatementPeriodEndDate,
+ statementPeriodEndDay: oldStatementPeriodEndDay,
pendingFields: {
statementPeriodEndDay: null,
},
@@ -883,15 +883,15 @@ function setFeedStatementEndDay(
},
];
- const parameters: SetFeedStatementEndDay = {
+ const parameters: SetFeedStatementPeriodEndDay = {
authToken,
policyID,
bankName,
domainAccountID,
- statementEndDay: newStatementPeriodEndDate,
+ statementPeriodEndDay: newStatementPeriodEndDay,
};
- API.write(WRITE_COMMANDS.SET_FEED_STATEMENT_END_DAY, parameters, {optimisticData, successData, failureData});
+ API.write(WRITE_COMMANDS.SET_FEED_STATEMENT_PERIOD_END_DAY, parameters, {optimisticData, successData, failureData});
}
function clearErrorField(bankName: string, domainAccountID: number, fieldName: keyof CardFeedData) {
@@ -928,6 +928,6 @@ export {
openAssignFeedCardPage,
openPolicyAddCardFeedPage,
setTransactionStartDate,
- setFeedStatementEndDay,
+ setFeedStatementPeriodEndDay,
clearErrorField,
};
diff --git a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
index b91e8d71f923..a426ec3793a0 100644
--- a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
+++ b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
@@ -4,7 +4,7 @@ import useCardFeeds from '@hooks/useCardFeeds';
import useLocalize from '@hooks/useLocalize';
import useOnyx from '@hooks/useOnyx';
import useWorkspaceAccountID from '@hooks/useWorkspaceAccountID';
-import {clearErrorField, setFeedStatementEndDay} from '@libs/actions/CompanyCards';
+import {clearErrorField, setFeedStatementPeriodEndDay} from '@libs/actions/CompanyCards';
import {getCompanyFeeds, getDomainOrWorkspaceAccountID, getSelectedFeed} from '@libs/CardUtils';
import Navigation from '@libs/Navigation/Navigation';
import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types';
@@ -38,7 +38,7 @@ function WorkspaceCompanyCardStatementCloseDatePage({
const submit = useCallback(
(newStatementPeriodEndDate: CompanyCardStatementCloseDate) => {
if (selectedFeed) {
- setFeedStatementEndDay(policyID, selectedFeed, domainOrWorkspaceAccountID, newStatementPeriodEndDate, statementPeriodEndDay ?? null);
+ setFeedStatementPeriodEndDay(policyID, selectedFeed, domainOrWorkspaceAccountID, newStatementPeriodEndDate, statementPeriodEndDay ?? null);
}
Navigation.goBack(ROUTES.WORKSPACE_COMPANY_CARDS_SETTINGS.getRoute(policyID));
From d9dedf2d4d4e7b6ef4f0cf1a0156b9ca5ed401bc Mon Sep 17 00:00:00 2001
From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com>
Date: Mon, 21 Jul 2025 13:00:52 +0100
Subject: [PATCH 15/49] rename param
---
.../WorkspaceCompanyCardStatementCloseDatePage.tsx | 4 ++--
.../workspace/companyCards/addNew/StatementCloseDateStep.tsx | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
index a426ec3793a0..eaf13bd5fef4 100644
--- a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
+++ b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
@@ -36,9 +36,9 @@ function WorkspaceCompanyCardStatementCloseDatePage({
const statementPeriodEndDay = selectedFeedData?.statementPeriodEndDay;
const submit = useCallback(
- (newStatementPeriodEndDate: CompanyCardStatementCloseDate) => {
+ (newStatementPeriodEndDay: CompanyCardStatementCloseDate) => {
if (selectedFeed) {
- setFeedStatementPeriodEndDay(policyID, selectedFeed, domainOrWorkspaceAccountID, newStatementPeriodEndDate, statementPeriodEndDay ?? null);
+ setFeedStatementPeriodEndDay(policyID, selectedFeed, domainOrWorkspaceAccountID, newStatementPeriodEndDay, statementPeriodEndDay ?? null);
}
Navigation.goBack(ROUTES.WORKSPACE_COMPANY_CARDS_SETTINGS.getRoute(policyID));
diff --git a/src/pages/workspace/companyCards/addNew/StatementCloseDateStep.tsx b/src/pages/workspace/companyCards/addNew/StatementCloseDateStep.tsx
index c0ddb4fcdf4b..b469248afcd9 100644
--- a/src/pages/workspace/companyCards/addNew/StatementCloseDateStep.tsx
+++ b/src/pages/workspace/companyCards/addNew/StatementCloseDateStep.tsx
@@ -26,9 +26,9 @@ function StatementCloseDateStep({policyID}: StatementCloseDateStepProps) {
const isPlaid = isBetaEnabled(CONST.BETAS.PLAID_COMPANY_CARDS) && !!addNewCard?.data?.publicToken;
const submit = useCallback(
- // s77rt make use of statementCloseDate and remove disable lint rule
+ // s77rt make use of statementPeriodEndDay and remove disable lint rule
// eslint-disable-next-line @typescript-eslint/no-unused-vars
- (statementCloseDate: CompanyCardStatementCloseDate) => {
+ (statementPeriodEndDay: CompanyCardStatementCloseDate) => {
if (isPlaid) {
setAddNewCompanyCardStepAndData({
step: CONST.COMPANY_CARDS.STEP.BANK_CONNECTION,
From d8be3a382bfe72195f2fca73c350df506c4757b0 Mon Sep 17 00:00:00 2001
From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com>
Date: Mon, 21 Jul 2025 13:03:47 +0100
Subject: [PATCH 16/49] change error position
---
.../index.tsx | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDateSelectionList/index.tsx b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDateSelectionList/index.tsx
index 4ef9aace2451..decd5fcc7569 100644
--- a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDateSelectionList/index.tsx
+++ b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDateSelectionList/index.tsx
@@ -137,10 +137,9 @@ function WorkspaceCompanyCardStatementCloseDateSelectionList({
{translate('workspace.moreFeatures.companyCards.statementCloseDateDescription')}
{options}
From bfb3328c5b438f9a969097831002e568f9c77157 Mon Sep 17 00:00:00 2001
From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com>
Date: Mon, 21 Jul 2025 14:15:57 +0100
Subject: [PATCH 17/49] pass statementPeriodEndDay to ImportPlaidAccounts
---
src/hooks/useImportPlaidAccounts.ts | 5 +++--
src/libs/API/parameters/ImportPlaidAccountsParams.ts | 3 +++
src/libs/actions/Plaid.ts | 12 +++++++++++-
.../companyCards/addNew/PlaidConnectionStep.tsx | 1 +
.../companyCards/addNew/StatementCloseDateStep.tsx | 3 +--
src/types/onyx/CardFeeds.ts | 3 +++
6 files changed, 22 insertions(+), 5 deletions(-)
diff --git a/src/hooks/useImportPlaidAccounts.ts b/src/hooks/useImportPlaidAccounts.ts
index f0dc26d4b7fc..dd4b2da8d1a7 100644
--- a/src/hooks/useImportPlaidAccounts.ts
+++ b/src/hooks/useImportPlaidAccounts.ts
@@ -13,11 +13,12 @@ export default function useImportPlaidAccounts(policyID?: string) {
const plaidFeedName = addNewCard?.data?.plaidConnectedFeedName ?? assignCard?.data?.plaidConnectedFeedName;
const plaidAccounts = addNewCard?.data?.plaidAccounts ?? assignCard?.data?.plaidAccounts;
const country = addNewCard?.data?.selectedCountry;
+ const statementPeriodEndDay = addNewCard?.data?.statementPeriodEndDay;
return useCallback(() => {
if (!policyID || !plaidToken || !plaidFeed || !plaidFeedName || !country || !plaidAccounts?.length) {
return;
}
- importPlaidAccounts(plaidToken, plaidFeed, plaidFeedName, country, getDomainNameForPolicy(policyID), JSON.stringify(plaidAccounts));
- }, [country, plaidAccounts, plaidFeed, plaidFeedName, plaidToken, policyID]);
+ importPlaidAccounts(plaidToken, plaidFeed, plaidFeedName, country, getDomainNameForPolicy(policyID), JSON.stringify(plaidAccounts), statementPeriodEndDay);
+ }, [statementPeriodEndDay, country, plaidAccounts, plaidFeed, plaidFeedName, plaidToken, policyID]);
}
diff --git a/src/libs/API/parameters/ImportPlaidAccountsParams.ts b/src/libs/API/parameters/ImportPlaidAccountsParams.ts
index 7fa34843dcf5..e9af4d78830c 100644
--- a/src/libs/API/parameters/ImportPlaidAccountsParams.ts
+++ b/src/libs/API/parameters/ImportPlaidAccountsParams.ts
@@ -1,3 +1,5 @@
+import type {CompanyCardStatementCloseDate} from '@src/types/onyx/CardFeeds';
+
type ImportPlaidAccountsParams = {
publicToken: string;
feed: string;
@@ -5,6 +7,7 @@ type ImportPlaidAccountsParams = {
country: string;
domainName: string;
plaidAccounts: string;
+ statementPeriodEndDay?: CompanyCardStatementCloseDate;
};
export default ImportPlaidAccountsParams;
diff --git a/src/libs/actions/Plaid.ts b/src/libs/actions/Plaid.ts
index 8190a1fcf9af..59f25b35a750 100644
--- a/src/libs/actions/Plaid.ts
+++ b/src/libs/actions/Plaid.ts
@@ -6,6 +6,7 @@ import {READ_COMMANDS, WRITE_COMMANDS} from '@libs/API/types';
import getPlaidLinkTokenParameters from '@libs/getPlaidLinkTokenParameters';
import CONST from '@src/CONST';
import ONYXKEYS from '@src/ONYXKEYS';
+import type {CompanyCardStatementCloseDate} from '@src/types/onyx/CardFeeds';
/**
* Gets the Plaid Link token used to initialize the Plaid SDK
@@ -116,7 +117,15 @@ function openPlaidBankAccountSelector(publicToken: string, bankName: string, all
});
}
-function importPlaidAccounts(publicToken: string, feed: string, feedName: string, country: string, domainName: string, plaidAccounts: string) {
+function importPlaidAccounts(
+ publicToken: string,
+ feed: string,
+ feedName: string,
+ country: string,
+ domainName: string,
+ plaidAccounts: string,
+ statementPeriodEndDay: CompanyCardStatementCloseDate | undefined,
+) {
const parameters: ImportPlaidAccountsParams = {
publicToken,
feed,
@@ -124,6 +133,7 @@ function importPlaidAccounts(publicToken: string, feed: string, feedName: string
country,
domainName,
plaidAccounts,
+ statementPeriodEndDay,
};
API.write(WRITE_COMMANDS.IMPORT_PLAID_ACCOUNTS, parameters);
diff --git a/src/pages/workspace/companyCards/addNew/PlaidConnectionStep.tsx b/src/pages/workspace/companyCards/addNew/PlaidConnectionStep.tsx
index 68e1cb1950b0..105d946d0697 100644
--- a/src/pages/workspace/companyCards/addNew/PlaidConnectionStep.tsx
+++ b/src/pages/workspace/companyCards/addNew/PlaidConnectionStep.tsx
@@ -134,6 +134,7 @@ function PlaidConnectionStep({feed, policyID}: {feed?: CompanyCardFeed; policyID
addNewCard.data.selectedCountry,
getDomainNameForPolicy(policyID),
JSON.stringify(metadata?.accounts),
+ addNewCard.data.statementPeriodEndDay,
);
InteractionManager.runAfterInteractions(() => {
setAssignCardStepAndData({
diff --git a/src/pages/workspace/companyCards/addNew/StatementCloseDateStep.tsx b/src/pages/workspace/companyCards/addNew/StatementCloseDateStep.tsx
index b469248afcd9..9a5d53c8192b 100644
--- a/src/pages/workspace/companyCards/addNew/StatementCloseDateStep.tsx
+++ b/src/pages/workspace/companyCards/addNew/StatementCloseDateStep.tsx
@@ -26,12 +26,11 @@ function StatementCloseDateStep({policyID}: StatementCloseDateStepProps) {
const isPlaid = isBetaEnabled(CONST.BETAS.PLAID_COMPANY_CARDS) && !!addNewCard?.data?.publicToken;
const submit = useCallback(
- // s77rt make use of statementPeriodEndDay and remove disable lint rule
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
(statementPeriodEndDay: CompanyCardStatementCloseDate) => {
if (isPlaid) {
setAddNewCompanyCardStepAndData({
step: CONST.COMPANY_CARDS.STEP.BANK_CONNECTION,
+ data: {statementPeriodEndDay},
});
return;
}
diff --git a/src/types/onyx/CardFeeds.ts b/src/types/onyx/CardFeeds.ts
index fcb19061e1b6..0f979db0860c 100644
--- a/src/types/onyx/CardFeeds.ts
+++ b/src/types/onyx/CardFeeds.ts
@@ -142,6 +142,9 @@ type AddNewCardFeedData = {
/** Name of the card */
cardTitle: string;
+ /** The day when the statement period for this feed ends */
+ statementPeriodEndDay?: CompanyCardStatementCloseDate;
+
/** Selected bank */
selectedBank: ValueOf | null;
From afc5e09ac1b6c79473031cd824d8662518903cd1 Mon Sep 17 00:00:00 2001
From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com>
Date: Mon, 21 Jul 2025 14:19:22 +0100
Subject: [PATCH 18/49] remove dev lock in plaid step and always redirect to
statement step
---
.../workspace/companyCards/addNew/PlaidConnectionStep.tsx | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/src/pages/workspace/companyCards/addNew/PlaidConnectionStep.tsx b/src/pages/workspace/companyCards/addNew/PlaidConnectionStep.tsx
index 105d946d0697..fe0366c5b372 100644
--- a/src/pages/workspace/companyCards/addNew/PlaidConnectionStep.tsx
+++ b/src/pages/workspace/companyCards/addNew/PlaidConnectionStep.tsx
@@ -7,7 +7,6 @@ import HeaderWithBackButton from '@components/HeaderWithBackButton';
import PlaidLink from '@components/PlaidLink';
import ScreenWrapper from '@components/ScreenWrapper';
import Text from '@components/Text';
-import useEnvironment from '@hooks/useEnvironment';
import useLocalize from '@hooks/useLocalize';
import useNetwork from '@hooks/useNetwork';
import useOnyx from '@hooks/useOnyx';
@@ -27,7 +26,6 @@ import type {CompanyCardFeed} from '@src/types/onyx';
import {isEmptyObject} from '@src/types/utils/EmptyObject';
function PlaidConnectionStep({feed, policyID}: {feed?: CompanyCardFeed; policyID?: string}) {
- const {isDevelopment} = useEnvironment();
const {translate} = useLocalize();
const styles = useThemeStyles();
const theme = useTheme();
@@ -44,9 +42,6 @@ function PlaidConnectionStep({feed, policyID}: {feed?: CompanyCardFeed; policyID
const {isOffline} = useNetwork();
const domain = getDomainNameForPolicy(policyID);
- // s77rt remove DEV lock
- const shouldSelectStatementCloseDate = isDevelopment;
-
const isAuthenticatedWithPlaid = useCallback(() => !!plaidData?.bankAccounts?.length || !isEmptyObject(plaidData?.errors), [plaidData]);
/**
@@ -162,7 +157,7 @@ function PlaidConnectionStep({feed, policyID}: {feed?: CompanyCardFeed; policyID
}
setAddNewCompanyCardStepAndData({
- step: shouldSelectStatementCloseDate ? CONST.COMPANY_CARDS.STEP.SELECT_STATEMENT_CLOSE_DATE : CONST.COMPANY_CARDS.STEP.BANK_CONNECTION,
+ step: CONST.COMPANY_CARDS.STEP.SELECT_STATEMENT_CLOSE_DATE,
data: {
publicToken,
plaidConnectedFeed,
From 89898d5ef90470e1089750e35bfc7308f80fd155 Mon Sep 17 00:00:00 2001
From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com>
Date: Mon, 21 Jul 2025 14:35:18 +0100
Subject: [PATCH 19/49] Pass statementPeriodEndDay to RequestFeedSetup
---
src/libs/API/parameters/RequestFeedSetupParams.ts | 3 +++
src/libs/actions/CompanyCards.ts | 10 +++++++++-
.../workspace/companyCards/addNew/DetailsStep.tsx | 15 ++-------------
.../addNew/StatementCloseDateStep.tsx | 2 +-
4 files changed, 15 insertions(+), 15 deletions(-)
diff --git a/src/libs/API/parameters/RequestFeedSetupParams.ts b/src/libs/API/parameters/RequestFeedSetupParams.ts
index 98e22c611efd..8065bb769ebb 100644
--- a/src/libs/API/parameters/RequestFeedSetupParams.ts
+++ b/src/libs/API/parameters/RequestFeedSetupParams.ts
@@ -1,8 +1,11 @@
+import type {CompanyCardStatementCloseDate} from '@src/types/onyx/CardFeeds';
+
type RequestFeedSetupParams = {
authToken: string;
policyID: string;
feedDetails: string;
feedType: string;
+ statementPeriodEndDay: CompanyCardStatementCloseDate;
};
export default RequestFeedSetupParams;
diff --git a/src/libs/actions/CompanyCards.ts b/src/libs/actions/CompanyCards.ts
index a73d5703df75..4605b5270e28 100644
--- a/src/libs/actions/CompanyCards.ts
+++ b/src/libs/actions/CompanyCards.ts
@@ -59,7 +59,14 @@ function clearAddNewCardFlow() {
});
}
-function addNewCompanyCardsFeed(policyID: string | undefined, cardFeed: CompanyCardFeed, feedDetails: CardFeedDetails, cardFeeds: OnyxEntry, lastSelectedFeed?: CompanyCardFeed) {
+function addNewCompanyCardsFeed(
+ policyID: string | undefined,
+ cardFeed: CompanyCardFeed,
+ feedDetails: CardFeedDetails,
+ cardFeeds: OnyxEntry,
+ statementPeriodEndDay: CompanyCardStatementCloseDate,
+ lastSelectedFeed?: CompanyCardFeed,
+) {
const authToken = NetworkStore.getAuthToken();
const workspaceAccountID = PolicyUtils.getWorkspaceAccountID(policyID);
@@ -135,6 +142,7 @@ function addNewCompanyCardsFeed(policyID: string | undefined, cardFeed: CompanyC
feedDetails: Object.entries(feedDetails)
.map(([key, value]) => `${key}: ${value}`)
.join(', '),
+ statementPeriodEndDay,
};
API.write(WRITE_COMMANDS.REQUEST_FEED_SETUP, parameters, {optimisticData, failureData, successData, finallyData});
diff --git a/src/pages/workspace/companyCards/addNew/DetailsStep.tsx b/src/pages/workspace/companyCards/addNew/DetailsStep.tsx
index 9d98f557ddf3..26832ea621a2 100644
--- a/src/pages/workspace/companyCards/addNew/DetailsStep.tsx
+++ b/src/pages/workspace/companyCards/addNew/DetailsStep.tsx
@@ -12,7 +12,6 @@ import TextInput from '@components/TextInput';
import TextLink from '@components/TextLink';
import useAutoFocusInput from '@hooks/useAutoFocusInput';
import useCardFeeds from '@hooks/useCardFeeds';
-import useEnvironment from '@hooks/useEnvironment';
import useLocalize from '@hooks/useLocalize';
import useOnyx from '@hooks/useOnyx';
import useTheme from '@hooks/useTheme';
@@ -36,7 +35,6 @@ function DetailsStep({policyID}: DetailsStepProps) {
const theme = useTheme();
const styles = useThemeStyles();
const {inputCallbackRef} = useAutoFocusInput();
- const {isDevelopment} = useEnvironment();
const [addNewCard] = useOnyx(ONYXKEYS.ADD_NEW_COMPANY_CARD, {canBeMissing: false});
const [lastSelectedFeed] = useOnyx(`${ONYXKEYS.COLLECTION.LAST_SELECTED_FEED}${policyID}`, {canBeMissing: true});
@@ -48,9 +46,6 @@ function DetailsStep({policyID}: DetailsStepProps) {
const bank = addNewCard?.data?.selectedBank;
const isOtherBankSelected = bank === CONST.COMPANY_CARDS.BANKS.OTHER;
- // s77rt remove DEV lock
- const shouldSelectStatementCloseDate = isDevelopment;
-
const submit = (values: FormOnyxValues) => {
if (!addNewCard?.data) {
return;
@@ -61,13 +56,7 @@ function DetailsStep({policyID}: DetailsStepProps) {
bankName: addNewCard.data.bankName ?? 'Amex',
};
- if (shouldSelectStatementCloseDate) {
- setAddNewCompanyCardStepAndData({step: CONST.COMPANY_CARDS.STEP.SELECT_STATEMENT_CLOSE_DATE, data: {feedDetails}});
- return;
- }
-
- addNewCompanyCardsFeed(policyID, addNewCard.data.feedType, feedDetails, cardFeeds, lastSelectedFeed);
- Navigation.goBack(ROUTES.WORKSPACE_COMPANY_CARDS.getRoute(policyID));
+ setAddNewCompanyCardStepAndData({step: CONST.COMPANY_CARDS.STEP.SELECT_STATEMENT_CLOSE_DATE, data: {feedDetails}});
};
const handleBackButtonPress = () => {
@@ -211,7 +200,7 @@ function DetailsStep({policyID}: DetailsStepProps) {
/>
Date: Mon, 21 Jul 2025 14:44:44 +0100
Subject: [PATCH 20/49] optimistically set statementPeriodEndDay
---
src/libs/actions/CompanyCards.ts | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/libs/actions/CompanyCards.ts b/src/libs/actions/CompanyCards.ts
index 4605b5270e28..47c2a7d4e299 100644
--- a/src/libs/actions/CompanyCards.ts
+++ b/src/libs/actions/CompanyCards.ts
@@ -90,6 +90,7 @@ function addNewCompanyCardsFeed(
settings: {
companyCards: {
[feedType]: {
+ statementPeriodEndDay,
errors: null,
},
},
From 629dc2f1bc7432b00dcbc46659b819d76fe1ffda Mon Sep 17 00:00:00 2001
From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com>
Date: Mon, 21 Jul 2025 14:46:12 +0100
Subject: [PATCH 21/49] lint
---
src/pages/workspace/companyCards/addNew/DetailsStep.tsx | 8 +-------
1 file changed, 1 insertion(+), 7 deletions(-)
diff --git a/src/pages/workspace/companyCards/addNew/DetailsStep.tsx b/src/pages/workspace/companyCards/addNew/DetailsStep.tsx
index 26832ea621a2..c8811629dba7 100644
--- a/src/pages/workspace/companyCards/addNew/DetailsStep.tsx
+++ b/src/pages/workspace/companyCards/addNew/DetailsStep.tsx
@@ -11,18 +11,15 @@ import Text from '@components/Text';
import TextInput from '@components/TextInput';
import TextLink from '@components/TextLink';
import useAutoFocusInput from '@hooks/useAutoFocusInput';
-import useCardFeeds from '@hooks/useCardFeeds';
import useLocalize from '@hooks/useLocalize';
import useOnyx from '@hooks/useOnyx';
import useTheme from '@hooks/useTheme';
import useThemeStyles from '@hooks/useThemeStyles';
import {getFieldRequiredErrors} from '@libs/ValidationUtils';
-import Navigation from '@navigation/Navigation';
import variables from '@styles/variables';
-import {addNewCompanyCardsFeed, setAddNewCompanyCardStepAndData} from '@userActions/CompanyCards';
+import {setAddNewCompanyCardStepAndData} from '@userActions/CompanyCards';
import CONST from '@src/CONST';
import ONYXKEYS from '@src/ONYXKEYS';
-import ROUTES from '@src/ROUTES';
import INPUT_IDS from '@src/types/form/AddNewCardFeedForm';
type DetailsStepProps = {
@@ -37,9 +34,6 @@ function DetailsStep({policyID}: DetailsStepProps) {
const {inputCallbackRef} = useAutoFocusInput();
const [addNewCard] = useOnyx(ONYXKEYS.ADD_NEW_COMPANY_CARD, {canBeMissing: false});
- const [lastSelectedFeed] = useOnyx(`${ONYXKEYS.COLLECTION.LAST_SELECTED_FEED}${policyID}`, {canBeMissing: true});
-
- const [cardFeeds] = useCardFeeds(policyID);
const feedProvider = addNewCard?.data?.feedType;
const isStripeFeedProvider = feedProvider === CONST.COMPANY_CARD.FEED_BANK_NAME.STRIPE;
From e9b964bcf20b870cdeb82e62120615b16c3d3f8b Mon Sep 17 00:00:00 2001
From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com>
Date: Mon, 21 Jul 2025 14:51:38 +0100
Subject: [PATCH 22/49] remove unnecessary param
---
src/pages/workspace/companyCards/addNew/AddNewCardPage.tsx | 2 +-
src/pages/workspace/companyCards/addNew/DetailsStep.tsx | 7 +------
2 files changed, 2 insertions(+), 7 deletions(-)
diff --git a/src/pages/workspace/companyCards/addNew/AddNewCardPage.tsx b/src/pages/workspace/companyCards/addNew/AddNewCardPage.tsx
index 0f7f31b20a3e..4781bcb9d674 100644
--- a/src/pages/workspace/companyCards/addNew/AddNewCardPage.tsx
+++ b/src/pages/workspace/companyCards/addNew/AddNewCardPage.tsx
@@ -79,7 +79,7 @@ function AddNewCardPage({policy}: WithPolicyAndFullscreenLoadingProps) {
case CONST.COMPANY_CARDS.STEP.CARD_NAME:
return ;
case CONST.COMPANY_CARDS.STEP.CARD_DETAILS:
- return ;
+ return ;
case CONST.COMPANY_CARDS.STEP.AMEX_CUSTOM_FEED:
return ;
case CONST.COMPANY_CARDS.STEP.PLAID_CONNECTION:
diff --git a/src/pages/workspace/companyCards/addNew/DetailsStep.tsx b/src/pages/workspace/companyCards/addNew/DetailsStep.tsx
index c8811629dba7..67b55602d284 100644
--- a/src/pages/workspace/companyCards/addNew/DetailsStep.tsx
+++ b/src/pages/workspace/companyCards/addNew/DetailsStep.tsx
@@ -22,12 +22,7 @@ import CONST from '@src/CONST';
import ONYXKEYS from '@src/ONYXKEYS';
import INPUT_IDS from '@src/types/form/AddNewCardFeedForm';
-type DetailsStepProps = {
- /** ID of the current policy */
- policyID: string | undefined;
-};
-
-function DetailsStep({policyID}: DetailsStepProps) {
+function DetailsStep() {
const {translate} = useLocalize();
const theme = useTheme();
const styles = useThemeStyles();
From 57fe52ef5060832649572b678515bbd6149e963b Mon Sep 17 00:00:00 2001
From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com>
Date: Mon, 21 Jul 2025 19:05:07 +0100
Subject: [PATCH 23/49] add statement dev lock for existing card feeds
---
.../WorkspaceCompanyCardsSettingsPage.tsx | 29 ++++++++++++-------
1 file changed, 18 insertions(+), 11 deletions(-)
diff --git a/src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx b/src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx
index 9031ca14aa11..12b9976ff7ba 100644
--- a/src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx
+++ b/src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx
@@ -11,6 +11,7 @@ import ScrollView from '@components/ScrollView';
import Text from '@components/Text';
import useCardFeeds from '@hooks/useCardFeeds';
import useCardsList from '@hooks/useCardsList';
+import useEnvironment from '@hooks/useEnvironment';
import useLocalize from '@hooks/useLocalize';
import useOnyx from '@hooks/useOnyx';
import usePolicy from '@hooks/usePolicy';
@@ -35,6 +36,7 @@ function WorkspaceCompanyCardsSettingsPage({
params: {policyID},
},
}: WorkspaceCompanyCardsSettingsPageProps) {
+ const {isDevelopment} = useEnvironment();
const styles = useThemeStyles();
const {translate} = useLocalize();
const policy = usePolicy(policyID);
@@ -65,6 +67,9 @@ function WorkspaceCompanyCardsSettingsPage({
return translate(`workspace.companyCards.statementCloseDate.${selectedFeedData.statementPeriodEndDay}`);
}, [translate, selectedFeedData?.statementPeriodEndDay]);
+ // s77rt remove DEV lock
+ const shouldShowStatementCloseDate = isDevelopment;
+
const navigateToChangeFeedName = () => {
Navigation.navigate(ROUTES.WORKSPACE_COMPANY_CARDS_SETTINGS_FEED_NAME.getRoute(policyID));
};
@@ -124,17 +129,19 @@ function WorkspaceCompanyCardsSettingsPage({
titleStyle={styles.flex1}
onPress={navigateToChangeFeedName}
/>
-
-
-
+ {shouldShowStatementCloseDate && (
+
+
+
+ )}
Date: Mon, 21 Jul 2025 19:07:45 +0100
Subject: [PATCH 24/49] add statement dev lock for new direct-with-plaid card
feeds
---
.../workspace/companyCards/addNew/PlaidConnectionStep.tsx | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/src/pages/workspace/companyCards/addNew/PlaidConnectionStep.tsx b/src/pages/workspace/companyCards/addNew/PlaidConnectionStep.tsx
index fe0366c5b372..105d946d0697 100644
--- a/src/pages/workspace/companyCards/addNew/PlaidConnectionStep.tsx
+++ b/src/pages/workspace/companyCards/addNew/PlaidConnectionStep.tsx
@@ -7,6 +7,7 @@ import HeaderWithBackButton from '@components/HeaderWithBackButton';
import PlaidLink from '@components/PlaidLink';
import ScreenWrapper from '@components/ScreenWrapper';
import Text from '@components/Text';
+import useEnvironment from '@hooks/useEnvironment';
import useLocalize from '@hooks/useLocalize';
import useNetwork from '@hooks/useNetwork';
import useOnyx from '@hooks/useOnyx';
@@ -26,6 +27,7 @@ import type {CompanyCardFeed} from '@src/types/onyx';
import {isEmptyObject} from '@src/types/utils/EmptyObject';
function PlaidConnectionStep({feed, policyID}: {feed?: CompanyCardFeed; policyID?: string}) {
+ const {isDevelopment} = useEnvironment();
const {translate} = useLocalize();
const styles = useThemeStyles();
const theme = useTheme();
@@ -42,6 +44,9 @@ function PlaidConnectionStep({feed, policyID}: {feed?: CompanyCardFeed; policyID
const {isOffline} = useNetwork();
const domain = getDomainNameForPolicy(policyID);
+ // s77rt remove DEV lock
+ const shouldSelectStatementCloseDate = isDevelopment;
+
const isAuthenticatedWithPlaid = useCallback(() => !!plaidData?.bankAccounts?.length || !isEmptyObject(plaidData?.errors), [plaidData]);
/**
@@ -157,7 +162,7 @@ function PlaidConnectionStep({feed, policyID}: {feed?: CompanyCardFeed; policyID
}
setAddNewCompanyCardStepAndData({
- step: CONST.COMPANY_CARDS.STEP.SELECT_STATEMENT_CLOSE_DATE,
+ step: shouldSelectStatementCloseDate ? CONST.COMPANY_CARDS.STEP.SELECT_STATEMENT_CLOSE_DATE : CONST.COMPANY_CARDS.STEP.BANK_CONNECTION,
data: {
publicToken,
plaidConnectedFeed,
From de7d6f8971ec4f0d627163d97a51486e2f86ac0d Mon Sep 17 00:00:00 2001
From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com>
Date: Mon, 21 Jul 2025 19:16:52 +0100
Subject: [PATCH 25/49] add statement dev lock for new commercial card feeds
---
.../API/parameters/RequestFeedSetupParams.ts | 2 +-
src/libs/actions/CompanyCards.ts | 2 +-
.../companyCards/addNew/AddNewCardPage.tsx | 2 +-
.../companyCards/addNew/DetailsStep.tsx | 28 ++++++++++++++++---
4 files changed, 27 insertions(+), 7 deletions(-)
diff --git a/src/libs/API/parameters/RequestFeedSetupParams.ts b/src/libs/API/parameters/RequestFeedSetupParams.ts
index 8065bb769ebb..3b6d397e7a35 100644
--- a/src/libs/API/parameters/RequestFeedSetupParams.ts
+++ b/src/libs/API/parameters/RequestFeedSetupParams.ts
@@ -5,7 +5,7 @@ type RequestFeedSetupParams = {
policyID: string;
feedDetails: string;
feedType: string;
- statementPeriodEndDay: CompanyCardStatementCloseDate;
+ statementPeriodEndDay?: CompanyCardStatementCloseDate;
};
export default RequestFeedSetupParams;
diff --git a/src/libs/actions/CompanyCards.ts b/src/libs/actions/CompanyCards.ts
index 47c2a7d4e299..ecf9f1d0947d 100644
--- a/src/libs/actions/CompanyCards.ts
+++ b/src/libs/actions/CompanyCards.ts
@@ -64,7 +64,7 @@ function addNewCompanyCardsFeed(
cardFeed: CompanyCardFeed,
feedDetails: CardFeedDetails,
cardFeeds: OnyxEntry,
- statementPeriodEndDay: CompanyCardStatementCloseDate,
+ statementPeriodEndDay: CompanyCardStatementCloseDate | undefined,
lastSelectedFeed?: CompanyCardFeed,
) {
const authToken = NetworkStore.getAuthToken();
diff --git a/src/pages/workspace/companyCards/addNew/AddNewCardPage.tsx b/src/pages/workspace/companyCards/addNew/AddNewCardPage.tsx
index 4781bcb9d674..0f7f31b20a3e 100644
--- a/src/pages/workspace/companyCards/addNew/AddNewCardPage.tsx
+++ b/src/pages/workspace/companyCards/addNew/AddNewCardPage.tsx
@@ -79,7 +79,7 @@ function AddNewCardPage({policy}: WithPolicyAndFullscreenLoadingProps) {
case CONST.COMPANY_CARDS.STEP.CARD_NAME:
return ;
case CONST.COMPANY_CARDS.STEP.CARD_DETAILS:
- return ;
+ return ;
case CONST.COMPANY_CARDS.STEP.AMEX_CUSTOM_FEED:
return ;
case CONST.COMPANY_CARDS.STEP.PLAID_CONNECTION:
diff --git a/src/pages/workspace/companyCards/addNew/DetailsStep.tsx b/src/pages/workspace/companyCards/addNew/DetailsStep.tsx
index 67b55602d284..ba0b293421fa 100644
--- a/src/pages/workspace/companyCards/addNew/DetailsStep.tsx
+++ b/src/pages/workspace/companyCards/addNew/DetailsStep.tsx
@@ -11,30 +11,44 @@ import Text from '@components/Text';
import TextInput from '@components/TextInput';
import TextLink from '@components/TextLink';
import useAutoFocusInput from '@hooks/useAutoFocusInput';
+import useCardFeeds from '@hooks/useCardFeeds';
+import useEnvironment from '@hooks/useEnvironment';
import useLocalize from '@hooks/useLocalize';
import useOnyx from '@hooks/useOnyx';
import useTheme from '@hooks/useTheme';
import useThemeStyles from '@hooks/useThemeStyles';
import {getFieldRequiredErrors} from '@libs/ValidationUtils';
+import Navigation from '@navigation/Navigation';
import variables from '@styles/variables';
-import {setAddNewCompanyCardStepAndData} from '@userActions/CompanyCards';
+import {addNewCompanyCardsFeed, setAddNewCompanyCardStepAndData} from '@userActions/CompanyCards';
import CONST from '@src/CONST';
import ONYXKEYS from '@src/ONYXKEYS';
+import ROUTES from '@src/ROUTES';
import INPUT_IDS from '@src/types/form/AddNewCardFeedForm';
-function DetailsStep() {
+type DetailsStepProps = {
+ /** ID of the current policy */
+ policyID: string | undefined;
+};
+function DetailsStep({policyID}: DetailsStepProps) {
const {translate} = useLocalize();
const theme = useTheme();
const styles = useThemeStyles();
const {inputCallbackRef} = useAutoFocusInput();
+ const {isDevelopment} = useEnvironment();
const [addNewCard] = useOnyx(ONYXKEYS.ADD_NEW_COMPANY_CARD, {canBeMissing: false});
+ const [lastSelectedFeed] = useOnyx(`${ONYXKEYS.COLLECTION.LAST_SELECTED_FEED}${policyID}`, {canBeMissing: true});
+ const [cardFeeds] = useCardFeeds(policyID);
const feedProvider = addNewCard?.data?.feedType;
const isStripeFeedProvider = feedProvider === CONST.COMPANY_CARD.FEED_BANK_NAME.STRIPE;
const bank = addNewCard?.data?.selectedBank;
const isOtherBankSelected = bank === CONST.COMPANY_CARDS.BANKS.OTHER;
+ // s77rt remove DEV lock
+ const shouldSelectStatementCloseDate = isDevelopment;
+
const submit = (values: FormOnyxValues) => {
if (!addNewCard?.data) {
return;
@@ -45,7 +59,13 @@ function DetailsStep() {
bankName: addNewCard.data.bankName ?? 'Amex',
};
- setAddNewCompanyCardStepAndData({step: CONST.COMPANY_CARDS.STEP.SELECT_STATEMENT_CLOSE_DATE, data: {feedDetails}});
+ if (shouldSelectStatementCloseDate) {
+ setAddNewCompanyCardStepAndData({step: CONST.COMPANY_CARDS.STEP.SELECT_STATEMENT_CLOSE_DATE, data: {feedDetails}});
+ return;
+ }
+
+ addNewCompanyCardsFeed(policyID, addNewCard.data.feedType, feedDetails, cardFeeds, undefined, lastSelectedFeed);
+ Navigation.goBack(ROUTES.WORKSPACE_COMPANY_CARDS.getRoute(policyID));
};
const handleBackButtonPress = () => {
@@ -189,7 +209,7 @@ function DetailsStep() {
/>
Date: Mon, 21 Jul 2025 19:20:41 +0100
Subject: [PATCH 26/49] empty lines for readability
---
src/pages/workspace/companyCards/addNew/DetailsStep.tsx | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/pages/workspace/companyCards/addNew/DetailsStep.tsx b/src/pages/workspace/companyCards/addNew/DetailsStep.tsx
index ba0b293421fa..19bfa7966c19 100644
--- a/src/pages/workspace/companyCards/addNew/DetailsStep.tsx
+++ b/src/pages/workspace/companyCards/addNew/DetailsStep.tsx
@@ -30,6 +30,7 @@ type DetailsStepProps = {
/** ID of the current policy */
policyID: string | undefined;
};
+
function DetailsStep({policyID}: DetailsStepProps) {
const {translate} = useLocalize();
const theme = useTheme();
@@ -41,6 +42,7 @@ function DetailsStep({policyID}: DetailsStepProps) {
const [lastSelectedFeed] = useOnyx(`${ONYXKEYS.COLLECTION.LAST_SELECTED_FEED}${policyID}`, {canBeMissing: true});
const [cardFeeds] = useCardFeeds(policyID);
+
const feedProvider = addNewCard?.data?.feedType;
const isStripeFeedProvider = feedProvider === CONST.COMPANY_CARD.FEED_BANK_NAME.STRIPE;
const bank = addNewCard?.data?.selectedBank;
From ab6c63fd5f4d22dfde99116f7c8c4043025e355e Mon Sep 17 00:00:00 2001
From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com>
Date: Thu, 24 Jul 2025 01:36:43 +0100
Subject: [PATCH 27/49] revert the one-state usage and use two states again in
CompanyCardStatementCloseDate
---
.../index.tsx | 109 +++++++++---------
src/types/onyx/CardFeeds.ts | 37 ++++--
2 files changed, 82 insertions(+), 64 deletions(-)
diff --git a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDateSelectionList/index.tsx b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDateSelectionList/index.tsx
index decd5fcc7569..331d31868111 100644
--- a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDateSelectionList/index.tsx
+++ b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDateSelectionList/index.tsx
@@ -1,5 +1,6 @@
import React, {useCallback, useMemo, useState} from 'react';
import {View} from 'react-native';
+import {ValueOf} from 'type-fest';
import FixedFooter from '@components/FixedFooter';
import FormAlertWithSubmitButton from '@components/FormAlertWithSubmitButton';
import FormHelpMessage from '@components/FormHelpMessage';
@@ -14,20 +15,23 @@ import Text from '@components/Text';
import useLocalize from '@hooks/useLocalize';
import useThemeStyles from '@hooks/useThemeStyles';
import CONST from '@src/CONST';
-import type {CompanyCardStatementCloseDate} from '@src/types/onyx/CardFeeds';
+import type {StatementPeriodEnd, StatementPeriodEndDay} from '@src/types/onyx/CardFeeds';
import type {Errors, PendingAction} from '@src/types/onyx/OnyxCommon';
import CustomCloseDateSelectionList from './CustomCloseDateSelectionList';
+type CompanyCardStatementCloseDate = ValueOf;
+
type StatementCloseDateListItem = ListItem & {
value: CompanyCardStatementCloseDate;
};
type WorkspaceCompanyCardStatementCloseDateSelectionListProps = {
confirmText: string;
- onSubmit: (statementCloseDate: CompanyCardStatementCloseDate) => void;
+ onSubmit: (statementPeriodEnd: StatementPeriodEnd | undefined, statementPeriodEndDay: StatementPeriodEndDay | undefined) => void;
onBackButtonPress: () => void;
enabledWhenOffline: boolean;
- defaultDate?: CompanyCardStatementCloseDate;
+ defaultStatementPeriodEnd?: StatementPeriodEnd;
+ defaultStatementPeriodEndDay?: StatementPeriodEndDay;
pendingAction?: PendingAction;
errors?: Errors | null;
onCloseError?: () => void;
@@ -38,7 +42,8 @@ function WorkspaceCompanyCardStatementCloseDateSelectionList({
onSubmit,
onBackButtonPress,
enabledWhenOffline,
- defaultDate,
+ defaultStatementPeriodEnd,
+ defaultStatementPeriodEndDay,
pendingAction,
errors,
onCloseError,
@@ -46,7 +51,13 @@ function WorkspaceCompanyCardStatementCloseDateSelectionList({
const {translate} = useLocalize();
const styles = useThemeStyles();
- const [selectedDate, setSelectedDate] = useState(defaultDate);
+ const [selectedDate, setSelectedDate] = useState(() => {
+ if (defaultStatementPeriodEndDay) {
+ return CONST.COMPANY_CARDS.STATEMENT_CLOSE_DATE.CUSTOM_DAY_OF_MONTH;
+ }
+ return defaultStatementPeriodEnd;
+ });
+ const [selectedCustomDate, setSelectedCustomDate] = useState(defaultStatementPeriodEndDay);
const [isChoosingCustomDate, setIsChoosingCustomDate] = useState(false);
const [error, setError] = useState(undefined);
@@ -64,52 +75,38 @@ function WorkspaceCompanyCardStatementCloseDateSelectionList({
onBackButtonPress();
}, [isChoosingCustomDate, onBackButtonPress]);
+ const selectDateAndClearError = useCallback((item: StatementCloseDateListItem) => {
+ setSelectedDate(item.value);
+ setError(undefined);
+ }, []);
+
+ const selectCustomDateAndClearError = useCallback(
+ (day: number) => {
+ setSelectedCustomDate(day);
+ setError(undefined);
+ goBack();
+ },
+ [goBack],
+ );
+
const submit = useCallback(() => {
if (!selectedDate) {
setError(translate('workspace.moreFeatures.companyCards.error.statementCloseDateRequired'));
return;
}
- onSubmit(selectedDate);
- }, [selectedDate, onSubmit, translate]);
-
- const options = useMemo(() => {
- return Object.values(CONST.COMPANY_CARDS.STATEMENT_CLOSE_DATE)?.map((option) => {
- let value: CompanyCardStatementCloseDate;
- let isSelected: boolean;
-
- if (option === CONST.COMPANY_CARDS.STATEMENT_CLOSE_DATE.CUSTOM_DAY_OF_MONTH) {
- if (typeof selectedDate === 'number') {
- value = selectedDate;
- } else if (typeof defaultDate === 'number') {
- value = defaultDate;
- } else {
- value = NaN;
- }
- isSelected = typeof selectedDate === 'number';
- } else {
- value = option;
- isSelected = selectedDate === option;
+ if (selectedDate === CONST.COMPANY_CARDS.STATEMENT_CLOSE_DATE.CUSTOM_DAY_OF_MONTH) {
+ if (!selectedCustomDate) {
+ setError(translate('workspace.moreFeatures.companyCards.error.statementCloseDateRequired'));
+ return;
}
- return (
- {
- setSelectedDate(item.value);
- setError(undefined);
- }}
- />
- );
- });
- }, [translate, defaultDate, selectedDate, styles.flexReset]);
+ onSubmit(undefined, selectedCustomDate);
+ return;
+ }
+
+ onSubmit(selectedDate, undefined);
+ }, [selectedDate, selectedCustomDate, onSubmit, translate]);
return (
{isChoosingCustomDate ? (
{
- setSelectedDate(day);
- setError(undefined);
- goBack();
- }}
+ initiallySelectedDay={selectedCustomDate}
+ onConfirmSelectedDay={selectCustomDateAndClearError}
/>
) : (
<>
@@ -142,12 +135,24 @@ function WorkspaceCompanyCardStatementCloseDateSelectionList({
pendingAction={pendingAction}
>
- {options}
- {typeof selectedDate === 'number' && (
+ {Object.values(CONST.COMPANY_CARDS.STATEMENT_CLOSE_DATE)?.map((option) => (
+
+ ))}
+ {selectedDate === CONST.COMPANY_CARDS.STATEMENT_CLOSE_DATE.CUSTOM_DAY_OF_MONTH && (
setIsChoosingCustomDate(true)}
viewMode={CONST.OPTION_MODE.COMPACT}
diff --git a/src/types/onyx/CardFeeds.ts b/src/types/onyx/CardFeeds.ts
index 0f979db0860c..1a561d5488d2 100644
--- a/src/types/onyx/CardFeeds.ts
+++ b/src/types/onyx/CardFeeds.ts
@@ -4,15 +4,18 @@ import type {ValueOf} from 'type-fest';
import type CONST from '@src/CONST';
import type * as OnyxCommon from './OnyxCommon';
-/** Card statement close date */
-type CompanyCardStatementCloseDate = Exclude, typeof CONST.COMPANY_CARDS.STATEMENT_CLOSE_DATE.CUSTOM_DAY_OF_MONTH> | number;
-
/** Card feed */
type CompanyCardFeed = ValueOf;
/** Custom card feed with a number */
type CompanyCardFeedWithNumber = CompanyCardFeed | `${CompanyCardFeed}${number}`;
+/** Statement period end */
+type StatementPeriodEnd = Exclude, typeof CONST.COMPANY_CARDS.STATEMENT_CLOSE_DATE.CUSTOM_DAY_OF_MONTH>;
+
+/** Statement period end day */
+type StatementPeriodEndDay = number;
+
/** Card feed provider */
type CardFeedProvider =
| typeof CONST.COMPANY_CARD.FEED_BANK_NAME.MASTER_CARD
@@ -64,14 +67,17 @@ type CustomCardFeedData = OnyxCommon.OnyxValueWithOfflineFeedback<{
/** Specifies the format for the report title related to this card */
reportTitleFormat?: string;
- /** Indicates the day when the statement period for this card ends */
- statementPeriodEndDay?: CompanyCardStatementCloseDate;
+ /** Indicates the day (preset value) when the statement period for this card ends */
+ statementPeriodEnd?: StatementPeriodEnd;
+
+ /** Indicates the day (custom day) when the statement period for this card ends */
+ statementPeriodEndDay?: StatementPeriodEndDay;
/** Plaid access token */
plaidAccessToken?: string;
/** Field-specific error messages */
- errorFields?: OnyxCommon.ErrorFields<'statementPeriodEndDay'>;
+ errorFields?: OnyxCommon.ErrorFields<'statementPeriodEnd' | 'statementPeriodEndDay'>;
}>;
/** Direct card feed data */
@@ -94,14 +100,17 @@ type DirectCardFeedData = OnyxCommon.OnyxValueWithOfflineFeedback<{
/** Whether any actions are pending */
pending?: boolean;
- /** Indicates the day when the statement period for this card ends */
- statementPeriodEndDay?: CompanyCardStatementCloseDate;
+ /** Indicates the day (preset value) when the statement period for this card ends */
+ statementPeriodEnd?: StatementPeriodEnd;
+
+ /** Indicates the day (custom day) when the statement period for this card ends */
+ statementPeriodEndDay?: StatementPeriodEndDay;
/** Plaid access token */
plaidAccessToken?: string;
/** Field-specific error messages */
- errorFields?: OnyxCommon.ErrorFields<'statementPeriodEndDay'>;
+ errorFields?: OnyxCommon.ErrorFields<'statementPeriodEnd' | 'statementPeriodEndDay'>;
}>;
/** Card feed data */
@@ -142,8 +151,11 @@ type AddNewCardFeedData = {
/** Name of the card */
cardTitle: string;
- /** The day when the statement period for this feed ends */
- statementPeriodEndDay?: CompanyCardStatementCloseDate;
+ /** Indicates the day (preset value) when the statement period for this card ends */
+ statementPeriodEnd?: StatementPeriodEnd;
+
+ /** Indicates the day (custom day) when the statement period for this card ends */
+ statementPeriodEndDay?: StatementPeriodEndDay;
/** Selected bank */
selectedBank: ValueOf | null;
@@ -205,5 +217,6 @@ export type {
CompanyCardNicknames,
CompanyCardFeedWithNumber,
FundID,
- CompanyCardStatementCloseDate,
+ StatementPeriodEnd,
+ StatementPeriodEndDay,
};
From 453e2bea0cadeb3ea9e86b3ad2edab99532caf30 Mon Sep 17 00:00:00 2001
From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com>
Date: Thu, 24 Jul 2025 01:43:29 +0100
Subject: [PATCH 28/49] correct param file name
---
...tPeriodEndDay.ts => SetFeedStatementPeriodEndDayParams.ts} | 4 ++--
src/libs/API/parameters/index.ts | 2 +-
src/libs/API/types.ts | 2 +-
src/libs/actions/CompanyCards.ts | 4 ++--
4 files changed, 6 insertions(+), 6 deletions(-)
rename src/libs/API/parameters/{SetFeedStatementPeriodEndDay.ts => SetFeedStatementPeriodEndDayParams.ts} (72%)
diff --git a/src/libs/API/parameters/SetFeedStatementPeriodEndDay.ts b/src/libs/API/parameters/SetFeedStatementPeriodEndDayParams.ts
similarity index 72%
rename from src/libs/API/parameters/SetFeedStatementPeriodEndDay.ts
rename to src/libs/API/parameters/SetFeedStatementPeriodEndDayParams.ts
index f0a41f8998b4..82ea78bc6a92 100644
--- a/src/libs/API/parameters/SetFeedStatementPeriodEndDay.ts
+++ b/src/libs/API/parameters/SetFeedStatementPeriodEndDayParams.ts
@@ -1,6 +1,6 @@
import type {CompanyCardStatementCloseDate} from '@src/types/onyx/CardFeeds';
-type SetFeedStatementPeriodEndDay = {
+type SetFeedStatementPeriodEndDayParams = {
authToken: string | null | undefined;
policyID: string;
bankName: string;
@@ -8,4 +8,4 @@ type SetFeedStatementPeriodEndDay = {
statementPeriodEndDay: CompanyCardStatementCloseDate;
};
-export default SetFeedStatementPeriodEndDay;
+export default SetFeedStatementPeriodEndDayParams;
diff --git a/src/libs/API/parameters/index.ts b/src/libs/API/parameters/index.ts
index 33b8bf27b42c..44010770404f 100644
--- a/src/libs/API/parameters/index.ts
+++ b/src/libs/API/parameters/index.ts
@@ -351,7 +351,7 @@ export type {default as DeleteCompanyCardFeed} from './DeleteCompanyCardFeed';
export type {default as SetCompanyCardTransactionLiability} from './SetCompanyCardTransactionLiability';
export type {default as OpenPolicyCompanyCardsFeedParams} from './OpenPolicyCompanyCardsFeedParams';
export type {default as OpenPolicyAddCardFeedPageParams} from './OpenPolicyAddCardFeedPageParams';
-export type {default as SetFeedStatementPeriodEndDay} from './SetFeedStatementPeriodEndDay';
+export type {default as SetFeedStatementPeriodEndDayParams} from './SetFeedStatementPeriodEndDayParams';
export type {default as AssignCompanyCardParams} from './AssignCompanyCardParams';
export type {default as UnassignCompanyCard} from './UnassignCompanyCard';
export type {default as UpdateCompanyCard} from './UpdateCompanyCard';
diff --git a/src/libs/API/types.ts b/src/libs/API/types.ts
index 6f09965002d1..d6d1a68cc7c6 100644
--- a/src/libs/API/types.ts
+++ b/src/libs/API/types.ts
@@ -562,7 +562,7 @@ type WriteCommandParameters = {
[WRITE_COMMANDS.SET_CARD_EXPORT_ACCOUNT]: Parameters.SetCompanyCardExportAccountParams;
[WRITE_COMMANDS.SET_COMPANY_CARD_TRANSACTION_LIABILITY]: Parameters.SetCompanyCardTransactionLiability;
[WRITE_COMMANDS.OPEN_POLICY_ADD_CARD_FEED_PAGE]: Parameters.OpenPolicyAddCardFeedPageParams;
- [WRITE_COMMANDS.SET_FEED_STATEMENT_PERIOD_END_DAY]: Parameters.SetFeedStatementPeriodEndDay;
+ [WRITE_COMMANDS.SET_FEED_STATEMENT_PERIOD_END_DAY]: Parameters.SetFeedStatementPeriodEndDayParams;
[WRITE_COMMANDS.VERIFY_IDENTITY]: Parameters.VerifyIdentityParams;
[WRITE_COMMANDS.ACCEPT_WALLET_TERMS]: Parameters.AcceptWalletTermsParams;
[WRITE_COMMANDS.ANSWER_QUESTIONS_FOR_WALLET]: Parameters.AnswerQuestionsForWalletParams;
diff --git a/src/libs/actions/CompanyCards.ts b/src/libs/actions/CompanyCards.ts
index ecf9f1d0947d..1f7f63faa3cc 100644
--- a/src/libs/actions/CompanyCards.ts
+++ b/src/libs/actions/CompanyCards.ts
@@ -8,7 +8,7 @@ import type {
OpenPolicyExpensifyCardsPageParams,
RequestFeedSetupParams,
SetCompanyCardExportAccountParams,
- SetFeedStatementPeriodEndDay,
+ SetFeedStatementPeriodEndDayParams,
UpdateCompanyCardNameParams,
} from '@libs/API/parameters';
import {READ_COMMANDS, WRITE_COMMANDS} from '@libs/API/types';
@@ -892,7 +892,7 @@ function setFeedStatementPeriodEndDay(
},
];
- const parameters: SetFeedStatementPeriodEndDay = {
+ const parameters: SetFeedStatementPeriodEndDayParams = {
authToken,
policyID,
bankName,
From 766a76156f1d44d5355986649dccfe40c79786e4 Mon Sep 17 00:00:00 2001
From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com>
Date: Thu, 24 Jul 2025 14:01:34 +0100
Subject: [PATCH 29/49] update API params
---
.../parameters/ImportPlaidAccountsParams.ts | 5 +++--
.../API/parameters/RequestFeedSetupParams.ts | 5 +++--
.../SetFeedStatementPeriodEndDayParams.ts | 5 +++--
src/libs/actions/CompanyCards.ts | 21 +++++++++++++++----
src/libs/actions/Plaid.ts | 6 ++++--
5 files changed, 30 insertions(+), 12 deletions(-)
diff --git a/src/libs/API/parameters/ImportPlaidAccountsParams.ts b/src/libs/API/parameters/ImportPlaidAccountsParams.ts
index e9af4d78830c..a03a1cc541f5 100644
--- a/src/libs/API/parameters/ImportPlaidAccountsParams.ts
+++ b/src/libs/API/parameters/ImportPlaidAccountsParams.ts
@@ -1,4 +1,4 @@
-import type {CompanyCardStatementCloseDate} from '@src/types/onyx/CardFeeds';
+import type {StatementPeriodEnd, StatementPeriodEndDay} from '@src/types/onyx/CardFeeds';
type ImportPlaidAccountsParams = {
publicToken: string;
@@ -7,7 +7,8 @@ type ImportPlaidAccountsParams = {
country: string;
domainName: string;
plaidAccounts: string;
- statementPeriodEndDay?: CompanyCardStatementCloseDate;
+ statementPeriodEnd?: StatementPeriodEnd;
+ statementPeriodEndDay?: StatementPeriodEndDay;
};
export default ImportPlaidAccountsParams;
diff --git a/src/libs/API/parameters/RequestFeedSetupParams.ts b/src/libs/API/parameters/RequestFeedSetupParams.ts
index 3b6d397e7a35..3474e7b89dd9 100644
--- a/src/libs/API/parameters/RequestFeedSetupParams.ts
+++ b/src/libs/API/parameters/RequestFeedSetupParams.ts
@@ -1,11 +1,12 @@
-import type {CompanyCardStatementCloseDate} from '@src/types/onyx/CardFeeds';
+import type {StatementPeriodEnd, StatementPeriodEndDay} from '@src/types/onyx/CardFeeds';
type RequestFeedSetupParams = {
authToken: string;
policyID: string;
feedDetails: string;
feedType: string;
- statementPeriodEndDay?: CompanyCardStatementCloseDate;
+ statementPeriodEnd?: StatementPeriodEnd;
+ statementPeriodEndDay?: StatementPeriodEndDay;
};
export default RequestFeedSetupParams;
diff --git a/src/libs/API/parameters/SetFeedStatementPeriodEndDayParams.ts b/src/libs/API/parameters/SetFeedStatementPeriodEndDayParams.ts
index 82ea78bc6a92..90af69922877 100644
--- a/src/libs/API/parameters/SetFeedStatementPeriodEndDayParams.ts
+++ b/src/libs/API/parameters/SetFeedStatementPeriodEndDayParams.ts
@@ -1,11 +1,12 @@
-import type {CompanyCardStatementCloseDate} from '@src/types/onyx/CardFeeds';
+import type {StatementPeriodEnd, StatementPeriodEndDay} from '@src/types/onyx/CardFeeds';
type SetFeedStatementPeriodEndDayParams = {
authToken: string | null | undefined;
policyID: string;
bankName: string;
domainAccountID: number;
- statementPeriodEndDay: CompanyCardStatementCloseDate;
+ statementPeriodEnd: StatementPeriodEnd | undefined;
+ statementPeriodEndDay: StatementPeriodEndDay | undefined;
};
export default SetFeedStatementPeriodEndDayParams;
diff --git a/src/libs/actions/CompanyCards.ts b/src/libs/actions/CompanyCards.ts
index 1f7f63faa3cc..7fbdb1e816aa 100644
--- a/src/libs/actions/CompanyCards.ts
+++ b/src/libs/actions/CompanyCards.ts
@@ -22,7 +22,7 @@ import CONST from '@src/CONST';
import ONYXKEYS from '@src/ONYXKEYS';
import type {Card, CardFeeds} from '@src/types/onyx';
import type {AssignCard, AssignCardData} from '@src/types/onyx/AssignCard';
-import type {AddNewCardFeedData, AddNewCardFeedStep, CardFeedData, CardFeedDetails, CompanyCardFeed, CompanyCardStatementCloseDate} from '@src/types/onyx/CardFeeds';
+import type {AddNewCardFeedData, AddNewCardFeedStep, CardFeedData, CardFeedDetails, CompanyCardFeed, StatementPeriodEnd, StatementPeriodEndDay} from '@src/types/onyx/CardFeeds';
import type {OnyxData} from '@src/types/onyx/Request';
type AddNewCompanyCardFlowData = {
@@ -64,7 +64,8 @@ function addNewCompanyCardsFeed(
cardFeed: CompanyCardFeed,
feedDetails: CardFeedDetails,
cardFeeds: OnyxEntry,
- statementPeriodEndDay: CompanyCardStatementCloseDate | undefined,
+ statementPeriodEnd: StatementPeriodEnd | undefined,
+ statementPeriodEndDay: StatementPeriodEndDay | undefined,
lastSelectedFeed?: CompanyCardFeed,
) {
const authToken = NetworkStore.getAuthToken();
@@ -90,6 +91,7 @@ function addNewCompanyCardsFeed(
settings: {
companyCards: {
[feedType]: {
+ statementPeriodEnd,
statementPeriodEndDay,
errors: null,
},
@@ -143,6 +145,7 @@ function addNewCompanyCardsFeed(
feedDetails: Object.entries(feedDetails)
.map(([key, value]) => `${key}: ${value}`)
.join(', '),
+ statementPeriodEnd,
statementPeriodEndDay,
};
@@ -825,8 +828,10 @@ function setFeedStatementPeriodEndDay(
policyID: string,
bankName: string,
domainAccountID: number,
- newStatementPeriodEndDay: CompanyCardStatementCloseDate,
- oldStatementPeriodEndDay: CompanyCardStatementCloseDate | null,
+ newStatementPeriodEnd: StatementPeriodEnd,
+ oldStatementPeriodEnd: StatementPeriodEnd | null,
+ newStatementPeriodEndDay: StatementPeriodEndDay,
+ oldStatementPeriodEndDay: StatementPeriodEndDay | null,
) {
const authToken = NetworkStore.getAuthToken();
@@ -838,11 +843,14 @@ function setFeedStatementPeriodEndDay(
settings: {
companyCards: {
[bankName]: {
+ statementPeriodEnd: newStatementPeriodEnd,
statementPeriodEndDay: newStatementPeriodEndDay,
pendingFields: {
+ statementPeriodEnd: CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE,
statementPeriodEndDay: CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE,
},
errorFields: {
+ statementPeriodEnd: null,
statementPeriodEndDay: null,
},
},
@@ -861,6 +869,7 @@ function setFeedStatementPeriodEndDay(
companyCards: {
[bankName]: {
pendingFields: {
+ statementPeriodEnd: null,
statementPeriodEndDay: null,
},
},
@@ -878,11 +887,14 @@ function setFeedStatementPeriodEndDay(
settings: {
companyCards: {
[bankName]: {
+ statementPeriodEnd: oldStatementPeriodEnd,
statementPeriodEndDay: oldStatementPeriodEndDay,
pendingFields: {
+ statementPeriodEnd: null,
statementPeriodEndDay: null,
},
errorFields: {
+ statementPeriodEnd: ErrorUtils.getMicroSecondOnyxErrorWithTranslationKey('common.genericErrorMessage'),
statementPeriodEndDay: ErrorUtils.getMicroSecondOnyxErrorWithTranslationKey('common.genericErrorMessage'),
},
},
@@ -897,6 +909,7 @@ function setFeedStatementPeriodEndDay(
policyID,
bankName,
domainAccountID,
+ statementPeriodEnd: newStatementPeriodEnd,
statementPeriodEndDay: newStatementPeriodEndDay,
};
diff --git a/src/libs/actions/Plaid.ts b/src/libs/actions/Plaid.ts
index 59f25b35a750..b9dd3df186db 100644
--- a/src/libs/actions/Plaid.ts
+++ b/src/libs/actions/Plaid.ts
@@ -6,7 +6,7 @@ import {READ_COMMANDS, WRITE_COMMANDS} from '@libs/API/types';
import getPlaidLinkTokenParameters from '@libs/getPlaidLinkTokenParameters';
import CONST from '@src/CONST';
import ONYXKEYS from '@src/ONYXKEYS';
-import type {CompanyCardStatementCloseDate} from '@src/types/onyx/CardFeeds';
+import type {StatementPeriodEnd, StatementPeriodEndDay} from '@src/types/onyx/CardFeeds';
/**
* Gets the Plaid Link token used to initialize the Plaid SDK
@@ -124,7 +124,8 @@ function importPlaidAccounts(
country: string,
domainName: string,
plaidAccounts: string,
- statementPeriodEndDay: CompanyCardStatementCloseDate | undefined,
+ statementPeriodEnd: StatementPeriodEnd | undefined,
+ statementPeriodEndDay: StatementPeriodEndDay | undefined,
) {
const parameters: ImportPlaidAccountsParams = {
publicToken,
@@ -133,6 +134,7 @@ function importPlaidAccounts(
country,
domainName,
plaidAccounts,
+ statementPeriodEnd,
statementPeriodEndDay,
};
From 9acb5e4f685a53995e937d50d0ac73421f8377bb Mon Sep 17 00:00:00 2001
From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com>
Date: Thu, 24 Jul 2025 14:17:33 +0100
Subject: [PATCH 30/49] update addNewCompanyCardsFeed calls
---
src/libs/actions/CompanyCards.ts | 4 ++--
.../workspace/companyCards/addNew/DetailsStep.tsx | 2 +-
.../companyCards/addNew/StatementCloseDateStep.tsx | 11 ++++++-----
3 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/src/libs/actions/CompanyCards.ts b/src/libs/actions/CompanyCards.ts
index 7fbdb1e816aa..9b6826c1daab 100644
--- a/src/libs/actions/CompanyCards.ts
+++ b/src/libs/actions/CompanyCards.ts
@@ -1,4 +1,4 @@
-import type {OnyxEntry, OnyxUpdate} from 'react-native-onyx';
+import type {NullishDeep, OnyxEntry, OnyxUpdate} from 'react-native-onyx';
import Onyx from 'react-native-onyx';
import * as API from '@libs/API';
import type {
@@ -48,7 +48,7 @@ function clearAssignCardStepAndData() {
Onyx.set(ONYXKEYS.ASSIGN_CARD, {});
}
-function setAddNewCompanyCardStepAndData({data, isEditing, step}: AddNewCompanyCardFlowData) {
+function setAddNewCompanyCardStepAndData({data, isEditing, step}: NullishDeep) {
Onyx.merge(ONYXKEYS.ADD_NEW_COMPANY_CARD, {data, isEditing, currentStep: step});
}
diff --git a/src/pages/workspace/companyCards/addNew/DetailsStep.tsx b/src/pages/workspace/companyCards/addNew/DetailsStep.tsx
index 19bfa7966c19..dfc5f91b73d3 100644
--- a/src/pages/workspace/companyCards/addNew/DetailsStep.tsx
+++ b/src/pages/workspace/companyCards/addNew/DetailsStep.tsx
@@ -66,7 +66,7 @@ function DetailsStep({policyID}: DetailsStepProps) {
return;
}
- addNewCompanyCardsFeed(policyID, addNewCard.data.feedType, feedDetails, cardFeeds, undefined, lastSelectedFeed);
+ addNewCompanyCardsFeed(policyID, addNewCard.data.feedType, feedDetails, cardFeeds, undefined, undefined, lastSelectedFeed);
Navigation.goBack(ROUTES.WORKSPACE_COMPANY_CARDS.getRoute(policyID));
};
diff --git a/src/pages/workspace/companyCards/addNew/StatementCloseDateStep.tsx b/src/pages/workspace/companyCards/addNew/StatementCloseDateStep.tsx
index 8c54d433992a..045b784c01d5 100644
--- a/src/pages/workspace/companyCards/addNew/StatementCloseDateStep.tsx
+++ b/src/pages/workspace/companyCards/addNew/StatementCloseDateStep.tsx
@@ -9,7 +9,7 @@ import WorkspaceCompanyCardStatementCloseDateSelectionList from '@pages/workspac
import CONST from '@src/CONST';
import ONYXKEYS from '@src/ONYXKEYS';
import ROUTES from '@src/ROUTES';
-import type {CompanyCardStatementCloseDate} from '@src/types/onyx/CardFeeds';
+import type {StatementPeriodEnd, StatementPeriodEndDay} from '@src/types/onyx/CardFeeds';
type StatementCloseDateStepProps = {
/** ID of the current policy */
@@ -26,17 +26,18 @@ function StatementCloseDateStep({policyID}: StatementCloseDateStepProps) {
const isPlaid = isBetaEnabled(CONST.BETAS.PLAID_COMPANY_CARDS) && !!addNewCard?.data?.publicToken;
const submit = useCallback(
- (statementPeriodEndDay: CompanyCardStatementCloseDate) => {
+ (statementPeriodEnd: StatementPeriodEnd | undefined, statementPeriodEndDay: StatementPeriodEndDay | undefined) => {
if (isPlaid) {
setAddNewCompanyCardStepAndData({
step: CONST.COMPANY_CARDS.STEP.BANK_CONNECTION,
- data: {statementPeriodEndDay},
+ // Fallback to null to clear old value (if any) because `undefined` is a no-op in Onyx.merge
+ data: {statementPeriodEnd: statementPeriodEnd ?? null, statementPeriodEndDay: statementPeriodEndDay ?? null},
});
return;
}
if (addNewCard?.data.feedDetails) {
- addNewCompanyCardsFeed(policyID, addNewCard.data.feedType, addNewCard.data.feedDetails, cardFeeds, statementPeriodEndDay, lastSelectedFeed);
+ addNewCompanyCardsFeed(policyID, addNewCard.data.feedType, addNewCard.data.feedDetails, cardFeeds, statementPeriodEnd, statementPeriodEndDay, lastSelectedFeed);
Navigation.goBack(ROUTES.WORKSPACE_COMPANY_CARDS.getRoute(policyID));
}
},
@@ -53,7 +54,7 @@ function StatementCloseDateStep({policyID}: StatementCloseDateStepProps) {
onSubmit={submit}
onBackButtonPress={goBack}
enabledWhenOffline={false}
- defaultDate={CONST.COMPANY_CARDS.STATEMENT_CLOSE_DATE.LAST_DAY_OF_MONTH}
+ defaultStatementPeriodEnd={CONST.COMPANY_CARDS.STATEMENT_CLOSE_DATE.LAST_DAY_OF_MONTH}
/>
);
}
From a6f8dd7d9a59ac1abd4412ede80ce98f80ea5348 Mon Sep 17 00:00:00 2001
From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com>
Date: Thu, 24 Jul 2025 14:20:21 +0100
Subject: [PATCH 31/49] update importPlaidAccounts calls
---
src/hooks/useImportPlaidAccounts.ts | 5 +++--
.../workspace/companyCards/addNew/PlaidConnectionStep.tsx | 1 +
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/src/hooks/useImportPlaidAccounts.ts b/src/hooks/useImportPlaidAccounts.ts
index dd4b2da8d1a7..4a4de355374a 100644
--- a/src/hooks/useImportPlaidAccounts.ts
+++ b/src/hooks/useImportPlaidAccounts.ts
@@ -13,12 +13,13 @@ export default function useImportPlaidAccounts(policyID?: string) {
const plaidFeedName = addNewCard?.data?.plaidConnectedFeedName ?? assignCard?.data?.plaidConnectedFeedName;
const plaidAccounts = addNewCard?.data?.plaidAccounts ?? assignCard?.data?.plaidAccounts;
const country = addNewCard?.data?.selectedCountry;
+ const statementPeriodEnd = addNewCard?.data?.statementPeriodEnd;
const statementPeriodEndDay = addNewCard?.data?.statementPeriodEndDay;
return useCallback(() => {
if (!policyID || !plaidToken || !plaidFeed || !plaidFeedName || !country || !plaidAccounts?.length) {
return;
}
- importPlaidAccounts(plaidToken, plaidFeed, plaidFeedName, country, getDomainNameForPolicy(policyID), JSON.stringify(plaidAccounts), statementPeriodEndDay);
- }, [statementPeriodEndDay, country, plaidAccounts, plaidFeed, plaidFeedName, plaidToken, policyID]);
+ importPlaidAccounts(plaidToken, plaidFeed, plaidFeedName, country, getDomainNameForPolicy(policyID), JSON.stringify(plaidAccounts), statementPeriodEnd, statementPeriodEndDay);
+ }, [statementPeriodEnd, statementPeriodEndDay, country, plaidAccounts, plaidFeed, plaidFeedName, plaidToken, policyID]);
}
diff --git a/src/pages/workspace/companyCards/addNew/PlaidConnectionStep.tsx b/src/pages/workspace/companyCards/addNew/PlaidConnectionStep.tsx
index 105d946d0697..43a3c3121203 100644
--- a/src/pages/workspace/companyCards/addNew/PlaidConnectionStep.tsx
+++ b/src/pages/workspace/companyCards/addNew/PlaidConnectionStep.tsx
@@ -134,6 +134,7 @@ function PlaidConnectionStep({feed, policyID}: {feed?: CompanyCardFeed; policyID
addNewCard.data.selectedCountry,
getDomainNameForPolicy(policyID),
JSON.stringify(metadata?.accounts),
+ addNewCard.data.statementPeriodEnd,
addNewCard.data.statementPeriodEndDay,
);
InteractionManager.runAfterInteractions(() => {
From 02f28f3628ba86fdd520882f73028f31b4f4dc41 Mon Sep 17 00:00:00 2001
From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com>
Date: Thu, 24 Jul 2025 14:34:24 +0100
Subject: [PATCH 32/49] update setFeedStatementPeriodEndDay calls
---
src/libs/actions/CompanyCards.ts | 20 +++++++++----------
...spaceCompanyCardStatementCloseDatePage.tsx | 12 ++++++-----
2 files changed, 17 insertions(+), 15 deletions(-)
diff --git a/src/libs/actions/CompanyCards.ts b/src/libs/actions/CompanyCards.ts
index 9b6826c1daab..6232a1e03c5e 100644
--- a/src/libs/actions/CompanyCards.ts
+++ b/src/libs/actions/CompanyCards.ts
@@ -91,8 +91,8 @@ function addNewCompanyCardsFeed(
settings: {
companyCards: {
[feedType]: {
- statementPeriodEnd,
- statementPeriodEndDay,
+ statementPeriodEnd: statementPeriodEnd ?? null,
+ statementPeriodEndDay: statementPeriodEndDay ?? null,
errors: null,
},
},
@@ -828,10 +828,10 @@ function setFeedStatementPeriodEndDay(
policyID: string,
bankName: string,
domainAccountID: number,
- newStatementPeriodEnd: StatementPeriodEnd,
- oldStatementPeriodEnd: StatementPeriodEnd | null,
- newStatementPeriodEndDay: StatementPeriodEndDay,
- oldStatementPeriodEndDay: StatementPeriodEndDay | null,
+ newStatementPeriodEnd: StatementPeriodEnd | undefined,
+ oldStatementPeriodEnd: StatementPeriodEnd | undefined,
+ newStatementPeriodEndDay: StatementPeriodEndDay | undefined,
+ oldStatementPeriodEndDay: StatementPeriodEndDay | undefined,
) {
const authToken = NetworkStore.getAuthToken();
@@ -843,8 +843,8 @@ function setFeedStatementPeriodEndDay(
settings: {
companyCards: {
[bankName]: {
- statementPeriodEnd: newStatementPeriodEnd,
- statementPeriodEndDay: newStatementPeriodEndDay,
+ statementPeriodEnd: newStatementPeriodEnd ?? null,
+ statementPeriodEndDay: newStatementPeriodEndDay ?? null,
pendingFields: {
statementPeriodEnd: CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE,
statementPeriodEndDay: CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE,
@@ -887,8 +887,8 @@ function setFeedStatementPeriodEndDay(
settings: {
companyCards: {
[bankName]: {
- statementPeriodEnd: oldStatementPeriodEnd,
- statementPeriodEndDay: oldStatementPeriodEndDay,
+ statementPeriodEnd: oldStatementPeriodEnd ?? null,
+ statementPeriodEndDay: oldStatementPeriodEndDay ?? null,
pendingFields: {
statementPeriodEnd: null,
statementPeriodEndDay: null,
diff --git a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
index eaf13bd5fef4..ca93dd055ee1 100644
--- a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
+++ b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
@@ -14,7 +14,7 @@ import CONST from '@src/CONST';
import ONYXKEYS from '@src/ONYXKEYS';
import ROUTES from '@src/ROUTES';
import type SCREENS from '@src/SCREENS';
-import type {CompanyCardStatementCloseDate} from '@src/types/onyx/CardFeeds';
+import type {StatementPeriodEnd, StatementPeriodEndDay} from '@src/types/onyx/CardFeeds';
import isLoadingOnyxValue from '@src/types/utils/isLoadingOnyxValue';
import WorkspaceCompanyCardStatementCloseDateSelectionList from './WorkspaceCompanyCardStatementCloseDateSelectionList';
@@ -33,17 +33,18 @@ function WorkspaceCompanyCardStatementCloseDatePage({
const companyFeeds = getCompanyFeeds(cardFeeds);
const selectedFeedData = selectedFeed ? companyFeeds[selectedFeed] : undefined;
const domainOrWorkspaceAccountID = getDomainOrWorkspaceAccountID(workspaceAccountID, selectedFeedData);
+ const statementPeriodEnd = selectedFeedData?.statementPeriodEnd;
const statementPeriodEndDay = selectedFeedData?.statementPeriodEndDay;
const submit = useCallback(
- (newStatementPeriodEndDay: CompanyCardStatementCloseDate) => {
+ (newStatementPeriodEnd: StatementPeriodEnd | undefined, newStatementPeriodEndDay: StatementPeriodEndDay | undefined) => {
if (selectedFeed) {
- setFeedStatementPeriodEndDay(policyID, selectedFeed, domainOrWorkspaceAccountID, newStatementPeriodEndDay, statementPeriodEndDay ?? null);
+ setFeedStatementPeriodEndDay(policyID, selectedFeed, domainOrWorkspaceAccountID, newStatementPeriodEnd, statementPeriodEnd, newStatementPeriodEndDay, statementPeriodEndDay);
}
Navigation.goBack(ROUTES.WORKSPACE_COMPANY_CARDS_SETTINGS.getRoute(policyID));
},
- [policyID, selectedFeed, statementPeriodEndDay, domainOrWorkspaceAccountID],
+ [policyID, selectedFeed, statementPeriodEnd, statementPeriodEndDay, domainOrWorkspaceAccountID],
);
const goBack = useCallback(() => {
@@ -73,7 +74,8 @@ function WorkspaceCompanyCardStatementCloseDatePage({
onSubmit={submit}
onBackButtonPress={goBack}
enabledWhenOffline
- defaultDate={statementPeriodEndDay}
+ defaultStatementPeriodEnd={statementPeriodEnd}
+ defaultStatementPeriodEndDay={statementPeriodEndDay}
pendingAction={selectedFeedData?.pendingFields?.statementPeriodEndDay}
errors={selectedFeedData?.errorFields?.statementPeriodEndDay}
onCloseError={clearError}
From c4a5d1c7d906f1b840c7eaeb6d3ee92722b553c0 Mon Sep 17 00:00:00 2001
From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com>
Date: Thu, 24 Jul 2025 14:39:36 +0100
Subject: [PATCH 33/49] update statement display value
---
.../WorkspaceCompanyCardsSettingsPage.tsx | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx b/src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx
index 12b9976ff7ba..4f94d0b93628 100644
--- a/src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx
+++ b/src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx
@@ -55,17 +55,17 @@ function WorkspaceCompanyCardsSettingsPage({
const liabilityType = selectedFeedData?.liabilityType;
const isPersonal = liabilityType === CONST.COMPANY_CARDS.DELETE_TRANSACTIONS.ALLOW;
const domainOrWorkspaceAccountID = getDomainOrWorkspaceAccountID(workspaceAccountID, selectedFeedData);
- const statementPeriodEndDay = useMemo(() => {
- if (!selectedFeedData?.statementPeriodEndDay) {
- return;
+ const statementCloseDate = useMemo(() => {
+ if (selectedFeedData?.statementPeriodEndDay) {
+ return selectedFeedData.statementPeriodEndDay;
}
- if (typeof selectedFeedData.statementPeriodEndDay === 'number') {
- return selectedFeedData.statementPeriodEndDay;
+ if (selectedFeedData?.statementPeriodEnd) {
+ return translate(`workspace.companyCards.statementCloseDate.${selectedFeedData.statementPeriodEnd}`);
}
- return translate(`workspace.companyCards.statementCloseDate.${selectedFeedData.statementPeriodEndDay}`);
- }, [translate, selectedFeedData?.statementPeriodEndDay]);
+ return undefined;
+ }, [translate, selectedFeedData?.statementPeriodEnd, selectedFeedData?.statementPeriodEndDay]);
// s77rt remove DEV lock
const shouldShowStatementCloseDate = isDevelopment;
@@ -133,7 +133,7 @@ function WorkspaceCompanyCardsSettingsPage({
Date: Thu, 24 Jul 2025 14:42:09 +0100
Subject: [PATCH 34/49] update error and pending fields values
---
.../WorkspaceCompanyCardStatementCloseDatePage.tsx | 4 ++--
.../companyCards/WorkspaceCompanyCardsSettingsPage.tsx | 8 ++++++--
2 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
index ca93dd055ee1..a42302c0bb36 100644
--- a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
+++ b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
@@ -76,8 +76,8 @@ function WorkspaceCompanyCardStatementCloseDatePage({
enabledWhenOffline
defaultStatementPeriodEnd={statementPeriodEnd}
defaultStatementPeriodEndDay={statementPeriodEndDay}
- pendingAction={selectedFeedData?.pendingFields?.statementPeriodEndDay}
- errors={selectedFeedData?.errorFields?.statementPeriodEndDay}
+ pendingAction={selectedFeedData?.pendingFields?.statementPeriodEndDay ?? selectedFeedData?.pendingFields?.statementPeriodEnd}
+ errors={selectedFeedData?.errorFields?.statementPeriodEndDay ?? selectedFeedData?.errorFields?.statementPeriodEnd}
onCloseError={clearError}
/>
diff --git a/src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx b/src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx
index 4f94d0b93628..ee0b89221fbe 100644
--- a/src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx
+++ b/src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx
@@ -130,7 +130,7 @@ function WorkspaceCompanyCardsSettingsPage({
onPress={navigateToChangeFeedName}
/>
{shouldShowStatementCloseDate && (
-
+
)}
From f7d7dd4c03e4624a9f54a2aa8e6b18756bf99e87 Mon Sep 17 00:00:00 2001
From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com>
Date: Thu, 24 Jul 2025 14:50:19 +0100
Subject: [PATCH 35/49] update statementPeriodEnd values
---
src/CONST/index.ts | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/CONST/index.ts b/src/CONST/index.ts
index 877ab223ab73..440e98fe6765 100755
--- a/src/CONST/index.ts
+++ b/src/CONST/index.ts
@@ -3246,9 +3246,9 @@ const CONST = {
ALLOW: 'personal',
},
STATEMENT_CLOSE_DATE: {
- LAST_DAY_OF_MONTH: 'lastDayOfMonth',
- LAST_BUSINESS_DAY_OF_MONTH: 'lastBusinessDayOfMonth',
- CUSTOM_DAY_OF_MONTH: 'customDayOfMonth',
+ LAST_DAY_OF_MONTH: 'LAST_DAY_OF_MONTH',
+ LAST_BUSINESS_DAY_OF_MONTH: 'LAST_BUSINESS_DAY_OF_MONTH',
+ CUSTOM_DAY_OF_MONTH: 'CUSTOM_DAY_OF_MONTH',
},
CARD_LIST_THRESHOLD: 8,
DEFAULT_EXPORT_TYPE: 'default',
From ac6eabab9d3eeb2de007ca62928c2708fe09b742 Mon Sep 17 00:00:00 2001
From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com>
Date: Thu, 24 Jul 2025 15:02:27 +0100
Subject: [PATCH 36/49] fix clear error fields
---
src/libs/actions/CompanyCards.ts | 10 +++++-----
.../WorkspaceCompanyCardStatementCloseDatePage.tsx | 4 ++--
2 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/src/libs/actions/CompanyCards.ts b/src/libs/actions/CompanyCards.ts
index 6232a1e03c5e..864e1c1f9fd6 100644
--- a/src/libs/actions/CompanyCards.ts
+++ b/src/libs/actions/CompanyCards.ts
@@ -916,14 +916,14 @@ function setFeedStatementPeriodEndDay(
API.write(WRITE_COMMANDS.SET_FEED_STATEMENT_PERIOD_END_DAY, parameters, {optimisticData, successData, failureData});
}
-function clearErrorField(bankName: string, domainAccountID: number, fieldName: keyof CardFeedData) {
+function clearErrorFields(bankName: string, domainAccountID: number, fieldNames: Array) {
+ const errorFields = Object.fromEntries(fieldNames.map((fieldName) => [fieldName, null]));
+
Onyx.merge(`${ONYXKEYS.COLLECTION.SHARED_NVP_PRIVATE_DOMAIN_MEMBER}${domainAccountID}`, {
settings: {
companyCards: {
[bankName]: {
- errorFields: {
- [fieldName]: null,
- },
+ errorFields,
},
},
},
@@ -951,5 +951,5 @@ export {
openPolicyAddCardFeedPage,
setTransactionStartDate,
setFeedStatementPeriodEndDay,
- clearErrorField,
+ clearErrorFields,
};
diff --git a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
index a42302c0bb36..98616b139090 100644
--- a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
+++ b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
@@ -4,7 +4,7 @@ import useCardFeeds from '@hooks/useCardFeeds';
import useLocalize from '@hooks/useLocalize';
import useOnyx from '@hooks/useOnyx';
import useWorkspaceAccountID from '@hooks/useWorkspaceAccountID';
-import {clearErrorField, setFeedStatementPeriodEndDay} from '@libs/actions/CompanyCards';
+import {clearErrorFields, setFeedStatementPeriodEndDay} from '@libs/actions/CompanyCards';
import {getCompanyFeeds, getDomainOrWorkspaceAccountID, getSelectedFeed} from '@libs/CardUtils';
import Navigation from '@libs/Navigation/Navigation';
import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types';
@@ -56,7 +56,7 @@ function WorkspaceCompanyCardStatementCloseDatePage({
return;
}
- clearErrorField(selectedFeed, domainOrWorkspaceAccountID, 'statementPeriodEndDay');
+ clearErrorFields(selectedFeed, domainOrWorkspaceAccountID, ['statementPeriodEnd', 'statementPeriodEndDay']);
}, [selectedFeed, domainOrWorkspaceAccountID]);
if (isLoadingOnyxValue(cardFeedsResult) || isLoadingOnyxValue(lastSelectedFeedResult)) {
From a7a1761cee69f86a2c839e5c963c0cfeb2697687 Mon Sep 17 00:00:00 2001
From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com>
Date: Thu, 24 Jul 2025 15:02:58 +0100
Subject: [PATCH 37/49] lint
---
.../index.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDateSelectionList/index.tsx b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDateSelectionList/index.tsx
index 331d31868111..c47c410ddb63 100644
--- a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDateSelectionList/index.tsx
+++ b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDateSelectionList/index.tsx
@@ -1,6 +1,6 @@
import React, {useCallback, useMemo, useState} from 'react';
import {View} from 'react-native';
-import {ValueOf} from 'type-fest';
+import type {ValueOf} from 'type-fest';
import FixedFooter from '@components/FixedFooter';
import FormAlertWithSubmitButton from '@components/FormAlertWithSubmitButton';
import FormHelpMessage from '@components/FormHelpMessage';
From 5e312a6a20d8f427331ef1c3c81d49368220a2a2 Mon Sep 17 00:00:00 2001
From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com>
Date: Thu, 24 Jul 2025 20:05:58 +0100
Subject: [PATCH 38/49] remove statementPeriodEnd from card feed data
---
src/libs/actions/CompanyCards.ts | 10 ++++-----
...spaceCompanyCardStatementCloseDatePage.tsx | 4 ++--
src/types/onyx/CardFeeds.ts | 22 +++++++++----------
3 files changed, 17 insertions(+), 19 deletions(-)
diff --git a/src/libs/actions/CompanyCards.ts b/src/libs/actions/CompanyCards.ts
index 864e1c1f9fd6..6232a1e03c5e 100644
--- a/src/libs/actions/CompanyCards.ts
+++ b/src/libs/actions/CompanyCards.ts
@@ -916,14 +916,14 @@ function setFeedStatementPeriodEndDay(
API.write(WRITE_COMMANDS.SET_FEED_STATEMENT_PERIOD_END_DAY, parameters, {optimisticData, successData, failureData});
}
-function clearErrorFields(bankName: string, domainAccountID: number, fieldNames: Array) {
- const errorFields = Object.fromEntries(fieldNames.map((fieldName) => [fieldName, null]));
-
+function clearErrorField(bankName: string, domainAccountID: number, fieldName: keyof CardFeedData) {
Onyx.merge(`${ONYXKEYS.COLLECTION.SHARED_NVP_PRIVATE_DOMAIN_MEMBER}${domainAccountID}`, {
settings: {
companyCards: {
[bankName]: {
- errorFields,
+ errorFields: {
+ [fieldName]: null,
+ },
},
},
},
@@ -951,5 +951,5 @@ export {
openPolicyAddCardFeedPage,
setTransactionStartDate,
setFeedStatementPeriodEndDay,
- clearErrorFields,
+ clearErrorField,
};
diff --git a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
index 98616b139090..a42302c0bb36 100644
--- a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
+++ b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
@@ -4,7 +4,7 @@ import useCardFeeds from '@hooks/useCardFeeds';
import useLocalize from '@hooks/useLocalize';
import useOnyx from '@hooks/useOnyx';
import useWorkspaceAccountID from '@hooks/useWorkspaceAccountID';
-import {clearErrorFields, setFeedStatementPeriodEndDay} from '@libs/actions/CompanyCards';
+import {clearErrorField, setFeedStatementPeriodEndDay} from '@libs/actions/CompanyCards';
import {getCompanyFeeds, getDomainOrWorkspaceAccountID, getSelectedFeed} from '@libs/CardUtils';
import Navigation from '@libs/Navigation/Navigation';
import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types';
@@ -56,7 +56,7 @@ function WorkspaceCompanyCardStatementCloseDatePage({
return;
}
- clearErrorFields(selectedFeed, domainOrWorkspaceAccountID, ['statementPeriodEnd', 'statementPeriodEndDay']);
+ clearErrorField(selectedFeed, domainOrWorkspaceAccountID, 'statementPeriodEndDay');
}, [selectedFeed, domainOrWorkspaceAccountID]);
if (isLoadingOnyxValue(cardFeedsResult) || isLoadingOnyxValue(lastSelectedFeedResult)) {
diff --git a/src/types/onyx/CardFeeds.ts b/src/types/onyx/CardFeeds.ts
index 1a561d5488d2..7f184d3049a1 100644
--- a/src/types/onyx/CardFeeds.ts
+++ b/src/types/onyx/CardFeeds.ts
@@ -67,17 +67,16 @@ type CustomCardFeedData = OnyxCommon.OnyxValueWithOfflineFeedback<{
/** Specifies the format for the report title related to this card */
reportTitleFormat?: string;
- /** Indicates the day (preset value) when the statement period for this card ends */
- statementPeriodEnd?: StatementPeriodEnd;
-
- /** Indicates the day (custom day) when the statement period for this card ends */
- statementPeriodEndDay?: StatementPeriodEndDay;
+ /** Indicates the day when the statement period for this card ends.
+ * The BE returns a unified key which may hold either a preset value (string) or a custom day (integer)
+ */
+ statementPeriodEndDay?: StatementPeriodEnd | StatementPeriodEndDay;
/** Plaid access token */
plaidAccessToken?: string;
/** Field-specific error messages */
- errorFields?: OnyxCommon.ErrorFields<'statementPeriodEnd' | 'statementPeriodEndDay'>;
+ errorFields?: OnyxCommon.ErrorFields<'statementPeriodEnd'>;
}>;
/** Direct card feed data */
@@ -100,17 +99,16 @@ type DirectCardFeedData = OnyxCommon.OnyxValueWithOfflineFeedback<{
/** Whether any actions are pending */
pending?: boolean;
- /** Indicates the day (preset value) when the statement period for this card ends */
- statementPeriodEnd?: StatementPeriodEnd;
-
- /** Indicates the day (custom day) when the statement period for this card ends */
- statementPeriodEndDay?: StatementPeriodEndDay;
+ /** Indicates the day when the statement period for this card ends.
+ * The BE returns a unified key which may hold either a preset value (string) or a custom day (integer)
+ */
+ statementPeriodEndDay?: StatementPeriodEnd | StatementPeriodEndDay;
/** Plaid access token */
plaidAccessToken?: string;
/** Field-specific error messages */
- errorFields?: OnyxCommon.ErrorFields<'statementPeriodEnd' | 'statementPeriodEndDay'>;
+ errorFields?: OnyxCommon.ErrorFields<'statementPeriodEnd'>;
}>;
/** Card feed data */
From 70d95c99bb13f8682efd8cea6b192a33a2645592 Mon Sep 17 00:00:00 2001
From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com>
Date: Thu, 24 Jul 2025 20:17:43 +0100
Subject: [PATCH 39/49] update api commands to use only statementPeriodEndDay
in onyx updates
---
src/libs/actions/CompanyCards.ts | 15 +++------------
...WorkspaceCompanyCardStatementCloseDatePage.tsx | 5 ++---
2 files changed, 5 insertions(+), 15 deletions(-)
diff --git a/src/libs/actions/CompanyCards.ts b/src/libs/actions/CompanyCards.ts
index 6232a1e03c5e..e478265339f5 100644
--- a/src/libs/actions/CompanyCards.ts
+++ b/src/libs/actions/CompanyCards.ts
@@ -91,8 +91,7 @@ function addNewCompanyCardsFeed(
settings: {
companyCards: {
[feedType]: {
- statementPeriodEnd: statementPeriodEnd ?? null,
- statementPeriodEndDay: statementPeriodEndDay ?? null,
+ statementPeriodEndDay: statementPeriodEndDay ?? statementPeriodEnd ?? null,
errors: null,
},
},
@@ -829,9 +828,8 @@ function setFeedStatementPeriodEndDay(
bankName: string,
domainAccountID: number,
newStatementPeriodEnd: StatementPeriodEnd | undefined,
- oldStatementPeriodEnd: StatementPeriodEnd | undefined,
newStatementPeriodEndDay: StatementPeriodEndDay | undefined,
- oldStatementPeriodEndDay: StatementPeriodEndDay | undefined,
+ oldStatementPeriodEndDay: StatementPeriodEnd | StatementPeriodEndDay | undefined,
) {
const authToken = NetworkStore.getAuthToken();
@@ -843,14 +841,11 @@ function setFeedStatementPeriodEndDay(
settings: {
companyCards: {
[bankName]: {
- statementPeriodEnd: newStatementPeriodEnd ?? null,
- statementPeriodEndDay: newStatementPeriodEndDay ?? null,
+ statementPeriodEndDay: newStatementPeriodEndDay ?? newStatementPeriodEnd ?? null,
pendingFields: {
- statementPeriodEnd: CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE,
statementPeriodEndDay: CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE,
},
errorFields: {
- statementPeriodEnd: null,
statementPeriodEndDay: null,
},
},
@@ -869,7 +864,6 @@ function setFeedStatementPeriodEndDay(
companyCards: {
[bankName]: {
pendingFields: {
- statementPeriodEnd: null,
statementPeriodEndDay: null,
},
},
@@ -887,14 +881,11 @@ function setFeedStatementPeriodEndDay(
settings: {
companyCards: {
[bankName]: {
- statementPeriodEnd: oldStatementPeriodEnd ?? null,
statementPeriodEndDay: oldStatementPeriodEndDay ?? null,
pendingFields: {
- statementPeriodEnd: null,
statementPeriodEndDay: null,
},
errorFields: {
- statementPeriodEnd: ErrorUtils.getMicroSecondOnyxErrorWithTranslationKey('common.genericErrorMessage'),
statementPeriodEndDay: ErrorUtils.getMicroSecondOnyxErrorWithTranslationKey('common.genericErrorMessage'),
},
},
diff --git a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
index a42302c0bb36..6875b3951c16 100644
--- a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
+++ b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
@@ -33,18 +33,17 @@ function WorkspaceCompanyCardStatementCloseDatePage({
const companyFeeds = getCompanyFeeds(cardFeeds);
const selectedFeedData = selectedFeed ? companyFeeds[selectedFeed] : undefined;
const domainOrWorkspaceAccountID = getDomainOrWorkspaceAccountID(workspaceAccountID, selectedFeedData);
- const statementPeriodEnd = selectedFeedData?.statementPeriodEnd;
const statementPeriodEndDay = selectedFeedData?.statementPeriodEndDay;
const submit = useCallback(
(newStatementPeriodEnd: StatementPeriodEnd | undefined, newStatementPeriodEndDay: StatementPeriodEndDay | undefined) => {
if (selectedFeed) {
- setFeedStatementPeriodEndDay(policyID, selectedFeed, domainOrWorkspaceAccountID, newStatementPeriodEnd, statementPeriodEnd, newStatementPeriodEndDay, statementPeriodEndDay);
+ setFeedStatementPeriodEndDay(policyID, selectedFeed, domainOrWorkspaceAccountID, newStatementPeriodEnd, newStatementPeriodEndDay, statementPeriodEndDay);
}
Navigation.goBack(ROUTES.WORKSPACE_COMPANY_CARDS_SETTINGS.getRoute(policyID));
},
- [policyID, selectedFeed, statementPeriodEnd, statementPeriodEndDay, domainOrWorkspaceAccountID],
+ [policyID, selectedFeed, statementPeriodEndDay, domainOrWorkspaceAccountID],
);
const goBack = useCallback(() => {
From 207d5ad22b547b0837b5601005cddafe654f8ebd Mon Sep 17 00:00:00 2001
From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com>
Date: Thu, 24 Jul 2025 20:19:52 +0100
Subject: [PATCH 40/49] update error and pending fields
---
.../WorkspaceCompanyCardStatementCloseDatePage.tsx | 4 ++--
.../companyCards/WorkspaceCompanyCardsSettingsPage.tsx | 8 ++------
src/types/onyx/CardFeeds.ts | 4 ++--
3 files changed, 6 insertions(+), 10 deletions(-)
diff --git a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
index 6875b3951c16..b27382e1084e 100644
--- a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
+++ b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
@@ -75,8 +75,8 @@ function WorkspaceCompanyCardStatementCloseDatePage({
enabledWhenOffline
defaultStatementPeriodEnd={statementPeriodEnd}
defaultStatementPeriodEndDay={statementPeriodEndDay}
- pendingAction={selectedFeedData?.pendingFields?.statementPeriodEndDay ?? selectedFeedData?.pendingFields?.statementPeriodEnd}
- errors={selectedFeedData?.errorFields?.statementPeriodEndDay ?? selectedFeedData?.errorFields?.statementPeriodEnd}
+ pendingAction={selectedFeedData?.pendingFields?.statementPeriodEndDay}
+ errors={selectedFeedData?.errorFields?.statementPeriodEndDay}
onCloseError={clearError}
/>
diff --git a/src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx b/src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx
index ee0b89221fbe..4f94d0b93628 100644
--- a/src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx
+++ b/src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx
@@ -130,7 +130,7 @@ function WorkspaceCompanyCardsSettingsPage({
onPress={navigateToChangeFeedName}
/>
{shouldShowStatementCloseDate && (
-
+
)}
diff --git a/src/types/onyx/CardFeeds.ts b/src/types/onyx/CardFeeds.ts
index 7f184d3049a1..e73e95a6ce84 100644
--- a/src/types/onyx/CardFeeds.ts
+++ b/src/types/onyx/CardFeeds.ts
@@ -76,7 +76,7 @@ type CustomCardFeedData = OnyxCommon.OnyxValueWithOfflineFeedback<{
plaidAccessToken?: string;
/** Field-specific error messages */
- errorFields?: OnyxCommon.ErrorFields<'statementPeriodEnd'>;
+ errorFields?: OnyxCommon.ErrorFields<'statementPeriodEndDay'>;
}>;
/** Direct card feed data */
@@ -108,7 +108,7 @@ type DirectCardFeedData = OnyxCommon.OnyxValueWithOfflineFeedback<{
plaidAccessToken?: string;
/** Field-specific error messages */
- errorFields?: OnyxCommon.ErrorFields<'statementPeriodEnd'>;
+ errorFields?: OnyxCommon.ErrorFields<'statementPeriodEndDay'>;
}>;
/** Card feed data */
From 55405d711185a7455d2a0237b2401f16fc2e9bc7 Mon Sep 17 00:00:00 2001
From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com>
Date: Thu, 24 Jul 2025 20:36:23 +0100
Subject: [PATCH 41/49] update display value logic
---
...kspaceCompanyCardStatementCloseDatePage.tsx | 18 +++++++++++++++---
.../WorkspaceCompanyCardsSettingsPage.tsx | 12 ++++++------
2 files changed, 21 insertions(+), 9 deletions(-)
diff --git a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
index b27382e1084e..8d636a589673 100644
--- a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
+++ b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
@@ -1,4 +1,4 @@
-import React, {useCallback} from 'react';
+import React, {useCallback, useMemo} from 'react';
import FullScreenLoadingIndicator from '@components/FullscreenLoadingIndicator';
import useCardFeeds from '@hooks/useCardFeeds';
import useLocalize from '@hooks/useLocalize';
@@ -35,6 +35,18 @@ function WorkspaceCompanyCardStatementCloseDatePage({
const domainOrWorkspaceAccountID = getDomainOrWorkspaceAccountID(workspaceAccountID, selectedFeedData);
const statementPeriodEndDay = selectedFeedData?.statementPeriodEndDay;
+ const [defaultStatementPeriodEnd, defaultStatementPeriodEndDay] = useMemo(() => {
+ if (!statementPeriodEndDay) {
+ return [undefined, undefined];
+ }
+
+ if (typeof statementPeriodEndDay === 'number') {
+ return [undefined, statementPeriodEndDay];
+ }
+
+ return [statementPeriodEndDay, undefined];
+ }, [statementPeriodEndDay]);
+
const submit = useCallback(
(newStatementPeriodEnd: StatementPeriodEnd | undefined, newStatementPeriodEndDay: StatementPeriodEndDay | undefined) => {
if (selectedFeed) {
@@ -73,8 +85,8 @@ function WorkspaceCompanyCardStatementCloseDatePage({
onSubmit={submit}
onBackButtonPress={goBack}
enabledWhenOffline
- defaultStatementPeriodEnd={statementPeriodEnd}
- defaultStatementPeriodEndDay={statementPeriodEndDay}
+ defaultStatementPeriodEnd={defaultStatementPeriodEnd}
+ defaultStatementPeriodEndDay={defaultStatementPeriodEndDay}
pendingAction={selectedFeedData?.pendingFields?.statementPeriodEndDay}
errors={selectedFeedData?.errorFields?.statementPeriodEndDay}
onCloseError={clearError}
diff --git a/src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx b/src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx
index 4f94d0b93628..a543e6006f52 100644
--- a/src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx
+++ b/src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx
@@ -56,16 +56,16 @@ function WorkspaceCompanyCardsSettingsPage({
const isPersonal = liabilityType === CONST.COMPANY_CARDS.DELETE_TRANSACTIONS.ALLOW;
const domainOrWorkspaceAccountID = getDomainOrWorkspaceAccountID(workspaceAccountID, selectedFeedData);
const statementCloseDate = useMemo(() => {
- if (selectedFeedData?.statementPeriodEndDay) {
- return selectedFeedData.statementPeriodEndDay;
+ if (!selectedFeedData?.statementPeriodEndDay) {
+ return undefined;
}
- if (selectedFeedData?.statementPeriodEnd) {
- return translate(`workspace.companyCards.statementCloseDate.${selectedFeedData.statementPeriodEnd}`);
+ if (typeof selectedFeedData?.statementPeriodEndDay === 'number') {
+ return selectedFeedData.statementPeriodEndDay;
}
- return undefined;
- }, [translate, selectedFeedData?.statementPeriodEnd, selectedFeedData?.statementPeriodEndDay]);
+ return translate(`workspace.companyCards.statementCloseDate.${selectedFeedData.statementPeriodEndDay}`);
+ }, [translate, selectedFeedData?.statementPeriodEndDay]);
// s77rt remove DEV lock
const shouldShowStatementCloseDate = isDevelopment;
From cdd04cc8fc250bf37c2e6e4c4cea496b064a022e Mon Sep 17 00:00:00 2001
From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com>
Date: Thu, 24 Jul 2025 20:56:08 +0100
Subject: [PATCH 42/49] don't call api if value didn't change
---
.../WorkspaceCompanyCardStatementCloseDatePage.tsx | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
index 8d636a589673..d3b793456fc4 100644
--- a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
+++ b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
@@ -49,7 +49,8 @@ function WorkspaceCompanyCardStatementCloseDatePage({
const submit = useCallback(
(newStatementPeriodEnd: StatementPeriodEnd | undefined, newStatementPeriodEndDay: StatementPeriodEndDay | undefined) => {
- if (selectedFeed) {
+ const isChangedValue = (newStatementPeriodEndDay ?? newStatementPeriodEnd) !== statementPeriodEndDay;
+ if (selectedFeed && isChangedValue) {
setFeedStatementPeriodEndDay(policyID, selectedFeed, domainOrWorkspaceAccountID, newStatementPeriodEnd, newStatementPeriodEndDay, statementPeriodEndDay);
}
From e1f9856e7b62a67b34137b5de151bc6f5f0e2f83 Mon Sep 17 00:00:00 2001
From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com>
Date: Sun, 27 Jul 2025 13:11:58 +0100
Subject: [PATCH 43/49] wrap submit in useCallback
---
.../companyCards/addNew/DetailsStep.tsx | 33 ++++++++++---------
1 file changed, 18 insertions(+), 15 deletions(-)
diff --git a/src/pages/workspace/companyCards/addNew/DetailsStep.tsx b/src/pages/workspace/companyCards/addNew/DetailsStep.tsx
index dfc5f91b73d3..203be5eb9d3a 100644
--- a/src/pages/workspace/companyCards/addNew/DetailsStep.tsx
+++ b/src/pages/workspace/companyCards/addNew/DetailsStep.tsx
@@ -51,24 +51,27 @@ function DetailsStep({policyID}: DetailsStepProps) {
// s77rt remove DEV lock
const shouldSelectStatementCloseDate = isDevelopment;
- const submit = (values: FormOnyxValues) => {
- if (!addNewCard?.data) {
- return;
- }
+ const submit = useCallback(
+ (values: FormOnyxValues) => {
+ if (!addNewCard?.data) {
+ return;
+ }
- const feedDetails = {
- ...values,
- bankName: addNewCard.data.bankName ?? 'Amex',
- };
+ const feedDetails = {
+ ...values,
+ bankName: addNewCard.data.bankName ?? 'Amex',
+ };
- if (shouldSelectStatementCloseDate) {
- setAddNewCompanyCardStepAndData({step: CONST.COMPANY_CARDS.STEP.SELECT_STATEMENT_CLOSE_DATE, data: {feedDetails}});
- return;
- }
+ if (shouldSelectStatementCloseDate) {
+ setAddNewCompanyCardStepAndData({step: CONST.COMPANY_CARDS.STEP.SELECT_STATEMENT_CLOSE_DATE, data: {feedDetails}});
+ return;
+ }
- addNewCompanyCardsFeed(policyID, addNewCard.data.feedType, feedDetails, cardFeeds, undefined, undefined, lastSelectedFeed);
- Navigation.goBack(ROUTES.WORKSPACE_COMPANY_CARDS.getRoute(policyID));
- };
+ addNewCompanyCardsFeed(policyID, addNewCard.data.feedType, feedDetails, cardFeeds, undefined, undefined, lastSelectedFeed);
+ Navigation.goBack(ROUTES.WORKSPACE_COMPANY_CARDS.getRoute(policyID));
+ },
+ [addNewCard?.data, policyID, cardFeeds, lastSelectedFeed],
+ );
const handleBackButtonPress = () => {
if (isOtherBankSelected) {
From b07f3f340e6dd775107926d488d143c82f6fcb2c Mon Sep 17 00:00:00 2001
From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com>
Date: Wed, 30 Jul 2025 17:16:34 +0100
Subject: [PATCH 44/49] add backTo param to
WorkspaceCompanyCardStatementCloseDatePageProps
---
src/ROUTES.ts | 2 +-
src/libs/Navigation/types.ts | 1 +
.../WorkspaceCompanyCardStatementCloseDatePage.tsx | 6 +++---
3 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/src/ROUTES.ts b/src/ROUTES.ts
index e35fd1f94cd5..be8d31ad3be6 100644
--- a/src/ROUTES.ts
+++ b/src/ROUTES.ts
@@ -1813,7 +1813,7 @@ const ROUTES = {
},
WORKSPACE_COMPANY_CARDS_SETTINGS_STATEMENT_CLOSE_DATE: {
route: 'workspaces/:policyID/company-cards/settings/statement-close-date',
- getRoute: (policyID: string) => `workspaces/${policyID}/company-cards/settings/statement-close-date` as const,
+ getRoute: (policyID: string, backTo?: string) => getUrlWithBackToParam(`workspaces/${policyID}/company-cards/settings/statement-close-date`, backTo),
},
WORKSPACE_RULES: {
route: 'workspaces/:policyID/rules',
diff --git a/src/libs/Navigation/types.ts b/src/libs/Navigation/types.ts
index ad8de7729f8a..ffa769cb7eeb 100644
--- a/src/libs/Navigation/types.ts
+++ b/src/libs/Navigation/types.ts
@@ -1013,6 +1013,7 @@ type SettingsNavigatorParamList = {
};
[SCREENS.WORKSPACE.COMPANY_CARDS_SETTINGS_STATEMENT_CLOSE_DATE]: {
policyID: string;
+ backTo?: Routes;
};
[SCREENS.WORKSPACE.EXPENSIFY_CARD_DETAILS]: {
policyID: string;
diff --git a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
index d3b793456fc4..376a31edb51d 100644
--- a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
+++ b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
@@ -22,7 +22,7 @@ type WorkspaceCompanyCardStatementCloseDatePageProps = PlatformStackScreenProps<
function WorkspaceCompanyCardStatementCloseDatePage({
route: {
- params: {policyID},
+ params: {policyID, backTo},
},
}: WorkspaceCompanyCardStatementCloseDatePageProps) {
const {translate} = useLocalize();
@@ -60,8 +60,8 @@ function WorkspaceCompanyCardStatementCloseDatePage({
);
const goBack = useCallback(() => {
- Navigation.goBack();
- }, []);
+ Navigation.goBack(backTo);
+ }, [backTo]);
const clearError = useCallback(() => {
if (!selectedFeed) {
From 5a2ab05d776638caac51ae4265d5207f0ad246ed Mon Sep 17 00:00:00 2001
From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com>
Date: Wed, 30 Jul 2025 17:23:30 +0100
Subject: [PATCH 45/49] redirect user to statement period page after a direct
feed is added
---
.../companyCards/BankConnection/index.native.tsx | 9 ++++++++-
.../workspace/companyCards/BankConnection/index.tsx | 9 ++++++++-
2 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/src/pages/workspace/companyCards/BankConnection/index.native.tsx b/src/pages/workspace/companyCards/BankConnection/index.native.tsx
index d8f953ee808f..2a040b358f01 100644
--- a/src/pages/workspace/companyCards/BankConnection/index.native.tsx
+++ b/src/pages/workspace/companyCards/BankConnection/index.native.tsx
@@ -114,7 +114,14 @@ function BankConnection({policyID: policyIDFromProps, feed, route}: BankConnecti
if (newFeed) {
updateSelectedFeed(newFeed, policyID);
}
- Navigation.goBack(ROUTES.WORKSPACE_COMPANY_CARDS.getRoute(policyID));
+
+ // Direct feeds (except those added via Plaid) are created with default statement period end date.
+ // Redirect the user to set a custom date.
+ if (policyID && !isPlaid) {
+ Navigation.navigate(ROUTES.WORKSPACE_COMPANY_CARDS_SETTINGS_STATEMENT_CLOSE_DATE.getRoute(policyID, ROUTES.WORKSPACE_COMPANY_CARDS.getRoute(policyID)));
+ } else {
+ Navigation.goBack(ROUTES.WORKSPACE_COMPANY_CARDS.getRoute(policyID));
+ }
}
if (isPlaid) {
onImportPlaidAccounts();
diff --git a/src/pages/workspace/companyCards/BankConnection/index.tsx b/src/pages/workspace/companyCards/BankConnection/index.tsx
index 6ae17dd42b04..8a8d92e2a34f 100644
--- a/src/pages/workspace/companyCards/BankConnection/index.tsx
+++ b/src/pages/workspace/companyCards/BankConnection/index.tsx
@@ -146,7 +146,14 @@ function BankConnection({policyID: policyIDFromProps, feed, route}: BankConnecti
updateSelectedFeed(newFeed, policyID);
}
Navigation.closeRHPFlow();
- Navigation.navigate(ROUTES.WORKSPACE_COMPANY_CARDS.getRoute(policyID), {forceReplace: true});
+
+ // Direct feeds (except those added via Plaid) are created with default statement period end date.
+ // Redirect the user to set a custom date.
+ if (policyID && !isPlaid) {
+ Navigation.navigate(ROUTES.WORKSPACE_COMPANY_CARDS_SETTINGS_STATEMENT_CLOSE_DATE.getRoute(policyID, ROUTES.WORKSPACE_COMPANY_CARDS.getRoute(policyID)));
+ } else {
+ Navigation.navigate(ROUTES.WORKSPACE_COMPANY_CARDS.getRoute(policyID), {forceReplace: true});
+ }
return;
}
if (!shouldBlockWindowOpen) {
From 87b33111adbcbab80485620fc8119af85dea17d7 Mon Sep 17 00:00:00 2001
From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com>
Date: Mon, 4 Aug 2025 21:22:05 +0100
Subject: [PATCH 46/49] lint
---
src/pages/workspace/companyCards/addNew/DetailsStep.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/pages/workspace/companyCards/addNew/DetailsStep.tsx b/src/pages/workspace/companyCards/addNew/DetailsStep.tsx
index 203be5eb9d3a..5b977a3a3963 100644
--- a/src/pages/workspace/companyCards/addNew/DetailsStep.tsx
+++ b/src/pages/workspace/companyCards/addNew/DetailsStep.tsx
@@ -70,7 +70,7 @@ function DetailsStep({policyID}: DetailsStepProps) {
addNewCompanyCardsFeed(policyID, addNewCard.data.feedType, feedDetails, cardFeeds, undefined, undefined, lastSelectedFeed);
Navigation.goBack(ROUTES.WORKSPACE_COMPANY_CARDS.getRoute(policyID));
},
- [addNewCard?.data, policyID, cardFeeds, lastSelectedFeed],
+ [addNewCard?.data, policyID, cardFeeds, lastSelectedFeed, shouldSelectStatementCloseDate],
);
const handleBackButtonPress = () => {
From 409065324e2b40ecd0fc4893163c607e160a3c72 Mon Sep 17 00:00:00 2001
From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com>
Date: Tue, 5 Aug 2025 02:10:55 +0100
Subject: [PATCH 47/49] remove backTo param from
WorkspaceCompanyCardStatementCloseDatePage
---
src/ROUTES.ts | 2 +-
src/libs/Navigation/types.ts | 1 -
.../workspace/companyCards/BankConnection/index.native.tsx | 2 +-
src/pages/workspace/companyCards/BankConnection/index.tsx | 2 +-
.../WorkspaceCompanyCardStatementCloseDatePage.tsx | 6 +++---
5 files changed, 6 insertions(+), 7 deletions(-)
diff --git a/src/ROUTES.ts b/src/ROUTES.ts
index d330107cab25..10659fe33791 100644
--- a/src/ROUTES.ts
+++ b/src/ROUTES.ts
@@ -1795,7 +1795,7 @@ const ROUTES = {
},
WORKSPACE_COMPANY_CARDS_SETTINGS_STATEMENT_CLOSE_DATE: {
route: 'workspaces/:policyID/company-cards/settings/statement-close-date',
- getRoute: (policyID: string, backTo?: string) => getUrlWithBackToParam(`workspaces/${policyID}/company-cards/settings/statement-close-date`, backTo),
+ getRoute: (policyID: string) => `workspaces/${policyID}/company-cards/settings/statement-close-date` as const,
},
WORKSPACE_RULES: {
route: 'workspaces/:policyID/rules',
diff --git a/src/libs/Navigation/types.ts b/src/libs/Navigation/types.ts
index e8b9ea0b7b6c..8d9a648d5bb3 100644
--- a/src/libs/Navigation/types.ts
+++ b/src/libs/Navigation/types.ts
@@ -1018,7 +1018,6 @@ type SettingsNavigatorParamList = {
};
[SCREENS.WORKSPACE.COMPANY_CARDS_SETTINGS_STATEMENT_CLOSE_DATE]: {
policyID: string;
- backTo?: Routes;
};
[SCREENS.WORKSPACE.EXPENSIFY_CARD_DETAILS]: {
policyID: string;
diff --git a/src/pages/workspace/companyCards/BankConnection/index.native.tsx b/src/pages/workspace/companyCards/BankConnection/index.native.tsx
index 2a040b358f01..56e267407083 100644
--- a/src/pages/workspace/companyCards/BankConnection/index.native.tsx
+++ b/src/pages/workspace/companyCards/BankConnection/index.native.tsx
@@ -118,7 +118,7 @@ function BankConnection({policyID: policyIDFromProps, feed, route}: BankConnecti
// Direct feeds (except those added via Plaid) are created with default statement period end date.
// Redirect the user to set a custom date.
if (policyID && !isPlaid) {
- Navigation.navigate(ROUTES.WORKSPACE_COMPANY_CARDS_SETTINGS_STATEMENT_CLOSE_DATE.getRoute(policyID, ROUTES.WORKSPACE_COMPANY_CARDS.getRoute(policyID)));
+ Navigation.navigate(ROUTES.WORKSPACE_COMPANY_CARDS_SETTINGS_STATEMENT_CLOSE_DATE.getRoute(policyID));
} else {
Navigation.goBack(ROUTES.WORKSPACE_COMPANY_CARDS.getRoute(policyID));
}
diff --git a/src/pages/workspace/companyCards/BankConnection/index.tsx b/src/pages/workspace/companyCards/BankConnection/index.tsx
index 8a8d92e2a34f..a790a125e9b3 100644
--- a/src/pages/workspace/companyCards/BankConnection/index.tsx
+++ b/src/pages/workspace/companyCards/BankConnection/index.tsx
@@ -150,7 +150,7 @@ function BankConnection({policyID: policyIDFromProps, feed, route}: BankConnecti
// Direct feeds (except those added via Plaid) are created with default statement period end date.
// Redirect the user to set a custom date.
if (policyID && !isPlaid) {
- Navigation.navigate(ROUTES.WORKSPACE_COMPANY_CARDS_SETTINGS_STATEMENT_CLOSE_DATE.getRoute(policyID, ROUTES.WORKSPACE_COMPANY_CARDS.getRoute(policyID)));
+ Navigation.navigate(ROUTES.WORKSPACE_COMPANY_CARDS_SETTINGS_STATEMENT_CLOSE_DATE.getRoute(policyID));
} else {
Navigation.navigate(ROUTES.WORKSPACE_COMPANY_CARDS.getRoute(policyID), {forceReplace: true});
}
diff --git a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
index 376a31edb51d..d3b793456fc4 100644
--- a/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
+++ b/src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx
@@ -22,7 +22,7 @@ type WorkspaceCompanyCardStatementCloseDatePageProps = PlatformStackScreenProps<
function WorkspaceCompanyCardStatementCloseDatePage({
route: {
- params: {policyID, backTo},
+ params: {policyID},
},
}: WorkspaceCompanyCardStatementCloseDatePageProps) {
const {translate} = useLocalize();
@@ -60,8 +60,8 @@ function WorkspaceCompanyCardStatementCloseDatePage({
);
const goBack = useCallback(() => {
- Navigation.goBack(backTo);
- }, [backTo]);
+ Navigation.goBack();
+ }, []);
const clearError = useCallback(() => {
if (!selectedFeed) {
From 56fd68c0dc3e0ed0727e2205afa80335eb585210 Mon Sep 17 00:00:00 2001
From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com>
Date: Tue, 5 Aug 2025 02:18:00 +0100
Subject: [PATCH 48/49] close RHP before navigating to statement close date
page
---
.../workspace/companyCards/BankConnection/index.native.tsx | 1 +
src/pages/workspace/companyCards/BankConnection/index.tsx | 3 ++-
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/src/pages/workspace/companyCards/BankConnection/index.native.tsx b/src/pages/workspace/companyCards/BankConnection/index.native.tsx
index 56e267407083..2d0119f01cdd 100644
--- a/src/pages/workspace/companyCards/BankConnection/index.native.tsx
+++ b/src/pages/workspace/companyCards/BankConnection/index.native.tsx
@@ -118,6 +118,7 @@ function BankConnection({policyID: policyIDFromProps, feed, route}: BankConnecti
// Direct feeds (except those added via Plaid) are created with default statement period end date.
// Redirect the user to set a custom date.
if (policyID && !isPlaid) {
+ Navigation.closeRHPFlow();
Navigation.navigate(ROUTES.WORKSPACE_COMPANY_CARDS_SETTINGS_STATEMENT_CLOSE_DATE.getRoute(policyID));
} else {
Navigation.goBack(ROUTES.WORKSPACE_COMPANY_CARDS.getRoute(policyID));
diff --git a/src/pages/workspace/companyCards/BankConnection/index.tsx b/src/pages/workspace/companyCards/BankConnection/index.tsx
index a790a125e9b3..3fbeb4a0b485 100644
--- a/src/pages/workspace/companyCards/BankConnection/index.tsx
+++ b/src/pages/workspace/companyCards/BankConnection/index.tsx
@@ -145,13 +145,14 @@ function BankConnection({policyID: policyIDFromProps, feed, route}: BankConnecti
if (newFeed) {
updateSelectedFeed(newFeed, policyID);
}
- Navigation.closeRHPFlow();
// Direct feeds (except those added via Plaid) are created with default statement period end date.
// Redirect the user to set a custom date.
if (policyID && !isPlaid) {
+ Navigation.closeRHPFlow();
Navigation.navigate(ROUTES.WORKSPACE_COMPANY_CARDS_SETTINGS_STATEMENT_CLOSE_DATE.getRoute(policyID));
} else {
+ Navigation.closeRHPFlow();
Navigation.navigate(ROUTES.WORKSPACE_COMPANY_CARDS.getRoute(policyID), {forceReplace: true});
}
return;
From 8ba52ad501bedaab33c8e4b631308d636cb8a2e9 Mon Sep 17 00:00:00 2001
From: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com>
Date: Tue, 5 Aug 2025 03:02:42 +0100
Subject: [PATCH 49/49] remove dev lock of statement close date page
---
.../WorkspaceCompanyCardsSettingsPage.tsx | 29 +++++++----------
.../companyCards/addNew/AddNewCardPage.tsx | 2 +-
.../companyCards/addNew/DetailsStep.tsx | 32 +++----------------
.../addNew/PlaidConnectionStep.tsx | 7 +---
4 files changed, 18 insertions(+), 52 deletions(-)
diff --git a/src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx b/src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx
index a543e6006f52..c9baa85fb9c9 100644
--- a/src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx
+++ b/src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx
@@ -11,7 +11,6 @@ import ScrollView from '@components/ScrollView';
import Text from '@components/Text';
import useCardFeeds from '@hooks/useCardFeeds';
import useCardsList from '@hooks/useCardsList';
-import useEnvironment from '@hooks/useEnvironment';
import useLocalize from '@hooks/useLocalize';
import useOnyx from '@hooks/useOnyx';
import usePolicy from '@hooks/usePolicy';
@@ -36,7 +35,6 @@ function WorkspaceCompanyCardsSettingsPage({
params: {policyID},
},
}: WorkspaceCompanyCardsSettingsPageProps) {
- const {isDevelopment} = useEnvironment();
const styles = useThemeStyles();
const {translate} = useLocalize();
const policy = usePolicy(policyID);
@@ -67,9 +65,6 @@ function WorkspaceCompanyCardsSettingsPage({
return translate(`workspace.companyCards.statementCloseDate.${selectedFeedData.statementPeriodEndDay}`);
}, [translate, selectedFeedData?.statementPeriodEndDay]);
- // s77rt remove DEV lock
- const shouldShowStatementCloseDate = isDevelopment;
-
const navigateToChangeFeedName = () => {
Navigation.navigate(ROUTES.WORKSPACE_COMPANY_CARDS_SETTINGS_FEED_NAME.getRoute(policyID));
};
@@ -129,19 +124,17 @@ function WorkspaceCompanyCardsSettingsPage({
titleStyle={styles.flex1}
onPress={navigateToChangeFeedName}
/>
- {shouldShowStatementCloseDate && (
-
-
-
- )}
+
+
+
;
case CONST.COMPANY_CARDS.STEP.CARD_DETAILS:
- return ;
+ return ;
case CONST.COMPANY_CARDS.STEP.AMEX_CUSTOM_FEED:
return ;
case CONST.COMPANY_CARDS.STEP.PLAID_CONNECTION:
diff --git a/src/pages/workspace/companyCards/addNew/DetailsStep.tsx b/src/pages/workspace/companyCards/addNew/DetailsStep.tsx
index 5b977a3a3963..beb78e58876f 100644
--- a/src/pages/workspace/companyCards/addNew/DetailsStep.tsx
+++ b/src/pages/workspace/companyCards/addNew/DetailsStep.tsx
@@ -11,46 +11,30 @@ import Text from '@components/Text';
import TextInput from '@components/TextInput';
import TextLink from '@components/TextLink';
import useAutoFocusInput from '@hooks/useAutoFocusInput';
-import useCardFeeds from '@hooks/useCardFeeds';
-import useEnvironment from '@hooks/useEnvironment';
import useLocalize from '@hooks/useLocalize';
import useOnyx from '@hooks/useOnyx';
import useTheme from '@hooks/useTheme';
import useThemeStyles from '@hooks/useThemeStyles';
import {getFieldRequiredErrors} from '@libs/ValidationUtils';
-import Navigation from '@navigation/Navigation';
import variables from '@styles/variables';
-import {addNewCompanyCardsFeed, setAddNewCompanyCardStepAndData} from '@userActions/CompanyCards';
+import {setAddNewCompanyCardStepAndData} from '@userActions/CompanyCards';
import CONST from '@src/CONST';
import ONYXKEYS from '@src/ONYXKEYS';
-import ROUTES from '@src/ROUTES';
import INPUT_IDS from '@src/types/form/AddNewCardFeedForm';
-type DetailsStepProps = {
- /** ID of the current policy */
- policyID: string | undefined;
-};
-
-function DetailsStep({policyID}: DetailsStepProps) {
+function DetailsStep() {
const {translate} = useLocalize();
const theme = useTheme();
const styles = useThemeStyles();
const {inputCallbackRef} = useAutoFocusInput();
- const {isDevelopment} = useEnvironment();
const [addNewCard] = useOnyx(ONYXKEYS.ADD_NEW_COMPANY_CARD, {canBeMissing: false});
- const [lastSelectedFeed] = useOnyx(`${ONYXKEYS.COLLECTION.LAST_SELECTED_FEED}${policyID}`, {canBeMissing: true});
-
- const [cardFeeds] = useCardFeeds(policyID);
const feedProvider = addNewCard?.data?.feedType;
const isStripeFeedProvider = feedProvider === CONST.COMPANY_CARD.FEED_BANK_NAME.STRIPE;
const bank = addNewCard?.data?.selectedBank;
const isOtherBankSelected = bank === CONST.COMPANY_CARDS.BANKS.OTHER;
- // s77rt remove DEV lock
- const shouldSelectStatementCloseDate = isDevelopment;
-
const submit = useCallback(
(values: FormOnyxValues) => {
if (!addNewCard?.data) {
@@ -62,15 +46,9 @@ function DetailsStep({policyID}: DetailsStepProps) {
bankName: addNewCard.data.bankName ?? 'Amex',
};
- if (shouldSelectStatementCloseDate) {
- setAddNewCompanyCardStepAndData({step: CONST.COMPANY_CARDS.STEP.SELECT_STATEMENT_CLOSE_DATE, data: {feedDetails}});
- return;
- }
-
- addNewCompanyCardsFeed(policyID, addNewCard.data.feedType, feedDetails, cardFeeds, undefined, undefined, lastSelectedFeed);
- Navigation.goBack(ROUTES.WORKSPACE_COMPANY_CARDS.getRoute(policyID));
+ setAddNewCompanyCardStepAndData({step: CONST.COMPANY_CARDS.STEP.SELECT_STATEMENT_CLOSE_DATE, data: {feedDetails}});
},
- [addNewCard?.data, policyID, cardFeeds, lastSelectedFeed, shouldSelectStatementCloseDate],
+ [addNewCard?.data],
);
const handleBackButtonPress = () => {
@@ -214,7 +192,7 @@ function DetailsStep({policyID}: DetailsStepProps) {
/>
!!plaidData?.bankAccounts?.length || !isEmptyObject(plaidData?.errors), [plaidData]);
/**
@@ -163,7 +158,7 @@ function PlaidConnectionStep({feed, policyID}: {feed?: CompanyCardFeed; policyID
}
setAddNewCompanyCardStepAndData({
- step: shouldSelectStatementCloseDate ? CONST.COMPANY_CARDS.STEP.SELECT_STATEMENT_CLOSE_DATE : CONST.COMPANY_CARDS.STEP.BANK_CONNECTION,
+ step: CONST.COMPANY_CARDS.STEP.SELECT_STATEMENT_CLOSE_DATE,
data: {
publicToken,
plaidConnectedFeed,