@openapi-qraft/react 1.0.0-beta.5 → 1.0.0-beta.6
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 +28 -0
- package/dist/ServiceOperation.d.ts +44 -7
- package/dist/ServiceOperation.d.ts.map +1 -1
- package/dist/callbacks/getMutationKey.d.ts +2 -2
- package/dist/callbacks/getMutationKey.d.ts.map +1 -1
- package/dist/callbacks/getMutationKey.js +2 -19
- package/dist/callbacks/getMutationKey.js.map +1 -1
- package/dist/callbacks/useMutation.d.ts.map +1 -1
- package/dist/callbacks/useMutation.js +4 -16
- package/dist/callbacks/useMutation.js.map +1 -1
- package/dist/callbacks/useMutationState.d.ts +7 -0
- package/dist/callbacks/useMutationState.d.ts.map +1 -0
- package/dist/callbacks/useMutationState.js +30 -0
- package/dist/callbacks/useMutationState.js.map +1 -0
- package/dist/lib/composeMutationKey.d.ts +10 -0
- package/dist/lib/composeMutationKey.d.ts.map +1 -0
- package/dist/lib/composeMutationKey.js +21 -0
- package/dist/lib/composeMutationKey.js.map +1 -0
- package/package.json +2 -2
- package/src/ServiceOperation.ts +98 -6
- package/src/callbacks/getMutationKey.ts +6 -34
- package/src/callbacks/useMutation.ts +7 -19
- package/src/callbacks/useMutationState.ts +73 -0
- package/src/lib/composeMutationKey.test.ts +43 -0
- package/src/lib/composeMutationKey.ts +50 -0
- package/src/qraftAPIClient.test.tsx +224 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# @openapi-qraft/react
|
|
2
2
|
|
|
3
|
+
## 1.0.0-beta.6
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 75dbf6f: feature: add support of `useMutationState(..)` hook
|
|
8
|
+
- 1ae85df: refactor: `getMutationKey` type and composed key if parameters are `undefined`
|
|
9
|
+
|
|
3
10
|
## 1.0.0-beta.5
|
|
4
11
|
|
|
5
12
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -243,6 +243,34 @@ mutation.mutate({
|
|
|
243
243
|
});
|
|
244
244
|
```
|
|
245
245
|
|
|
246
|
+
### [useMutationState 🔗](https://tanstack.com/query/latest/docs/framework/react/reference/useMutationState)
|
|
247
|
+
|
|
248
|
+
Mutation state is a helper hook that provides the current state of a mutation globally.
|
|
249
|
+
It could be used to track the status of a mutation in any component, which is useful for showing loading spinners or
|
|
250
|
+
disabling buttons.
|
|
251
|
+
|
|
252
|
+
```ts
|
|
253
|
+
const { mutate } = qraft.entities.postEntitiesIdDocuments.useMutation({
|
|
254
|
+
path: {
|
|
255
|
+
entity_id: '3e3e-3e3e-3e3e',
|
|
256
|
+
},
|
|
257
|
+
header: {
|
|
258
|
+
'x-monite-version': '2023-09-01',
|
|
259
|
+
},
|
|
260
|
+
});
|
|
261
|
+
|
|
262
|
+
const mutationState = qraft.entities.postEntitiesIdDocuments
|
|
263
|
+
// You can pass Partial parameters, or even `undefined` to specify filters
|
|
264
|
+
.useMutationState({ path: { entity_id: '3e3e-3e3e-3e3e' } })
|
|
265
|
+
?.at(0);
|
|
266
|
+
|
|
267
|
+
useEffect(() => {
|
|
268
|
+
if (mutationState?.status === 'iddle') {
|
|
269
|
+
mutate({ company_tax_id_verification: ['verification-id'] });
|
|
270
|
+
}
|
|
271
|
+
}, [mutate, mutationState?.status]);
|
|
272
|
+
```
|
|
273
|
+
|
|
246
274
|
### [useInfiniteQuery 🔗](https://tanstack.com/query/latest/docs/framework/react/reference/useInfiniteQuery)
|
|
247
275
|
|
|
248
276
|
#### _Offset-based_
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DefaultError, InfiniteData, InfiniteQueryPageParamsOptions, NoInfer, QueryClient, SetDataOptions, Updater } from '@tanstack/query-core';
|
|
1
|
+
import { DefaultError, InfiniteData, InfiniteQueryPageParamsOptions, Mutation, MutationState, MutationStatus, NoInfer, QueryClient, SetDataOptions, Updater } from '@tanstack/query-core';
|
|
2
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;
|
|
@@ -14,7 +14,7 @@ export type ServiceOperationInfiniteQueryKey<S extends {
|
|
|
14
14
|
},
|
|
15
15
|
T
|
|
16
16
|
];
|
|
17
|
-
export type ServiceOperationMutationKey<S extends Record<'url' | 'method', string>, T> = [Pick<S, 'url' | 'method'>, T];
|
|
17
|
+
export type ServiceOperationMutationKey<S extends Record<'url' | 'method', string>, T extends unknown> = NonNullable<T> extends never ? [Pick<S, 'url' | 'method'>] : [Pick<S, 'url' | 'method'>, T];
|
|
18
18
|
export interface ServiceOperationQuery<TSchema extends {
|
|
19
19
|
url: string;
|
|
20
20
|
method: string;
|
|
@@ -55,21 +55,58 @@ interface ServiceOperationUseSuspenseQueryQuery<TSchema extends {
|
|
|
55
55
|
export interface ServiceOperationMutation<TSchema extends {
|
|
56
56
|
url: string;
|
|
57
57
|
method: string;
|
|
58
|
-
}, TBody, TData, TParams, TError = DefaultError> extends ServiceOperationUseMutation<TSchema, TBody, TData, TParams, TError>, ServiceOperationMutationFn<TSchema, TBody, TData, TParams>, ServiceOperationSetQueryData<TData, TParams> {
|
|
58
|
+
}, TBody, TData, TParams, TError = DefaultError> extends ServiceOperationUseMutation<TSchema, TBody, TData, TParams, TError>, ServiceOperationUseMutationState<TSchema, TBody, TData, TParams, TError>, ServiceOperationMutationFn<TSchema, TBody, TData, TParams>, ServiceOperationSetQueryData<TData, TParams> {
|
|
59
59
|
schema: TSchema;
|
|
60
60
|
}
|
|
61
61
|
interface ServiceOperationUseMutation<TSchema extends {
|
|
62
62
|
url: string;
|
|
63
63
|
method: string;
|
|
64
64
|
}, TBody, TData, TParams, TError = DefaultError> {
|
|
65
|
-
getMutationKey<T extends TParams>(params: T): ServiceOperationMutationKey<TSchema, T>;
|
|
66
|
-
useMutation<TVariables extends {
|
|
67
|
-
body: TBody;
|
|
68
|
-
} & (NonNullable<TParams> extends never ? {} : TParams), TContext = unknown>(params?: undefined, options?: Omit<UseMutationOptions<TData, TError, TVariables, TContext>, 'mutationKey'> & {
|
|
65
|
+
getMutationKey<T extends TParams>(params: T | undefined): ServiceOperationMutationKey<TSchema, T>;
|
|
66
|
+
useMutation<TVariables extends MutationVariables<TBody, TParams>, TContext = unknown>(params?: undefined, options?: Omit<UseMutationOptions<TData, TError, TVariables, TContext>, 'mutationKey'> & {
|
|
69
67
|
mutationKey?: ServiceOperationMutationKey<TSchema, NonNullable<TParams> extends never ? {} : TParams>;
|
|
70
68
|
}, queryClient?: QueryClient): UseMutationResult<TData, TError | Error, TVariables, TContext>;
|
|
71
69
|
useMutation<TVariables extends TBody, TContext = unknown>(params: TParams, options?: Omit<UseMutationOptions<TData, TError, TVariables, TContext>, 'mutationKey'>, queryClient?: QueryClient): UseMutationResult<TData, TError | Error, TVariables, TContext>;
|
|
72
70
|
}
|
|
71
|
+
type MutationFilters<TSchema extends {
|
|
72
|
+
url: string;
|
|
73
|
+
method: string;
|
|
74
|
+
}, TBody, TData, TParams, TError = DefaultError, TContext = unknown> = {
|
|
75
|
+
/**
|
|
76
|
+
* Match mutation key exactly
|
|
77
|
+
*/
|
|
78
|
+
exact?: boolean;
|
|
79
|
+
/**
|
|
80
|
+
* Include mutations matching this predicate function
|
|
81
|
+
*/
|
|
82
|
+
predicate?: (mutation: Mutation<TData, TError, MutationVariables<TBody, TParams>, TContext>) => boolean;
|
|
83
|
+
/**
|
|
84
|
+
* Filter by mutation status
|
|
85
|
+
*/
|
|
86
|
+
status?: MutationStatus;
|
|
87
|
+
} & ({
|
|
88
|
+
/**
|
|
89
|
+
* Include mutations matching this mutation key
|
|
90
|
+
*/
|
|
91
|
+
mutationKey?: ServiceOperationMutationKey<TSchema, PartialParams<TParams>>;
|
|
92
|
+
} | {
|
|
93
|
+
/**
|
|
94
|
+
* Include mutations matching these parameters
|
|
95
|
+
*/
|
|
96
|
+
parameters?: PartialParams<TParams>;
|
|
97
|
+
});
|
|
98
|
+
type MutationVariables<TBody, TParams> = {
|
|
99
|
+
body: TBody;
|
|
100
|
+
} & (NonNullable<TParams> extends never ? {} : TParams);
|
|
101
|
+
interface ServiceOperationUseMutationState<TSchema extends {
|
|
102
|
+
url: string;
|
|
103
|
+
method: string;
|
|
104
|
+
}, TBody, TData, TParams, TError = DefaultError> {
|
|
105
|
+
useMutationState<TContext = unknown, TResult = MutationState<TData, TError, MutationVariables<TBody, TParams>, TContext>>(options?: {
|
|
106
|
+
filters?: MutationFilters<TSchema, TBody, TData, TParams, TError, TContext>;
|
|
107
|
+
select?: (mutation: Mutation<TData, TError, MutationVariables<TBody, TParams>, TContext>) => TResult;
|
|
108
|
+
}, queryClient?: QueryClient): Array<TResult>;
|
|
109
|
+
}
|
|
73
110
|
interface ServiceOperationQueryFn<TSchema extends {
|
|
74
111
|
url: string;
|
|
75
112
|
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,8BAA8B,EAC9B,OAAO,EACP,WAAW,EACX,cAAc,EACd,OAAO,EACR,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,iCAAiC,EACjC,yBAAyB,EACzB,6BAA6B,EAC7B,qBAAqB,EACrB,mCAAmC,EACnC,2BAA2B,EAC3B,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,+BAA+B,EAC/B,8BAA8B,EAC9B,uBAAuB,EACvB,sBAAsB,EACvB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,MAAM,wBAAwB,CAAC,CAAC,SAAS;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,IAAI;IACnE,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC;IACd,CAAC;CACF,CAAC;AAEF,MAAM,MAAM,gCAAgC,CAAC,CAAC,SAAS;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,IAAI;IAC3E,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG;QAAE,QAAQ,EAAE,IAAI,CAAA;KAAE;IACnC,CAAC;CACF,CAAC;AAEF,MAAM,MAAM,2BAA2B,CACrC,CAAC,SAAS,MAAM,CAAC,KAAK,GAAG,QAAQ,EAAE,MAAM,CAAC,EAC1C,CAAC,
|
|
1
|
+
{"version":3,"file":"ServiceOperation.d.ts","sourceRoot":"","sources":["../src/ServiceOperation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,8BAA8B,EAC9B,QAAQ,EACR,aAAa,EACb,cAAc,EACd,OAAO,EACP,WAAW,EACX,cAAc,EACd,OAAO,EACR,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,iCAAiC,EACjC,yBAAyB,EACzB,6BAA6B,EAC7B,qBAAqB,EACrB,mCAAmC,EACnC,2BAA2B,EAC3B,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,+BAA+B,EAC/B,8BAA8B,EAC9B,uBAAuB,EACvB,sBAAsB,EACvB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,MAAM,wBAAwB,CAAC,CAAC,SAAS;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,IAAI;IACnE,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC;IACd,CAAC;CACF,CAAC;AAEF,MAAM,MAAM,gCAAgC,CAAC,CAAC,SAAS;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,IAAI;IAC3E,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG;QAAE,QAAQ,EAAE,IAAI,CAAA;KAAE;IACnC,CAAC;CACF,CAAC;AAEF,MAAM,MAAM,2BAA2B,CACrC,CAAC,SAAS,MAAM,CAAC,KAAK,GAAG,QAAQ,EAAE,MAAM,CAAC,EAC1C,CAAC,SAAS,OAAO,IACf,WAAW,CAAC,CAAC,CAAC,SAAS,KAAK,GAC5B,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,CAAC,GAC3B,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;AAEnC,MAAM,WAAW,qBAAqB,CACpC,OAAO,SAAS;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAC/C,KAAK,EACL,OAAO,EACP,MAAM,GAAG,YAAY,CACrB,SAAQ,wBAAwB,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAC/D,gCAAgC,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EACjE,qCAAqC,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EACtE,wCAAwC,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EACzE,uBAAuB,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,EAChD,4BAA4B,CAAC,KAAK,EAAE,OAAO,CAAC,EAC5C,oCAAoC,CAAC,KAAK,EAAE,OAAO,CAAC,EACpD,4BAA4B,CAAC,KAAK,EAAE,OAAO,CAAC,EAC5C,oCAAoC,CAAC,KAAK,EAAE,OAAO,CAAC;IACtD,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,UAAU,wBAAwB,CAChC,OAAO,SAAS;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAC/C,KAAK,EACL,OAAO,GAAG,EAAE,EACZ,MAAM,GAAG,YAAY;IAErB,WAAW,CAAC,cAAc,SAAS,OAAO,EACxC,MAAM,EAAE,cAAc,GACrB,wBAAwB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAErD,QAAQ,CACN,MAAM,EAAE,OAAO,EACf,OAAO,CAAC,EAAE,IAAI,CACZ,2BAA2B,CACzB,KAAK,EACL,MAAM,EACN,KAAK,EACH,wBAAwB,CAAC,OAAO,EAAE,OAAO,CAAC,GAC1C,SAAS,CAAC,GAAG,wBAAwB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAC3D,EACD,UAAU,CACX,EACD,WAAW,CAAC,EAAE,WAAW,GACxB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC;IACzC,QAAQ,CACN,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,IAAI,CACX,yBAAyB,CACvB,KAAK,EACL,MAAM,EACN,KAAK,EACH,wBAAwB,CAAC,OAAO,EAAE,OAAO,CAAC,GAC1C,SAAS,CAAC,GAAG,wBAAwB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAC3D,EACD,UAAU,CACX,EACD,WAAW,CAAC,EAAE,WAAW,GACxB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC;CACjD;AAED,KAAK,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,GACpC;KAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAC/D,CAAC,CAAC;AAEN,UAAU,gCAAgC,CACxC,OAAO,SAAS;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAC/C,KAAK,EACL,OAAO,GAAG,EAAE,EACZ,MAAM,GAAG,YAAY;IAErB,mBAAmB,CAAC,cAAc,SAAS,OAAO,EAChD,MAAM,EAAE,cAAc,GACrB,gCAAgC,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAE7D,gBAAgB,CAAC,UAAU,SAAS,OAAO,EACzC,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,IAAI,CACX,mCAAmC,CACjC,KAAK,EACL,MAAM,EACN,YAAY,CAAC,KAAK,CAAC,EACjB,gCAAgC,CAAC,OAAO,EAAE,OAAO,CAAC,GAClD,SAAS,CAAC,GAAG,gCAAgC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,EAClE,aAAa,CAAC,UAAU,CAAC,CAC1B,EACC,UAAU,GACV,sBAAsB,GACtB,kBAAkB,GAClB,kBAAkB,CACrB,GACC,8BAA8B,CAAC,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC,EAClE,WAAW,CAAC,EAAE,WAAW,GACxB,sBAAsB,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC;IAC/D,gBAAgB,CAAC,UAAU,SAAS,OAAO,EACzC,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,IAAI,CACX,iCAAiC,CAC/B,KAAK,EACL,MAAM,EACN,YAAY,CAAC,KAAK,CAAC,EACjB,gCAAgC,CAAC,OAAO,EAAE,OAAO,CAAC,GAClD,SAAS,CAAC,GAAG,gCAAgC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,EAClE,aAAa,CAAC,UAAU,CAAC,CAC1B,EACC,UAAU,GACV,sBAAsB,GACtB,kBAAkB,GAClB,kBAAkB,CACrB,GACC,8BAA8B,CAAC,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC,EAClE,WAAW,CAAC,EAAE,WAAW,GACxB,6BAA6B,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC;CACvE;AAED,UAAU,wCAAwC,CAChD,OAAO,SAAS;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAC/C,KAAK,EACL,OAAO,GAAG,EAAE,EACZ,MAAM,GAAG,YAAY;IAErB,wBAAwB,CAAC,UAAU,SAAS,OAAO,EACjD,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,IAAI,CACX,+BAA+B,CAC7B,KAAK,EACL,MAAM,EACN,YAAY,CAAC,KAAK,CAAC,EACnB,KAAK,EACH,gCAAgC,CAAC,OAAO,EAAE,OAAO,CAAC,GAClD,SAAS,CAAC,GAAG,gCAAgC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,EAClE,aAAa,CAAC,UAAU,CAAC,CAC1B,EACC,UAAU,GACV,sBAAsB,GACtB,kBAAkB,GAClB,kBAAkB,CACrB,GACC,8BAA8B,CAAC,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC,EAClE,WAAW,CAAC,EAAE,WAAW,GACxB,8BAA8B,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC;CACxE;AAED,UAAU,qCAAqC,CAC7C,OAAO,SAAS;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAC/C,KAAK,EACL,OAAO,GAAG,EAAE,EACZ,MAAM,GAAG,YAAY;IAErB,gBAAgB,CACd,MAAM,EAAE,OAAO,EACf,OAAO,CAAC,EAAE,IAAI,CACZ,uBAAuB,CACrB,KAAK,EACL,MAAM,EACN,KAAK,EACH,wBAAwB,CAAC,OAAO,EAAE,OAAO,CAAC,GAC1C,SAAS,CAAC,GAAG,wBAAwB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAC3D,EACD,UAAU,CACX,EACD,WAAW,CAAC,EAAE,WAAW,GACxB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC;CAClD;AAED,MAAM,WAAW,wBAAwB,CACvC,OAAO,SAAS;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAC/C,KAAK,EACL,KAAK,EACL,OAAO,EACP,MAAM,GAAG,YAAY,CACrB,SAAQ,2BAA2B,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EACzE,gCAAgC,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EACxE,0BAA0B,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAC1D,4BAA4B,CAAC,KAAK,EAAE,OAAO,CAAC;IAC9C,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,UAAU,2BAA2B,CACnC,OAAO,SAAS;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAC/C,KAAK,EACL,KAAK,EACL,OAAO,EACP,MAAM,GAAG,YAAY;IAErB,cAAc,CAAC,CAAC,SAAS,OAAO,EAC9B,MAAM,EAAE,CAAC,GAAG,SAAS,GACpB,2BAA2B,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAE3C,WAAW,CACT,UAAU,SAAS,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,EACpD,QAAQ,GAAG,OAAO,EAElB,MAAM,CAAC,EAAE,SAAS,EAClB,OAAO,CAAC,EAAE,IAAI,CACZ,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,EACvD,aAAa,CACd,GAAG;QACF,WAAW,CAAC,EAAE,2BAA2B,CACvC,OAAO,EACP,WAAW,CAAC,OAAO,CAAC,SAAS,KAAK,GAAG,EAAE,GAAG,OAAO,CAClD,CAAC;KACH,EACD,WAAW,CAAC,EAAE,WAAW,GACxB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IAElE,WAAW,CAAC,UAAU,SAAS,KAAK,EAAE,QAAQ,GAAG,OAAO,EACtD,MAAM,EAAE,OAAO,EACf,OAAO,CAAC,EAAE,IAAI,CACZ,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,EACvD,aAAa,CACd,EACD,WAAW,CAAC,EAAE,WAAW,GACxB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;CACnE;AAED,KAAK,eAAe,CAClB,OAAO,SAAS;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAC/C,KAAK,EACL,KAAK,EACL,OAAO,EACP,MAAM,GAAG,YAAY,EACrB,QAAQ,GAAG,OAAO,IAChB;IACF;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;OAEG;IACH,SAAS,CAAC,EAAE,CACV,QAAQ,EAAE,QAAQ,CAChB,KAAK,EACL,MAAM,EACN,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,EACjC,QAAQ,CACT,KACE,OAAO,CAAC;IAEb;;OAEG;IACH,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB,GAAG,CACA;IACE;;OAEG;IACH,WAAW,CAAC,EAAE,2BAA2B,CACvC,OAAO,EACP,aAAa,CAAC,OAAO,CAAC,CACvB,CAAC;CACH,GACD;IACE;;OAEG;IACH,UAAU,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;CACrC,CACJ,CAAC;AAEF,KAAK,iBAAiB,CAAC,KAAK,EAAE,OAAO,IAAI;IACvC,IAAI,EAAE,KAAK,CAAC;CACb,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,KAAK,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC;AAExD,UAAU,gCAAgC,CACxC,OAAO,SAAS;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAC/C,KAAK,EACL,KAAK,EACL,OAAO,EACP,MAAM,GAAG,YAAY;IAErB,gBAAgB,CACd,QAAQ,GAAG,OAAO,EAClB,OAAO,GAAG,aAAa,CACrB,KAAK,EACL,MAAM,EACN,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,EACjC,QAAQ,CACT,EAED,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,eAAe,CACvB,OAAO,EACP,KAAK,EACL,KAAK,EACL,OAAO,EACP,MAAM,EACN,QAAQ,CACT,CAAC;QACF,MAAM,CAAC,EAAE,CACP,QAAQ,EAAE,QAAQ,CAChB,KAAK,EACL,MAAM,EACN,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,EACjC,QAAQ,CACT,KACE,OAAO,CAAC;KACd,EACD,WAAW,CAAC,EAAE,WAAW,GACxB,KAAK,CAAC,OAAO,CAAC,CAAC;CACnB;AAED,UAAU,uBAAuB,CAC/B,OAAO,SAAS;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAC/C,KAAK,EACL,OAAO;IAEP,OAAO,CACL,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACjC,OAAO,SAAS,WAAW,GAAG,WAAW,EAEzC,OAAO,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,KAAK,CAAA;KAAE,GAAG,CAC1C;QAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;KAAE,GAChC;QAAE,UAAU,EAAE,OAAO,CAAA;KAAE,CAC1B,EACD,MAAM,EAAE,CACN,MAAM,EAAE,OAAO,EACf,OAAO,EAAE;QACP,UAAU,EAAE,OAAO,CAAC;QACpB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,IAAI,CAAC,EAAE,KAAK,CAAC;KACd,KACE,KAAK,GACT,KAAK,CAAC;IAET,OAAO,CACL,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACjC,OAAO,SAAS,WAAW,GAAG,WAAW,EAEzC,OAAO,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,KAAK,CAAA;KAAE,GAAG,CAC1C;QAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;KAAE,GAChC;QAAE,UAAU,EAAE,OAAO,CAAA;KAAE,CAC1B,EACD,MAAM,EAAE,CACN,MAAM,EAAE,OAAO,EACf,OAAO,EAAE;QACP,UAAU,EAAE,OAAO,CAAC;QACpB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,IAAI,CAAC,EAAE,KAAK,CAAC;KACd,KACE,OAAO,CAAC,KAAK,CAAC,GAClB,OAAO,CAAC,KAAK,CAAC,CAAC;CACnB;AAED,UAAU,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,EAAE;IACxD,YAAY,CACV,QAAQ,EAAE,OAAO,EACjB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,EACxE,WAAW,EAAE,WAAW,EACxB,OAAO,CAAC,EAAE,cAAc,GACvB,KAAK,GAAG,SAAS,CAAC;CACtB;AAED,UAAU,oCAAoC,CAAC,KAAK,EAAE,OAAO,GAAG,EAAE;IAChE,oBAAoB,CAClB,QAAQ,EAAE,OAAO,EACjB,OAAO,EAAE,OAAO,CACd,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,SAAS,EACxC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,SAAS,CACzC,EACD,WAAW,EAAE,WAAW,EACxB,OAAO,CAAC,EAAE,cAAc,GACvB,YAAY,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;CACpC;AAED,UAAU,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,EAAE;IACxD,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,GAAG,KAAK,GAAG,SAAS,CAAC;CAC9E;AAED,UAAU,oCAAoC,CAAC,KAAK,EAAE,OAAO,GAAG,EAAE;IAChE,oBAAoB,CAClB,QAAQ,EAAE,OAAO,EACjB,WAAW,EAAE,WAAW,GACvB,YAAY,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;CACpC;AAED,MAAM,WAAW,0BAA0B,CACzC,OAAO,SAAS;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAC/C,KAAK,EACL,KAAK,EACL,OAAO;IAEP,UAAU,CACR,MAAM,EAAE,CACN,MAAM,EAAE,OAAO,EACf,OAAO,EAAE;QACP,UAAU,EAAE,OAAO,CAAC;QACpB,IAAI,EAAE,KAAK,CAAC;KACb,KACE,KAAK,EACV,OAAO,EAAE;QACP,UAAU,EAAE,OAAO,CAAC;QACpB,IAAI,EAAE,KAAK,CAAC;KACb,GACA,KAAK,CAAC;IAET,UAAU,CACR,MAAM,EAAE,CACN,MAAM,EAAE,OAAO,EACf,OAAO,EAAE;QACP,UAAU,EAAE,OAAO,CAAC;QACpB,IAAI,EAAE,KAAK,CAAC;KACb,KACE,OAAO,CAAC,KAAK,CAAC,EACnB,OAAO,EAAE;QACP,UAAU,EAAE,OAAO,CAAC;QACpB,IAAI,EAAE,KAAK,CAAC;KACb,GACA,OAAO,CAAC,KAAK,CAAC,CAAC;CACnB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { QraftClientOptions } from '../qraftAPIClient.js';
|
|
2
2
|
import type { RequestClientSchema } from '../RequestClient.js';
|
|
3
|
-
import {
|
|
4
|
-
export declare const getMutationKey: (qraftOptions: QraftClientOptions | undefined, schema: RequestClientSchema, args: unknown) =>
|
|
3
|
+
import { ServiceOperationMutation } from '../ServiceOperation.js';
|
|
4
|
+
export declare const getMutationKey: (qraftOptions: QraftClientOptions | undefined, schema: RequestClientSchema, args: Parameters<ServiceOperationMutation<RequestClientSchema, unknown, unknown, unknown>['getMutationKey']>) => [Pick<RequestClientSchema, "url" | "method">, unknown];
|
|
5
5
|
//# sourceMappingURL=getMutationKey.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getMutationKey.d.ts","sourceRoot":"","sources":["../../src/callbacks/getMutationKey.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getMutationKey.d.ts","sourceRoot":"","sources":["../../src/callbacks/getMutationKey.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAElE,eAAO,MAAM,cAAc,iBACX,kBAAkB,GAAG,SAAS,UACpC,mBAAmB,QACrB,WACJ,yBACE,mBAAmB,EACnB,OAAO,EACP,OAAO,EACP,OAAO,CACR,CAAC,gBAAgB,CAAC,CACpB,2DAGF,CAAC"}
|
|
@@ -1,22 +1,5 @@
|
|
|
1
|
+
import { composeMutationKey } from '../lib/composeMutationKey.js';
|
|
1
2
|
export const getMutationKey = (qraftOptions, schema, args) => {
|
|
2
|
-
|
|
3
|
-
const key = [
|
|
4
|
-
{
|
|
5
|
-
url: schema.url,
|
|
6
|
-
method: schema.method,
|
|
7
|
-
},
|
|
8
|
-
omitMutationPayload(parameters),
|
|
9
|
-
];
|
|
10
|
-
return key;
|
|
3
|
+
return composeMutationKey(schema, args[0]);
|
|
11
4
|
};
|
|
12
|
-
function omitMutationPayload(params) {
|
|
13
|
-
if (!params || typeof params !== 'object')
|
|
14
|
-
throw new Error('`params` must be object');
|
|
15
|
-
if ('body' in params || 'requestBody' in params) {
|
|
16
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
17
|
-
const { body, requestBody, ...paramsRest } = params;
|
|
18
|
-
return paramsRest;
|
|
19
|
-
}
|
|
20
|
-
return params;
|
|
21
|
-
}
|
|
22
5
|
//# sourceMappingURL=getMutationKey.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getMutationKey.js","sourceRoot":"","sources":["../../src/callbacks/getMutationKey.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getMutationKey.js","sourceRoot":"","sources":["../../src/callbacks/getMutationKey.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAKlE,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,YAA4C,EAC5C,MAA2B,EAC3B,IAOC,EACD,EAAE;IACF,OAAO,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMutation.d.ts","sourceRoot":"","sources":["../../src/callbacks/useMutation.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"useMutation.d.ts","sourceRoot":"","sources":["../../src/callbacks/useMutation.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAI/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EACL,wBAAwB,EAEzB,MAAM,wBAAwB,CAAC;AAEhC,eAAO,MAAM,WAAW,EAAE,CACxB,KAAK,GAAG,OAAO,EACf,MAAM,GAAG,YAAY,EACrB,UAAU,GAAG,IAAI,EACjB,QAAQ,GAAG,OAAO,EAElB,YAAY,EAAE,kBAAkB,GAAG,SAAS,EAC5C,MAAM,EAAE,mBAAmB,EAC3B,IAAI,EAAE,UAAU,CACd,wBAAwB,CACtB,mBAAmB,EACnB,MAAM,GAAG,SAAS,EAClB,UAAU,EACV,KAAK,CACN,CAAC,aAAa,CAAC,CACjB,KACE,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAwDzD,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { useContext } from 'react';
|
|
3
3
|
import { useMutation as useMutationBase } from '@tanstack/react-query';
|
|
4
|
+
import { composeMutationKey } from '../lib/composeMutationKey.js';
|
|
4
5
|
import { QraftContext } from '../QraftContext.js';
|
|
5
6
|
export const useMutation = (qraftOptions, schema, args) => {
|
|
6
7
|
const [parameters, options, ...restArgs] = args;
|
|
@@ -13,22 +14,9 @@ export const useMutation = (qraftOptions, schema, args) => {
|
|
|
13
14
|
?.requestClient;
|
|
14
15
|
if (!requestClient)
|
|
15
16
|
throw new Error(`QraftContext.requestClient not found`);
|
|
16
|
-
const mutationKey =
|
|
17
|
-
?
|
|
18
|
-
|
|
19
|
-
url: schema.url,
|
|
20
|
-
method: schema.method,
|
|
21
|
-
},
|
|
22
|
-
parameters,
|
|
23
|
-
]
|
|
24
|
-
: options && 'mutationKey' in options
|
|
25
|
-
? options.mutationKey
|
|
26
|
-
: [
|
|
27
|
-
{
|
|
28
|
-
url: schema.url,
|
|
29
|
-
method: schema.method,
|
|
30
|
-
},
|
|
31
|
-
];
|
|
17
|
+
const mutationKey = options && 'mutationKey' in options
|
|
18
|
+
? options.mutationKey
|
|
19
|
+
: composeMutationKey(schema, parameters);
|
|
32
20
|
return useMutationBase({
|
|
33
21
|
...options,
|
|
34
22
|
mutationKey,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMutation.js","sourceRoot":"","sources":["../../src/callbacks/useMutation.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAInC,OAAO,EAAE,WAAW,IAAI,eAAe,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"useMutation.js","sourceRoot":"","sources":["../../src/callbacks/useMutation.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAInC,OAAO,EAAE,WAAW,IAAI,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAEvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAElE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAOlD,MAAM,CAAC,MAAM,WAAW,GAgBsC,CAC5D,YAAY,EACZ,MAAM,EACN,IAAI,EACJ,EAAE;IACF,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC;IAEhD,IACE,UAAU;QACV,OAAO,UAAU,KAAK,QAAQ;QAC9B,OAAO;QACP,aAAa,IAAI,OAAO;QAExB,MAAM,IAAI,KAAK,CACb,6EAA6E,CAC9E,CAAC;IAEJ,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,WAAW,GACf,OAAO,IAAI,aAAa,IAAI,OAAO;QACjC,CAAC,CAAE,OAAO,CAAC,WAGP;QACJ,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAE7C,OAAO,eAAe,CACpB;QACE,GAAG,OAAO;QACV,WAAW;QACX,UAAU,EACR,OAAO,EAAE,UAAU;YACnB,CAAC,UAAU;gBACT,CAAC,CAAC,UAAU,WAAW;oBACnB,OAAO,aAAa,CAAC,MAAM,EAAE;wBAC3B,UAAU;wBACV,IAAI,EAAE,WAAoB;qBAC3B,CAAC,CAAC;gBACL,CAAC;gBACH,CAAC,CAAC,UAAU,wBAAwB;oBAChC,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU,EAAE,GAAG,wBAE/B,CAAC;oBAEF,OAAO,aAAa,CAAC,MAAM,EAAE;wBAC3B,IAAI;wBACJ,UAAU;qBACF,CAAC,CAAC;gBACd,CAAC,CAAC;KACT,EACD,GAAG,QAAQ,CACH,CAAC;AACb,CAAC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { DefaultError } from '@tanstack/query-core';
|
|
2
|
+
import type { UseMutationResult } from '@tanstack/react-query';
|
|
3
|
+
import type { QraftClientOptions } from '../qraftAPIClient.js';
|
|
4
|
+
import type { RequestClientSchema } from '../RequestClient.js';
|
|
5
|
+
import { ServiceOperationMutation } from '../ServiceOperation.js';
|
|
6
|
+
export declare const useMutationState: <TData = unknown, TError = DefaultError, TVariables = unknown, TContext = unknown>(qraftOptions: QraftClientOptions | undefined, schema: RequestClientSchema, args: Parameters<ServiceOperationMutation<RequestClientSchema, object | undefined, TVariables, TData>['useMutationState']>) => UseMutationResult<TData, TError, TVariables, TContext>;
|
|
7
|
+
//# sourceMappingURL=useMutationState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMutationState.d.ts","sourceRoot":"","sources":["../../src/callbacks/useMutationState.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAI/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAElE,eAAO,MAAM,gBAAgB,EAAE,CAC7B,KAAK,GAAG,OAAO,EACf,MAAM,GAAG,YAAY,EACrB,UAAU,GAAG,OAAO,EACpB,QAAQ,GAAG,OAAO,EAElB,YAAY,EAAE,kBAAkB,GAAG,SAAS,EAC5C,MAAM,EAAE,mBAAmB,EAC3B,IAAI,EAAE,UAAU,CACd,wBAAwB,CACtB,mBAAmB,EACnB,MAAM,GAAG,SAAS,EAClB,UAAU,EACV,KAAK,CACN,CAAC,kBAAkB,CAAC,CACtB,KACE,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CA0CzD,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useContext } from 'react';
|
|
3
|
+
import { useMutationState as useMutationStateTanstack } from '@tanstack/react-query';
|
|
4
|
+
import { composeMutationKey } from '../lib/composeMutationKey.js';
|
|
5
|
+
import { QraftContext } from '../QraftContext.js';
|
|
6
|
+
export const useMutationState = (qraftOptions, schema, args) => {
|
|
7
|
+
const [options, ...restArgs] = args;
|
|
8
|
+
if (options?.filters &&
|
|
9
|
+
'parameters' in options.filters &&
|
|
10
|
+
'mutationKey' in options.filters) {
|
|
11
|
+
throw new Error(`'useMutationState': 'parameters' and 'mutationKey' cannot be used together`);
|
|
12
|
+
}
|
|
13
|
+
const requestClient = useContext(qraftOptions?.context ?? QraftContext)
|
|
14
|
+
?.requestClient;
|
|
15
|
+
if (!requestClient)
|
|
16
|
+
throw new Error(`QraftContext.requestClient not found`);
|
|
17
|
+
const filters = options?.filters;
|
|
18
|
+
return useMutationStateTanstack({
|
|
19
|
+
...options,
|
|
20
|
+
filters: filters && 'mutationKey' in filters
|
|
21
|
+
? filters
|
|
22
|
+
: {
|
|
23
|
+
...filters,
|
|
24
|
+
mutationKey: composeMutationKey(schema, filters && 'parameters' in filters
|
|
25
|
+
? filters.parameters
|
|
26
|
+
: undefined),
|
|
27
|
+
},
|
|
28
|
+
}, ...restArgs);
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=useMutationState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMutationState.js","sourceRoot":"","sources":["../../src/callbacks/useMutationState.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAInC,OAAO,EAAE,gBAAgB,IAAI,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAErF,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAElE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIlD,MAAM,CAAC,MAAM,gBAAgB,GAgBiC,CAC5D,YAAY,EACZ,MAAM,EACN,IAAI,EACJ,EAAE;IACF,MAAM,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC;IAEpC,IACE,OAAO,EAAE,OAAO;QAChB,YAAY,IAAI,OAAO,CAAC,OAAO;QAC/B,aAAa,IAAI,OAAO,CAAC,OAAO,EAChC,CAAC;QACD,MAAM,IAAI,KAAK,CACb,4EAA4E,CAC7E,CAAC;IACJ,CAAC;IAED,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,OAAO,GAAG,OAAO,EAAE,OAAO,CAAC;IAEjC,OAAO,wBAAwB,CAC7B;QACE,GAAG,OAAO;QACV,OAAO,EACL,OAAO,IAAI,aAAa,IAAI,OAAO;YACjC,CAAC,CAAC,OAAO;YACT,CAAC,CAAC;gBACE,GAAG,OAAO;gBACV,WAAW,EAAE,kBAAkB,CAC7B,MAAM,EACN,OAAO,IAAI,YAAY,IAAI,OAAO;oBAChC,CAAC,CAAC,OAAO,CAAC,UAAU;oBACpB,CAAC,CAAC,SAAS,CACd;aACF;KACC,EACV,GAAG,QAAQ,CACH,CAAC;AACb,CAAC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { RequestClientSchema } from '../RequestClient.js';
|
|
2
|
+
import { ServiceOperationMutationKey } from '../ServiceOperation.js';
|
|
3
|
+
/**
|
|
4
|
+
* Omit `body` or `requestBody` from mutation parameters if exists
|
|
5
|
+
* and return the rest of the parameters
|
|
6
|
+
*/
|
|
7
|
+
export declare function composeMutationKey<TSchema extends RequestClientSchema, TParams = undefined>(schema: TSchema, parameters: undefined): ServiceOperationMutationKey<TSchema, undefined>;
|
|
8
|
+
export declare function composeMutationKey<TSchema extends RequestClientSchema, TParams>(schema: TSchema, parameters: TParams): ServiceOperationMutationKey<TSchema, TParams>;
|
|
9
|
+
export declare function omitMutationPayload<T>(params: T): {};
|
|
10
|
+
//# sourceMappingURL=composeMutationKey.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composeMutationKey.d.ts","sourceRoot":"","sources":["../../src/lib/composeMutationKey.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAErE;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,SAAS,mBAAmB,EACnC,OAAO,GAAG,SAAS,EAEnB,MAAM,EAAE,OAAO,EACf,UAAU,EAAE,SAAS,GACpB,2BAA2B,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AACnD,wBAAgB,kBAAkB,CAChC,OAAO,SAAS,mBAAmB,EACnC,OAAO,EAEP,MAAM,EAAE,OAAO,EACf,UAAU,EAAE,OAAO,GAClB,2BAA2B,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAgBjD,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,MAa/C"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export function composeMutationKey(schema, parameters) {
|
|
2
|
+
return parameters === undefined
|
|
3
|
+
? [{ url: schema.url, method: schema.method }]
|
|
4
|
+
: [
|
|
5
|
+
{
|
|
6
|
+
url: schema.url,
|
|
7
|
+
method: schema.method,
|
|
8
|
+
},
|
|
9
|
+
omitMutationPayload(parameters),
|
|
10
|
+
];
|
|
11
|
+
}
|
|
12
|
+
export function omitMutationPayload(params) {
|
|
13
|
+
if (!params || typeof params !== 'object')
|
|
14
|
+
throw new Error('`params` must be object');
|
|
15
|
+
if ('body' in params || 'requestBody' in params) {
|
|
16
|
+
const { body, requestBody, ...paramsRest } = params;
|
|
17
|
+
return paramsRest;
|
|
18
|
+
}
|
|
19
|
+
return params;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=composeMutationKey.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composeMutationKey.js","sourceRoot":"","sources":["../../src/lib/composeMutationKey.ts"],"names":[],"mappings":"AAqBA,MAAM,UAAU,kBAAkB,CAGhC,MAAe,EAAE,UAA+B;IAChD,OAAO,UAAU,KAAK,SAAS;QAC7B,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;QAC9C,CAAC,CAAC;YACE;gBACE,GAAG,EAAE,MAAM,CAAC,GAAG;gBACf,MAAM,EAAE,MAAM,CAAC,MAAM;aACtB;YACD,mBAAmB,CAAC,UAAU,CAAC;SAChC,CAAC;AACR,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAI,MAAS;IAC9C,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QACvC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAE7C,IAAI,MAAM,IAAI,MAAM,IAAI,aAAa,IAAI,MAAM,EAAE,CAAC;QAChD,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,UAAU,EAAE,GAAG,MAG5C,CAAC;QACF,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,OAAO,MAAyC,CAAC;AACnD,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.6",
|
|
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.4",
|
|
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
|
@@ -2,6 +2,9 @@ import {
|
|
|
2
2
|
DefaultError,
|
|
3
3
|
InfiniteData,
|
|
4
4
|
InfiniteQueryPageParamsOptions,
|
|
5
|
+
Mutation,
|
|
6
|
+
MutationState,
|
|
7
|
+
MutationStatus,
|
|
5
8
|
NoInfer,
|
|
6
9
|
QueryClient,
|
|
7
10
|
SetDataOptions,
|
|
@@ -36,8 +39,10 @@ export type ServiceOperationInfiniteQueryKey<S extends { url: string }, T> = [
|
|
|
36
39
|
|
|
37
40
|
export type ServiceOperationMutationKey<
|
|
38
41
|
S extends Record<'url' | 'method', string>,
|
|
39
|
-
T,
|
|
40
|
-
> =
|
|
42
|
+
T extends unknown,
|
|
43
|
+
> = NonNullable<T> extends never
|
|
44
|
+
? [Pick<S, 'url' | 'method'>]
|
|
45
|
+
: [Pick<S, 'url' | 'method'>, T];
|
|
41
46
|
|
|
42
47
|
export interface ServiceOperationQuery<
|
|
43
48
|
TSchema extends { url: string; method: string },
|
|
@@ -207,6 +212,7 @@ export interface ServiceOperationMutation<
|
|
|
207
212
|
TParams,
|
|
208
213
|
TError = DefaultError,
|
|
209
214
|
> extends ServiceOperationUseMutation<TSchema, TBody, TData, TParams, TError>,
|
|
215
|
+
ServiceOperationUseMutationState<TSchema, TBody, TData, TParams, TError>,
|
|
210
216
|
ServiceOperationMutationFn<TSchema, TBody, TData, TParams>,
|
|
211
217
|
ServiceOperationSetQueryData<TData, TParams> {
|
|
212
218
|
schema: TSchema;
|
|
@@ -220,13 +226,11 @@ interface ServiceOperationUseMutation<
|
|
|
220
226
|
TError = DefaultError,
|
|
221
227
|
> {
|
|
222
228
|
getMutationKey<T extends TParams>(
|
|
223
|
-
params: T
|
|
229
|
+
params: T | undefined
|
|
224
230
|
): ServiceOperationMutationKey<TSchema, T>;
|
|
225
231
|
|
|
226
232
|
useMutation<
|
|
227
|
-
TVariables extends
|
|
228
|
-
? {}
|
|
229
|
-
: TParams),
|
|
233
|
+
TVariables extends MutationVariables<TBody, TParams>,
|
|
230
234
|
TContext = unknown,
|
|
231
235
|
>(
|
|
232
236
|
params?: undefined,
|
|
@@ -252,6 +256,94 @@ interface ServiceOperationUseMutation<
|
|
|
252
256
|
): UseMutationResult<TData, TError | Error, TVariables, TContext>;
|
|
253
257
|
}
|
|
254
258
|
|
|
259
|
+
type MutationFilters<
|
|
260
|
+
TSchema extends { url: string; method: string },
|
|
261
|
+
TBody,
|
|
262
|
+
TData,
|
|
263
|
+
TParams,
|
|
264
|
+
TError = DefaultError,
|
|
265
|
+
TContext = unknown,
|
|
266
|
+
> = {
|
|
267
|
+
/**
|
|
268
|
+
* Match mutation key exactly
|
|
269
|
+
*/
|
|
270
|
+
exact?: boolean;
|
|
271
|
+
/**
|
|
272
|
+
* Include mutations matching this predicate function
|
|
273
|
+
*/
|
|
274
|
+
predicate?: (
|
|
275
|
+
mutation: Mutation<
|
|
276
|
+
TData,
|
|
277
|
+
TError,
|
|
278
|
+
MutationVariables<TBody, TParams>,
|
|
279
|
+
TContext
|
|
280
|
+
>
|
|
281
|
+
) => boolean;
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* Filter by mutation status
|
|
285
|
+
*/
|
|
286
|
+
status?: MutationStatus;
|
|
287
|
+
} & (
|
|
288
|
+
| {
|
|
289
|
+
/**
|
|
290
|
+
* Include mutations matching this mutation key
|
|
291
|
+
*/
|
|
292
|
+
mutationKey?: ServiceOperationMutationKey<
|
|
293
|
+
TSchema,
|
|
294
|
+
PartialParams<TParams>
|
|
295
|
+
>;
|
|
296
|
+
}
|
|
297
|
+
| {
|
|
298
|
+
/**
|
|
299
|
+
* Include mutations matching these parameters
|
|
300
|
+
*/
|
|
301
|
+
parameters?: PartialParams<TParams>;
|
|
302
|
+
}
|
|
303
|
+
);
|
|
304
|
+
|
|
305
|
+
type MutationVariables<TBody, TParams> = {
|
|
306
|
+
body: TBody;
|
|
307
|
+
} & (NonNullable<TParams> extends never ? {} : TParams);
|
|
308
|
+
|
|
309
|
+
interface ServiceOperationUseMutationState<
|
|
310
|
+
TSchema extends { url: string; method: string },
|
|
311
|
+
TBody,
|
|
312
|
+
TData,
|
|
313
|
+
TParams,
|
|
314
|
+
TError = DefaultError,
|
|
315
|
+
> {
|
|
316
|
+
useMutationState<
|
|
317
|
+
TContext = unknown,
|
|
318
|
+
TResult = MutationState<
|
|
319
|
+
TData,
|
|
320
|
+
TError,
|
|
321
|
+
MutationVariables<TBody, TParams>,
|
|
322
|
+
TContext
|
|
323
|
+
>,
|
|
324
|
+
>(
|
|
325
|
+
options?: {
|
|
326
|
+
filters?: MutationFilters<
|
|
327
|
+
TSchema,
|
|
328
|
+
TBody,
|
|
329
|
+
TData,
|
|
330
|
+
TParams,
|
|
331
|
+
TError,
|
|
332
|
+
TContext
|
|
333
|
+
>;
|
|
334
|
+
select?: (
|
|
335
|
+
mutation: Mutation<
|
|
336
|
+
TData,
|
|
337
|
+
TError,
|
|
338
|
+
MutationVariables<TBody, TParams>,
|
|
339
|
+
TContext
|
|
340
|
+
>
|
|
341
|
+
) => TResult;
|
|
342
|
+
},
|
|
343
|
+
queryClient?: QueryClient
|
|
344
|
+
): Array<TResult>;
|
|
345
|
+
}
|
|
346
|
+
|
|
255
347
|
interface ServiceOperationQueryFn<
|
|
256
348
|
TSchema extends { url: string; method: string },
|
|
257
349
|
TData,
|
|
@@ -1,47 +1,19 @@
|
|
|
1
|
+
import { composeMutationKey } from '../lib/composeMutationKey.js';
|
|
1
2
|
import type { QraftClientOptions } from '../qraftAPIClient.js';
|
|
2
3
|
import type { RequestClientSchema } from '../RequestClient.js';
|
|
3
|
-
import {
|
|
4
|
-
ServiceOperationMutation,
|
|
5
|
-
ServiceOperationMutationKey,
|
|
6
|
-
} from '../ServiceOperation.js';
|
|
4
|
+
import { ServiceOperationMutation } from '../ServiceOperation.js';
|
|
7
5
|
|
|
8
6
|
export const getMutationKey = (
|
|
9
7
|
qraftOptions: QraftClientOptions | undefined,
|
|
10
8
|
schema: RequestClientSchema,
|
|
11
|
-
args:
|
|
12
|
-
) => {
|
|
13
|
-
const [parameters] = args as Parameters<
|
|
9
|
+
args: Parameters<
|
|
14
10
|
ServiceOperationMutation<
|
|
15
11
|
RequestClientSchema,
|
|
16
12
|
unknown,
|
|
17
13
|
unknown,
|
|
18
14
|
unknown
|
|
19
15
|
>['getMutationKey']
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
{
|
|
24
|
-
url: schema.url,
|
|
25
|
-
method: schema.method,
|
|
26
|
-
},
|
|
27
|
-
omitMutationPayload(parameters),
|
|
28
|
-
];
|
|
29
|
-
|
|
30
|
-
return key;
|
|
16
|
+
>
|
|
17
|
+
) => {
|
|
18
|
+
return composeMutationKey(schema, args[0]);
|
|
31
19
|
};
|
|
32
|
-
|
|
33
|
-
function omitMutationPayload<T>(params: T) {
|
|
34
|
-
if (!params || typeof params !== 'object')
|
|
35
|
-
throw new Error('`params` must be object');
|
|
36
|
-
|
|
37
|
-
if ('body' in params || 'requestBody' in params) {
|
|
38
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
39
|
-
const { body, requestBody, ...paramsRest } = params as Record<
|
|
40
|
-
'body' | 'requestBody',
|
|
41
|
-
unknown
|
|
42
|
-
>;
|
|
43
|
-
return paramsRest;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
return params as Omit<T, 'body' | 'requestBody'>;
|
|
47
|
-
}
|
|
@@ -6,6 +6,7 @@ import type { DefaultError } from '@tanstack/query-core';
|
|
|
6
6
|
import type { UseMutationResult } from '@tanstack/react-query';
|
|
7
7
|
import { useMutation as useMutationBase } from '@tanstack/react-query';
|
|
8
8
|
|
|
9
|
+
import { composeMutationKey } from '../lib/composeMutationKey.js';
|
|
9
10
|
import type { QraftClientOptions } from '../qraftAPIClient.js';
|
|
10
11
|
import { QraftContext } from '../QraftContext.js';
|
|
11
12
|
import type { RequestClientSchema } from '../RequestClient.js';
|
|
@@ -53,25 +54,12 @@ export const useMutation: <
|
|
|
53
54
|
if (!requestClient) throw new Error(`QraftContext.requestClient not found`);
|
|
54
55
|
|
|
55
56
|
const mutationKey =
|
|
56
|
-
|
|
57
|
-
? (
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
parameters,
|
|
63
|
-
] as const)
|
|
64
|
-
: options && 'mutationKey' in options
|
|
65
|
-
? (options.mutationKey as ServiceOperationMutationKey<
|
|
66
|
-
typeof schema,
|
|
67
|
-
unknown
|
|
68
|
-
>)
|
|
69
|
-
: ([
|
|
70
|
-
{
|
|
71
|
-
url: schema.url,
|
|
72
|
-
method: schema.method,
|
|
73
|
-
},
|
|
74
|
-
] as const);
|
|
57
|
+
options && 'mutationKey' in options
|
|
58
|
+
? (options.mutationKey as ServiceOperationMutationKey<
|
|
59
|
+
typeof schema,
|
|
60
|
+
unknown
|
|
61
|
+
>)
|
|
62
|
+
: composeMutationKey(schema, parameters);
|
|
75
63
|
|
|
76
64
|
return useMutationBase(
|
|
77
65
|
{
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { useContext } from 'react';
|
|
4
|
+
|
|
5
|
+
import type { DefaultError } from '@tanstack/query-core';
|
|
6
|
+
import type { UseMutationResult } from '@tanstack/react-query';
|
|
7
|
+
import { useMutationState as useMutationStateTanstack } from '@tanstack/react-query';
|
|
8
|
+
|
|
9
|
+
import { composeMutationKey } from '../lib/composeMutationKey.js';
|
|
10
|
+
import type { QraftClientOptions } from '../qraftAPIClient.js';
|
|
11
|
+
import { QraftContext } from '../QraftContext.js';
|
|
12
|
+
import type { RequestClientSchema } from '../RequestClient.js';
|
|
13
|
+
import { ServiceOperationMutation } from '../ServiceOperation.js';
|
|
14
|
+
|
|
15
|
+
export const useMutationState: <
|
|
16
|
+
TData = unknown,
|
|
17
|
+
TError = DefaultError,
|
|
18
|
+
TVariables = unknown,
|
|
19
|
+
TContext = unknown,
|
|
20
|
+
>(
|
|
21
|
+
qraftOptions: QraftClientOptions | undefined,
|
|
22
|
+
schema: RequestClientSchema,
|
|
23
|
+
args: Parameters<
|
|
24
|
+
ServiceOperationMutation<
|
|
25
|
+
RequestClientSchema,
|
|
26
|
+
object | undefined,
|
|
27
|
+
TVariables,
|
|
28
|
+
TData
|
|
29
|
+
>['useMutationState']
|
|
30
|
+
>
|
|
31
|
+
) => UseMutationResult<TData, TError, TVariables, TContext> = (
|
|
32
|
+
qraftOptions,
|
|
33
|
+
schema,
|
|
34
|
+
args
|
|
35
|
+
) => {
|
|
36
|
+
const [options, ...restArgs] = args;
|
|
37
|
+
|
|
38
|
+
if (
|
|
39
|
+
options?.filters &&
|
|
40
|
+
'parameters' in options.filters &&
|
|
41
|
+
'mutationKey' in options.filters
|
|
42
|
+
) {
|
|
43
|
+
throw new Error(
|
|
44
|
+
`'useMutationState': 'parameters' and 'mutationKey' cannot be used together`
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const requestClient = useContext(qraftOptions?.context ?? QraftContext)
|
|
49
|
+
?.requestClient;
|
|
50
|
+
|
|
51
|
+
if (!requestClient) throw new Error(`QraftContext.requestClient not found`);
|
|
52
|
+
|
|
53
|
+
const filters = options?.filters;
|
|
54
|
+
|
|
55
|
+
return useMutationStateTanstack(
|
|
56
|
+
{
|
|
57
|
+
...options,
|
|
58
|
+
filters:
|
|
59
|
+
filters && 'mutationKey' in filters
|
|
60
|
+
? filters
|
|
61
|
+
: {
|
|
62
|
+
...filters,
|
|
63
|
+
mutationKey: composeMutationKey(
|
|
64
|
+
schema,
|
|
65
|
+
filters && 'parameters' in filters
|
|
66
|
+
? filters.parameters
|
|
67
|
+
: undefined
|
|
68
|
+
),
|
|
69
|
+
},
|
|
70
|
+
} as never,
|
|
71
|
+
...restArgs
|
|
72
|
+
) as never;
|
|
73
|
+
};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { composeMutationKey } from './composeMutationKey.js';
|
|
2
|
+
|
|
3
|
+
describe('composeMutationKey', () => {
|
|
4
|
+
it('should return mutation key with parameters', () => {
|
|
5
|
+
const schema = {
|
|
6
|
+
url: 'https://example.com',
|
|
7
|
+
method: 'get',
|
|
8
|
+
} as const;
|
|
9
|
+
|
|
10
|
+
const parameters = {
|
|
11
|
+
body: 'body',
|
|
12
|
+
requestBody: 'requestBody',
|
|
13
|
+
other: 'other',
|
|
14
|
+
};
|
|
15
|
+
const result = composeMutationKey(schema, parameters);
|
|
16
|
+
|
|
17
|
+
expect(result).toEqual([
|
|
18
|
+
{
|
|
19
|
+
url: schema.url,
|
|
20
|
+
method: schema.method,
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
other: 'other',
|
|
24
|
+
},
|
|
25
|
+
]);
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
it('should return mutation key without parameters', () => {
|
|
29
|
+
const schema = {
|
|
30
|
+
url: 'https://example.com',
|
|
31
|
+
method: 'get',
|
|
32
|
+
} as const;
|
|
33
|
+
|
|
34
|
+
const result = composeMutationKey(schema, undefined);
|
|
35
|
+
|
|
36
|
+
expect(result).toEqual([
|
|
37
|
+
{
|
|
38
|
+
url: schema.url,
|
|
39
|
+
method: schema.method,
|
|
40
|
+
},
|
|
41
|
+
]);
|
|
42
|
+
});
|
|
43
|
+
});
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { RequestClientSchema } from '../RequestClient.js';
|
|
2
|
+
import { ServiceOperationMutationKey } from '../ServiceOperation.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Omit `body` or `requestBody` from mutation parameters if exists
|
|
6
|
+
* and return the rest of the parameters
|
|
7
|
+
*/
|
|
8
|
+
export function composeMutationKey<
|
|
9
|
+
TSchema extends RequestClientSchema,
|
|
10
|
+
TParams = undefined,
|
|
11
|
+
>(
|
|
12
|
+
schema: TSchema,
|
|
13
|
+
parameters: undefined
|
|
14
|
+
): ServiceOperationMutationKey<TSchema, undefined>;
|
|
15
|
+
export function composeMutationKey<
|
|
16
|
+
TSchema extends RequestClientSchema,
|
|
17
|
+
TParams,
|
|
18
|
+
>(
|
|
19
|
+
schema: TSchema,
|
|
20
|
+
parameters: TParams
|
|
21
|
+
): ServiceOperationMutationKey<TSchema, TParams>;
|
|
22
|
+
export function composeMutationKey<
|
|
23
|
+
TSchema extends RequestClientSchema,
|
|
24
|
+
TParams = unknown,
|
|
25
|
+
>(schema: TSchema, parameters: TParams | undefined) {
|
|
26
|
+
return parameters === undefined
|
|
27
|
+
? [{ url: schema.url, method: schema.method }]
|
|
28
|
+
: [
|
|
29
|
+
{
|
|
30
|
+
url: schema.url,
|
|
31
|
+
method: schema.method,
|
|
32
|
+
},
|
|
33
|
+
omitMutationPayload(parameters),
|
|
34
|
+
];
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export function omitMutationPayload<T>(params: T) {
|
|
38
|
+
if (!params || typeof params !== 'object')
|
|
39
|
+
throw new Error('`params` must be object');
|
|
40
|
+
|
|
41
|
+
if ('body' in params || 'requestBody' in params) {
|
|
42
|
+
const { body, requestBody, ...paramsRest } = params as Record<
|
|
43
|
+
'body' | 'requestBody',
|
|
44
|
+
unknown
|
|
45
|
+
>;
|
|
46
|
+
return paramsRest;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return params as Omit<T, 'body' | 'requestBody'>;
|
|
50
|
+
}
|
|
@@ -540,6 +540,230 @@ describe('Qraft uses Mutations', () => {
|
|
|
540
540
|
});
|
|
541
541
|
});
|
|
542
542
|
|
|
543
|
+
describe('Qraft uses Mutation State', () => {
|
|
544
|
+
const parameters = {
|
|
545
|
+
header: {
|
|
546
|
+
'x-monite-version': '1.0.0',
|
|
547
|
+
},
|
|
548
|
+
path: {
|
|
549
|
+
entity_id: '1',
|
|
550
|
+
},
|
|
551
|
+
query: {
|
|
552
|
+
referer: 'https://example.com',
|
|
553
|
+
},
|
|
554
|
+
} as const;
|
|
555
|
+
|
|
556
|
+
it('supports useMutationState with filter', async () => {
|
|
557
|
+
const queryClient = new QueryClient();
|
|
558
|
+
|
|
559
|
+
const { result: mutationResult } = renderHook(
|
|
560
|
+
() => qraft.entities.postEntitiesIdDocuments.useMutation(parameters),
|
|
561
|
+
{
|
|
562
|
+
wrapper: (props) => <Providers {...props} queryClient={queryClient} />,
|
|
563
|
+
}
|
|
564
|
+
);
|
|
565
|
+
|
|
566
|
+
act(() => {
|
|
567
|
+
mutationResult.current.mutate({
|
|
568
|
+
verification_document_back: 'back',
|
|
569
|
+
verification_document_front: 'front',
|
|
570
|
+
});
|
|
571
|
+
});
|
|
572
|
+
|
|
573
|
+
await waitFor(() => {
|
|
574
|
+
expect(mutationResult.current.data).toBeDefined();
|
|
575
|
+
});
|
|
576
|
+
|
|
577
|
+
const { result: mutationStateResult } = renderHook(
|
|
578
|
+
() =>
|
|
579
|
+
qraft.entities.postEntitiesIdDocuments.useMutationState({
|
|
580
|
+
filters: {
|
|
581
|
+
parameters,
|
|
582
|
+
},
|
|
583
|
+
}),
|
|
584
|
+
{
|
|
585
|
+
wrapper: (props) => <Providers {...props} queryClient={queryClient} />,
|
|
586
|
+
}
|
|
587
|
+
);
|
|
588
|
+
|
|
589
|
+
expect(mutationStateResult.current.at(0)?.data).toEqual({
|
|
590
|
+
body: {
|
|
591
|
+
verification_document_back: 'back',
|
|
592
|
+
verification_document_front: 'front',
|
|
593
|
+
},
|
|
594
|
+
...parameters,
|
|
595
|
+
});
|
|
596
|
+
});
|
|
597
|
+
|
|
598
|
+
it('supports useMutationState with filter and select', async () => {
|
|
599
|
+
const queryClient = new QueryClient();
|
|
600
|
+
|
|
601
|
+
const { result: mutationResult } = renderHook(
|
|
602
|
+
() => qraft.entities.postEntitiesIdDocuments.useMutation(parameters),
|
|
603
|
+
{
|
|
604
|
+
wrapper: (props) => <Providers {...props} queryClient={queryClient} />,
|
|
605
|
+
}
|
|
606
|
+
);
|
|
607
|
+
|
|
608
|
+
act(() => {
|
|
609
|
+
mutationResult.current.mutate({
|
|
610
|
+
verification_document_back: 'back',
|
|
611
|
+
verification_document_front: 'front',
|
|
612
|
+
});
|
|
613
|
+
});
|
|
614
|
+
|
|
615
|
+
await waitFor(() => {
|
|
616
|
+
expect(mutationResult.current.data).toBeDefined();
|
|
617
|
+
});
|
|
618
|
+
|
|
619
|
+
const { result: mutationStateResult } = renderHook(
|
|
620
|
+
() =>
|
|
621
|
+
qraft.entities.postEntitiesIdDocuments.useMutationState({
|
|
622
|
+
filters: {
|
|
623
|
+
parameters,
|
|
624
|
+
},
|
|
625
|
+
select(mutation) {
|
|
626
|
+
return (
|
|
627
|
+
mutation.state.data?.header?.['x-monite-version'] ===
|
|
628
|
+
parameters.header['x-monite-version']
|
|
629
|
+
);
|
|
630
|
+
},
|
|
631
|
+
}),
|
|
632
|
+
{
|
|
633
|
+
wrapper: (props) => <Providers {...props} queryClient={queryClient} />,
|
|
634
|
+
}
|
|
635
|
+
);
|
|
636
|
+
|
|
637
|
+
expect(mutationStateResult.current.at(0)).toEqual(true);
|
|
638
|
+
});
|
|
639
|
+
|
|
640
|
+
it('supports useMutationState with without filter', async () => {
|
|
641
|
+
const queryClient = new QueryClient();
|
|
642
|
+
|
|
643
|
+
const { result: mutationResult } = renderHook(
|
|
644
|
+
() => qraft.entities.postEntitiesIdDocuments.useMutation(parameters),
|
|
645
|
+
{
|
|
646
|
+
wrapper: (props) => <Providers {...props} queryClient={queryClient} />,
|
|
647
|
+
}
|
|
648
|
+
);
|
|
649
|
+
|
|
650
|
+
act(() => {
|
|
651
|
+
mutationResult.current.mutate({
|
|
652
|
+
verification_document_back: 'back',
|
|
653
|
+
verification_document_front: 'front',
|
|
654
|
+
});
|
|
655
|
+
});
|
|
656
|
+
|
|
657
|
+
await waitFor(() => {
|
|
658
|
+
expect(mutationResult.current.data).toBeDefined();
|
|
659
|
+
});
|
|
660
|
+
|
|
661
|
+
const { result: mutationStateResult } = renderHook(
|
|
662
|
+
() => qraft.entities.postEntitiesIdDocuments.useMutationState(),
|
|
663
|
+
{
|
|
664
|
+
wrapper: (props) => <Providers {...props} queryClient={queryClient} />,
|
|
665
|
+
}
|
|
666
|
+
);
|
|
667
|
+
|
|
668
|
+
expect(mutationStateResult.current.at(0)?.data).toEqual({
|
|
669
|
+
body: {
|
|
670
|
+
verification_document_back: 'back',
|
|
671
|
+
verification_document_front: 'front',
|
|
672
|
+
},
|
|
673
|
+
...parameters,
|
|
674
|
+
});
|
|
675
|
+
});
|
|
676
|
+
|
|
677
|
+
it('supports useMutationState with mutationKey and select', async () => {
|
|
678
|
+
const queryClient = new QueryClient();
|
|
679
|
+
|
|
680
|
+
const { result: mutationHookResultToMatch } = renderHook(
|
|
681
|
+
() => qraft.entities.postEntitiesIdDocuments.useMutation(parameters),
|
|
682
|
+
{
|
|
683
|
+
wrapper: (props) => <Providers {...props} queryClient={queryClient} />,
|
|
684
|
+
}
|
|
685
|
+
);
|
|
686
|
+
|
|
687
|
+
act(() => {
|
|
688
|
+
mutationHookResultToMatch.current.mutate({
|
|
689
|
+
verification_document_back: 'back',
|
|
690
|
+
verification_document_front: 'front',
|
|
691
|
+
});
|
|
692
|
+
});
|
|
693
|
+
|
|
694
|
+
await waitFor(() => {
|
|
695
|
+
expect(mutationHookResultToMatch.current.data).toBeDefined();
|
|
696
|
+
});
|
|
697
|
+
|
|
698
|
+
const { result: mutationStateHookResult } = renderHook(
|
|
699
|
+
() =>
|
|
700
|
+
qraft.entities.postEntitiesIdDocuments.useMutationState({
|
|
701
|
+
filters: {
|
|
702
|
+
mutationKey:
|
|
703
|
+
qraft.entities.postEntitiesIdDocuments.getMutationKey(parameters),
|
|
704
|
+
},
|
|
705
|
+
select(mutation) {
|
|
706
|
+
return (
|
|
707
|
+
mutation.state.data?.header?.['x-monite-version'] ===
|
|
708
|
+
parameters.header['x-monite-version']
|
|
709
|
+
);
|
|
710
|
+
},
|
|
711
|
+
}),
|
|
712
|
+
{
|
|
713
|
+
wrapper: (props) => <Providers {...props} queryClient={queryClient} />,
|
|
714
|
+
}
|
|
715
|
+
);
|
|
716
|
+
|
|
717
|
+
expect(mutationStateHookResult.current.length).toEqual(1);
|
|
718
|
+
expect(mutationStateHookResult.current.at(0)).toEqual(true);
|
|
719
|
+
});
|
|
720
|
+
|
|
721
|
+
it('supports useMutationState with not partial parameters', async () => {
|
|
722
|
+
const queryClient = new QueryClient();
|
|
723
|
+
|
|
724
|
+
const { result: mutationHookResultToMatch } = renderHook(
|
|
725
|
+
() => qraft.entities.postEntitiesIdDocuments.useMutation(parameters),
|
|
726
|
+
{
|
|
727
|
+
wrapper: (props) => <Providers {...props} queryClient={queryClient} />,
|
|
728
|
+
}
|
|
729
|
+
);
|
|
730
|
+
|
|
731
|
+
act(() => {
|
|
732
|
+
mutationHookResultToMatch.current.mutate({
|
|
733
|
+
verification_document_back: 'back',
|
|
734
|
+
verification_document_front: 'front',
|
|
735
|
+
});
|
|
736
|
+
});
|
|
737
|
+
|
|
738
|
+
await waitFor(() => {
|
|
739
|
+
expect(mutationHookResultToMatch.current.data).toBeDefined();
|
|
740
|
+
});
|
|
741
|
+
|
|
742
|
+
const { result: mutationStateResult } = renderHook(
|
|
743
|
+
() =>
|
|
744
|
+
qraft.entities.postEntitiesIdDocuments.useMutationState({
|
|
745
|
+
filters: {
|
|
746
|
+
parameters: {
|
|
747
|
+
header: parameters.header,
|
|
748
|
+
},
|
|
749
|
+
},
|
|
750
|
+
select(mutation) {
|
|
751
|
+
return (
|
|
752
|
+
mutation.state.data?.header?.['x-monite-version'] ===
|
|
753
|
+
parameters.header['x-monite-version']
|
|
754
|
+
);
|
|
755
|
+
},
|
|
756
|
+
}),
|
|
757
|
+
{
|
|
758
|
+
wrapper: (props) => <Providers {...props} queryClient={queryClient} />,
|
|
759
|
+
}
|
|
760
|
+
);
|
|
761
|
+
|
|
762
|
+
expect(mutationStateResult.current.length).toEqual(1);
|
|
763
|
+
expect(mutationStateResult.current.at(0)).toEqual(true);
|
|
764
|
+
});
|
|
765
|
+
});
|
|
766
|
+
|
|
543
767
|
describe('Qraft uses Query Function', () => {
|
|
544
768
|
it('uses queryFn', async () => {
|
|
545
769
|
const result = await qraft.approvalPolicies.getApprovalPoliciesId.queryFn(
|