diff --git a/apps/web/src/app/(dashboard)/components/Header/Header.tsx b/apps/web/src/app/(dashboard)/components/Header/Header.tsx index 29325e59ae8..a62f7c35a7b 100644 --- a/apps/web/src/app/(dashboard)/components/Header/Header.tsx +++ b/apps/web/src/app/(dashboard)/components/Header/Header.tsx @@ -1,7 +1,6 @@ "use client"; import { authClient } from "@superset/auth/client"; -import { getInitials } from "@superset/shared/names"; import { Avatar, AvatarFallback, AvatarImage } from "@superset/ui/avatar"; import { DropdownMenu, @@ -15,7 +14,7 @@ import { DropdownMenuTrigger, } from "@superset/ui/dropdown-menu"; import { useQuery, useQueryClient } from "@tanstack/react-query"; -import { Check, LogOut } from "lucide-react"; +import { Check, ChevronDown, LogOut } from "lucide-react"; import Image from "next/image"; import Link from "next/link"; import { useRouter } from "next/navigation"; @@ -33,12 +32,13 @@ export function Header() { ); const user = session?.user; - const initials = getInitials(user?.name, user?.email); const activeOrganizationId = session?.session?.activeOrganizationId; const activeOrganization = organizations?.find( (org) => org.id === activeOrganizationId, ); + const displayName = activeOrganization?.name ?? "Organization"; + const handleSignOut = async () => { await authClient.signOut(); router.push("/sign-in"); @@ -66,15 +66,22 @@ export function Header() { @@ -85,52 +92,34 @@ export function Header() { - {organizations && organizations.length === 1 && ( - <> -
- - - {activeOrganization?.name?.charAt(0) ?? "O"} - - - - {activeOrganization?.name ?? "Organization"} - -
- - - )} {organizations && organizations.length > 1 && ( <> - - - {activeOrganization?.name?.charAt(0) ?? "O"} - - - - {activeOrganization?.name ?? "Organization"} - + Switch organization - Switch organization + {user?.email} {organizations.map((org) => ( handleSwitchOrganization(org.id)} > - + + {org.name?.charAt(0) ?? "O"} {org.name} {org.id === activeOrganizationId && ( - + )} ))} @@ -140,11 +129,11 @@ export function Header() { )} - - Logout + + Log out
diff --git a/packages/trpc/src/router/user/user.ts b/packages/trpc/src/router/user/user.ts index 3c108db237b..4c4df3f2fd4 100644 --- a/packages/trpc/src/router/user/user.ts +++ b/packages/trpc/src/router/user/user.ts @@ -2,7 +2,7 @@ import { db } from "@superset/db/client"; import { members, users } from "@superset/db/schema"; import { TRPCError, type TRPCRouterRecord } from "@trpc/server"; import { del, put } from "@vercel/blob"; -import { eq } from "drizzle-orm"; +import { and, eq } from "drizzle-orm"; import { z } from "zod"; import { protectedProcedure } from "../../trpc"; @@ -11,8 +11,15 @@ export const userRouter = { me: protectedProcedure.query(({ ctx }) => ctx.session.user), myOrganization: protectedProcedure.query(async ({ ctx }) => { + const activeOrganizationId = ctx.session.session.activeOrganizationId; + const membership = await db.query.members.findFirst({ - where: eq(members.userId, ctx.session.user.id), + where: activeOrganizationId + ? and( + eq(members.userId, ctx.session.user.id), + eq(members.organizationId, activeOrganizationId), + ) + : eq(members.userId, ctx.session.user.id), with: { organization: true, },