diff --git a/apps/web/src/components/Dashboard.tsx b/apps/web/src/components/Dashboard.tsx index e541d402..e3aa8390 100644 --- a/apps/web/src/components/Dashboard.tsx +++ b/apps/web/src/components/Dashboard.tsx @@ -1,4 +1,6 @@ import { useTheme } from "next-themes"; +import { useRouter } from "next/navigation"; +import { env } from "next-runtime-env"; import { useEffect, useRef, useState } from "react"; import { TbLayoutSidebarLeftCollapse, @@ -43,6 +45,7 @@ export default function Dashboard({ const { resolvedTheme } = useTheme(); const { openModal } = useModal(); const { availableWorkspaces, hasLoaded } = useWorkspace(); + const router = useRouter(); const { data: session, isPending: sessionLoading } = authClient.useSession(); const { data: user, isLoading: userLoading } = api.user.getUser.useQuery( @@ -98,9 +101,13 @@ export default function Dashboard({ useEffect(() => { if (hasLoaded && availableWorkspaces.length === 0) { - openModal("NEW_WORKSPACE", undefined, undefined, false); + if (env("NEXT_PUBLIC_KAN_ENV") === "cloud") { + router.push("/onboarding/select-plan"); + } else { + openModal("NEW_WORKSPACE", undefined, undefined, false); + } } - }, [hasLoaded, availableWorkspaces.length, openModal]); + }, [hasLoaded, availableWorkspaces.length, openModal, router]); const isDarkMode = resolvedTheme === "dark"; diff --git a/apps/web/src/components/WorkspaceMenu.tsx b/apps/web/src/components/WorkspaceMenu.tsx index 34c6220c..36f5240f 100644 --- a/apps/web/src/components/WorkspaceMenu.tsx +++ b/apps/web/src/components/WorkspaceMenu.tsx @@ -1,5 +1,7 @@ import { Button, Menu, Transition } from "@headlessui/react"; import { t } from "@lingui/core/macro"; +import { useRouter } from "next/navigation"; +import { env } from "next-runtime-env"; import { Fragment, useState } from "react"; import { HiCheck, HiMagnifyingGlass } from "react-icons/hi2"; import { twMerge } from "tailwind-merge"; @@ -18,6 +20,7 @@ export default function WorkspaceMenu({ const { workspace, isLoading, availableWorkspaces, switchWorkspace } = useWorkspace(); const { openModal } = useModal(); + const router = useRouter(); const [isOpen, setIsOpen] = useState(false); const { tooltipContent: commandPaletteShortcutTooltipContent } = @@ -147,7 +150,11 @@ export default function WorkspaceMenu({
+ ); + })} +
+ + +
+ {hasExistingWorkspace && ( + + )} + +
+ + + {/* Right panel */} +
+
+ {/* Orbit rings */} +
+
+
+ + {/* Centre person */} +
+ {userImage ? ( + Your avatar + ) : ( + + )} +
+ + {/* Orbiting users — zero-size pivot at center rotates; icon offset by radius stays on the ring */} + + {ORBIT_USERS[selected].map((u) => ( + + {/* Counter-rotate icon so it stays upright */} + + + + + ))} + +
+
+
+
+
+ ); +}