diff --git a/frontend/src/views/Settings/OrgSettingsPage/components/OrgMembersSection/AddOrgMemberModal.tsx b/frontend/src/views/Settings/OrgSettingsPage/components/OrgMembersSection/AddOrgMemberModal.tsx deleted file mode 100644 index 4966b19bf..000000000 --- a/frontend/src/views/Settings/OrgSettingsPage/components/OrgMembersSection/AddOrgMemberModal.tsx +++ /dev/null @@ -1,174 +0,0 @@ -import { useEffect, useState } from "react"; -import { Controller, useForm } from "react-hook-form"; -import { faCheck, faCopy } from "@fortawesome/free-solid-svg-icons"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { yupResolver } from "@hookform/resolvers/yup"; -import * as yup from "yup"; - -import { useNotificationContext } from "@app/components/context/Notifications/NotificationProvider"; -import { - Button, - FormControl, - IconButton, - Input, - Modal, - ModalContent -} from "@app/components/v2"; -import { useOrganization } from "@app/context"; -import { useToggle } from "@app/hooks"; -import { - useAddUserToOrg -} from "@app/hooks/api"; -import { useFetchServerStatus } from "@app/hooks/api/serverDetails"; -import { UsePopUpState } from "@app/hooks/usePopUp"; - -const addMemberFormSchema = yup.object({ - email: yup.string().email().required().label("Email").trim() -}); - -type TAddMemberForm = yup.InferType; // TODO: change to FormData - -type Props = { - popUp: UsePopUpState<["addMember"]>; - handlePopUpClose: (popUpName: keyof UsePopUpState<["addMember"]>) => void; - handlePopUpToggle: (popUpName: keyof UsePopUpState<["addMember"]>, state?: boolean) => void; -}; - -// TODO: test no-SMTP setup case - -export const AddOrgMemberModal = ({ - popUp, - handlePopUpToggle, - handlePopUpClose -}: Props) => { - const { currentOrg } = useOrganization(); - const { data: serverDetails } = useFetchServerStatus(); - const { createNotification } = useNotificationContext(); - - const [isInviteLinkCopied, setInviteLinkCopied] = useToggle(false); - const [completeInviteLink, setCompleteInviteLink] = useState(""); - const { - control, - handleSubmit, - reset - } = useForm({ resolver: yupResolver(addMemberFormSchema) }); - - const { mutateAsync, isLoading } = useAddUserToOrg(); - - useEffect(() => { - let timer: NodeJS.Timeout; - if (isInviteLinkCopied) { - timer = setTimeout(() => setInviteLinkCopied.off(), 2000); - } - - return () => clearTimeout(timer); - }, [isInviteLinkCopied]); - - const copyTokenToClipboard = () => { - navigator.clipboard.writeText(completeInviteLink as string); - setInviteLinkCopied.on(); - }; - - const onFormSubmit = async ({ email }: TAddMemberForm) => { - try { - if (!currentOrg?._id) return; - - const { data } = await mutateAsync({ - organizationId: currentOrg?._id, - inviteeEmail: email - }); - - setCompleteInviteLink(data?.completeInviteLink); - - if (!data.completeInviteLink) { - createNotification({ - text: "Successfully sent an invite to the user.", - type: "success" - }); - } - - if (serverDetails?.emailConfigured){ - handlePopUpClose("addMember"); - } - - reset(); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to send an invite to the user", - type: "error" - }); - } - } - - return ( - { - handlePopUpToggle("addMember", isOpen); - setCompleteInviteLink(undefined); - }} - > - - {!completeInviteLink &&
- An invite is specific to an email address and expires after 1 day. -
- For security reasons, you will need to separately add members to projects. -
} - {completeInviteLink && "This Infisical instance does not have a email provider setup. Please share this invite link with the invitee manually"} - - } - > - {!completeInviteLink && ( -
- ( - - - - )} - /> -
- - -
- - )} - {completeInviteLink && ( -
-

{completeInviteLink}

- - - click to copy - -
- )} -
-
- ); -} \ No newline at end of file diff --git a/frontend/src/views/Settings/OrgSettingsPage/components/OrgMembersSection/index.tsx b/frontend/src/views/Settings/OrgSettingsPage/components/OrgMembersSection/index.tsx deleted file mode 100644 index e69de29bb..000000000