| import { useQueryClient } from '@tanstack/react-query'; |
| import { QueryKeys } from 'librechat-data-provider'; |
| import type { BatchFile, TFile } from 'librechat-data-provider'; |
| import { useDeleteFilesMutation } from '~/data-provider'; |
| import useFileDeletion from './useFileDeletion'; |
|
|
| export default function useDeleteFilesFromTable(callback?: () => void) { |
| const queryClient = useQueryClient(); |
| const deletionMutation = useDeleteFilesMutation({ |
| onMutate: async (variables) => { |
| const { files } = variables; |
| if (!files.length) { |
| return new Map<string, BatchFile>(); |
| } |
|
|
| const filesToDeleteMap = files.reduce((map, file) => { |
| map.set(file.file_id, file); |
| return map; |
| }, new Map<string, BatchFile>()); |
|
|
| return { filesToDeleteMap }; |
| }, |
| onSuccess: (data, variables, context) => { |
| console.log('Files deleted'); |
| const { filesToDeleteMap } = context as { filesToDeleteMap: Map<string, BatchFile> }; |
|
|
| queryClient.setQueryData([QueryKeys.files], (oldFiles: TFile[] | undefined) => { |
| const { files } = variables; |
| return files.length |
| ? oldFiles?.filter((file) => !filesToDeleteMap.has(file.file_id)) |
| : oldFiles; |
| }); |
| callback?.(); |
| }, |
| onError: (error) => { |
| console.log('Error deleting files:', error); |
| callback?.(); |
| }, |
| }); |
|
|
| return useFileDeletion({ mutateAsync: deletionMutation.mutateAsync }); |
| } |
|
|