diff --git a/src/CONST/index.ts b/src/CONST/index.ts index 525b18be51a30..aa31f8c01d28d 100755 --- a/src/CONST/index.ts +++ b/src/CONST/index.ts @@ -6714,6 +6714,7 @@ const CONST = { CARD: 'card', DISTANCE: 'distance', PER_DIEM: 'perDiem', + TIME: 'time', }, WITHDRAWAL_TYPE: { EXPENSIFY_CARD: 'expensify-card', diff --git a/src/components/TransactionItemRow/DataCells/TypeCell.tsx b/src/components/TransactionItemRow/DataCells/TypeCell.tsx index 97bab59831865..77906d6b0501d 100644 --- a/src/components/TransactionItemRow/DataCells/TypeCell.tsx +++ b/src/components/TransactionItemRow/DataCells/TypeCell.tsx @@ -7,18 +7,21 @@ import useOnyx from '@hooks/useOnyx'; import useTheme from '@hooks/useTheme'; import useThemeStyles from '@hooks/useThemeStyles'; import {getTransactionType, isExpensifyCardTransaction, isPending} from '@libs/TransactionUtils'; +import variables from '@styles/variables'; import CONST from '@src/CONST'; import type {TranslationPaths} from '@src/languages/types'; import ONYXKEYS from '@src/ONYXKEYS'; import type IconAsset from '@src/types/utils/IconAsset'; import type TransactionDataCellProps from './TransactionDataCellProps'; -const getTypeIcon = (icons: Record<'Car' | 'CreditCard' | 'Cash', IconAsset>, type?: string) => { +const getTypeIcon = (icons: Record<'Car' | 'CreditCard' | 'Cash' | 'Clock', IconAsset>, type?: string) => { switch (type) { case CONST.SEARCH.TRANSACTION_TYPE.CARD: return icons.CreditCard; case CONST.SEARCH.TRANSACTION_TYPE.DISTANCE: return icons.Car; + case CONST.SEARCH.TRANSACTION_TYPE.TIME: + return icons.Clock; case CONST.SEARCH.TRANSACTION_TYPE.CASH: default: return icons.Cash; @@ -31,6 +34,8 @@ const getTypeText = (type?: string): TranslationPaths => { return 'common.distance'; case CONST.SEARCH.TRANSACTION_TYPE.CARD: return 'iou.card'; + case CONST.SEARCH.TRANSACTION_TYPE.TIME: + return 'iou.time'; case CONST.SEARCH.TRANSACTION_TYPE.CASH: default: return 'iou.cash'; @@ -41,7 +46,7 @@ function TypeCell({transactionItem, shouldUseNarrowLayout, shouldShowTooltip}: T const {translate} = useLocalize(); const [cardList] = useOnyx(ONYXKEYS.CARD_LIST, {canBeMissing: true}); const theme = useTheme(); - const expensifyIcons = useMemoizedLazyExpensifyIcons(['Car', 'CreditCard', 'CreditCardHourglass', 'Cash']); + const expensifyIcons = useMemoizedLazyExpensifyIcons(['Car', 'CreditCard', 'CreditCardHourglass', 'Cash', 'Clock']); const type = getTransactionType(transactionItem, cardList); const isPendingExpensifyCardTransaction = isExpensifyCardTransaction(transactionItem) && isPending(transactionItem); const typeIcon = isPendingExpensifyCardTransaction ? expensifyIcons.CreditCardHourglass : getTypeIcon(expensifyIcons, type); @@ -58,8 +63,8 @@ function TypeCell({transactionItem, shouldUseNarrowLayout, shouldShowTooltip}: T ); } diff --git a/src/libs/SearchUIUtils.ts b/src/libs/SearchUIUtils.ts index 585439a6663be..938c56fd213bf 100644 --- a/src/libs/SearchUIUtils.ts +++ b/src/libs/SearchUIUtils.ts @@ -2508,6 +2508,8 @@ function getExpenseTypeTranslationKey(expenseType: ValueOf): boolean { return type === CONST.TRANSACTION.TYPE.CUSTOM_UNIT && customUnitName === CONST.CUSTOM_UNITS.NAME_PER_DIEM_INTERNATIONAL; } +function isTimeRequest(transaction: OnyxEntry): boolean { + return transaction?.comment?.type === CONST.TRANSACTION.TYPE.TIME; +} + function isCorporateCardTransaction(transaction: OnyxEntry): boolean { return isManagedCardTransaction(transaction) && transaction?.comment?.liabilityType === CONST.TRANSACTION.LIABILITY_TYPE.RESTRICT; } @@ -273,6 +277,10 @@ function getTransactionType(transaction: OnyxEntry, cardList?: Card return CONST.SEARCH.TRANSACTION_TYPE.PER_DIEM; } + if (isTimeRequest(transaction)) { + return CONST.SEARCH.TRANSACTION_TYPE.TIME; + } + const cardID = transaction?.cardID; if (cardID && cardList?.[cardID]?.cardName === CONST.COMPANY_CARDS.CARD_NAME.CASH) { return CONST.SEARCH.TRANSACTION_TYPE.CASH; diff --git a/tests/unit/TransactionUtilsTest.ts b/tests/unit/TransactionUtilsTest.ts index e3b750543dde3..845fc55798e19 100644 --- a/tests/unit/TransactionUtilsTest.ts +++ b/tests/unit/TransactionUtilsTest.ts @@ -468,6 +468,21 @@ describe('TransactionUtils', () => { expect(TransactionUtils.getTransactionType(transaction)).toBe(CONST.SEARCH.TRANSACTION_TYPE.CASH); }); + + it('returns time when the transaction has a comment with time type', () => { + const transaction = generateTransaction({ + comment: { + type: 'time', + units: { + count: 2, + unit: 'h', + rate: 50, + }, + }, + }); + + expect(TransactionUtils.getTransactionType(transaction)).toBe(CONST.SEARCH.TRANSACTION_TYPE.TIME); + }); }); describe('calculateTaxAmount', () => {