Files
supabase/apps/studio/data/storage/versioning/archived-object-version-delete-mutation.ts
T

64 lines
2.0 KiB
TypeScript

import { useMutation, useQueryClient, type UseMutationOptions } from '@tanstack/react-query'
import { toast } from 'sonner'
import { storageKeys } from '../keys'
import { del, handleError } from '@/data/fetchers'
import type { ResponseError } from '@/types'
export type ArchivedObjectVersionDeleteVariables = {
projectRef: string
bucketId: string
archivedObjectId: string
path: string
versionId: string
/** Deleting the version live at archive time promotes the next one, or removes the object. */
wasCurrentAtArchive: boolean
}
async function deleteArchivedObjectVersion({
projectRef,
bucketId,
archivedObjectId,
path,
versionId,
}: ArchivedObjectVersionDeleteVariables) {
if (!projectRef) throw new Error('projectRef is required')
if (!bucketId) throw new Error('bucketId is required')
if (!archivedObjectId) throw new Error('archivedObjectId is required')
if (!path) throw new Error('path is required')
if (!versionId) throw new Error('versionId is required')
const { error } = await del('/platform/storage/{ref}/buckets/{id}/objects', {
params: { path: { ref: projectRef, id: bucketId } },
body: { paths: [{ path, versionId }] },
})
if (error) handleError(error)
}
export const useArchivedObjectVersionDeleteMutation = ({
onSuccess,
onError,
...options
}: Omit<
UseMutationOptions<void, ResponseError, ArchivedObjectVersionDeleteVariables>,
'mutationFn'
> = {}) => {
const queryClient = useQueryClient()
return useMutation<void, ResponseError, ArchivedObjectVersionDeleteVariables>({
mutationFn: deleteArchivedObjectVersion,
async onSuccess(data, variables, context) {
await queryClient.invalidateQueries({
queryKey: storageKeys.archivedObjects(variables.projectRef, variables.bucketId),
})
await onSuccess?.(data, variables, context)
},
async onError(error, variables, context) {
if (onError === undefined) toast.error(`Failed to delete version: ${error.message}`)
else onError(error, variables, context)
},
...options,
})
}