@openapi-qraft/react 1.0.0-beta.4 → 1.0.0-beta.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/README.md +7 -0
- package/dist/ServiceOperation.d.ts +15 -3
- package/dist/ServiceOperation.d.ts.map +1 -1
- package/dist/callbacks/useInfiniteQuery.d.ts +0 -6
- package/dist/callbacks/useInfiniteQuery.d.ts.map +1 -1
- package/dist/callbacks/useInfiniteQuery.js +1 -27
- package/dist/callbacks/useInfiniteQuery.js.map +1 -1
- package/dist/callbacks/useSuspenseInfiniteQuery.d.ts +9 -0
- package/dist/callbacks/useSuspenseInfiniteQuery.d.ts.map +1 -0
- package/dist/callbacks/useSuspenseInfiniteQuery.js +25 -0
- package/dist/callbacks/useSuspenseInfiniteQuery.js.map +1 -0
- package/dist/callbacks/useSuspenseQuery.d.ts +9 -0
- package/dist/callbacks/useSuspenseQuery.d.ts.map +1 -0
- package/dist/callbacks/useSuspenseQuery.js +28 -0
- package/dist/callbacks/useSuspenseQuery.js.map +1 -0
- package/dist/lib/shelfMerge.d.ts +7 -0
- package/dist/lib/shelfMerge.d.ts.map +1 -0
- package/dist/lib/shelfMerge.js +28 -0
- package/dist/lib/shelfMerge.js.map +1 -0
- package/package.json +2 -2
- package/src/ServiceOperation.ts +58 -2
- package/src/callbacks/useInfiniteQuery.ts +1 -36
- package/src/callbacks/useSuspenseInfiniteQuery.ts +60 -0
- package/src/callbacks/useSuspenseQuery.ts +64 -0
- package/src/{callbacks → lib}/shelfMerge.test.ts +1 -1
- package/src/lib/shelfMerge.ts +35 -0
- package/src/qraftAPIClient.test.tsx +134 -2
package/CHANGELOG.md
CHANGED
package/README.md
CHANGED
|
@@ -318,6 +318,13 @@ infiniteQuery.fetchNextPage();
|
|
|
318
318
|
infiniteQuery.fetchPreviousPage();
|
|
319
319
|
```
|
|
320
320
|
|
|
321
|
+
### Suspense Queries
|
|
322
|
+
|
|
323
|
+
Supported Suspense Queries are:
|
|
324
|
+
|
|
325
|
+
- [useSuspenseQuery 🔗](https://tanstack.com/query/latest/docs/framework/react/reference/useSuspenseQuery)
|
|
326
|
+
- [useSuspenseInfiniteQuery 🔗](https://tanstack.com/query/latest/docs/framework/react/reference/useSuspenseInfiniteQuery)
|
|
327
|
+
|
|
321
328
|
## Contributing
|
|
322
329
|
|
|
323
330
|
Contributions are welcome! If you have suggestions or want to improve `@openapi-qraft/react`, please feel free to submit
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { DefaultError, InfiniteData,
|
|
2
|
-
import
|
|
1
|
+
import { DefaultError, InfiniteData, InfiniteQueryPageParamsOptions, NoInfer, QueryClient, SetDataOptions, Updater } from '@tanstack/query-core';
|
|
2
|
+
import { DefinedInitialDataInfiniteOptions, DefinedInitialDataOptions, DefinedUseInfiniteQueryResult, DefinedUseQueryResult, UndefinedInitialDataInfiniteOptions, UndefinedInitialDataOptions, UseInfiniteQueryResult, UseMutationOptions, UseMutationResult, UseQueryResult, UseSuspenseInfiniteQueryOptions, UseSuspenseInfiniteQueryResult, UseSuspenseQueryOptions, UseSuspenseQueryResult } from '@tanstack/react-query';
|
|
3
3
|
export type ServiceOperationQueryKey<S extends {
|
|
4
4
|
url: string;
|
|
5
5
|
}, T> = [
|
|
@@ -18,7 +18,7 @@ export type ServiceOperationMutationKey<S extends Record<'url' | 'method', strin
|
|
|
18
18
|
export interface ServiceOperationQuery<TSchema extends {
|
|
19
19
|
url: string;
|
|
20
20
|
method: string;
|
|
21
|
-
}, TData, TParams, TError = DefaultError> extends ServiceOperationUseQuery<TSchema, TData, TParams, TError>, ServiceOperationUseInfiniteQuery<TSchema, TData, TParams, TError>, ServiceOperationQueryFn<TSchema, TData, TParams>, ServiceOperationGetQueryData<TData, TParams>, ServiceOperationGetInfiniteQueryData<TData, TParams>, ServiceOperationSetQueryData<TData, TParams>, ServiceOperationSetInfiniteQueryData<TData, TParams> {
|
|
21
|
+
}, TData, TParams, TError = DefaultError> extends ServiceOperationUseQuery<TSchema, TData, TParams, TError>, ServiceOperationUseInfiniteQuery<TSchema, TData, TParams, TError>, ServiceOperationUseSuspenseQueryQuery<TSchema, TData, TParams, TError>, ServiceOperationUseSuspenseInfiniteQuery<TSchema, TData, TParams, TError>, ServiceOperationQueryFn<TSchema, TData, TParams>, ServiceOperationGetQueryData<TData, TParams>, ServiceOperationGetInfiniteQueryData<TData, TParams>, ServiceOperationSetQueryData<TData, TParams>, ServiceOperationSetInfiniteQueryData<TData, TParams> {
|
|
22
22
|
schema: TSchema;
|
|
23
23
|
}
|
|
24
24
|
interface ServiceOperationUseQuery<TSchema extends {
|
|
@@ -40,6 +40,18 @@ interface ServiceOperationUseInfiniteQuery<TSchema extends {
|
|
|
40
40
|
useInfiniteQuery<TPageParam extends TParams>(params: TParams, options: Omit<UndefinedInitialDataInfiniteOptions<TData, TError, InfiniteData<TData>, ServiceOperationInfiniteQueryKey<TSchema, TParams> | readonly [...ServiceOperationInfiniteQueryKey<TSchema, TParams>], PartialParams<TPageParam>>, 'queryKey' | 'getPreviousPageParam' | 'getNextPageParam' | 'initialPageParam'> & InfiniteQueryPageParamsOptions<TData, PartialParams<TPageParam>>, queryClient?: QueryClient): UseInfiniteQueryResult<InfiniteData<TData>, TError | Error>;
|
|
41
41
|
useInfiniteQuery<TPageParam extends TParams>(params: TParams, options: Omit<DefinedInitialDataInfiniteOptions<TData, TError, InfiniteData<TData>, ServiceOperationInfiniteQueryKey<TSchema, TParams> | readonly [...ServiceOperationInfiniteQueryKey<TSchema, TParams>], PartialParams<TPageParam>>, 'queryKey' | 'getPreviousPageParam' | 'getNextPageParam' | 'initialPageParam'> & InfiniteQueryPageParamsOptions<TData, PartialParams<TPageParam>>, queryClient?: QueryClient): DefinedUseInfiniteQueryResult<InfiniteData<TData>, TError | Error>;
|
|
42
42
|
}
|
|
43
|
+
interface ServiceOperationUseSuspenseInfiniteQuery<TSchema extends {
|
|
44
|
+
url: string;
|
|
45
|
+
method: string;
|
|
46
|
+
}, TData, TParams = {}, TError = DefaultError> {
|
|
47
|
+
useSuspenseInfiniteQuery<TPageParam extends TParams>(params: TParams, options: Omit<UseSuspenseInfiniteQueryOptions<TData, TError, InfiniteData<TData>, TData, ServiceOperationInfiniteQueryKey<TSchema, TParams> | readonly [...ServiceOperationInfiniteQueryKey<TSchema, TParams>], PartialParams<TPageParam>>, 'queryKey' | 'getPreviousPageParam' | 'getNextPageParam' | 'initialPageParam'> & InfiniteQueryPageParamsOptions<TData, PartialParams<TPageParam>>, queryClient?: QueryClient): UseSuspenseInfiniteQueryResult<InfiniteData<TData>, TError | Error>;
|
|
48
|
+
}
|
|
49
|
+
interface ServiceOperationUseSuspenseQueryQuery<TSchema extends {
|
|
50
|
+
url: string;
|
|
51
|
+
method: string;
|
|
52
|
+
}, TData, TParams = {}, TError = DefaultError> {
|
|
53
|
+
useSuspenseQuery(params: TParams, options?: Omit<UseSuspenseQueryOptions<TData, TError, TData, ServiceOperationQueryKey<TSchema, TParams> | readonly [...ServiceOperationQueryKey<TSchema, TParams>]>, 'queryKey'>, queryClient?: QueryClient): UseSuspenseQueryResult<TData, TError | Error>;
|
|
54
|
+
}
|
|
43
55
|
export interface ServiceOperationMutation<TSchema extends {
|
|
44
56
|
url: string;
|
|
45
57
|
method: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ServiceOperation.d.ts","sourceRoot":"","sources":["../src/ServiceOperation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,
|
|
1
|
+
{"version":3,"file":"ServiceOperation.d.ts","sourceRoot":"","sources":["../src/ServiceOperation.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,10 +4,4 @@ import type { QraftClientOptions } from '../qraftAPIClient.js';
|
|
|
4
4
|
import type { RequestClientSchema } from '../RequestClient.js';
|
|
5
5
|
import { ServiceOperationQuery } from '../ServiceOperation.js';
|
|
6
6
|
export declare const useInfiniteQuery: <TQueryFnData, TError = DefaultError, TData = InfiniteData<TQueryFnData>>(qraftOptions: QraftClientOptions | undefined, schema: RequestClientSchema, args: Parameters<ServiceOperationQuery<RequestClientSchema, unknown, unknown>['useInfiniteQuery']>) => UseInfiniteQueryResult<TData, TError>;
|
|
7
|
-
/**
|
|
8
|
-
* Merges objects with provided depth
|
|
9
|
-
* @param depth
|
|
10
|
-
* @param args
|
|
11
|
-
*/
|
|
12
|
-
export declare function shelfMerge<T>(depth?: number, ...args: T[]): T;
|
|
13
7
|
//# sourceMappingURL=useInfiniteQuery.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useInfiniteQuery.d.ts","sourceRoot":"","sources":["../../src/callbacks/useInfiniteQuery.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAEL,sBAAsB,EACvB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"useInfiniteQuery.d.ts","sourceRoot":"","sources":["../../src/callbacks/useInfiniteQuery.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAEL,sBAAsB,EACvB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,eAAO,MAAM,gBAAgB,EAAE,CAC7B,YAAY,EACZ,MAAM,GAAG,YAAY,EACrB,KAAK,GAAG,YAAY,CAAC,YAAY,CAAC,EAElC,YAAY,EAAE,kBAAkB,GAAG,SAAS,EAC5C,MAAM,EAAE,mBAAmB,EAC3B,IAAI,EAAE,UAAU,CACd,qBAAqB,CACnB,mBAAmB,EACnB,OAAO,EACP,OAAO,CACR,CAAC,kBAAkB,CAAC,CACtB,KACE,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAwBxC,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { useContext } from 'react';
|
|
3
3
|
import { useInfiniteQuery as useInfiniteQueryBase, } from '@tanstack/react-query';
|
|
4
|
+
import { shelfMerge } from '../lib/shelfMerge.js';
|
|
4
5
|
import { QraftContext } from '../QraftContext.js';
|
|
5
6
|
export const useInfiniteQuery = (qraftOptions, schema, args) => {
|
|
6
7
|
const [params, options, ...restArgs] = args;
|
|
@@ -21,31 +22,4 @@ export const useInfiniteQuery = (qraftOptions, schema, args) => {
|
|
|
21
22
|
},
|
|
22
23
|
}, ...restArgs);
|
|
23
24
|
};
|
|
24
|
-
/**
|
|
25
|
-
* Merges objects with provided depth
|
|
26
|
-
* @param depth
|
|
27
|
-
* @param args
|
|
28
|
-
*/
|
|
29
|
-
export function shelfMerge(depth = 2, ...args) {
|
|
30
|
-
return args.reduce((acc, arg) => {
|
|
31
|
-
if (!arg || typeof arg !== 'object')
|
|
32
|
-
return acc;
|
|
33
|
-
Object.entries(arg).forEach(([key, value]) => {
|
|
34
|
-
if (typeof value !== 'object') {
|
|
35
|
-
acc[key] = value;
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
if (Array.isArray(value)) {
|
|
39
|
-
acc[key] = value;
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
|
-
if (depth > 1) {
|
|
43
|
-
acc[key] = shelfMerge(depth - 1, acc[key], value);
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
acc[key] = value;
|
|
47
|
-
});
|
|
48
|
-
return acc;
|
|
49
|
-
}, {});
|
|
50
|
-
}
|
|
51
25
|
//# sourceMappingURL=useInfiniteQuery.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useInfiniteQuery.js","sourceRoot":"","sources":["../../src/callbacks/useInfiniteQuery.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAGnC,OAAO,EACL,gBAAgB,IAAI,oBAAoB,GAEzC,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"useInfiniteQuery.js","sourceRoot":"","sources":["../../src/callbacks/useInfiniteQuery.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAGnC,OAAO,EACL,gBAAgB,IAAI,oBAAoB,GAEzC,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIlD,MAAM,CAAC,MAAM,gBAAgB,GAcgB,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;IAC1E,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC;IAE5C,MAAM,aAAa,GAAG,UAAU,CAAC,YAAY,EAAE,OAAO,IAAI,YAAY,CAAC;QACrE,EAAE,aAAa,CAAC;IAElB,IAAI,CAAC,aAAa;QAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAE5E,OAAO,oBAAoB,CACzB;QACE,GAAG,OAAO;QACV,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,MAAe,CAAU;QACzE,OAAO,EACL,OAAO,EAAE,OAAO;YAChB,UAAU,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE;gBAC9D,OAAO,aAAa,CAAC,MAAM,EAAE;oBAC3B,UAAU,EAAE,UAAU,CAAC,CAAC,EAAE,WAAW,EAAE,SAAS,CAAU;oBAC1D,MAAM;oBACN,IAAI;iBACL,CAAC,CAAC;YACL,CAAC;KACJ,EACD,GAAG,QAAQ,CACH,CAAC;AACb,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { DefaultError, InfiniteData } from '@tanstack/query-core';
|
|
2
|
+
import { UseSuspenseInfiniteQueryResult } from '@tanstack/react-query';
|
|
3
|
+
import type { QraftClientOptions } from '../qraftAPIClient.js';
|
|
4
|
+
import type { RequestClientSchema } from '../RequestClient.js';
|
|
5
|
+
import { ServiceOperationQuery, ServiceOperationQueryKey } from '../ServiceOperation.js';
|
|
6
|
+
export declare const useSuspenseInfiniteQuery: <TQueryFnData, TError = DefaultError, TData = InfiniteData<TQueryFnData>>(qraftOptions: QraftClientOptions | undefined, schema: RequestClientSchema, args: Parameters<ServiceOperationQuery<RequestClientSchema, unknown, unknown>['useSuspenseInfiniteQuery']>) => UseSuspenseInfiniteQueryResult<TData, TError> & {
|
|
7
|
+
queryKey: ServiceOperationQueryKey<RequestClientSchema, unknown>;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=useSuspenseInfiniteQuery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSuspenseInfiniteQuery.d.ts","sourceRoot":"","sources":["../../src/callbacks/useSuspenseInfiniteQuery.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAEL,8BAA8B,EAC/B,MAAM,uBAAuB,CAAC;AAG/B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACzB,MAAM,wBAAwB,CAAC;AAEhC,eAAO,MAAM,wBAAwB,EAAE,CACrC,YAAY,EACZ,MAAM,GAAG,YAAY,EACrB,KAAK,GAAG,YAAY,CAAC,YAAY,CAAC,EAElC,YAAY,EAAE,kBAAkB,GAAG,SAAS,EAC5C,MAAM,EAAE,mBAAmB,EAC3B,IAAI,EAAE,UAAU,CACd,qBAAqB,CACnB,mBAAmB,EACnB,OAAO,EACP,OAAO,CACR,CAAC,0BAA0B,CAAC,CAC9B,KACE,8BAA8B,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG;IACnD,QAAQ,EAAE,wBAAwB,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;CAyBlE,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useContext } from 'react';
|
|
3
|
+
import { useSuspenseInfiniteQuery as useSuspenseInfiniteQueryTanstack, } from '@tanstack/react-query';
|
|
4
|
+
import { shelfMerge } from '../lib/shelfMerge.js';
|
|
5
|
+
import { QraftContext } from '../QraftContext.js';
|
|
6
|
+
export const useSuspenseInfiniteQuery = (qraftOptions, schema, args) => {
|
|
7
|
+
const [params, options, ...restArgs] = args;
|
|
8
|
+
const requestClient = useContext(qraftOptions?.context ?? QraftContext)
|
|
9
|
+
?.requestClient;
|
|
10
|
+
if (!requestClient)
|
|
11
|
+
throw new Error(`QraftContext.requestClient not found`);
|
|
12
|
+
return useSuspenseInfiniteQueryTanstack({
|
|
13
|
+
...options,
|
|
14
|
+
queryKey: [{ url: schema.url, infinite: true }, params],
|
|
15
|
+
queryFn: options?.queryFn ??
|
|
16
|
+
function ({ queryKey: [, queryParams], signal, meta, pageParam }) {
|
|
17
|
+
return requestClient(schema, {
|
|
18
|
+
parameters: shelfMerge(2, queryParams, pageParam),
|
|
19
|
+
signal,
|
|
20
|
+
meta,
|
|
21
|
+
});
|
|
22
|
+
},
|
|
23
|
+
}, ...restArgs);
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=useSuspenseInfiniteQuery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSuspenseInfiniteQuery.js","sourceRoot":"","sources":["../../src/callbacks/useSuspenseInfiniteQuery.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAGnC,OAAO,EACL,wBAAwB,IAAI,gCAAgC,GAE7D,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAOlD,MAAM,CAAC,MAAM,wBAAwB,GAgBjC,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;IACjC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC;IAE5C,MAAM,aAAa,GAAG,UAAU,CAAC,YAAY,EAAE,OAAO,IAAI,YAAY,CAAC;QACrE,EAAE,aAAa,CAAC;IAElB,IAAI,CAAC,aAAa;QAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAE5E,OAAO,gCAAgC,CACrC;QACE,GAAG,OAAO;QACV,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,MAAe,CAAU;QACzE,OAAO,EACL,OAAO,EAAE,OAAO;YAChB,UAAU,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE;gBAC9D,OAAO,aAAa,CAAC,MAAM,EAAE;oBAC3B,UAAU,EAAE,UAAU,CAAC,CAAC,EAAE,WAAW,EAAE,SAAS,CAAU;oBAC1D,MAAM;oBACN,IAAI;iBACL,CAAC,CAAC;YACL,CAAC;KACJ,EACD,GAAG,QAAQ,CACH,CAAC;AACb,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { DefaultError } from '@tanstack/query-core';
|
|
2
|
+
import { UseQueryResult } from '@tanstack/react-query';
|
|
3
|
+
import type { QraftClientOptions } from '../qraftAPIClient.js';
|
|
4
|
+
import type { RequestClientSchema } from '../RequestClient.js';
|
|
5
|
+
import { ServiceOperationQuery, ServiceOperationQueryKey } from '../ServiceOperation.js';
|
|
6
|
+
export declare const useSuspenseQuery: <TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData>(qraftOptions: QraftClientOptions | undefined, schema: RequestClientSchema, args: Parameters<ServiceOperationQuery<RequestClientSchema, unknown, unknown>['useSuspenseQuery']>) => UseQueryResult<TData, TError> & {
|
|
7
|
+
queryKey: ServiceOperationQueryKey<RequestClientSchema, unknown>;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=useSuspenseQuery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSuspenseQuery.d.ts","sourceRoot":"","sources":["../../src/callbacks/useSuspenseQuery.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EACL,cAAc,EAEf,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACzB,MAAM,wBAAwB,CAAC;AAEhC,eAAO,MAAM,gBAAgB,EAAE,CAC7B,YAAY,GAAG,OAAO,EACtB,MAAM,GAAG,YAAY,EACrB,KAAK,GAAG,YAAY,EAEpB,YAAY,EAAE,kBAAkB,GAAG,SAAS,EAC5C,MAAM,EAAE,mBAAmB,EAC3B,IAAI,EAAE,UAAU,CACd,qBAAqB,CACnB,mBAAmB,EACnB,OAAO,EACP,OAAO,CACR,CAAC,kBAAkB,CAAC,CACtB,KACE,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG;IACnC,QAAQ,EAAE,wBAAwB,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;CA8BlE,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useContext } from 'react';
|
|
3
|
+
import { useSuspenseQuery as useSuspenseQueryTanstack, } from '@tanstack/react-query';
|
|
4
|
+
import { QraftContext } from '../QraftContext.js';
|
|
5
|
+
export const useSuspenseQuery = (qraftOptions, schema, args) => {
|
|
6
|
+
const [params, options, ...restArgs] = args;
|
|
7
|
+
const requestClient = useContext(qraftOptions?.context ?? QraftContext)
|
|
8
|
+
?.requestClient;
|
|
9
|
+
if (!requestClient)
|
|
10
|
+
throw new Error(`QraftContext.requestClient not found`);
|
|
11
|
+
const queryKey = [
|
|
12
|
+
{ url: schema.url },
|
|
13
|
+
params,
|
|
14
|
+
];
|
|
15
|
+
return useSuspenseQueryTanstack({
|
|
16
|
+
...options,
|
|
17
|
+
queryKey,
|
|
18
|
+
queryFn: options?.queryFn ??
|
|
19
|
+
function ({ queryKey: [, queryParams], signal, meta }) {
|
|
20
|
+
return requestClient(schema, {
|
|
21
|
+
parameters: queryParams,
|
|
22
|
+
signal,
|
|
23
|
+
meta,
|
|
24
|
+
});
|
|
25
|
+
},
|
|
26
|
+
}, ...restArgs);
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=useSuspenseQuery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSuspenseQuery.js","sourceRoot":"","sources":["../../src/callbacks/useSuspenseQuery.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAGnC,OAAO,EAEL,gBAAgB,IAAI,wBAAwB,GAC7C,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAOlD,MAAM,CAAC,MAAM,gBAAgB,GAgBzB,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;IACjC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC;IAE5C,MAAM,aAAa,GAAG,UAAU,CAAC,YAAY,EAAE,OAAO,IAAI,YAAY,CAAC;QACrE,EAAE,aAAa,CAAC;IAElB,IAAI,CAAC,aAAa;QAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAE5E,MAAM,QAAQ,GAA2D;QACvE,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE;QACnB,MAAM;KACP,CAAC;IAEF,OAAO,wBAAwB,CAC7B;QACE,GAAG,OAAO;QACV,QAAQ;QACR,OAAO,EACL,OAAO,EAAE,OAAO;YAChB,UAAU,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE;gBACnD,OAAO,aAAa,CAAC,MAAM,EAAE;oBAC3B,UAAU,EAAE,WAAoB;oBAChC,MAAM;oBACN,IAAI;iBACL,CAAC,CAAC;YACL,CAAC;KACJ,EACD,GAAG,QAAQ,CACH,CAAC;AACb,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shelfMerge.d.ts","sourceRoot":"","sources":["../../src/lib/shelfMerge.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,KAAK,SAAI,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CA6BxD"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Merges objects with provided depth
|
|
3
|
+
* @param depth
|
|
4
|
+
* @param args
|
|
5
|
+
*/
|
|
6
|
+
export function shelfMerge(depth = 2, ...args) {
|
|
7
|
+
return args.reduce((acc, arg) => {
|
|
8
|
+
if (!arg || typeof arg !== 'object')
|
|
9
|
+
return acc;
|
|
10
|
+
Object.entries(arg).forEach(([key, value]) => {
|
|
11
|
+
if (typeof value !== 'object') {
|
|
12
|
+
acc[key] = value;
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
if (Array.isArray(value)) {
|
|
16
|
+
acc[key] = value;
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
if (depth > 1) {
|
|
20
|
+
acc[key] = shelfMerge(depth - 1, acc[key], value);
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
acc[key] = value;
|
|
24
|
+
});
|
|
25
|
+
return acc;
|
|
26
|
+
}, {});
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=shelfMerge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shelfMerge.js","sourceRoot":"","sources":["../../src/lib/shelfMerge.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAI,KAAK,GAAG,CAAC,EAAE,GAAG,IAAS;IACnD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC9B,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,GAAG,CAAC;QAEhD,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,GAAG,CAAC,GAAY,CAAC,GAAG,KAAc,CAAC;gBACnC,OAAO;YACT,CAAC;YAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,GAAG,CAAC,GAAY,CAAC,GAAG,KAAc,CAAC;gBACnC,OAAO;YACT,CAAC;YAED,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACd,GAAG,CAAC,GAAY,CAAC,GAAG,UAAU,CAC5B,KAAK,GAAG,CAAC,EACT,GAAG,CAAC,GAAY,CAAC,EACjB,KAAK,CACG,CAAC;gBACX,OAAO;YACT,CAAC;YAED,GAAG,CAAC,GAAY,CAAC,GAAG,KAAc,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAO,CAAC,CAAC;AACd,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openapi-qraft/react",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
3
|
+
"version": "1.0.0-beta.5",
|
|
4
4
|
"description": "API client for React, providing type-safe requests and dynamic Tanstack Query React Hooks via a modular, Proxy-based architecture.",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"build": "rimraf dist/ && tsc --project tsconfig.build.json",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"type": "module",
|
|
14
14
|
"sideEffects": false,
|
|
15
15
|
"devDependencies": {
|
|
16
|
-
"@openapi-qraft/cli": "~1.0.0-beta.
|
|
16
|
+
"@openapi-qraft/cli": "~1.0.0-beta.3",
|
|
17
17
|
"@openapi-qraft/openapi-typescript": "^1.0.0-beta.1",
|
|
18
18
|
"@tanstack/react-query": "^5.17.3",
|
|
19
19
|
"@testing-library/jest-dom": "^5.17.0",
|
package/src/ServiceOperation.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
DefaultError,
|
|
3
3
|
InfiniteData,
|
|
4
|
-
QueryClient,
|
|
5
4
|
InfiniteQueryPageParamsOptions,
|
|
6
5
|
NoInfer,
|
|
6
|
+
QueryClient,
|
|
7
7
|
SetDataOptions,
|
|
8
8
|
Updater,
|
|
9
9
|
} from '@tanstack/query-core';
|
|
10
|
-
import
|
|
10
|
+
import {
|
|
11
11
|
DefinedInitialDataInfiniteOptions,
|
|
12
12
|
DefinedInitialDataOptions,
|
|
13
13
|
DefinedUseInfiniteQueryResult,
|
|
@@ -18,6 +18,10 @@ import type {
|
|
|
18
18
|
UseMutationOptions,
|
|
19
19
|
UseMutationResult,
|
|
20
20
|
UseQueryResult,
|
|
21
|
+
UseSuspenseInfiniteQueryOptions,
|
|
22
|
+
UseSuspenseInfiniteQueryResult,
|
|
23
|
+
UseSuspenseQueryOptions,
|
|
24
|
+
UseSuspenseQueryResult,
|
|
21
25
|
} from '@tanstack/react-query';
|
|
22
26
|
|
|
23
27
|
export type ServiceOperationQueryKey<S extends { url: string }, T> = [
|
|
@@ -42,6 +46,8 @@ export interface ServiceOperationQuery<
|
|
|
42
46
|
TError = DefaultError,
|
|
43
47
|
> extends ServiceOperationUseQuery<TSchema, TData, TParams, TError>,
|
|
44
48
|
ServiceOperationUseInfiniteQuery<TSchema, TData, TParams, TError>,
|
|
49
|
+
ServiceOperationUseSuspenseQueryQuery<TSchema, TData, TParams, TError>,
|
|
50
|
+
ServiceOperationUseSuspenseInfiniteQuery<TSchema, TData, TParams, TError>,
|
|
45
51
|
ServiceOperationQueryFn<TSchema, TData, TParams>,
|
|
46
52
|
ServiceOperationGetQueryData<TData, TParams>,
|
|
47
53
|
ServiceOperationGetInfiniteQueryData<TData, TParams>,
|
|
@@ -144,6 +150,56 @@ interface ServiceOperationUseInfiniteQuery<
|
|
|
144
150
|
): DefinedUseInfiniteQueryResult<InfiniteData<TData>, TError | Error>;
|
|
145
151
|
}
|
|
146
152
|
|
|
153
|
+
interface ServiceOperationUseSuspenseInfiniteQuery<
|
|
154
|
+
TSchema extends { url: string; method: string },
|
|
155
|
+
TData,
|
|
156
|
+
TParams = {},
|
|
157
|
+
TError = DefaultError,
|
|
158
|
+
> {
|
|
159
|
+
useSuspenseInfiniteQuery<TPageParam extends TParams>(
|
|
160
|
+
params: TParams,
|
|
161
|
+
options: Omit<
|
|
162
|
+
UseSuspenseInfiniteQueryOptions<
|
|
163
|
+
TData,
|
|
164
|
+
TError,
|
|
165
|
+
InfiniteData<TData>,
|
|
166
|
+
TData,
|
|
167
|
+
| ServiceOperationInfiniteQueryKey<TSchema, TParams>
|
|
168
|
+
| readonly [...ServiceOperationInfiniteQueryKey<TSchema, TParams>],
|
|
169
|
+
PartialParams<TPageParam>
|
|
170
|
+
>,
|
|
171
|
+
| 'queryKey'
|
|
172
|
+
| 'getPreviousPageParam'
|
|
173
|
+
| 'getNextPageParam'
|
|
174
|
+
| 'initialPageParam'
|
|
175
|
+
> &
|
|
176
|
+
InfiniteQueryPageParamsOptions<TData, PartialParams<TPageParam>>,
|
|
177
|
+
queryClient?: QueryClient
|
|
178
|
+
): UseSuspenseInfiniteQueryResult<InfiniteData<TData>, TError | Error>;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
interface ServiceOperationUseSuspenseQueryQuery<
|
|
182
|
+
TSchema extends { url: string; method: string },
|
|
183
|
+
TData,
|
|
184
|
+
TParams = {},
|
|
185
|
+
TError = DefaultError,
|
|
186
|
+
> {
|
|
187
|
+
useSuspenseQuery(
|
|
188
|
+
params: TParams,
|
|
189
|
+
options?: Omit<
|
|
190
|
+
UseSuspenseQueryOptions<
|
|
191
|
+
TData,
|
|
192
|
+
TError,
|
|
193
|
+
TData,
|
|
194
|
+
| ServiceOperationQueryKey<TSchema, TParams>
|
|
195
|
+
| readonly [...ServiceOperationQueryKey<TSchema, TParams>]
|
|
196
|
+
>,
|
|
197
|
+
'queryKey'
|
|
198
|
+
>,
|
|
199
|
+
queryClient?: QueryClient
|
|
200
|
+
): UseSuspenseQueryResult<TData, TError | Error>;
|
|
201
|
+
}
|
|
202
|
+
|
|
147
203
|
export interface ServiceOperationMutation<
|
|
148
204
|
TSchema extends { url: string; method: string },
|
|
149
205
|
TBody,
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
UseInfiniteQueryResult,
|
|
9
9
|
} from '@tanstack/react-query';
|
|
10
10
|
|
|
11
|
+
import { shelfMerge } from '../lib/shelfMerge.js';
|
|
11
12
|
import type { QraftClientOptions } from '../qraftAPIClient.js';
|
|
12
13
|
import { QraftContext } from '../QraftContext.js';
|
|
13
14
|
import type { RequestClientSchema } from '../RequestClient.js';
|
|
@@ -52,39 +53,3 @@ export const useInfiniteQuery: <
|
|
|
52
53
|
...restArgs
|
|
53
54
|
) as never;
|
|
54
55
|
};
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* Merges objects with provided depth
|
|
58
|
-
* @param depth
|
|
59
|
-
* @param args
|
|
60
|
-
*/
|
|
61
|
-
export function shelfMerge<T>(depth = 2, ...args: T[]): T {
|
|
62
|
-
return args.reduce((acc, arg) => {
|
|
63
|
-
if (!arg || typeof arg !== 'object') return acc;
|
|
64
|
-
|
|
65
|
-
Object.entries(arg).forEach(([key, value]) => {
|
|
66
|
-
if (typeof value !== 'object') {
|
|
67
|
-
acc[key as never] = value as never;
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
if (Array.isArray(value)) {
|
|
72
|
-
acc[key as never] = value as never;
|
|
73
|
-
return;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
if (depth > 1) {
|
|
77
|
-
acc[key as never] = shelfMerge(
|
|
78
|
-
depth - 1,
|
|
79
|
-
acc[key as never],
|
|
80
|
-
value
|
|
81
|
-
) as never;
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
acc[key as never] = value as never;
|
|
86
|
-
});
|
|
87
|
-
|
|
88
|
-
return acc;
|
|
89
|
-
}, {} as T);
|
|
90
|
-
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { useContext } from 'react';
|
|
4
|
+
|
|
5
|
+
import type { DefaultError, InfiniteData } from '@tanstack/query-core';
|
|
6
|
+
import {
|
|
7
|
+
useSuspenseInfiniteQuery as useSuspenseInfiniteQueryTanstack,
|
|
8
|
+
UseSuspenseInfiniteQueryResult,
|
|
9
|
+
} from '@tanstack/react-query';
|
|
10
|
+
|
|
11
|
+
import { shelfMerge } from '../lib/shelfMerge.js';
|
|
12
|
+
import type { QraftClientOptions } from '../qraftAPIClient.js';
|
|
13
|
+
import { QraftContext } from '../QraftContext.js';
|
|
14
|
+
import type { RequestClientSchema } from '../RequestClient.js';
|
|
15
|
+
import {
|
|
16
|
+
ServiceOperationQuery,
|
|
17
|
+
ServiceOperationQueryKey,
|
|
18
|
+
} from '../ServiceOperation.js';
|
|
19
|
+
|
|
20
|
+
export const useSuspenseInfiniteQuery: <
|
|
21
|
+
TQueryFnData,
|
|
22
|
+
TError = DefaultError,
|
|
23
|
+
TData = InfiniteData<TQueryFnData>,
|
|
24
|
+
>(
|
|
25
|
+
qraftOptions: QraftClientOptions | undefined,
|
|
26
|
+
schema: RequestClientSchema,
|
|
27
|
+
args: Parameters<
|
|
28
|
+
ServiceOperationQuery<
|
|
29
|
+
RequestClientSchema,
|
|
30
|
+
unknown,
|
|
31
|
+
unknown
|
|
32
|
+
>['useSuspenseInfiniteQuery']
|
|
33
|
+
>
|
|
34
|
+
) => UseSuspenseInfiniteQueryResult<TData, TError> & {
|
|
35
|
+
queryKey: ServiceOperationQueryKey<RequestClientSchema, unknown>;
|
|
36
|
+
} = (qraftOptions, schema, args) => {
|
|
37
|
+
const [params, options, ...restArgs] = args;
|
|
38
|
+
|
|
39
|
+
const requestClient = useContext(qraftOptions?.context ?? QraftContext)
|
|
40
|
+
?.requestClient;
|
|
41
|
+
|
|
42
|
+
if (!requestClient) throw new Error(`QraftContext.requestClient not found`);
|
|
43
|
+
|
|
44
|
+
return useSuspenseInfiniteQueryTanstack(
|
|
45
|
+
{
|
|
46
|
+
...options,
|
|
47
|
+
queryKey: [{ url: schema.url, infinite: true }, params as never] as const,
|
|
48
|
+
queryFn:
|
|
49
|
+
options?.queryFn ??
|
|
50
|
+
function ({ queryKey: [, queryParams], signal, meta, pageParam }) {
|
|
51
|
+
return requestClient(schema, {
|
|
52
|
+
parameters: shelfMerge(2, queryParams, pageParam) as never,
|
|
53
|
+
signal,
|
|
54
|
+
meta,
|
|
55
|
+
});
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
...restArgs
|
|
59
|
+
) as never;
|
|
60
|
+
};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { useContext } from 'react';
|
|
4
|
+
|
|
5
|
+
import type { DefaultError } from '@tanstack/query-core';
|
|
6
|
+
import {
|
|
7
|
+
UseQueryResult,
|
|
8
|
+
useSuspenseQuery as useSuspenseQueryTanstack,
|
|
9
|
+
} from '@tanstack/react-query';
|
|
10
|
+
|
|
11
|
+
import type { QraftClientOptions } from '../qraftAPIClient.js';
|
|
12
|
+
import { QraftContext } from '../QraftContext.js';
|
|
13
|
+
import type { RequestClientSchema } from '../RequestClient.js';
|
|
14
|
+
import {
|
|
15
|
+
ServiceOperationQuery,
|
|
16
|
+
ServiceOperationQueryKey,
|
|
17
|
+
} from '../ServiceOperation.js';
|
|
18
|
+
|
|
19
|
+
export const useSuspenseQuery: <
|
|
20
|
+
TQueryFnData = unknown,
|
|
21
|
+
TError = DefaultError,
|
|
22
|
+
TData = TQueryFnData,
|
|
23
|
+
>(
|
|
24
|
+
qraftOptions: QraftClientOptions | undefined,
|
|
25
|
+
schema: RequestClientSchema,
|
|
26
|
+
args: Parameters<
|
|
27
|
+
ServiceOperationQuery<
|
|
28
|
+
RequestClientSchema,
|
|
29
|
+
unknown,
|
|
30
|
+
unknown
|
|
31
|
+
>['useSuspenseQuery']
|
|
32
|
+
>
|
|
33
|
+
) => UseQueryResult<TData, TError> & {
|
|
34
|
+
queryKey: ServiceOperationQueryKey<RequestClientSchema, unknown>;
|
|
35
|
+
} = (qraftOptions, schema, args) => {
|
|
36
|
+
const [params, options, ...restArgs] = args;
|
|
37
|
+
|
|
38
|
+
const requestClient = useContext(qraftOptions?.context ?? QraftContext)
|
|
39
|
+
?.requestClient;
|
|
40
|
+
|
|
41
|
+
if (!requestClient) throw new Error(`QraftContext.requestClient not found`);
|
|
42
|
+
|
|
43
|
+
const queryKey: ServiceOperationQueryKey<RequestClientSchema, unknown> = [
|
|
44
|
+
{ url: schema.url },
|
|
45
|
+
params,
|
|
46
|
+
];
|
|
47
|
+
|
|
48
|
+
return useSuspenseQueryTanstack(
|
|
49
|
+
{
|
|
50
|
+
...options,
|
|
51
|
+
queryKey,
|
|
52
|
+
queryFn:
|
|
53
|
+
options?.queryFn ??
|
|
54
|
+
function ({ queryKey: [, queryParams], signal, meta }) {
|
|
55
|
+
return requestClient(schema, {
|
|
56
|
+
parameters: queryParams as never,
|
|
57
|
+
signal,
|
|
58
|
+
meta,
|
|
59
|
+
});
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
...restArgs
|
|
63
|
+
) as never;
|
|
64
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Merges objects with provided depth
|
|
3
|
+
* @param depth
|
|
4
|
+
* @param args
|
|
5
|
+
*/
|
|
6
|
+
export function shelfMerge<T>(depth = 2, ...args: T[]): T {
|
|
7
|
+
return args.reduce((acc, arg) => {
|
|
8
|
+
if (!arg || typeof arg !== 'object') return acc;
|
|
9
|
+
|
|
10
|
+
Object.entries(arg).forEach(([key, value]) => {
|
|
11
|
+
if (typeof value !== 'object') {
|
|
12
|
+
acc[key as never] = value as never;
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
if (Array.isArray(value)) {
|
|
17
|
+
acc[key as never] = value as never;
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
if (depth > 1) {
|
|
22
|
+
acc[key as never] = shelfMerge(
|
|
23
|
+
depth - 1,
|
|
24
|
+
acc[key as never],
|
|
25
|
+
value
|
|
26
|
+
) as never;
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
acc[key as never] = value as never;
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
return acc;
|
|
34
|
+
}, {} as T);
|
|
35
|
+
}
|
|
@@ -9,8 +9,8 @@ import {
|
|
|
9
9
|
import { act, renderHook, waitFor } from '@testing-library/react';
|
|
10
10
|
|
|
11
11
|
import { createAPIClient } from './fixtures/api/index.js';
|
|
12
|
-
import { bodySerializer,
|
|
13
|
-
import {
|
|
12
|
+
import { bodySerializer, request, urlSerializer } from './lib/request.js';
|
|
13
|
+
import { QraftContextValue } from './QraftContext.js';
|
|
14
14
|
import type { RequestClient } from './RequestClient.js';
|
|
15
15
|
|
|
16
16
|
const qraft = createAPIClient();
|
|
@@ -130,6 +130,58 @@ describe('Qraft uses Queries', () => {
|
|
|
130
130
|
});
|
|
131
131
|
});
|
|
132
132
|
|
|
133
|
+
describe('Qraft uses Suspense Queries', () => {
|
|
134
|
+
it('supports useSuspenseQuery', async () => {
|
|
135
|
+
const hook = () => {
|
|
136
|
+
try {
|
|
137
|
+
return qraft.approvalPolicies.getApprovalPoliciesId.useSuspenseQuery({
|
|
138
|
+
header: {
|
|
139
|
+
'x-monite-version': '1.0.0',
|
|
140
|
+
},
|
|
141
|
+
path: {
|
|
142
|
+
approval_policy_id: '1',
|
|
143
|
+
},
|
|
144
|
+
query: {
|
|
145
|
+
items_order: ['asc', 'desc'],
|
|
146
|
+
},
|
|
147
|
+
});
|
|
148
|
+
} catch (error) {
|
|
149
|
+
return error as Promise<unknown>;
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
const queryClient = new QueryClient();
|
|
154
|
+
|
|
155
|
+
const { result: resultWithErrorPromise } = renderHook(hook, {
|
|
156
|
+
wrapper: (props) => <Providers {...props} queryClient={queryClient} />,
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
expect(resultWithErrorPromise.current).toBeInstanceOf(Promise); // Suspense throws a promise
|
|
160
|
+
|
|
161
|
+
await resultWithErrorPromise.current;
|
|
162
|
+
|
|
163
|
+
const { result: resultWithData } = renderHook(hook, {
|
|
164
|
+
wrapper: (props) => <Providers {...props} queryClient={queryClient} />,
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
if (resultWithData.current instanceof Promise) {
|
|
168
|
+
throw new Error('Promise should be resolved');
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
expect(resultWithData.current.data).toEqual({
|
|
172
|
+
header: {
|
|
173
|
+
'x-monite-version': '1.0.0',
|
|
174
|
+
},
|
|
175
|
+
path: {
|
|
176
|
+
approval_policy_id: '1',
|
|
177
|
+
},
|
|
178
|
+
query: {
|
|
179
|
+
items_order: ['asc', 'desc'],
|
|
180
|
+
},
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
|
|
133
185
|
describe('Qraft uses Infinite Queries', () => {
|
|
134
186
|
it('supports useInfiniteQuery', async () => {
|
|
135
187
|
const { result } = renderHook(
|
|
@@ -292,6 +344,86 @@ describe('Qraft uses Infinite Queries', () => {
|
|
|
292
344
|
});
|
|
293
345
|
});
|
|
294
346
|
|
|
347
|
+
describe('Qraft uses Suspense Infinite Queries', () => {
|
|
348
|
+
it('supports useSuspenseInfiniteQuery', async () => {
|
|
349
|
+
const hook = () => {
|
|
350
|
+
try {
|
|
351
|
+
return qraft.files.getFiles.useSuspenseInfiniteQuery(
|
|
352
|
+
{
|
|
353
|
+
header: {
|
|
354
|
+
'x-monite-version': '1.0.0',
|
|
355
|
+
},
|
|
356
|
+
query: {
|
|
357
|
+
id__in: ['1', '2'],
|
|
358
|
+
},
|
|
359
|
+
},
|
|
360
|
+
{
|
|
361
|
+
getNextPageParam: (lastPage, allPages, params) => {
|
|
362
|
+
return {
|
|
363
|
+
query: {
|
|
364
|
+
page: params.query?.page
|
|
365
|
+
? String(Number(params.query.page) + 1)
|
|
366
|
+
: undefined,
|
|
367
|
+
},
|
|
368
|
+
};
|
|
369
|
+
},
|
|
370
|
+
initialPageParam: {
|
|
371
|
+
query: {
|
|
372
|
+
page: '1',
|
|
373
|
+
},
|
|
374
|
+
},
|
|
375
|
+
}
|
|
376
|
+
);
|
|
377
|
+
} catch (error) {
|
|
378
|
+
return error as Promise<unknown>;
|
|
379
|
+
}
|
|
380
|
+
};
|
|
381
|
+
|
|
382
|
+
const queryClient = new QueryClient();
|
|
383
|
+
|
|
384
|
+
const { result } = renderHook(hook, {
|
|
385
|
+
wrapper: (props) => <Providers {...props} queryClient={queryClient} />,
|
|
386
|
+
});
|
|
387
|
+
|
|
388
|
+
const { result: resultWithErrorPromise } = renderHook(hook, {
|
|
389
|
+
wrapper: (props) => <Providers {...props} queryClient={queryClient} />,
|
|
390
|
+
});
|
|
391
|
+
|
|
392
|
+
expect(resultWithErrorPromise.current).toBeInstanceOf(Promise); // Suspense throws a promise
|
|
393
|
+
|
|
394
|
+
await resultWithErrorPromise.current;
|
|
395
|
+
|
|
396
|
+
const { result: resultWithData } = renderHook(hook, {
|
|
397
|
+
wrapper: (props) => <Providers {...props} queryClient={queryClient} />,
|
|
398
|
+
});
|
|
399
|
+
|
|
400
|
+
if (resultWithData.current instanceof Promise) {
|
|
401
|
+
throw new Error('Promise should be resolved');
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
expect(resultWithData.current.data).toEqual({
|
|
405
|
+
pageParams: [
|
|
406
|
+
{
|
|
407
|
+
query: {
|
|
408
|
+
page: '1',
|
|
409
|
+
},
|
|
410
|
+
},
|
|
411
|
+
],
|
|
412
|
+
pages: [
|
|
413
|
+
{
|
|
414
|
+
header: {
|
|
415
|
+
'x-monite-version': '1.0.0',
|
|
416
|
+
},
|
|
417
|
+
query: {
|
|
418
|
+
id__in: ['1', '2'],
|
|
419
|
+
page: '1',
|
|
420
|
+
},
|
|
421
|
+
},
|
|
422
|
+
],
|
|
423
|
+
});
|
|
424
|
+
});
|
|
425
|
+
});
|
|
426
|
+
|
|
295
427
|
describe('Qraft uses Mutations', () => {
|
|
296
428
|
it('supports useMutation without predefined parameters', async () => {
|
|
297
429
|
const { result } = renderHook(
|