From 5b08b9f11fa5e3784a1054eefdcd8de976c45f19 Mon Sep 17 00:00:00 2001 From: Eunjae Lee Date: Fri, 28 Mar 2025 18:01:06 +0100 Subject: [PATCH] fix: add isAdminOrOwner and useIsOrgAdminOrOwner (#20429) * fix: add isAdminOrOwner and useIsOrgAdminOrOwner * make useIsOrgAdminOrOwner to accept session * revert change * remove useIsOrgAdminOrOwner and rename isAdminOrOwner to checkAdminOrOwner * fix type * fix type * fix import --- .../atoms/services/event-types-atom.service.ts | 7 +++---- .../SettingsLayoutAppDirClient.tsx | 9 ++++----- .../modules/availability/availability-view.tsx | 8 +++----- packages/features/auth/lib/checkAdminOrOwner.ts | 5 +++++ .../features/ee/organizations/pages/members.tsx | 6 ++---- .../organizations/pages/settings/appearance.tsx | 10 ++++------ .../ee/organizations/pages/settings/general.tsx | 16 +++++----------- .../pages/settings/other-team-members-view.tsx | 6 ++---- .../ee/organizations/pages/settings/privacy.tsx | 6 ++---- .../ee/organizations/pages/settings/profile.tsx | 6 ++---- .../ee/platform/pages/settings/members.tsx | 6 ++---- packages/features/ee/sso/page/orgs-sso-view.tsx | 5 ++--- .../ee/teams/components/AddNewTeamMembers.tsx | 7 +++---- .../teams/components/InternalNotePresetsView.tsx | 5 ++--- .../teams/components/MemberInvitationModal.tsx | 5 ++--- .../features/ee/teams/components/MemberList.tsx | 5 ++--- .../teams/components/RoundRobinResetInterval.tsx | 8 ++++---- .../ee/teams/components/TeamListItem.tsx | 3 ++- .../ee/teams/pages/team-appearance-view.tsx | 5 ++--- .../ee/teams/pages/team-members-view.tsx | 7 +++---- .../ee/teams/pages/team-profile-view.tsx | 5 ++--- .../ee/teams/pages/team-settings-view.tsx | 9 ++++----- .../components/CreateEventTypeDialog.tsx | 9 ++++----- .../context/InsightsOrgTeamsProvider.tsx | 6 +++--- .../CreateNewOutOfOfficeEntryButton.tsx | 5 ++--- packages/lib/getConnectedApps.ts | 6 ++---- .../server/routers/viewer/eventTypes/util.ts | 5 +++-- .../viewer/ooo/outOfOfficeEntriesList.handler.ts | 4 ++-- .../viewer/organizations/updateUser.handler.ts | 3 ++- .../routers/viewer/teams/inviteMember/utils.ts | 6 ++---- .../routers/viewer/teams/listMembers.handler.ts | 5 ++--- .../trpc/server/routers/viewer/webhook/util.ts | 14 ++++---------- 32 files changed, 88 insertions(+), 124 deletions(-) create mode 100644 packages/features/auth/lib/checkAdminOrOwner.ts diff --git a/apps/api/v2/src/modules/atoms/services/event-types-atom.service.ts b/apps/api/v2/src/modules/atoms/services/event-types-atom.service.ts index f9bb22a473..15a4756f42 100644 --- a/apps/api/v2/src/modules/atoms/services/event-types-atom.service.ts +++ b/apps/api/v2/src/modules/atoms/services/event-types-atom.service.ts @@ -9,7 +9,8 @@ import { UsersService } from "@/modules/users/services/users.service"; import { UserWithProfile } from "@/modules/users/users.repository"; import { Injectable, NotFoundException, ForbiddenException } from "@nestjs/common"; -import { MembershipRole, getClientSecretFromPayment } from "@calcom/platform-libraries"; +import { checkAdminOrOwner } from "@calcom/features/auth/lib/checkAdminOrOwner"; +import { getClientSecretFromPayment } from "@calcom/platform-libraries"; import type { TeamQuery } from "@calcom/platform-libraries"; import { enrichUserWithDelegationConferencingCredentialsWithoutOrgId } from "@calcom/platform-libraries/app-store"; import { getEnabledAppsFromCredentials, getAppFromSlug } from "@calcom/platform-libraries/app-store"; @@ -259,9 +260,7 @@ export class EventTypesAtomService { name: team.name, logoUrl: team.logoUrl, credentialId: c.id, - isAdmin: - team.members[0].role === MembershipRole.ADMIN || - team.members[0].role === MembershipRole.OWNER, + isAdmin: checkAdminOrOwner(team.members[0].role), }; }) ); diff --git a/apps/web/app/(use-page-wrapper)/settings/(settings-layout)/SettingsLayoutAppDirClient.tsx b/apps/web/app/(use-page-wrapper)/settings/(settings-layout)/SettingsLayoutAppDirClient.tsx index 4a519f2300..32d576124b 100644 --- a/apps/web/app/(use-page-wrapper)/settings/(settings-layout)/SettingsLayoutAppDirClient.tsx +++ b/apps/web/app/(use-page-wrapper)/settings/(settings-layout)/SettingsLayoutAppDirClient.tsx @@ -7,6 +7,7 @@ import { usePathname, useRouter } from "next/navigation"; import type { ComponentProps } from "react"; import React, { useEffect, useState, useMemo } from "react"; +import { checkAdminOrOwner } from "@calcom/features/auth/lib/checkAdminOrOwner"; import { useOrgBranding } from "@calcom/features/ee/organizations/context/provider"; import type { OrganizationBranding } from "@calcom/features/ee/organizations/context/provider"; import Shell from "@calcom/features/shell/Shell"; @@ -16,7 +17,7 @@ import { getUserAvatarUrl } from "@calcom/lib/getAvatarUrl"; import { useCompatSearchParams } from "@calcom/lib/hooks/useCompatSearchParams"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import type { OrganizationRepository } from "@calcom/lib/server/repository/organization"; -import { IdentityProvider, MembershipRole, UserPermissionRole } from "@calcom/prisma/enums"; +import { IdentityProvider, UserPermissionRole } from "@calcom/prisma/enums"; import { trpc } from "@calcom/trpc/react"; import classNames from "@calcom/ui/classNames"; import { Badge } from "@calcom/ui/components/badge"; @@ -182,8 +183,7 @@ const useTabs = ({ isDelegationCredentialEnabled }: { isDelegationCredentialEnab const { data: user } = trpc.viewer.me.get.useQuery({ includePasswordAdded: true }); const orgBranding = useOrgBranding(); const isAdmin = session.data?.user.role === UserPermissionRole.ADMIN; - const isOrgAdminOrOwner = - orgBranding?.role === MembershipRole.ADMIN || orgBranding?.role === MembershipRole.OWNER; + const isOrgAdminOrOwner = checkAdminOrOwner(orgBranding?.role); const processTabsMemod = useMemo(() => { const processedTabs = getTabs(orgBranding).map((tab) => { @@ -380,8 +380,7 @@ const TeamListCollapsible = () => { textClassNames="px-3 text-emphasis font-medium text-sm" disableChevron /> - {(team.role === MembershipRole.OWNER || - team.role === MembershipRole.ADMIN || + {(checkAdminOrOwner(team.role) || // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore this exists wtf? (team.isOrgAdmin && team.isOrgAdmin)) && ( diff --git a/apps/web/modules/availability/availability-view.tsx b/apps/web/modules/availability/availability-view.tsx index 0d9074bf6c..6ba473d22b 100644 --- a/apps/web/modules/availability/availability-view.tsx +++ b/apps/web/modules/availability/availability-view.tsx @@ -5,6 +5,7 @@ import Link from "next/link"; import { useRouter, usePathname } from "next/navigation"; import { useCallback, useState } from "react"; +import { checkAdminOrOwner } from "@calcom/features/auth/lib/checkAdminOrOwner"; import SkeletonLoader from "@calcom/features/availability/components/SkeletonLoader"; import { BulkEditDefaultForEventsModal } from "@calcom/features/eventtypes/components/BulkEditDefaultForEventsModal"; import type { BulkUpdatParams } from "@calcom/features/eventtypes/components/BulkEditDefaultForEventsModal"; @@ -14,7 +15,6 @@ import { useCompatSearchParams } from "@calcom/lib/hooks/useCompatSearchParams"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import { HttpError } from "@calcom/lib/http-error"; import type { OrganizationRepository } from "@calcom/lib/server/repository/organization"; -import { MembershipRole } from "@calcom/prisma/enums"; import { trpc } from "@calcom/trpc/react"; import useMeQuery from "@calcom/trpc/react/hooks/useMeQuery"; import { EmptyScreen } from "@calcom/ui/components/empty-screen"; @@ -204,8 +204,7 @@ export const AvailabilityCTA = () => { ); const { data } = trpc.viewer.organizations.listCurrent.useQuery(); - const isOrgAdminOrOwner = - (data && (data.user.role === MembershipRole.OWNER || data.user.role === MembershipRole.ADMIN)) ?? false; + const isOrgAdminOrOwner = (data && checkAdminOrOwner(data.user.role)) ?? false; const isOrgAndPrivate = data?.isOrganization && data.isPrivate; const canViewTeamAvailability = isOrgAdminOrOwner || !isOrgAndPrivate; @@ -241,8 +240,7 @@ export default function AvailabilityPage({ currentOrg }: PageProps) { const data = currentOrg ?? _data; const isOrg = Boolean(data); - const isOrgAdminOrOwner = - (data && (data.user.role === MembershipRole.OWNER || data.user.role === MembershipRole.ADMIN)) ?? false; + const isOrgAdminOrOwner = (data && checkAdminOrOwner(data.user.role)) ?? false; const isOrgAndPrivate = data?.isOrganization && data.isPrivate; const canViewTeamAvailability = isOrgAdminOrOwner || !isOrgAndPrivate; diff --git a/packages/features/auth/lib/checkAdminOrOwner.ts b/packages/features/auth/lib/checkAdminOrOwner.ts new file mode 100644 index 0000000000..3fa6b2c5ba --- /dev/null +++ b/packages/features/auth/lib/checkAdminOrOwner.ts @@ -0,0 +1,5 @@ +import type { MembershipRole } from "@calcom/prisma/enums"; + +export function checkAdminOrOwner(role: MembershipRole | null | undefined): role is "OWNER" | "ADMIN" { + return role === "OWNER" || role === "ADMIN"; +} diff --git a/packages/features/ee/organizations/pages/members.tsx b/packages/features/ee/organizations/pages/members.tsx index 90d912cfca..bc1889dca2 100644 --- a/packages/features/ee/organizations/pages/members.tsx +++ b/packages/features/ee/organizations/pages/members.tsx @@ -1,18 +1,16 @@ "use client"; +import { checkAdminOrOwner } from "@calcom/features/auth/lib/checkAdminOrOwner"; import LicenseRequired from "@calcom/features/ee/common/components/LicenseRequired"; import { UserListTable } from "@calcom/features/users/components/UserTable/UserListTable"; import { useLocale } from "@calcom/lib/hooks/useLocale"; -import { MembershipRole } from "@calcom/prisma/enums"; import { trpc } from "@calcom/trpc/react"; const MembersView = () => { const { t } = useLocale(); const { data: currentOrg, isPending } = trpc.viewer.organizations.listCurrent.useQuery(); - const isOrgAdminOrOwner = - currentOrg && - (currentOrg.user.role === MembershipRole.OWNER || currentOrg.user.role === MembershipRole.ADMIN); + const isOrgAdminOrOwner = currentOrg && checkAdminOrOwner(currentOrg.user.role); const canLoggedInUserSeeMembers = (currentOrg?.isPrivate && isOrgAdminOrOwner) || isOrgAdminOrOwner || !currentOrg?.isPrivate; diff --git a/packages/features/ee/organizations/pages/settings/appearance.tsx b/packages/features/ee/organizations/pages/settings/appearance.tsx index cf14706e4a..48c02395c2 100644 --- a/packages/features/ee/organizations/pages/settings/appearance.tsx +++ b/packages/features/ee/organizations/pages/settings/appearance.tsx @@ -5,6 +5,7 @@ import { useRouter } from "next/navigation"; import { useState, useEffect } from "react"; import { useForm } from "react-hook-form"; +import { checkAdminOrOwner } from "@calcom/features/auth/lib/checkAdminOrOwner"; import BrandColorsForm from "@calcom/features/ee/components/BrandColorsForm"; import { AppearanceSkeletonLoader } from "@calcom/features/ee/components/CommonSkeletonLoaders"; import SectionBottomActions from "@calcom/features/settings/SectionBottomActions"; @@ -12,12 +13,11 @@ import ThemeLabel from "@calcom/features/settings/ThemeLabel"; import { DEFAULT_LIGHT_BRAND_COLOR, DEFAULT_DARK_BRAND_COLOR } from "@calcom/lib/constants"; import { APP_NAME } from "@calcom/lib/constants"; import { useLocale } from "@calcom/lib/hooks/useLocale"; -import { MembershipRole } from "@calcom/prisma/enums"; import { trpc } from "@calcom/trpc/react"; import type { RouterOutputs } from "@calcom/trpc/react"; +import { Button } from "@calcom/ui/components/button"; import { Form } from "@calcom/ui/components/form"; import { SettingsToggle } from "@calcom/ui/components/form"; -import { Button } from "@calcom/ui/components/button"; import { showToast } from "@calcom/ui/components/toast"; type BrandColorsFormValues = { @@ -198,9 +198,9 @@ const OrgAppearanceView = ({ const OrgAppearanceViewWrapper = () => { const router = useRouter(); - const session = useSession(); - const orgRole = session?.data?.user?.org?.role; const { data: currentOrg, isPending, error } = trpc.viewer.organizations.listCurrent.useQuery(); + const session = useSession(); + const isAdminOrOwner = checkAdminOrOwner(session.data?.user?.org?.role); useEffect( function refactorMeWithoutEffect() { @@ -217,8 +217,6 @@ const OrgAppearanceViewWrapper = () => { if (!currentOrg) return null; - const isAdminOrOwner = orgRole === MembershipRole.OWNER || orgRole === MembershipRole.ADMIN; - return ; }; diff --git a/packages/features/ee/organizations/pages/settings/general.tsx b/packages/features/ee/organizations/pages/settings/general.tsx index 5f7ae53a5e..5ffca1841e 100644 --- a/packages/features/ee/organizations/pages/settings/general.tsx +++ b/packages/features/ee/organizations/pages/settings/general.tsx @@ -5,25 +5,20 @@ import { useRouter } from "next/navigation"; import { useEffect } from "react"; import { Controller, useForm } from "react-hook-form"; +import { checkAdminOrOwner } from "@calcom/features/auth/lib/checkAdminOrOwner"; import { TimezoneSelect } from "@calcom/features/components/timezone-select"; import LicenseRequired from "@calcom/features/ee/common/components/LicenseRequired"; import SectionBottomActions from "@calcom/features/settings/SectionBottomActions"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import { nameOfDay } from "@calcom/lib/weekday"; -import { MembershipRole } from "@calcom/prisma/enums"; import type { RouterOutputs } from "@calcom/trpc/react"; import { trpc } from "@calcom/trpc/react"; +import classNames from "@calcom/ui/classNames"; +import { Button } from "@calcom/ui/components/button"; import { Form } from "@calcom/ui/components/form"; import { Label } from "@calcom/ui/components/form"; import { Select } from "@calcom/ui/components/form"; -import { Button } from "@calcom/ui/components/button"; -import classNames from "@calcom/ui/classNames"; -import { - SkeletonButton, - SkeletonContainer, - SkeletonText, - SkeletonAvatar, -} from "@calcom/ui/components/skeleton"; +import { SkeletonButton, SkeletonContainer, SkeletonText } from "@calcom/ui/components/skeleton"; import { showToast } from "@calcom/ui/components/toast"; import { LockEventTypeSwitch } from "../components/LockEventTypeSwitch"; @@ -54,7 +49,7 @@ const OrgGeneralView = () => { const { t } = useLocale(); const router = useRouter(); const session = useSession(); - const orgRole = session?.data?.user?.org?.role; + const isAdminOrOwner = checkAdminOrOwner(session.data?.user?.org?.role); const { data: currentOrg, @@ -76,7 +71,6 @@ const OrgGeneralView = () => { if (!currentOrg) { return null; } - const isAdminOrOwner = orgRole === MembershipRole.OWNER || orgRole === MembershipRole.ADMIN; return ( diff --git a/packages/features/ee/organizations/pages/settings/other-team-members-view.tsx b/packages/features/ee/organizations/pages/settings/other-team-members-view.tsx index 47f1d1c10e..1eb267ceda 100644 --- a/packages/features/ee/organizations/pages/settings/other-team-members-view.tsx +++ b/packages/features/ee/organizations/pages/settings/other-team-members-view.tsx @@ -7,10 +7,10 @@ import { useRouter } from "next/navigation"; import { useState, useEffect } from "react"; import MemberInvitationModal from "@calcom/ee/teams/components/MemberInvitationModal"; +import { checkAdminOrOwner } from "@calcom/features/auth/lib/checkAdminOrOwner"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import { useParamsWithFallback } from "@calcom/lib/hooks/useParamsWithFallback"; import { CreationSource } from "@calcom/prisma/enums"; -import { MembershipRole } from "@calcom/prisma/enums"; import { trpc } from "@calcom/trpc/react"; import type { RouterOutputs } from "@calcom/trpc/react"; import { Button } from "@calcom/ui/components/button"; @@ -72,9 +72,7 @@ export const TeamMembersCTA = () => { enabled: !!session.data?.user?.org, }); - const isOrgAdminOrOwner = - currentOrg && - (currentOrg.user.role === MembershipRole.OWNER || currentOrg.user.role === MembershipRole.ADMIN); + const isOrgAdminOrOwner = currentOrg && checkAdminOrOwner(currentOrg.user.role); if (!isOrgAdminOrOwner) return null; diff --git a/packages/features/ee/organizations/pages/settings/privacy.tsx b/packages/features/ee/organizations/pages/settings/privacy.tsx index 8823bf8c77..e328d623c3 100644 --- a/packages/features/ee/organizations/pages/settings/privacy.tsx +++ b/packages/features/ee/organizations/pages/settings/privacy.tsx @@ -1,15 +1,13 @@ "use client"; +import { checkAdminOrOwner } from "@calcom/features/auth/lib/checkAdminOrOwner"; import LicenseRequired from "@calcom/features/ee/common/components/LicenseRequired"; import MakeTeamPrivateSwitch from "@calcom/features/ee/teams/components/MakeTeamPrivateSwitch"; -import { MembershipRole } from "@calcom/prisma/enums"; import { trpc } from "@calcom/trpc/react"; const PrivacyView = () => { const { data: currentOrg } = trpc.viewer.organizations.listCurrent.useQuery(); - const isOrgAdminOrOwner = - currentOrg && - (currentOrg.user.role === MembershipRole.OWNER || currentOrg.user.role === MembershipRole.ADMIN); + const isOrgAdminOrOwner = currentOrg && checkAdminOrOwner(currentOrg.user.role); const isInviteOpen = !currentOrg?.user.accepted; const isDisabled = isInviteOpen || !isOrgAdminOrOwner; diff --git a/packages/features/ee/organizations/pages/settings/profile.tsx b/packages/features/ee/organizations/pages/settings/profile.tsx index ce1abd0a30..a8201bc06a 100644 --- a/packages/features/ee/organizations/pages/settings/profile.tsx +++ b/packages/features/ee/organizations/pages/settings/profile.tsx @@ -7,6 +7,7 @@ import { useEffect, useLayoutEffect, useState } from "react"; import { Controller, useForm } from "react-hook-form"; import { z } from "zod"; +import { checkAdminOrOwner } from "@calcom/features/auth/lib/checkAdminOrOwner"; import LicenseRequired from "@calcom/features/ee/common/components/LicenseRequired"; import { subdomainSuffix } from "@calcom/features/ee/organizations/lib/orgDomains"; import OrgAppearanceViewWrapper from "@calcom/features/ee/organizations/pages/settings/appearance"; @@ -16,7 +17,6 @@ import { useLocale } from "@calcom/lib/hooks/useLocale"; import { md } from "@calcom/lib/markdownIt"; import { markdownToSafeHTML } from "@calcom/lib/markdownToSafeHTML"; import turndown from "@calcom/lib/turndownService"; -import { MembershipRole } from "@calcom/prisma/enums"; import { trpc } from "@calcom/trpc/react"; import { Avatar } from "@calcom/ui/components/avatar"; import { Button } from "@calcom/ui/components/button"; @@ -103,9 +103,7 @@ const OrgProfileView = () => { return ; } - const isOrgAdminOrOwner = - currentOrganisation.user.role === MembershipRole.OWNER || - currentOrganisation.user.role === MembershipRole.ADMIN; + const isOrgAdminOrOwner = checkAdminOrOwner(currentOrganisation.user.role); const isBioEmpty = !currentOrganisation || diff --git a/packages/features/ee/platform/pages/settings/members.tsx b/packages/features/ee/platform/pages/settings/members.tsx index 20b9704ab3..930ea36bc6 100644 --- a/packages/features/ee/platform/pages/settings/members.tsx +++ b/packages/features/ee/platform/pages/settings/members.tsx @@ -1,10 +1,10 @@ "use client"; +import { checkAdminOrOwner } from "@calcom/features/auth/lib/checkAdminOrOwner"; import { CTA_CONTAINER_CLASS_NAME } from "@calcom/features/data-table/lib/utils"; import Shell from "@calcom/features/shell/Shell"; import { UserListTable } from "@calcom/features/users/components/UserTable/UserListTable"; import { useLocale } from "@calcom/lib/hooks/useLocale"; -import { MembershipRole } from "@calcom/prisma/enums"; import { trpc } from "@calcom/trpc/react"; import { Button } from "@calcom/ui/components/button"; import NoPlatformPlan from "@calcom/web/components/settings/platform/dashboard/NoPlatformPlan"; @@ -17,9 +17,7 @@ const PlatformMembersView = () => { useGetUserAttributes(); const { data: currentOrg, isPending } = trpc.viewer.organizations.listCurrent.useQuery(); - const isOrgAdminOrOwner = - currentOrg && - (currentOrg.user.role === MembershipRole.OWNER || currentOrg.user.role === MembershipRole.ADMIN); + const isOrgAdminOrOwner = currentOrg && checkAdminOrOwner(currentOrg.user.role); const canLoggedInUserSeeMembers = (currentOrg?.isPrivate && isOrgAdminOrOwner) || isOrgAdminOrOwner || !currentOrg?.isPrivate; diff --git a/packages/features/ee/sso/page/orgs-sso-view.tsx b/packages/features/ee/sso/page/orgs-sso-view.tsx index 8a700c9519..ebbcd3bff6 100644 --- a/packages/features/ee/sso/page/orgs-sso-view.tsx +++ b/packages/features/ee/sso/page/orgs-sso-view.tsx @@ -3,8 +3,8 @@ import { useSession } from "next-auth/react"; import { SkeletonLoader } from "@calcom/features/apps/components/SkeletonLoader"; +import { checkAdminOrOwner } from "@calcom/features/auth/lib/checkAdminOrOwner"; import { useLocale } from "@calcom/lib/hooks/useLocale"; -import { MembershipRole } from "@calcom/prisma/enums"; import SSOConfiguration from "../components/SSOConfiguration"; @@ -12,6 +12,7 @@ const SAMLSSO = () => { const { t } = useLocale(); const { data, status } = useSession(); + const isAdminOrOwner = checkAdminOrOwner(data?.user?.org?.role); const org = data?.user.org; if (status === "loading") ; @@ -20,8 +21,6 @@ const SAMLSSO = () => { return null; } - const isAdminOrOwner = org.role === MembershipRole.OWNER || org.role === MembershipRole.ADMIN; - return !!isAdminOrOwner ? (
diff --git a/packages/features/ee/teams/components/AddNewTeamMembers.tsx b/packages/features/ee/teams/components/AddNewTeamMembers.tsx index 24950a49d5..7699bcb778 100644 --- a/packages/features/ee/teams/components/AddNewTeamMembers.tsx +++ b/packages/features/ee/teams/components/AddNewTeamMembers.tsx @@ -5,6 +5,7 @@ import { useSession } from "next-auth/react"; import { useRouter } from "next/navigation"; import { useEffect, useState, useMemo } from "react"; +import { checkAdminOrOwner } from "@calcom/features/auth/lib/checkAdminOrOwner"; import { useOrgBranding } from "@calcom/features/ee/organizations/context/provider"; import InviteLinkSettingsModal from "@calcom/features/ee/teams/components/InviteLinkSettingsModal"; import { MemberInvitationModalWithoutMembers } from "@calcom/features/ee/teams/components/MemberInvitationModal"; @@ -205,7 +206,7 @@ const PendingMemberItem = (props: { member: TeamMember; index: number; teamId: n const { t } = useLocale(); const utils = trpc.useUtils(); const session = useSession(); - const orgRole = session?.data?.user.org?.role; + const isAdminOrOwner = checkAdminOrOwner(session.data?.user?.org?.role); const bookerUrl = member.bookerUrl; const removeMemberMutation = trpc.viewer.teams.removeMember.useMutation({ async onSuccess() { @@ -219,8 +220,6 @@ const PendingMemberItem = (props: { member: TeamMember; index: number; teamId: n }, }); - const isOrgAdminOrOwner = orgRole === MembershipRole.OWNER || orgRole === MembershipRole.ADMIN; - return (
  • - {(member.role !== "OWNER" || isOrgAdminOrOwner) && member.id !== session.data?.user.id && ( + {(member.role !== "OWNER" || isAdminOrOwner) && member.id !== session.data?.user.id && (