@flowselections/pick-schermen-kwekers 1.0.22 → 1.0.24

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.
Files changed (28) hide show
  1. package/dist-lib/components/pick/PickScherm.d.ts.map +1 -1
  2. package/dist-lib/components/pick/PickScherm.js +46 -25
  3. package/dist-lib/hooks/usePickQueue.d.ts.map +1 -1
  4. package/dist-lib/hooks/usePickQueue.js +5 -2
  5. package/dist-lib/integrations/supabase/auth-middleware.d.ts +4 -31162
  6. package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
  7. package/dist-lib/integrations/supabase/auth-middleware.js +1 -1
  8. package/dist-lib/integrations/supabase/client.d.ts +2 -31162
  9. package/dist-lib/integrations/supabase/client.d.ts.map +1 -1
  10. package/dist-lib/integrations/supabase/client.server.d.ts +2 -31162
  11. package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
  12. package/dist-lib/integrations/supabase/types.d.ts +179 -3
  13. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  14. package/dist-lib/lib/__tests__/pickRobustness.test.d.ts +2 -0
  15. package/dist-lib/lib/__tests__/pickRobustness.test.d.ts.map +1 -0
  16. package/dist-lib/lib/__tests__/pickRobustness.test.js +68 -0
  17. package/dist-lib/lib/pickApi.d.ts +24 -1
  18. package/dist-lib/lib/pickApi.d.ts.map +1 -1
  19. package/dist-lib/lib/pickApi.js +48 -2
  20. package/dist-lib/lib/pickRetry.d.ts +13 -0
  21. package/dist-lib/lib/pickRetry.d.ts.map +1 -0
  22. package/dist-lib/lib/pickRetry.js +52 -0
  23. package/dist-lib/lib/pickUiText.d.ts.map +1 -1
  24. package/dist-lib/lib/pickUiText.js +5 -3
  25. package/dist-lib/lib/pickVerify.d.ts +15 -0
  26. package/dist-lib/lib/pickVerify.d.ts.map +1 -0
  27. package/dist-lib/lib/pickVerify.js +32 -0
  28. package/package.json +4 -3
@@ -1 +1 @@
1
- {"version":3,"file":"PickScherm.d.ts","sourceRoot":"","sources":["../../../src/components/pick/PickScherm.tsx"],"names":[],"mappings":"AAqCA,OAAO,EAUL,KAAK,WAAW,EACjB,MAAM,qBAAqB,CAAC;AA0B7B,UAAU,KAAK;IACb,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAeD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,+BAqsDpD"}
1
+ {"version":3,"file":"PickScherm.d.ts","sourceRoot":"","sources":["../../../src/components/pick/PickScherm.tsx"],"names":[],"mappings":"AAqCA,OAAO,EAUL,KAAK,WAAW,EACjB,MAAM,qBAAqB,CAAC;AA2B7B,UAAU,KAAK;IACb,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAeD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,+BAotDpD"}
@@ -11,6 +11,7 @@ import { getSessionId, pickApi } from "../../lib/pickApi";
11
11
  import { sendLogisticsEvent } from "../../lib/logisticsApi";
12
12
  import { completeLogisticsTaskForItem } from "../../lib/pickPrint";
13
13
  import { isPdfOnlyFailure, pickReadiness, printedCartIdsOf, pdfSaveWarning, unitRefOf, unitTitleOf, } from "../../lib/pickTypes";
14
+ import { rowFingerprint, rowsToVerify } from "../../lib/pickVerify";
14
15
  import { getPickTranslator } from "../../lib/pickI18n";
15
16
  import { friendlyPickError, getPickUiTexts } from "../../lib/pickUiText";
16
17
  import { getPrintJobTexts, printJobStatusLabel } from "../../lib/pickPrintJobText";
