Skip to content

Commit f9594d9

Browse files
committed
fix(types): improve types for useDataQuery.ts
1 parent fbcbaa9 commit f9594d9

3 files changed

Lines changed: 21 additions & 6 deletions

File tree

services/data/src/engine/types/Query.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,19 @@ export interface ResolvedResourceQuery extends ResourceQuery {
1818
params?: QueryParameters
1919
}
2020

21-
export type Query = Record<string, ResourceQuery>
21+
export type Query<TQueryResult extends QueryResult = QueryResult> = Record<
22+
keyof TQueryResult,
23+
ResourceQuery
24+
>
2225
export type QueryResult = JsonMap
2326

27+
export type QueryResultData<
28+
TQuery extends Query<TQueryResultData>,
29+
TQueryResultData extends QueryResult = QueryResult
30+
> = {
31+
[K in keyof TQuery]: TQueryResultData
32+
}
33+
2434
export interface QueryOptions {
2535
variables?: QueryVariables
2636
onComplete?: (data: QueryResult) => void

services/data/src/react/hooks/useDataQuery.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ import { useQuery, setLogger } from 'react-query'
33
import type {
44
Query,
55
QueryOptions,
6-
QueryResult,
76
QueryVariables,
7+
QueryResultData
88
} from '../../engine'
99
import type { FetchError } from '../../engine/types/FetchError'
10-
import type { QueryRenderInput, QueryRefetchFunction } from '../../types'
10+
import type { DataQueryResult, QueryRefetchFunction } from '../../types'
1111
import { mergeAndCompareVariables } from './mergeAndCompareVariables'
1212
import { useDataEngine } from './useDataEngine'
1313
import { useStaticInput } from './useStaticInput'
@@ -33,15 +33,18 @@ type QueryState = {
3333
refetchCallback?: (data: any) => void
3434
}
3535

36-
export const useDataQuery = <TQueryResult = QueryResult>(
37-
query: Query,
36+
export const useDataQuery = <
37+
TQueryResultData extends QueryResultData<TQuery>,
38+
TQuery extends Query<TQueryResultData> = Query<TQueryResultData>
39+
>(
40+
query: TQuery,
3841
{
3942
onComplete: userOnSuccess,
4043
onError: userOnError,
4144
variables: initialVariables = {},
4245
lazy: initialLazy = false,
4346
}: QueryOptions = {}
44-
): QueryRenderInput<TQueryResult> => {
47+
): DataQueryResult<TQueryResultData> => {
4548
const [staticQuery] = useStaticInput<Query>(query, {
4649
warn: true,
4750
name: 'query',

services/data/src/types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ export interface QueryRenderInput<TQueryResult = QueryResult>
5454
refetch: QueryRefetchFunction
5555
}
5656

57+
export type DataQueryResult<TQueryResult> = QueryRenderInput<TQueryResult>
58+
5759
export interface MutationState {
5860
engine: DataEngine
5961
called: boolean

0 commit comments

Comments
 (0)