"use client" import { useState, useEffect } from "react" import { User, Shield, Link as LinkIcon } from "lucide-react" import { SettingsProfileTab } from "@/components/profile/settings-profile-tab" import { SettingsSecurityTab } from "@/components/profile/settings-security-tab" import { SettingsAccountsTab } from "@/components/profile/settings-accounts-tab" interface AuthMethods { hasPassword: boolean passkeyCount: number oauthProviders: Array<{ providerId: string; id: string }> totalAuthMethods: number } type SettingsSubTab = "profile" | "security" | "accounts" const subTabs: { id: SettingsSubTab; label: string; icon: typeof User }[] = [ { id: "profile", label: "Profile", icon: User }, { id: "security", label: "Security", icon: Shield }, { id: "accounts", label: "Linked Accounts", icon: LinkIcon }, ] interface SettingsContainerProps { name: string email: string role: string | null createdAt: string image?: string | null userId: string } export function SettingsContainer({ name, email, role, createdAt, image, userId, }: SettingsContainerProps) { const [activeSubTab, setActiveSubTab] = useState("profile") const [authMethods, setAuthMethods] = useState(null) const [isLoadingAuthMethods, setIsLoadingAuthMethods] = useState(true) useEffect(() => { const controller = new AbortController() const timeoutId = setTimeout(() => controller.abort(), 10000) fetch("/api/user/me/auth-methods", { credentials: "include", signal: controller.signal, }) .then(async (r) => { if (r.ok) { return r.json() } // Log non-OK responses for debugging console.warn(`[auth-methods] fetch returned ${r.status}`) return null }) .then((data) => { if (data) setAuthMethods(data) setIsLoadingAuthMethods(false) }) .catch((err) => { if (err.name !== "AbortError") { console.error("[auth-methods] fetch failed:", err) } setIsLoadingAuthMethods(false) }) .finally(() => clearTimeout(timeoutId)) return () => { controller.abort() clearTimeout(timeoutId) } }, []) const refreshAuthMethods = async () => { setIsLoadingAuthMethods(true) try { const res = await fetch("/api/user/me/auth-methods", { credentials: "include", }) if (res.ok) { setAuthMethods(await res.json()) } else { setAuthMethods(null) } } catch { setAuthMethods(null) } finally { setIsLoadingAuthMethods(false) } } return (
{/* Sidebar Navigation */} {/* Content Area */}
{activeSubTab === "profile" && ( )} {activeSubTab === "security" && ( )} {activeSubTab === "accounts" && ( )}
) }