import { useQuery } from '@tanstack/react-query' import { LOGS_TABLES } from '@/components/interfaces/Settings/Logs/Logs.constants' import type { LogData, Logs, LogsEndpointParams, QueryType, } from '@/components/interfaces/Settings/Logs/Logs.types' import { genSingleLogQuery } from '@/components/interfaces/Settings/Logs/Logs.utils' import { get } from '@/data/fetchers' import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled' interface SingleLogHook { data: LogData | undefined error: string | Object | null isLoading: boolean refresh: () => void } type SingleLogParams = { id?: string projectRef: string queryType?: QueryType paramsToMerge?: Partial } function useSingleLog({ projectRef, id, queryType, paramsToMerge, }: SingleLogParams): SingleLogHook { const table = queryType ? LOGS_TABLES[queryType] : undefined const sql = id && table ? genSingleLogQuery(table, id) : '' const params: LogsEndpointParams = { ...paramsToMerge, sql } const enabled = Boolean(id && table) const { logsMetadata } = useIsFeatureEnabled(['logs:metadata']) const { data, error: rcError, isPending, isRefetching, refetch, } = useQuery({ queryKey: ['projects', projectRef, 'single-log', id, queryType], queryFn: async ({ signal }) => { const { data, error } = await get(`/platform/projects/{ref}/analytics/endpoints/logs.all`, { params: { path: { ref: projectRef }, query: params, }, signal, }) if (error) { throw error } return data as unknown as Logs }, enabled, refetchOnWindowFocus: false, refetchOnMount: false, refetchOnReconnect: false, }) let error: null | string | object = rcError ? (rcError as any).message : null const result = data?.result ? data.result[0] : undefined return { data: !!result ? { ...result, metadata: logsMetadata ? result?.metadata : undefined } : undefined, isLoading: (enabled && isPending) || isRefetching, error, refresh: () => refetch(), } } export default useSingleLog