mirror of
https://github.com/danny-avila/LibreChat.git
synced 2026-01-26 04:06:12 +01:00
* refactor: Enhance FileContainer with customizable button and container styles, onClick button handling, and type override * refactor: Update file type handling to support partial file objects * refactor: Extract download handling into a custom hook for improved reusability * refactor: Replace LogContent with Stdout component and enhance Attachment rendering for added visibility * feat: Update @librechat/agents to version 2.4.1 for referencing generated files in subsequent code interpreter uses * feat: Add support for tab-separated values (TSV) in mime type handling and improve error logging for regex patterns * chore: Update @librechat/agents to version 2.4.11 for better `session_id` instructions when wanting to persist files between executions * chore: Update @librechat/agents to version 2.4.12 for improved functionality * fix: Enhance argument parsing in useParseArgs to support JSON input and improve code extraction * refactor: Update input handling in useAutoSave to require more than one character before saving to local storage
46 lines
1.5 KiB
TypeScript
46 lines
1.5 KiB
TypeScript
import { memo } from 'react';
|
|
import { imageExtRegex } from 'librechat-data-provider';
|
|
import type { TAttachment, TFile, TAttachmentMetadata } from 'librechat-data-provider';
|
|
import FileContainer from '~/components/Chat/Input/Files/FileContainer';
|
|
import Image from '~/components/Chat/Messages/Content/Image';
|
|
import { useAttachmentLink } from './LogLink';
|
|
|
|
const FileAttachment = memo(({ attachment }: { attachment: TAttachment }) => {
|
|
const { handleDownload } = useAttachmentLink({
|
|
href: attachment.filepath,
|
|
filename: attachment.filename,
|
|
});
|
|
const extension = attachment.filename.split('.').pop();
|
|
|
|
return (
|
|
<FileContainer
|
|
file={attachment}
|
|
onClick={handleDownload}
|
|
overrideType={extension}
|
|
containerClassName="max-w-fit"
|
|
buttonClassName="hover:cursor-pointer hover:bg-surface-secondary active:bg-surface-secondary focus:bg-surface-secondary hover:border-border-heavy active:border-border-heavy"
|
|
/>
|
|
);
|
|
});
|
|
|
|
export default function Attachment({ attachment }: { attachment?: TAttachment }) {
|
|
if (!attachment) {
|
|
return null;
|
|
}
|
|
const { width, height, filepath = null } = attachment as TFile & TAttachmentMetadata;
|
|
const isImage =
|
|
imageExtRegex.test(attachment.filename) && width != null && height != null && filepath != null;
|
|
|
|
if (isImage) {
|
|
return (
|
|
<Image
|
|
altText={attachment.filename}
|
|
imagePath={filepath}
|
|
height={height}
|
|
width={width}
|
|
className="mb-4"
|
|
/>
|
|
);
|
|
}
|
|
return <FileAttachment attachment={attachment} />;
|
|
}
|