import { useState, useMemo } from 'react'; import { Menu as MenuIcon, Edit as EditIcon, EarthIcon, TextSearch } from 'lucide-react'; import type { TPromptGroup } from 'librechat-data-provider'; import { Button, DropdownMenu, DropdownMenuItem, DropdownMenuGroup, DropdownMenuContent, DropdownMenuTrigger, } from '~/components/ui'; import { useLocalize, useSubmitMessage, useCustomLink, useAuthContext } from '~/hooks'; import VariableDialog from '~/components/Prompts/Groups/VariableDialog'; import PreviewPrompt from '~/components/Prompts/PreviewPrompt'; import ListCard from '~/components/Prompts/Groups/ListCard'; import { detectVariables } from '~/utils'; export default function ChatGroupItem({ group, instanceProjectId, }: { group: TPromptGroup; instanceProjectId?: string; }) { const localize = useLocalize(); const { user } = useAuthContext(); const { submitPrompt } = useSubmitMessage(); const [isPreviewDialogOpen, setPreviewDialogOpen] = useState(false); const [isVariableDialogOpen, setVariableDialogOpen] = useState(false); const onEditClick = useCustomLink(`/d/prompts/${group._id}`); const groupIsGlobal = useMemo( () => instanceProjectId && group.projectIds?.includes(instanceProjectId), [group, instanceProjectId], ); const isOwner = useMemo(() => user?.id === group.author, [user, group]); const onCardClick = () => { const text = group.productionPrompt?.prompt ?? ''; if (!text) { return; } const hasVariables = detectVariables(text); if (hasVariables) { return setVariableDialogOpen(true); } submitPrompt(text); }; return ( <>
{groupIsGlobal && } { e.stopPropagation(); setPreviewDialogOpen(true); }} className="w-full cursor-pointer rounded-lg disabled:cursor-not-allowed dark:text-gray-300 dark:hover:bg-gray-700 dark:focus:bg-gray-700" > {localize('com_ui_preview')} {isOwner && ( { e.stopPropagation(); onEditClick(e); }} > {localize('com_ui_edit')} )}
setVariableDialogOpen(false)} group={group} /> ); }