diff --git a/src/common/components/inviteUsers/campaignSettings.tsx b/src/common/components/inviteUsers/campaignSettings.tsx index 153233cfe..5b250052f 100644 --- a/src/common/components/inviteUsers/campaignSettings.tsx +++ b/src/common/components/inviteUsers/campaignSettings.tsx @@ -11,7 +11,7 @@ import { useToast, } from '@appquality/unguess-design-system'; import { FormikHelpers } from 'formik'; -import { useState } from 'react'; +import { useCallback, useState } from 'react'; import { Trans, useTranslation } from 'react-i18next'; import { useAppSelector } from 'src/app/hooks'; import { appTheme } from 'src/app/theme'; @@ -52,6 +52,15 @@ export const CampaignSettings = ({ dataQa }: { dataQa?: string }) => { const [addNewMember] = usePostCampaignsByCidUsersMutation(); const [removeUser] = useDeleteCampaignsByCidUsersMutation(); + const [appendNode, setAppendNode] = useState(null); + + const setModalNode = useCallback( + (node: HTMLDivElement | null) => { + setAppendNode(node); + }, + [isModalOpen] + ); + const { isLoading: isLoadingCampaign, isFetching: isFetchingCampaign, @@ -277,7 +286,7 @@ export const CampaignSettings = ({ dataQa }: { dataQa?: string }) => { {usersCount > 0 && ` (${usersCount})`} {isModalOpen && ( - setIsModalOpen(false)}> + setIsModalOpen(false)}> {t('__PERMISSION_SETTINGS_HEADER_TITLE')}{' '} @@ -342,6 +351,7 @@ export const CampaignSettings = ({ dataQa }: { dataQa?: string }) => { {campaignUsers?.items.map((user) => ( onResendInvite(user.email)} diff --git a/src/common/components/inviteUsers/modals/RemoveConfirmModal.tsx b/src/common/components/inviteUsers/modals/RemoveConfirmModal.tsx index c632a1c84..2d5b7e7d4 100644 --- a/src/common/components/inviteUsers/modals/RemoveConfirmModal.tsx +++ b/src/common/components/inviteUsers/modals/RemoveConfirmModal.tsx @@ -26,9 +26,11 @@ const DangerHeader = styled(Modal.Header)` `; const RemoveConfirmModal = ({ + appendToNode, handleCancel, onClose, }: { + appendToNode?: Element | null; handleCancel: () => void; onClose?: (includeShared: boolean) => void; }) => { @@ -36,7 +38,11 @@ const RemoveConfirmModal = ({ const [includeShared, setIncludeShared] = useState(false); return ( - + {t('__PERMISSION_SETTINGS_REMOVE_CONFIRM_MODAL_HEADER')} diff --git a/src/common/components/inviteUsers/projectSettings.tsx b/src/common/components/inviteUsers/projectSettings.tsx index cf480e742..c085ddc04 100644 --- a/src/common/components/inviteUsers/projectSettings.tsx +++ b/src/common/components/inviteUsers/projectSettings.tsx @@ -11,7 +11,7 @@ import { useToast, } from '@appquality/unguess-design-system'; import { FormikHelpers } from 'formik'; -import { useState } from 'react'; +import { useCallback, useState } from 'react'; import { Trans, useTranslation } from 'react-i18next'; import { useAppSelector } from 'src/app/hooks'; import { appTheme } from 'src/app/theme'; @@ -49,6 +49,15 @@ export const ProjectSettings = () => { const [addNewMember] = usePostProjectsByPidUsersMutation(); const [removeUser] = useDeleteProjectsByPidUsersMutation(); + const [appendNode, setAppendNode] = useState(null); + + const setModalNode = useCallback( + (node: HTMLDivElement | null) => { + setAppendNode(node); + }, + [isModalOpen] + ); + const { isLoading: isLoadingProjectUsers, isFetching: isFetchingProjectUsers, @@ -251,7 +260,7 @@ export const ProjectSettings = () => { {usersCount > 0 && ` (${usersCount})`} {isModalOpen && ( - setIsModalOpen(false)}> + setIsModalOpen(false)}> {t('__PERMISSION_SETTINGS_HEADER_TITLE')}{' '} @@ -312,6 +321,7 @@ export const ProjectSettings = () => { {projectUsers?.items.map((user) => ( onResendInvite(user.email)} @@ -363,7 +373,11 @@ export const ProjectSettings = () => { {workspaceUsers?.items.map((user) => ( - + ))} diff --git a/src/common/components/inviteUsers/userItem.tsx b/src/common/components/inviteUsers/userItem.tsx index cd0232849..572962e8d 100644 --- a/src/common/components/inviteUsers/userItem.tsx +++ b/src/common/components/inviteUsers/userItem.tsx @@ -31,11 +31,13 @@ const UserListItem = styled.div` `; export const UserItem = ({ + appendNode, user, onResendInvite, onRemoveUser, showRemoveConfirm, }: { + appendNode?: Element | null; user: GetWorkspacesByWidUsersApiResponse['items'][number]; onResendInvite?: () => void; onRemoveUser?: (includeShared?: boolean) => void; @@ -152,6 +154,7 @@ export const UserItem = ({ {showRemoveConfirmModal && onRemoveUser && ( onRemoveUser(includeShared)} handleCancel={() => setShowRemoveConfirmModal(false)} /> diff --git a/src/common/components/inviteUsers/workspaceSettings.tsx b/src/common/components/inviteUsers/workspaceSettings.tsx index f93a9a7d9..01ec6c109 100644 --- a/src/common/components/inviteUsers/workspaceSettings.tsx +++ b/src/common/components/inviteUsers/workspaceSettings.tsx @@ -10,7 +10,7 @@ import { useToast, } from '@appquality/unguess-design-system'; import { FormikHelpers } from 'formik'; -import { useState } from 'react'; +import { useCallback, useState } from 'react'; import { Trans, useTranslation } from 'react-i18next'; import { appTheme } from 'src/app/theme'; import { ReactComponent as UsersIcon } from 'src/assets/icons/users-share.svg'; @@ -40,6 +40,15 @@ export const WorkspaceSettings = () => { const [addNewMember] = usePostWorkspacesByWidUsersMutation(); const [removeUser] = useDeleteWorkspacesByWidUsersMutation(); + const [appendNode, setAppendNode] = useState(null); + + const setModalNode = useCallback( + (node: HTMLDivElement | null) => { + setAppendNode(node); + }, + [isModalOpen] + ); + const { isLoading: isLoadingWorkspaceUsers, isFetching: isFetchingWorkspaceUsers, @@ -217,7 +226,7 @@ export const WorkspaceSettings = () => { {usersCount > 0 && ` (${usersCount})`} {isModalOpen && ( - setIsModalOpen(false)}> + setIsModalOpen(false)}> {t('__PERMISSION_SETTINGS_HEADER_TITLE')}{' '} @@ -273,6 +282,7 @@ export const WorkspaceSettings = () => { {workspaceUsers?.items.map((user) => ( onResendInvite(user.email)}