feat: updated the useage of listCurrent in the app and use org role from session (#14653)

* feat: include org role in org session data

* update contents

* fix: type err

---------

Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
Co-authored-by: Udit Takkar <udit222001@gmail.com>
This commit is contained in:
sean-brydon
2024-04-22 14:07:43 +00:00
committed by GitHub
co-authored by Udit Takkar Udit Takkar
parent 3ce6c23603
commit 74f09c332b
6 changed files with 26 additions and 44 deletions
@@ -1,5 +1,6 @@
"use client";
import { useSession } from "next-auth/react";
import { useRouter } from "next/navigation";
import { useState, useEffect } from "react";
import { useForm } from "react-hook-form";
@@ -212,6 +213,8 @@ const OrgAppearanceView = ({
const OrgAppearanceViewWrapper = () => {
const router = useRouter();
const { t } = useLocale();
const session = useSession();
const orgRole = session?.data?.user?.org?.role;
const { data: currentOrg, isPending, error } = trpc.viewer.organizations.listCurrent.useQuery();
useEffect(
@@ -229,9 +232,7 @@ const OrgAppearanceViewWrapper = () => {
if (!currentOrg) return null;
const isAdminOrOwner =
currentOrg &&
(currentOrg.user.role === MembershipRole.OWNER || currentOrg.user.role === MembershipRole.ADMIN);
const isAdminOrOwner = orgRole === MembershipRole.OWNER || orgRole === MembershipRole.ADMIN;
return <OrgAppearanceView currentOrg={currentOrg} isAdminOrOwner={isAdminOrOwner} />;
};
@@ -1,5 +1,6 @@
"use client";
import { useSession } from "next-auth/react";
import { useRouter } from "next/navigation";
import { useEffect } from "react";
import { Controller, useForm } from "react-hook-form";
@@ -52,6 +53,8 @@ interface GeneralViewProps {
const OrgGeneralView = () => {
const { t } = useLocale();
const router = useRouter();
const session = useSession();
const orgRole = session?.data?.user?.org?.role;
const {
data: currentOrg,
@@ -73,8 +76,7 @@ const OrgGeneralView = () => {
if (!currentOrg) {
return null;
}
const isAdminOrOwner =
currentOrg.user.role === MembershipRole.OWNER || currentOrg.user.role === MembershipRole.ADMIN;
const isAdminOrOwner = orgRole === MembershipRole.OWNER || orgRole === MembershipRole.ADMIN;
return (
<LicenseRequired>
@@ -84,7 +86,7 @@ const OrgGeneralView = () => {
localeProp={user?.locale ?? "en"}
/>
<LockEventTypeSwitch currentOrg={currentOrg} isAdminOrOwner={isAdminOrOwner} />
<LockEventTypeSwitch currentOrg={currentOrg} isAdminOrOwner={!!isAdminOrOwner} />
</LicenseRequired>
);
};
@@ -1,11 +1,9 @@
"use client";
import { useRouter } from "next/navigation";
import { useEffect } from "react";
import { useSession } from "next-auth/react";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { MembershipRole } from "@calcom/prisma/enums";
import { trpc } from "@calcom/trpc/react";
import { AppSkeletonLoader as SkeletonLoader, Meta } from "@calcom/ui";
import { getLayout } from "../../../settings/layouts/SettingsLayout";
@@ -13,36 +11,23 @@ import SSOConfiguration from "../components/SSOConfiguration";
const SAMLSSO = () => {
const { t } = useLocale();
const router = useRouter();
const {
data: currentOrg,
isPending,
error,
} = trpc.viewer.organizations.listCurrent.useQuery(undefined, {});
const { data, status } = useSession();
const org = data?.user.org;
useEffect(
function refactorMeWithoutEffect() {
if (error) {
router.push("/settings");
}
},
[error]
);
if (isPending)
if (status === "loading")
<SkeletonLoader title={t("sso_saml_heading")} description={t("sso_configuration_description_orgs")} />;
if (!currentOrg) {
if (!org) {
return null;
}
const isAdminOrOwner =
currentOrg.user.role === MembershipRole.OWNER || currentOrg.user.role === MembershipRole.ADMIN;
const isAdminOrOwner = org.role === MembershipRole.OWNER || org.role === MembershipRole.ADMIN;
return isAdminOrOwner ? (
return !!isAdminOrOwner ? (
<div className="bg-default w-full sm:mx-0 xl:mt-0">
<Meta title={t("sso_configuration")} description={t("sso_configuration_description_orgs")} />
<SSOConfiguration teamId={currentOrg?.id} />
<SSOConfiguration teamId={org.id} />
</div>
) : (
<div className="py-5">
@@ -236,10 +236,8 @@ 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 bookerUrl = member.bookerUrl;
const { data: currentOrg } = trpc.viewer.organizations.listCurrent.useQuery(undefined, {
enabled: !!session.data?.user?.org,
});
const removeMemberMutation = trpc.viewer.teams.removeMember.useMutation({
async onSuccess() {
await utils.viewer.teams.get.invalidate();
@@ -251,9 +249,7 @@ const PendingMemberItem = (props: { member: TeamMember; index: number; teamId: n
},
});
const isOrgAdminOrOwner =
currentOrg &&
(currentOrg.user.role === MembershipRole.OWNER || currentOrg.user.role === MembershipRole.ADMIN);
const isOrgAdminOrOwner = orgRole === MembershipRole.OWNER || orgRole === MembershipRole.ADMIN;
return (
<li
@@ -82,6 +82,7 @@ const MembersView = () => {
const router = useRouter();
const session = useSession();
const org = session?.data?.user.org;
const utils = trpc.useUtils();
const params = useParamsWithFallback();
@@ -91,9 +92,6 @@ const MembersView = () => {
const showDialog = searchParams?.get("inviteModal") === "true";
const [showMemberInvitationModal, setShowMemberInvitationModal] = useState(showDialog);
const [showInviteLinkSettingsModal, setInviteLinkSettingsModal] = useState(false);
const { data: currentOrg } = trpc.viewer.organizations.listCurrent.useQuery(undefined, {
enabled: !!session.data?.user?.org,
});
const { data: orgMembersNotInThisTeam, isPending: isOrgListLoading } =
trpc.viewer.organizations.getMembers.useQuery(
@@ -134,9 +132,7 @@ const MembersView = () => {
const isAdmin =
team && (team.membership.role === MembershipRole.OWNER || team.membership.role === MembershipRole.ADMIN);
const isOrgAdminOrOwner =
currentOrg &&
(currentOrg.user.role === MembershipRole.OWNER || currentOrg.user.role === MembershipRole.ADMIN);
const isOrgAdminOrOwner = org?.role === MembershipRole.OWNER || org?.role === MembershipRole.ADMIN;
return (
<>
@@ -1,4 +1,5 @@
import { zodResolver } from "@hookform/resolvers/zod";
import { useSession } from "next-auth/react";
import type { Dispatch } from "react";
import { useMemo } from "react";
import { Controller, useForm } from "react-hook-form";
@@ -55,6 +56,8 @@ export function EditForm({
}) {
const [setMutationLoading] = useEditMode((state) => [state.setMutationloading], shallow);
const { t } = useLocale();
const session = useSession();
const org = session?.data?.user?.org;
const utils = trpc.useUtils();
const form = useForm({
resolver: zodResolver(editSchema),
@@ -69,8 +72,7 @@ export function EditForm({
},
});
const { data: currentMembership } = trpc.viewer.organizations.listCurrent.useQuery();
const isOwner = currentMembership?.user.role === MembershipRole.OWNER;
const isOwner = org?.role === MembershipRole.OWNER;
const membershipOptions = useMemo<MembershipOption[]>(() => {
const options: MembershipOption[] = [