Skip to content

Commit 563db4a

Browse files
authored
Merge pull request Expensify#69499 from mkzie2/mkzie2-issue/68135
Reports - "Missing amount" error message when creating distance expense offline on "Reports"
2 parents 7587a45 + b7aae35 commit 563db4a

3 files changed

Lines changed: 67 additions & 1 deletion

File tree

src/libs/SearchUIUtils.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -947,6 +947,7 @@ function getTransactionsSections(
947947

948948
const allActions = getActions(data, allViolations, key, currentSearch, currentAccountID);
949949
const transactionSection: TransactionListItemType = {
950+
iouRequestType: transactionItem.iouRequestType,
950951
action: allActions.at(0) ?? CONST.SEARCH.ACTION_TYPES.VIEW,
951952
allActions,
952953
report,

src/types/onyx/SearchResults.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import type ChatListItem from '@components/SelectionList/ChatListItem';
44
import type TransactionGroupListItem from '@components/SelectionList/Search/TransactionGroupListItem';
55
import type TransactionListItem from '@components/SelectionList/Search/TransactionListItem';
66
import type {ReportActionListItemType, TaskListItemType, TransactionGroupListItemType, TransactionListItemType} from '@components/SelectionList/types';
7+
import type {IOURequestType} from '@libs/actions/IOU';
78
import type CONST from '@src/CONST';
89
import type ONYXKEYS from '@src/ONYXKEYS';
910
import type {BankName} from './Bank';
@@ -380,6 +381,9 @@ type SearchTransaction = {
380381
/** The transaction recipient ID */
381382
managerID: number;
382383

384+
/** Used during the creation flow before the transaction is saved to the server */
385+
iouRequestType?: IOURequestType;
386+
383387
/** If the transaction has violations */
384388
hasViolation?: boolean;
385389

tests/unit/Search/SearchUIUtilsTest.ts

Lines changed: 62 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import TransactionListItem from '@components/SelectionList/Search/TransactionLis
55
import type {
66
ReportActionListItemType,
77
TransactionCardGroupListItemType,
8+
TransactionGroupListItemType,
89
TransactionListItemType,
910
TransactionMemberGroupListItemType,
1011
TransactionReportGroupListItemType,
@@ -1653,7 +1654,67 @@ describe('SearchUIUtils', () => {
16531654
});
16541655

16551656
it('should return getTransactionsSections result when groupBy is undefined', () => {
1656-
expect(SearchUIUtils.getSections(CONST.SEARCH.DATA_TYPES.EXPENSE, searchResults.data, 2074551, formatPhoneNumber)).toStrictEqual(transactionsListItems);
1657+
expect(SearchUIUtils.getSections(CONST.SEARCH.DATA_TYPES.EXPENSE, searchResults.data, 2074551, formatPhoneNumber)).toEqual(transactionsListItems);
1658+
});
1659+
1660+
it('should include iouRequestType property for distance transactions', () => {
1661+
const distanceTransactionID = 'distance_transaction_123';
1662+
const testSearchResults = {
1663+
...searchResults,
1664+
data: {
1665+
...searchResults.data,
1666+
[`transactions_${distanceTransactionID}`]: {
1667+
...searchResults.data[`transactions_${transactionID}`],
1668+
transactionID: distanceTransactionID,
1669+
transactionType: CONST.SEARCH.TRANSACTION_TYPE.DISTANCE,
1670+
iouRequestType: CONST.IOU.REQUEST_TYPE.DISTANCE,
1671+
},
1672+
},
1673+
};
1674+
1675+
const result = SearchUIUtils.getSections(CONST.SEARCH.DATA_TYPES.EXPENSE, testSearchResults.data, 2074551, formatPhoneNumber) as TransactionListItemType[];
1676+
1677+
const distanceTransaction = result.find((item) => item.transactionID === distanceTransactionID);
1678+
1679+
expect(distanceTransaction).toBeDefined();
1680+
expect(distanceTransaction?.iouRequestType).toBe(CONST.IOU.REQUEST_TYPE.DISTANCE);
1681+
1682+
const expectedPropertyCount = 55;
1683+
expect(Object.keys(distanceTransaction ?? {}).length).toBe(expectedPropertyCount);
1684+
});
1685+
1686+
it('should include iouRequestType property for distance transactions in grouped results', () => {
1687+
const distanceTransactionID = 'distance_transaction_grouped_123';
1688+
const testSearchResults = {
1689+
...searchResults,
1690+
data: {
1691+
...searchResults.data,
1692+
[`transactions_${distanceTransactionID}`]: {
1693+
...searchResults.data[`transactions_${transactionID}`],
1694+
transactionID: distanceTransactionID,
1695+
transactionType: CONST.SEARCH.TRANSACTION_TYPE.DISTANCE,
1696+
iouRequestType: CONST.IOU.REQUEST_TYPE.DISTANCE,
1697+
},
1698+
},
1699+
};
1700+
1701+
const result = SearchUIUtils.getSections(
1702+
CONST.SEARCH.DATA_TYPES.EXPENSE,
1703+
testSearchResults.data,
1704+
2074551,
1705+
formatPhoneNumber,
1706+
CONST.SEARCH.GROUP_BY.REPORTS,
1707+
) as TransactionGroupListItemType[];
1708+
1709+
const reportGroup = result.find((group) => group.transactions?.some((transaction) => transaction.transactionID === distanceTransactionID));
1710+
1711+
const distanceTransaction = reportGroup?.transactions?.find((transaction) => transaction.transactionID === distanceTransactionID);
1712+
1713+
expect(distanceTransaction).toBeDefined();
1714+
expect(distanceTransaction?.iouRequestType).toBe(CONST.IOU.REQUEST_TYPE.DISTANCE);
1715+
1716+
const expectedPropertyCount = 55;
1717+
expect(Object.keys(distanceTransaction ?? {}).length).toBe(expectedPropertyCount);
16571718
});
16581719

16591720
it('should return getReportSections result when type is EXPENSE and groupBy is report', () => {

0 commit comments

Comments
 (0)