@codeleap/query 7.0.0 → 7.0.1
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/dist/factors/createQueryManager.js +37 -0
- package/dist/factors/createQueryManager.js.map +1 -0
- package/dist/factors/createQueryOperations.js +36 -0
- package/dist/factors/createQueryOperations.js.map +1 -0
- package/dist/factors/index.js +3 -0
- package/dist/factors/index.js.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/Mutations.js +235 -0
- package/dist/lib/Mutations.js.map +1 -0
- package/dist/lib/QueryClientEnhanced/index.js +195 -0
- package/dist/lib/QueryClientEnhanced/index.js.map +1 -0
- package/dist/lib/QueryClientEnhanced/types.js +2 -0
- package/dist/lib/QueryClientEnhanced/types.js.map +1 -0
- package/dist/lib/QueryKeys.js +313 -0
- package/dist/lib/QueryKeys.js.map +1 -0
- package/dist/lib/QueryManager.js +400 -0
- package/dist/lib/QueryManager.js.map +1 -0
- package/dist/lib/QueryOperations/index.js +284 -0
- package/dist/lib/QueryOperations/index.js.map +1 -0
- package/dist/lib/QueryOperations/types.js +2 -0
- package/dist/lib/QueryOperations/types.js.map +1 -0
- package/dist/lib/index.js +6 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/types/core.js +2 -0
- package/dist/types/core.js.map +1 -0
- package/dist/types/create.js +2 -0
- package/dist/types/create.js.map +1 -0
- package/dist/types/delete.js +2 -0
- package/dist/types/delete.js.map +1 -0
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/list.js +2 -0
- package/dist/types/list.js.map +1 -0
- package/dist/types/retrieve.js +2 -0
- package/dist/types/retrieve.js.map +1 -0
- package/dist/types/update.js +2 -0
- package/dist/types/update.js.map +1 -0
- package/dist/types/utility.js +2 -0
- package/dist/types/utility.js.map +1 -0
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/misc.js +35 -0
- package/dist/utils/misc.js.map +1 -0
- package/package.json +6 -6
|
@@ -0,0 +1,400 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
11
|
+
var t = {};
|
|
12
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
13
|
+
t[p] = s[p];
|
|
14
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
15
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
16
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
17
|
+
t[p[i]] = s[p[i]];
|
|
18
|
+
}
|
|
19
|
+
return t;
|
|
20
|
+
};
|
|
21
|
+
import { useInfiniteQuery, useMutation, useQuery } from '@tanstack/react-query';
|
|
22
|
+
import { useCallback } from 'react';
|
|
23
|
+
import { createQueryKeys } from './QueryKeys';
|
|
24
|
+
import { createMutations } from './Mutations';
|
|
25
|
+
import { generateTempId } from '../utils';
|
|
26
|
+
import { TypeGuards } from '@codeleap/types';
|
|
27
|
+
import { QueryClientEnhanced } from './QueryClientEnhanced';
|
|
28
|
+
/**
|
|
29
|
+
* Comprehensive query manager class that provides hooks and utilities for managing CRUD operations with React Query
|
|
30
|
+
* @template T - The query item type that extends QueryItem
|
|
31
|
+
* @template F - The filter type used for list queries
|
|
32
|
+
*
|
|
33
|
+
* @description
|
|
34
|
+
* QueryManager provides a complete solution for managing list and individual item queries with:
|
|
35
|
+
* - Infinite scroll pagination for lists
|
|
36
|
+
* - Optimistic updates for create, update, and delete operations
|
|
37
|
+
* - Automatic cache synchronization between list and individual queries
|
|
38
|
+
* - Built-in error handling and rollback mechanisms
|
|
39
|
+
*/
|
|
40
|
+
export class QueryManager {
|
|
41
|
+
/**
|
|
42
|
+
* Creates a new QueryManager instance
|
|
43
|
+
* @param options - Configuration options for the query manager
|
|
44
|
+
*/
|
|
45
|
+
constructor(options) {
|
|
46
|
+
this.options = options;
|
|
47
|
+
this.queryClient = options.queryClient instanceof QueryClientEnhanced ? options.queryClient.client : options.queryClient;
|
|
48
|
+
this.queryKeys = createQueryKeys(options.name, this.queryClient);
|
|
49
|
+
this.mutations = createMutations(this.queryKeys, this.queryClient, options.name);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Gets the name of this query manager
|
|
53
|
+
* @returns The query name used for identification
|
|
54
|
+
*/
|
|
55
|
+
get name() {
|
|
56
|
+
return this.options.name;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Gets the configured CRUD functions
|
|
60
|
+
* @returns Object containing all configured function handlers
|
|
61
|
+
*/
|
|
62
|
+
get functions() {
|
|
63
|
+
return {
|
|
64
|
+
list: this.options.listFn,
|
|
65
|
+
retrieve: this.options.retrieveFn,
|
|
66
|
+
create: this.options.createFn,
|
|
67
|
+
update: this.options.updateFn,
|
|
68
|
+
delete: this.options.deleteFn,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* React hook for infinite scroll list queries with pagination
|
|
73
|
+
* @param options - Configuration options for the list query
|
|
74
|
+
* @returns Object containing items array, query key, and query object
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* ```typescript
|
|
78
|
+
* const { items, query } = queryManager.useList({
|
|
79
|
+
* filters: { status: 'active' },
|
|
80
|
+
* limit: 20
|
|
81
|
+
* })
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
useList(options = {}) {
|
|
85
|
+
var _a, _b, _c, _d, _e;
|
|
86
|
+
const { limit, filters } = options, queryOptions = __rest(options, ["limit", "filters"]);
|
|
87
|
+
const listLimit = (_b = limit !== null && limit !== void 0 ? limit : (_a = this.options) === null || _a === void 0 ? void 0 : _a.listLimit) !== null && _b !== void 0 ? _b : 10;
|
|
88
|
+
const queryKey = this.queryKeys.useListKeyWithFilters(filters);
|
|
89
|
+
const onSelect = useCallback((data) => {
|
|
90
|
+
var _a;
|
|
91
|
+
const pages = (_a = data === null || data === void 0 ? void 0 : data.pages) !== null && _a !== void 0 ? _a : [];
|
|
92
|
+
return {
|
|
93
|
+
pageParams: data === null || data === void 0 ? void 0 : data.pageParams,
|
|
94
|
+
pages,
|
|
95
|
+
allItems: pages.flat(),
|
|
96
|
+
};
|
|
97
|
+
}, []);
|
|
98
|
+
const query = useInfiniteQuery(Object.assign({ queryKey, queryFn: (query) => __awaiter(this, void 0, void 0, function* () {
|
|
99
|
+
var _a, _b, _c;
|
|
100
|
+
const listOffset = (_a = query === null || query === void 0 ? void 0 : query.pageParam) !== null && _a !== void 0 ? _a : 0;
|
|
101
|
+
const data = yield ((_c = (_b = this.options) === null || _b === void 0 ? void 0 : _b.listFn) === null || _c === void 0 ? void 0 : _c.call(_b, listLimit, listOffset, filters));
|
|
102
|
+
return TypeGuards.isArray(data) ? data : [];
|
|
103
|
+
}), initialPageParam: 0, getNextPageParam: (lastPage, allPages, lastPageParam, allPageParams) => {
|
|
104
|
+
if (!(lastPage === null || lastPage === void 0 ? void 0 : lastPage.length) || lastPage.length < listLimit) {
|
|
105
|
+
return undefined;
|
|
106
|
+
}
|
|
107
|
+
return (lastPageParam !== null && lastPageParam !== void 0 ? lastPageParam : 0) + lastPage.length;
|
|
108
|
+
}, getPreviousPageParam: (firstPage, allPages, firstPageParam, allPageParams) => {
|
|
109
|
+
if ((firstPageParam !== null && firstPageParam !== void 0 ? firstPageParam : 0) <= 0) {
|
|
110
|
+
return undefined;
|
|
111
|
+
}
|
|
112
|
+
return (firstPageParam !== null && firstPageParam !== void 0 ? firstPageParam : 0) - listLimit;
|
|
113
|
+
}, select(data) {
|
|
114
|
+
return onSelect(data);
|
|
115
|
+
} }, queryOptions));
|
|
116
|
+
const useListEffect = ((_c = this.options.useListEffect) !== null && _c !== void 0 ? _c : ((args) => null));
|
|
117
|
+
useListEffect(query);
|
|
118
|
+
const items = (_e = (_d = query.data) === null || _d === void 0 ? void 0 : _d.allItems) !== null && _e !== void 0 ? _e : [];
|
|
119
|
+
return {
|
|
120
|
+
items,
|
|
121
|
+
queryKey,
|
|
122
|
+
query,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* React hook for retrieving a single item by ID
|
|
127
|
+
* @param id - The ID of the item to retrieve
|
|
128
|
+
* @param options - Configuration options for the retrieve query
|
|
129
|
+
* @returns Object containing the item data, query key, and query object
|
|
130
|
+
*
|
|
131
|
+
* @description
|
|
132
|
+
* This hook automatically:
|
|
133
|
+
* - Uses list cache as initial data if available
|
|
134
|
+
* - Updates list cache when retrieve data changes
|
|
135
|
+
* - Synchronizes data between list and individual caches
|
|
136
|
+
*
|
|
137
|
+
* @example
|
|
138
|
+
* ```typescript
|
|
139
|
+
* const { item, query } = queryManager.useRetrieve('user-123', {
|
|
140
|
+
* enabled: !!userId
|
|
141
|
+
* })
|
|
142
|
+
* ```
|
|
143
|
+
*/
|
|
144
|
+
useRetrieve(id, options = {}) {
|
|
145
|
+
const { select } = options, queryOptions = __rest(options, ["select"]);
|
|
146
|
+
const onSelect = useCallback((data) => {
|
|
147
|
+
this.mutations.updateItems(data);
|
|
148
|
+
if (select)
|
|
149
|
+
select === null || select === void 0 ? void 0 : select(data);
|
|
150
|
+
return data;
|
|
151
|
+
}, [select]);
|
|
152
|
+
const getInitialData = useCallback(() => {
|
|
153
|
+
const { itemMap } = this.queryKeys.getListData();
|
|
154
|
+
return itemMap === null || itemMap === void 0 ? void 0 : itemMap[id];
|
|
155
|
+
}, [id]);
|
|
156
|
+
const queryKey = this.queryKeys.useRetrieveKey(id);
|
|
157
|
+
const query = useQuery(Object.assign(Object.assign({ initialData: getInitialData }, queryOptions), { queryKey, queryFn: () => {
|
|
158
|
+
return this.options.retrieveFn(id);
|
|
159
|
+
}, select: (data) => {
|
|
160
|
+
return onSelect(data);
|
|
161
|
+
} }));
|
|
162
|
+
return {
|
|
163
|
+
item: query.data,
|
|
164
|
+
queryKey,
|
|
165
|
+
query,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* React hook for creating new items with optimistic updates
|
|
170
|
+
* @param options - Configuration options for the create mutation
|
|
171
|
+
* @returns React Query mutation object for create operations
|
|
172
|
+
*
|
|
173
|
+
* @description
|
|
174
|
+
* This hook supports optimistic updates by:
|
|
175
|
+
* - Immediately adding a temporary item to the cache
|
|
176
|
+
* - Rolling back on error by removing the temporary item
|
|
177
|
+
* - Replacing temporary item with real data on success
|
|
178
|
+
*
|
|
179
|
+
* @example
|
|
180
|
+
* ```typescript
|
|
181
|
+
* const createMutation = queryManager.useCreate({
|
|
182
|
+
* optimistic: true,
|
|
183
|
+
* appendTo: 'start',
|
|
184
|
+
* listFilters: { status: 'active' }
|
|
185
|
+
* })
|
|
186
|
+
*
|
|
187
|
+
* // Usage
|
|
188
|
+
* createMutation.mutate({ name: 'New User', email: 'user@example.com' })
|
|
189
|
+
* ```
|
|
190
|
+
*/
|
|
191
|
+
useCreate(options = {}) {
|
|
192
|
+
const { optimistic, listFilters, appendTo, onMutate: providedOnMutate, onError: providedOnError, onSuccess: providedOnSuccess } = options, mutationOptions = __rest(options, ["optimistic", "listFilters", "appendTo", "onMutate", "onError", "onSuccess"]);
|
|
193
|
+
const onMutate = useCallback((data, context) => __awaiter(this, void 0, void 0, function* () {
|
|
194
|
+
if (providedOnMutate)
|
|
195
|
+
providedOnMutate === null || providedOnMutate === void 0 ? void 0 : providedOnMutate(data, context);
|
|
196
|
+
if (optimistic) {
|
|
197
|
+
yield this.queryKeys.cancelListQueries(listFilters);
|
|
198
|
+
const tempId = generateTempId();
|
|
199
|
+
const newItem = Object.assign(Object.assign({}, data), { id: tempId });
|
|
200
|
+
this.mutations.addItem(newItem, appendTo, listFilters);
|
|
201
|
+
return {
|
|
202
|
+
tempId,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
}), [providedOnMutate, optimistic, listFilters]);
|
|
206
|
+
const onError = useCallback((error, variables, onMutateResult, context) => {
|
|
207
|
+
if (providedOnError && onMutateResult)
|
|
208
|
+
providedOnError === null || providedOnError === void 0 ? void 0 : providedOnError(error, variables, onMutateResult, context);
|
|
209
|
+
if (!TypeGuards.isNil(onMutateResult === null || onMutateResult === void 0 ? void 0 : onMutateResult.tempId)) {
|
|
210
|
+
this.mutations.removeItem(onMutateResult === null || onMutateResult === void 0 ? void 0 : onMutateResult.tempId);
|
|
211
|
+
}
|
|
212
|
+
}, [providedOnError]);
|
|
213
|
+
const onSuccess = useCallback((data, variables, onMutateResult, context) => {
|
|
214
|
+
if (providedOnSuccess)
|
|
215
|
+
providedOnSuccess === null || providedOnSuccess === void 0 ? void 0 : providedOnSuccess(data, variables, onMutateResult, context);
|
|
216
|
+
if (TypeGuards.isNil(onMutateResult === null || onMutateResult === void 0 ? void 0 : onMutateResult.tempId)) {
|
|
217
|
+
this.mutations.addItem(data, appendTo, listFilters);
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
this.mutations.updateItems(Object.assign(Object.assign({}, data), { tempId: onMutateResult === null || onMutateResult === void 0 ? void 0 : onMutateResult.tempId }));
|
|
221
|
+
}
|
|
222
|
+
}, [providedOnSuccess, listFilters]);
|
|
223
|
+
const mutation = useMutation(Object.assign(Object.assign({}, mutationOptions), { mutationKey: this.queryKeys.keys.create, mutationFn: (data) => {
|
|
224
|
+
return this.options.createFn(data);
|
|
225
|
+
}, onMutate,
|
|
226
|
+
onError,
|
|
227
|
+
onSuccess }));
|
|
228
|
+
return mutation;
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* React hook for updating existing items with optimistic updates
|
|
232
|
+
* @param options - Configuration options for the update mutation
|
|
233
|
+
* @returns React Query mutation object for update operations
|
|
234
|
+
*
|
|
235
|
+
* @description
|
|
236
|
+
* This hook supports optimistic updates by:
|
|
237
|
+
* - Immediately updating the item in cache with new data
|
|
238
|
+
* - Rolling back to previous data on error
|
|
239
|
+
* - Confirming updates with server response on success
|
|
240
|
+
*
|
|
241
|
+
* @example
|
|
242
|
+
* ```typescript
|
|
243
|
+
* const updateMutation = queryManager.useUpdate({
|
|
244
|
+
* optimistic: true,
|
|
245
|
+
* onSuccess: (data) => console.log('Updated:', data)
|
|
246
|
+
* })
|
|
247
|
+
*
|
|
248
|
+
* // Usage
|
|
249
|
+
* updateMutation.mutate({ id: 'user-123', name: 'Updated Name' })
|
|
250
|
+
* ```
|
|
251
|
+
*/
|
|
252
|
+
useUpdate(options = {}) {
|
|
253
|
+
const { optimistic, onMutate: providedOnMutate, onError: providedOnError, onSuccess: providedOnSuccess } = options, mutationOptions = __rest(options, ["optimistic", "onMutate", "onError", "onSuccess"]);
|
|
254
|
+
const onMutate = useCallback((data, context) => __awaiter(this, void 0, void 0, function* () {
|
|
255
|
+
if (providedOnMutate)
|
|
256
|
+
providedOnMutate === null || providedOnMutate === void 0 ? void 0 : providedOnMutate(data, context);
|
|
257
|
+
if (optimistic) {
|
|
258
|
+
if ((data === null || data === void 0 ? void 0 : data.id) == null)
|
|
259
|
+
return;
|
|
260
|
+
const previousItem = this.queryKeys.getRetrieveData(data.id);
|
|
261
|
+
if (!previousItem)
|
|
262
|
+
return;
|
|
263
|
+
const optimisticItem = Object.assign(Object.assign({}, previousItem), data);
|
|
264
|
+
this.mutations.updateItems(optimisticItem);
|
|
265
|
+
return {
|
|
266
|
+
previousItem,
|
|
267
|
+
optimisticItem,
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
}), [providedOnMutate, optimistic]);
|
|
271
|
+
const onError = useCallback((error, variables, onMutateResult, context) => {
|
|
272
|
+
var _a;
|
|
273
|
+
if (providedOnError && onMutateResult)
|
|
274
|
+
providedOnError === null || providedOnError === void 0 ? void 0 : providedOnError(error, variables, onMutateResult, context);
|
|
275
|
+
if (!TypeGuards.isNil((_a = onMutateResult === null || onMutateResult === void 0 ? void 0 : onMutateResult.previousItem) === null || _a === void 0 ? void 0 : _a.id)) {
|
|
276
|
+
this.mutations.updateItems(onMutateResult === null || onMutateResult === void 0 ? void 0 : onMutateResult.previousItem);
|
|
277
|
+
}
|
|
278
|
+
}, [providedOnError]);
|
|
279
|
+
const onSuccess = useCallback((data, variables, onMutateResult, context) => {
|
|
280
|
+
if (providedOnSuccess && onMutateResult)
|
|
281
|
+
providedOnSuccess === null || providedOnSuccess === void 0 ? void 0 : providedOnSuccess(data, variables, onMutateResult, context);
|
|
282
|
+
this.mutations.updateItems(data);
|
|
283
|
+
}, [providedOnSuccess]);
|
|
284
|
+
const mutation = useMutation(Object.assign(Object.assign({}, mutationOptions), { mutationKey: this.queryKeys.keys.update, mutationFn: (data) => {
|
|
285
|
+
return this.options.updateFn(data);
|
|
286
|
+
}, onMutate,
|
|
287
|
+
onError,
|
|
288
|
+
onSuccess }));
|
|
289
|
+
return mutation;
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* React hook for deleting items with optimistic updates
|
|
293
|
+
* @param options - Configuration options for the delete mutation
|
|
294
|
+
* @returns React Query mutation object for delete operations
|
|
295
|
+
*
|
|
296
|
+
* @description
|
|
297
|
+
* This hook supports optimistic updates by:
|
|
298
|
+
* - Immediately removing the item from cache
|
|
299
|
+
* - Storing the removal positions for potential rollback
|
|
300
|
+
* - Restoring the item to original positions on error
|
|
301
|
+
* - Confirming deletion on success
|
|
302
|
+
*
|
|
303
|
+
* @example
|
|
304
|
+
* ```typescript
|
|
305
|
+
* const deleteMutation = queryManager.useDelete({
|
|
306
|
+
* optimistic: true,
|
|
307
|
+
* onSuccess: () => console.log('Item deleted successfully')
|
|
308
|
+
* })
|
|
309
|
+
*
|
|
310
|
+
* // Usage
|
|
311
|
+
* deleteMutation.mutate('user-123')
|
|
312
|
+
* ```
|
|
313
|
+
*/
|
|
314
|
+
useDelete(options = {}) {
|
|
315
|
+
const { optimistic, onMutate: providedOnMutate, onError: providedOnError, onSuccess: providedOnSuccess } = options, mutationOptions = __rest(options, ["optimistic", "onMutate", "onError", "onSuccess"]);
|
|
316
|
+
const onMutate = useCallback((id, context) => __awaiter(this, void 0, void 0, function* () {
|
|
317
|
+
if (providedOnMutate)
|
|
318
|
+
providedOnMutate === null || providedOnMutate === void 0 ? void 0 : providedOnMutate(id, context);
|
|
319
|
+
if (optimistic) {
|
|
320
|
+
const previousItem = this.queryKeys.getRetrieveData(id);
|
|
321
|
+
if (!previousItem)
|
|
322
|
+
return;
|
|
323
|
+
const removedAt = this.mutations.removeItem(id);
|
|
324
|
+
return {
|
|
325
|
+
previousItem,
|
|
326
|
+
removedAt,
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
}), [providedOnMutate, optimistic]);
|
|
330
|
+
const onError = useCallback((error, variables, onMutateResult, context) => {
|
|
331
|
+
var _a, _b;
|
|
332
|
+
if (providedOnError && onMutateResult)
|
|
333
|
+
providedOnError === null || providedOnError === void 0 ? void 0 : providedOnError(error, variables, onMutateResult, context);
|
|
334
|
+
if (!TypeGuards.isNil((_a = onMutateResult === null || onMutateResult === void 0 ? void 0 : onMutateResult.previousItem) === null || _a === void 0 ? void 0 : _a.id)) {
|
|
335
|
+
this.mutations.addItem(onMutateResult === null || onMutateResult === void 0 ? void 0 : onMutateResult.previousItem, (_b = onMutateResult === null || onMutateResult === void 0 ? void 0 : onMutateResult.removedAt) !== null && _b !== void 0 ? _b : undefined);
|
|
336
|
+
}
|
|
337
|
+
}, [providedOnError]);
|
|
338
|
+
const onSuccess = useCallback((data, variables, onMutateResult, context) => {
|
|
339
|
+
var _a;
|
|
340
|
+
if (providedOnSuccess && onMutateResult)
|
|
341
|
+
providedOnSuccess === null || providedOnSuccess === void 0 ? void 0 : providedOnSuccess(data, variables, onMutateResult, context);
|
|
342
|
+
if (TypeGuards.isNil((_a = onMutateResult === null || onMutateResult === void 0 ? void 0 : onMutateResult.previousItem) === null || _a === void 0 ? void 0 : _a.id)) {
|
|
343
|
+
this.mutations.removeItem(data);
|
|
344
|
+
}
|
|
345
|
+
}, [providedOnSuccess]);
|
|
346
|
+
const mutation = useMutation(Object.assign(Object.assign({}, mutationOptions), { mutationKey: this.queryKeys.keys.delete, mutationFn: (id) => __awaiter(this, void 0, void 0, function* () {
|
|
347
|
+
return this.options.deleteFn(id);
|
|
348
|
+
}), onMutate,
|
|
349
|
+
onError,
|
|
350
|
+
onSuccess }));
|
|
351
|
+
return mutation;
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* Prefetches a single item by ID for improved performance
|
|
355
|
+
* @param id - The ID of the item to prefetch
|
|
356
|
+
* @param options - Prefetch options compatible with React Query
|
|
357
|
+
* @returns Promise that resolves when prefetch is complete
|
|
358
|
+
*
|
|
359
|
+
* @description
|
|
360
|
+
* Use this method to preload data that users are likely to need soon,
|
|
361
|
+
* such as when hovering over links or preparing for navigation.
|
|
362
|
+
*
|
|
363
|
+
* @example
|
|
364
|
+
* ```typescript
|
|
365
|
+
* // Prefetch on hover
|
|
366
|
+
* const handleHover = (userId: string) => {
|
|
367
|
+
* queryManager.prefetchRetrieve(userId, { staleTime: 5 * 60 * 1000 })
|
|
368
|
+
* }
|
|
369
|
+
* ```
|
|
370
|
+
*/
|
|
371
|
+
prefetchRetrieve(id, options = {}) {
|
|
372
|
+
return this.queryClient.prefetchQuery(Object.assign(Object.assign({}, options), { queryKey: this.queryKeys.keys.retrieve(id), queryFn: () => this.options.retrieveFn(id) }));
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* Prefetches a paginated list with filters for improved performance
|
|
376
|
+
* @param filters - Filter parameters to apply to the list query
|
|
377
|
+
* @param options - Prefetch options compatible with React Query's infinite queries
|
|
378
|
+
* @param options.initialOffset - Starting offset for pagination (default: 0)
|
|
379
|
+
* @returns Promise that resolves when prefetch is complete
|
|
380
|
+
*
|
|
381
|
+
* @description
|
|
382
|
+
* Use this method to preload paginated list data that users are likely to need soon.
|
|
383
|
+
*
|
|
384
|
+
* @example
|
|
385
|
+
* ```typescript
|
|
386
|
+
* const handle = () => {
|
|
387
|
+
* queryManager.prefetchList(
|
|
388
|
+
* { category: 'electronics' },
|
|
389
|
+
* { staleTime: 5 * 60 * 1000 }
|
|
390
|
+
* )
|
|
391
|
+
* }
|
|
392
|
+
*
|
|
393
|
+
* ```
|
|
394
|
+
*/
|
|
395
|
+
prefetchList(filters, options = {}) {
|
|
396
|
+
const { initialOffset = 0 } = options, prefetchOptions = __rest(options, ["initialOffset"]);
|
|
397
|
+
return this.queryClient.prefetchInfiniteQuery(Object.assign(Object.assign({}, prefetchOptions), { initialPageParam: initialOffset, queryKey: this.queryKeys.listKeyWithFilters(filters), queryFn: () => { var _a; return this.options.listFn((_a = this.options.listLimit) !== null && _a !== void 0 ? _a : 10, initialOffset, filters); } }));
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
//# sourceMappingURL=QueryManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryManager.js","sourceRoot":"","sources":["../../src/lib/QueryManager.ts"],"names":[],"mappings":"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"}
|