68 lines
2.1 KiB
TypeScript
68 lines
2.1 KiB
TypeScript
"use client";
|
||
|
||
import { MessageSquarePlus } from "lucide-react";
|
||
import Link from "next/link";
|
||
import { usePathname } from "next/navigation";
|
||
|
||
import {
|
||
SidebarMenu,
|
||
SidebarMenuButton,
|
||
SidebarMenuItem,
|
||
SidebarTrigger,
|
||
useSidebar,
|
||
} from "@/components/ui/sidebar";
|
||
import { useI18n } from "@/core/i18n/hooks";
|
||
import { env } from "@/env";
|
||
import { cn } from "@/lib/utils";
|
||
|
||
export function WorkspaceHeader({ className }: { className?: string }) {
|
||
const { t } = useI18n();
|
||
const { state } = useSidebar();
|
||
const pathname = usePathname();
|
||
return (
|
||
<>
|
||
<div
|
||
className={cn(
|
||
"group/workspace-header flex h-12 flex-col justify-center",
|
||
className,
|
||
)}
|
||
>
|
||
{state === "collapsed" ? (
|
||
<div className="group-has-data-[collapsible=icon]/sidebar-wrapper:-translate-y flex w-full cursor-pointer items-center justify-center">
|
||
<div className="text-primary block pt-1 font-serif group-hover/workspace-header:hidden">
|
||
XC
|
||
</div>
|
||
<SidebarTrigger className="hidden pl-2 group-hover/workspace-header:block" />
|
||
</div>
|
||
) : (
|
||
<div className="flex items-center justify-between gap-2">
|
||
{env.NEXT_PUBLIC_STATIC_WEBSITE_ONLY === "true" ? (
|
||
<Link href="/" className="text-primary ml-2 font-serif">
|
||
XClaw侧边栏
|
||
</Link>
|
||
) : (
|
||
<div className="text-primary ml-2 cursor-default font-serif">
|
||
XClaw(测试专用侧边栏。)
|
||
</div>
|
||
)}
|
||
<SidebarTrigger />
|
||
</div>
|
||
)}
|
||
</div>
|
||
<SidebarMenu>
|
||
<SidebarMenuItem>
|
||
<SidebarMenuButton
|
||
isActive={pathname === "/workspace/chats/new"}
|
||
asChild
|
||
>
|
||
<Link className="text-muted-foreground" href="/workspace/chats/new">
|
||
<MessageSquarePlus size={16} />
|
||
<span>{t.sidebar.newChat}</span>
|
||
</Link>
|
||
</SidebarMenuButton>
|
||
</SidebarMenuItem>
|
||
</SidebarMenu>
|
||
</>
|
||
);
|
||
}
|