Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Details Revamp] Remove Delete Action from Collect Workspace Settings Pages #42146

Merged
21 changes: 8 additions & 13 deletions src/pages/workspace/categories/CategorySettingsPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@ import type {OnyxEntry} from 'react-native-onyx';
import ConfirmModal from '@components/ConfirmModal';
import HeaderWithBackButton from '@components/HeaderWithBackButton';
import * as Expensicons from '@components/Icon/Expensicons';
import MenuItem from '@components/MenuItem';
import MenuItemWithTopDescription from '@components/MenuItemWithTopDescription';
import OfflineWithFeedback from '@components/OfflineWithFeedback';
import ScreenWrapper from '@components/ScreenWrapper';
import Switch from '@components/Switch';
import Text from '@components/Text';
import useLocalize from '@hooks/useLocalize';
import useThemeStyles from '@hooks/useThemeStyles';
import useWindowDimensions from '@hooks/useWindowDimensions';
import * as ErrorUtils from '@libs/ErrorUtils';
import Navigation from '@libs/Navigation/Navigation';
import type {SettingsNavigatorParamList} from '@navigation/types';
Expand All @@ -37,7 +37,6 @@ type CategorySettingsPageProps = CategorySettingsPageOnyxProps & StackScreenProp
function CategorySettingsPage({route, policyCategories, navigation}: CategorySettingsPageProps) {
const styles = useThemeStyles();
const {translate} = useLocalize();
const {windowWidth} = useWindowDimensions();
const [deleteCategoryConfirmModalVisible, setDeleteCategoryConfirmModalVisible] = useState(false);
const backTo = route.params?.backTo;
const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${route.params.policyID}`);
Expand Down Expand Up @@ -75,14 +74,6 @@ function CategorySettingsPage({route, policyCategories, navigation}: CategorySet
};

const isThereAnyAccountingConnection = Object.keys(policy?.connections ?? {}).length !== 0;
const threeDotsMenuItems = [];
if (!isThereAnyAccountingConnection) {
threeDotsMenuItems.push({
icon: Expensicons.Trashcan,
text: translate('workspace.categories.deleteCategory'),
onSelected: () => setDeleteCategoryConfirmModalVisible(true),
});
}

return (
<AccessOrNotFoundWrapper
Expand All @@ -96,10 +87,7 @@ function CategorySettingsPage({route, policyCategories, navigation}: CategorySet
testID={CategorySettingsPage.displayName}
>
<HeaderWithBackButton
shouldShowThreeDotsButton={threeDotsMenuItems.length > 0}
title={route.params.categoryName}
threeDotsAnchorPosition={styles.threeDotsPopoverOffsetNoCloseButton(windowWidth)}
threeDotsMenuItems={threeDotsMenuItems}
onBackButtonPress={() => (backTo ? Navigation.goBack(ROUTES.SETTINGS_CATEGORIES_ROOT.getRoute(route.params.policyID, backTo)) : Navigation.goBack())}
/>
<ConfirmModal
Expand Down Expand Up @@ -138,6 +126,13 @@ function CategorySettingsPage({route, policyCategories, navigation}: CategorySet
shouldShowRightIcon
/>
</OfflineWithFeedback>
{!isThereAnyAccountingConnection && (
<MenuItem
icon={Expensicons.Trashcan}
title={translate('common.delete')}
onPress={() => setDeleteCategoryConfirmModalVisible(true)}
/>
)}
</View>
</ScreenWrapper>
</AccessOrNotFoundWrapper>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import type {OnyxEntry} from 'react-native-onyx';
import ConfirmModal from '@components/ConfirmModal';
import HeaderWithBackButton from '@components/HeaderWithBackButton';
import * as Expensicons from '@components/Icon/Expensicons';
import MenuItem from '@components/MenuItem';
import MenuItemWithTopDescription from '@components/MenuItemWithTopDescription';
import OfflineWithFeedback from '@components/OfflineWithFeedback';
import ScreenWrapper from '@components/ScreenWrapper';
Expand All @@ -14,7 +15,6 @@ import Switch from '@components/Switch';
import Text from '@components/Text';
import useLocalize from '@hooks/useLocalize';
import useThemeStyles from '@hooks/useThemeStyles';
import useWindowDimensions from '@hooks/useWindowDimensions';
import * as CurrencyUtils from '@libs/CurrencyUtils';
import * as ErrorUtils from '@libs/ErrorUtils';
import Navigation from '@libs/Navigation/Navigation';
Expand All @@ -39,7 +39,6 @@ type PolicyDistanceRateDetailsPageProps = PolicyDistanceRateDetailsPageOnyxProps
function PolicyDistanceRateDetailsPage({policy, route}: PolicyDistanceRateDetailsPageProps) {
const styles = useThemeStyles();
const {translate} = useLocalize();
const {windowWidth} = useWindowDimensions();
const [isWarningModalVisible, setIsWarningModalVisible] = useState(false);
const [isDeleteModalVisible, setIsDeleteModalVisible] = useState(false);
const policyID = route.params.policyID;
Expand Down Expand Up @@ -91,20 +90,6 @@ function PolicyDistanceRateDetailsPage({policy, route}: PolicyDistanceRateDetail
const taxClaimableValueToDisplay = taxClaimablePercentage && rate.rate ? CurrencyUtils.convertAmountToDisplayString(taxClaimablePercentage * rate.rate, currency) : '';
const unitToDisplay = translate(`common.${customUnit?.attributes?.unit ?? CONST.CUSTOM_UNITS.DISTANCE_UNIT_MILES}`);

const threeDotsMenuItems = [
{
icon: Expensicons.Trashcan,
text: translate('workspace.distanceRates.deleteDistanceRate'),
onSelected: () => {
if (canDisableOrDeleteRate) {
setIsDeleteModalVisible(true);
return;
}
setIsWarningModalVisible(true);
},
},
];

const clearErrorFields = (fieldName: keyof Rate) => {
DistanceRate.clearPolicyDistanceRateErrorFields(policyID, customUnit.customUnitID, rateID, {...errorFields, [fieldName]: null});
};
Expand All @@ -120,12 +105,7 @@ function PolicyDistanceRateDetailsPage({policy, route}: PolicyDistanceRateDetail
includeSafeAreaPaddingBottom={false}
style={[styles.defaultModalContainer]}
>
<HeaderWithBackButton
title={`${rateValueToDisplay} / ${translate(`common.${customUnit?.attributes?.unit ?? CONST.CUSTOM_UNITS.DISTANCE_UNIT_MILES}`)}`}
shouldShowThreeDotsButton
threeDotsMenuItems={threeDotsMenuItems}
threeDotsAnchorPosition={styles.threeDotsPopoverOffset(windowWidth)}
/>
<HeaderWithBackButton title={`${rateValueToDisplay} / ${translate(`common.${customUnit?.attributes?.unit ?? CONST.CUSTOM_UNITS.DISTANCE_UNIT_MILES}`)}`} />
<ScrollView contentContainerStyle={styles.flexGrow1}>
<OfflineWithFeedback
errors={ErrorUtils.getLatestErrorField(rate ?? {}, 'enabled')}
Expand Down Expand Up @@ -189,6 +169,17 @@ function PolicyDistanceRateDetailsPage({policy, route}: PolicyDistanceRateDetail
/>
</OfflineWithFeedback>
)}
<MenuItem
icon={Expensicons.Trashcan}
title={translate('common.delete')}
onPress={() => {
if (canDisableOrDeleteRate) {
setIsDeleteModalVisible(true);
return;
}
setIsWarningModalVisible(true);
}}
/>
<ConfirmModal
onConfirm={() => setIsWarningModalVisible(false)}
isVisible={isWarningModalVisible}
Expand Down
26 changes: 11 additions & 15 deletions src/pages/workspace/tags/TagSettingsPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@ import {useOnyx, withOnyx} from 'react-native-onyx';
import type {OnyxEntry} from 'react-native-onyx';
import ConfirmModal from '@components/ConfirmModal';
import HeaderWithBackButton from '@components/HeaderWithBackButton';
import {Trashcan} from '@components/Icon/Expensicons';
import * as Expensicons from '@components/Icon/Expensicons';
import MenuItem from '@components/MenuItem';
import MenuItemWithTopDescription from '@components/MenuItemWithTopDescription';
import OfflineWithFeedback from '@components/OfflineWithFeedback';
import ScreenWrapper from '@components/ScreenWrapper';
import Switch from '@components/Switch';
import Text from '@components/Text';
import useLocalize from '@hooks/useLocalize';
import useThemeStyles from '@hooks/useThemeStyles';
import useWindowDimensions from '@hooks/useWindowDimensions';
import * as ErrorUtils from '@libs/ErrorUtils';
import Navigation from '@libs/Navigation/Navigation';
import * as PolicyUtils from '@libs/PolicyUtils';
Expand Down Expand Up @@ -41,8 +41,6 @@ function TagSettingsPage({route, policyTags, navigation}: TagSettingsPageProps)
const policyTag = useMemo(() => PolicyUtils.getTagList(policyTags, route.params.orderWeight), [policyTags, route.params.orderWeight]);
const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${route.params.policyID}`);

