import * as Ariakit from '@ariakit/react'; import React, { useRef, useState } from 'react'; import { FileSearch, ImageUpIcon, TerminalSquareIcon } from 'lucide-react'; import { EToolResources } from 'librechat-data-provider'; import { FileUpload, TooltipAnchor, DropdownPopup } from '~/components/ui'; import { AttachmentIcon } from '~/components/svg'; import { useLocalize } from '~/hooks'; import { cn } from '~/utils'; interface AttachFileProps { isRTL: boolean; disabled?: boolean | null; handleFileChange: (event: React.ChangeEvent) => void; setToolResource?: React.Dispatch>; } const AttachFile = ({ isRTL, disabled, setToolResource, handleFileChange }: AttachFileProps) => { const localize = useLocalize(); const isUploadDisabled = disabled ?? false; const inputRef = useRef(null); const [isPopoverActive, setIsPopoverActive] = useState(false); const handleUploadClick = (isImage?: boolean) => { if (!inputRef.current) { return; } inputRef.current.value = ''; inputRef.current.accept = isImage === true ? 'image/*' : ''; inputRef.current.click(); inputRef.current.accept = ''; }; const dropdownItems = [ { label: localize('com_ui_upload_image_input'), onClick: () => { setToolResource?.(undefined); handleUploadClick(true); }, icon: , }, { label: localize('com_ui_upload_file_search'), onClick: () => { setToolResource?.(EToolResources.file_search); handleUploadClick(); }, icon: , }, { label: localize('com_ui_upload_code_files'), onClick: () => { setToolResource?.(EToolResources.execute_code); handleUploadClick(); }, icon: , }, ]; const menuTrigger = (
} id="attach-file-menu-button" description={localize('com_sidepanel_attach_files')} disabled={isUploadDisabled} /> ); return (
); }; export default React.memo(AttachFile);