diff --git a/src/components/ReportActionItem/MoneyRequestView.tsx b/src/components/ReportActionItem/MoneyRequestView.tsx index 2346cda1150d..59f4ade02611 100644 --- a/src/components/ReportActionItem/MoneyRequestView.tsx +++ b/src/components/ReportActionItem/MoneyRequestView.tsx @@ -22,6 +22,7 @@ import useTransactionViolations from '@hooks/useTransactionViolations'; import useViolations from '@hooks/useViolations'; import type {ViolationField} from '@hooks/useViolations'; import {getCompanyCardDescription} from '@libs/CardUtils'; +import {isCategoryMissing} from '@libs/CategoryUtils'; import {convertToDisplayString} from '@libs/CurrencyUtils'; import DistanceRequestUtils from '@libs/DistanceRequestUtils'; import {isReceiptError} from '@libs/ErrorUtils'; @@ -223,10 +224,8 @@ function MoneyRequestView({report, shouldShowAnimatedBackground, readonly = fals return CONST.IOU.TYPE.SUBMIT; }, [isTrackExpense, isInvoice]); - const emptyCategories = CONST.SEARCH.CATEGORY_EMPTY_VALUE.split(','); - const category = transactionCategory ?? ''; - const categoryForDisplay = emptyCategories.includes(category) ? '' : category; + const categoryForDisplay = isCategoryMissing(category) ? '' : category; // Flags for showing categories and tags // transactionCategory can be an empty string diff --git a/src/libs/TransactionPreviewUtils.ts b/src/libs/TransactionPreviewUtils.ts index 94174f323c28..c50c364a0b63 100644 --- a/src/libs/TransactionPreviewUtils.ts +++ b/src/libs/TransactionPreviewUtils.ts @@ -6,6 +6,7 @@ import ROUTES from '@src/ROUTES'; import type * as OnyxTypes from '@src/types/onyx'; import {isEmptyObject} from '@src/types/utils/EmptyObject'; import {abandonReviewDuplicateTransactions, setReviewDuplicatesKey} from './actions/Transaction'; +import {isCategoryMissing} from './CategoryUtils'; import {convertToDisplayString} from './CurrencyUtils'; import DateUtils from './DateUtils'; import type {PlatformStackRouteProp} from './Navigation/PlatformStackNavigation/types'; @@ -310,8 +311,7 @@ function createTransactionPreviewConditionals({ const shouldShowSkeleton = isEmptyObject(transaction) && !isMessageDeleted(action) && action?.pendingAction !== CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE; const shouldShowTag = !!tag && isReportAPolicyExpenseChat; - const emptyCategories = CONST.SEARCH.CATEGORY_EMPTY_VALUE.split(','); - const categoryForDisplay = emptyCategories.includes(category ?? '') ? '' : category; + const categoryForDisplay = isCategoryMissing(category) ? '' : category; const shouldShowCategory = !!categoryForDisplay && isReportAPolicyExpenseChat; diff --git a/src/pages/iou/request/step/IOURequestStepCategory.tsx b/src/pages/iou/request/step/IOURequestStepCategory.tsx index 28814ee0197d..aa99bbc3aafa 100644 --- a/src/pages/iou/request/step/IOURequestStepCategory.tsx +++ b/src/pages/iou/request/step/IOURequestStepCategory.tsx @@ -17,6 +17,7 @@ import useTheme from '@hooks/useTheme'; import useThemeStyles from '@hooks/useThemeStyles'; import {getIOURequestPolicyID, setDraftSplitTransaction, setMoneyRequestCategory, updateMoneyRequestCategory} from '@libs/actions/IOU'; import {enablePolicyCategories, getPolicyCategories} from '@libs/actions/Policy/Category'; +import {isCategoryMissing} from '@libs/CategoryUtils'; import Navigation from '@libs/Navigation/Navigation'; import {hasEnabledOptions} from '@libs/OptionsListUtils'; import {isPolicyAdmin} from '@libs/PolicyUtils'; @@ -76,8 +77,7 @@ function IOURequestStepCategory({ const currentTransaction = isEditingSplit && !lodashIsEmpty(splitDraftTransaction) ? splitDraftTransaction : transaction; const transactionCategory = getTransactionDetails(currentTransaction)?.category ?? ''; - const emptyCategories = CONST.SEARCH.CATEGORY_EMPTY_VALUE.split(','); - const categoryForDisplay = emptyCategories.includes(transactionCategory) ? '' : transactionCategory; + const categoryForDisplay = isCategoryMissing(transactionCategory) ? '' : transactionCategory; // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing const reportAction = reportActions?.[report?.parentReportActionID || reportActionID] ?? null; diff --git a/tests/unit/CategoryUtilsTest.ts b/tests/unit/CategoryUtilsTest.ts new file mode 100644 index 000000000000..921dfc1b2ec4 --- /dev/null +++ b/tests/unit/CategoryUtilsTest.ts @@ -0,0 +1,21 @@ +import {isCategoryMissing} from '@libs/CategoryUtils'; + +describe(`isMissingCategory`, () => { + it('returns true if category is undefined', () => { + expect(isCategoryMissing(undefined)).toBe(true); + }); + + it('returns true if category is an empty string', () => { + expect(isCategoryMissing('')).toBe(true); + }); + + it('returns true if category "none" or "Uncategorized"', () => { + expect(isCategoryMissing('none')).toBe(true); + expect(isCategoryMissing('Uncategorized')).toBe(true); + }); + + it('returns false if category is a valid string', () => { + expect(isCategoryMissing('Travel')).toBe(false); + expect(isCategoryMissing('Meals')).toBe(false); + }); +});