From 93225310ac6b302abe845a76986eac231b6816d3 Mon Sep 17 00:00:00 2001 From: ShridharGoel <35566748+ShridharGoel@users.noreply.github.com> Date: Fri, 14 Jun 2024 00:22:28 +0530 Subject: [PATCH] Update --- src/components/Search.tsx | 9 ++------ .../Search/TransactionListItemRow.tsx | 4 ++-- .../SelectionList/SearchTableHeader.tsx | 6 ++--- src/components/SelectionList/types.ts | 6 +++-- src/libs/ReportUtils.ts | 4 ++-- src/libs/SearchUtils.ts | 22 ++++++++++++------- src/libs/TransactionUtils.ts | 8 +++---- .../iou/request/step/IOURequestStepDate.tsx | 2 +- tests/unit/TransactionUtilsTest.ts | 6 ++--- 9 files changed, 35 insertions(+), 32 deletions(-) diff --git a/src/components/Search.tsx b/src/components/Search.tsx index 69bf82be7f55..5afd5d2b07a4 100644 --- a/src/components/Search.tsx +++ b/src/components/Search.tsx @@ -35,11 +35,6 @@ type SearchProps = { const sortableSearchTabs: SearchQuery[] = [CONST.TAB_SEARCH.ALL]; -function isTransactionListItemType(item: TransactionListItemType | ReportListItemType): item is TransactionListItemType { - const transactionListItem = item as TransactionListItemType; - return transactionListItem.transactionID !== undefined; -} - function Search({query, policyIDs, sortBy, sortOrder}: SearchProps) { const {isOffline} = useNetwork(); const styles = useThemeStyles(); @@ -122,7 +117,7 @@ function Search({query, policyIDs, sortBy, sortOrder}: SearchProps) { const isSortingAllowed = sortableSearchTabs.includes(query); - const doesAtleastOneExpenseBelongToAPastYear = SearchUtils.doesAtleastOneExpenseBelongToAPastYear(searchResults?.data); + const shouldShowYear = SearchUtils.shouldShowYear(searchResults?.data); return ( @@ -133,7 +128,7 @@ function Search({query, policyIDs, sortBy, sortOrder}: SearchProps) { sortOrder={sortOrder} isSortingAllowed={isSortingAllowed} sortBy={sortBy} - doesAtleastOneExpenseBelongToAPastYear={doesAtleastOneExpenseBelongToAPastYear} + shouldShowYear={shouldShowYear} /> } // To enhance the smoothness of scrolling and minimize the risk of encountering blank spaces during scrolling, diff --git a/src/components/SelectionList/Search/TransactionListItemRow.tsx b/src/components/SelectionList/Search/TransactionListItemRow.tsx index 1bda7cd1ef65..098fec37b0e6 100644 --- a/src/components/SelectionList/Search/TransactionListItemRow.tsx +++ b/src/components/SelectionList/Search/TransactionListItemRow.tsx @@ -95,7 +95,7 @@ function ReceiptCell({transactionItem, isHovered = false}: ReceiptCellProps) { function DateCell({transactionItem, showTooltip, isLargeScreenWidth}: TransactionCellProps) { const styles = useThemeStyles(); - const created = TransactionUtils.getCreatedDate(transactionItem); + const created = TransactionUtils.getCreated(transactionItem); const date = DateUtils.formatWithUTCTimeZone(created, DateUtils.doesDateBelongToAPastYear(created) ? CONST.DATE.MONTH_DAY_YEAR_ABBR_FORMAT : CONST.DATE.MONTH_DAY_ABBR_FORMAT); return ( @@ -302,7 +302,7 @@ function TransactionListItemRow({ isHovered={isHovered} /> - + void; - doesAtleastOneExpenseBelongToAPastYear: boolean; + shouldShowYear: boolean; }; -function SearchTableHeader({data, sortBy, sortOrder, isSortingAllowed, onSortPress, doesAtleastOneExpenseBelongToAPastYear}: SearchTableHeaderProps) { +function SearchTableHeader({data, sortBy, sortOrder, isSortingAllowed, onSortPress, shouldShowYear}: SearchTableHeaderProps) { const styles = useThemeStyles(); const StyleUtils = useStyleUtils(); const {isSmallScreenWidth, isMediumScreenWidth} = useWindowDimensions(); @@ -124,7 +124,7 @@ function SearchTableHeader({data, sortBy, sortOrder, isSortingAllowed, onSortPre textStyle={textStyle} sortOrder={sortOrder ?? CONST.SORT_ORDER.ASC} isActive={isActive} - containerStyle={[StyleUtils.getSearchTableColumnStyles(columnName, doesAtleastOneExpenseBelongToAPastYear)]} + containerStyle={[StyleUtils.getSearchTableColumnStyles(columnName, shouldShowYear)]} isSortable={isSortable} onPress={(order: SortOrder) => onSortPress(columnName, order)} /> diff --git a/src/components/SelectionList/types.ts b/src/components/SelectionList/types.ts index b6894b889732..2f1269247c85 100644 --- a/src/components/SelectionList/types.ts +++ b/src/components/SelectionList/types.ts @@ -169,8 +169,10 @@ type TransactionListItemType = ListItem & /** Whether we should show the tax column */ shouldShowTax: boolean; - /** Info about whether there's atleast one transaction that doesn't belong to the present year */ - doesAtleastOneExpenseBelongToAPastYear: boolean; + /** Whether we should show the transaction year. + * This is true if at least one transaction in the data set was create in a previous year + */ + shouldShowYear: boolean; }; type ReportListItemType = ListItem & diff --git a/src/libs/ReportUtils.ts b/src/libs/ReportUtils.ts index c27d4e38589f..6dd67e21add2 100644 --- a/src/libs/ReportUtils.ts +++ b/src/libs/ReportUtils.ts @@ -2558,7 +2558,7 @@ function getTransactionDetails(transaction: OnyxEntry, createdDateF } const report = getReport(transaction?.reportID); return { - created: TransactionUtils.getCreated(transaction, createdDateFormat), + created: TransactionUtils.getFormattedCreated(transaction, createdDateFormat), amount: TransactionUtils.getAmount(transaction, !isEmptyObject(report) && isExpenseReport(report)), taxAmount: TransactionUtils.getTaxAmount(transaction, !isEmptyObject(report) && isExpenseReport(report)), taxCode: TransactionUtils.getTaxCode(transaction), @@ -3011,7 +3011,7 @@ function getModifiedExpenseOriginalMessage( originalMessage.newComment = transactionChanges?.comment; } if ('created' in transactionChanges) { - originalMessage.oldCreated = TransactionUtils.getCreated(oldTransaction); + originalMessage.oldCreated = TransactionUtils.getFormattedCreated(oldTransaction); originalMessage.created = transactionChanges?.created; } if ('merchant' in transactionChanges) { diff --git a/src/libs/SearchUtils.ts b/src/libs/SearchUtils.ts index 05d92f40d3a0..e880738b29b1 100644 --- a/src/libs/SearchUtils.ts +++ b/src/libs/SearchUtils.ts @@ -79,13 +79,19 @@ function getShouldShowMerchant(data: OnyxTypes.SearchResults['data']): boolean { const currentYear = new Date().getFullYear(); -function doesAtleastOneExpenseBelongToAPastYear(data: TransactionListItemType[] | ReportListItemType[] | OnyxTypes.SearchResults['data']): boolean { + +function isTransactionListItemType(item: TransactionListItemType | ReportListItemType): item is TransactionListItemType { + const transactionListItem = item as TransactionListItemType; + return transactionListItem.transactionID !== undefined; +} + +function shouldShowYear(data: TransactionListItemType[] | ReportListItemType[] | OnyxTypes.SearchResults['data']): boolean { if (Array.isArray(data)) { return data.some((item: TransactionListItemType | ReportListItemType) => { if ('transactions' in item) { // If the item is a ReportListItemType, iterate over its transactions and check them return item.transactions.some((transaction) => { - const transactionYear = new Date(TransactionUtils.getCreatedDate(transaction)).getFullYear(); + const transactionYear = new Date(TransactionUtils.getCreated(transaction)).getFullYear(); return transactionYear !== currentYear; }); } @@ -98,7 +104,7 @@ function doesAtleastOneExpenseBelongToAPastYear(data: TransactionListItemType[] for (const [key, transactionItem] of Object.entries(data)) { if (key.startsWith(ONYXKEYS.COLLECTION.TRANSACTION)) { const item = transactionItem as SearchTransaction; - const date = TransactionUtils.getCreatedDate(item); + const date = TransactionUtils.getCreated(item); if (DateUtils.doesDateBelongToAPastYear(date)) { return true; @@ -111,7 +117,7 @@ function doesAtleastOneExpenseBelongToAPastYear(data: TransactionListItemType[] function getTransactionsSections(data: OnyxTypes.SearchResults['data']): TransactionListItemType[] { const shouldShowMerchant = getShouldShowMerchant(data); - const doesDataContainAPastYearTransaction = doesAtleastOneExpenseBelongToAPastYear(data); + const doesDataContainAPastYearTransaction = shouldShowYear(data); return Object.entries(data) .filter(([key]) => key.startsWith(ONYXKEYS.COLLECTION.TRANSACTION)) @@ -138,7 +144,7 @@ function getTransactionsSections(data: OnyxTypes.SearchResults['data']): Transac shouldShowTag: true, shouldShowTax: true, keyForList: transactionItem.transactionID, - doesAtleastOneExpenseBelongToAPastYear: doesDataContainAPastYearTransaction, + shouldShowYear: doesDataContainAPastYearTransaction, }; }); } @@ -146,7 +152,7 @@ function getTransactionsSections(data: OnyxTypes.SearchResults['data']): Transac function getReportSections(data: OnyxTypes.SearchResults['data']): ReportListItemType[] { const shouldShowMerchant = getShouldShowMerchant(data); - const doesDataContainAPastYearTransaction = doesAtleastOneExpenseBelongToAPastYear(data); + const doesDataContainAPastYearTransaction = shouldShowYear(data); const reportIDToTransactions: Record = {}; for (const key in data) { @@ -183,7 +189,7 @@ function getReportSections(data: OnyxTypes.SearchResults['data']): ReportListIte shouldShowTag: true, shouldShowTax: true, keyForList: transactionItem.transactionID, - doesAtleastOneExpenseBelongToAPastYear: doesDataContainAPastYearTransaction, + shouldShowYear: doesDataContainAPastYearTransaction, }; if (reportIDToTransactions[reportKey]?.transactions) { reportIDToTransactions[reportKey].transactions.push(transaction); @@ -268,5 +274,5 @@ function getSearchParams() { return topmostCentralPaneRoute?.params as CentralPaneNavigatorParamList['Search_Central_Pane']; } -export {getListItem, getQueryHash, getSections, getSortedSections, getShouldShowMerchant, getSearchType, getSearchParams, doesAtleastOneExpenseBelongToAPastYear}; +export {getListItem, getQueryHash, getSections, getSortedSections, getShouldShowMerchant, getSearchType, getSearchParams, shouldShowYear}; export type {SearchColumnType, SortOrder}; diff --git a/src/libs/TransactionUtils.ts b/src/libs/TransactionUtils.ts index f7a32d60be52..a4595ae8a1ef 100644 --- a/src/libs/TransactionUtils.ts +++ b/src/libs/TransactionUtils.ts @@ -459,7 +459,7 @@ function getTagForDisplay(transaction: OnyxEntry, tagIndex?: number return getCleanedTagName(getTag(transaction, tagIndex)); } -function getCreatedDate(transaction: OnyxEntry): string { +function getCreated(transaction: OnyxEntry): string { // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing return transaction?.modifiedCreated ? transaction.modifiedCreated : transaction?.created || ''; } @@ -467,8 +467,8 @@ function getCreatedDate(transaction: OnyxEntry): string { /** * Return the created field from the transaction, return the modifiedCreated if present. */ -function getCreated(transaction: OnyxEntry, dateFormat: string = CONST.DATE.FNS_FORMAT_STRING): string { - const created = getCreatedDate(transaction); +function getFormattedCreated(transaction: OnyxEntry, dateFormat: string = CONST.DATE.FNS_FORMAT_STRING): string { + const created = getCreated(transaction); return DateUtils.formatWithUTCTimeZone(created, dateFormat); } @@ -815,8 +815,8 @@ export { getOriginalAmount, getMerchant, getMCCGroup, - getCreatedDate, getCreated, + getFormattedCreated, getCategory, getBillable, getTag, diff --git a/src/pages/iou/request/step/IOURequestStepDate.tsx b/src/pages/iou/request/step/IOURequestStepDate.tsx index 3a221b9a56db..43ed7cbbdfd2 100644 --- a/src/pages/iou/request/step/IOURequestStepDate.tsx +++ b/src/pages/iou/request/step/IOURequestStepDate.tsx @@ -70,7 +70,7 @@ function IOURequestStepDate({ const isEditing = action === CONST.IOU.ACTION.EDIT; // In the split flow, when editing we use SPLIT_TRANSACTION_DRAFT to save draft value const isEditingSplitBill = iouType === CONST.IOU.TYPE.SPLIT && isEditing; - const currentCreated = isEditingSplitBill && !lodashIsEmpty(splitDraftTransaction) ? TransactionUtils.getCreated(splitDraftTransaction) : TransactionUtils.getCreated(transaction); + const currentCreated = isEditingSplitBill && !lodashIsEmpty(splitDraftTransaction) ? TransactionUtils.getFormattedCreated(splitDraftTransaction) : TransactionUtils.getFormattedCreated(transaction); const parentReportAction = reportActions?.[(isEditingSplitBill ? reportActionID : report?.parentReportActionID) ?? 0]; const canEditingSplitBill = isEditingSplitBill && session && parentReportAction && session.accountID === parentReportAction.actorAccountID && TransactionUtils.areRequiredFieldsEmpty(transaction); diff --git a/tests/unit/TransactionUtilsTest.ts b/tests/unit/TransactionUtilsTest.ts index e51ffede633b..f23259eb568c 100644 --- a/tests/unit/TransactionUtilsTest.ts +++ b/tests/unit/TransactionUtilsTest.ts @@ -23,7 +23,7 @@ describe('TransactionUtils', () => { it('returns the "modifiedCreated" date with the correct format', () => { const expectedResult = '2023-10-25'; - const result = TransactionUtils.getCreated(transaction); + const result = TransactionUtils.getFormattedCreated(transaction); expect(result).toEqual(expectedResult); }); @@ -39,7 +39,7 @@ describe('TransactionUtils', () => { it('returns the "created" date with the correct format', () => { const expectedResult = '2023-10-01'; - const result = TransactionUtils.getCreated(transaction); + const result = TransactionUtils.getFormattedCreated(transaction); expect(result).toEqual(expectedResult); }); @@ -54,7 +54,7 @@ describe('TransactionUtils', () => { it('returns an empty string', () => { const expectedResult = ''; - const result = TransactionUtils.getCreated(transaction); + const result = TransactionUtils.getFormattedCreated(transaction); expect(result).toEqual(expectedResult); });