@flowselections/pick-schermen-kwekers 1.0.66 → 1.0.68
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 +3 -1
- package/dist-lib/components/pick/PickScherm.d.ts.map +1 -1
- package/dist-lib/components/pick/PickScherm.js +14 -8
- package/dist-lib/components/pick/StickerState.d.ts.map +1 -1
- package/dist-lib/components/pick/StickerState.js +15 -6
- package/dist-lib/hooks/useCartStickerStates.d.ts.map +1 -1
- package/dist-lib/hooks/useCartStickerStates.js +1 -0
- package/dist-lib/integrations/supabase/types.d.ts +247 -120
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/__tests__/pick167.test.d.ts +2 -0
- package/dist-lib/lib/__tests__/pick167.test.d.ts.map +1 -0
- package/dist-lib/lib/__tests__/pick167.test.js +25 -0
- package/dist-lib/lib/pick161.d.ts +15 -0
- package/dist-lib/lib/pick161.d.ts.map +1 -1
- package/dist-lib/lib/pick161.js +51 -0
- package/dist-lib/lib/pickStickerBundle.d.ts +4 -0
- package/dist-lib/lib/pickStickerBundle.d.ts.map +1 -1
- package/dist-lib/lib/pickStickerBundle.js +5 -1
- package/package.json +1 -1
- package/schema/pickschermen.sql +29 -12
|
@@ -3,10 +3,12 @@ interface Props {
|
|
|
3
3
|
station: PickStation;
|
|
4
4
|
onBack?: () => void;
|
|
5
5
|
}
|
|
6
|
+
/** Taal per station op dit apparaat. */
|
|
7
|
+
export declare const langStorageKey: (stationId: string) => string;
|
|
6
8
|
/**
|
|
7
9
|
* Pickscherm. De Logistiek Engine bepaalt welke documenten zichtbaar zijn en
|
|
8
10
|
* in welke volgorde; dit scherm toont uitsluitend wat de wachtrij teruggeeft.
|
|
9
11
|
*/
|
|
10
|
-
export declare function PickScherm({ station, onBack }: Props): import("react").JSX.Element;
|
|
12
|
+
export declare function PickScherm({ station, onBack }: Props): import("react").JSX.Element | null;
|
|
11
13
|
export {};
|
|
12
14
|
//# sourceMappingURL=PickScherm.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PickScherm.d.ts","sourceRoot":"","sources":["../../../src/components/pick/PickScherm.tsx"],"names":[],"mappings":"AA0DA,OAAO,EAaL,KAAK,WAAW,EACjB,MAAM,qBAAqB,CAAC;AA8D7B,UAAU,KAAK;IACb,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;
|
|
1
|
+
{"version":3,"file":"PickScherm.d.ts","sourceRoot":"","sources":["../../../src/components/pick/PickScherm.tsx"],"names":[],"mappings":"AA0DA,OAAO,EAaL,KAAK,WAAW,EACjB,MAAM,qBAAqB,CAAC;AA8D7B,UAAU,KAAK;IACb,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAGD,wCAAwC;AACxC,eAAO,MAAM,cAAc,GAAI,WAAW,MAAM,WAAuC,CAAC;AAsBxF;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,sCAosEpD"}
|
|
@@ -36,6 +36,8 @@ import { isPrintBlocked } from "../../lib/pick156.js";
|
|
|
36
36
|
import { DocumentChoiceMelding, useDocumentChoice } from "./DocumentChoiceMelding.js";
|
|
37
37
|
import { isWaitingShippingNote, shippingNoteMessage, shippingNoteSourceLabel, } from "../../lib/shippingNoteStatus.js";
|
|
38
38
|
const LANG_STORAGE_KEY = "pick.language";
|
|
39
|
+
/** Taal per station op dit apparaat. */
|
|
40
|
+
export const langStorageKey = (stationId) => `${LANG_STORAGE_KEY}.${stationId}`;
|
|
39
41
|
/** Melding als de planning voor deze order geen karren heeft vastgelegd. */
|
|
40
42
|
/** Papier is geprint, maar de PDF-kopie op de werkplek is niet opgeslagen. */
|
|
41
43
|
const PDF_SAVE_NOTICE = "De pakbon is geprint, maar de PDF is niet op de werkplek opgeslagen. Geef de PDF-map in Layout maker opnieuw vrij.";
|
|
@@ -57,6 +59,7 @@ const NOT_READY_NOTICE = "Deze pakbon is nog niet printklaar. Klik op \"Pakbon o
|
|
|
57
59
|
export function PickScherm({ station, onBack }) {
|
|
58
60
|
const sessionId = getSessionId();
|
|
59
61
|
const [lang, setLang] = useState(null);
|
|
62
|
+
const [langLoaded, setLangLoaded] = useState(false);
|
|
60
63
|
const [filters, setFilters] = useState(defaultFilters);
|
|
61
64
|
const [chosenDay, setChosenDay] = useState(null);
|
|
62
65
|
const [loadingDay, setLoadingDay] = useState(false);
|
|
@@ -205,15 +208,16 @@ export function PickScherm({ station, onBack }) {
|
|
|
205
208
|
useEffect(() => {
|
|
206
209
|
if (typeof window === "undefined")
|
|
207
210
|
return;
|
|
208
|
-
const stored = window.localStorage.getItem(LANG_STORAGE_KEY);
|
|
211
|
+
const stored = window.localStorage.getItem(langStorageKey(station.id)) ?? window.localStorage.getItem(LANG_STORAGE_KEY);
|
|
209
212
|
if (stored)
|
|
210
213
|
setLang(stored);
|
|
211
|
-
|
|
214
|
+
setLangLoaded(true);
|
|
215
|
+
}, [station.id]);
|
|
212
216
|
const chooseLang = useCallback((code) => {
|
|
213
217
|
setLang(code);
|
|
214
218
|
if (typeof window !== "undefined")
|
|
215
|
-
window.localStorage.setItem(
|
|
216
|
-
}, []);
|
|
219
|
+
window.localStorage.setItem(langStorageKey(station.id), code);
|
|
220
|
+
}, [station.id]);
|
|
217
221
|
/** Zoeken pas na een korte pauze, zodat typen geen query per toets afvuurt. */
|
|
218
222
|
useEffect(() => {
|
|
219
223
|
const timer = setTimeout(() => {
|
|
@@ -955,16 +959,16 @@ export function PickScherm({ station, onBack }) {
|
|
|
955
959
|
targets.push(item);
|
|
956
960
|
}
|
|
957
961
|
if (targets.length === 0) {
|
|
958
|
-
toast.warning("Er is geen enkele kar printklaar.");
|
|
962
|
+
toast.warning("Er is geen enkele kar printklaar.", { id: "pick-none-ready" });
|
|
959
963
|
for (const s of skipped.slice(0, 5))
|
|
960
|
-
toast.warning(`${s.title}: ${s.reason}`);
|
|
964
|
+
toast.warning(`${s.title}: ${s.reason}`, { id: `pick-skip-${s.title}` });
|
|
961
965
|
return;
|
|
962
966
|
}
|
|
963
967
|
if (targets.length < cartsPerPrint) {
|
|
964
|
-
toast.info(`Er zijn maar ${targets.length} van de ${cartsPerPrint} karren printklaar; alleen die worden geprint
|
|
968
|
+
toast.info(`Er zijn maar ${targets.length} van de ${cartsPerPrint} karren printklaar; alleen die worden geprint.`, { id: "pick-some-ready" });
|
|
965
969
|
}
|
|
966
970
|
for (const s of skipped.slice(0, 5))
|
|
967
|
-
toast.warning(`${s.title}: ${s.reason}`);
|
|
971
|
+
toast.warning(`${s.title}: ${s.reason}`, { id: `pick-skip-${s.title}` });
|
|
968
972
|
const doneUnits = new Set();
|
|
969
973
|
for (const item of targets) {
|
|
970
974
|
const unitKey = `${item.document_type_id ?? "-"}|${unitRefOf(item)}`;
|
|
@@ -1356,6 +1360,8 @@ export function PickScherm({ station, onBack }) {
|
|
|
1356
1360
|
autoFetched.current = false;
|
|
1357
1361
|
}, [pendingCount]);
|
|
1358
1362
|
// Stap 1 — taalselectie
|
|
1363
|
+
if (!langLoaded)
|
|
1364
|
+
return null;
|
|
1359
1365
|
if (lang === null) {
|
|
1360
1366
|
return (_jsxs("div", { className: "space-y-6", children: [_jsxs("div", { className: "grid grid-cols-[minmax(0,1fr)_auto] items-center gap-3 sm:flex sm:flex-wrap sm:justify-between", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("h2", { className: "truncate text-xl font-bold text-foreground sm:text-2xl", children: station.name }), _jsx("p", { className: "text-sm text-muted-foreground", children: t("chooseLanguageHint") })] }), onBack && (_jsxs(Button, { variant: "outline", className: "shrink-0", onClick: onBack, children: [_jsx(ArrowLeft, { className: "mr-2 h-4 w-4" }), " ", t("back")] }))] }), _jsx(LanguageTiles, { onSelect: chooseLang })] }));
|
|
1361
1367
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StickerState.d.ts","sourceRoot":"","sources":["../../../src/components/pick/StickerState.tsx"],"names":[],"mappings":"AAcA,+EAA+E;AAC/E,wBAAgB,mBAAmB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,sCAwC5F;AAED,6EAA6E;AAC7E,wBAAgB,qBAAqB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;IAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,sCAoBvG;AAED,sEAAsE;AACtE,wBAAgB,gBAAgB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"StickerState.d.ts","sourceRoot":"","sources":["../../../src/components/pick/StickerState.tsx"],"names":[],"mappings":"AAcA,+EAA+E;AAC/E,wBAAgB,mBAAmB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,sCAwC5F;AAED,6EAA6E;AAC7E,wBAAgB,qBAAqB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;IAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,sCAoBvG;AAED,sEAAsE;AACtE,wBAAgB,gBAAgB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,sCAuDzF;AAED,6HAA6H;AAC7H,wBAAgB,yBAAyB,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,sCAiBpF"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useQuery } from "@tanstack/react-query";
|
|
3
3
|
import { fetchCartStickerState, fetchOrderStickerMeldingen, STICKER_UNKNOWN, stickerStatusLabel, } from "../../lib/pickStickers.js";
|
|
4
|
-
import {
|
|
4
|
+
import { stickerLineWithJobs } from "../../lib/pick161.js";
|
|
5
5
|
import { fetchUitwijk, fetchVroegeWaarschuwing, vroegeWaarschuwingText } from "../../lib/pickUitwijk.js";
|
|
6
6
|
import { fetchStickerFit, STICKER_FIT_UNKNOWN, stickerFitTone } from "../../lib/pick150.js";
|
|
7
7
|
const POLL = 15000;
|
|
@@ -72,15 +72,24 @@ export function CartStickerState({ cartId, slug }) {
|
|
|
72
72
|
placeholderData: (prev) => prev,
|
|
73
73
|
retry: 1,
|
|
74
74
|
});
|
|
75
|
-
|
|
75
|
+
const jobs = useQuery({
|
|
76
|
+
queryKey: ["pick", "sticker-jobs", cartId, slug],
|
|
77
|
+
queryFn: () => null,
|
|
78
|
+
enabled: false, // gevuld door useCartStickerStates
|
|
79
|
+
});
|
|
80
|
+
const opdrachten = jobs.data?.opdrachten ?? null;
|
|
81
|
+
const hasJobs = Array.isArray(opdrachten) && opdrachten.length > 0;
|
|
82
|
+
if (q.data === undefined && !q.isError && !hasJobs)
|
|
76
83
|
return null;
|
|
77
|
-
if (q.isError || !q.data) {
|
|
84
|
+
if ((q.isError || !q.data) && !hasJobs) {
|
|
78
85
|
return _jsx("p", { className: "mt-3 text-xs text-muted-foreground", children: STICKER_UNKNOWN });
|
|
79
86
|
}
|
|
80
|
-
const s = q.data;
|
|
81
|
-
const line =
|
|
87
|
+
const s = q.data ?? null;
|
|
88
|
+
const line = stickerLineWithJobs(s, opdrachten, jobs.data?.tijdzone ?? null, u.data);
|
|
89
|
+
if (!s)
|
|
90
|
+
return _jsx("p", { className: "mt-3 text-sm text-foreground", children: line });
|
|
82
91
|
const regels = Array.isArray(s.regels) ? s.regels : [];
|
|
83
|
-
if (s.totaal === 0)
|
|
92
|
+
if (s.totaal === 0 || hasJobs)
|
|
84
93
|
return _jsx("p", { className: "mt-3 text-sm text-muted-foreground", children: line });
|
|
85
94
|
return (_jsxs("details", { className: "mt-3 rounded-md border bg-background p-3 text-sm", children: [_jsxs("summary", { className: "cursor-pointer font-medium text-foreground", children: ["Stickers: ", line] }), _jsx("p", { className: "mt-1 text-xs text-muted-foreground", children: "In de printwachtrij betekent nog niet fysiek geprint." }), _jsx("ul", { className: "mt-2 divide-y", children: regels.map((r, i) => (_jsxs("li", { className: "flex flex-wrap justify-between gap-2 py-1.5 text-xs", children: [_jsxs("span", { className: "text-foreground", children: [r.soort ?? "sticker", " \u00B7 ", r.kopieen ?? "—", "x", r.breedteMm && r.hoogteMm ? ` · ${r.breedteMm}x${r.hoogteMm} mm` : ""] }), _jsxs("span", { className: "text-muted-foreground", children: [stickerStatusLabel(r.status), r.reden ? ` — ${r.reden}` : ""] })] }, r.stickerId ?? i))) })] }));
|
|
86
95
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCartStickerStates.d.ts","sourceRoot":"","sources":["../../src/hooks/useCartStickerStates.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,YAAY,QAAS,CAAC;AAEnC;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"useCartStickerStates.d.ts","sourceRoot":"","sources":["../../src/hooks/useCartStickerStates.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,YAAY,QAAS,CAAC;AAEnC;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,qHA2B1E"}
|
|
@@ -35,6 +35,7 @@ export function useCartStickerStates(cartIds, slug) {
|
|
|
35
35
|
if (k.orderId)
|
|
36
36
|
qc.setQueryData(["pick", "sticker-meldingen", k.orderId, slug], k.meldingen);
|
|
37
37
|
qc.setQueryData(["pick", "uitwijk", k.jobIds.join(",")], k.uitwijk);
|
|
38
|
+
qc.setQueryData(["pick", "sticker-jobs", k.cartId, slug], { opdrachten: k.opdrachten, tijdzone: k.tijdzone });
|
|
38
39
|
}
|
|
39
40
|
}, [q.data, qc, slug]);
|
|
40
41
|
return q;
|