"use client"; import { Suspense, useEffect, useState } from "react"; import { useSearchParams, useRouter } from "next/navigation"; import { useAuthStore } from "@/features/auth"; import { useWorkspaceStore } from "@/features/workspace"; import { api } from "@/shared/api"; import { Card, CardHeader, CardTitle, CardDescription, CardContent, } from "@/components/ui/card"; import { Loader2 } from "lucide-react"; function CallbackContent() { const router = useRouter(); const searchParams = useSearchParams(); const loginWithGoogle = useAuthStore((s) => s.loginWithGoogle); const hydrateWorkspace = useWorkspaceStore((s) => s.hydrateWorkspace); const [error, setError] = useState(""); useEffect(() => { const code = searchParams.get("code"); if (!code) { setError("Missing authorization code"); return; } const errorParam = searchParams.get("error"); if (errorParam) { setError(errorParam === "access_denied" ? "Access denied" : errorParam); return; } const redirectUri = `${window.location.origin}/auth/callback`; loginWithGoogle(code, redirectUri) .then(async () => { const wsList = await api.listWorkspaces(); const lastWsId = localStorage.getItem("multica_workspace_id"); await hydrateWorkspace(wsList, lastWsId); router.push("/issues"); }) .catch((err) => { setError(err instanceof Error ? err.message : "Login failed"); }); }, [searchParams, loginWithGoogle, hydrateWorkspace, router]); if (error) { return (