floppy-disk 2.5.0-beta.1 → 2.5.0-beta.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/README.md +4 -4
- package/esm/preact/create-mutation.d.ts +4 -4
- package/esm/preact/create-mutation.js +6 -6
- package/esm/preact/create-query.d.ts +50 -38
- package/esm/preact/create-query.js +21 -23
- package/esm/preact/create-stores.d.ts +1 -2
- package/esm/react/create-mutation.d.ts +4 -4
- package/esm/react/create-mutation.js +6 -6
- package/esm/react/create-query.d.ts +50 -38
- package/esm/react/create-query.js +21 -23
- package/esm/react/create-stores.d.ts +1 -2
- package/esm/utils/index.d.ts +1 -0
- package/lib/preact/create-mutation.d.ts +4 -4
- package/lib/preact/create-mutation.js +6 -6
- package/lib/preact/create-query.d.ts +50 -38
- package/lib/preact/create-query.js +21 -23
- package/lib/preact/create-stores.d.ts +1 -2
- package/lib/react/create-mutation.d.ts +4 -4
- package/lib/react/create-mutation.js +6 -6
- package/lib/react/create-query.d.ts +50 -38
- package/lib/react/create-query.js +21 -23
- package/lib/react/create-stores.d.ts +1 -2
- package/lib/utils/index.d.ts +1 -0
- package/package.json +1 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { FunctionComponent } from 'react';
|
|
2
|
+
import { Maybe } from '../utils';
|
|
2
3
|
import { CreateStoresOptions, StoreKey, UseStores } from './create-stores';
|
|
3
|
-
export type QueryState<TKey extends StoreKey = StoreKey, TResponse = any, TData = TResponse, TError = unknown> = {
|
|
4
|
+
export type QueryState<TKey extends StoreKey = StoreKey, TResponse = any, TData = TResponse, TError = unknown, TPageParam = any> = {
|
|
4
5
|
/**
|
|
5
6
|
* Query store key, an object that will be hashed into a string as a query store identifier.
|
|
6
7
|
*/
|
|
@@ -18,17 +19,17 @@ export type QueryState<TKey extends StoreKey = StoreKey, TResponse = any, TData
|
|
|
18
19
|
*
|
|
19
20
|
* @returns Promise that will always get resolved.
|
|
20
21
|
*/
|
|
21
|
-
forceFetch: () => Promise<QueryState<TKey, TResponse, TData, TError>>;
|
|
22
|
+
forceFetch: () => Promise<QueryState<TKey, TResponse, TData, TError, TPageParam>>;
|
|
22
23
|
/**
|
|
23
24
|
* Fetch next page if has next page.
|
|
24
25
|
*
|
|
25
26
|
* If the data is empty, it will just fetch the first page.
|
|
26
27
|
*
|
|
27
|
-
* You can ignore this if your query is not
|
|
28
|
+
* You can ignore this if your query is not an infinite query.
|
|
28
29
|
*
|
|
29
30
|
* @returns Promise that will always get resolved.
|
|
30
31
|
*/
|
|
31
|
-
fetchNextPage: () => Promise<QueryState<TKey, TResponse, TData, TError>>;
|
|
32
|
+
fetchNextPage: () => Promise<QueryState<TKey, TResponse, TData, TError, TPageParam>>;
|
|
32
33
|
/**
|
|
33
34
|
* Set query state (data, error, etc) to initial state.
|
|
34
35
|
*/
|
|
@@ -40,7 +41,7 @@ export type QueryState<TKey extends StoreKey = StoreKey, TResponse = any, TData
|
|
|
40
41
|
*
|
|
41
42
|
* IMPORTANT NOTE: This won't work well on infinite query.
|
|
42
43
|
*/
|
|
43
|
-
optimisticUpdate: (response: TResponse | ((prevState: QueryState<TKey, TResponse, TData, TError>) => TResponse)) => {
|
|
44
|
+
optimisticUpdate: (response: TResponse | ((prevState: QueryState<TKey, TResponse, TData, TError, TPageParam>) => TResponse)) => {
|
|
44
45
|
revert: () => void;
|
|
45
46
|
invalidate: () => void;
|
|
46
47
|
};
|
|
@@ -54,14 +55,19 @@ export type QueryState<TKey extends StoreKey = StoreKey, TResponse = any, TData
|
|
|
54
55
|
isWaitingNextPage: boolean;
|
|
55
56
|
isRefetching: boolean;
|
|
56
57
|
isRefetchError: boolean;
|
|
58
|
+
/**
|
|
59
|
+
* Will be `true` if the response/data comes from the previous query key.
|
|
60
|
+
*
|
|
61
|
+
* @see `keepPreviousData` option
|
|
62
|
+
*/
|
|
57
63
|
isPreviousData: boolean;
|
|
58
64
|
isOptimisticData: boolean;
|
|
59
|
-
error: TError |
|
|
60
|
-
errorUpdatedAt: number |
|
|
65
|
+
error: TError | undefined;
|
|
66
|
+
errorUpdatedAt: number | undefined;
|
|
61
67
|
retryCount: number;
|
|
62
68
|
isGoingToRetry: boolean;
|
|
63
|
-
pageParam:
|
|
64
|
-
pageParams:
|
|
69
|
+
pageParam: Maybe<TPageParam>;
|
|
70
|
+
pageParams: Maybe<TPageParam>[];
|
|
65
71
|
hasNextPage: boolean;
|
|
66
72
|
retryNextPageCount: number;
|
|
67
73
|
isGoingToRetryNextPage: boolean;
|
|
@@ -77,6 +83,8 @@ export type QueryState<TKey extends StoreKey = StoreKey, TResponse = any, TData
|
|
|
77
83
|
*
|
|
78
84
|
* It has no relation with network fetching state.
|
|
79
85
|
* If you're looking for network fetching state, use `isWaiting` instead.
|
|
86
|
+
*
|
|
87
|
+
* @see https://floppy-disk.vercel.app/docs/query/introduction#query-state--network-fetching-state
|
|
80
88
|
*/
|
|
81
89
|
status: 'loading';
|
|
82
90
|
/**
|
|
@@ -84,6 +92,8 @@ export type QueryState<TKey extends StoreKey = StoreKey, TResponse = any, TData
|
|
|
84
92
|
*
|
|
85
93
|
* It has no relation with network fetching state.
|
|
86
94
|
* If you're looking for network fetching state, use `isWaiting` instead.
|
|
95
|
+
*
|
|
96
|
+
* @see https://floppy-disk.vercel.app/docs/query/introduction#query-state--network-fetching-state
|
|
87
97
|
*/
|
|
88
98
|
isLoading: true;
|
|
89
99
|
/**
|
|
@@ -98,9 +108,9 @@ export type QueryState<TKey extends StoreKey = StoreKey, TResponse = any, TData
|
|
|
98
108
|
* If data fetched successfully but then an error occured, `isError` will be `false` but `isRefetchError` will be `true`.
|
|
99
109
|
*/
|
|
100
110
|
isError: false;
|
|
101
|
-
data:
|
|
102
|
-
response:
|
|
103
|
-
responseUpdatedAt:
|
|
111
|
+
data: undefined;
|
|
112
|
+
response: undefined;
|
|
113
|
+
responseUpdatedAt: undefined;
|
|
104
114
|
} | {
|
|
105
115
|
status: 'success';
|
|
106
116
|
isLoading: false;
|
|
@@ -108,18 +118,18 @@ export type QueryState<TKey extends StoreKey = StoreKey, TResponse = any, TData
|
|
|
108
118
|
isError: false;
|
|
109
119
|
data: TData;
|
|
110
120
|
response: TResponse;
|
|
111
|
-
responseUpdatedAt: number |
|
|
121
|
+
responseUpdatedAt: number | undefined;
|
|
112
122
|
} | {
|
|
113
123
|
status: 'error';
|
|
114
124
|
isLoading: false;
|
|
115
125
|
isSuccess: false;
|
|
116
126
|
isError: true;
|
|
117
|
-
data:
|
|
118
|
-
response:
|
|
119
|
-
responseUpdatedAt:
|
|
127
|
+
data: undefined;
|
|
128
|
+
response: undefined;
|
|
129
|
+
responseUpdatedAt: undefined;
|
|
120
130
|
});
|
|
121
|
-
export type CreateQueryOptions<TKey extends StoreKey = StoreKey, TResponse = any, TData = TResponse, TError = unknown> = CreateStoresOptions<TKey, QueryState<TKey, TResponse, TData, TError>> & {
|
|
122
|
-
select?: (response: TResponse, state: Pick<QueryState<TKey, TResponse, TData, TError>, 'data' | 'key'>) => TData;
|
|
131
|
+
export type CreateQueryOptions<TKey extends StoreKey = StoreKey, TResponse = any, TData = TResponse, TError = unknown, TPageParam = any> = CreateStoresOptions<TKey, QueryState<TKey, TResponse, TData, TError, TPageParam>> & {
|
|
132
|
+
select?: (response: TResponse, state: Pick<QueryState<TKey, TResponse, TData, TError, TPageParam>, 'data' | 'key'>) => TData;
|
|
123
133
|
/**
|
|
124
134
|
* Stale time in miliseconds.
|
|
125
135
|
*
|
|
@@ -160,29 +170,31 @@ export type CreateQueryOptions<TKey extends StoreKey = StoreKey, TResponse = any
|
|
|
160
170
|
*
|
|
161
171
|
* Defaults to `1`.
|
|
162
172
|
*/
|
|
163
|
-
retry?: number | ((error: TError, prevState: QueryState<TKey, TResponse, TData, TError>) => number);
|
|
173
|
+
retry?: number | ((error: TError, prevState: QueryState<TKey, TResponse, TData, TError, TPageParam>) => number);
|
|
164
174
|
/**
|
|
165
175
|
* Error retry delay in miliseconds.
|
|
166
176
|
*
|
|
167
177
|
* Defaults to `2000` (2 seconds).
|
|
168
178
|
*/
|
|
169
|
-
retryDelay?: number | ((error: TError, prevState: QueryState<TKey, TResponse, TData, TError>) => number);
|
|
179
|
+
retryDelay?: number | ((error: TError, prevState: QueryState<TKey, TResponse, TData, TError, TPageParam>) => number);
|
|
170
180
|
/**
|
|
171
|
-
*
|
|
181
|
+
* Used for lagged query.
|
|
172
182
|
*
|
|
173
|
-
*
|
|
183
|
+
* If set to `true`, then:
|
|
184
|
+
* when the query key changed and there is no `data` in the next query key cache,
|
|
185
|
+
* the previous query key cache `data` will be used while fetching new data.
|
|
174
186
|
*/
|
|
175
187
|
keepPreviousData?: boolean;
|
|
176
188
|
/**
|
|
177
189
|
* Only set this if you have an infinite query.
|
|
178
190
|
*
|
|
179
|
-
* This function should return a variable that will be used when fetching next page
|
|
191
|
+
* This function should return a variable that will be stored as `pageParam` that can be used when fetching next page.
|
|
180
192
|
*/
|
|
181
|
-
getNextPageParam?: (lastPage: TResponse, index: number) =>
|
|
182
|
-
onBeforeFetch?: (cancel: () => void, state: QueryState<TKey, TResponse, TData, TError>) => void;
|
|
183
|
-
onSuccess?: (response: TResponse, stateBeforeCallQuery: QueryState<TKey, TResponse, TData, TError>) => void;
|
|
184
|
-
onError?: (error: TError, stateBeforeCallQuery: QueryState<TKey, TResponse, TData, TError>) => void;
|
|
185
|
-
onSettled?: (stateBeforeCallQuery: QueryState<TKey, TResponse, TData, TError>) => void;
|
|
193
|
+
getNextPageParam?: (lastPage: TResponse, index: number) => Maybe<TPageParam>;
|
|
194
|
+
onBeforeFetch?: (cancel: () => void, state: QueryState<TKey, TResponse, TData, TError, TPageParam>) => void;
|
|
195
|
+
onSuccess?: (response: TResponse, stateBeforeCallQuery: QueryState<TKey, TResponse, TData, TError, TPageParam>) => void;
|
|
196
|
+
onError?: (error: TError, stateBeforeCallQuery: QueryState<TKey, TResponse, TData, TError, TPageParam>) => void;
|
|
197
|
+
onSettled?: (stateBeforeCallQuery: QueryState<TKey, TResponse, TData, TError, TPageParam>) => void;
|
|
186
198
|
/**
|
|
187
199
|
* Cache time in miliseconds.
|
|
188
200
|
*
|
|
@@ -203,9 +215,9 @@ export type CreateQueryOptions<TKey extends StoreKey = StoreKey, TResponse = any
|
|
|
203
215
|
*
|
|
204
216
|
* @see https://floppy-disk.vercel.app/docs/query/polling
|
|
205
217
|
*/
|
|
206
|
-
refetchInterval?: number | false | ((state: QueryState<TKey, TResponse, TData, TError>) => number | false);
|
|
218
|
+
refetchInterval?: number | false | ((state: QueryState<TKey, TResponse, TData, TError, TPageParam>) => number | false);
|
|
207
219
|
};
|
|
208
|
-
export type UseQuery<TKey extends StoreKey = StoreKey, TResponse = any, TData = TResponse, TError = unknown> = UseStores<TKey, QueryState<TKey, TResponse, TData, TError>> & {
|
|
220
|
+
export type UseQuery<TKey extends StoreKey = StoreKey, TResponse = any, TData = TResponse, TError = unknown, TPageParam = any> = UseStores<TKey, QueryState<TKey, TResponse, TData, TError, TPageParam>> & {
|
|
209
221
|
/**
|
|
210
222
|
* Set query's initial response.
|
|
211
223
|
*
|
|
@@ -214,7 +226,7 @@ export type UseQuery<TKey extends StoreKey = StoreKey, TResponse = any, TData =
|
|
|
214
226
|
* IMPORTANT NOTE: Put this on the root component or parent component, before any component subscribed!
|
|
215
227
|
*/
|
|
216
228
|
setInitialResponse: (options: {
|
|
217
|
-
key?: TKey
|
|
229
|
+
key?: Maybe<TKey>;
|
|
218
230
|
response: TResponse;
|
|
219
231
|
skipRevalidation?: boolean;
|
|
220
232
|
}) => void;
|
|
@@ -225,7 +237,7 @@ export type UseQuery<TKey extends StoreKey = StoreKey, TResponse = any, TData =
|
|
|
225
237
|
/**
|
|
226
238
|
* Set query state (data, error, etc) to initial state.
|
|
227
239
|
*/
|
|
228
|
-
resetSpecificKey: (key?: TKey
|
|
240
|
+
resetSpecificKey: (key?: Maybe<TKey>) => void;
|
|
229
241
|
/**
|
|
230
242
|
* Invalidate query means marking a query as stale, and will refetch only if the query is active (has subscriber)
|
|
231
243
|
*/
|
|
@@ -233,7 +245,7 @@ export type UseQuery<TKey extends StoreKey = StoreKey, TResponse = any, TData =
|
|
|
233
245
|
/**
|
|
234
246
|
* Invalidate query means marking a query as stale, and will refetch only if the query is active (has subscriber)
|
|
235
247
|
*/
|
|
236
|
-
invalidateSpecificKey: (key?: TKey
|
|
248
|
+
invalidateSpecificKey: (key?: Maybe<TKey>) => void;
|
|
237
249
|
/**
|
|
238
250
|
* Optimistic update.
|
|
239
251
|
*
|
|
@@ -242,8 +254,8 @@ export type UseQuery<TKey extends StoreKey = StoreKey, TResponse = any, TData =
|
|
|
242
254
|
* IMPORTANT NOTE: This won't work well on infinite query.
|
|
243
255
|
*/
|
|
244
256
|
optimisticUpdate: (options: {
|
|
245
|
-
key?: TKey
|
|
246
|
-
response: TResponse | ((prevState: QueryState<TKey, TResponse, TData, TError>) => TResponse);
|
|
257
|
+
key?: Maybe<TKey>;
|
|
258
|
+
response: TResponse | ((prevState: QueryState<TKey, TResponse, TData, TError, TPageParam>) => TResponse);
|
|
247
259
|
}) => {
|
|
248
260
|
revert: () => void;
|
|
249
261
|
invalidate: () => void;
|
|
@@ -251,11 +263,11 @@ export type UseQuery<TKey extends StoreKey = StoreKey, TResponse = any, TData =
|
|
|
251
263
|
/**
|
|
252
264
|
* Use query with suspense mode.
|
|
253
265
|
*/
|
|
254
|
-
suspend: (key?: TKey
|
|
266
|
+
suspend: (key?: Maybe<TKey>) => Extract<QueryState<TKey, TResponse, TData, TError, TPageParam>, {
|
|
255
267
|
status: 'success';
|
|
256
268
|
}>;
|
|
257
269
|
Render: (props: {
|
|
258
|
-
queryKey?: TKey
|
|
270
|
+
queryKey?: Maybe<TKey>;
|
|
259
271
|
loading?: FunctionComponent<TKey>;
|
|
260
272
|
success?: FunctionComponent<TKey>;
|
|
261
273
|
error?: FunctionComponent<TKey>;
|
|
@@ -264,4 +276,4 @@ export type UseQuery<TKey extends StoreKey = StoreKey, TResponse = any, TData =
|
|
|
264
276
|
/**
|
|
265
277
|
* @see https://floppy-disk.vercel.app/docs/api#createquery
|
|
266
278
|
*/
|
|
267
|
-
export declare const createQuery: <TKey extends StoreKey = StoreKey, TResponse = any, TData = TResponse, TError = unknown>(queryFn: (key: TKey, state: QueryState<TKey, TResponse, TData, TError>) => Promise<TResponse>, options?: CreateQueryOptions<TKey, TResponse, TData, TError>) => UseQuery<TKey, TResponse, TData, TError>;
|
|
279
|
+
export declare const createQuery: <TKey extends StoreKey = StoreKey, TResponse = any, TData = TResponse, TError = unknown, TPageParam = any>(queryFn: (key: TKey, state: QueryState<TKey, TResponse, TData, TError, TPageParam>) => Promise<TResponse>, options?: CreateQueryOptions<TKey, TResponse, TData, TError, TPageParam>) => UseQuery<TKey, TResponse, TData, TError, TPageParam>;
|
|
@@ -12,11 +12,11 @@ const INITIAL_QUERY_STATE = {
|
|
|
12
12
|
isRefetchError: false,
|
|
13
13
|
isPreviousData: false,
|
|
14
14
|
isOptimisticData: false,
|
|
15
|
-
data:
|
|
16
|
-
response:
|
|
17
|
-
responseUpdatedAt:
|
|
18
|
-
error:
|
|
19
|
-
errorUpdatedAt:
|
|
15
|
+
data: undefined,
|
|
16
|
+
response: undefined,
|
|
17
|
+
responseUpdatedAt: undefined,
|
|
18
|
+
error: undefined,
|
|
19
|
+
errorUpdatedAt: undefined,
|
|
20
20
|
retryCount: 0,
|
|
21
21
|
isGoingToRetry: false,
|
|
22
22
|
pageParam: undefined,
|
|
@@ -53,11 +53,11 @@ export const createQuery = (queryFn, options = {}) => {
|
|
|
53
53
|
return { shouldRetry: retryCount < maxRetryCount, delay };
|
|
54
54
|
};
|
|
55
55
|
const forceFetch = () => new Promise((resolve) => {
|
|
56
|
+
const state = get();
|
|
56
57
|
const responseAllPages = [];
|
|
57
|
-
const newPageParams = [
|
|
58
|
-
let pageParam =
|
|
58
|
+
const newPageParams = [state.pageParams[0]];
|
|
59
|
+
let pageParam = state.pageParams[0];
|
|
59
60
|
clearTimeout(refetchIntervalTimeoutId.get(keyHash));
|
|
60
|
-
const state = get();
|
|
61
61
|
const { isWaiting, isLoading, pageParams } = state;
|
|
62
62
|
if (isWaiting || !getValueOrComputedValue(enabled, key))
|
|
63
63
|
return resolve(state);
|
|
@@ -108,11 +108,11 @@ export const createQuery = (queryFn, options = {}) => {
|
|
|
108
108
|
isOptimisticData: false,
|
|
109
109
|
data: responseAllPages.reduce((prev, responseCurrentPage) => {
|
|
110
110
|
return select(responseCurrentPage, { key, data: prev });
|
|
111
|
-
},
|
|
111
|
+
}, undefined),
|
|
112
112
|
response,
|
|
113
113
|
responseUpdatedAt: Date.now(),
|
|
114
|
-
error:
|
|
115
|
-
errorUpdatedAt:
|
|
114
|
+
error: undefined,
|
|
115
|
+
errorUpdatedAt: undefined,
|
|
116
116
|
retryCount: 0,
|
|
117
117
|
pageParam: newPageParam,
|
|
118
118
|
pageParams: newPageParams,
|
|
@@ -127,7 +127,6 @@ export const createQuery = (queryFn, options = {}) => {
|
|
|
127
127
|
}
|
|
128
128
|
set(nextState);
|
|
129
129
|
onSuccess(response, stateBeforeCallQuery);
|
|
130
|
-
resolve(get());
|
|
131
130
|
})
|
|
132
131
|
.catch((error) => {
|
|
133
132
|
const prevState = get();
|
|
@@ -141,7 +140,7 @@ export const createQuery = (queryFn, options = {}) => {
|
|
|
141
140
|
data: responseAllPages.length
|
|
142
141
|
? responseAllPages.reduce((prev, response) => {
|
|
143
142
|
return select(response, { key, data: prev });
|
|
144
|
-
},
|
|
143
|
+
}, undefined)
|
|
145
144
|
: prevState.data,
|
|
146
145
|
error,
|
|
147
146
|
errorUpdatedAt,
|
|
@@ -154,7 +153,7 @@ export const createQuery = (queryFn, options = {}) => {
|
|
|
154
153
|
status: 'error',
|
|
155
154
|
isLoading: false,
|
|
156
155
|
isError: true,
|
|
157
|
-
data:
|
|
156
|
+
data: undefined,
|
|
158
157
|
error,
|
|
159
158
|
errorUpdatedAt,
|
|
160
159
|
isGoingToRetry: shouldRetry,
|
|
@@ -168,17 +167,17 @@ export const createQuery = (queryFn, options = {}) => {
|
|
|
168
167
|
}, delay));
|
|
169
168
|
}
|
|
170
169
|
onError(error, stateBeforeCallQuery);
|
|
171
|
-
resolve(get());
|
|
172
170
|
})
|
|
173
171
|
.finally(() => {
|
|
174
172
|
onSettled(stateBeforeCallQuery);
|
|
173
|
+
resolve(get());
|
|
175
174
|
});
|
|
176
175
|
};
|
|
177
176
|
callQuery();
|
|
178
177
|
});
|
|
179
178
|
const fetch = () => {
|
|
180
179
|
const { responseUpdatedAt } = get();
|
|
181
|
-
const isStale = Date.now() >
|
|
180
|
+
const isStale = Date.now() > (responseUpdatedAt || 0) + staleTime;
|
|
182
181
|
if (!isStale)
|
|
183
182
|
return;
|
|
184
183
|
forceFetch();
|
|
@@ -217,7 +216,6 @@ export const createQuery = (queryFn, options = {}) => {
|
|
|
217
216
|
hasNextPage: hasValue(newPageParam),
|
|
218
217
|
});
|
|
219
218
|
onSuccess(response, stateBeforeCallQuery);
|
|
220
|
-
resolve(get());
|
|
221
219
|
})
|
|
222
220
|
.catch((error) => {
|
|
223
221
|
const prevState = get();
|
|
@@ -236,10 +234,10 @@ export const createQuery = (queryFn, options = {}) => {
|
|
|
236
234
|
}, delay));
|
|
237
235
|
}
|
|
238
236
|
onError(error, stateBeforeCallQuery);
|
|
239
|
-
resolve(get());
|
|
240
237
|
})
|
|
241
238
|
.finally(() => {
|
|
242
239
|
onSettled(stateBeforeCallQuery);
|
|
240
|
+
resolve(get());
|
|
243
241
|
});
|
|
244
242
|
});
|
|
245
243
|
return {
|
|
@@ -337,8 +335,8 @@ export const createQuery = (queryFn, options = {}) => {
|
|
|
337
335
|
isSuccess: true,
|
|
338
336
|
isError: false,
|
|
339
337
|
response,
|
|
340
|
-
responseUpdatedAt: skipRevalidation ? Date.now() :
|
|
341
|
-
data: select(response, { key: key, data:
|
|
338
|
+
responseUpdatedAt: skipRevalidation ? Date.now() : undefined,
|
|
339
|
+
data: select(response, { key: key, data: undefined }),
|
|
342
340
|
pageParam: newPageParam,
|
|
343
341
|
pageParams: [undefined, newPageParam],
|
|
344
342
|
hasNextPage: hasValue(newPageParam),
|
|
@@ -357,14 +355,14 @@ export const createQuery = (queryFn, options = {}) => {
|
|
|
357
355
|
useQuery.invalidate = () => {
|
|
358
356
|
useQuery.getStores().forEach((store) => {
|
|
359
357
|
const { get, set, getSubscribers } = store;
|
|
360
|
-
set({ responseUpdatedAt:
|
|
358
|
+
set({ responseUpdatedAt: undefined });
|
|
361
359
|
if (getSubscribers().size > 0)
|
|
362
360
|
get().forceFetch();
|
|
363
361
|
});
|
|
364
362
|
};
|
|
365
363
|
useQuery.invalidateSpecificKey = (key) => {
|
|
366
364
|
const { get, set, getSubscribers } = useQuery.getStore(key);
|
|
367
|
-
set({ responseUpdatedAt:
|
|
365
|
+
set({ responseUpdatedAt: undefined });
|
|
368
366
|
if (getSubscribers().size > 0)
|
|
369
367
|
get().forceFetch();
|
|
370
368
|
};
|
|
@@ -376,7 +374,7 @@ export const createQuery = (queryFn, options = {}) => {
|
|
|
376
374
|
useQuery.set(key, {
|
|
377
375
|
isOptimisticData: true,
|
|
378
376
|
response: optimisticResponse,
|
|
379
|
-
data: select(optimisticResponse, { key: key, data:
|
|
377
|
+
data: select(optimisticResponse, { key: key, data: undefined }),
|
|
380
378
|
});
|
|
381
379
|
preventReplaceResponse.set(prevState.keyHash, true);
|
|
382
380
|
const revert = () => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { Maybe } from '../utils';
|
|
1
2
|
import { InitStoreOptions, InitStoreReturn, SelectDeps, SetStoreData, StoreData, Subscribers } from '../vanilla';
|
|
2
3
|
import { WatchProps } from './create-store';
|
|
3
|
-
type Maybe<T> = T | null | undefined;
|
|
4
4
|
export type StoreKey = Record<string, any> | undefined;
|
|
5
5
|
export type StoresInitializer<TKey extends StoreKey = StoreKey, T extends StoreData = StoreData> = (api: {
|
|
6
6
|
get: () => T;
|
|
@@ -50,4 +50,3 @@ export type CreateStoresOptions<TKey extends StoreKey = StoreKey, T extends Stor
|
|
|
50
50
|
* @see https://floppy-disk.vercel.app/docs/api#createstores
|
|
51
51
|
*/
|
|
52
52
|
export declare const createStores: <TKey extends StoreKey = StoreKey, T extends StoreData = StoreData>(initializer: StoresInitializer<TKey, T>, options?: CreateStoresOptions<TKey, T>) => UseStores<TKey, T>;
|
|
53
|
-
export {};
|
package/esm/utils/index.d.ts
CHANGED
|
@@ -3,3 +3,4 @@ export declare const identityFn: <T>(value: T) => T;
|
|
|
3
3
|
export declare const hasValue: (value: any) => boolean;
|
|
4
4
|
export declare const hashStoreKey: (obj?: any) => string;
|
|
5
5
|
export declare const getValueOrComputedValue: <T, P extends any[]>(valueOrComputeValueFn: T | ((...params: P) => T), ...params: P) => T;
|
|
6
|
+
export type Maybe<T> = T | null | undefined;
|
|
@@ -7,10 +7,10 @@ export type MutationState<TVar, TResponse = any, TError = unknown> = {
|
|
|
7
7
|
isWaiting: boolean;
|
|
8
8
|
isSuccess: boolean;
|
|
9
9
|
isError: boolean;
|
|
10
|
-
response: TResponse |
|
|
11
|
-
responseUpdatedAt: number |
|
|
12
|
-
error: TError |
|
|
13
|
-
errorUpdatedAt: number |
|
|
10
|
+
response: TResponse | undefined;
|
|
11
|
+
responseUpdatedAt: number | undefined;
|
|
12
|
+
error: TError | undefined;
|
|
13
|
+
errorUpdatedAt: number | undefined;
|
|
14
14
|
/**
|
|
15
15
|
* Mutate function.
|
|
16
16
|
*
|
|
@@ -12,10 +12,10 @@ const createMutation = (mutationFn, options = {}) => {
|
|
|
12
12
|
isWaiting: false,
|
|
13
13
|
isSuccess: false,
|
|
14
14
|
isError: false,
|
|
15
|
-
response:
|
|
16
|
-
responseUpdatedAt:
|
|
17
|
-
error:
|
|
18
|
-
errorUpdatedAt:
|
|
15
|
+
response: undefined,
|
|
16
|
+
responseUpdatedAt: undefined,
|
|
17
|
+
error: undefined,
|
|
18
|
+
errorUpdatedAt: undefined,
|
|
19
19
|
mutate: ((variables) => {
|
|
20
20
|
set({ isWaiting: true });
|
|
21
21
|
const stateBeforeMutate = get();
|
|
@@ -29,8 +29,8 @@ const createMutation = (mutationFn, options = {}) => {
|
|
|
29
29
|
isError: false,
|
|
30
30
|
response,
|
|
31
31
|
responseUpdatedAt: Date.now(),
|
|
32
|
-
error:
|
|
33
|
-
errorUpdatedAt:
|
|
32
|
+
error: undefined,
|
|
33
|
+
errorUpdatedAt: undefined,
|
|
34
34
|
});
|
|
35
35
|
onSuccess(response, variables, stateBeforeMutate);
|
|
36
36
|
resolve({ response, variables });
|