49 lines
1.6 KiB
TypeScript
49 lines
1.6 KiB
TypeScript
"use client";
|
|
|
|
import { useRouter } from "next/navigation";
|
|
import { ArrowRightFromSquare, PersonFill } from "@gravity-ui/icons";
|
|
import { signOut, useSession } from "@/lib/auth-client";
|
|
|
|
export default function SidebarFooter() {
|
|
const router = useRouter();
|
|
const { data: session } = useSession();
|
|
|
|
const handleSignOut = async () => {
|
|
await signOut({ fetchOptions: { credentials: "include" } });
|
|
router.push("/login");
|
|
router.refresh();
|
|
};
|
|
|
|
return (
|
|
<div className="border-t border-border p-3">
|
|
{/* User info */}
|
|
{session?.user && (
|
|
<div className="mb-2 flex items-center gap-2.5 rounded-lg px-2 py-1.5">
|
|
<div className="flex size-7 shrink-0 items-center justify-center rounded-full bg-accent-soft">
|
|
<PersonFill className="size-3.5 text-accent" />
|
|
</div>
|
|
<div className="min-w-0 flex-1">
|
|
<p className="truncate text-sm font-medium leading-tight text-foreground">
|
|
{session.user.name || session.user.email}
|
|
</p>
|
|
<p className="truncate text-xs leading-tight text-muted capitalize">
|
|
{session.user.role ?? "user"}
|
|
</p>
|
|
</div>
|
|
</div>
|
|
)}
|
|
|
|
<button
|
|
type="button"
|
|
className="flex w-full items-center gap-2.5 rounded-lg px-2 py-1.5 text-sm text-muted transition-colors hover:bg-surface-tertiary hover:text-foreground"
|
|
onClick={handleSignOut}
|
|
>
|
|
<ArrowRightFromSquare className="size-4 shrink-0" />
|
|
<span>退出登录</span>
|
|
</button>
|
|
|
|
<p className="mt-2 px-2 text-[11px] text-muted/60">Helios EVCS</p>
|
|
</div>
|
|
);
|
|
}
|