import React, { useMemo } from 'react'; import { EModelEndpoint, EToolResources } from 'librechat-data-provider'; import { FileSearch, ImageUpIcon, TerminalSquareIcon } from 'lucide-react'; import OGDialogTemplate from '~/components/ui/OGDialogTemplate'; import { useGetEndpointsQuery } from '~/data-provider'; import useLocalize from '~/hooks/useLocalize'; import { OGDialog } from '~/components/ui'; interface DragDropModalProps { onOptionSelect: (option: string | undefined) => void; files: File[]; isVisible: boolean; setShowModal: (showModal: boolean) => void; } interface FileOption { label: string; value?: EToolResources; icon: React.JSX.Element; condition?: boolean; } const DragDropModal = ({ onOptionSelect, setShowModal, files, isVisible }: DragDropModalProps) => { const localize = useLocalize(); const { data: endpointsConfig } = useGetEndpointsQuery(); const capabilities = useMemo( () => endpointsConfig?.[EModelEndpoint.agents]?.capabilities ?? [], [endpointsConfig], ); const options = useMemo(() => { const _options: FileOption[] = [ { label: localize('com_ui_upload_image_input'), value: undefined, icon: , condition: files.every((file) => file.type.startsWith('image/')), }, ]; for (const capability of capabilities) { if (capability === EToolResources.file_search) { _options.push({ label: localize('com_ui_upload_file_search'), value: EToolResources.file_search, icon: , }); } else if (capability === EToolResources.execute_code) { _options.push({ label: localize('com_ui_upload_code_files'), value: EToolResources.execute_code, icon: , }); } } return _options; }, [capabilities, files, localize]); if (!isVisible) { return null; } return ( {options.map( (option, index) => option.condition !== false && ( ), )} } /> ); }; export default DragDropModal;