@go-avro/avro-js 0.0.36 → 0.0.37
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/client/QueryClient.js +23 -18
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import io from 'socket.io-client';
|
|
2
2
|
import { useMutation, useQueryClient } from '@tanstack/react-query';
|
|
3
3
|
import { v4 as uuidv4 } from "uuid";
|
|
4
|
-
import { LoginResponse } from '../types/api';
|
|
4
|
+
import { Job, LoginResponse } from '../types/api';
|
|
5
5
|
import { AuthState } from '../types/auth';
|
|
6
6
|
import { StandardError } from '../types/error';
|
|
7
7
|
function isBulkEvent(c) {
|
|
@@ -25,8 +25,8 @@ const SOCKET_EVENT_CONFIG = {
|
|
|
25
25
|
user_updated: { invalidateKeys: [['users'], ['user']] },
|
|
26
26
|
update_users: { invalidateKeys: [['users'], ['user']] },
|
|
27
27
|
// ── Jobs ──
|
|
28
|
-
create_job: { entityKey: 'jobs', action: 'create', fetchPath: (id) => `/job/${id}
|
|
29
|
-
update_job: { entityKey: 'jobs', action: 'update', fetchPath: (id) => `/job/${id}
|
|
28
|
+
create_job: { entityKey: 'jobs', action: 'create', fetchPath: (id) => `/job/${id}`, construct: (d) => new Job(d) },
|
|
29
|
+
update_job: { entityKey: 'jobs', action: 'update', fetchPath: (id) => `/job/${id}`, construct: (d) => new Job(d) },
|
|
30
30
|
delete_job: { entityKey: 'jobs', action: 'delete', fetchPath: null },
|
|
31
31
|
update_jobs: { invalidateKeys: [['jobs'], ['infinite', 'jobs']] },
|
|
32
32
|
delete_jobs: { invalidateKeys: [['jobs'], ['infinite', 'jobs']] },
|
|
@@ -35,9 +35,9 @@ const SOCKET_EVENT_CONFIG = {
|
|
|
35
35
|
update_route: { entityKey: 'routes', action: 'update', fetchPath: (id) => `/route/${id}` },
|
|
36
36
|
delete_route: { entityKey: 'routes', action: 'delete', fetchPath: null },
|
|
37
37
|
// ── Events (also refetch parent job — overdueness, last_event, etc.) ──
|
|
38
|
-
create_event: { entityKey: 'events', action: 'create', fetchPath: (id) => `/event/${id}`, relatedRefetch: [{ entityKey: 'jobs', idField: 'job_id', fetchPath: (id) => `/job/${id}
|
|
39
|
-
update_event: { entityKey: 'events', action: 'update', fetchPath: (id) => `/event/${id}`, relatedRefetch: [{ entityKey: 'jobs', idField: 'job_id', fetchPath: (id) => `/job/${id}
|
|
40
|
-
delete_event: { entityKey: 'events', action: 'delete', fetchPath: null, relatedRefetch: [{ entityKey: 'jobs', idField: 'job_id', fetchPath: (id) => `/job/${id}
|
|
38
|
+
create_event: { entityKey: 'events', action: 'create', fetchPath: (id) => `/event/${id}`, relatedRefetch: [{ entityKey: 'jobs', idField: 'job_id', fetchPath: (id) => `/job/${id}`, construct: (d) => new Job(d) }] },
|
|
39
|
+
update_event: { entityKey: 'events', action: 'update', fetchPath: (id) => `/event/${id}`, relatedRefetch: [{ entityKey: 'jobs', idField: 'job_id', fetchPath: (id) => `/job/${id}`, construct: (d) => new Job(d) }] },
|
|
40
|
+
delete_event: { entityKey: 'events', action: 'delete', fetchPath: null, relatedRefetch: [{ entityKey: 'jobs', idField: 'job_id', fetchPath: (id) => `/job/${id}`, construct: (d) => new Job(d) }] },
|
|
41
41
|
update_events: { invalidateKeys: [['events']] },
|
|
42
42
|
// ── Teams ──
|
|
43
43
|
create_team: { entityKey: 'teams', action: 'create', fetchPath: null },
|
|
@@ -76,9 +76,9 @@ const SOCKET_EVENT_CONFIG = {
|
|
|
76
76
|
update_months: { invalidateKeys: [['months']] },
|
|
77
77
|
delete_months: { invalidateKeys: [['months']] },
|
|
78
78
|
// ── Tasks (nested under jobs — target the parent job) ──
|
|
79
|
-
create_task: { entityKey: 'jobs', action: 'update', fetchPath: (id) => `/job/${id}`, idField: 'job_id' },
|
|
80
|
-
update_task: { entityKey: 'jobs', action: 'update', fetchPath: (id) => `/job/${id}`, idField: 'job_id' },
|
|
81
|
-
delete_task: { entityKey: 'jobs', action: 'update', fetchPath: (id) => `/job/${id}`, idField: 'job_id' },
|
|
79
|
+
create_task: { entityKey: 'jobs', action: 'update', fetchPath: (id) => `/job/${id}`, idField: 'job_id', construct: (d) => new Job(d) },
|
|
80
|
+
update_task: { entityKey: 'jobs', action: 'update', fetchPath: (id) => `/job/${id}`, idField: 'job_id', construct: (d) => new Job(d) },
|
|
81
|
+
delete_task: { entityKey: 'jobs', action: 'update', fetchPath: (id) => `/job/${id}`, idField: 'job_id', construct: (d) => new Job(d) },
|
|
82
82
|
// ── Scheduling ──
|
|
83
83
|
schedule_complete: { invalidateKeys: [['routes'], ['jobs'], ['infinite', 'jobs']] },
|
|
84
84
|
// ── Location ──
|
|
@@ -227,7 +227,8 @@ export class AvroQueryClient {
|
|
|
227
227
|
queryFn: () => client.get({ path: fetchPath(id) }),
|
|
228
228
|
staleTime: 0,
|
|
229
229
|
});
|
|
230
|
-
fetchedItem = item;
|
|
230
|
+
fetchedItem = config.construct ? config.construct(item) : item;
|
|
231
|
+
queryClient.setQueryData([entityKey, id], fetchedItem);
|
|
231
232
|
queryClient.setQueriesData({ predicate: entityPredicate, type: 'active' }, (old) => {
|
|
232
233
|
if (!old)
|
|
233
234
|
return old;
|
|
@@ -239,7 +240,7 @@ export class AvroQueryClient {
|
|
|
239
240
|
return {
|
|
240
241
|
...old,
|
|
241
242
|
pages: [
|
|
242
|
-
[
|
|
243
|
+
[fetchedItem, ...(old.pages[0] || [])],
|
|
243
244
|
...old.pages.slice(1),
|
|
244
245
|
],
|
|
245
246
|
};
|
|
@@ -247,7 +248,7 @@ export class AvroQueryClient {
|
|
|
247
248
|
if (Array.isArray(old)) {
|
|
248
249
|
if (old.some((x) => x?.id === id))
|
|
249
250
|
return old;
|
|
250
|
-
return [...old,
|
|
251
|
+
return [...old, fetchedItem];
|
|
251
252
|
}
|
|
252
253
|
return old;
|
|
253
254
|
});
|
|
@@ -272,7 +273,8 @@ export class AvroQueryClient {
|
|
|
272
273
|
queryFn: () => client.get({ path: fetchPath(id) }),
|
|
273
274
|
staleTime: 0,
|
|
274
275
|
});
|
|
275
|
-
fetchedItem = item;
|
|
276
|
+
fetchedItem = config.construct ? config.construct(item) : item;
|
|
277
|
+
queryClient.setQueryData([entityKey, id], fetchedItem);
|
|
276
278
|
// Patch it into every active list / infinite-query cache
|
|
277
279
|
queryClient.setQueriesData({ predicate: entityPredicate, type: 'active' }, (old) => {
|
|
278
280
|
if (!old)
|
|
@@ -280,11 +282,11 @@ export class AvroQueryClient {
|
|
|
280
282
|
if (old.pages && Array.isArray(old.pages)) {
|
|
281
283
|
return {
|
|
282
284
|
...old,
|
|
283
|
-
pages: old.pages.map((page) => page.map((x) => (x?.id === id ?
|
|
285
|
+
pages: old.pages.map((page) => page.map((x) => (x?.id === id ? fetchedItem : x))),
|
|
284
286
|
};
|
|
285
287
|
}
|
|
286
288
|
if (Array.isArray(old)) {
|
|
287
|
-
return old.map((x) => (x?.id === id ?
|
|
289
|
+
return old.map((x) => (x?.id === id ? fetchedItem : x));
|
|
288
290
|
}
|
|
289
291
|
return old;
|
|
290
292
|
});
|
|
@@ -330,11 +332,14 @@ export class AvroQueryClient {
|
|
|
330
332
|
if (!relatedId || typeof relatedId !== 'string')
|
|
331
333
|
continue;
|
|
332
334
|
try {
|
|
333
|
-
|
|
335
|
+
let relatedItem = await queryClient.fetchQuery({
|
|
334
336
|
queryKey: [related.entityKey, relatedId],
|
|
335
337
|
queryFn: () => client.get({ path: related.fetchPath(relatedId) }),
|
|
336
338
|
staleTime: 0,
|
|
337
339
|
});
|
|
340
|
+
if (related.construct)
|
|
341
|
+
relatedItem = related.construct(relatedItem);
|
|
342
|
+
queryClient.setQueryData([related.entityKey, relatedId], relatedItem);
|
|
338
343
|
const relatedPredicate = (q) => matchesEntityKey(q, related.entityKey);
|
|
339
344
|
queryClient.setQueriesData({ predicate: relatedPredicate, type: 'active' }, (old) => {
|
|
340
345
|
if (!old)
|
|
@@ -342,11 +347,11 @@ export class AvroQueryClient {
|
|
|
342
347
|
if (old.pages && Array.isArray(old.pages)) {
|
|
343
348
|
return {
|
|
344
349
|
...old,
|
|
345
|
-
pages: old.pages.map((page) => page.map((x) => (x?.id === relatedId ?
|
|
350
|
+
pages: old.pages.map((page) => page.map((x) => (x?.id === relatedId ? relatedItem : x))),
|
|
346
351
|
};
|
|
347
352
|
}
|
|
348
353
|
if (Array.isArray(old)) {
|
|
349
|
-
return old.map((x) => (x?.id === relatedId ?
|
|
354
|
+
return old.map((x) => (x?.id === relatedId ? relatedItem : x));
|
|
350
355
|
}
|
|
351
356
|
return old;
|
|
352
357
|
});
|