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', () => {