Files
supabase/apps/studio/data/read-replicas/replicas-status-query.ts

58 lines
1.9 KiB
TypeScript

import { useQuery } from '@tanstack/react-query'
import { components } from 'api-types'
import { replicaKeys } from './keys'
import { get, handleError } from '@/data/fetchers'
import type { ResponseError, UseCustomQueryOptions } from '@/types'
// [Joshen] Is it possible to import this from the code gen?
// https://github.com/supabase/platform/blob/develop/api/src/routes/platform/projects/ref/databases-statuses.dto.ts#L7
export enum ReplicaInitializationStatus {
'InProgress' = 'in_progress',
'Completed' = 'completed',
'Failed' = 'failed',
}
export type DatabaseStatus = components['schemas']['DatabaseStatusResponse']
export type DatabaseInitEstimations = {
baseBackupDownloadEstimateSeconds: number
walArchiveReplayEstimateSeconds: number
}
export type ReadReplicasStatusesVariables = {
projectRef?: string
}
export async function getReadReplicasStatuses(
{ projectRef }: ReadReplicasStatusesVariables,
signal?: AbortSignal
) {
if (!projectRef) throw new Error('Project ref is required')
const { data, error } = await get(`/platform/projects/{ref}/databases-statuses`, {
params: { path: { ref: projectRef } },
signal,
})
if (error) handleError(error)
return data
}
export type ReadReplicasStatusesData = Awaited<ReturnType<typeof getReadReplicasStatuses>>
export type ReadReplicasStatusesError = ResponseError
export const useReadReplicasStatusesQuery = <TData = ReadReplicasStatusesData>(
{ projectRef }: ReadReplicasStatusesVariables,
{
enabled = true,
...options
}: UseCustomQueryOptions<ReadReplicasStatusesData, ReadReplicasStatusesError, TData> = {}
) => {
return useQuery<ReadReplicasStatusesData, ReadReplicasStatusesError, TData>({
queryKey: replicaKeys.statuses(projectRef),
queryFn: ({ signal }) => getReadReplicasStatuses({ projectRef }, signal),
enabled: enabled && typeof projectRef !== 'undefined',
...options,
})
}