From add4812d0a2486dd106763e0459c5cdc6519c1d1 Mon Sep 17 00:00:00 2001 From: Hayata Suenaga Date: Thu, 2 May 2024 09:53:35 -0700 Subject: [PATCH 01/10] chore: don't display the option to delete the categories when there is an accounting connection --- .../categories/WorkspaceCategoriesPage.tsx | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/pages/workspace/categories/WorkspaceCategoriesPage.tsx b/src/pages/workspace/categories/WorkspaceCategoriesPage.tsx index 053a629a4c98..8997dc297274 100644 --- a/src/pages/workspace/categories/WorkspaceCategoriesPage.tsx +++ b/src/pages/workspace/categories/WorkspaceCategoriesPage.tsx @@ -153,12 +153,15 @@ function WorkspaceCategoriesPage({policy, route}: WorkspaceCategoriesPageProps) const options: Array>> = []; if (selectedCategoriesArray.length > 0) { - options.push({ - icon: Expensicons.Trashcan, - text: translate(selectedCategoriesArray.length === 1 ? 'workspace.categories.deleteCategory' : 'workspace.categories.deleteCategories'), - value: CONST.POLICY.CATEGORIES_BULK_ACTION_TYPES.DELETE, - onSelected: () => setDeleteCategoriesConfirmModalVisible(true), - }); + // If the workspace is connected to an accounting software, the user can't delete categories + if (Object.keys(policy?.connections ?? {}).length === 0) { + options.push({ + icon: Expensicons.Trashcan, + text: translate(selectedCategoriesArray.length === 1 ? 'workspace.categories.deleteCategory' : 'workspace.categories.deleteCategories'), + value: CONST.POLICY.CATEGORIES_BULK_ACTION_TYPES.DELETE, + onSelected: () => setDeleteCategoriesConfirmModalVisible(true), + }); + } const enabledCategories = selectedCategoriesArray.filter((categoryName) => policyCategories?.[categoryName]?.enabled); if (enabledCategories.length > 0) { From 5e1e23c3239c88e9f9d991adb359cb326caa23f2 Mon Sep 17 00:00:00 2001 From: Hayata Suenaga Date: Thu, 2 May 2024 09:56:47 -0700 Subject: [PATCH 02/10] chore: don't display the option to delete categories when there is accounting connection --- .../workspace/categories/CategorySettingsPage.tsx | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/pages/workspace/categories/CategorySettingsPage.tsx b/src/pages/workspace/categories/CategorySettingsPage.tsx index 21741a417a26..a2f421a5f3b1 100644 --- a/src/pages/workspace/categories/CategorySettingsPage.tsx +++ b/src/pages/workspace/categories/CategorySettingsPage.tsx @@ -1,7 +1,7 @@ import type {StackScreenProps} from '@react-navigation/stack'; import React, {useState} from 'react'; import {View} from 'react-native'; -import {withOnyx} from 'react-native-onyx'; +import {useOnyx, withOnyx} from 'react-native-onyx'; import type {OnyxEntry} from 'react-native-onyx'; import ConfirmModal from '@components/ConfirmModal'; import HeaderWithBackButton from '@components/HeaderWithBackButton'; @@ -39,6 +39,7 @@ function CategorySettingsPage({route, policyCategories}: CategorySettingsPagePro const {translate} = useLocalize(); const {windowWidth} = useWindowDimensions(); const [deleteCategoryConfirmModalVisible, setDeleteCategoryConfirmModalVisible] = useState(false); + const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${route.params.policyID}`); const policyCategory = policyCategories?.[route.params.categoryName]; @@ -60,13 +61,14 @@ function CategorySettingsPage({route, policyCategories}: CategorySettingsPagePro Navigation.dismissModal(); }; - const threeDotsMenuItems = [ - { + const threeDotsMenuItems = []; + if (Object.keys(policy?.connections ?? {}).length === 0) { + threeDotsMenuItems.push({ icon: Expensicons.Trashcan, text: translate('workspace.categories.deleteCategory'), onSelected: () => setDeleteCategoryConfirmModalVisible(true), - }, - ]; + }); + } return ( Date: Thu, 2 May 2024 10:00:52 -0700 Subject: [PATCH 03/10] chore: don't display the option to delete tags when there is accounting connection --- src/pages/workspace/tags/WorkspaceTagsPage.tsx | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/pages/workspace/tags/WorkspaceTagsPage.tsx b/src/pages/workspace/tags/WorkspaceTagsPage.tsx index 4e4ab5ddb66e..9d1d9e7181dd 100644 --- a/src/pages/workspace/tags/WorkspaceTagsPage.tsx +++ b/src/pages/workspace/tags/WorkspaceTagsPage.tsx @@ -162,14 +162,17 @@ function WorkspaceTagsPage({route, policy}: WorkspaceTagsPageProps) { const getHeaderButtons = () => { const options: Array>> = []; + const isThereAnyAccountingConnection = Object.keys(policy?.connections ?? {}).length !== 0; if (selectedTagsArray.length > 0) { - options.push({ - icon: Expensicons.Trashcan, - text: translate(selectedTagsArray.length === 1 ? 'workspace.tags.deleteTag' : 'workspace.tags.deleteTags'), - value: CONST.POLICY.TAGS_BULK_ACTION_TYPES.DELETE, - onSelected: () => setDeleteTagsConfirmModalVisible(true), - }); + if (!isThereAnyAccountingConnection) { + options.push({ + icon: Expensicons.Trashcan, + text: translate(selectedTagsArray.length === 1 ? 'workspace.tags.deleteTag' : 'workspace.tags.deleteTags'), + value: CONST.POLICY.TAGS_BULK_ACTION_TYPES.DELETE, + onSelected: () => setDeleteTagsConfirmModalVisible(true), + }); + } const enabledTags = selectedTagsArray.filter((tagName) => tagListKeyedByName?.[tagName]?.enabled); if (enabledTags.length > 0) { From ce0215df27922729d2e6609ccb5ffc28d8309dc4 Mon Sep 17 00:00:00 2001 From: Hayata Suenaga Date: Thu, 2 May 2024 10:04:22 -0700 Subject: [PATCH 04/10] fix: don't display the option to delete the tag when there is an accounting connection --- src/pages/workspace/tags/TagSettingsPage.tsx | 21 ++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/pages/workspace/tags/TagSettingsPage.tsx b/src/pages/workspace/tags/TagSettingsPage.tsx index ed88a1a9b636..206a8f784b7a 100644 --- a/src/pages/workspace/tags/TagSettingsPage.tsx +++ b/src/pages/workspace/tags/TagSettingsPage.tsx @@ -1,7 +1,7 @@ import type {StackScreenProps} from '@react-navigation/stack'; import React, {useMemo} from 'react'; import {View} from 'react-native'; -import {withOnyx} from 'react-native-onyx'; +import {useOnyx, withOnyx} from 'react-native-onyx'; import type {OnyxEntry} from 'react-native-onyx'; import ConfirmModal from '@components/ConfirmModal'; import HeaderWithBackButton from '@components/HeaderWithBackButton'; @@ -39,6 +39,7 @@ function TagSettingsPage({route, policyTags}: TagSettingsPageProps) { const styles = useThemeStyles(); const {translate} = useLocalize(); const policyTag = useMemo(() => PolicyUtils.getTagList(policyTags, 0), [policyTags]); + const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${route.params.policyID}`); const {windowWidth} = useWindowDimensions(); @@ -64,6 +65,16 @@ function TagSettingsPage({route, policyTags}: TagSettingsPageProps) { Navigation.navigate(ROUTES.WORKSPACE_TAG_EDIT.getRoute(route.params.policyID, currentPolicyTag.name)); }; + const isThereAnyAccountingConnection = Object.keys(policy?.connections ?? {}).length !== 0; + const threeDotsMenuItems = []; + if (isThereAnyAccountingConnection) { + threeDotsMenuItems.push({ + icon: Trashcan, + text: translate('workspace.tags.deleteTag'), + onSelected: () => setIsDeleteTagModalOpen(true), + }); + } + return ( setIsDeleteTagModalOpen(true), - }, - ]} + threeDotsMenuItems={threeDotsMenuItems} /> Date: Thu, 2 May 2024 10:05:41 -0700 Subject: [PATCH 05/10] fix: use variable instead comment --- src/pages/workspace/categories/WorkspaceCategoriesPage.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/workspace/categories/WorkspaceCategoriesPage.tsx b/src/pages/workspace/categories/WorkspaceCategoriesPage.tsx index 8997dc297274..c6ce032baab7 100644 --- a/src/pages/workspace/categories/WorkspaceCategoriesPage.tsx +++ b/src/pages/workspace/categories/WorkspaceCategoriesPage.tsx @@ -151,10 +151,10 @@ function WorkspaceCategoriesPage({policy, route}: WorkspaceCategoriesPageProps) const getHeaderButtons = () => { const options: Array>> = []; + const isThereAnyAccountingConnection = Object.keys(policy?.connections ?? {}).length !== 0; if (selectedCategoriesArray.length > 0) { - // If the workspace is connected to an accounting software, the user can't delete categories - if (Object.keys(policy?.connections ?? {}).length === 0) { + if (isThereAnyAccountingConnection) { options.push({ icon: Expensicons.Trashcan, text: translate(selectedCategoriesArray.length === 1 ? 'workspace.categories.deleteCategory' : 'workspace.categories.deleteCategories'), From cdb63796eb13c21962da60f3318c848366b017e7 Mon Sep 17 00:00:00 2001 From: Hayata Suenaga Date: Thu, 2 May 2024 10:10:25 -0700 Subject: [PATCH 06/10] chore: use variable instead of comments --- src/pages/workspace/categories/CategorySettingsPage.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pages/workspace/categories/CategorySettingsPage.tsx b/src/pages/workspace/categories/CategorySettingsPage.tsx index a2f421a5f3b1..619dfaf76cd2 100644 --- a/src/pages/workspace/categories/CategorySettingsPage.tsx +++ b/src/pages/workspace/categories/CategorySettingsPage.tsx @@ -61,8 +61,9 @@ function CategorySettingsPage({route, policyCategories}: CategorySettingsPagePro Navigation.dismissModal(); }; + const isThereAnyAccountingConnection = Object.keys(policy?.connections ?? {}).length !== 0; const threeDotsMenuItems = []; - if (Object.keys(policy?.connections ?? {}).length === 0) { + if (isThereAnyAccountingConnection) { threeDotsMenuItems.push({ icon: Expensicons.Trashcan, text: translate('workspace.categories.deleteCategory'), From ff213dfbe281ee86a68005b20bdaf43065abcaf6 Mon Sep 17 00:00:00 2001 From: Hayata Suenaga Date: Thu, 2 May 2024 10:11:50 -0700 Subject: [PATCH 07/10] fix: conditional statement --- src/pages/workspace/categories/CategorySettingsPage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/workspace/categories/CategorySettingsPage.tsx b/src/pages/workspace/categories/CategorySettingsPage.tsx index 619dfaf76cd2..60572e9a9e02 100644 --- a/src/pages/workspace/categories/CategorySettingsPage.tsx +++ b/src/pages/workspace/categories/CategorySettingsPage.tsx @@ -63,7 +63,7 @@ function CategorySettingsPage({route, policyCategories}: CategorySettingsPagePro const isThereAnyAccountingConnection = Object.keys(policy?.connections ?? {}).length !== 0; const threeDotsMenuItems = []; - if (isThereAnyAccountingConnection) { + if (!isThereAnyAccountingConnection) { threeDotsMenuItems.push({ icon: Expensicons.Trashcan, text: translate('workspace.categories.deleteCategory'), From 6ac1ea70bf8f4589b3c9dc77d1d63b45784e2a0f Mon Sep 17 00:00:00 2001 From: Hayata Suenaga Date: Thu, 2 May 2024 10:12:26 -0700 Subject: [PATCH 08/10] fix: conditional statement --- src/pages/workspace/categories/WorkspaceCategoriesPage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/workspace/categories/WorkspaceCategoriesPage.tsx b/src/pages/workspace/categories/WorkspaceCategoriesPage.tsx index c6ce032baab7..3991e19c3bae 100644 --- a/src/pages/workspace/categories/WorkspaceCategoriesPage.tsx +++ b/src/pages/workspace/categories/WorkspaceCategoriesPage.tsx @@ -154,7 +154,7 @@ function WorkspaceCategoriesPage({policy, route}: WorkspaceCategoriesPageProps) const isThereAnyAccountingConnection = Object.keys(policy?.connections ?? {}).length !== 0; if (selectedCategoriesArray.length > 0) { - if (isThereAnyAccountingConnection) { + if (!isThereAnyAccountingConnection) { options.push({ icon: Expensicons.Trashcan, text: translate(selectedCategoriesArray.length === 1 ? 'workspace.categories.deleteCategory' : 'workspace.categories.deleteCategories'), From fd4197be31e8753e113526cbcf3236cf43ef8c82 Mon Sep 17 00:00:00 2001 From: Hayata Suenaga Date: Thu, 2 May 2024 10:13:57 -0700 Subject: [PATCH 09/10] fix: conditional statement --- src/pages/workspace/tags/TagSettingsPage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/workspace/tags/TagSettingsPage.tsx b/src/pages/workspace/tags/TagSettingsPage.tsx index 206a8f784b7a..c8bf83998bb0 100644 --- a/src/pages/workspace/tags/TagSettingsPage.tsx +++ b/src/pages/workspace/tags/TagSettingsPage.tsx @@ -67,7 +67,7 @@ function TagSettingsPage({route, policyTags}: TagSettingsPageProps) { const isThereAnyAccountingConnection = Object.keys(policy?.connections ?? {}).length !== 0; const threeDotsMenuItems = []; - if (isThereAnyAccountingConnection) { + if (!isThereAnyAccountingConnection) { threeDotsMenuItems.push({ icon: Trashcan, text: translate('workspace.tags.deleteTag'), From 3571b8f270646628d7651591c1faf8e33572343f Mon Sep 17 00:00:00 2001 From: Hayata Suenaga Date: Thu, 2 May 2024 10:16:53 -0700 Subject: [PATCH 10/10] fix: show the three dot menu button only when there are menu items to display --- src/pages/workspace/categories/CategorySettingsPage.tsx | 2 +- src/pages/workspace/tags/TagSettingsPage.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/workspace/categories/CategorySettingsPage.tsx b/src/pages/workspace/categories/CategorySettingsPage.tsx index 60572e9a9e02..33f3e82ed05f 100644 --- a/src/pages/workspace/categories/CategorySettingsPage.tsx +++ b/src/pages/workspace/categories/CategorySettingsPage.tsx @@ -83,7 +83,7 @@ function CategorySettingsPage({route, policyCategories}: CategorySettingsPagePro testID={CategorySettingsPage.displayName} > 0} title={route.params.categoryName} threeDotsAnchorPosition={styles.threeDotsPopoverOffsetNoCloseButton(windowWidth)} threeDotsMenuItems={threeDotsMenuItems} diff --git a/src/pages/workspace/tags/TagSettingsPage.tsx b/src/pages/workspace/tags/TagSettingsPage.tsx index c8bf83998bb0..54316efbc14b 100644 --- a/src/pages/workspace/tags/TagSettingsPage.tsx +++ b/src/pages/workspace/tags/TagSettingsPage.tsx @@ -88,7 +88,7 @@ function TagSettingsPage({route, policyTags}: TagSettingsPageProps) { > 0} shouldSetModalVisibility={false} threeDotsAnchorPosition={styles.threeDotsPopoverOffset(windowWidth)} threeDotsMenuItems={threeDotsMenuItems}