From e7244936217c189237783a3382da548c8d14cca6 Mon Sep 17 00:00:00 2001 From: tienifr Date: Thu, 2 May 2024 18:46:46 +0700 Subject: [PATCH 1/4] fix: admin can access member details page after member leaves --- .../members/WorkspaceMemberDetailsPage.tsx | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/pages/workspace/members/WorkspaceMemberDetailsPage.tsx b/src/pages/workspace/members/WorkspaceMemberDetailsPage.tsx index 7b2aa78545f2..bcabf5645f0f 100644 --- a/src/pages/workspace/members/WorkspaceMemberDetailsPage.tsx +++ b/src/pages/workspace/members/WorkspaceMemberDetailsPage.tsx @@ -4,6 +4,7 @@ import {View} from 'react-native'; import type {OnyxEntry} from 'react-native-onyx'; import type {ValueOf} from 'type-fest'; import Avatar from '@components/Avatar'; +import FullPageNotFoundView from '@components/BlockingViews/FullPageNotFoundView'; import Button from '@components/Button'; import ConfirmModal from '@components/ConfirmModal'; import HeaderWithBackButton from '@components/HeaderWithBackButton'; @@ -16,6 +17,7 @@ import Text from '@components/Text'; import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails'; import useLocalize from '@hooks/useLocalize'; import useNetwork from '@hooks/useNetwork'; +import usePrevious from '@hooks/usePrevious'; import useStyleUtils from '@hooks/useStyleUtils'; import useThemeStyles from '@hooks/useThemeStyles'; import * as UserUtils from '@libs/UserUtils'; @@ -56,6 +58,7 @@ function WorkspaceMemberDetailsPage({personalDetails, policy, route}: WorkspaceM const memberLogin = personalDetails?.[accountID]?.login ?? ''; const member = policy?.employeeList?.[memberLogin]; + const prevMember = usePrevious(member); const details = personalDetails?.[accountID] ?? ({} as PersonalDetails); const avatar = details.avatar ?? UserUtils.getDefaultAvatar(); const fallbackIcon = details.fallbackIcon ?? ''; @@ -95,6 +98,13 @@ function WorkspaceMemberDetailsPage({personalDetails, policy, route}: WorkspaceM } }, [accountID, policy?.errorFields?.changeOwner, policy?.isChangeOwnerSuccessful, policyID]); + useEffect(() => { + if (!prevMember || prevMember?.pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE || member?.pendingAction !== CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE) { + return; + } + Navigation.goBack(); + }, [member, prevMember]); + const askForConfirmationToRemove = () => { setIsRemoveMemberConfirmModalVisible(true); }; @@ -102,7 +112,6 @@ function WorkspaceMemberDetailsPage({personalDetails, policy, route}: WorkspaceM const removeUser = useCallback(() => { Policy.removeMembers([accountID], policyID); setIsRemoveMemberConfirmModalVisible(false); - Navigation.goBack(); }, [accountID, policyID]); const navigateToProfile = useCallback(() => { @@ -127,6 +136,14 @@ function WorkspaceMemberDetailsPage({personalDetails, policy, route}: WorkspaceM Navigation.navigate(ROUTES.WORKSPACE_OWNER_CHANGE_CHECK.getRoute(policyID, accountID, 'amountOwed' as ValueOf)); }, [accountID, policyID]); + // eslint-disable-next-line rulesdir/no-negated-variables + const shouldShowNotFoundPage = + !member || (member.pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE && prevMember?.pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE); + + if (shouldShowNotFoundPage) { + return ; + } + return ( Date: Sat, 4 May 2024 23:09:41 +0700 Subject: [PATCH 2/4] not found page with wrapper --- src/pages/workspace/members/WorkspaceMemberDetailsPage.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/workspace/members/WorkspaceMemberDetailsPage.tsx b/src/pages/workspace/members/WorkspaceMemberDetailsPage.tsx index bcabf5645f0f..4f1cb550cf05 100644 --- a/src/pages/workspace/members/WorkspaceMemberDetailsPage.tsx +++ b/src/pages/workspace/members/WorkspaceMemberDetailsPage.tsx @@ -4,7 +4,6 @@ import {View} from 'react-native'; import type {OnyxEntry} from 'react-native-onyx'; import type {ValueOf} from 'type-fest'; import Avatar from '@components/Avatar'; -import FullPageNotFoundView from '@components/BlockingViews/FullPageNotFoundView'; import Button from '@components/Button'; import ConfirmModal from '@components/ConfirmModal'; import HeaderWithBackButton from '@components/HeaderWithBackButton'; @@ -23,6 +22,7 @@ import useThemeStyles from '@hooks/useThemeStyles'; import * as UserUtils from '@libs/UserUtils'; import Navigation from '@navigation/Navigation'; import type {SettingsNavigatorParamList} from '@navigation/types'; +import NotFoundPage from '@pages/ErrorPage/NotFoundPage'; import AccessOrNotFoundWrapper from '@pages/workspace/AccessOrNotFoundWrapper'; import type {WithPolicyAndFullscreenLoadingProps} from '@pages/workspace/withPolicyAndFullscreenLoading'; import withPolicyAndFullscreenLoading from '@pages/workspace/withPolicyAndFullscreenLoading'; @@ -141,7 +141,7 @@ function WorkspaceMemberDetailsPage({personalDetails, policy, route}: WorkspaceM !member || (member.pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE && prevMember?.pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE); if (shouldShowNotFoundPage) { - return ; + return ; } return ( From 83b9cc701b4fd5bf0164120850e38a7cd8de50bf Mon Sep 17 00:00:00 2001 From: tienifr Date: Wed, 15 May 2024 16:22:02 +0700 Subject: [PATCH 3/4] do not use negated variable name --- src/pages/workspace/members/WorkspaceMemberDetailsPage.tsx | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/pages/workspace/members/WorkspaceMemberDetailsPage.tsx b/src/pages/workspace/members/WorkspaceMemberDetailsPage.tsx index 4f1cb550cf05..fe56b1191ff3 100644 --- a/src/pages/workspace/members/WorkspaceMemberDetailsPage.tsx +++ b/src/pages/workspace/members/WorkspaceMemberDetailsPage.tsx @@ -136,11 +136,9 @@ function WorkspaceMemberDetailsPage({personalDetails, policy, route}: WorkspaceM Navigation.navigate(ROUTES.WORKSPACE_OWNER_CHANGE_CHECK.getRoute(policyID, accountID, 'amountOwed' as ValueOf)); }, [accountID, policyID]); - // eslint-disable-next-line rulesdir/no-negated-variables - const shouldShowNotFoundPage = - !member || (member.pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE && prevMember?.pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE); + const shouldShowPage = member && (member.pendingAction !== CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE || prevMember?.pendingAction !== CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE); - if (shouldShowNotFoundPage) { + if (!shouldShowPage) { return ; } From f913df57a51f5f20c1aee6feb660b047281f01e6 Mon Sep 17 00:00:00 2001 From: tienifr Date: Thu, 16 May 2024 10:13:50 +0700 Subject: [PATCH 4/4] Revert "do not use negated variable name" This reverts commit 83b9cc701b4fd5bf0164120850e38a7cd8de50bf. --- src/pages/workspace/members/WorkspaceMemberDetailsPage.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/pages/workspace/members/WorkspaceMemberDetailsPage.tsx b/src/pages/workspace/members/WorkspaceMemberDetailsPage.tsx index fe56b1191ff3..4f1cb550cf05 100644 --- a/src/pages/workspace/members/WorkspaceMemberDetailsPage.tsx +++ b/src/pages/workspace/members/WorkspaceMemberDetailsPage.tsx @@ -136,9 +136,11 @@ function WorkspaceMemberDetailsPage({personalDetails, policy, route}: WorkspaceM Navigation.navigate(ROUTES.WORKSPACE_OWNER_CHANGE_CHECK.getRoute(policyID, accountID, 'amountOwed' as ValueOf)); }, [accountID, policyID]); - const shouldShowPage = member && (member.pendingAction !== CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE || prevMember?.pendingAction !== CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE); + // eslint-disable-next-line rulesdir/no-negated-variables + const shouldShowNotFoundPage = + !member || (member.pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE && prevMember?.pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE); - if (!shouldShowPage) { + if (shouldShowNotFoundPage) { return ; }