import { InfiniteData, useInfiniteQuery } from '@tanstack/react-query' import { contentKeys } from './keys' import { SNIPPET_PAGE_LIMIT, withSavedStatus } from './sql-folders-query' import { get, handleError } from '@/data/fetchers' import type { ResponseError, UseCustomInfiniteQueryOptions } from '@/types' export type SQLSnippetFolderContentsVariables = { projectRef?: string folderId?: string cursor?: string name?: string sort?: 'name' | 'inserted_at' } export async function getSQLSnippetFolderContents( { projectRef, folderId, cursor, sort, name }: SQLSnippetFolderContentsVariables, signal?: AbortSignal ) { if (typeof projectRef === 'undefined') throw new Error('projectRef is required') if (typeof folderId === 'undefined') throw new Error('folderId is required') const sortOrder = sort === 'name' ? 'asc' : 'desc' const { data, error } = await get('/platform/projects/{ref}/content/folders/{id}', { params: { path: { ref: projectRef, id: folderId }, query: { cursor, limit: SNIPPET_PAGE_LIMIT.toString(), sort_by: sort, sort_order: sortOrder, name, }, }, signal, }) if (error) handleError(error) return { ...data.data, contents: (data.data.contents ?? []).map(withSavedStatus), cursor: data.cursor, } } export type SQLSnippetFolderContentsData = Awaited> export type SQLSnippetFolderContentsError = ResponseError export const useSQLSnippetFolderContentsQuery = ( { projectRef, folderId, name, sort }: Omit, { enabled = true, ...options }: UseCustomInfiniteQueryOptions< SQLSnippetFolderContentsData, SQLSnippetFolderContentsError, InfiniteData, readonly unknown[], string | undefined > = {} ) => useInfiniteQuery({ queryKey: contentKeys.folderContents(projectRef, folderId, { name, sort }), queryFn: ({ signal, pageParam }) => getSQLSnippetFolderContents({ projectRef, folderId, cursor: pageParam, name, sort }, signal), enabled: enabled && typeof projectRef !== 'undefined' && typeof folderId !== 'undefined', initialPageParam: undefined, getNextPageParam(lastPage) { return lastPage.cursor }, ...options, })