-
Notifications
You must be signed in to change notification settings - Fork 219
/
Query.tsx
27 lines (22 loc) · 927 Bytes
/
Query.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import type {IfAllNullableKeys, NoInfer} from '@shopify/useful-types';
import type {OperationVariables} from '@apollo/client';
import type {DocumentNode} from 'graphql-typed';
import type {QueryHookResult, QueryHookOptions} from './hooks';
import {useQuery} from './hooks';
interface QueryComponentOptions<Data, Variables extends OperationVariables>
extends QueryHookOptions {
children: (result: QueryHookResult<Data, Variables>) => JSX.Element | null;
query: DocumentNode<Data, Variables>;
}
export function Query<
Data extends {} = any,
Variables extends OperationVariables = OperationVariables,
>({children, query, ...options}: QueryComponentOptions<Data, Variables>) {
const opts = [options] as IfAllNullableKeys<
Variables,
[QueryHookOptions<Data, NoInfer<Variables>>?],
[QueryHookOptions<Data, NoInfer<Variables>>]
>;
const result = useQuery(query, ...opts);
return children(result);
}