Files
supabase/apps/studio/data/content/content-delete-mutation.ts
T
Alaister YoungandJoshen Lim f6d9617413 chore: paginate user content (#30675)
* chore: paginate user content

* progress

* loading states

* add load more buttons to private snippets

* working pagination

* fix some types

* always show snippet counts

* support new api parameters

* favorite snippets

* progress

* searching

* paginate root folder

* fix renaming snippets

* fix ts

* removed unused prop

* Shift sharing/unsharing query logic outside of valtio to leverage on RQ only

* Fix invalidation on an unsaved snippet

* Clean up

* Fix

* Clean up

* Update API type

* Update API

* fix duplicate snippets error after moving a snippet

* add currently selected snippet

* Fix unsharing a snippet that has yet to be opened

* i'm dumb

* fix sharing a snippet

* fix sharing and unsharing

* show favorite or shared snippet in list even if it's in another page

* Fix wrong import for debounce

* Fix false positive toast error when creating custom report

* Update API type

* Change create new snippet CTA to link back to /new with skip flag

* Fix saving logs explorer query

* Bump page number

---------

Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
2024-12-19 16:08:14 +08:00

58 lines
1.6 KiB
TypeScript

import { useMutation, UseMutationOptions, useQueryClient } from '@tanstack/react-query'
import { toast } from 'sonner'
import { del, handleError } from 'data/fetchers'
import type { ResponseError } from 'types'
import { contentKeys } from './keys'
type DeleteContentVariables = { projectRef: string; ids: string[] }
export async function deleteContents(
{ projectRef, ids }: DeleteContentVariables,
signal?: AbortSignal
) {
const { data, error } = await del('/platform/projects/{ref}/content', {
headers: { Version: '2' },
params: {
path: { ref: projectRef },
query: { ids },
},
signal,
})
if (error) handleError(error)
return data.map((x) => x.id)
}
type DeleteContentData = Awaited<ReturnType<typeof deleteContents>>
export const useContentDeleteMutation = ({
onSuccess,
onError,
...options
}: Omit<
UseMutationOptions<DeleteContentData, ResponseError, DeleteContentVariables>,
'mutationFn'
> = {}) => {
const queryClient = useQueryClient()
return useMutation<DeleteContentData, ResponseError, DeleteContentVariables>(
(args) => deleteContents(args),
{
async onSuccess(data, variables, context) {
const { projectRef } = variables
await queryClient.invalidateQueries(contentKeys.allContentLists(projectRef))
await onSuccess?.(data, variables, context)
},
async onError(data, variables, context) {
if (onError === undefined) {
toast.error(`Failed to delete contents: ${data.message}`)
} else {
onError(data, variables, context)
}
},
...options,
}
)
}