@go-avro/avro-js 0.0.32 → 0.0.33
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 +39 -5
- package/package.json +1 -1
|
@@ -34,10 +34,10 @@ const SOCKET_EVENT_CONFIG = {
|
|
|
34
34
|
create_route: { entityKey: 'routes', action: 'create', fetchPath: (id) => `/route/${id}` },
|
|
35
35
|
update_route: { entityKey: 'routes', action: 'update', fetchPath: (id) => `/route/${id}` },
|
|
36
36
|
delete_route: { entityKey: 'routes', action: 'delete', fetchPath: null },
|
|
37
|
-
// ── Events ──
|
|
38
|
-
create_event: { entityKey: 'events', action: 'create', fetchPath: (id) => `/event/${id}` },
|
|
39
|
-
update_event: { entityKey: 'events', action: 'update', fetchPath: (id) => `/event/${id}` },
|
|
40
|
-
delete_event: { entityKey: 'events', action: 'delete', fetchPath: null },
|
|
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}` }] },
|
|
41
41
|
update_events: { invalidateKeys: [['events']] },
|
|
42
42
|
// ── Teams ──
|
|
43
43
|
create_team: { entityKey: 'teams', action: 'create', fetchPath: null },
|
|
@@ -205,7 +205,7 @@ export class AvroQueryClient {
|
|
|
205
205
|
}
|
|
206
206
|
else {
|
|
207
207
|
// ── Targeted: surgical cache update ──────────────────
|
|
208
|
-
const { entityKey, action, fetchPath, idField, alsoInvalidate } = config;
|
|
208
|
+
const { entityKey, action, fetchPath, idField, alsoInvalidate, relatedRefetch } = config;
|
|
209
209
|
const handler = async (data) => {
|
|
210
210
|
const id = data?.[idField ?? 'id'];
|
|
211
211
|
// No id → old backend or malformed payload → full invalidation
|
|
@@ -319,6 +319,40 @@ export class AvroQueryClient {
|
|
|
319
319
|
}
|
|
320
320
|
// Invalidate any additional keys (e.g. companies → /company/list)
|
|
321
321
|
alsoInvalidate?.forEach((k) => queryClient.invalidateQueries({ queryKey: k }));
|
|
322
|
+
// Refetch & patch related entities (e.g. event → parent job)
|
|
323
|
+
if (relatedRefetch) {
|
|
324
|
+
for (const related of relatedRefetch) {
|
|
325
|
+
const relatedId = data?.[related.idField];
|
|
326
|
+
if (!relatedId || typeof relatedId !== 'string')
|
|
327
|
+
continue;
|
|
328
|
+
try {
|
|
329
|
+
const item = await queryClient.fetchQuery({
|
|
330
|
+
queryKey: [related.entityKey, relatedId],
|
|
331
|
+
queryFn: () => client.get({ path: related.fetchPath(relatedId) }),
|
|
332
|
+
staleTime: 0,
|
|
333
|
+
});
|
|
334
|
+
const relatedPredicate = (q) => matchesEntityKey(q, related.entityKey);
|
|
335
|
+
queryClient.setQueriesData({ predicate: relatedPredicate, type: 'active' }, (old) => {
|
|
336
|
+
if (!old)
|
|
337
|
+
return old;
|
|
338
|
+
if (old.pages && Array.isArray(old.pages)) {
|
|
339
|
+
return {
|
|
340
|
+
...old,
|
|
341
|
+
pages: old.pages.map((page) => page.map((x) => (x?.id === relatedId ? item : x))),
|
|
342
|
+
};
|
|
343
|
+
}
|
|
344
|
+
if (Array.isArray(old)) {
|
|
345
|
+
return old.map((x) => (x?.id === relatedId ? item : x));
|
|
346
|
+
}
|
|
347
|
+
return old;
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
catch {
|
|
351
|
+
// Fetch failed → invalidate related entity lists
|
|
352
|
+
invalidateEntity(related.entityKey);
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
}
|
|
322
356
|
};
|
|
323
357
|
this.socket.on(event, handler);
|
|
324
358
|
handlers.push({ event, handler });
|