-
Team
+
Organization
Manage members in your organization
@@ -95,7 +95,7 @@ function TeamSettingsPage() {
diff --git a/apps/desktop/src/renderer/screens/main/components/WorkspaceSidebar/WorkspaceSidebarHeader/OrganizationDropdown.tsx b/apps/desktop/src/renderer/screens/main/components/TopBar/OrganizationDropdown.tsx
similarity index 50%
rename from apps/desktop/src/renderer/screens/main/components/WorkspaceSidebar/WorkspaceSidebarHeader/OrganizationDropdown.tsx
rename to apps/desktop/src/renderer/screens/main/components/TopBar/OrganizationDropdown.tsx
index 91405aeb3ec..56a9ac55b8f 100644
--- a/apps/desktop/src/renderer/screens/main/components/WorkspaceSidebar/WorkspaceSidebarHeader/OrganizationDropdown.tsx
+++ b/apps/desktop/src/renderer/screens/main/components/TopBar/OrganizationDropdown.tsx
@@ -1,3 +1,4 @@
+import { COMPANY } from "@superset/shared/constants";
import { Avatar } from "@superset/ui/atoms/Avatar";
import {
DropdownMenu,
@@ -5,34 +6,37 @@ import {
DropdownMenuItem,
DropdownMenuLabel,
DropdownMenuSeparator,
+ DropdownMenuShortcut,
DropdownMenuSub,
DropdownMenuSubContent,
DropdownMenuSubTrigger,
DropdownMenuTrigger,
} from "@superset/ui/dropdown-menu";
-import { Tooltip, TooltipContent, TooltipTrigger } from "@superset/ui/tooltip";
import { useLiveQuery } from "@tanstack/react-db";
import { useNavigate } from "@tanstack/react-router";
+import { FaDiscord, FaXTwitter } from "react-icons/fa6";
import {
HiCheck,
HiChevronUpDown,
HiOutlineArrowRightOnRectangle,
+ HiOutlineBugAnt,
+ HiOutlineCog6Tooth,
+ HiOutlineEnvelope,
+ HiOutlineUserGroup,
} from "react-icons/hi2";
+import { LuKeyboard, LuLifeBuoy } from "react-icons/lu";
import { authClient } from "renderer/lib/auth-client";
import { electronTrpc } from "renderer/lib/electron-trpc";
import { useCollections } from "renderer/routes/_authenticated/providers/CollectionsProvider";
+import { useHotkeyText } from "renderer/stores/hotkeys";
-interface OrganizationDropdownProps {
- isCollapsed?: boolean;
-}
-
-export function OrganizationDropdown({
- isCollapsed = false,
-}: OrganizationDropdownProps) {
+export function OrganizationDropdown() {
const { data: session } = authClient.useSession();
const collections = useCollections();
const signOutMutation = electronTrpc.auth.signOut.useMutation();
const navigate = useNavigate();
+ const shortcutsHotkey = useHotkeyText("SHOW_HOTKEYS");
+ const showShortcut = shortcutsHotkey !== "Unassigned";
const activeOrganizationId = session?.session?.activeOrganizationId;
@@ -45,8 +49,7 @@ export function OrganizationDropdown({
(o) => o.id === activeOrganizationId,
);
- // Always render dropdown to prevent trapping users without orgs
- const orgName = activeOrganization?.name ?? "No Organization";
+ const userEmail = session?.user?.email;
const switchOrganization = async (newOrgId: string) => {
await authClient.organization.setActive({
@@ -59,65 +62,64 @@ export function OrganizationDropdown({
signOutMutation.mutate();
};
- const trigger = isCollapsed ? (
-
-
+ const handleKeyboardShortcuts = () => {
+ navigate({ to: "/settings/keyboard" });
+ };
+
+ const handleContactUs = () => {
+ window.open(COMPANY.MAIL_TO, "_blank");
+ };
+
+ const handleReportIssue = () => {
+ window.open(COMPANY.REPORT_ISSUE_URL, "_blank");
+ };
+
+ const handleJoinDiscord = () => {
+ window.open(COMPANY.DISCORD_URL, "_blank");
+ };
+
+ const handleTwitter = () => {
+ window.open(COMPANY.X_URL, "_blank");
+ };
+
+ const userName = session?.user?.name;
+ const displayName = activeOrganization?.name ?? userName ?? "Organization";
+
+ return (
+
+
-
- {orgName}
-
- ) : (
-
- );
-
- const userEmail = session?.user?.email;
+
+
+ {/* Settings and team management - always shown for logged in users */}
+ navigate({ to: "/settings/account" })}
+ >
+
+ Settings
+
- return (
-
- {trigger}
-
- {/* Only show org-specific items if user has an active organization */}
- {activeOrganization && (
- <>
- {/* Settings */}
- navigate({ to: "/settings/account" })}
- >
- Settings
-
+ navigate({ to: "/settings/team" })}>
+
+ Organization
+
- {/* Team management */}
- navigate({ to: "/settings/team" })}
- >
- Invite and manage members
-
-
-
- >
- )}
+
{/* Org switcher - only show if user has multiple orgs */}
{organizations && organizations.length > 1 && (
@@ -127,7 +129,6 @@ export function OrganizationDropdown({
Switch organization
- {/* User email header in submenu */}
{userEmail && (
{userEmail}
@@ -157,6 +158,40 @@ export function OrganizationDropdown({
>
)}
+ {/* Support section */}
+
+
+ Report Issue
+
+
+
+ Keyboard Shortcuts
+ {showShortcut && (
+ {shortcutsHotkey}
+ )}
+
+
+
+
+ Contact Us
+
+
+
+
+ Discord
+
+
+ X
+
+
+
+ Email Founders
+
+
+
+
+
+
{/* Sign out - ALWAYS show so users can never get trapped */}
diff --git a/apps/desktop/src/renderer/screens/main/components/TopBar/SupportMenu.tsx b/apps/desktop/src/renderer/screens/main/components/TopBar/SupportMenu.tsx
deleted file mode 100644
index 087a771ae01..00000000000
--- a/apps/desktop/src/renderer/screens/main/components/TopBar/SupportMenu.tsx
+++ /dev/null
@@ -1,94 +0,0 @@
-import { COMPANY } from "@superset/shared/constants";
-import {
- DropdownMenu,
- DropdownMenuContent,
- DropdownMenuItem,
- DropdownMenuShortcut,
- DropdownMenuSub,
- DropdownMenuSubContent,
- DropdownMenuSubTrigger,
- DropdownMenuTrigger,
-} from "@superset/ui/dropdown-menu";
-import { useNavigate } from "@tanstack/react-router";
-import { FaDiscord, FaXTwitter } from "react-icons/fa6";
-import {
- HiOutlineBugAnt,
- HiOutlineEnvelope,
- HiOutlineQuestionMarkCircle,
-} from "react-icons/hi2";
-import { LuKeyboard, LuLifeBuoy } from "react-icons/lu";
-import { useHotkeyText } from "renderer/stores/hotkeys";
-
-export function SupportMenu() {
- const navigate = useNavigate();
- const shortcutsHotkey = useHotkeyText("SHOW_HOTKEYS");
- const showShortcut = shortcutsHotkey !== "Unassigned";
-
- const handleKeyboardShortcuts = () => {
- navigate({ to: "/settings/keyboard" });
- };
-
- const handleContactUs = () => {
- window.open(COMPANY.MAIL_TO, "_blank");
- };
-
- const handleReportIssue = () => {
- window.open(COMPANY.REPORT_ISSUE_URL, "_blank");
- };
-
- const handleJoinDiscord = () => {
- window.open(COMPANY.DISCORD_URL, "_blank");
- };
-
- const handleTwitter = () => {
- window.open(COMPANY.X_URL, "_blank");
- };
-
- return (
-
-
-
-
-
-
-
- Report Issue
-
-
-
- Keyboard Shortcuts
- {showShortcut && (
- {shortcutsHotkey}
- )}
-
-
-
-
- Contact Us
-
-
-
-
- Discord
-
-
-
- X
-
-
-
-
- Email Founders
-
-
-
-
-
- );
-}
diff --git a/apps/desktop/src/renderer/screens/main/components/TopBar/index.tsx b/apps/desktop/src/renderer/screens/main/components/TopBar/index.tsx
index 2cadd982720..9e36080cd8c 100644
--- a/apps/desktop/src/renderer/screens/main/components/TopBar/index.tsx
+++ b/apps/desktop/src/renderer/screens/main/components/TopBar/index.tsx
@@ -1,7 +1,7 @@
import { useParams } from "@tanstack/react-router";
import { electronTrpc } from "renderer/lib/electron-trpc";
import { OpenInMenuButton } from "./OpenInMenuButton";
-import { SupportMenu } from "./SupportMenu";
+import { OrganizationDropdown } from "./OrganizationDropdown";
import { WindowControls } from "./WindowControls";
export function TopBar() {
@@ -32,7 +32,7 @@ export function TopBar() {
branch={workspace.worktree?.branch}
/>
)}
-
+
{!isMac && }