const {windowWidth} = useWindowDimensions();

const [isDeleteTagModalOpen, setIsDeleteTagModalOpen] = React.useState(false);

const currentPolicyTag =
Expand Down Expand Up @@ -75,14 +73,8 @@ function TagSettingsPage({route, policyTags, navigation}: TagSettingsPageProps)

const isThereAnyAccountingConnection = Object.keys(policy?.connections ?? {}).length !== 0;
const isMultiLevelTags = PolicyUtils.isMultiLevelTags(policyTags);
const threeDotsMenuItems = [];
if (!isThereAnyAccountingConnection && !isMultiLevelTags) {
threeDotsMenuItems.push({
icon: Trashcan,
text: translate('workspace.tags.deleteTag'),
onSelected: () => setIsDeleteTagModalOpen(true),
});
}

const shouldShowDeleteMenuItem = !isThereAnyAccountingConnection && !isMultiLevelTags;

return (
<AccessOrNotFoundWrapper
Expand All @@ -97,10 +89,7 @@ function TagSettingsPage({route, policyTags, navigation}: TagSettingsPageProps)
>
<HeaderWithBackButton
title={PolicyUtils.getCleanedTagName(route.params.tagName)}
shouldShowThreeDotsButton={threeDotsMenuItems.length > 0}
shouldSetModalVisibility={false}
threeDotsAnchorPosition={styles.threeDotsPopoverOffset(windowWidth)}
threeDotsMenuItems={threeDotsMenuItems}
/>
<ConfirmModal
title={translate('workspace.tags.deleteTag')}
Expand Down Expand Up @@ -139,6 +128,13 @@ function TagSettingsPage({route, policyTags, navigation}: TagSettingsPageProps)
shouldShowRightIcon
/>
</OfflineWithFeedback>
{shouldShowDeleteMenuItem && (
<MenuItem
icon={Expensicons.Trashcan}
title={translate('common.delete')}
onPress={() => setIsDeleteTagModalOpen(true)}
/>
)}
</View>
</ScreenWrapper>
</AccessOrNotFoundWrapper>
Expand Down
36 changes: 12 additions & 24 deletions src/pages/workspace/taxes/WorkspaceEditTaxPage.tsx
Original file line number Diff line number Diff line change
@@ -1,18 +1,17 @@
import type {StackScreenProps} from '@react-navigation/stack';
import React, {useMemo, useState} from 'react';
import React, {useState} from 'react';
import {View} from 'react-native';
import ConfirmModal from '@components/ConfirmModal';
import HeaderWithBackButton from '@components/HeaderWithBackButton';
import type {ThreeDotsMenuItem} from '@components/HeaderWithBackButton/types';
import * as Expensicons from '@components/Icon/Expensicons';
import MenuItem from '@components/MenuItem';
import MenuItemWithTopDescription from '@components/MenuItemWithTopDescription';
import OfflineWithFeedback from '@components/OfflineWithFeedback';
import ScreenWrapper from '@components/ScreenWrapper';
import Switch from '@components/Switch';
import Text from '@components/Text';
import useLocalize from '@hooks/useLocalize';
import useThemeStyles from '@hooks/useThemeStyles';
import useWindowDimensions from '@hooks/useWindowDimensions';
import {clearTaxRateFieldError, deletePolicyTaxes, setPolicyTaxesEnabled} from '@libs/actions/TaxRate';
import * as ErrorUtils from '@libs/ErrorUtils';
import Navigation from '@libs/Navigation/Navigation';
Expand All @@ -37,11 +36,12 @@ function WorkspaceEditTaxPage({
const styles = useThemeStyles();
const {translate} = useLocalize();
const currentTaxRate = PolicyUtils.getTaxByID(policy, taxID);
const {windowWidth} = useWindowDimensions();
const [isDeleteModalVisible, setIsDeleteModalVisible] = useState(false);
const canEdit = policy && PolicyUtils.canEditTaxRate(policy, taxID);
const hasAccountingConnections = PolicyUtils.hasAccountingConnections(policy);

const shouldShowDeleteMenuItem = canEdit && !hasAccountingConnections;

const toggleTaxRate = () => {
if (!currentTaxRate) {
return;
Expand All @@ -58,20 +58,6 @@ function WorkspaceEditTaxPage({
Navigation.goBack();
};

const threeDotsMenuItems: ThreeDotsMenuItem[] = useMemo(
() =>
canEdit && !hasAccountingConnections
? [
{
icon: Expensicons.Trashcan,
text: translate('common.delete'),
onSelected: () => setIsDeleteModalVisible(true),
},
]
: [],
[translate, canEdit, hasAccountingConnections],
);

if (!currentTaxRate) {
return <NotFoundPage />;
}
Expand All @@ -87,12 +73,7 @@ function WorkspaceEditTaxPage({
style={styles.mb5}
>
<View style={[styles.h100, styles.flex1]}>
<HeaderWithBackButton
title={currentTaxRate?.name}
threeDotsMenuItems={threeDotsMenuItems}
shouldShowThreeDotsButton={threeDotsMenuItems.length > 0}
threeDotsAnchorPosition={styles.threeDotsPopoverOffsetNoCloseButton(windowWidth)}
/>
<HeaderWithBackButton title={currentTaxRate?.name} />
<OfflineWithFeedback
errors={ErrorUtils.getLatestErrorField(currentTaxRate, 'isDisabled')}
pendingAction={currentTaxRate?.pendingFields?.isDisabled}
Expand Down Expand Up @@ -141,6 +122,13 @@ function WorkspaceEditTaxPage({
onPress={() => Navigation.navigate(ROUTES.WORKSPACE_TAX_VALUE.getRoute(`${policyID}`, taxID))}
/>
</OfflineWithFeedback>
{shouldShowDeleteMenuItem && (
<MenuItem
icon={Expensicons.Trashcan}
title={translate('common.delete')}
onPress={() => setIsDeleteModalVisible(true)}
/>
)}
</View>
<ConfirmModal
title={translate('workspace.taxes.actions.delete')}
Expand Down
Loading