mobx-tanstack-query-api 0.3.2 → 0.3.3
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/package.json
CHANGED
|
@@ -6,11 +6,11 @@ import { EndpointQueryFlattenOptions, EndpointQueryOptions, EndpointQueryUniqKey
|
|
|
6
6
|
import { AnyEndpoint } from './endpoint.types.js';
|
|
7
7
|
export declare class EndpointQuery<TEndpoint extends AnyEndpoint, TQueryFnData = TEndpoint['__response']['data'], TError = DefaultError, TData = TQueryFnData, TQueryData = TQueryFnData> extends Query<TQueryFnData, TError, TData, TQueryData> {
|
|
8
8
|
private endpoint;
|
|
9
|
-
response: TEndpoint['__response'] | null;
|
|
10
9
|
private uniqKey?;
|
|
11
10
|
private _observableData;
|
|
12
11
|
constructor(endpoint: AnyEndpoint, queryClient: EndpointQueryClient, queryOptionsInput: EndpointQueryOptions<TEndpoint, TQueryFnData, TError, TData, TQueryData> | (() => EndpointQueryFlattenOptions<TEndpoint, TQueryFnData, TError, TData, TQueryData>));
|
|
13
12
|
get params(): MaybeFalsy<TEndpoint["__params"]>;
|
|
13
|
+
get response(): TEndpoint["__response"] | null;
|
|
14
14
|
update(updateParams: Omit<QueryUpdateOptionsAllVariants<TQueryFnData, TError, TData, TQueryData>, ExcludedQueryKeys> & {
|
|
15
15
|
params?: MaybeFalsy<TEndpoint['__params']>;
|
|
16
16
|
}): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"endpoint-query.d.ts","sourceRoot":"","sources":["../../src/runtime/endpoint-query.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"endpoint-query.d.ts","sourceRoot":"","sources":["../../src/runtime/endpoint-query.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,sBAAsB,CAAC;AAS9B,OAAO,EAAE,KAAK,EAAE,6BAA6B,EAAE,MAAM,qBAAqB,CAAC;AAE3E,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAW,MAAM,qBAAqB,CAAC;AAE5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EACL,2BAA2B,EAC3B,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EAClB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAUlD,qBAAa,aAAa,CACxB,SAAS,SAAS,WAAW,EAC7B,YAAY,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,EAC9C,MAAM,GAAG,YAAY,EACrB,KAAK,GAAG,YAAY,EACpB,UAAU,GAAG,YAAY,CACzB,SAAQ,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC;IAMpD,OAAO,CAAC,QAAQ;IALlB,OAAO,CAAC,OAAO,CAAC,CAAuB;IAEvC,OAAO,CAAC,eAAe,CAAoC;gBAGjD,QAAQ,EAAE,WAAW,EAC7B,WAAW,EAAE,mBAAmB,EAChC,iBAAiB,EACb,oBAAoB,CAAC,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,GACxE,CAAC,MAAM,2BAA2B,CAChC,SAAS,EACT,YAAY,EACZ,MAAM,EACN,KAAK,EACL,UAAU,CACX,CAAC;IAgKR,IAAI,MAAM,sCAET;IAED,IAAI,QAAQ,mCAEX;IAED,MAAM,CACJ,YAAY,EAAE,IAAI,CAChB,6BAA6B,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,EACtE,iBAAiB,CAClB,GAAG;QACF,MAAM,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;KAC5C;IAyBG,KAAK,CACT,MAAM,EAAE,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,GACxC,OAAO,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAS9C,OAAO,IAAI,IAAI;CAOhB;AAED,eAAO,MAAM,oBAAoB,GAAI,KAAK,oBAAoB,CAAC,GAAG,EAAE,GAAG,CAAC,KAChC,WAAW,CAAC,UAAU,CAC7D,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,UAAU,WAAW,EACrB,QAAQ,UAAU,CAAC,SAAS,CAAC,EAC7B,SAAS,KAAK,CAAC,oBAAoB,CAAC,KACnC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,GAAG,EAAE,CAAA;CAerC,CAAC"}
|
|
@@ -1,21 +1,33 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { comparer, computed, makeObservable, observable, reaction, runInAction, } from 'mobx';
|
|
2
2
|
import { Query } from 'mobx-tanstack-query';
|
|
3
3
|
import { callFunction } from 'yummies/common';
|
|
4
4
|
export class EndpointQuery extends Query {
|
|
5
5
|
endpoint;
|
|
6
|
-
response = null;
|
|
7
6
|
uniqKey;
|
|
8
7
|
_observableData;
|
|
9
8
|
constructor(endpoint, queryClient, queryOptionsInput) {
|
|
10
|
-
const
|
|
9
|
+
const isQueryOptionsInputFn = typeof queryOptionsInput === 'function';
|
|
10
|
+
const unpackedQueryOptionsInput = isQueryOptionsInputFn
|
|
11
11
|
? queryOptionsInput()
|
|
12
12
|
: queryOptionsInput;
|
|
13
|
+
const { uniqKey, transform: transformResponse, params, ...queryOptions } = unpackedQueryOptionsInput;
|
|
13
14
|
const _observableData = {
|
|
14
15
|
params: null,
|
|
15
16
|
dynamicOptions: undefined,
|
|
17
|
+
response: null,
|
|
16
18
|
};
|
|
19
|
+
if (!isQueryOptionsInputFn && typeof params !== 'function') {
|
|
20
|
+
if ('params' in unpackedQueryOptionsInput) {
|
|
21
|
+
_observableData.params = params;
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
_observableData.params = {};
|
|
25
|
+
}
|
|
26
|
+
_observableData.initialized = true;
|
|
27
|
+
}
|
|
17
28
|
makeObservable(_observableData, {
|
|
18
29
|
params: observable.ref,
|
|
30
|
+
response: observable.ref,
|
|
19
31
|
dynamicOptions: observable,
|
|
20
32
|
});
|
|
21
33
|
super({
|
|
@@ -38,7 +50,7 @@ export class EndpointQuery extends Query {
|
|
|
38
50
|
queryFn: async (ctx) => {
|
|
39
51
|
const params = getParamsFromContext(ctx);
|
|
40
52
|
runInAction(() => {
|
|
41
|
-
|
|
53
|
+
_observableData.response = null;
|
|
42
54
|
if (!comparer.structural(params, _observableData.params)) {
|
|
43
55
|
_observableData.params = params;
|
|
44
56
|
}
|
|
@@ -58,54 +70,63 @@ export class EndpointQuery extends Query {
|
|
|
58
70
|
};
|
|
59
71
|
const response = await endpoint.request(fixedInput);
|
|
60
72
|
runInAction(() => {
|
|
61
|
-
|
|
73
|
+
_observableData.response = response;
|
|
62
74
|
});
|
|
63
75
|
return (await transformResponse?.(response)) ?? response.data;
|
|
64
76
|
},
|
|
65
77
|
});
|
|
66
78
|
this.endpoint = endpoint;
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
79
|
+
if (isQueryOptionsInputFn || typeof params === 'function') {
|
|
80
|
+
const disposeFn = reaction(() => {
|
|
81
|
+
let outDynamicOptions;
|
|
82
|
+
let outParams;
|
|
83
|
+
if (isQueryOptionsInputFn) {
|
|
84
|
+
const result = queryOptionsInput();
|
|
85
|
+
const { params, abortSignal, select, onDone, onError, onInit, enableOnDemand, ...dynamicOptions } = result;
|
|
86
|
+
if ('params' in result) {
|
|
87
|
+
outParams = result.params;
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
outParams = {};
|
|
91
|
+
}
|
|
92
|
+
outDynamicOptions =
|
|
93
|
+
Object.keys(dynamicOptions).length > 0
|
|
94
|
+
? dynamicOptions
|
|
95
|
+
: undefined;
|
|
96
|
+
}
|
|
97
|
+
else if ('params' in unpackedQueryOptionsInput) {
|
|
98
|
+
outParams = unpackedQueryOptionsInput.params;
|
|
75
99
|
}
|
|
76
100
|
else {
|
|
77
101
|
outParams = {};
|
|
78
102
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
};
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
_observableData.params = params;
|
|
95
|
-
_observableData.dynamicOptions = dynamicOptions;
|
|
96
|
-
}), {
|
|
97
|
-
fireImmediately: true,
|
|
98
|
-
});
|
|
103
|
+
return {
|
|
104
|
+
params: callFunction(outParams),
|
|
105
|
+
dynamicOptions: outDynamicOptions,
|
|
106
|
+
};
|
|
107
|
+
}, ({ params, dynamicOptions }) => {
|
|
108
|
+
runInAction(() => {
|
|
109
|
+
_observableData.initialized = true;
|
|
110
|
+
_observableData.params = params;
|
|
111
|
+
_observableData.dynamicOptions = dynamicOptions;
|
|
112
|
+
});
|
|
113
|
+
}, {
|
|
114
|
+
fireImmediately: true,
|
|
115
|
+
});
|
|
116
|
+
this.abortController.signal.addEventListener('abort', disposeFn);
|
|
117
|
+
}
|
|
99
118
|
this.uniqKey = uniqKey;
|
|
100
|
-
observable.ref(this, 'response');
|
|
101
119
|
computed.struct(this, 'params');
|
|
120
|
+
computed.struct(this, 'response');
|
|
102
121
|
makeObservable(this);
|
|
103
122
|
this._observableData = _observableData;
|
|
104
|
-
this.abortController.signal.addEventListener('abort', disposeFn);
|
|
105
123
|
}
|
|
106
124
|
get params() {
|
|
107
125
|
return this._observableData.params;
|
|
108
126
|
}
|
|
127
|
+
get response() {
|
|
128
|
+
return this._observableData.response;
|
|
129
|
+
}
|
|
109
130
|
update(updateParams) {
|
|
110
131
|
if ('params' in updateParams) {
|
|
111
132
|
const { params, ...options } = updateParams;
|