From ab40264dff9a6c21372617c8744b1013c22dd2d2 Mon Sep 17 00:00:00 2001 From: Rayane Djouah <77965000+rayane-djouah@users.noreply.github.com> Date: Wed, 30 Oct 2024 15:56:45 +0100 Subject: [PATCH] Add boolean-conditional-rendering rule --- .eslintrc.js | 1 + src/components/AccountSwitcher.tsx | 4 ++-- .../AttachmentCarousel/CarouselItem.tsx | 2 +- .../AttachmentView/DefaultAttachmentView/index.tsx | 2 +- src/components/AvatarWithDisplayName.tsx | 2 +- src/components/AvatarWithImagePicker.tsx | 2 +- src/components/Badge.tsx | 2 +- src/components/Banner.tsx | 2 +- src/components/BlockingViews/BlockingView.tsx | 6 +++--- src/components/Button/index.tsx | 2 +- src/components/ButtonWithDropdownMenu/index.tsx | 2 +- src/components/CheckboxWithLabel.tsx | 4 ++-- src/components/CollapsibleSection/index.tsx | 2 +- src/components/ConfirmContent.tsx | 2 +- src/components/ConnectionLayout.tsx | 2 +- src/components/DecisionModal.tsx | 2 +- src/components/EReceiptThumbnail.tsx | 2 +- src/components/FeatureList.tsx | 2 +- src/components/HeaderWithBackButton/index.tsx | 4 ++-- src/components/InteractiveStepWrapper.tsx | 2 +- src/components/LHNOptionsList/OptionRowLHN.tsx | 4 ++-- src/components/MagicCodeInput.tsx | 2 +- src/components/MapView/Direction.website.tsx | 2 +- src/components/MapView/MapView.tsx | 2 +- src/components/MapView/MapViewImpl.website.tsx | 2 +- src/components/MentionSuggestions.tsx | 2 +- src/components/MenuItem.tsx | 14 +++++++------- src/components/MoneyReportHeader.tsx | 8 ++++---- src/components/MoneyRequestConfirmationList.tsx | 2 +- src/components/MoneyRequestHeader.tsx | 2 +- src/components/OptionsList/BaseOptionsList.tsx | 2 +- src/components/Picker/BasePicker.tsx | 2 +- .../Pressable/PressableWithDelayToggle.tsx | 2 +- .../ReportActionItem/MoneyRequestView.tsx | 8 ++++---- src/components/ReportActionItem/ReportPreview.tsx | 4 ++-- .../ReportActionItem/TripDetailsView.tsx | 4 ++-- src/components/Search/SearchPageHeader.tsx | 2 +- .../Search/SearchRouter/SearchRouterInput.tsx | 2 +- src/components/SelectionList/BaseListItem.tsx | 4 ++-- src/components/SelectionList/CardListItem.tsx | 4 ++-- .../SelectionList/InviteMemberListItem.tsx | 2 +- .../Search/ExpenseItemHeaderNarrow.tsx | 6 +++--- .../SelectionList/Search/ReportListItem.tsx | 2 +- .../SelectionList/Search/SearchQueryListItem.tsx | 4 ++-- .../Search/TransactionListItemRow.tsx | 4 ++-- .../SelectionList/SelectableListItem.tsx | 2 +- src/components/SelectionList/TableListItem.tsx | 4 ++-- src/components/SelectionList/UserListItem.tsx | 4 ++-- src/components/SubStepForms/AddressStep.tsx | 4 ++-- src/components/SubStepForms/ConfirmationStep.tsx | 2 +- src/components/SubStepForms/SingleFieldStep.tsx | 2 +- src/components/SubscriptAvatar.tsx | 4 ++-- src/components/TabSelector/TabIcon.tsx | 2 +- .../TextInput/BaseTextInput/index.native.tsx | 10 +++++----- src/components/TextInput/BaseTextInput/index.tsx | 6 +++--- src/components/ThumbnailImage.tsx | 2 +- .../ValidateCodeForm/BaseValidateCodeForm.tsx | 2 +- .../VideoPlayerPreview/VideoPlayerThumbnail.tsx | 2 +- .../BottomTabBar.tsx | 4 ++-- .../DebugTabView.tsx | 2 +- .../BottomTabBar.tsx | 2 +- .../createCustomStackNavigator/index.tsx | 2 +- .../index.native.tsx | 2 +- .../index.tsx | 2 +- src/pages/Debug/Report/DebugReportPage.tsx | 4 ++-- .../AddBankAccount/substeps/ConfirmationStep.tsx | 2 +- src/pages/ProfilePage.tsx | 6 +++--- .../substeps/CompanyOwnersListUBO.tsx | 2 +- .../ContinueBankAccountSetup.tsx | 2 +- src/pages/ReportDetailsPage.tsx | 2 +- src/pages/Search/AdvancedSearchFilters.tsx | 2 +- src/pages/Search/EmptySearchView.tsx | 2 +- src/pages/Search/SearchPage.tsx | 2 +- src/pages/Search/SearchSelectionModeHeader.tsx | 2 +- src/pages/Search/SearchTypeMenu.tsx | 2 +- src/pages/ValidateLoginPage/index.website.tsx | 4 ++-- src/pages/home/ReportScreen.tsx | 4 ++-- src/pages/home/report/LinkPreviewer.tsx | 10 +++++----- src/pages/home/report/ReportActionItemSingle.tsx | 2 +- src/pages/home/report/ReportFooter.tsx | 4 ++-- .../home/report/comment/TextCommentFragment.tsx | 2 +- src/pages/home/sidebar/SidebarLinks.tsx | 2 +- .../request/step/IOURequestStepConfirmation.tsx | 2 +- .../request/step/IOURequestStepParticipants.tsx | 2 +- .../step/IOURequestStepScan/index.native.tsx | 4 ++-- .../iou/request/step/IOURequestStepScan/index.tsx | 2 +- src/pages/iou/request/step/IOURequestStepTag.tsx | 2 +- .../settings/Security/SecuritySettingsPage.tsx | 2 +- .../Security/TwoFactorAuth/Steps/CodesStep.tsx | 2 +- .../Subscription/CardSection/CardSection.tsx | 2 +- .../Subscription/SubscriptionDetails/index.tsx | 2 +- src/pages/settings/Wallet/ExpensifyCardPage.tsx | 2 +- src/pages/signin/SignUpWelcomeForm.tsx | 2 +- src/pages/tasks/NewTaskPage.tsx | 2 +- src/pages/workspace/WorkspaceProfilePage.tsx | 4 ++-- src/pages/workspace/WorkspacesListRow.tsx | 2 +- .../workspace/accounting/AccountingContext.tsx | 2 +- .../workspace/accounting/PolicyAccountingPage.tsx | 2 +- .../import/NetSuiteImportCustomFieldEdit.tsx | 4 ++-- .../import/NetSuiteImportCustomFieldView.tsx | 2 +- .../reconciliation/CardReconciliationPage.tsx | 2 +- .../xero/XeroTrackingCategoryConfigurationPage.tsx | 2 +- .../accounting/xero/advanced/XeroAdvancedPage.tsx | 2 +- .../workspace/categories/CategorySettingsPage.tsx | 8 ++++---- .../categories/WorkspaceCategoriesSettingsPage.tsx | 4 ++-- .../WorkspaceCompanyCardAccountSelectCardPage.tsx | 4 ++-- .../WorkspaceCompanyCardDetailsPage.tsx | 2 +- .../addNew/BankConnection/index.native.tsx | 2 +- .../PolicyDistanceRatesSettingsPage.tsx | 4 ++-- .../expensifyCard/WorkspaceExpensifyCardPage.tsx | 2 +- .../WorkspaceSettlementAccountPage.tsx | 4 ++-- .../workspace/invoices/WorkspaceInvoicesPage.tsx | 6 +++--- .../members/WorkspaceOwnerChangeWrapperPage.tsx | 2 +- src/pages/workspace/tags/TagSettingsPage.tsx | 2 +- .../workspace/tags/WorkspaceTagsSettingsPage.tsx | 2 +- src/pages/workspace/taxes/WorkspaceEditTaxPage.tsx | 2 +- .../workflows/approvals/ApprovalWorkflowEditor.tsx | 2 +- .../WorkspaceWorkflowsApprovalsCreatePage.tsx | 2 +- .../WorkspaceWorkflowsApprovalsEditPage.tsx | 2 +- 119 files changed, 178 insertions(+), 177 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index cfbfdcc8fe91..fefad92ce29d 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -294,6 +294,7 @@ module.exports = { files: ['*.ts', '*.tsx'], rules: { 'rulesdir/prefer-at': 'error', + 'rulesdir/boolean-conditional-rendering': 'error', }, }, ], diff --git a/src/components/AccountSwitcher.tsx b/src/components/AccountSwitcher.tsx index 8ccab44a2cb9..ad58294c0cc8 100644 --- a/src/components/AccountSwitcher.tsx +++ b/src/components/AccountSwitcher.tsx @@ -152,7 +152,7 @@ function AccountSwitcher() { > {currentUserPersonalDetails?.displayName} - {canSwitchAccounts && ( + {!!canSwitchAccounts && ( - {canSwitchAccounts && ( + {!!canSwitchAccounts && ( { diff --git a/src/components/Attachments/AttachmentCarousel/CarouselItem.tsx b/src/components/Attachments/AttachmentCarousel/CarouselItem.tsx index 103abb2df1bb..4de43a763231 100644 --- a/src/components/Attachments/AttachmentCarousel/CarouselItem.tsx +++ b/src/components/Attachments/AttachmentCarousel/CarouselItem.tsx @@ -86,7 +86,7 @@ function CarouselItem({item, onPress, isFocused, isModalHovered}: CarouselItemPr /> - {item.hasBeenFlagged && ( + {!!item.hasBeenFlagged && ( {({safeAreaPaddingBottomStyle}) => {renderButton([styles.m4, styles.alignSelfCenter])}} diff --git a/src/components/Attachments/AttachmentView/DefaultAttachmentView/index.tsx b/src/components/Attachments/AttachmentView/DefaultAttachmentView/index.tsx index 23e13833df64..8f149182d9a6 100644 --- a/src/components/Attachments/AttachmentView/DefaultAttachmentView/index.tsx +++ b/src/components/Attachments/AttachmentView/DefaultAttachmentView/index.tsx @@ -47,7 +47,7 @@ function DefaultAttachmentView({fileName = '', shouldShowLoadingSpinnerIcon = fa {fileName} - {!shouldShowLoadingSpinnerIcon && shouldShowDownloadIcon && ( + {!shouldShowLoadingSpinnerIcon && !!shouldShowDownloadIcon && ( - {report && !!title && ( + {!!report && !!title && ( - {errorData.validationError && ( + {!!errorData.validationError && ( - {icon && ( + {!!icon && ( - {shouldShowIcon && icon && ( + {shouldShowIcon && !!icon && ( ( <> - {subtitle && ( + {!!subtitle && ( - {animation && ( + {!!animation && ( )} - {icon && ( + {!!icon && ( - {icon && ( + {!!icon && ( ({ enterKeyEventListenerPriority={enterKeyEventListenerPriority} /> )} - {(shouldAlwaysShowDropdownMenu || options.length > 1) && popoverAnchorPosition && ( + {(shouldAlwaysShowDropdownMenu || options.length > 1) && !!popoverAnchorPosition && ( { diff --git a/src/components/CheckboxWithLabel.tsx b/src/components/CheckboxWithLabel.tsx index db62aa9e1441..0647b495bd33 100644 --- a/src/components/CheckboxWithLabel.tsx +++ b/src/components/CheckboxWithLabel.tsx @@ -95,8 +95,8 @@ function CheckboxWithLabel( style={[styles.flexRow, styles.alignItemsCenter, styles.noSelect, styles.w100]} wrapperStyle={[styles.ml3, styles.pr2, styles.w100, styles.flexWrap, styles.flexShrink1]} > - {label && {label}} - {LabelComponent && } + {!!label && {label}} + {!!LabelComponent && } diff --git a/src/components/CollapsibleSection/index.tsx b/src/components/CollapsibleSection/index.tsx index d339f005e3d3..3776dfa2cf9b 100644 --- a/src/components/CollapsibleSection/index.tsx +++ b/src/components/CollapsibleSection/index.tsx @@ -63,7 +63,7 @@ function CollapsibleSection({title, children, titleStyle, textStyle, wrapperStyl src={src} /> - {shouldShowSectionBorder && } + {!!shouldShowSectionBorder && } {children} diff --git a/src/components/ConfirmContent.tsx b/src/components/ConfirmContent.tsx index bda78b9b320d..cb0fc6e8e8cb 100644 --- a/src/components/ConfirmContent.tsx +++ b/src/components/ConfirmContent.tsx @@ -168,7 +168,7 @@ function ConfirmContent({ )} - {iconSource && ( + {!!iconSource && ( - {title && {titleAlreadyTranslated ?? translate(title)}} + {!!title && {titleAlreadyTranslated ?? translate(title)}} {children} ); diff --git a/src/components/DecisionModal.tsx b/src/components/DecisionModal.tsx index a9bd0b204d79..927ba1ecab11 100644 --- a/src/components/DecisionModal.tsx +++ b/src/components/DecisionModal.tsx @@ -55,7 +55,7 @@ function DecisionModal({title, prompt = '', firstOptionText, secondOptionText, o {prompt} - {firstOptionText && ( + {!!firstOptionText && (