import { useState, useRef, useMemo } from 'react'; import { MenuIcon, EarthIcon } from 'lucide-react'; import { useNavigate, useParams } from 'react-router-dom'; import { SystemRoles, type TPromptGroup } from 'librechat-data-provider'; import { useDeletePromptGroup, useUpdatePromptGroup } from '~/data-provider'; import { Input, Label, Button, Dialog, DropdownMenu, DialogTrigger, DropdownMenuGroup, DropdownMenuContent, DropdownMenuTrigger, } from '~/components/ui'; import CategoryIcon from '~/components/Prompts/Groups/CategoryIcon'; import DialogTemplate from '~/components/ui/DialogTemplate'; import { RenameButton } from '~/components/Conversations'; import { useLocalize, useAuthContext } from '~/hooks'; import { TrashIcon } from '~/components/svg'; import { cn } from '~/utils/'; export default function DashGroupItem({ group, instanceProjectId, }: { group: TPromptGroup; instanceProjectId?: string; }) { const params = useParams(); const navigate = useNavigate(); const localize = useLocalize(); const { user } = useAuthContext(); const blurTimeoutRef = useRef(); const [nameEditFlag, setNameEditFlag] = useState(false); const [nameInputField, setNameInputField] = useState(group.name); const isOwner = useMemo(() => user?.id === group?.author, [user, group]); const groupIsGlobal = useMemo( () => instanceProjectId && group?.projectIds?.includes(instanceProjectId), [group, instanceProjectId], ); const updateGroup = useUpdatePromptGroup({ onMutate: () => { clearTimeout(blurTimeoutRef.current); setNameEditFlag(false); }, }); const deletePromptGroupMutation = useDeletePromptGroup({ onSuccess: (response, variables) => { if (variables.id === group._id) { navigate('/d/prompts'); } }, }); const cancelRename = () => { setNameEditFlag(false); }; const saveRename = () => { updateGroup.mutate({ payload: { name: nameInputField }, id: group?._id || '' }); }; const handleBlur = () => { blurTimeoutRef.current = setTimeout(() => { cancelRename(); }, 100); }; return (
{ if (nameEditFlag) { return; } navigate(`/d/prompts/${group._id}`, { replace: true }); }} >
{/* */}
{nameEditFlag ? ( <>
{ e.stopPropagation(); }} onChange={(e) => { setNameInputField(e.target.value); }} onKeyDown={(e) => { if (e.key === 'Escape') { cancelRename(); } else if (e.key === 'Enter') { saveRename(); } }} onBlur={handleBlur} />
{localize('com_ui_renaming_var', group.name)}
) : ( <>

{group.name}

{groupIsGlobal && } {(isOwner || user?.role === SystemRoles.ADMIN) && ( <> { e.stopPropagation(); setNameEditFlag(true); }} appendLabel={true} className={cn('m-0 w-full p-2')} />
} selection={{ selectHandler: () => { deletePromptGroupMutation.mutate({ id: group?._id || '' }); }, selectClasses: 'bg-red-600 dark:bg-red-600 hover:bg-red-700 dark:hover:bg-red-800 text-white', selectText: localize('com_ui_delete'), }} />
)}
{group.oneliner ? group.oneliner : group?.productionPrompt?.prompt ?? ''}
)}
); }