@@ -260,37 +261,57 @@ export function PickScherm({ station, onBack }) {
260
261
  const visibleIdsKey = useMemo(() => (Array.isArray(items) ? items.map((item) => item.id).join(",") : ""), [items]);
261
262
  const itemsRef = useRef([]);
262
263
  itemsRef.current = Array.isArray(items) ? items : [];
264
+ const verifyMemo = useRef(new Map());
263
265
  useEffect(() => {
264
266
  let cancelled = false;
267
+ let running = false;
265
268
  const verifyVisibleRows = async () => {
269
+ if (running)
270
+ return;
266
271
  const visibleItems = itemsRef.current;
267
- setCheckProgress({ done: 0, total: visibleItems.length });
268
- if (visibleItems.length === 0)
272
+ const todo = rowsToVerify(visibleItems, verifyMemo.current, Date.now());
273
+ if (todo.length === 0)
269
274
  return;
270
- let done = 0;
271
- await Promise.all(visibleItems.map(async (item) => {
272
- let entry = {
273
- checking: false,
274
- ready: false,
275
- reason: "De bron kon de pakbon nog niet bevestigen.",
276
- };
277
- try {
278
- const [plan, status] = await Promise.all([
279
- pickApi.queueCartPlan(item.id),
280
- pickApi.cartPlanStatus(unitRefOf(item)),
281
- ]);
282
- const state = pickReadiness(plan, status, item);
283
- entry = { checking: false, ready: state.ready, reason: state.reason };
284
- }
285
- catch {
286
- // fail closed: de regel blijft "Pakbon ophalen"
275
+ // Laadbalk alleen voor regels die nog nooit gecontroleerd zijn.
276
+ const fresh = todo.filter((item) => !verifyMemo.current.has(item.id)).length;
277
+ if (fresh > 0)
278
+ setCheckProgress({ done: 0, total: fresh });
279
+ running = true;
280
+ const next = {};
281
+ try {
282
+ const results = await pickApi.verifyRows(todo.map((item) => ({ id: item.id, ref: unitRefOf(item) || null })));
283
+ const byId = new Map(results.map((r) => [r.id, r]));
284
+ const now = Date.now();
285
+ for (const item of todo) {
286
+ const r = byId.get(item.id);
287
+ let entry = {
288
+ checking: false,
289
+ ready: false,
290
+ reason: "De bron kon de pakbon nog niet bevestigen.",
291
+ };
292
+ if (r && !r.error) {
293
+ const state = pickReadiness(r.plan, r.status, item);
294
+ entry = { checking: false, ready: state.ready, reason: state.reason };
295
+ }
296
+ next[item.id] = entry;
297
+ verifyMemo.current.set(item.id, {
298
+ fingerprint: rowFingerprint(item),
299
+ ready: entry.ready,
300
+ checkedAt: now,
301
+ });
287
302
  }
288
- if (cancelled)
289
- return;
290
- done += 1;
291
- setReadinessById((prev) => ({ ...prev, [item.id]: entry }));
292
- setCheckProgress({ done, total: visibleItems.length });
293
- }));
303
+ }
304
+ catch {
305
+ // fail closed: bestaande uitkomst blijft staan; nooit bevestigde regels blijven "Pakbon ophalen"
306
+ }
307
+ finally {
308
+ running = false;
309
+ }
310
+ if (cancelled)
311
+ return;
312
+ if (Object.keys(next).length > 0)
313
+ setReadinessById((prev) => ({ ...prev, ...next }));
314
+ setCheckProgress({ done: 0, total: 0 });
294
315
  };
295
316
  void verifyVisibleRows();
296
317
  const timer = window.setInterval(() => void verifyVisibleRows(), 15000);
@@ -1 +1 @@
1
- {"version":3,"file":"usePickQueue.d.ts","sourceRoot":"","sources":["../../src/hooks/usePickQueue.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAY,aAAa,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAG9E,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,UAAU,EAAE,OAAO,CAAC;IACpB,mDAAmD;IACnD,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,YAAY,EAAE,CAAC;CAC3B;AAED,eAAO,MAAM,cAAc,EAAE,YAS5B,CAAC;AAEF;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,2EAA2E;IAC3E,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;;;;;;;;;;;IAuLG,gEAAgE;;IAEhE,6EAA6E;;;EAIhF;AAED,qEAAqE;AACrE,wBAAgB,gBAAgB,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,SAAS,CAAC,EAAE,MAAM;;EAuBhG;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,iFAOnF;AACD,iEAAiE;AACjE,wBAAgB,WAAW,CAAC,OAAO,UAAO;;;YAQzC"}
1
+ {"version":3,"file":"usePickQueue.d.ts","sourceRoot":"","sources":["../../src/hooks/usePickQueue.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAY,aAAa,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAG9E,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,UAAU,EAAE,OAAO,CAAC;IACpB,mDAAmD;IACnD,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,YAAY,EAAE,CAAC;CAC3B;AAED,eAAO,MAAM,cAAc,EAAE,YAS5B,CAAC;AAEF;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,2EAA2E;IAC3E,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;;;;;;;;;;;IA0LG,gEAAgE;;IAEhE,6EAA6E;;;EAIhF;AAED,qEAAqE;AACrE,wBAAgB,gBAAgB,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,SAAS,CAAC,EAAE,MAAM;;EAuBhG;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,iFAOnF;AACD,iEAAiE;AACjE,wBAAgB,WAAW,CAAC,OAAO,UAAO;;;YAQzC"}
@@ -1,5 +1,5 @@
1
1
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
2
- import { useQuery, useQueryClient } from "@tanstack/react-query";
2
+ import { keepPreviousData, useQuery, useQueryClient } from "@tanstack/react-query";
3
3
  import { pickApi, pickDb } from "../lib/pickApi";
4
4
  import { safeArray } from "../lib/pickTypes";
5
5
  export const defaultFilters = {
@@ -83,7 +83,8 @@ export function usePickQueue(args) {
83
83
  useEffect(() => {
84
84
  if (rebuildCount <= 0)
85
85
  return;
86
- queryClient.removeQueries({ queryKey: ["pick", "queue"] });
86
+ // Verouderd markeren en vers ophalen; de oude lijst blijft staan tot de nieuwe binnen is.
87
+ queryClient.invalidateQueries({ queryKey: ["pick", "queue"], refetchType: "all" });
87
88
  queryClient.invalidateQueries({ queryKey: ["pick", "pickDay"] });
88
89
  queryClient.invalidateQueries({ queryKey: ["pick", "pickDays"] });
89
90
  queryClient.invalidateQueries({ queryKey: ["pick", "dayCounts"] });
@@ -107,11 +108,13 @@ export function usePickQueue(args) {
107
108
  page: filters.page,
108
109
  pageSize: filters.pageSize,
109
110
  }),
111
+ placeholderData: keepPreviousData,
110
112
  });
111
113
  const countsQuery = useQuery({
112
114
  queryKey: ["pick", "dayCounts", stationId ?? "-", screenId ?? "-", pickDay ?? "-"],
113
115
  enabled: enabled && !pickDayQuery.isLoading,
114
116
  queryFn: () => pickApi.dayCounts({ stationId, screenId, pickDay }),
117
+ placeholderData: keepPreviousData,
115
118
  });
116
119
  // Locks komen primair via realtime binnen; deze poll is alleen terugval.
117
120
  const locksQuery = useQuery({