| import React, { useRef } from 'react'; | |
| import { FileUpload, TooltipAnchor, AttachmentIcon } from '@librechat/client'; | |
| import { useLocalize, useFileHandling } from '~/hooks'; | |
| import { cn } from '~/utils'; | |
| const AttachFile = ({ disabled }: { disabled?: boolean | null }) => { | |
| const localize = useLocalize(); | |
| const inputRef = useRef<HTMLInputElement>(null); | |
| const isUploadDisabled = disabled ?? false; | |
| const { handleFileChange } = useFileHandling(); | |
| return ( | |
| <FileUpload ref={inputRef} handleFileChange={handleFileChange}> | |
| <TooltipAnchor | |
| description={localize('com_sidepanel_attach_files')} | |
| id="attach-file" | |
| disabled={isUploadDisabled} | |
| render={ | |
| <button | |
| type="button" | |
| aria-label={localize('com_sidepanel_attach_files')} | |
| disabled={isUploadDisabled} | |
| className={cn( | |
| 'flex size-9 items-center justify-center rounded-full p-1 transition-colors hover:bg-surface-hover focus:outline-none focus:ring-2 focus:ring-primary focus:ring-opacity-50', | |
| )} | |
| onKeyDownCapture={(e) => { | |
| if (!inputRef.current) { | |
| return; | |
| } | |
| if (e.key === 'Enter' || e.key === ' ') { | |
| inputRef.current.value = ''; | |
| inputRef.current.click(); | |
| } | |
| }} | |
| onClick={() => { | |
| if (!inputRef.current) { | |
| return; | |
| } | |
| inputRef.current.value = ''; | |
| inputRef.current.click(); | |
| }} | |
| > | |
| <div className="flex w-full items-center justify-center gap-2"> | |
| <AttachmentIcon /> | |
| </div> | |
| </button> | |
| } | |
| /> | |
| </FileUpload> | |
| ); | |
| }; | |
| export default React.memo(AttachFile); | |