From d8bbfacae07b6af5a48fdec62be9763a8fff9c39 Mon Sep 17 00:00:00 2001 From: Daniel Hougaard Date: Fri, 23 Aug 2024 02:19:54 +0400 Subject: [PATCH] UI improvements --- .../OrgMembersSection/AddOrgMemberModal.tsx | 129 +++++++++++------- 1 file changed, 78 insertions(+), 51 deletions(-) diff --git a/frontend/src/views/Org/MembersPage/components/OrgMembersTab/components/OrgMembersSection/AddOrgMemberModal.tsx b/frontend/src/views/Org/MembersPage/components/OrgMembersTab/components/OrgMembersSection/AddOrgMemberModal.tsx index 67a03b18a..10b1e0987 100644 --- a/frontend/src/views/Org/MembersPage/components/OrgMembersTab/components/OrgMembersSection/AddOrgMemberModal.tsx +++ b/frontend/src/views/Org/MembersPage/components/OrgMembersTab/components/OrgMembersSection/AddOrgMemberModal.tsx @@ -1,6 +1,9 @@ -import { useMemo } from "react"; import { Controller, useForm } from "react-hook-form"; -import { faCheckCircle, faChevronDown } from "@fortawesome/free-solid-svg-icons"; +import { + faCheckCircle, + faChevronDown, + faExclamationCircle +} from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { zodResolver } from "@hookform/resolvers/zod"; import { z } from "zod"; @@ -17,7 +20,8 @@ import { ModalContent, Select, SelectItem, - TextArea + TextArea, + Tooltip } from "@app/components/v2"; import { useOrganization } from "@app/context"; import { @@ -66,6 +70,7 @@ export const AddOrgMemberModal = ({ const { data: organizationRoles } = useGetOrgRoles(currentOrg?.id ?? ""); const { data: serverDetails } = useFetchServerStatus(); const { mutateAsync: addUsersMutateAsync } = useAddUsersToOrg(); + const { data: projects } = useGetUserWorkspaces(true); const { control, @@ -75,6 +80,8 @@ export const AddOrgMemberModal = ({ formState: { isSubmitting } } = useForm({ resolver: zodResolver(addMemberFormSchema) }); + const selectedProjectIds = watch("projectIds", []); + const onAddMembers = async ({ emails, organizationRoleSlug, @@ -83,6 +90,21 @@ export const AddOrgMemberModal = ({ }: TAddMemberForm) => { if (!currentOrg?.id) return; + const selectedProjects = projects?.filter((project) => projectIds.includes(String(project.id))); + + if (selectedProjects?.length) { + // eslint-disable-next-line no-restricted-syntax + for (const project of selectedProjects) { + if (project.version !== ProjectVersion.V3) { + createNotification({ + type: "error", + text: `Cannot add users to project "${project.name}" because it's incompatible. Please upgrade the project.` + }); + return; + } + } + } + try { const parsedEmails = emails .replace(/\s/g, "") @@ -137,14 +159,6 @@ export const AddOrgMemberModal = ({ reset(); }; - const projectIds = watch("projectIds", []); - const { data: projects } = useGetUserWorkspaces(true); - - const filteredProjects = useMemo( - () => projects?.filter((project) => project.version === ProjectVersion.V3), - [projects] - ); - return ( ( - +