import { useState, useMemo, memo } from 'react'; import { Menu as MenuIcon, Edit as EditIcon, EarthIcon, TextSearch } from 'lucide-react'; import { DropdownMenu, DropdownMenuItem, DropdownMenuGroup, DropdownMenuContent, DropdownMenuTrigger, } from '@librechat/client'; import { PermissionBits } from 'librechat-data-provider'; import type { TPromptGroup } from 'librechat-data-provider'; import { useLocalize, useSubmitMessage, useCustomLink, useResourcePermissions } 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'; function ChatGroupItem({ group, instanceProjectId, }: { group: TPromptGroup; instanceProjectId?: string; }) { const localize = useLocalize(); const { submitPrompt } = useSubmitMessage(); const [isPreviewDialogOpen, setPreviewDialogOpen] = useState(false); const [isVariableDialogOpen, setVariableDialogOpen] = useState(false); const onEditClick = useCustomLink(`/d/prompts/${group._id}`); const groupIsGlobal = useMemo( () => instanceProjectId != null && group.projectIds?.includes(instanceProjectId), [group, instanceProjectId], ); // Check permissions for the promptGroup const { hasPermission } = useResourcePermissions('promptGroup', group._id || ''); const canEdit = hasPermission(PermissionBits.EDIT); const onCardClick: React.MouseEventHandler = () => { const text = group.productionPrompt?.prompt; if (!text?.trim()) { return; } if (detectVariables(text)) { setVariableDialogOpen(true); return; } submitPrompt(text); }; return ( <> 0 ? group.oneliner : (group.productionPrompt?.prompt ?? '') } >
{groupIsGlobal === true && ( )} { e.stopPropagation(); setPreviewDialogOpen(true); }} className="w-full cursor-pointer rounded-lg text-text-primary hover:bg-surface-hover focus:bg-surface-hover disabled:cursor-not-allowed" > {canEdit && ( { e.stopPropagation(); onEditClick(e); }} > )}
setVariableDialogOpen(false)} group={group} /> ); } export default memo(ChatGroupItem);