import { memo, useMemo } from 'react'; import { useRecoilValue } from 'recoil'; import { supportsFiles, mergeFileConfig, isAgentsEndpoint, EndpointFileConfig, fileConfig as defaultFileConfig, } from 'librechat-data-provider'; import { useGetFileConfig } from '~/data-provider'; import AttachFileMenu from './AttachFileMenu'; import { useChatContext } from '~/Providers'; import { useFileHandling } from '~/hooks'; import AttachFile from './AttachFile'; import FileRow from './FileRow'; import store from '~/store'; function FileFormWrapper({ children, disableInputs, }: { disableInputs: boolean; children?: React.ReactNode; }) { const chatDirection = useRecoilValue(store.chatDirection).toLowerCase(); const { files, setFiles, conversation, setFilesLoading } = useChatContext(); const { endpoint: _endpoint, endpointType } = conversation ?? { endpoint: null }; const isAgents = useMemo(() => isAgentsEndpoint(_endpoint), [_endpoint]); const { handleFileChange, abortUpload, setToolResource } = useFileHandling(); const { data: fileConfig = defaultFileConfig } = useGetFileConfig({ select: (data) => mergeFileConfig(data), }); const isRTL = chatDirection === 'rtl'; const endpointFileConfig = fileConfig.endpoints[_endpoint ?? ''] as | EndpointFileConfig | undefined; const endpointSupportsFiles: boolean = supportsFiles[endpointType ?? _endpoint ?? ''] ?? false; const isUploadDisabled = (disableInputs || endpointFileConfig?.disabled) ?? false; const renderAttachFile = () => { if (isAgents) { return ( ); } if (endpointSupportsFiles && !isUploadDisabled) { return ( ); } return null; }; return ( <>
{children}
} /> {children} {renderAttachFile()} ); } export default memo(FileFormWrapper);