mirror of
https://github.com/supermemoryai/supermemory.git
synced 2026-08-28 05:25:33 +00:00
Consolidate login routes, add animated tool context visualization on the hero panel, and polish loading states across onboarding, settings, and workspace bootstrap.
65 lines
1.5 KiB
TypeScript
65 lines
1.5 KiB
TypeScript
"use client"
|
|
|
|
import { useEffect } from "react"
|
|
import { usePathname, useRouter, useSearchParams } from "next/navigation"
|
|
import { useAuth } from "@lib/auth-context"
|
|
import { Loader2 } from "lucide-react"
|
|
|
|
function WorkspaceLoadingShell() {
|
|
return (
|
|
<div className="flex min-h-dvh items-center justify-center bg-[#05080D]">
|
|
<Loader2
|
|
className="size-6 animate-spin text-white/40"
|
|
aria-label="Loading workspace"
|
|
/>
|
|
</div>
|
|
)
|
|
}
|
|
|
|
export function EnsureWorkspace({ children }: { children: React.ReactNode }) {
|
|
const pathname = usePathname()
|
|
const router = useRouter()
|
|
const searchParams = useSearchParams()
|
|
const { session, organizations, isRestoring } = useAuth()
|
|
|
|
const isMcpPublicPage = searchParams.get("view") === "mcp"
|
|
const isOnboarding = pathname.startsWith("/onboarding")
|
|
|
|
useEffect(() => {
|
|
if (isMcpPublicPage) return
|
|
if (isRestoring) return
|
|
if (!session) {
|
|
router.replace(
|
|
`/login?redirect=${encodeURIComponent(window.location.href)}`,
|
|
)
|
|
return
|
|
}
|
|
if (organizations === null) return
|
|
if (organizations.length > 0) return
|
|
if (isOnboarding) return
|
|
router.replace("/onboarding")
|
|
}, [
|
|
session,
|
|
organizations,
|
|
isRestoring,
|
|
isOnboarding,
|
|
router,
|
|
isMcpPublicPage,
|
|
])
|
|
|
|
const showLoading =
|
|
!isMcpPublicPage &&
|
|
(isRestoring ||
|
|
(!session && !isRestoring) ||
|
|
(session && organizations === null) ||
|
|
(session &&
|
|
organizations !== null &&
|
|
organizations.length === 0 &&
|
|
!isOnboarding))
|
|
|
|
if (showLoading) {
|
|
return <WorkspaceLoadingShell />
|
|
}
|
|
|
|
return children
|
|
}
|