From 8510c65be84612c6c848ec9d339071071bbc7503 Mon Sep 17 00:00:00 2001 From: ShridharGoel <35566748+ShridharGoel@users.noreply.github.com> Date: Thu, 23 May 2024 01:30:23 +0530 Subject: [PATCH 1/6] Use double negation instead of Boolean() --- .../extractAttachmentsFromReport.ts | 4 +- src/components/Button/index.tsx | 4 +- src/components/ConfirmedRoute.tsx | 2 +- .../DatePicker/CalendarPicker/index.tsx | 2 +- .../DisplayNames/DisplayNamesWithTooltip.tsx | 2 +- src/components/FocusableMenuItem.tsx | 2 +- .../HTMLRenderers/AnchorRenderer.tsx | 2 +- .../HTMLRenderers/EditedRenderer.tsx | 2 +- .../HTMLRenderers/ImageRenderer.tsx | 2 +- src/components/Header.tsx | 4 +- src/components/MapView/MapView.tsx | 2 +- src/components/MapView/MapView.website.tsx | 2 +- src/components/MentionSuggestions.tsx | 2 +- .../MoneyRequestConfirmationList.tsx | 4 +- src/components/OptionListContextProvider.tsx | 2 +- src/components/ParentNavigationSubtitle.tsx | 4 +- .../Pressable/PressableWithFeedback.tsx | 2 +- src/components/RadioButtonWithLabel.tsx | 2 +- .../ReportActionItem/MoneyReportView.tsx | 4 +- .../MoneyRequestPreviewContent.tsx | 2 +- .../ReportActionItem/MoneyRequestView.tsx | 4 +- .../ReportActionItemImage.tsx | 2 +- src/components/SelectionList/BaseListItem.tsx | 2 +- .../TextInput/BaseTextInput/index.native.tsx | 2 +- .../TextInput/BaseTextInput/index.tsx | 6 +-- src/components/TextInput/index.tsx | 2 +- src/libs/CurrencyUtils.ts | 2 +- src/libs/EmojiUtils.ts | 4 +- .../Environment/betaChecker/index.android.ts | 2 +- src/libs/HttpUtils.ts | 6 +-- src/libs/Log.ts | 2 +- .../BottomTabBar.tsx | 2 +- src/libs/Navigation/linkTo.ts | 2 +- src/libs/Network/NetworkStore.ts | 2 +- src/libs/NetworkConnection.ts | 2 +- src/libs/PolicyUtils.ts | 8 ++-- src/libs/Pusher/pusher.ts | 2 +- src/libs/ReportActionsUtils.ts | 4 +- src/libs/ReportUtils.ts | 38 ++++++++----------- src/libs/SessionUtils.ts | 2 +- src/libs/TransactionUtils.ts | 14 +++---- src/libs/ValidationUtils.ts | 10 ++--- src/libs/Violations/ViolationsUtils.ts | 4 +- src/libs/actions/Session/index.ts | 2 +- src/libs/models/BankAccount.ts | 2 +- src/pages/AddPersonalBankAccountPage.tsx | 2 +- src/pages/ChatFinderPage/index.tsx | 2 +- src/pages/DetailsPage.tsx | 2 +- .../FeesAndTerms/substeps/TermsStep.tsx | 2 +- src/pages/EnablePayments/OnfidoPrivacy.tsx | 2 +- .../TermsPage/LongTermsForm.tsx | 4 +- src/pages/EnablePayments/TermsStep.tsx | 2 +- src/pages/GroupChatNameEditPage.tsx | 2 +- src/pages/InviteReportParticipantsPage.tsx | 2 +- src/pages/NewChatConfirmPage.tsx | 2 +- src/pages/NewChatPage.tsx | 2 +- .../BaseOnboardingPurpose.tsx | 2 +- src/pages/ProfilePage.tsx | 6 +-- .../ReimbursementAccountPage.tsx | 2 +- src/pages/ReportParticipantDetailsPage.tsx | 2 +- src/pages/RoomInvitePage.tsx | 2 +- src/pages/Travel/TravelTerms.tsx | 2 +- .../PopoverReportActionContextMenu.tsx | 2 +- .../PopoverReactionList/index.tsx | 2 +- .../report/ReportActionItemMessageEdit.tsx | 4 +- .../report/ReportActionItemParentAction.tsx | 2 +- .../home/report/ReportActionItemSingle.tsx | 2 +- src/pages/home/report/ReportActionsView.tsx | 4 +- src/pages/home/sidebar/AllSettingsScreen.tsx | 2 +- .../MoneyRequestParticipantsSelector.tsx | 2 +- .../step/IOURequestStepDistanceRate.tsx | 4 +- .../request/step/IOURequestStepMerchant.tsx | 2 +- .../step/IOURequestStepScan/index.native.tsx | 2 +- .../request/step/IOURequestStepScan/index.tsx | 2 +- .../request/step/IOURequestStepSplitPayer.tsx | 2 +- .../step/IOURequestStepTaxAmountPage.tsx | 6 +-- .../ShareLogList/BaseShareLogList.tsx | 2 +- src/pages/settings/InitialSettingsPage.tsx | 4 +- .../TwoFactorAuth/Steps/CodesStep.tsx | 4 +- .../TwoFactorAuth/Steps/VerifyStep.tsx | 2 +- .../Wallet/ReportVirtualCardFraudPage.tsx | 2 +- .../settings/Wallet/TransferBalancePage.tsx | 2 +- src/pages/tasks/NewTaskPage.tsx | 2 +- src/pages/tasks/TaskAssigneeSelectorModal.tsx | 4 +- .../qbo/advanced/QuickbooksAdvancedPage.tsx | 6 +-- ...uickbooksCompanyCardExpenseAccountPage.tsx | 2 +- ...ompanyCardExpenseAccountSelectCardPage.tsx | 2 +- .../QuickbooksExportConfigurationPage.tsx | 2 +- ...oksOutOfPocketExpenseConfigurationPage.tsx | 6 +-- ...ooksOutOfPocketExpenseEntitySelectPage.tsx | 4 +- .../qbo/import/QuickbooksClassesPage.tsx | 2 +- .../qbo/import/QuickbooksCustomersPage.tsx | 2 +- .../qbo/import/QuickbooksImportPage.tsx | 10 ++--- .../qbo/import/QuickbooksLocationsPage.tsx | 2 +- .../xero/advanced/XeroAdvancedPage.tsx | 4 +- .../members/WorkspaceMemberDetailsPage.tsx | 2 +- .../workflows/WorkspaceWorkflowsPage.tsx | 2 +- src/styles/utils/index.ts | 2 +- tests/unit/SidebarFilterTest.ts | 4 +- tests/utils/getIsUsingFakeTimers.ts | 2 +- 100 files changed, 161 insertions(+), 173 deletions(-) diff --git a/src/components/Attachments/AttachmentCarousel/extractAttachmentsFromReport.ts b/src/components/Attachments/AttachmentCarousel/extractAttachmentsFromReport.ts index d1185f88ccd5b..c6911c5d69910 100644 --- a/src/components/Attachments/AttachmentCarousel/extractAttachmentsFromReport.ts +++ b/src/components/Attachments/AttachmentCarousel/extractAttachmentsFromReport.ts @@ -30,7 +30,7 @@ function extractAttachmentsFromReport(parentReportAction?: OnyxEntry 0), shouldShowRightIcon), + StyleUtils.getButtonStyleWithIcon(styles, small, medium, large, !!icon, !!(text?.length > 0), shouldShowRightIcon), success ? styles.buttonSuccess : undefined, danger ? styles.buttonDanger : undefined, isDisabled ? styles.buttonOpacityDisabled : undefined, diff --git a/src/components/ConfirmedRoute.tsx b/src/components/ConfirmedRoute.tsx index d9cbbc8f248f2..08dabbe3a0d1d 100644 --- a/src/components/ConfirmedRoute.tsx +++ b/src/components/ConfirmedRoute.tsx @@ -90,7 +90,7 @@ function ConfirmedRoute({mapboxAccessToken, transaction, interactive}: Confirmed return MapboxToken.stop; }, []); - return !isOffline && Boolean(mapboxAccessToken?.token) ? ( + return !isOffline && !!mapboxAccessToken?.token ? ( {({hovered, pressed}) => ( diff --git a/src/components/DisplayNames/DisplayNamesWithTooltip.tsx b/src/components/DisplayNames/DisplayNamesWithTooltip.tsx index 91b8b0fc44837..0b0c3ddf27caf 100644 --- a/src/components/DisplayNames/DisplayNamesWithTooltip.tsx +++ b/src/components/DisplayNames/DisplayNamesWithTooltip.tsx @@ -74,7 +74,7 @@ function DisplayNamesWithToolTip({shouldUseFullTitle, fullTitle, displayNamesWit ))} {renderAdditionalText?.()} - {Boolean(isEllipsisActive) && ( + {!!isEllipsisActive && ( {/* There is some Gap for real ellipsis so we are adding 4 `.` to cover */} diff --git a/src/components/FocusableMenuItem.tsx b/src/components/FocusableMenuItem.tsx index 7868e6e11b0e2..fc873196231d8 100644 --- a/src/components/FocusableMenuItem.tsx +++ b/src/components/FocusableMenuItem.tsx @@ -8,7 +8,7 @@ function FocusableMenuItem(props: MenuItemProps) { const ref = useRef(null); // Sync focus on an item - useSyncFocus(ref, Boolean(props.focused)); + useSyncFocus(ref, !!props.focused); return ( {/* If there's no subtitle then display a fragment to avoid an empty space which moves the main title */} {typeof subtitle === 'string' - ? Boolean(subtitle) && ( + ? !!subtitle && ( {typeof title === 'string' - ? Boolean(title) && ( + ? !!title && ( ( }; const centerCoordinate = currentPosition ? [currentPosition.longitude, currentPosition.latitude] : initialState?.location; - return !isOffline && Boolean(accessToken) && Boolean(currentPosition) ? ( + return !isOffline && !!accessToken && !!currentPosition ? ( ( [mapRef], ); - return !isOffline && Boolean(accessToken) && Boolean(currentPosition) ? ( + return !isOffline && !!accessToken && !!currentPosition ? ( {styledHandle?.map( ({text, isColored}, i) => - Boolean(text) && ( + !!text && ( Navigation.navigate(ROUTES.MONEY_REQUEST_STEP_DISTANCE_RATE.getRoute(action, iouType, transactionID, reportID, Navigation.getActiveRouteWithoutParams()))} disabled={didConfirm} - interactive={Boolean(rate) && !isReadOnly && isPolicyExpenseChat} + interactive={!!rate && !isReadOnly && isPolicyExpenseChat} /> ), shouldShow: isDistanceRequest && canUseP2PDistanceRequests, diff --git a/src/components/OptionListContextProvider.tsx b/src/components/OptionListContextProvider.tsx index c9bf5d7b9db26..fe7942f30024f 100644 --- a/src/components/OptionListContextProvider.tsx +++ b/src/components/OptionListContextProvider.tsx @@ -124,7 +124,7 @@ function OptionsListContextProvider({reports, children}: OptionsListProviderProp } Object.values(reports ?? {}) - .filter((report) => Boolean(Object.keys(report?.participants ?? {}).includes(accountID)) || (ReportUtils.isSelfDM(report) && report?.ownerAccountID === Number(accountID))) + .filter((report) => !!Object.keys(report?.participants ?? {}).includes(accountID) || (ReportUtils.isSelfDM(report) && report?.ownerAccountID === Number(accountID))) .forEach((report) => { if (!report) { return; diff --git a/src/components/ParentNavigationSubtitle.tsx b/src/components/ParentNavigationSubtitle.tsx index fc21d3d8b7801..b3b59fcb856a6 100644 --- a/src/components/ParentNavigationSubtitle.tsx +++ b/src/components/ParentNavigationSubtitle.tsx @@ -55,13 +55,13 @@ function ParentNavigationSubtitle({parentNavigationSubtitleData, parentReportAct style={[styles.optionAlternateText]} numberOfLines={1} > - {Boolean(reportName) && ( + {!!reportName && ( <> {`${translate('threads.from')} `} {reportName} )} - {Boolean(workspaceName) && {` ${translate('threads.in')} ${workspaceName}`}} + {!!workspaceName && {` ${translate('threads.in')} ${workspaceName}`}} ); diff --git a/src/components/Pressable/PressableWithFeedback.tsx b/src/components/Pressable/PressableWithFeedback.tsx index 74ea4596046e3..d50404873eebd 100644 --- a/src/components/Pressable/PressableWithFeedback.tsx +++ b/src/components/Pressable/PressableWithFeedback.tsx @@ -49,7 +49,7 @@ function PressableWithFeedback( return ( - {Boolean(label) && {label}} + {!!label && {label}} {!!LabelComponent && } diff --git a/src/components/ReportActionItem/MoneyReportView.tsx b/src/components/ReportActionItem/MoneyReportView.tsx index 139b5fde58b2a..64f0bf45e704a 100644 --- a/src/components/ReportActionItem/MoneyReportView.tsx +++ b/src/components/ReportActionItem/MoneyReportView.tsx @@ -45,7 +45,7 @@ function MoneyReportView({report, policy}: MoneyReportViewProps) { const formattedTotalAmount = CurrencyUtils.convertToDisplayString(totalDisplaySpend, report.currency); const formattedOutOfPocketAmount = CurrencyUtils.convertToDisplayString(reimbursableSpend, report.currency); const formattedCompanySpendAmount = CurrencyUtils.convertToDisplayString(nonReimbursableSpend, report.currency); - const isPartiallyPaid = Boolean(report?.pendingFields?.partial); + const isPartiallyPaid = !!report?.pendingFields?.partial; const subAmountTextStyles: StyleProp = [ styles.taskTitleMenuItem, @@ -124,7 +124,7 @@ function MoneyReportView({report, policy}: MoneyReportViewProps) { - {Boolean(shouldShowBreakdown) && ( + {!!shouldShowBreakdown && ( <> diff --git a/src/components/ReportActionItem/MoneyRequestPreview/MoneyRequestPreviewContent.tsx b/src/components/ReportActionItem/MoneyRequestPreview/MoneyRequestPreviewContent.tsx index 4ff318bc3c475..74d8648b8c47a 100644 --- a/src/components/ReportActionItem/MoneyRequestPreview/MoneyRequestPreviewContent.tsx +++ b/src/components/ReportActionItem/MoneyRequestPreview/MoneyRequestPreviewContent.tsx @@ -85,7 +85,7 @@ function MoneyRequestPreviewContent({ const hasReceipt = TransactionUtils.hasReceipt(transaction); const isScanning = hasReceipt && TransactionUtils.isReceiptBeingScanned(transaction); const isOnHold = TransactionUtils.isOnHold(transaction); - const isSettlementOrApprovalPartial = Boolean(iouReport?.pendingFields?.partial); + const isSettlementOrApprovalPartial = !!iouReport?.pendingFields?.partial; const isPartialHold = isSettlementOrApprovalPartial && isOnHold; const hasViolations = TransactionUtils.hasViolation(transaction?.transactionID ?? '', transactionViolations); const hasNoticeTypeViolations = TransactionUtils.hasNoticeTypeViolation(transaction?.transactionID ?? '', transactionViolations); diff --git a/src/components/ReportActionItem/MoneyRequestView.tsx b/src/components/ReportActionItem/MoneyRequestView.tsx index 0380780e0ccb6..0bb1be6eb67fb 100644 --- a/src/components/ReportActionItem/MoneyRequestView.tsx +++ b/src/components/ReportActionItem/MoneyRequestView.tsx @@ -122,7 +122,7 @@ function MoneyRequestView({ const isEmptyMerchant = transactionMerchant === '' || transactionMerchant === CONST.TRANSACTION.PARTIAL_TRANSACTION_MERCHANT; const isDistanceRequest = TransactionUtils.isDistanceRequest(transaction); const formattedTransactionAmount = transactionAmount ? CurrencyUtils.convertToDisplayString(transactionAmount, transactionCurrency) : ''; - const hasPendingWaypoints = Boolean(transaction?.pendingFields?.waypoints); + const hasPendingWaypoints = !!transaction?.pendingFields?.waypoints; const showMapAsImage = isDistanceRequest && hasPendingWaypoints; const formattedOriginalAmount = transactionOriginalAmount && transactionOriginalCurrency && CurrencyUtils.convertToDisplayString(transactionOriginalAmount, transactionOriginalCurrency); const isCardTransaction = TransactionUtils.isCardTransaction(transaction); @@ -329,7 +329,7 @@ function MoneyRequestView({ {!isInvoice && ( )} {shouldShowMapOrReceipt && ( diff --git a/src/components/ReportActionItem/ReportActionItemImage.tsx b/src/components/ReportActionItem/ReportActionItemImage.tsx index 4e7f123a2fb2b..32b563a4385a0 100644 --- a/src/components/ReportActionItem/ReportActionItemImage.tsx +++ b/src/components/ReportActionItem/ReportActionItemImage.tsx @@ -70,7 +70,7 @@ function ReportActionItemImage({ const attachmentModalSource = tryResolveUrlFromApiRoot(image ?? ''); const thumbnailSource = tryResolveUrlFromApiRoot(thumbnail ?? ''); const isEReceipt = transaction && TransactionUtils.hasEReceipt(transaction); - const isDistanceRequest = Boolean(transaction && TransactionUtils.isDistanceRequest(transaction)); + const isDistanceRequest = !!(transaction && TransactionUtils.isDistanceRequest(transaction)); let propsObj: ReceiptImageProps; diff --git a/src/components/SelectionList/BaseListItem.tsx b/src/components/SelectionList/BaseListItem.tsx index 5876e476afa21..01c5443f4dc36 100644 --- a/src/components/SelectionList/BaseListItem.tsx +++ b/src/components/SelectionList/BaseListItem.tsx @@ -40,7 +40,7 @@ function BaseListItem({ const pressableRef = useRef(null); // Sync focus on an item - useSyncFocus(pressableRef, Boolean(isFocused), shouldSyncFocus); + useSyncFocus(pressableRef, !!isFocused, shouldSyncFocus); const rightHandSideComponentRender = () => { if (canSelectMultiple || !rightHandSideComponent) { diff --git a/src/components/TextInput/BaseTextInput/index.native.tsx b/src/components/TextInput/BaseTextInput/index.native.tsx index 4f0c7dd71116f..2835583182846 100644 --- a/src/components/TextInput/BaseTextInput/index.native.tsx +++ b/src/components/TextInput/BaseTextInput/index.native.tsx @@ -242,7 +242,7 @@ function BaseTextInput( setPasswordHidden((prevPasswordHidden) => !prevPasswordHidden); }, []); - const hasLabel = Boolean(label?.length); + const hasLabel = !!label?.length; const isReadOnly = inputProps.readOnly ?? inputProps.disabled; // Disabling this line for safeness as nullish coalescing works only if the value is undefined or null, and errorText can be an empty string // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing diff --git a/src/components/TextInput/BaseTextInput/index.tsx b/src/components/TextInput/BaseTextInput/index.tsx index c73509aa7b8f4..7083f45519f66 100644 --- a/src/components/TextInput/BaseTextInput/index.tsx +++ b/src/components/TextInput/BaseTextInput/index.tsx @@ -239,7 +239,7 @@ function BaseTextInput( setPasswordHidden((prevPasswordHidden: boolean | undefined) => !prevPasswordHidden); }, []); - const hasLabel = Boolean(label?.length); + const hasLabel = !!label?.length; const isReadOnly = inputProps.readOnly ?? inputProps.disabled; // Disabling this line for safeness as nullish coalescing works only if the value is undefined or null, and errorText can be an empty string // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing @@ -328,7 +328,7 @@ function BaseTextInput( /> )} - {Boolean(prefixCharacter) && ( + {!!prefixCharacter && ( )} - {Boolean(inputProps.secureTextEntry) && ( + {!!inputProps.secureTextEntry && ( { - isLastSavedBeta = Boolean(value); + isLastSavedBeta = !!value; }, }); diff --git a/src/libs/HttpUtils.ts b/src/libs/HttpUtils.ts index 842776d0c8dd6..ed939615dfd5b 100644 --- a/src/libs/HttpUtils.ts +++ b/src/libs/HttpUtils.ts @@ -20,8 +20,8 @@ Onyx.connect({ if (!network) { return; } - shouldFailAllRequests = Boolean(network.shouldFailAllRequests); - shouldForceOffline = Boolean(network.shouldForceOffline); + shouldFailAllRequests = !!network.shouldFailAllRequests; + shouldForceOffline = !!network.shouldForceOffline; }, }); @@ -159,7 +159,7 @@ function xhr(command: string, data: Record, type: RequestType = }); const url = ApiUtils.getCommandURL({shouldUseSecure, command}); - return processHTTPRequest(url, type, formData, Boolean(data.canCancel)); + return processHTTPRequest(url, type, formData, !!data.canCancel); } function cancelPendingRequests() { diff --git a/src/libs/Log.ts b/src/libs/Log.ts index 101996870e1de..6495a6f3d42c6 100644 --- a/src/libs/Log.ts +++ b/src/libs/Log.ts @@ -24,7 +24,7 @@ Onyx.connect({ shouldCollectLogs = false; } - shouldCollectLogs = Boolean(val); + shouldCollectLogs = !!val; }, }); diff --git a/src/libs/Navigation/AppNavigator/createCustomBottomTabNavigator/BottomTabBar.tsx b/src/libs/Navigation/AppNavigator/createCustomBottomTabNavigator/BottomTabBar.tsx index 7f26177eeb0fc..e875073d60dfa 100644 --- a/src/libs/Navigation/AppNavigator/createCustomBottomTabNavigator/BottomTabBar.tsx +++ b/src/libs/Navigation/AppNavigator/createCustomBottomTabNavigator/BottomTabBar.tsx @@ -46,7 +46,7 @@ function BottomTabBar({isLoadingApp = false}: PurposeForUsingExpensifyModalProps const currentRoute = routes?.[navigationState?.index ?? 0]; // When we are redirected to the Settings tab from the OldDot, we don't want to call the Welcome.show() method. // To prevent this, the value of the bottomTabRoute?.name is checked here - if (Boolean(currentRoute && currentRoute.name !== NAVIGATORS.BOTTOM_TAB_NAVIGATOR && currentRoute.name !== NAVIGATORS.CENTRAL_PANE_NAVIGATOR) || Session.isAnonymousUser()) { + if (!!(currentRoute && currentRoute.name !== NAVIGATORS.BOTTOM_TAB_NAVIGATOR && currentRoute.name !== NAVIGATORS.CENTRAL_PANE_NAVIGATOR) || Session.isAnonymousUser()) { return; } diff --git a/src/libs/Navigation/linkTo.ts b/src/libs/Navigation/linkTo.ts index 50050e4b8ff46..50a855934c5e5 100644 --- a/src/libs/Navigation/linkTo.ts +++ b/src/libs/Navigation/linkTo.ts @@ -155,7 +155,7 @@ export default function linkTo(navigation: NavigationContainerRef): ValueOf, isOffline: boolean): boolean { return ( !!policy && - (policy?.isPolicyExpenseChatEnabled || Boolean(policy?.isJoinRequestPending)) && + (policy?.isPolicyExpenseChatEnabled || !!policy?.isJoinRequestPending) && (isOffline || policy?.pendingAction !== CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE || Object.keys(policy.errors ?? {}).length > 0) ); } @@ -290,7 +290,7 @@ function extractPolicyIDFromPath(path: string) { * Whether the policy has active accounting integration connections */ function hasAccountingConnections(policy: OnyxEntry) { - return Boolean(policy?.connections); + return !!policy?.connections; } function getPathWithoutPolicyID(path: string) { @@ -323,10 +323,10 @@ function canEditTaxRate(policy: Policy, taxID: string): boolean { function isPolicyFeatureEnabled(policy: OnyxEntry | EmptyObject, featureName: PolicyFeatureName): boolean { if (featureName === CONST.POLICY.MORE_FEATURES.ARE_TAXES_ENABLED) { - return Boolean(policy?.tax?.trackingEnabled); + return !!policy?.tax?.trackingEnabled; } - return Boolean(policy?.[featureName]); + return !!policy?.[featureName]; } function getApprovalWorkflow(policy: OnyxEntry | EmptyObject): ValueOf { diff --git a/src/libs/Pusher/pusher.ts b/src/libs/Pusher/pusher.ts index 48c5e5c1409ff..b695582edcf16 100644 --- a/src/libs/Pusher/pusher.ts +++ b/src/libs/Pusher/pusher.ts @@ -63,7 +63,7 @@ Onyx.connect({ if (!network) { return; } - shouldForceOffline = Boolean(network.shouldForceOffline); + shouldForceOffline = !!network.shouldForceOffline; }, }); diff --git a/src/libs/ReportActionsUtils.ts b/src/libs/ReportActionsUtils.ts index 906a2963baa8c..543e8627d0724 100644 --- a/src/libs/ReportActionsUtils.ts +++ b/src/libs/ReportActionsUtils.ts @@ -870,7 +870,7 @@ function getOneTransactionThreadReportID( // - they have an assocaited IOU transaction ID or // - they have visibile childActions (like comments) that we'd want to display // - the action is pending deletion and the user is offline - (Boolean(action.originalMessage.IOUTransactionID) || + (!!action.originalMessage.IOUTransactionID || // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing (isMessageDeleted(action) && action.childVisibleActionCount) || (action.pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE && (isOffline ?? isNetworkOffline))), @@ -1135,7 +1135,7 @@ function isReportActionUnread(reportAction: OnyxEntry, lastReadTim return !isCreatedAction(reportAction); } - return Boolean(reportAction && lastReadTime && reportAction.created && lastReadTime < reportAction.created); + return !!(reportAction && lastReadTime && reportAction.created && lastReadTime < reportAction.created); } /** diff --git a/src/libs/ReportUtils.ts b/src/libs/ReportUtils.ts index b8e4c448fdc20..a822cc5c340e7 100644 --- a/src/libs/ReportUtils.ts +++ b/src/libs/ReportUtils.ts @@ -781,7 +781,7 @@ function isCompletedTaskReport(report: OnyxEntry): boolean { * Checks if the current user is the manager of the supplied report */ function isReportManager(report: OnyxEntry): boolean { - return Boolean(report && report.managerID === currentUserAccountID); + return !!(report && report.managerID === currentUserAccountID); } /** @@ -847,7 +847,7 @@ function isCurrentUserSubmitter(reportID: string): boolean { return false; } const report = allReports[`${ONYXKEYS.COLLECTION.REPORT}${reportID}`]; - return Boolean(report && report.ownerAccountID === currentUserAccountID); + return !!(report && report.ownerAccountID === currentUserAccountID); } /** @@ -1020,7 +1020,7 @@ function isWorkspaceTaskReport(report: OnyxEntry): boolean { * Returns true if report has a parent */ function isThread(report: OnyxEntry): boolean { - return Boolean(report?.parentReportID && report?.parentReportActionID); + return !!(report?.parentReportID && report?.parentReportActionID); } /** @@ -1649,14 +1649,12 @@ function canShowReportRecipientLocalTime(personalDetails: OnyxCollection | OptionData): bo // lastMentionedTime and lastReadTime are both datetime strings and can be compared directly const lastMentionedTime = reportOrOption.lastMentionedTime ?? ''; const lastReadTime = reportOrOption.lastReadTime ?? ''; - return Boolean('isUnreadWithMention' in reportOrOption && reportOrOption.isUnreadWithMention) || lastReadTime < lastMentionedTime; + return !!('isUnreadWithMention' in reportOrOption && reportOrOption.isUnreadWithMention) || lastReadTime < lastMentionedTime; } /** @@ -2696,15 +2694,13 @@ function canEditFieldOfMoneyRequest(reportAction: OnyxEntry, field function canEditReportAction(reportAction: OnyxEntry): boolean { const isCommentOrIOU = reportAction?.actionName === CONST.REPORT.ACTIONS.TYPE.ADD_COMMENT || reportAction?.actionName === CONST.REPORT.ACTIONS.TYPE.IOU; - return Boolean( - reportAction?.actorAccountID === currentUserAccountID && + return !!(reportAction?.actorAccountID === currentUserAccountID && isCommentOrIOU && canEditMoneyRequest(reportAction) && // Returns true for non-IOU actions !ReportActionsUtils.isReportActionAttachment(reportAction) && !ReportActionsUtils.isDeletedAction(reportAction) && !ReportActionsUtils.isCreatedTaskReportAction(reportAction) && - reportAction?.pendingAction !== CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE, - ); + reportAction?.pendingAction !== CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE); } /** @@ -5302,15 +5298,13 @@ function canFlagReportAction(reportAction: OnyxEntry, reportID: st return false; } - return Boolean( - !isCurrentUserAction && + return !!(!isCurrentUserAction && reportAction?.actionName === CONST.REPORT.ACTIONS.TYPE.ADD_COMMENT && !ReportActionsUtils.isDeletedAction(reportAction) && !ReportActionsUtils.isCreatedTaskReportAction(reportAction) && !isEmptyObject(report) && report && - isAllowedToComment(report), - ); + isAllowedToComment(report)); } /** @@ -5464,7 +5458,7 @@ function canRequestMoney(report: OnyxEntry, policy: OnyxEntry, o let isOwnPolicyExpenseChat = report?.isOwnPolicyExpenseChat ?? false; if (isExpenseReport(report) && getParentReport(report)) { - isOwnPolicyExpenseChat = Boolean(getParentReport(report)?.isOwnPolicyExpenseChat); + isOwnPolicyExpenseChat = !!getParentReport(report)?.isOwnPolicyExpenseChat; } // In case there are no other participants than the current user and it's not user's own policy expense chat, they can't submit expenses from such report @@ -5688,7 +5682,7 @@ function canLeaveRoom(report: OnyxEntry, isPolicyEmployee: boolean): boo } function isCurrentUserTheOnlyParticipant(participantAccountIDs?: number[]): boolean { - return Boolean(participantAccountIDs?.length === 1 && participantAccountIDs?.[0] === currentUserAccountID); + return !!(participantAccountIDs?.length === 1 && participantAccountIDs?.[0] === currentUserAccountID); } /** @@ -6078,8 +6072,7 @@ function getIOUReportActionDisplayMessage(reportAction: OnyxEntry, * */ function isDeprecatedGroupDM(report: OnyxEntry): boolean { - return Boolean( - report && + return !!(report && !isChatThread(report) && !isTaskReport(report) && !isInvoiceReport(report) && @@ -6088,8 +6081,7 @@ function isDeprecatedGroupDM(report: OnyxEntry): boolean { !Object.values(CONST.REPORT.CHAT_TYPE).some((chatType) => chatType === getChatType(report)) && Object.keys(report.participants ?? {}) .map(Number) - .filter((accountID) => accountID !== currentUserAccountID).length > 1, - ); + .filter((accountID) => accountID !== currentUserAccountID).length > 1); } /** @@ -6103,7 +6095,7 @@ function isRootGroupChat(report: OnyxEntry): boolean { * Assume any report without a reportID is unusable. */ function isValidReport(report?: OnyxEntry): boolean { - return Boolean(report?.reportID); + return !!report?.reportID; } /** diff --git a/src/libs/SessionUtils.ts b/src/libs/SessionUtils.ts index 52521d5146cc3..e8854e158b487 100644 --- a/src/libs/SessionUtils.ts +++ b/src/libs/SessionUtils.ts @@ -50,7 +50,7 @@ function resetDidUserLogInDuringSession() { } function didUserLogInDuringSession() { - return Boolean(loggedInDuringSession); + return !!loggedInDuringSession; } export {isLoggingInAsNewUser, didUserLogInDuringSession, resetDidUserLogInDuringSession}; diff --git a/src/libs/TransactionUtils.ts b/src/libs/TransactionUtils.ts index 79e73f1585d27..2309795b0b35a 100644 --- a/src/libs/TransactionUtils.ts +++ b/src/libs/TransactionUtils.ts @@ -58,7 +58,7 @@ function isScanRequest(transaction: OnyxEntry): boolean { return transaction?.iouRequestType === CONST.IOU.REQUEST_TYPE.SCAN; } - return Boolean(transaction?.receipt?.source); + return !!transaction?.receipt?.source; } function getRequestType(transaction: OnyxEntry): IOURequestType { @@ -509,7 +509,7 @@ function didRceiptScanSucceed(transaction: OnyxEntry): boolean { * Check if the transaction has a non-smartscanning receipt and is missing required fields */ function hasMissingSmartscanFields(transaction: OnyxEntry): boolean { - return Boolean(transaction && !isDistanceRequest(transaction) && !isReceiptBeingScanned(transaction) && areRequiredFieldsEmpty(transaction)); + return !!(transaction && !isDistanceRequest(transaction) && !isReceiptBeingScanned(transaction) && areRequiredFieldsEmpty(transaction)); } /** @@ -523,9 +523,7 @@ function getTransactionViolations(transactionID: string, transactionViolations: * Check if there is pending rter violation in transactionViolations. */ function hasPendingRTERViolation(transactionViolations?: TransactionViolations | null): boolean { - return Boolean( - transactionViolations?.some((transactionViolation: TransactionViolation) => transactionViolation.name === CONST.VIOLATIONS.RTER && transactionViolation.data?.pendingPattern), - ); + return !!transactionViolations?.some((transactionViolation: TransactionViolation) => transactionViolation.name === CONST.VIOLATIONS.RTER && transactionViolation.data?.pendingPattern); } /** @@ -649,16 +647,14 @@ function isOnHoldByTransactionID(transactionID: string): boolean { * Checks if any violations for the provided transaction are of type 'violation' */ function hasViolation(transactionID: string, transactionViolations: OnyxCollection): boolean { - return Boolean( - transactionViolations?.[ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS + transactionID]?.some((violation: TransactionViolation) => violation.type === CONST.VIOLATION_TYPES.VIOLATION), - ); + return !!transactionViolations?.[ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS + transactionID]?.some((violation: TransactionViolation) => violation.type === CONST.VIOLATION_TYPES.VIOLATION); } /** * Checks if any violations for the provided transaction are of type 'notice' */ function hasNoticeTypeViolation(transactionID: string, transactionViolations: OnyxCollection): boolean { - return Boolean(transactionViolations?.[ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS + transactionID]?.some((violation: TransactionViolation) => violation.type === 'notice')); + return !!transactionViolations?.[ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS + transactionID]?.some((violation: TransactionViolation) => violation.type === 'notice'); } /** diff --git a/src/libs/ValidationUtils.ts b/src/libs/ValidationUtils.ts index d5a87fc07e287..81727772b0885 100644 --- a/src/libs/ValidationUtils.ts +++ b/src/libs/ValidationUtils.ts @@ -96,7 +96,7 @@ function isRequiredFulfilled(value?: FormValue | number[] | string[] | Record tag.name === selectedTag && Boolean(tag.enabled)); + const isTagInPolicy = Object.values(tags).some((tag) => tag.name === selectedTag && !!tag.enabled); if (!isTagInPolicy) { newTransactionViolations.push({ name: CONST.VIOLATIONS.TAG_OUT_OF_POLICY, diff --git a/src/libs/actions/Session/index.ts b/src/libs/actions/Session/index.ts index 9fc1485cd6e54..51b6de1540a62 100644 --- a/src/libs/actions/Session/index.ts +++ b/src/libs/actions/Session/index.ts @@ -181,7 +181,7 @@ function isAnonymousUser(sessionParam?: OnyxEntry): boolean { } function hasStashedSession(): boolean { - return Boolean(stashedSession.authToken && stashedCredentials.autoGeneratedLogin && stashedCredentials.autoGeneratedLogin !== ''); + return !!(stashedSession.authToken && stashedCredentials.autoGeneratedLogin && stashedCredentials.autoGeneratedLogin !== ''); } /** diff --git a/src/libs/models/BankAccount.ts b/src/libs/models/BankAccount.ts index 611d77c999279..a8612df146872 100644 --- a/src/libs/models/BankAccount.ts +++ b/src/libs/models/BankAccount.ts @@ -153,7 +153,7 @@ class BankAccount { * Return whether this bank account has been risk checked */ isRiskChecked() { - return Boolean(this.json.accountData?.riskChecked); + return !!this.json.accountData?.riskChecked; } /** diff --git a/src/pages/AddPersonalBankAccountPage.tsx b/src/pages/AddPersonalBankAccountPage.tsx index 5cd0f3ef80269..ac02cd26879bb 100644 --- a/src/pages/AddPersonalBankAccountPage.tsx +++ b/src/pages/AddPersonalBankAccountPage.tsx @@ -80,7 +80,7 @@ function AddPersonalBankAccountPage({personalBankAccount, plaidData}: AddPersona ) : ( )} - {Boolean(displayName) && ( + {!!displayName && ( diff --git a/src/pages/EnablePayments/OnfidoPrivacy.tsx b/src/pages/EnablePayments/OnfidoPrivacy.tsx index cf6e6837df160..ace91f315e328 100644 --- a/src/pages/EnablePayments/OnfidoPrivacy.tsx +++ b/src/pages/EnablePayments/OnfidoPrivacy.tsx @@ -72,7 +72,7 @@ function OnfidoPrivacy({walletOnfidoData = DEFAULT_WALLET_ONFIDO_DATA}: OnfidoPr { formRef.current?.scrollTo({y: 0, animated: true}); diff --git a/src/pages/EnablePayments/TermsPage/LongTermsForm.tsx b/src/pages/EnablePayments/TermsPage/LongTermsForm.tsx index e1b6a0ff3365c..760bd0c03b881 100644 --- a/src/pages/EnablePayments/TermsPage/LongTermsForm.tsx +++ b/src/pages/EnablePayments/TermsPage/LongTermsForm.tsx @@ -71,11 +71,11 @@ function LongTermsForm() { {section.title} - {Boolean(section.subTitle) && {section.subTitle}} + {!!section.subTitle && {section.subTitle}} {section.rightText} - {Boolean(section.subRightText) && {section.subRightText}} + {!!section.subRightText && {section.subRightText}} {section.details} diff --git a/src/pages/EnablePayments/TermsStep.tsx b/src/pages/EnablePayments/TermsStep.tsx index 916a5200a2e01..47b941108c43b 100644 --- a/src/pages/EnablePayments/TermsStep.tsx +++ b/src/pages/EnablePayments/TermsStep.tsx @@ -113,7 +113,7 @@ function TermsStep(props: TermsStepProps) { }); }} message={errorMessage} - isAlertVisible={error || Boolean(errorMessage)} + isAlertVisible={error || !!errorMessage} isLoading={!!props.walletTerms?.isLoading} containerStyles={[styles.mh0, styles.mv4]} /> diff --git a/src/pages/GroupChatNameEditPage.tsx b/src/pages/GroupChatNameEditPage.tsx index 87218fbb89cd5..82cab39986b4a 100644 --- a/src/pages/GroupChatNameEditPage.tsx +++ b/src/pages/GroupChatNameEditPage.tsx @@ -32,7 +32,7 @@ type GroupChatNameEditPageProps = StackScreenProps participant?.searchText?.toLowerCase?.().includes(debouncedSearchTerm.trim().toLowerCase())), ); diff --git a/src/pages/OnboardingPurpose/BaseOnboardingPurpose.tsx b/src/pages/OnboardingPurpose/BaseOnboardingPurpose.tsx index fd328cc26cda9..cbb714089a8d7 100644 --- a/src/pages/OnboardingPurpose/BaseOnboardingPurpose.tsx +++ b/src/pages/OnboardingPurpose/BaseOnboardingPurpose.tsx @@ -140,7 +140,7 @@ function BaseOnboardingPurpose({shouldUseNativeStyles, shouldEnableMaxHeight, on saveAndNavigate(); }} message={errorMessage} - isAlertVisible={error || Boolean(errorMessage)} + isAlertVisible={error || !!errorMessage} containerStyles={[styles.w100, styles.mb5, styles.mh0, paddingHorizontal]} /> diff --git a/src/pages/ProfilePage.tsx b/src/pages/ProfilePage.tsx index d5e556b25dd08..355704bafe1b6 100755 --- a/src/pages/ProfilePage.tsx +++ b/src/pages/ProfilePage.tsx @@ -82,7 +82,7 @@ function ProfilePage({route}: ProfilePageProps) { const accountID = Number(route.params?.accountID ?? 0); const reportID = ReportUtils.getChatByParticipants(session?.accountID ? [accountID, session.accountID] : [], reports)?.reportID ?? ''; - if ((Boolean(session) && Number(session?.accountID) === accountID) || SessionActions.isAnonymousUser() || !reportID) { + if ((!!session && Number(session?.accountID) === accountID) || SessionActions.isAnonymousUser() || !reportID) { return `${ONYXKEYS.COLLECTION.REPORT}0` as const; } return `${ONYXKEYS.COLLECTION.REPORT}${reportID}` as const; @@ -118,7 +118,7 @@ function ProfilePage({route}: ProfilePageProps) { const phoneOrEmail = isSMSLogin ? getPhoneNumber(details) : login; const hasMinimumDetails = !isEmptyObject(details.avatar); - const isLoading = Boolean(personalDetailsMetadata?.[accountID]?.isLoading) || isEmptyObject(details); + const isLoading = !!personalDetailsMetadata?.[accountID]?.isLoading || isEmptyObject(details); // If the API returns an error for some reason there won't be any details and isLoading will get set to false, so we want to show a blocking screen const shouldShowBlockingView = !hasMinimumDetails && !isLoading; @@ -170,7 +170,7 @@ function ProfilePage({route}: ProfilePageProps) { /> - {Boolean(displayName) && ( + {!!displayName && ( ); diff --git a/src/pages/ReportParticipantDetailsPage.tsx b/src/pages/ReportParticipantDetailsPage.tsx index b6ac1e29e5f24..259f5ec798b5d 100644 --- a/src/pages/ReportParticipantDetailsPage.tsx +++ b/src/pages/ReportParticipantDetailsPage.tsx @@ -86,7 +86,7 @@ function ReportParticipantDetails({personalDetails, report, route}: ReportPartic size={CONST.AVATAR_SIZE.XLARGE} fallbackIcon={fallbackIcon} /> - {Boolean(details.displayName ?? '') && ( + {!!(details.displayName ?? '') && ( { diff --git a/src/pages/Travel/TravelTerms.tsx b/src/pages/Travel/TravelTerms.tsx index 468ca9b8082a8..50df99d105814 100644 --- a/src/pages/Travel/TravelTerms.tsx +++ b/src/pages/Travel/TravelTerms.tsx @@ -95,7 +95,7 @@ function TravelTerms() { Navigation.resetToHome(); }} message={errorMessage} - isAlertVisible={error || Boolean(errorMessage)} + isAlertVisible={error || !!errorMessage} containerStyles={[styles.mh0, styles.mt5]} /> diff --git a/src/pages/home/report/ContextMenu/PopoverReportActionContextMenu.tsx b/src/pages/home/report/ContextMenu/PopoverReportActionContextMenu.tsx index 6cb688ff2558a..a0e1d1bc50b9b 100644 --- a/src/pages/home/report/ContextMenu/PopoverReportActionContextMenu.tsx +++ b/src/pages/home/report/ContextMenu/PopoverReportActionContextMenu.tsx @@ -187,7 +187,7 @@ function PopoverReportActionContextMenu(_props: unknown, ref: ForwardedRef((resolve) => { - if (Boolean(!pageX && !pageY && contextMenuAnchorRef.current) || isOverflowMenu) { + if (!!(!pageX && !pageY && contextMenuAnchorRef.current) || isOverflowMenu) { calculateAnchorPosition(contextMenuAnchorRef.current).then((position) => { popoverAnchorPosition.current = {horizontal: position.horizontal, vertical: position.vertical}; contextMenuDimensions.current = {width: position.vertical, height: position.height}; diff --git a/src/pages/home/report/ReactionList/PopoverReactionList/index.tsx b/src/pages/home/report/ReactionList/PopoverReactionList/index.tsx index 2cdcac65feaed..8d29fe3c52bd4 100644 --- a/src/pages/home/report/ReactionList/PopoverReactionList/index.tsx +++ b/src/pages/home/report/ReactionList/PopoverReactionList/index.tsx @@ -19,7 +19,7 @@ function PopoverReactionList(props: unknown, ref: ForwardedRef) innerReactionListRef.current?.hideReactionList(); }; - const isActiveReportAction = (actionID: number | string) => Boolean(actionID) && reactionListReportActionID === actionID; + const isActiveReportAction = (actionID: number | string) => !!actionID && reactionListReportActionID === actionID; useImperativeHandle(ref, () => ({showReactionList, hideReactionList, isActiveReportAction})); diff --git a/src/pages/home/report/ReportActionItemMessageEdit.tsx b/src/pages/home/report/ReportActionItemMessageEdit.tsx index 6cb03e8dae05a..62b6982a48a3c 100644 --- a/src/pages/home/report/ReportActionItemMessageEdit.tsx +++ b/src/pages/home/report/ReportActionItemMessageEdit.tsx @@ -109,8 +109,8 @@ function ReportActionItemMessageEdit( const originalMessage = parser.htmlToMarkdown(action.message?.[0]?.html ?? ''); if ( ReportActionsUtils.isDeletedAction(action) || - Boolean(action.message && draftMessage === originalMessage) || - Boolean(prevDraftMessage === draftMessage || isCommentPendingSaved.current) + !!(action.message && draftMessage === originalMessage) || + !!(prevDraftMessage === draftMessage || isCommentPendingSaved.current) ) { return; } diff --git a/src/pages/home/report/ReportActionItemParentAction.tsx b/src/pages/home/report/ReportActionItemParentAction.tsx index a32900fdd5026..6d59e868f6391 100644 --- a/src/pages/home/report/ReportActionItemParentAction.tsx +++ b/src/pages/home/report/ReportActionItemParentAction.tsx @@ -106,7 +106,7 @@ function ReportActionItemParentAction({ {allAncestors.map((ancestor) => ( ))} - {Boolean(hasEmojiStatus) && ( + {!!hasEmojiStatus && ( Boolean(action.pendingAction)).length > 0) { + if (moneyRequestActions.filter((action) => !!action.pendingAction).length > 0) { createdAction.pendingAction = CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE; } diff --git a/src/pages/home/sidebar/AllSettingsScreen.tsx b/src/pages/home/sidebar/AllSettingsScreen.tsx index 8056d9bcc413c..c06b2464f5b13 100644 --- a/src/pages/home/sidebar/AllSettingsScreen.tsx +++ b/src/pages/home/sidebar/AllSettingsScreen.tsx @@ -82,7 +82,7 @@ function AllSettingsScreen({policies}: AllSettingsScreenProps) { iconRight: item.iconRight, onPress: item.action, shouldShowRightIcon: item.shouldShowRightIcon, - shouldBlockSelection: Boolean(item.link), + shouldBlockSelection: !!item.link, wrapperStyle: styles.sectionMenuItem, isPaneMenu: true, focused: item.focused, diff --git a/src/pages/iou/request/MoneyRequestParticipantsSelector.tsx b/src/pages/iou/request/MoneyRequestParticipantsSelector.tsx index b525a2c1e3dd9..601a74cf1e5f9 100644 --- a/src/pages/iou/request/MoneyRequestParticipantsSelector.tsx +++ b/src/pages/iou/request/MoneyRequestParticipantsSelector.tsx @@ -254,7 +254,7 @@ function MoneyRequestParticipantsSelector({participants = [], onFinish, onPartic () => OptionsListUtils.getHeaderMessage( ((newChatOptions as Options)?.personalDetails ?? []).length + ((newChatOptions as Options)?.recentReports ?? []).length !== 0, - Boolean((newChatOptions as Options)?.userToInvite), + !!(newChatOptions as Options)?.userToInvite, debouncedSearchTerm.trim(), participants.some((participant) => participant?.searchText?.toLowerCase().includes(debouncedSearchTerm.trim().toLowerCase())), ), diff --git a/src/pages/iou/request/step/IOURequestStepDistanceRate.tsx b/src/pages/iou/request/step/IOURequestStepDistanceRate.tsx index 1b9ccf1876cfa..ee7035201fb47 100644 --- a/src/pages/iou/request/step/IOURequestStepDistanceRate.tsx +++ b/src/pages/iou/request/step/IOURequestStepDistanceRate.tsx @@ -60,7 +60,7 @@ function IOURequestStepDistanceRate({ alternateText: rate.name ? rateForDisplay : '', keyForList: rate.customUnitRateID, value: rate.customUnitRateID, - isSelected: lastSelectedRateID ? lastSelectedRateID === rate.customUnitRateID : Boolean(rate.name === CONST.CUSTOM_UNITS.DEFAULT_RATE), + isSelected: lastSelectedRateID ? lastSelectedRateID === rate.customUnitRateID : !!(rate.name === CONST.CUSTOM_UNITS.DEFAULT_RATE), }; }); @@ -77,7 +77,7 @@ function IOURequestStepDistanceRate({ {translate('iou.chooseARate', {unit})} diff --git a/src/pages/iou/request/step/IOURequestStepMerchant.tsx b/src/pages/iou/request/step/IOURequestStepMerchant.tsx index fc7d39b490896..fd83ba146eccd 100644 --- a/src/pages/iou/request/step/IOURequestStepMerchant.tsx +++ b/src/pages/iou/request/step/IOURequestStepMerchant.tsx @@ -63,7 +63,7 @@ function IOURequestStepMerchant({ const merchant = ReportUtils.getTransactionDetails(isEditingSplitBill && !isEmptyObject(splitDraftTransaction) ? splitDraftTransaction : transaction)?.merchant; const isEmptyMerchant = merchant === '' || merchant === CONST.TRANSACTION.PARTIAL_TRANSACTION_MERCHANT; - const isMerchantRequired = ReportUtils.isReportInGroupPolicy(report) || transaction?.participants?.some((participant) => Boolean(participant.isPolicyExpenseChat)); + const isMerchantRequired = ReportUtils.isReportInGroupPolicy(report) || transaction?.participants?.some((participant) => !!participant.isPolicyExpenseChat); const navigateBack = () => { Navigation.goBack(backTo); }; diff --git a/src/pages/iou/request/step/IOURequestStepScan/index.native.tsx b/src/pages/iou/request/step/IOURequestStepScan/index.native.tsx index c022a079df65b..f9090e77bb447 100644 --- a/src/pages/iou/request/step/IOURequestStepScan/index.native.tsx +++ b/src/pages/iou/request/step/IOURequestStepScan/index.native.tsx @@ -439,7 +439,7 @@ function IOURequestStepScan({ includeSafeAreaPaddingBottom headerTitle={translate('common.receipt')} onBackButtonPress={navigateBack} - shouldShowWrapper={Boolean(backTo)} + shouldShowWrapper={!!backTo} testID={IOURequestStepScan.displayName} > {cameraPermissionStatus !== RESULTS.GRANTED && ( diff --git a/src/pages/iou/request/step/IOURequestStepScan/index.tsx b/src/pages/iou/request/step/IOURequestStepScan/index.tsx index ede79e009a490..2f626d312397d 100644 --- a/src/pages/iou/request/step/IOURequestStepScan/index.tsx +++ b/src/pages/iou/request/step/IOURequestStepScan/index.tsx @@ -646,7 +646,7 @@ function IOURequestStepScan({ {(isDraggingOverWrapper) => ( diff --git a/src/pages/iou/request/step/IOURequestStepSplitPayer.tsx b/src/pages/iou/request/step/IOURequestStepSplitPayer.tsx index c2ee404b1205f..184d228efdd6e 100644 --- a/src/pages/iou/request/step/IOURequestStepSplitPayer.tsx +++ b/src/pages/iou/request/step/IOURequestStepSplitPayer.tsx @@ -51,7 +51,7 @@ function IOURequestStepSplitPayer({ const participants = transaction?.participants ?? []; const participantOptions = [currentUserOption, ...participants] - ?.filter((participant) => Boolean(participant.accountID)) + ?.filter((participant) => !!participant.accountID) ?.map((participant) => OptionsListUtils.getParticipantsOption(participant, personalDetails)) ?? []; return [ { diff --git a/src/pages/iou/request/step/IOURequestStepTaxAmountPage.tsx b/src/pages/iou/request/step/IOURequestStepTaxAmountPage.tsx index 94f8e2be2f6c5..e04326ee12174 100644 --- a/src/pages/iou/request/step/IOURequestStepTaxAmountPage.tsx +++ b/src/pages/iou/request/step/IOURequestStepTaxAmountPage.tsx @@ -144,14 +144,14 @@ function IOURequestStepTaxAmountPage({ headerTitle={translate('iou.taxAmount')} onBackButtonPress={navigateBack} testID={IOURequestStepTaxAmountPage.displayName} - shouldShowWrapper={Boolean(backTo || isEditing)} + shouldShowWrapper={!!(backTo || isEditing)} includeSafeAreaPaddingBottom > (textInput.current = e)} onCurrencyButtonPress={navigateToCurrencySelectionPage} onSubmitButtonPress={updateTaxAmount} diff --git a/src/pages/settings/AboutPage/ShareLogList/BaseShareLogList.tsx b/src/pages/settings/AboutPage/ShareLogList/BaseShareLogList.tsx index 05ec664fb4c03..e20803a3f8c67 100644 --- a/src/pages/settings/AboutPage/ShareLogList/BaseShareLogList.tsx +++ b/src/pages/settings/AboutPage/ShareLogList/BaseShareLogList.tsx @@ -42,7 +42,7 @@ function BaseShareLogList({onAttachLogToReport}: BaseShareLogListProps) { userToInvite: localUserToInvite, } = OptionsListUtils.getShareLogOptions(options, debouncedSearchValue.trim(), betas ?? []); - const header = OptionsListUtils.getHeaderMessage((localRecentReports?.length || 0) + (localPersonalDetails?.length || 0) !== 0, Boolean(localUserToInvite), debouncedSearchValue); + const header = OptionsListUtils.getHeaderMessage((localRecentReports?.length || 0) + (localPersonalDetails?.length || 0) !== 0, !!localUserToInvite, debouncedSearchValue); return { recentReports: localRecentReports, diff --git a/src/pages/settings/InitialSettingsPage.tsx b/src/pages/settings/InitialSettingsPage.tsx index 2dfeb1841a742..0bb331a3db386 100755 --- a/src/pages/settings/InitialSettingsPage.tsx +++ b/src/pages/settings/InitialSettingsPage.tsx @@ -324,7 +324,7 @@ function InitialSettingsPage({session, userWallet, bankAccountList, fundList, wa floatRightAvatarSize={item.avatarSize} ref={popoverAnchor} hoverAndPressStyle={styles.hoveredComponentBG} - shouldBlockSelection={Boolean(item.link)} + shouldBlockSelection={!!item.link} onSecondaryInteraction={item.link ? (event) => openPopover(item.link, event) : undefined} focused={ !!activeRoute?.name && !!item.routeName && !!(activeRoute?.name.toLowerCase().replaceAll('_', '') === item.routeName.toLowerCase().replaceAll('/', '')) @@ -436,7 +436,7 @@ function InitialSettingsPage({session, userWallet, bankAccountList, fundList, wa > {currentUserPersonalDetails.displayName ? currentUserPersonalDetails.displayName : formatPhoneNumber(session?.email ?? '')} - {Boolean(currentUserPersonalDetails.displayName) && ( + {!!currentUserPersonalDetails.displayName && ( - {Boolean(account?.recoveryCodes) && + {!!account?.recoveryCodes && account?.recoveryCodes?.split(', ').map((code) => ( - {Boolean(error) && ( + {!!error && ( {translate('twoFactorAuth.addKey')} - {Boolean(account?.twoFactorAuthSecretKey) && {splitSecretInChunks(account?.twoFactorAuthSecretKey ?? '')}} + {!!account?.twoFactorAuthSecretKey && {splitSecretInChunks(account?.twoFactorAuthSecretKey ?? '')}} {translate('reportFraudPage.description')} Card.reportVirtualExpensifyCardFraud(virtualCard.cardID)} message={virtualCardError} isLoading={formData?.isLoading} diff --git a/src/pages/settings/Wallet/TransferBalancePage.tsx b/src/pages/settings/Wallet/TransferBalancePage.tsx index c0f42fb9440db..b6246f29c051c 100644 --- a/src/pages/settings/Wallet/TransferBalancePage.tsx +++ b/src/pages/settings/Wallet/TransferBalancePage.tsx @@ -191,7 +191,7 @@ function TransferBalancePage({bankAccountList, fundList, userWallet, walletTrans ))} {translate('transferAmountPage.whichAccount')} - {Boolean(selectedAccount) && ( + {!!selectedAccount && ( Connections.updatePolicyConnectionConfig(policyID, CONST.POLICY.CONNECTIONS.NAME.QBO, CONST.QUICK_BOOKS_CONFIG.AUTO_SYNC, { enabled: !autoSync?.enabled, @@ -87,7 +87,7 @@ function QuickbooksAdvancedPage({policy}: WithPolicyConnectionsProps) { title: translate('workspace.qbo.advancedConfig.inviteEmployees'), subtitle: translate('workspace.qbo.advancedConfig.inviteEmployeesDescription'), switchAccessibilityLabel: translate('workspace.qbo.advancedConfig.inviteEmployeesDescription'), - isActive: Boolean(syncPeople), + isActive: !!syncPeople, onToggle: () => Connections.updatePolicyConnectionConfig(policyID, CONST.POLICY.CONNECTIONS.NAME.QBO, CONST.QUICK_BOOKS_CONFIG.SYNC_PEOPLE, !syncPeople), pendingAction: pendingFields?.syncPeople, errors: ErrorUtils.getLatestErrorField(qboConfig ?? {}, CONST.QUICK_BOOKS_CONFIG.SYNC_PEOPLE), @@ -98,7 +98,7 @@ function QuickbooksAdvancedPage({policy}: WithPolicyConnectionsProps) { title: translate('workspace.qbo.advancedConfig.createEntities'), subtitle: translate('workspace.qbo.advancedConfig.createEntitiesDescription'), switchAccessibilityLabel: translate('workspace.qbo.advancedConfig.createEntitiesDescription'), - isActive: Boolean(autoCreateVendor), + isActive: !!autoCreateVendor, onToggle: () => Connections.updatePolicyConnectionConfig(policyID, CONST.POLICY.CONNECTIONS.NAME.QBO, CONST.QUICK_BOOKS_CONFIG.AUTO_CREATE_VENDOR, !autoCreateVendor), pendingAction: pendingFields?.autoCreateVendor, errors: ErrorUtils.getLatestErrorField(qboConfig ?? {}, CONST.QUICK_BOOKS_CONFIG.AUTO_CREATE_VENDOR), diff --git a/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountPage.tsx b/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountPage.tsx index f0f1246dc6314..66acd06b560b4 100644 --- a/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountPage.tsx +++ b/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountPage.tsx @@ -71,7 +71,7 @@ function QuickbooksCompanyCardExpenseAccountPage({policy}: WithPolicyConnections title={translate('workspace.qbo.defaultVendor')} titleStyle={styles.textStrong} wrapperStyle={[styles.ph5, styles.mb3, styles.mt1]} - isActive={Boolean(autoCreateVendor)} + isActive={!!autoCreateVendor} onToggle={(isOn) => Connections.updateManyPolicyConnectionConfigs( policyID, diff --git a/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountSelectCardPage.tsx b/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountSelectCardPage.tsx index 4f757eab253ff..81a2299aca0b9 100644 --- a/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountSelectCardPage.tsx +++ b/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountSelectCardPage.tsx @@ -29,7 +29,7 @@ function QuickbooksCompanyCardExpenseAccountSelectCardPage({policy}: WithPolicyC const policyID = policy?.id ?? ''; const {nonReimbursableExpensesExportDestination, nonReimbursableExpensesAccount, syncLocations, nonReimbursableBillDefaultVendor} = policy?.connections?.quickbooksOnline?.config ?? {}; const {creditCards, bankAccounts, accountPayable, vendors} = policy?.connections?.quickbooksOnline?.data ?? {}; - const isLocationEnabled = Boolean(syncLocations && syncLocations !== CONST.INTEGRATION_ENTITY_MAP_TYPES.NONE); + const isLocationEnabled = !!(syncLocations && syncLocations !== CONST.INTEGRATION_ENTITY_MAP_TYPES.NONE); const sections = useMemo(() => { const options: AccountListItem[] = [ diff --git a/src/pages/workspace/accounting/qbo/export/QuickbooksExportConfigurationPage.tsx b/src/pages/workspace/accounting/qbo/export/QuickbooksExportConfigurationPage.tsx index e49536c333060..9eb69b2be2dbe 100644 --- a/src/pages/workspace/accounting/qbo/export/QuickbooksExportConfigurationPage.tsx +++ b/src/pages/workspace/accounting/qbo/export/QuickbooksExportConfigurationPage.tsx @@ -54,7 +54,7 @@ function QuickbooksExportConfigurationPage({policy}: WithPolicyConnectionsProps) { description: translate('workspace.qbo.exportExpenses'), onPress: () => Navigation.navigate(ROUTES.POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_EXPORT_OUT_OF_POCKET_EXPENSES.getRoute(policyID)), - brickRoadIndicator: Boolean(errorFields?.exportEntity) || Boolean(errorFields?.reimbursableExpensesAccount) ? CONST.BRICK_ROAD_INDICATOR_STATUS.ERROR : undefined, + brickRoadIndicator: !!errorFields?.exportEntity || !!errorFields?.reimbursableExpensesAccount ? CONST.BRICK_ROAD_INDICATOR_STATUS.ERROR : undefined, title: reimbursableExpensesExportDestination ? translate(`workspace.qbo.accounts.${reimbursableExpensesExportDestination}`) : undefined, // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing pendingAction: pendingFields?.reimbursableExpensesExportDestination || pendingFields?.reimbursableExpensesAccount, diff --git a/src/pages/workspace/accounting/qbo/export/QuickbooksOutOfPocketExpenseConfigurationPage.tsx b/src/pages/workspace/accounting/qbo/export/QuickbooksOutOfPocketExpenseConfigurationPage.tsx index 861f7d4169021..ec6cb74887e3c 100644 --- a/src/pages/workspace/accounting/qbo/export/QuickbooksOutOfPocketExpenseConfigurationPage.tsx +++ b/src/pages/workspace/accounting/qbo/export/QuickbooksOutOfPocketExpenseConfigurationPage.tsx @@ -19,11 +19,11 @@ function QuickbooksOutOfPocketExpenseConfigurationPage({policy}: WithPolicyConne const styles = useThemeStyles(); const policyID = policy?.id ?? ''; const {syncLocations, reimbursableExpensesAccount, reimbursableExpensesExportDestination, errorFields, syncTax, pendingFields} = policy?.connections?.quickbooksOnline?.config ?? {}; - const isLocationEnabled = Boolean(syncLocations && syncLocations !== CONST.INTEGRATION_ENTITY_MAP_TYPES.NONE); - const isTaxesEnabled = Boolean(syncTax); + const isLocationEnabled = !!(syncLocations && syncLocations !== CONST.INTEGRATION_ENTITY_MAP_TYPES.NONE); + const isTaxesEnabled = !!syncTax; const shouldShowTaxError = isTaxesEnabled && reimbursableExpensesExportDestination === CONST.QUICKBOOKS_REIMBURSABLE_ACCOUNT_TYPE.JOURNAL_ENTRY; const shouldShowLocationError = isLocationEnabled && reimbursableExpensesExportDestination !== CONST.QUICKBOOKS_REIMBURSABLE_ACCOUNT_TYPE.JOURNAL_ENTRY; - const hasErrors = Boolean(errorFields?.reimbursableExpensesExportDestination) || shouldShowTaxError || shouldShowLocationError; + const hasErrors = !!errorFields?.reimbursableExpensesExportDestination || shouldShowTaxError || shouldShowLocationError; return ( Navigation.navigate(ROUTES.POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_CHART_OF_ACCOUNTS.getRoute(policyID)), - hasError: Boolean(policy?.errors?.enableNewCategories), + hasError: !!policy?.errors?.enableNewCategories, title: translate('workspace.accounting.importAsCategory'), pendingAction: pendingFields?.enableNewCategories, }, { description: translate('workspace.qbo.classes'), action: () => Navigation.navigate(ROUTES.POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_CLASSES.getRoute(policyID)), - hasError: Boolean(policy?.errors?.syncClasses), + hasError: !!policy?.errors?.syncClasses, title: translate(`workspace.accounting.importTypes.${syncClasses ?? CONST.INTEGRATION_ENTITY_MAP_TYPES.NONE}`), pendingAction: pendingFields?.syncClasses, }, { description: translate('workspace.qbo.customers'), action: () => Navigation.navigate(ROUTES.POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_CUSTOMERS.getRoute(policyID)), - hasError: Boolean(policy?.errors?.syncCustomers), + hasError: !!policy?.errors?.syncCustomers, title: translate(`workspace.accounting.importTypes.${syncCustomers ?? CONST.INTEGRATION_ENTITY_MAP_TYPES.NONE}`), pendingAction: pendingFields?.syncCustomers, }, { description: translate('workspace.qbo.locations'), action: () => Navigation.navigate(ROUTES.POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_LOCATIONS.getRoute(policyID)), - hasError: Boolean(policy?.errors?.syncLocations), + hasError: !!policy?.errors?.syncLocations, title: translate(`workspace.accounting.importTypes.${syncLocations ?? CONST.INTEGRATION_ENTITY_MAP_TYPES.NONE}`), pendingAction: pendingFields?.syncLocations, }, @@ -55,7 +55,7 @@ function QuickbooksImportPage({policy}: WithPolicyProps) { sections.push({ description: translate('workspace.accounting.taxes'), action: () => Navigation.navigate(ROUTES.POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_TAXES.getRoute(policyID)), - hasError: Boolean(policy?.errors?.syncTax), + hasError: !!policy?.errors?.syncTax, title: translate(syncTax ? 'workspace.accounting.imported' : 'workspace.accounting.notImported'), pendingAction: pendingFields?.syncTax, }); diff --git a/src/pages/workspace/accounting/qbo/import/QuickbooksLocationsPage.tsx b/src/pages/workspace/accounting/qbo/import/QuickbooksLocationsPage.tsx index 1183b2a96c495..f066940f346c0 100644 --- a/src/pages/workspace/accounting/qbo/import/QuickbooksLocationsPage.tsx +++ b/src/pages/workspace/accounting/qbo/import/QuickbooksLocationsPage.tsx @@ -21,7 +21,7 @@ function QuickbooksLocationsPage({policy}: WithPolicyProps) { const styles = useThemeStyles(); const policyID = policy?.id ?? ''; const {syncLocations, pendingFields} = policy?.connections?.quickbooksOnline?.config ?? {}; - const isSwitchOn = Boolean(syncLocations && syncLocations !== CONST.INTEGRATION_ENTITY_MAP_TYPES.NONE); + const isSwitchOn = !!(syncLocations && syncLocations !== CONST.INTEGRATION_ENTITY_MAP_TYPES.NONE); const isReportFieldsSelected = syncLocations === CONST.INTEGRATION_ENTITY_MAP_TYPES.REPORT_FIELD; return ( diff --git a/src/pages/workspace/accounting/xero/advanced/XeroAdvancedPage.tsx b/src/pages/workspace/accounting/xero/advanced/XeroAdvancedPage.tsx index de6e62b4baa33..30f27456836fe 100644 --- a/src/pages/workspace/accounting/xero/advanced/XeroAdvancedPage.tsx +++ b/src/pages/workspace/accounting/xero/advanced/XeroAdvancedPage.tsx @@ -55,7 +55,7 @@ function XeroAdvancedPage({policy}: WithPolicyConnectionsProps) { switchAccessibilityLabel={translate('workspace.xero.advancedConfig.autoSyncDescription')} shouldPlaceSubtitleBelowSwitch wrapperStyle={styles.mv3} - isActive={Boolean(autoSync?.enabled)} + isActive={!!autoSync?.enabled} onToggle={() => Connections.updatePolicyConnectionConfig(policyID, CONST.POLICY.CONNECTIONS.NAME.XERO, CONST.XERO_CONFIG.AUTO_SYNC, { enabled: !autoSync?.enabled, @@ -72,7 +72,7 @@ function XeroAdvancedPage({policy}: WithPolicyConnectionsProps) { switchAccessibilityLabel={translate('workspace.xero.advancedConfig.reimbursedReportsDescription')} shouldPlaceSubtitleBelowSwitch wrapperStyle={styles.mv3} - isActive={Boolean(sync?.syncReimbursedReports)} + isActive={!!sync?.syncReimbursedReports} onToggle={() => Connections.updatePolicyConnectionConfig(policyID, CONST.POLICY.CONNECTIONS.NAME.XERO, CONST.XERO_CONFIG.SYNC, { syncReimbursedReports: !sync?.syncReimbursedReports, diff --git a/src/pages/workspace/members/WorkspaceMemberDetailsPage.tsx b/src/pages/workspace/members/WorkspaceMemberDetailsPage.tsx index 4f1cb550cf056..41a9c425f790f 100644 --- a/src/pages/workspace/members/WorkspaceMemberDetailsPage.tsx +++ b/src/pages/workspace/members/WorkspaceMemberDetailsPage.tsx @@ -165,7 +165,7 @@ function WorkspaceMemberDetailsPage({personalDetails, policy, route}: WorkspaceM fallbackIcon={fallbackIcon} /> - {Boolean(details.displayName ?? '') && ( + {!!(details.displayName ?? '') && ( { const boolArr: boolean[] = []; for (let j = AMOUNT_OF_VARIABLES - 1; j >= 0; j--) { // eslint-disable-next-line no-bitwise - boolArr.push(Boolean(i & (1 << j))); + boolArr.push(!!(i & (1 << j))); } // To test a failing set of conditions, comment out the for loop above and then use a hardcoded array @@ -666,7 +666,7 @@ xdescribe('Sidebar', () => { const boolArr: boolean[] = []; for (let j = AMOUNT_OF_VARIABLES - 1; j >= 0; j--) { // eslint-disable-next-line no-bitwise - boolArr.push(Boolean(i & (1 << j))); + boolArr.push(!!(i & (1 << j))); } // To test a failing set of conditions, comment out the for loop above and then use a hardcoded array diff --git a/tests/utils/getIsUsingFakeTimers.ts b/tests/utils/getIsUsingFakeTimers.ts index 52138276928c7..b5dda6a4bac14 100644 --- a/tests/utils/getIsUsingFakeTimers.ts +++ b/tests/utils/getIsUsingFakeTimers.ts @@ -1,3 +1,3 @@ type SetTimeout = typeof global.setTimeout & jest.Mock & typeof jasmine; -export default () => Boolean((global.setTimeout as SetTimeout).mock || (global.setTimeout as SetTimeout).clock); +export default () => !!((global.setTimeout as SetTimeout).mock || (global.setTimeout as SetTimeout).clock); From f869d0cf241f1a13b480afb87fe34c6641cf0eef Mon Sep 17 00:00:00 2001 From: ShridharGoel <35566748+ShridharGoel@users.noreply.github.com> Date: Fri, 31 May 2024 20:47:32 +0530 Subject: [PATCH 2/6] Update --- package-lock.json | 8 ++++---- package.json | 2 +- src/components/ReportActionItem/MoneyReportView.tsx | 4 ++-- .../MoneyRequestPreview/MoneyRequestPreviewContent.tsx | 4 +--- src/components/ReportActionItem/MoneyRequestView.tsx | 4 ++-- src/components/Switch.tsx | 2 +- src/libs/HttpUtils.ts | 4 ++-- src/libs/Navigation/linkTo/index.ts | 2 +- src/libs/PolicyUtils.ts | 6 +++--- src/pages/OnboardingPurpose/BaseOnboardingPurpose.tsx | 2 +- src/pages/ProfilePage.tsx | 8 ++++---- .../iou/request/step/withWritableReportOrNotFound.tsx | 2 +- .../workspace/categories/WorkspaceCategoriesPage.tsx | 2 +- src/pages/workspace/tags/WorkspaceTagsPage.tsx | 2 +- src/pages/workspace/taxes/WorkspaceTaxesPage.tsx | 2 +- 15 files changed, 26 insertions(+), 28 deletions(-) diff --git a/package-lock.json b/package-lock.json index b31d2b73305ef..b1f1dfcb173f2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -207,7 +207,7 @@ "electron-builder": "24.13.2", "eslint": "^7.6.0", "eslint-config-airbnb-typescript": "^17.1.0", - "eslint-config-expensify": "^2.0.47", + "eslint-config-expensify": "^2.0.50", "eslint-config-prettier": "^8.8.0", "eslint-plugin-import": "^2.29.1", "eslint-plugin-jest": "^24.1.0", @@ -19365,9 +19365,9 @@ } }, "node_modules/eslint-config-expensify": { - "version": "2.0.48", - "resolved": "https://registry.npmjs.org/eslint-config-expensify/-/eslint-config-expensify-2.0.48.tgz", - "integrity": "sha512-PFegJ9Wfsiu5tgevhjA1toCxsZ8Etfk6pIjtXAnwpmVj7q4CtB3QDRusJoUDyJ3HrZr8AsFKViz7CU/CBTfwOw==", + "version": "2.0.50", + "resolved": "https://registry.npmjs.org/eslint-config-expensify/-/eslint-config-expensify-2.0.50.tgz", + "integrity": "sha512-I+OMkEprqEWlSCZGJBJxpt2Wg4HQ41/QqpKVfcADiQ3xJ76bZ1mBueqz6DR4jfph1xC6XVRl4dqGNlwbeU/2Rg==", "dev": true, "dependencies": { "@lwc/eslint-plugin-lwc": "^1.7.2", diff --git a/package.json b/package.json index 12bfac4e43a4b..dfe7b2dfe4160 100644 --- a/package.json +++ b/package.json @@ -259,7 +259,7 @@ "electron-builder": "24.13.2", "eslint": "^7.6.0", "eslint-config-airbnb-typescript": "^17.1.0", - "eslint-config-expensify": "^2.0.47", + "eslint-config-expensify": "^2.0.50", "eslint-config-prettier": "^8.8.0", "eslint-plugin-import": "^2.29.1", "eslint-plugin-jest": "^24.1.0", diff --git a/src/components/ReportActionItem/MoneyReportView.tsx b/src/components/ReportActionItem/MoneyReportView.tsx index 81d59d7502840..87f0b771ab47c 100644 --- a/src/components/ReportActionItem/MoneyReportView.tsx +++ b/src/components/ReportActionItem/MoneyReportView.tsx @@ -43,7 +43,7 @@ function MoneyReportView({report, policy}: MoneyReportViewProps) { const formattedTotalAmount = CurrencyUtils.convertToDisplayString(totalDisplaySpend, report.currency); const formattedOutOfPocketAmount = CurrencyUtils.convertToDisplayString(reimbursableSpend, report.currency); const formattedCompanySpendAmount = CurrencyUtils.convertToDisplayString(nonReimbursableSpend, report.currency); - const isPartiallyPaid = Boolean(report?.pendingFields?.partial); + const isPartiallyPaid = !!report?.pendingFields?.partial; const subAmountTextStyles: StyleProp = [ styles.taskTitleMenuItem, @@ -121,7 +121,7 @@ function MoneyReportView({report, policy}: MoneyReportViewProps) { - {Boolean(shouldShowBreakdown) && ( + {!!shouldShowBreakdown && ( <> diff --git a/src/components/ReportActionItem/MoneyRequestPreview/MoneyRequestPreviewContent.tsx b/src/components/ReportActionItem/MoneyRequestPreview/MoneyRequestPreviewContent.tsx index cb9c73d51d00d..18dcf3cb29b71 100644 --- a/src/components/ReportActionItem/MoneyRequestPreview/MoneyRequestPreviewContent.tsx +++ b/src/components/ReportActionItem/MoneyRequestPreview/MoneyRequestPreviewContent.tsx @@ -93,9 +93,7 @@ function MoneyRequestPreviewContent({ const isSettlementOrApprovalPartial = !!iouReport?.pendingFields?.partial; const isPartialHold = isSettlementOrApprovalPartial && isOnHold; const hasViolations = TransactionUtils.hasViolation(transaction?.transactionID ?? '', transactionViolations); - const hasNoticeTypeViolations = Boolean( - TransactionUtils.hasNoticeTypeViolation(transaction?.transactionID ?? '', transactionViolations) && ReportUtils.isPaidGroupPolicy(iouReport) && canUseViolations, - ); + const hasNoticeTypeViolations = !!(TransactionUtils.hasNoticeTypeViolation(transaction?.transactionID ?? '', transactionViolations) && ReportUtils.isPaidGroupPolicy(iouReport) && canUseViolations); const hasFieldErrors = TransactionUtils.hasMissingSmartscanFields(transaction); const isDistanceRequest = TransactionUtils.isDistanceRequest(transaction); const isFetchingWaypointsFromServer = TransactionUtils.isFetchingWaypointsFromServer(transaction); diff --git a/src/components/ReportActionItem/MoneyRequestView.tsx b/src/components/ReportActionItem/MoneyRequestView.tsx index f01fb049e943c..54ce13820402e 100644 --- a/src/components/ReportActionItem/MoneyRequestView.tsx +++ b/src/components/ReportActionItem/MoneyRequestView.tsx @@ -119,7 +119,7 @@ function MoneyRequestView({ const isEmptyMerchant = transactionMerchant === '' || transactionMerchant === CONST.TRANSACTION.PARTIAL_TRANSACTION_MERCHANT; const isDistanceRequest = TransactionUtils.isDistanceRequest(transaction); const formattedTransactionAmount = transactionAmount ? CurrencyUtils.convertToDisplayString(transactionAmount, transactionCurrency) : ''; - const hasPendingWaypoints = Boolean(transaction?.pendingFields?.waypoints); + const hasPendingWaypoints = !!transaction?.pendingFields?.waypoints; const showMapAsImage = isDistanceRequest && hasPendingWaypoints; const formattedOriginalAmount = transactionOriginalAmount && transactionOriginalCurrency && CurrencyUtils.convertToDisplayString(transactionOriginalAmount, transactionOriginalCurrency); const isCardTransaction = TransactionUtils.isCardTransaction(transaction); @@ -338,7 +338,7 @@ function MoneyRequestView({ {shouldShowReceiptHeader && ( )} {shouldShowMapOrReceipt && ( diff --git a/src/components/Switch.tsx b/src/components/Switch.tsx index 3d9b586b8b914..2e29008cd9ec0 100644 --- a/src/components/Switch.tsx +++ b/src/components/Switch.tsx @@ -63,7 +63,7 @@ function Switch({isOn, onToggle, accessibilityLabel, disabled, showLockIcon}: Sw pressDimmingValue={0.8} > - {(Boolean(disabled) || Boolean(showLockIcon)) && ( + {(!!disabled || !!showLockIcon) && ( ): ValueOf, isOffline: boolean): boolean { return ( !!policy && - (policy?.isPolicyExpenseChatEnabled || Boolean(policy?.isJoinRequestPending)) && + (policy?.isPolicyExpenseChatEnabled || !!policy?.isJoinRequestPending) && (isOffline || policy?.pendingAction !== CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE || Object.keys(policy.errors ?? {}).length > 0) ); } @@ -336,10 +336,10 @@ function canEditTaxRate(policy: Policy, taxID: string): boolean { function isPolicyFeatureEnabled(policy: OnyxEntry | EmptyObject, featureName: PolicyFeatureName): boolean { if (featureName === CONST.POLICY.MORE_FEATURES.ARE_TAXES_ENABLED) { - return Boolean(policy?.tax?.trackingEnabled); + return !!policy?.tax?.trackingEnabled; } - return Boolean(policy?.[featureName]); + return !!policy?.[featureName]; } function getApprovalWorkflow(policy: OnyxEntry | EmptyObject): ValueOf { diff --git a/src/pages/OnboardingPurpose/BaseOnboardingPurpose.tsx b/src/pages/OnboardingPurpose/BaseOnboardingPurpose.tsx index 31ff883834ccf..5b186ccbe7a9a 100644 --- a/src/pages/OnboardingPurpose/BaseOnboardingPurpose.tsx +++ b/src/pages/OnboardingPurpose/BaseOnboardingPurpose.tsx @@ -154,7 +154,7 @@ function BaseOnboardingPurpose({shouldUseNativeStyles, shouldEnableMaxHeight, on saveAndNavigate(); }} message={errorMessage} - isAlertVisible={Boolean(errorMessage)} + isAlertVisible={!!errorMessage} containerStyles={[styles.w100, styles.mb5, styles.mh0, paddingHorizontal]} /> diff --git a/src/pages/ProfilePage.tsx b/src/pages/ProfilePage.tsx index 7ce9bcf47c9c9..9adc0544eac7d 100755 --- a/src/pages/ProfilePage.tsx +++ b/src/pages/ProfilePage.tsx @@ -81,7 +81,7 @@ function ProfilePage({route}: ProfilePageProps) { const accountID = Number(route.params?.accountID ?? 0); const reportID = ReportUtils.getChatByParticipants(session?.accountID ? [accountID, session.accountID] : [], reports)?.reportID ?? ''; - if ((Boolean(session) && Number(session?.accountID) === accountID) || SessionActions.isAnonymousUser() || !reportID) { + if ((!!session && Number(session?.accountID) === accountID) || SessionActions.isAnonymousUser() || !reportID) { return `${ONYXKEYS.COLLECTION.REPORT}0` as const; } return `${ONYXKEYS.COLLECTION.REPORT}${reportID}` as const; @@ -114,8 +114,8 @@ function ProfilePage({route}: ProfilePageProps) { const phoneNumber = getPhoneNumber(details); const phoneOrEmail = isSMSLogin ? getPhoneNumber(details) : login; - const hasAvatar = Boolean(details.avatar); - const isLoading = Boolean(personalDetailsMetadata?.[accountID]?.isLoading) || isEmptyObject(details); + const hasAvatar = !!details.avatar; + const isLoading = !!personalDetailsMetadata?.[accountID]?.isLoading || isEmptyObject(details); const statusEmojiCode = details?.status?.emojiCode ?? ''; const statusText = details?.status?.text ?? ''; @@ -165,7 +165,7 @@ function ProfilePage({route}: ProfilePageProps) { /> - {Boolean(displayName) && ( + {!!displayName && ( { - if (Boolean(report?.reportID) || !route.params.reportID) { + if (!!report?.reportID || !route.params.reportID) { return; } diff --git a/src/pages/workspace/categories/WorkspaceCategoriesPage.tsx b/src/pages/workspace/categories/WorkspaceCategoriesPage.tsx index 04afa305ddb44..6e285570c303c 100644 --- a/src/pages/workspace/categories/WorkspaceCategoriesPage.tsx +++ b/src/pages/workspace/categories/WorkspaceCategoriesPage.tsx @@ -58,7 +58,7 @@ function WorkspaceCategoriesPage({route}: WorkspaceCategoriesPageProps) { const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${policyId}`); const [policyCategories] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CATEGORIES}${policyId}`); const isConnectedToAccounting = Object.keys(policy?.connections ?? {}).length > 0; - const isConnectedToQbo = Boolean(policy?.connections?.quickbooksOnline); + const isConnectedToQbo = !!policy?.connections?.quickbooksOnline; const fetchCategories = useCallback(() => { Category.openPolicyCategoriesPage(policyId); diff --git a/src/pages/workspace/tags/WorkspaceTagsPage.tsx b/src/pages/workspace/tags/WorkspaceTagsPage.tsx index f70e6b9ba5a40..f7afacce93ad9 100644 --- a/src/pages/workspace/tags/WorkspaceTagsPage.tsx +++ b/src/pages/workspace/tags/WorkspaceTagsPage.tsx @@ -52,7 +52,7 @@ function WorkspaceTagsPage({route}: WorkspaceTagsPageProps) { const [policyTags] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_TAGS}${policyID}`); const {environmentURL} = useEnvironment(); const isConnectedToAccounting = Object.keys(policy?.connections ?? {}).length > 0; - const isConnectedToQbo = Boolean(policy?.connections?.quickbooksOnline); + const isConnectedToQbo = !!policy?.connections?.quickbooksOnline; const [policyTagLists, isMultiLevelTags] = useMemo(() => [PolicyUtils.getTagLists(policyTags), PolicyUtils.isMultiLevelTags(policyTags)], [policyTags]); const canSelectMultiple = !isMultiLevelTags; diff --git a/src/pages/workspace/taxes/WorkspaceTaxesPage.tsx b/src/pages/workspace/taxes/WorkspaceTaxesPage.tsx index 608dfe2b26c81..af77a668264c3 100644 --- a/src/pages/workspace/taxes/WorkspaceTaxesPage.tsx +++ b/src/pages/workspace/taxes/WorkspaceTaxesPage.tsx @@ -58,7 +58,7 @@ function WorkspaceTaxesPage({ const hasAccountingConnections = PolicyUtils.hasAccountingConnections(policy); const isConnectedToAccounting = Object.keys(policy?.connections ?? {}).length > 0; - const isConnectedToQbo = Boolean(policy?.connections?.quickbooksOnline); + const isConnectedToQbo = !!policy?.connections?.quickbooksOnline; const fetchTaxes = useCallback(() => { openPolicyTaxesPage(policyID); From 4de123442f69860b1f8c655de9807e64e6fa856c Mon Sep 17 00:00:00 2001 From: ShridharGoel <35566748+ShridharGoel@users.noreply.github.com> Date: Tue, 4 Jun 2024 17:50:27 +0530 Subject: [PATCH 3/6] Update --- src/libs/NetworkConnection.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libs/NetworkConnection.ts b/src/libs/NetworkConnection.ts index 9599ed7a40cba..c860d164e810d 100644 --- a/src/libs/NetworkConnection.ts +++ b/src/libs/NetworkConnection.ts @@ -79,7 +79,7 @@ Onyx.connect({ } else { // If we are no longer forcing offline fetch the NetInfo to set isOffline appropriately NetInfo.fetch().then((state) => { - const isInternetReachable = Boolean(state.isInternetReachable); + const isInternetReachable = !!state.isInternetReachable; setOfflineStatus(isInternetReachable); Log.info( `[NetworkStatus] The force-offline mode was turned off. Getting the device network status from NetInfo. Network state: ${JSON.stringify( @@ -160,7 +160,7 @@ function subscribeToNetworkStatus(): () => void { return; } setOfflineStatus(state.isInternetReachable === false); - Log.info(`[NetworkStatus] NetInfo.addEventListener event coming, setting "offlineStatus" to ${Boolean(state.isInternetReachable)} with network state: ${JSON.stringify(state)}`); + Log.info(`[NetworkStatus] NetInfo.addEventListener event coming, setting "offlineStatus" to ${!!state.isInternetReachable} with network state: ${JSON.stringify(state)}`); setNetWorkStatus(state.isInternetReachable); }); From 12a2483602f922d3f033b973f6aa231e6fca56d2 Mon Sep 17 00:00:00 2001 From: ShridharGoel <35566748+ShridharGoel@users.noreply.github.com> Date: Wed, 5 Jun 2024 17:00:26 +0530 Subject: [PATCH 4/6] Update --- .../MoneyRequestPreviewContent.tsx | 6 +- src/libs/HttpUtils.ts | 4 +- src/libs/ReportUtils.ts | 70 +++++++++++-------- src/libs/TransactionUtils.ts | 4 +- .../report/ReportActionItemMessageEdit.tsx | 6 +- 5 files changed, 50 insertions(+), 40 deletions(-) diff --git a/src/components/ReportActionItem/MoneyRequestPreview/MoneyRequestPreviewContent.tsx b/src/components/ReportActionItem/MoneyRequestPreview/MoneyRequestPreviewContent.tsx index 18dcf3cb29b71..6a7fba2bb8067 100644 --- a/src/components/ReportActionItem/MoneyRequestPreview/MoneyRequestPreviewContent.tsx +++ b/src/components/ReportActionItem/MoneyRequestPreview/MoneyRequestPreviewContent.tsx @@ -93,7 +93,11 @@ function MoneyRequestPreviewContent({ const isSettlementOrApprovalPartial = !!iouReport?.pendingFields?.partial; const isPartialHold = isSettlementOrApprovalPartial && isOnHold; const hasViolations = TransactionUtils.hasViolation(transaction?.transactionID ?? '', transactionViolations); - const hasNoticeTypeViolations = !!(TransactionUtils.hasNoticeTypeViolation(transaction?.transactionID ?? '', transactionViolations) && ReportUtils.isPaidGroupPolicy(iouReport) && canUseViolations); + const hasNoticeTypeViolations = !!( + TransactionUtils.hasNoticeTypeViolation(transaction?.transactionID ?? '', transactionViolations) && + ReportUtils.isPaidGroupPolicy(iouReport) && + canUseViolations + ); const hasFieldErrors = TransactionUtils.hasMissingSmartscanFields(transaction); const isDistanceRequest = TransactionUtils.isDistanceRequest(transaction); const isFetchingWaypointsFromServer = TransactionUtils.isFetchingWaypointsFromServer(transaction); diff --git a/src/libs/HttpUtils.ts b/src/libs/HttpUtils.ts index 251d176d69618..a826c668be12f 100644 --- a/src/libs/HttpUtils.ts +++ b/src/libs/HttpUtils.ts @@ -27,8 +27,8 @@ Onyx.connect({ if (!network) { return; } - shouldFailAllRequests = !!(network.shouldFailAllRequests); - shouldForceOffline = !!(network.shouldForceOffline); + shouldFailAllRequests = !!network.shouldFailAllRequests; + shouldForceOffline = !!network.shouldForceOffline; }, }); diff --git a/src/libs/ReportUtils.ts b/src/libs/ReportUtils.ts index e3f290a0ee2bd..acb7e4256dd04 100644 --- a/src/libs/ReportUtils.ts +++ b/src/libs/ReportUtils.ts @@ -1674,12 +1674,14 @@ function canShowReportRecipientLocalTime(personalDetails: OnyxCollection, field function canEditReportAction(reportAction: OnyxEntry): boolean { const isCommentOrIOU = reportAction?.actionName === CONST.REPORT.ACTIONS.TYPE.ADD_COMMENT || reportAction?.actionName === CONST.REPORT.ACTIONS.TYPE.IOU; - return !!(reportAction?.actorAccountID === currentUserAccountID && - isCommentOrIOU && - canEditMoneyRequest(reportAction) && // Returns true for non-IOU actions - !isReportMessageAttachment(reportAction?.message?.[0]) && - (isEmptyObject(reportAction.attachmentInfo) || !reportAction.isOptimisticAction) && - !ReportActionsUtils.isDeletedAction(reportAction) && - !ReportActionsUtils.isCreatedTaskReportAction(reportAction) && - reportAction?.pendingAction !== CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE); + return !!( + reportAction?.actorAccountID === currentUserAccountID && + isCommentOrIOU && + canEditMoneyRequest(reportAction) && // Returns true for non-IOU actions + !isReportMessageAttachment(reportAction?.message?.[0]) && + (isEmptyObject(reportAction.attachmentInfo) || !reportAction.isOptimisticAction) && + !ReportActionsUtils.isDeletedAction(reportAction) && + !ReportActionsUtils.isCreatedTaskReportAction(reportAction) && + reportAction?.pendingAction !== CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE + ); } /** @@ -5433,13 +5437,15 @@ function canFlagReportAction(reportAction: OnyxEntry, reportID: st return false; } - return !!(!isCurrentUserAction && - reportAction?.actionName === CONST.REPORT.ACTIONS.TYPE.ADD_COMMENT && - !ReportActionsUtils.isDeletedAction(reportAction) && - !ReportActionsUtils.isCreatedTaskReportAction(reportAction) && - !isEmptyObject(report) && - report && - isAllowedToComment(report)); + return !!( + !isCurrentUserAction && + reportAction?.actionName === CONST.REPORT.ACTIONS.TYPE.ADD_COMMENT && + !ReportActionsUtils.isDeletedAction(reportAction) && + !ReportActionsUtils.isCreatedTaskReportAction(reportAction) && + !isEmptyObject(report) && + report && + isAllowedToComment(report) + ); } /** @@ -6208,16 +6214,18 @@ function getIOUReportActionDisplayMessage(reportAction: OnyxEntry, * */ function isDeprecatedGroupDM(report: OnyxEntry): boolean { - return !!(report && - !isChatThread(report) && - !isTaskReport(report) && - !isInvoiceReport(report) && - !isMoneyRequestReport(report) && - !isArchivedRoom(report) && - !Object.values(CONST.REPORT.CHAT_TYPE).some((chatType) => chatType === getChatType(report)) && - Object.keys(report.participants ?? {}) - .map(Number) - .filter((accountID) => accountID !== currentUserAccountID).length > 1); + return !!( + report && + !isChatThread(report) && + !isTaskReport(report) && + !isInvoiceReport(report) && + !isMoneyRequestReport(report) && + !isArchivedRoom(report) && + !Object.values(CONST.REPORT.CHAT_TYPE).some((chatType) => chatType === getChatType(report)) && + Object.keys(report.participants ?? {}) + .map(Number) + .filter((accountID) => accountID !== currentUserAccountID).length > 1 + ); } /** diff --git a/src/libs/TransactionUtils.ts b/src/libs/TransactionUtils.ts index e454df06abcc0..9aae0b4c26b74 100644 --- a/src/libs/TransactionUtils.ts +++ b/src/libs/TransactionUtils.ts @@ -647,7 +647,9 @@ function isOnHoldByTransactionID(transactionID: string): boolean { * Checks if any violations for the provided transaction are of type 'violation' */ function hasViolation(transactionID: string, transactionViolations: OnyxCollection): boolean { - return !!transactionViolations?.[ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS + transactionID]?.some((violation: TransactionViolation) => violation.type === CONST.VIOLATION_TYPES.VIOLATION); + return !!transactionViolations?.[ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS + transactionID]?.some( + (violation: TransactionViolation) => violation.type === CONST.VIOLATION_TYPES.VIOLATION, + ); } /** diff --git a/src/pages/home/report/ReportActionItemMessageEdit.tsx b/src/pages/home/report/ReportActionItemMessageEdit.tsx index 62b6982a48a3c..2d7205a122888 100644 --- a/src/pages/home/report/ReportActionItemMessageEdit.tsx +++ b/src/pages/home/report/ReportActionItemMessageEdit.tsx @@ -107,11 +107,7 @@ function ReportActionItemMessageEdit( useEffect(() => { const parser = new ExpensiMark(); const originalMessage = parser.htmlToMarkdown(action.message?.[0]?.html ?? ''); - if ( - ReportActionsUtils.isDeletedAction(action) || - !!(action.message && draftMessage === originalMessage) || - !!(prevDraftMessage === draftMessage || isCommentPendingSaved.current) - ) { + if (ReportActionsUtils.isDeletedAction(action) || !!(action.message && draftMessage === originalMessage) || !!(prevDraftMessage === draftMessage || isCommentPendingSaved.current)) { return; } setDraft(draftMessage); From a8651375a7a338b09a272696ef67207edcd0c63d Mon Sep 17 00:00:00 2001 From: ShridharGoel <35566748+ShridharGoel@users.noreply.github.com> Date: Thu, 6 Jun 2024 22:59:22 +0530 Subject: [PATCH 5/6] Update --- src/pages/DetailsPage.tsx | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100755 src/pages/DetailsPage.tsx diff --git a/src/pages/DetailsPage.tsx b/src/pages/DetailsPage.tsx deleted file mode 100755 index e69de29bb2d1d..0000000000000 From 0cf53992fc82d449e840d3d3f82915ee6834b276 Mon Sep 17 00:00:00 2001 From: ShridharGoel <35566748+ShridharGoel@users.noreply.github.com> Date: Thu, 6 Jun 2024 23:09:28 +0530 Subject: [PATCH 6/6] Update --- src/components/ConfirmedRoute.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/ConfirmedRoute.tsx b/src/components/ConfirmedRoute.tsx index 745535f3f03fc..b6d6bb13213c9 100644 --- a/src/components/ConfirmedRoute.tsx +++ b/src/components/ConfirmedRoute.tsx @@ -104,7 +104,7 @@ function ConfirmedRoute({mapboxAccessToken, transaction, isSmallerIcon, shouldHa const shouldDisplayMap = !requireRouteToDisplayMap || !!coordinates.length; - return !isOffline && Boolean(mapboxAccessToken?.token) && shouldDisplayMap ? ( + return !isOffline && !!mapboxAccessToken?.token && shouldDisplayMap ? (