()
| 526 | } |
| 527 | |
| 528 | export function useDeleteWorkspaceFile() { |
| 529 | const queryClient = useQueryClient() |
| 530 | |
| 531 | return useMutation({ |
| 532 | mutationFn: async ({ workspaceId, fileId }: DeleteFileParams) => |
| 533 | requestJson(deleteWorkspaceFileContract, { |
| 534 | params: { id: workspaceId, fileId }, |
| 535 | }), |
| 536 | onMutate: async ({ workspaceId, fileId }) => { |
| 537 | await queryClient.cancelQueries({ queryKey: workspaceFilesKeys.workspaceLists(workspaceId) }) |
| 538 | |
| 539 | const previousFiles = queryClient.getQueryData<WorkspaceFileRecord[]>( |
| 540 | workspaceFilesKeys.list(workspaceId, 'active') |
| 541 | ) |
| 542 | |
| 543 | if (previousFiles) { |
| 544 | queryClient.setQueryData<WorkspaceFileRecord[]>( |
| 545 | workspaceFilesKeys.list(workspaceId, 'active'), |
| 546 | previousFiles.filter((f) => f.id !== fileId) |
| 547 | ) |
| 548 | } |
| 549 | |
| 550 | return { previousFiles } |
| 551 | }, |
| 552 | onError: (_err, variables, context) => { |
| 553 | if (context?.previousFiles) { |
| 554 | queryClient.setQueryData( |
| 555 | workspaceFilesKeys.list(variables.workspaceId, 'active'), |
| 556 | context.previousFiles |
| 557 | ) |
| 558 | } |
| 559 | logger.error('Failed to delete file') |
| 560 | toast.error(toError(_err).message) |
| 561 | }, |
| 562 | onSuccess: () => { |
| 563 | toast.success('File moved to trash') |
| 564 | }, |
| 565 | onSettled: (_data, _error, variables) => { |
| 566 | queryClient.invalidateQueries({ |
| 567 | queryKey: workspaceFilesKeys.workspaceLists(variables.workspaceId), |
| 568 | }) |
| 569 | queryClient.removeQueries({ |
| 570 | queryKey: workspaceFilesKeys.contentFile(variables.workspaceId, variables.fileId), |
| 571 | }) |
| 572 | queryClient.invalidateQueries({ queryKey: workspaceFilesKeys.storageInfo() }) |
| 573 | }, |
| 574 | }) |
| 575 | } |
| 576 | |
| 577 | export function useRestoreWorkspaceFile() { |
| 578 | const queryClient = useQueryClient() |
no test coverage detected