Files
supabase/studio/hooks/analytics/useDbQuery.tsx
2022-12-22 22:49:00 +08:00

34 lines
1.0 KiB
TypeScript

import { DEFAULT_QUERY_PARAMS } from 'components/interfaces/Reports/Reports.constants'
import {
BaseReportParams,
DbQueryData,
DbQueryHandler,
MetaQueryResponse,
DbQuery,
} from 'components/interfaces/Reports/Reports.types'
import { useStore } from 'hooks'
import useSWR from 'swr'
type UseDbQuery = (sql: DbQuery['sql'], params?: BaseReportParams) => [DbQueryData, DbQueryHandler]
const useDbQuery: UseDbQuery = (sql, params = DEFAULT_QUERY_PARAMS) => {
const { meta } = useStore()
const resolvedSql = typeof sql === 'function' ? sql(params) : sql
const {
data,
error: swrError,
isValidating: isLoading,
mutate,
} = useSWR<MetaQueryResponse>(resolvedSql, async () => await meta.query(resolvedSql), {
revalidateOnFocus: false,
revalidateIfStale: false,
revalidateOnReconnect: false,
dedupingInterval: 2000,
})
const error = swrError || (typeof data === 'object' ? data?.error : '')
return [{ error, data, isLoading, params }, { runQuery: () => mutate() }]
}
export default useDbQuery