Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
56f2e52
update updateMoenyRequestDistance to remove global onyx key
parasharrajat Feb 6, 2026
064cefa
Update MoneyRequestDistanceRate functions
parasharrajat Feb 6, 2026
d832ea4
Merge branch 'main' of github.com:Expensify/App into onyx-tran-2
parasharrajat Mar 19, 2026
d39b776
fix type
parasharrajat Mar 19, 2026
e75d78f
Merge branch 'Expensify:main' into onyx-tran-2
parasharrajat Mar 20, 2026
21fa28c
Update CreateDistanceRatePage.tsx
parasharrajat Mar 20, 2026
d2edd0e
Add unit tests
parasharrajat Mar 22, 2026
d372071
Merge branch 'main' of github.com:Expensify/App into onyx/iou/transac…
parasharrajat Mar 22, 2026
a968f70
Update tests
parasharrajat Mar 22, 2026
75fb6b6
Refactor resetDraftTransactionsCustomUnit to pass transaction
parasharrajat Mar 22, 2026
967b716
Refactor `MoneyRequestOdometerImage` functions
parasharrajat Mar 22, 2026
8f2812b
Update requestMoney function to remove allTransaction usages
parasharrajat Mar 22, 2026
c3416ef
Update MoneyRequest Lib to pass transactions
parasharrajat Mar 22, 2026
7362a4a
Update Duplicate Lib to pass transactions
parasharrajat Mar 22, 2026
1a2c94f
Update replaceReceipt functions
parasharrajat Mar 22, 2026
d722c16
Update detachReceipt
parasharrajat Mar 22, 2026
c6bbba6
Merge branch 'onyx-tran-2' into onyx/tran-8
parasharrajat Mar 22, 2026
c5bf048
Merge branch 'onyx/iou/transaction-1' into onyx/tran-8
parasharrajat Mar 22, 2026
a0a18ad
Update `getDeleteTrackExpenseInformation` to pass transaction to
parasharrajat Mar 22, 2026
3f04dbd
Update MergeTransaction lib to pass transaction to `getDeleteTrackExp…
parasharrajat Mar 22, 2026
9e13d62
Update more refs
parasharrajat Mar 22, 2026
bc5e7c0
Update tests
parasharrajat Mar 22, 2026
7ec8e30
Update `deleteTrackExpense` to pass transaction
parasharrajat Mar 22, 2026
17cc0c0
Update `getConvertTrackedExpenseInformation` to use transaction object
parasharrajat Mar 22, 2026
8441ef2
Refactor resolveDuplicates
parasharrajat Mar 22, 2026
9e2d74c
Refactor mergeDuplicates
parasharrajat Mar 22, 2026
8250fd0
More cleanup
parasharrajat Mar 22, 2026
267450a
Update putOnHold to pass transaction
parasharrajat Mar 22, 2026
996fd86
Refactor unholdRequest
parasharrajat Mar 22, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions src/components/MoneyReportHeader.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -354,6 +354,8 @@ function MoneyReportHeader({reportID: reportIDProp, shouldDisplayBackButton = fa

const iouTransactionID = isMoneyRequestAction(requestParentReportAction) ? getOriginalMessage(requestParentReportAction)?.IOUTransactionID : undefined;
const [transaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}${getNonEmptyStringOnyxID(iouTransactionID)}`);
const linkedTrackedExpenseTransactionID = getExistingTransactionID(transaction?.linkedTrackedExpenseReportAction);
const [linkedTrackedExpenseTransaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}${getNonEmptyStringOnyxID(linkedTrackedExpenseTransactionID)}`);

const [dismissedRejectUseExplanation] = useOnyx(ONYXKEYS.NVP_DISMISSED_REJECT_USE_EXPLANATION);
const [dismissedHoldUseExplanation] = useOnyx(ONYXKEYS.NVP_DISMISSED_HOLD_USE_EXPLANATION);
Expand Down Expand Up @@ -955,7 +957,7 @@ function MoneyReportHeader({reportID: reportIDProp, shouldDisplayBackButton = fa
);

const duplicateExpenseTransaction = useCallback(
(transactionList: OnyxTypes.Transaction[]) => {
(transactionList: OnyxTypes.Transaction[], linkedTrackedExpenseTransactions: OnyxTypes.Transaction[]) => {
if (!transactionList.length) {
return;
}
Expand All @@ -967,6 +969,7 @@ function MoneyReportHeader({reportID: reportIDProp, shouldDisplayBackButton = fa
for (const item of transactionList) {
const existingTransactionID = getExistingTransactionID(item.linkedTrackedExpenseReportAction);
const existingTransactionDraft = existingTransactionID ? transactionDrafts?.[existingTransactionID] : undefined;
const existingTransaction = existingTransactionID? linkedTrackedExpenseTransactions?.find(txn => txn?.transactionID === existingTransactionID) : undefined;

duplicateTransactionAction({
transaction: item,
Expand All @@ -983,6 +986,7 @@ function MoneyReportHeader({reportID: reportIDProp, shouldDisplayBackButton = fa
targetPolicyCategories: activePolicyCategories,
targetReport: activePolicyExpenseChat,
existingTransactionDraft,
existingTransaction,
draftTransactionIDs,
betas,
personalDetails,
Expand Down Expand Up @@ -1903,7 +1907,7 @@ function MoneyReportHeader({reportID: reportIDProp, shouldDisplayBackButton = fa

temporarilyDisableDuplicateAction();

duplicateExpenseTransaction([transaction]);
duplicateExpenseTransaction([transaction], linkedTrackedExpenseTransaction ? [linkedTrackedExpenseTransaction]: []);
},
shouldCloseModalOnSelect: shouldDuplicateCloseModalOnSelect,
},
Expand Down
2 changes: 1 addition & 1 deletion src/components/MoneyRequestHeader.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -251,7 +251,7 @@
const existingTransactionID = getExistingTransactionID(item.linkedTrackedExpenseReportAction);
const existingTransactionDraft = existingTransactionID ? transactionDrafts?.[existingTransactionID] : undefined;

duplicateTransactionAction({

Check failure on line 254 in src/components/MoneyRequestHeader.tsx

View workflow job for this annotation

GitHub Actions / typecheck

Argument of type '{ transaction: { amount: number; accountant?: Accountant; convertedAmount?: number; taxAmount?: number; convertedTaxAmount?: number; taxCode?: string; taxValue?: string | undefined; ... 52 more ...; transactionType?: string; } & OfflineFeedback<...>; ... 17 more ...; targetPolicyTags: PolicyTagLists; }' is not assignable to parameter of type 'DuplicateExpenseTransactionParams'.
transaction: item,
optimisticChatReportID,
optimisticIOUReportID,
Expand Down Expand Up @@ -611,7 +611,7 @@
deleteTrackExpense({
chatReportID: report?.parentReportID,
chatReport: parentReport,
transactionID: transaction.transactionID,
transaction,
reportAction: parentReportAction,
iouReport,
chatIOUReport,
Expand Down
4 changes: 2 additions & 2 deletions src/components/ReportActionItem/MoneyRequestReceiptView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -409,11 +409,11 @@ function MoneyRequestReceiptView({

const file = files.at(0);

if (!file || !linkedTransactionID) {
if (!file || !transaction) {
return;
}
const source = URL.createObjectURL(file as Blob);
replaceReceipt({transactionID: linkedTransactionID, file: file as File, source, transactionPolicy: policy, transactionPolicyCategories: policyCategories});
replaceReceipt({transaction, file: file as File, source, transactionPolicy: policy, transactionPolicyCategories: policyCategories});
};

// For empty receipt should be fullHeight
Expand Down
5 changes: 4 additions & 1 deletion src/hooks/useSelectedTransactionsActions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -245,7 +245,10 @@ function useSelectedTransactionsActions({
if (!action?.childReportID) {
continue;
}
unholdRequest(transactionID, action?.childReportID, policy);
const transaction = allTransactions?.[`${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`];
if(transaction){
unholdRequest(transaction, action?.childReportID, policy);
}
}
clearSelectedTransactions(true);
},
Expand Down
7 changes: 5 additions & 2 deletions src/libs/API/parameters/MergeDuplicatesParams.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
import type { Transaction } from "@src/types/onyx";
import type { OnyxEntry } from "react-native-onyx";

type MergeDuplicatesParams = {
transactionID: string | undefined;
transactionIDList: string[];
transaction: OnyxEntry<Transaction>;
transactionList: Transaction[];
created: string;
merchant: string;
amount: number;
Expand Down
9 changes: 5 additions & 4 deletions src/libs/ReportUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1056,7 +1056,7 @@
};

let conciergeReportIDOnyxConnect: OnyxEntry<string>;
Onyx.connect({

Check warning on line 1059 in src/libs/ReportUtils.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.CONCIERGE_REPORT_ID,
callback: (value) => {
conciergeReportIDOnyxConnect = value;
Expand All @@ -1064,7 +1064,7 @@
});

const defaultAvatarBuildingIconTestID = 'SvgDefaultAvatarBuilding Icon';
Onyx.connect({

Check warning on line 1067 in src/libs/ReportUtils.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.SESSION,
callback: (value) => {
// When signed out, val is undefined
Expand All @@ -1082,7 +1082,7 @@
let allPersonalDetails: OnyxEntry<PersonalDetailsList>;
let allPersonalDetailLogins: string[];
let currentUserPersonalDetails: OnyxEntry<PersonalDetails>;
Onyx.connect({

Check warning on line 1085 in src/libs/ReportUtils.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.PERSONAL_DETAILS_LIST,
callback: (value) => {
if (deprecatedCurrentUserAccountID) {
Expand All @@ -1094,7 +1094,7 @@
});

let allReportsDraft: OnyxCollection<Report>;
Onyx.connect({

Check warning on line 1097 in src/libs/ReportUtils.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.COLLECTION.REPORT_DRAFT,
waitForCollectionCallback: true,
callback: (value) => (allReportsDraft = value),
Expand All @@ -1102,7 +1102,7 @@

let allPolicies: OnyxCollection<Policy>;
let policiesArray: Policy[] = [];
Onyx.connect({

Check warning on line 1105 in src/libs/ReportUtils.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.COLLECTION.POLICY,
waitForCollectionCallback: true,
callback: (value) => {
Expand All @@ -1112,7 +1112,7 @@
});

let allPolicyDrafts: OnyxCollection<Policy>;
Onyx.connect({

Check warning on line 1115 in src/libs/ReportUtils.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.COLLECTION.POLICY_DRAFTS,
waitForCollectionCallback: true,
callback: (value) => (allPolicyDrafts = value),
Expand All @@ -1120,7 +1120,7 @@

let allReports: OnyxCollection<Report>;
let reportsByPolicyID: ReportByPolicyMap;
Onyx.connect({

Check warning on line 1123 in src/libs/ReportUtils.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.COLLECTION.REPORT,
waitForCollectionCallback: true,
callback: (value) => {
Expand Down Expand Up @@ -1156,14 +1156,14 @@
});

let betaConfiguration: OnyxEntry<BetaConfiguration> = {};
Onyx.connect({

Check warning on line 1159 in src/libs/ReportUtils.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.BETA_CONFIGURATION,
callback: (value) => (betaConfiguration = value ?? {}),
});

let deprecatedAllTransactions: OnyxCollection<Transaction> = {};
let deprecatedReportsTransactions: Record<string, Transaction[]> = {};
Onyx.connect({

Check warning on line 1166 in src/libs/ReportUtils.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.COLLECTION.TRANSACTION,
waitForCollectionCallback: true,
callback: (value) => {
Expand All @@ -1189,7 +1189,7 @@
});

let allReportActions: OnyxCollection<ReportActions>;
Onyx.connect({

Check warning on line 1192 in src/libs/ReportUtils.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.COLLECTION.REPORT_ACTIONS,
waitForCollectionCallback: true,
callback: (actions) => {
Expand Down Expand Up @@ -5131,12 +5131,13 @@

const isOnHold = isOnHoldTransactionUtils(iouTransaction);
const policy = allPolicies?.[`${ONYXKEYS.COLLECTION.POLICY}${moneyRequestReport.policyID}`];

// @todo: We should not rely on deprecatedAllTransactions to get the transaction details, but we need to do it for now to avoid refactoring the entire action file. We will remove this once we refactor the action file and get rid of Onyx in it.
const transaction = deprecatedAllTransactions?.[`${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`];
if (isOnHold) {
if (reportAction.childReportID) {
unholdRequest(transactionID, reportAction.childReportID, policy);
if (reportAction.childReportID && transaction) {
unholdRequest(transaction, reportAction.childReportID, policy);
} else {
Log.warn('Missing reportAction.childReportID during money request unhold');
Log.warn('Missing reportAction.childReportID or transaction during money request unhold');
}
} else {
const activeRoute = encodeURIComponent(Navigation.getActiveRoute());
Expand Down
5 changes: 3 additions & 2 deletions src/libs/TransactionUtils/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2577,15 +2577,16 @@ function buildMergeDuplicatesParams(
reviewDuplicates: OnyxEntry<ReviewDuplicates>,
duplicatedTransactions: Array<OnyxEntry<Transaction>>,
originalTransaction: Partial<Transaction>,
duplicatedTransaction: OnyxEntry<Transaction>,
): MergeDuplicatesParams {
return {
amount: -getAmount(originalTransaction as OnyxEntry<Transaction>, true),
reportID: originalTransaction?.reportID,
receiptID: originalTransaction?.receipt?.receiptID ?? CONST.DEFAULT_NUMBER_ID,
currency: getCurrency(originalTransaction as OnyxEntry<Transaction>),
created: getFormattedCreated(originalTransaction as OnyxEntry<Transaction>),
transactionID: reviewDuplicates?.transactionID,
transactionIDList: removeSettledAndApprovedTransactions(duplicatedTransactions ?? []).map((transaction) => transaction.transactionID),
transaction: duplicatedTransaction,
transactionList: removeSettledAndApprovedTransactions(duplicatedTransactions ?? []),
billable: reviewDuplicates?.billable ?? false,
reimbursable: reviewDuplicates?.reimbursable ?? false,
category: reviewDuplicates?.category ?? '',
Expand Down
Loading
Loading