import type { Chat } from '@/lib/db/schema'; import { SidebarMenuAction, SidebarMenuButton, SidebarMenuItem, } from './ui/sidebar'; import Link from 'next/link'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuPortal, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, } from './ui/dropdown-menu'; import { CheckCircleFillIcon, GlobeIcon, LockIcon, MoreHorizontalIcon, ShareIcon, TrashIcon, } from './icons'; import { memo } from 'react'; import { useChatVisibility } from '@/hooks/use-chat-visibility'; const PureChatItem = ({ chat, isActive, onDelete, setOpenMobile, }: { chat: Chat; isActive: boolean; onDelete: (chatId: string) => void; setOpenMobile: (open: boolean) => void; }) => { const { visibilityType, setVisibilityType } = useChatVisibility({ chatId: chat.id, initialVisibilityType: chat.visibility, }); return ( setOpenMobile(false)}> {chat.title} More Share { setVisibilityType('private'); }} >
Private
{visibilityType === 'private' ? ( ) : null}
{ setVisibilityType('public'); }} >
Public
{visibilityType === 'public' ? : null}
onDelete(chat.id)} > Delete
); }; export const ChatItem = memo(PureChatItem, (prevProps, nextProps) => { if (prevProps.isActive !== nextProps.isActive) return false; return true; });