mirror of
https://github.com/supabase/supabase.git
synced 2026-09-09 11:30:17 +08:00
49 lines
1.6 KiB
TypeScript
49 lines
1.6 KiB
TypeScript
import { useQuery } from '@tanstack/react-query'
|
|
import type { components } from 'api-types'
|
|
|
|
import { platformAppKeys } from './keys'
|
|
import { constructHeaders, fetchHandler, handleError } from '@/data/fetchers'
|
|
import { API_URL } from '@/lib/constants'
|
|
import type { ResponseError, UseCustomQueryOptions } from '@/types'
|
|
|
|
export type PlatformAppVariables = {
|
|
slug?: string
|
|
id?: string
|
|
}
|
|
|
|
export type PlatformAppDetail = components['schemas']['GetPlatformAppResponse']
|
|
|
|
export async function getPlatformApp({ slug, id }: PlatformAppVariables, signal?: AbortSignal) {
|
|
if (!slug) throw new Error('slug is required')
|
|
if (!id) throw new Error('id is required')
|
|
|
|
const baseUrl = API_URL?.replace('/platform', '')
|
|
const url = `${baseUrl}/platform/organizations/${slug}/apps/${id}`
|
|
const headers = await constructHeaders()
|
|
const res = await fetchHandler(url, { method: 'GET', headers, signal })
|
|
|
|
if (!res.ok) {
|
|
const body = await res.json().catch(() => ({}))
|
|
handleError(body)
|
|
}
|
|
|
|
return res.json() as Promise<PlatformAppDetail>
|
|
}
|
|
|
|
export type PlatformAppData = Awaited<ReturnType<typeof getPlatformApp>>
|
|
export type PlatformAppError = ResponseError
|
|
|
|
export const usePlatformAppQuery = <TData = PlatformAppData>(
|
|
{ slug, id }: PlatformAppVariables,
|
|
{
|
|
enabled = true,
|
|
...options
|
|
}: UseCustomQueryOptions<PlatformAppData, PlatformAppError, TData> = {}
|
|
) =>
|
|
useQuery<PlatformAppData, PlatformAppError, TData>({
|
|
queryKey: platformAppKeys.detail(slug, id),
|
|
queryFn: ({ signal }) => getPlatformApp({ slug, id }, signal),
|
|
enabled: enabled && typeof slug !== 'undefined' && typeof id !== 'undefined',
|
|
...options,
|
|
})
|