@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.
- package/dist-lib/components/pick/PickScherm.d.ts.map +1 -1
- package/dist-lib/components/pick/PickScherm.js +46 -25
- package/dist-lib/hooks/usePickQueue.d.ts.map +1 -1
- package/dist-lib/hooks/usePickQueue.js +5 -2
- package/dist-lib/integrations/supabase/auth-middleware.d.ts +4 -31162
- package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/auth-middleware.js +1 -1
- package/dist-lib/integrations/supabase/client.d.ts +2 -31162
- package/dist-lib/integrations/supabase/client.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.server.d.ts +2 -31162
- package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/types.d.ts +179 -3
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/__tests__/pickRobustness.test.d.ts +2 -0
- package/dist-lib/lib/__tests__/pickRobustness.test.d.ts.map +1 -0
- package/dist-lib/lib/__tests__/pickRobustness.test.js +68 -0
- package/dist-lib/lib/pickApi.d.ts +24 -1
- package/dist-lib/lib/pickApi.d.ts.map +1 -1
- package/dist-lib/lib/pickApi.js +48 -2
- package/dist-lib/lib/pickRetry.d.ts +13 -0
- package/dist-lib/lib/pickRetry.d.ts.map +1 -0
- package/dist-lib/lib/pickRetry.js +52 -0
- package/dist-lib/lib/pickUiText.d.ts.map +1 -1
- package/dist-lib/lib/pickUiText.js +5 -3
- package/dist-lib/lib/pickVerify.d.ts +15 -0
- package/dist-lib/lib/pickVerify.d.ts.map +1 -0
- package/dist-lib/lib/pickVerify.js +32 -0
- 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;
|
|
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
|
-
|
|
268
|
-
if (
|
|
272
|
+
const todo = rowsToVerify(visibleItems, verifyMemo.current, Date.now());
|
|
273
|
+
if (todo.length === 0)
|
|
269
274
|
return;
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
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
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
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;;;;;;;;;;;
|
|
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
|
-
|
|
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({
|