Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
30 changes: 14 additions & 16 deletions src/libs/actions/IOU.ts
Original file line number Diff line number Diff line change
Expand Up @@ -690,7 +690,7 @@
Onyx.connect({
key: ONYXKEYS.PERSONAL_DETAILS_LIST,
callback: (value) => {
allPersonalDetails = value ?? {};

Check warning on line 693 in src/libs/actions/IOU.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
},
});

Expand Down Expand Up @@ -731,13 +731,13 @@
Onyx.connect({
key: ONYXKEYS.BETAS,
callback: (value) => (allBetas = value),
});

Check warning on line 734 in src/libs/actions/IOU.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

let allTransactions: NonNullable<OnyxCollection<OnyxTypes.Transaction>> = {};
Onyx.connect({
key: ONYXKEYS.COLLECTION.TRANSACTION,
waitForCollectionCallback: true,
callback: (value) => {

Check warning on line 740 in src/libs/actions/IOU.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
if (!value) {
allTransactions = {};
return;
Expand All @@ -751,7 +751,7 @@
Onyx.connect({
key: ONYXKEYS.COLLECTION.TRANSACTION_DRAFT,
waitForCollectionCallback: true,
callback: (value) => {

Check warning on line 754 in src/libs/actions/IOU.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
allTransactionDrafts = value ?? {};
},
});
Expand All @@ -760,7 +760,7 @@
Onyx.connect({
key: ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS,
waitForCollectionCallback: true,
callback: (value) => {

Check warning on line 763 in src/libs/actions/IOU.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
if (!value) {
allTransactionViolations = {};
return;
Expand All @@ -770,20 +770,11 @@
},
});

let allDraftSplitTransactions: NonNullable<OnyxCollection<OnyxTypes.Transaction>> = {};
Onyx.connect({
key: ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT,
waitForCollectionCallback: true,
callback: (value) => {
allDraftSplitTransactions = value ?? {};
},
});

let allNextSteps: NonNullable<OnyxCollection<OnyxTypes.ReportNextStep>> = {};
Onyx.connect({
key: ONYXKEYS.COLLECTION.NEXT_STEP,
waitForCollectionCallback: true,
callback: (value) => {

Check warning on line 777 in src/libs/actions/IOU.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
allNextSteps = value ?? {};
},
});
Expand All @@ -792,14 +783,14 @@
Onyx.connect({
key: ONYXKEYS.COLLECTION.POLICY_CATEGORIES,
waitForCollectionCallback: true,
callback: (val) => (allPolicyCategories = val),

Check warning on line 786 in src/libs/actions/IOU.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
});

const allPolicies: OnyxCollection<OnyxTypes.Policy> = {};
Onyx.connect({
key: ONYXKEYS.COLLECTION.POLICY,
callback: (val, key) => {
if (!key) {

Check warning on line 793 in src/libs/actions/IOU.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
return;
}
if (val === null || val === undefined) {
Expand Down Expand Up @@ -835,14 +826,14 @@
Onyx.connect({
key: ONYXKEYS.COLLECTION.POLICY_RECENTLY_USED_TAGS,
waitForCollectionCallback: true,
callback: (val) => (allRecentlyUsedTags = val),

Check warning on line 829 in src/libs/actions/IOU.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
});

let allReports: OnyxCollection<OnyxTypes.Report>;
Onyx.connect({
key: ONYXKEYS.COLLECTION.REPORT,
waitForCollectionCallback: true,
callback: (value) => {

Check warning on line 836 in src/libs/actions/IOU.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
allReports = value;
},
});
Expand Down Expand Up @@ -7761,11 +7752,16 @@
notifyNewAction(chatReportID, sessionAccountID);
}

function setDraftSplitTransaction(transactionID: string | undefined, transactionChanges: TransactionChanges = {}, policy?: OnyxEntry<OnyxTypes.Policy>) {
function setDraftSplitTransaction(
transactionID: string | undefined,
splitTransactionDraft: OnyxEntry<OnyxTypes.Transaction>,
transactionChanges: TransactionChanges = {},
policy?: OnyxEntry<OnyxTypes.Policy>,
) {
if (!transactionID) {
return undefined;
}
let draftSplitTransaction = allDraftSplitTransactions[`${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${transactionID}`];
let draftSplitTransaction = splitTransactionDraft;

if (!draftSplitTransaction) {
draftSplitTransaction = allTransactions[`${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`];
Expand Down Expand Up @@ -13042,16 +13038,18 @@
});
}

function updateSplitExpenseField(splitExpenseDraftTransaction: OnyxEntry<OnyxTypes.Transaction>, splitExpenseTransactionID: string) {
if (!splitExpenseDraftTransaction || !splitExpenseTransactionID) {
function updateSplitExpenseField(
splitExpenseDraftTransaction: OnyxEntry<OnyxTypes.Transaction>,
originalTransactionDraft: OnyxEntry<OnyxTypes.Transaction>,
splitExpenseTransactionID: string,
) {
if (!splitExpenseDraftTransaction || !splitExpenseTransactionID || !originalTransactionDraft) {
return;
}

const originalTransactionID = splitExpenseDraftTransaction?.comment?.originalTransactionID;

const draftTransaction = allDraftSplitTransactions[`${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${originalTransactionID}`];

const splitExpenses = draftTransaction?.comment?.splitExpenses?.map((item) => {
const splitExpenses = originalTransactionDraft?.comment?.splitExpenses?.map((item) => {
if (item.transactionID === splitExpenseTransactionID) {
const transactionDetails = getTransactionDetails(splitExpenseDraftTransaction);

Expand Down
2 changes: 1 addition & 1 deletion src/pages/iou/SplitBillDetailsPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ function SplitBillDetailsPage({route, report, reportAction}: SplitBillDetailsPag
policyID={isPolicyExpenseChat(report) ? report?.policyID : undefined}
action={isEditingSplitBill ? CONST.IOU.ACTION.EDIT : CONST.IOU.ACTION.CREATE}
onToggleBillable={(billable) => {
setDraftSplitTransaction(transaction?.transactionID, {billable});
setDraftSplitTransaction(transaction?.transactionID, draftTransaction, {billable});
}}
isConfirmed={isConfirmed}
/>
Expand Down
5 changes: 4 additions & 1 deletion src/pages/iou/SplitExpenseEditPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,9 @@ function SplitExpenseEditPage({route}: SplitExpensePageProps) {
const report = getReportOrDraftReport(reportID);

const [splitExpenseDraftTransaction] = useOnyx(`${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${CONST.IOU.OPTIMISTIC_TRANSACTION_ID}`, {canBeMissing: false});
const [originalTransactionDraft] = useOnyx(`${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${splitExpenseDraftTransaction?.comment?.originalTransactionID}`, {canBeMissing: false}, [
splitExpenseDraftTransaction?.comment?.originalTransactionID,
]);

const splitExpenseDraftTransactionDetails = useMemo<Partial<TransactionDetails>>(() => getTransactionDetails(splitExpenseDraftTransaction) ?? {}, [splitExpenseDraftTransaction]);

Expand Down Expand Up @@ -233,7 +236,7 @@ function SplitExpenseEditPage({route}: SplitExpensePageProps) {
style={[styles.w100]}
text={translate('common.save')}
onPress={() => {
updateSplitExpenseField(splitExpenseDraftTransaction, splitExpenseTransactionID);
updateSplitExpenseField(splitExpenseDraftTransaction, originalTransactionDraft, splitExpenseTransactionID);
Navigation.goBack(backTo);
}}
pressOnEnter
Expand Down
2 changes: 1 addition & 1 deletion src/pages/iou/request/step/IOURequestStepAmount.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -314,7 +314,7 @@ function IOURequestStepAmount({
const taxAmount = convertToBackendAmount(calculateTaxAmount(taxPercentage, newAmount, currency ?? CONST.CURRENCY.USD));

if (isSplitBill) {
setDraftSplitTransaction(transactionID, {amount: newAmount, currency, taxCode, taxAmount});
setDraftSplitTransaction(transactionID, splitDraftTransaction, {amount: newAmount, currency, taxCode, taxAmount});
navigateBack();
return;
}
Expand Down
2 changes: 1 addition & 1 deletion src/pages/iou/request/step/IOURequestStepCategory.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ function IOURequestStepCategory({
if (transaction) {
// In the split flow, when editing we use SPLIT_TRANSACTION_DRAFT to save draft value
if (isEditingSplit) {
setDraftSplitTransaction(transaction.transactionID, {category: updatedCategory}, policy);
setDraftSplitTransaction(transaction.transactionID, splitDraftTransaction, {category: updatedCategory}, policy);
navigateBack();
return;
}
Expand Down
2 changes: 1 addition & 1 deletion src/pages/iou/request/step/IOURequestStepDate.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ function IOURequestStepDate({

// In the split flow, when editing we use SPLIT_TRANSACTION_DRAFT to save draft value
if (isEditingSplit) {
setDraftSplitTransaction(transactionID, {created: newCreated});
setDraftSplitTransaction(transactionID, splitDraftTransaction, {created: newCreated});
navigateBack();
return;
}
Expand Down
2 changes: 1 addition & 1 deletion src/pages/iou/request/step/IOURequestStepDescription.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ function IOURequestStepDescription({

// In the split flow, when editing we use SPLIT_TRANSACTION_DRAFT to save draft value
if (isEditingSplit) {
setDraftSplitTransaction(transaction?.transactionID, {comment: newComment});
setDraftSplitTransaction(transaction?.transactionID, splitDraftTransaction, {comment: newComment});
navigateBack();
return;
}
Expand Down
2 changes: 1 addition & 1 deletion src/pages/iou/request/step/IOURequestStepMerchant.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ function IOURequestStepMerchant({

// In the split flow, when editing we use SPLIT_TRANSACTION_DRAFT to save draft value
if (isEditingSplitBill) {
setDraftSplitTransaction(transactionID, {merchant: newMerchant});
setDraftSplitTransaction(transactionID, splitDraftTransaction, {merchant: newMerchant});
navigateBack();
return;
}
Expand Down
2 changes: 1 addition & 1 deletion src/pages/iou/request/step/IOURequestStepTag.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ function IOURequestStepTag({
}

if (isEditingSplit) {
setDraftSplitTransaction(transactionID, {tag: updatedTag});
setDraftSplitTransaction(transactionID, splitDraftTransaction, {tag: updatedTag});
navigateBack();
return;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ function IOURequestStepTaxAmountPage({
const taxAmountInSmallestCurrencyUnits = convertToBackendAmount(Number.parseFloat(currentAmount.amount));

if (isEditingSplitBill) {
setDraftSplitTransaction(transactionID, {taxAmount: taxAmountInSmallestCurrencyUnits});
setDraftSplitTransaction(transactionID, splitDraftTransaction, {taxAmount: taxAmountInSmallestCurrencyUnits});
navigateBack();
return;
}
Expand Down
2 changes: 1 addition & 1 deletion src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ function IOURequestStepTaxRatePage({
const taxAmount = getTaxAmount(policy, currentTransaction, taxes.code, getAmount(currentTransaction, false, true));

if (isEditingSplitBill) {
setDraftSplitTransaction(currentTransaction.transactionID, {
setDraftSplitTransaction(currentTransaction.transactionID, splitDraftTransaction, {
taxAmount: convertToBackendAmount(taxAmount ?? 0),
taxCode: taxes.code,
});
Expand Down
24 changes: 16 additions & 8 deletions tests/actions/IOUTest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5695,15 +5695,17 @@ describe('actions/IOU', () => {
taxRates: CONST.DEFAULT_TAX,
rules: {expenseRules: createCategoryTaxExpenseRules(category, ruleTaxCode)},
};
await Onyx.merge(`${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${transactionID}`, {
const draftTransaction: Transaction = {
...createRandomTransaction(1),
taxCode,
taxAmount: 0,
amount: 100,
});
};
await Onyx.merge(`${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${transactionID}`, draftTransaction);
await Onyx.merge(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`, fakePolicy);

// When setting a category of a draft split transaction
setDraftSplitTransaction(transactionID, {category}, fakePolicy);
setDraftSplitTransaction(transactionID, draftTransaction, {category}, fakePolicy);

await waitForBatchedUpdates();

Expand Down Expand Up @@ -5734,15 +5736,17 @@ describe('actions/IOU', () => {
taxRates: CONST.DEFAULT_TAX,
rules: {},
};
await Onyx.merge(`${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${transactionID}`, {
const draftTransaction: Transaction = {
...createRandomTransaction(1),
taxCode,
taxAmount,
amount: 100,
});
};
await Onyx.merge(`${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${transactionID}`, draftTransaction);
await Onyx.merge(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`, fakePolicy);

// When setting a category of a draft split transaction
setDraftSplitTransaction(transactionID, {category}, fakePolicy);
setDraftSplitTransaction(transactionID, draftTransaction, {category}, fakePolicy);

await waitForBatchedUpdates();

Expand Down Expand Up @@ -5771,11 +5775,15 @@ describe('actions/IOU', () => {
taxRates: CONST.DEFAULT_TAX,
rules: {expenseRules: createCategoryTaxExpenseRules(category, ruleTaxCode)},
};
await Onyx.merge(`${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${transactionID}`, {amount: 100});
const draftTransaction: Transaction = {
...createRandomTransaction(1),
amount: 100,
};
await Onyx.merge(`${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${transactionID}`, draftTransaction);
await Onyx.merge(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`, fakePolicy);

// When setting a draft split transaction without category update
setDraftSplitTransaction(transactionID, {}, fakePolicy);
setDraftSplitTransaction(transactionID, draftTransaction, {}, fakePolicy);

await waitForBatchedUpdates();

Expand Down
Loading