diff --git a/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/AddMemberModal.tsx b/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/AddMemberModal.tsx index 4926cc982..9afedcbc5 100644 --- a/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/AddMemberModal.tsx +++ b/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/AddMemberModal.tsx @@ -7,7 +7,13 @@ import { z } from "zod"; import { createNotification } from "@app/components/notifications"; import { Button, FilterableSelect, FormControl, Modal, ModalContent } from "@app/components/v2"; import { CreatableSelect } from "@app/components/v2/CreatableSelect"; -import { useOrganization, useWorkspace } from "@app/context"; +import { + OrgPermissionActions, + OrgPermissionSubjects, + useOrganization, + useOrgPermission, + useWorkspace +} from "@app/context"; import { useAddUsersToOrg, useGetOrgUsers, @@ -42,6 +48,7 @@ export const AddMemberModal = ({ popUp, handlePopUpToggle }: Props) => { const { t } = useTranslation(); const { currentOrg } = useOrganization(); const { currentWorkspace } = useWorkspace(); + const { permission } = useOrgPermission(); const orgId = currentOrg?.id || ""; const workspaceId = currentWorkspace?.id || ""; @@ -140,6 +147,11 @@ export const AddMemberModal = ({ popUp, handlePopUpToggle }: Props) => { const { append } = useFieldArray({ control, name: "orgMemberships" }); + const canInviteNewMembers = permission.can( + OrgPermissionActions.Create, + OrgPermissionSubjects.Member + ); + return ( { isError={!!errors.orgMemberships?.length} errorText={errors.orgMemberships?.[0]?.message} label="Invite users to project" - helperText="You can invite new users to your organzation by typing out their email address" + helperText={ + canInviteNewMembers + ? "You can invite new users to your organization by typing out their email address" + : undefined + } > - ( - <> -

- {!filteredOrgUsers.length && ( -

All organization members are already assigned to this project.

- )} -

-

- Invite new users to your organization by typing out their email address. -

- - )} - onCreateOption={(inputValue) => - append({ label: inputValue, value: inputValue, isNewInvitee: true }) - } - formatCreateLabel={(inputValue) => `Invite "${inputValue}"`} - isValidNewOption={(input) => - Boolean(input) && - z.string().email().safeParse(input).success && - !orgUsers - ?.flatMap(({ user }) => { - const emails: string[] = []; + {canInviteNewMembers ? ( + ( + <> +

+ {!filteredOrgUsers.length && ( +

All organization members are already assigned to this project.

+ )} +

+

+ Invite new users to your organization by typing out their email address. +

+ + )} + onCreateOption={(inputValue) => + append({ label: inputValue, value: inputValue, isNewInvitee: true }) + } + formatCreateLabel={(inputValue) => `Invite "${inputValue}"`} + isValidNewOption={(input) => + Boolean(input) && + z.string().email().safeParse(input).success && + !orgUsers + ?.flatMap(({ user }) => { + const emails: string[] = []; - if (user.email) { - emails.push(user.email); - } + if (user.email) { + emails.push(user.email); + } - if (user.username) { - emails.push(user.username); - } + if (user.username) { + emails.push(user.username); + } - return emails; - }) - .includes(input) - } - className="w-full" - placeholder="Add one or more users..." - isMulti - name="members" - options={filteredOrgUsers} - value={field.value} - onChange={field.onChange} - /> + return emails; + }) + .includes(input) + } + className="w-full" + placeholder="Add one or more users..." + isMulti + name="members" + options={filteredOrgUsers} + value={field.value} + onChange={field.onChange} + /> + ) : ( + + )} )} />