'use client'; import { type ReactNode, useMemo, useState } from 'react'; import { Button } from '@/components/ui/button'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; import { cn } from '@/lib/utils'; import { CheckCircleFillIcon, ChevronDownIcon, GlobeIcon, LockIcon, } from './icons'; import { useChatVisibility } from '@/hooks/use-chat-visibility'; export type VisibilityType = 'private' | 'public'; const visibilities: Array<{ id: VisibilityType; label: string; description: string; icon: ReactNode; }> = [ { id: 'private', label: 'Private', description: 'Only you can access this chat', icon: , }, { id: 'public', label: 'Public', description: 'Anyone with the link can access this chat', icon: , }, ]; export function VisibilitySelector({ chatId, className, selectedVisibilityType, }: { chatId: string; selectedVisibilityType: VisibilityType; } & React.ComponentProps) { const [open, setOpen] = useState(false); const { visibilityType, setVisibilityType } = useChatVisibility({ chatId, initialVisibilityType: selectedVisibilityType, }); const selectedVisibility = useMemo( () => visibilities.find((visibility) => visibility.id === visibilityType), [visibilityType], ); return ( {visibilities.map((visibility) => ( { setVisibilityType(visibility.id); setOpen(false); }} className="gap-4 group/item flex flex-row justify-between items-center" data-active={visibility.id === visibilityType} >
{visibility.label} {visibility.description && (
{visibility.description}
)}
))}
); }