UNPKG

@openapi-qraft/react

Version:

OpenAPI client for React, providing type-safe requests and dynamic TanStack Query React Hooks via a modular, Proxy-based architecture.

46 lines (39 loc) 1.51 kB
import type { QueryClient } from '@tanstack/react-query'; import type { CreateAPIQueryClientOptions } from '../qraftAPIClient.js'; import type { OperationSchema } from './requestFn.js'; import { composeInfiniteQueryKey } from './composeInfiniteQueryKey.js'; import { composeQueryKey } from './composeQueryKey.js'; /** * Calls a query client method with parameters and options, * and automatically composes the `QueryKey` based on the schema and parameters. */ export function callQueryClientMethodWithQueryKey< QFMethod extends QueryKeyMethods, >( qraftOptions: CreateAPIQueryClientOptions, queryClientMethod: QFMethod, schema: OperationSchema, infinite: boolean, args: [...Parameters<(typeof QueryClient.prototype)[QFMethod]>, QueryClient] ): ReturnType<(typeof QueryClient.prototype)[QFMethod]> { const parameters = args[0]; const queryKey = Array.isArray(parameters) ? parameters : infinite ? composeInfiniteQueryKey(schema, parameters) : composeQueryKey(schema, parameters); const queryClient = qraftOptions.queryClient; // @ts-expect-error - Too complex to type return queryClient[queryClientMethod]( queryKey, ...args.slice(1, args.length) ); } type QueryKeyMethod<QFMethod extends keyof typeof QueryClient.prototype> = QFMethod; type QueryKeyMethods = | QueryKeyMethod<'setQueryData'> | QueryKeyMethod<'getQueryData'> | QueryKeyMethod<'getQueryState'> | QueryKeyMethod<'setQueryDefaults'> | QueryKeyMethod<'getQueryDefaults'>;