| import { useSetRecoilState } from 'recoil'; | |
| import type { QueryClient } from '@tanstack/react-query'; | |
| import { QueryKeys, Tools } from 'librechat-data-provider'; | |
| import type { TAttachment, EventSubmission, MemoriesResponse } from 'librechat-data-provider'; | |
| import { handleMemoryArtifact } from '~/utils/memory'; | |
| import store from '~/store'; | |
| export default function useAttachmentHandler(queryClient?: QueryClient) { | |
| const setAttachmentsMap = useSetRecoilState(store.messageAttachmentsMap); | |
| return ({ data }: { data: TAttachment; submission: EventSubmission }) => { | |
| const { messageId } = data; | |
| if (queryClient && data?.filepath && !data.filepath.includes('/api/files')) { | |
| queryClient.setQueryData([QueryKeys.files], (oldData: TAttachment[] | undefined) => { | |
| return [data, ...(oldData || [])]; | |
| }); | |
| } | |
| if (queryClient && data.type === Tools.memory && data[Tools.memory]) { | |
| const memoryArtifact = data[Tools.memory]; | |
| queryClient.setQueryData([QueryKeys.memories], (oldData: MemoriesResponse | undefined) => { | |
| if (!oldData) { | |
| return oldData; | |
| } | |
| return handleMemoryArtifact({ memoryArtifact, currentData: oldData }) || oldData; | |
| }); | |
| } | |
| setAttachmentsMap((prevMap) => { | |
| const messageAttachments = | |
| (prevMap as Record<string, TAttachment[] | undefined>)[messageId] || []; | |
| return { | |
| ...prevMap, | |
| [messageId]: [...messageAttachments, data], | |
| }; | |
| }); | |
| }; | |
| } | |