"use client"; import { Loader2 } from "lucide-react"; import { useEffect, useState } from "react"; import type { ResolveShareResponse } from "@/domain/design"; import { readRoute, type AppRoute } from "@/application/route"; import { designGateway } from "@/infrastructure/designGateway"; import { httpStatusOf } from "@/infrastructure/userMessages"; import { BrandMark } from "@/ui/components/BrandMark"; import { BrandKitRoutePage } from "@/ui/pages/BrandKitRoutePage"; import { CanvasWorkspace } from "@/ui/pages/CanvasWorkspace"; import { HomePage } from "@/ui/pages/HomePage"; import { NotFoundPage } from "@/ui/pages/NotFoundPage"; import { ProjectsRoutePage } from "@/ui/pages/ProjectsRoutePage"; import { useAuth } from "@/ui/auth/AuthProvider"; export function App() { const { isAuthenticated, openLogin } = useAuth(); const [route, setRoute] = useState(null); useEffect(() => { setRoute(readRoute()); const handleRoute = () => setRoute(readRoute()); window.addEventListener("hashchange", handleRoute); window.addEventListener("popstate", handleRoute); return () => { window.removeEventListener("hashchange", handleRoute); window.removeEventListener("popstate", handleRoute); }; }, []); useEffect(() => { if (route?.name === "project" && !isAuthenticated) { openLogin(); } }, [isAuthenticated, openLogin, route]); if (!route) { return (
); } if (route.name === "project" && !isAuthenticated) return ; if (route.name === "project") return ; if (route.name === "share") return ; if (route.name === "projects") return ; if (route.name === "brandKit") return ; if (route.name === "notFound") return ; return ; } function SharedCanvasRoute({ shareId }: { shareId: string }) { const { isAuthenticated, openRequiredLogin } = useAuth(); const [resolved, setResolved] = useState(null); const [state, setState] = useState<"loading" | "not-found" | "error">("loading"); useEffect(() => { let active = true; let releaseRequiredLogin: (() => void) | undefined; setResolved(null); setState("loading"); designGateway .resolveShare(shareId) .then((response) => { if (!active) return; setResolved(response); }) .catch((error: unknown) => { if (!active) return; const status = httpStatusOf(error); if (status === 401 && !isAuthenticated) { releaseRequiredLogin = openRequiredLogin(); return; } setState(status === 403 || status === 404 ? "not-found" : "error"); }); return () => { active = false; releaseRequiredLogin?.(); }; }, [isAuthenticated, openRequiredLogin, shareId]); if (resolved) { return ; } if (state === "not-found") return ; if (state === "error") { return (
Unable to open this shared canvas.
); } return ; } function ProjectAuthPreview() { return ( ); }