"use client"; import { Archive, ArchiveRestore, MoreHorizontal, Pencil, Pin, PinOff, Share2, Trash2, } from "lucide-react"; import { forwardRef } from "react"; import { SidebarMenuButton } from "@/components/ui/sidebar"; export type SidebarSession = { readonly id: string; readonly title: string; readonly messageCount: number; readonly pinned: boolean; readonly archived: boolean; }; export type SidebarSessionControls = { readonly archivedCount: number; readonly showingArchived: boolean; readonly menuSessionId: string | null; readonly disabled: boolean; readonly onToggleArchivedView: () => void; readonly onMenuSessionChange: (sessionId: string | null) => void; readonly onTogglePinned: (sessionId: string) => void; readonly onRename: (sessionId: string) => void; readonly onShare: (sessionId: string) => void; readonly onToggleArchived: (sessionId: string) => void; readonly onDelete: (sessionId: string) => void; }; type SidebarSessionRowProps = { readonly session: SidebarSession; readonly active: boolean; readonly disabled: boolean; readonly menuOpen: boolean; readonly onMenuOpenChange: (open: boolean) => void; readonly onSelect: () => void; readonly onTogglePinned: () => void; readonly onRename: () => void; readonly onShare: () => void; readonly onToggleArchived: () => void; readonly onDelete: () => void; }; export const SidebarSessionRow = forwardRef(function SidebarSessionRow({ session, active, disabled, menuOpen, onMenuOpenChange, onSelect, onTogglePinned, onRename, onShare, onToggleArchived, onDelete, }, ref) { function runAction(action: () => void) { onMenuOpenChange(false); action(); } return (
{ event.preventDefault(); if (!disabled) onMenuOpenChange(!menuOpen); }} > {session.pinned ? : null} {session.title} {session.messageCount > 0 ? {session.messageCount} 条消息 : null} {menuOpen ? (
) : null}
); });