@flowselections/pick-schermen-kwekers 1.0.57 → 1.0.60

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 (36) hide show
  1. package/dist-lib/components/PickPublicPage.d.ts.map +1 -1
  2. package/dist-lib/components/PickPublicPage.js +33 -2
  3. package/dist-lib/components/PickstationsPage.d.ts.map +1 -1
  4. package/dist-lib/components/PickstationsPage.js +2 -1
  5. package/dist-lib/components/pick/StationDevices.d.ts +6 -0
  6. package/dist-lib/components/pick/StationDevices.d.ts.map +1 -0
  7. package/dist-lib/components/pick/StationDevices.js +55 -0
  8. package/dist-lib/components/pick/StationPairing.d.ts +7 -0
  9. package/dist-lib/components/pick/StationPairing.d.ts.map +1 -0
  10. package/dist-lib/components/pick/StationPairing.js +25 -0
  11. package/dist-lib/hooks/usePickQueue.d.ts.map +1 -1
  12. package/dist-lib/hooks/usePickQueue.js +4 -0
  13. package/dist-lib/index.d.ts +1 -0
  14. package/dist-lib/index.d.ts.map +1 -1
  15. package/dist-lib/index.js +1 -0
  16. package/dist-lib/integrations/supabase/types.d.ts +3400 -90
  17. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  18. package/dist-lib/lib/__tests__/pick159.test.d.ts +2 -0
  19. package/dist-lib/lib/__tests__/pick159.test.d.ts.map +1 -0
  20. package/dist-lib/lib/__tests__/pick159.test.js +36 -0
  21. package/dist-lib/lib/pick150.d.ts.map +1 -1
  22. package/dist-lib/lib/pick150.js +2 -1
  23. package/dist-lib/lib/pick152.d.ts.map +1 -1
  24. package/dist-lib/lib/pick152.js +2 -1
  25. package/dist-lib/lib/pick156.d.ts.map +1 -1
  26. package/dist-lib/lib/pick156.js +2 -1
  27. package/dist-lib/lib/pick159.d.ts +56 -0
  28. package/dist-lib/lib/pick159.d.ts.map +1 -0
  29. package/dist-lib/lib/pick159.js +125 -0
  30. package/dist-lib/lib/pickApi.d.ts.map +1 -1
  31. package/dist-lib/lib/pickApi.js +35 -81
  32. package/dist-lib/lib/pickPreview.d.ts.map +1 -1
  33. package/dist-lib/lib/pickPreview.js +3 -4
  34. package/dist-lib/lib/pickStickers.d.ts.map +1 -1
  35. package/dist-lib/lib/pickStickers.js +2 -1
  36. package/package.json +5 -3
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=pick159.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pick159.test.d.ts","sourceRoot":"","sources":["../../../src/lib/__tests__/pick159.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,36 @@
1
+ import { describe, expect, it, vi } from "vitest";
2
+ vi.mock("@flowselections/core", () => ({ supabase: {} }));
3
+ import { mustPair, pairResult, parseDeviceStatus, NOT_PAIRED_TEXT } from "../pick159.js";
4
+ describe("1.0.59 apparaatsleutel", () => {
5
+ it("koppelscherm alleen als verplicht en niet gekoppeld", () => {
6
+ expect(mustPair({ stationBekend: true, verplicht: true, gekoppeld: false })).toBe(true);
7
+ expect(mustPair({ stationBekend: true, verplicht: false, gekoppeld: false })).toBe(false);
8
+ expect(mustPair({ stationBekend: true, verplicht: true, gekoppeld: true })).toBe(false);
9
+ });
10
+ it("onleesbare status blokkeert niet", () => {
11
+ expect(parseDeviceStatus("x")).toBeNull();
12
+ expect(mustPair(parseDeviceStatus(null))).toBe(false);
13
+ });
14
+ it("vervallen code na 5 pogingen geeft eigen tekst", () => {
15
+ const r = pairResult({ ok: false, reden: "code_vervallen" });
16
+ expect(r.ok).toBe(false);
17
+ if (!r.ok)
18
+ expect(r.tekst).toContain("vervallen");
19
+ });
20
+ it("korte sleutel wordt niet geaccepteerd", () => {
21
+ expect(pairResult({ ok: true, device_key: "kort" }).ok).toBe(false);
22
+ });
23
+ it("tekst niet gekoppeld", () => expect(NOT_PAIRED_TEXT).toContain("nog niet gekoppeld"));
24
+ });
25
+ import { keyedCall } from "../pick159.js";
26
+ describe("1.0.59 sleutelvarianten", () => {
27
+ it("stuurt een pickfunctie naar de variant met sleutel", () => {
28
+ expect(keyedCall("pick_release_lock", { _queue_item_id: "x" }, "k")).toEqual({ fn: "pick_release_lock", args: { _queue_item_id: "x", p_device_key: "k" } });
29
+ });
30
+ it("stuurt een Engine-functie naar het pickstation-omhulsel", () => {
31
+ expect(keyedCall("logistics_pick_mode", undefined, null)).toEqual({ fn: "pickstation_logistics_pick_mode", args: { p_device_key: null } });
32
+ });
33
+ it("laat koppelen ongemoeid", () => {
34
+ expect(keyedCall("pickstation_pair_device", { p_slug: "a" }, "k")).toEqual({ fn: "pickstation_pair_device", args: { p_slug: "a" } });
35
+ });
36
+ });
@@ -1 +1 @@
1
- {"version":3,"file":"pick150.d.ts","sourceRoot":"","sources":["../../src/lib/pick150.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,mBAAmB,6BAA6B,CAAC;AAE9D,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,WAAW,GAAG,YAAY,GAAG,UAAU,CAAC;AACjF,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAOD,uDAAuD;AACvD,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,EAAE,GAAG,IAAI,CAiBjE;AAED,uEAAuE;AACvE,wBAAgB,cAAc,CAAC,CAAC,EAAE,iBAAiB,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAInF;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,CAMvG"}
1
+ {"version":3,"file":"pick150.d.ts","sourceRoot":"","sources":["../../src/lib/pick150.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,mBAAmB,6BAA6B,CAAC;AAE9D,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,WAAW,GAAG,YAAY,GAAG,UAAU,CAAC;AACjF,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAOD,uDAAuD;AACvD,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,EAAE,GAAG,IAAI,CAiBjE;AAED,uEAAuE;AACvE,wBAAgB,cAAc,CAAC,CAAC,EAAE,iBAAiB,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAInF;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,CAMvG"}
@@ -1,7 +1,8 @@
1
1
  // Pickschermen 1.0.50: controle vooraf of klantstickers passen. Alleen lezen;
2
2
  // de uitkomst en melding komen letterlijk uit Layouts en printers.
3
3
  import { supabase } from "@flowselections/core";
4
- const db = supabase;
4
+ import { keyedRpc } from "./pick159.js";
5
+ const db = keyedRpc(supabase);
5
6
  export const STICKER_FIT_UNKNOWN = "Stickercontrole onbekend";
6
7
  const rec = (v) => v && typeof v === "object" && !Array.isArray(v) ? v : null;
7
8
  const txt = (v) => (typeof v === "string" && v.trim() ? v : null);
@@ -1 +1 @@
1
- {"version":3,"file":"pick152.d.ts","sourceRoot":"","sources":["../../src/lib/pick152.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAKvD,eAAO,MAAM,cAAc,2DAA2D,CAAC;AAQvF,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,gBAAgB,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAGjF;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAO9E;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAK1G"}
1
+ {"version":3,"file":"pick152.d.ts","sourceRoot":"","sources":["../../src/lib/pick152.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAKvD,eAAO,MAAM,cAAc,2DAA2D,CAAC;AAQvF,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,gBAAgB,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAGjF;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAO9E;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAK1G"}
@@ -1,7 +1,8 @@
1
1
  // 1.0.52: stickers van een kar opnieuw printen via de Engine (pickstation_sticker_reprint).
2
2
  // Deze module maakt zelf nooit printopdrachten.
3
3
  import { supabase } from "@flowselections/core";
4
- const db = supabase;
4
+ import { keyedRpc } from "./pick159.js";
5
+ const db = keyedRpc(supabase);
5
6
  export const REPRINT_FAILED = "Opnieuw printen lukte niet. Probeer het later opnieuw.";
6
7
  const REDEN_TEKST = {
7
8
  onbekend_of_inactief_station: "Dit pickstation is onbekend of staat uit.",
@@ -1 +1 @@
1
- {"version":3,"file":"pick156.d.ts","sourceRoot":"","sources":["../../src/lib/pick156.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,kBAAkB,yDAAyD,CAAC;AACzF,eAAO,MAAM,uBAAuB,8BAA8B,CAAC;AACnE,eAAO,MAAM,yBAAyB,6DAA6D,CAAC;AAEpG,MAAM,MAAM,cAAc,GACtB;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GACxC;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GACvD;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GACjB;IAAE,KAAK,EAAE,SAAS,CAAA;CAAE,CAAC;AAMzB,sGAAsG;AACtG,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,CAMhE;AAED,2EAA2E;AAC3E,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,CAKvE;AAED,6FAA6F;AAC7F,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,EAAE,SAAS,EAAE,OAAO,GAAG,OAAO,CAErG;AAOD,wBAAsB,mBAAmB,CAAC,MAAM,EAAE;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB,GAAG,OAAO,CAAC,cAAc,CAAC,CAiB1B"}
1
+ {"version":3,"file":"pick156.d.ts","sourceRoot":"","sources":["../../src/lib/pick156.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,kBAAkB,yDAAyD,CAAC;AACzF,eAAO,MAAM,uBAAuB,8BAA8B,CAAC;AACnE,eAAO,MAAM,yBAAyB,6DAA6D,CAAC;AAEpG,MAAM,MAAM,cAAc,GACtB;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GACxC;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GACvD;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GACjB;IAAE,KAAK,EAAE,SAAS,CAAA;CAAE,CAAC;AAMzB,sGAAsG;AACtG,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,CAMhE;AAED,2EAA2E;AAC3E,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,CAKvE;AAED,6FAA6F;AAC7F,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,EAAE,SAAS,EAAE,OAAO,GAAG,OAAO,CAErG;AAOD,wBAAsB,mBAAmB,CAAC,MAAM,EAAE;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB,GAAG,OAAO,CAAC,cAAc,CAAC,CAiB1B"}
@@ -1,7 +1,8 @@
1
1
  // Pickschermen 1.0.56: het document wordt automatisch bepaald uit de order
2
2
  // (logistics_document_for_order). Alleen lezen; de Engine kiest bij het printen zelf.
3
3
  import { supabase } from "@flowselections/core";
4
- const db = supabase;
4
+ import { keyedRpc } from "./pick159.js";
5
+ const db = keyedRpc(supabase);
5
6
  export const DOCUMENT_AUTO_TEXT = "Het document wordt automatisch bepaald uit de order.";
6
7
  export const DOCUMENT_CHOICE_UNKNOWN = "Documentcontrole onbekend";
7
8
  export const DOCUMENT_BLOCKED_FALLBACK = "Voor deze order kan dit document nu niet worden gemaakt.";
@@ -0,0 +1,56 @@
1
+ export declare const NOT_PAIRED_TEXT = "Dit pickstation is nog niet gekoppeld. Vraag een beheerder om de QR-code te scannen.";
2
+ export declare const PAIR_FAILED = "Koppelen lukte niet. Probeer het opnieuw.";
3
+ export declare function readDeviceKey(slug: string): string | null;
4
+ export declare function saveDeviceKey(slug: string, key: string): void;
5
+ export type DeviceStatus = {
6
+ stationBekend: boolean;
7
+ gekoppeld: boolean;
8
+ verplicht: boolean;
9
+ } | null;
10
+ export declare function parseDeviceStatus(raw: unknown): DeviceStatus;
11
+ /** Moet het koppelscherm getoond worden? Onleesbare status = niet blokkeren (de database beslist). */
12
+ export declare function mustPair(s: DeviceStatus): boolean;
13
+ export declare function pairResult(raw: unknown): {
14
+ ok: true;
15
+ key: string;
16
+ } | {
17
+ ok: false;
18
+ tekst: string;
19
+ };
20
+ export declare function fetchDeviceStatus(slug: string, key: string | null): Promise<DeviceStatus>;
21
+ export declare function pairDevice(slug: string, code: string, name: string | null): Promise<{
22
+ ok: true;
23
+ key: string;
24
+ } | {
25
+ ok: false;
26
+ tekst: string;
27
+ }>;
28
+ export type DeviceRow = {
29
+ id: string;
30
+ naam: string | null;
31
+ laatst_gezien: string | null;
32
+ ingetrokken_op: string | null;
33
+ created_at: string;
34
+ };
35
+ export declare function createPairCode(stationId: string): Promise<{
36
+ code: string;
37
+ geldigTot: string;
38
+ }>;
39
+ export declare function listDevices(stationId: string): Promise<DeviceRow[]>;
40
+ export declare function revokeDevice(deviceId: string): Promise<void>;
41
+ export declare function setActiveDeviceKey(key: string | null): void;
42
+ export declare function activeDeviceKey(): string | null;
43
+ /** Functies met een variant met p_device_key (zelfde naam). */
44
+ export declare const KEYED_RPCS: Set<string>;
45
+ /** Engine-functies: via een eigen pickstation_-omhulsel met sleutelcontrole. */
46
+ export declare const ENGINE_WRAPPED: Set<string>;
47
+ /** Naam en argumenten (op naam) van de variant met sleutel. */
48
+ export declare function keyedCall(fn: string, args: Record<string, unknown> | undefined, key: string | null): {
49
+ fn: string;
50
+ args: Record<string, unknown> | undefined;
51
+ };
52
+ /** Client-omhulsel: stuurt elke bekende aanroep naar de variant met sleutel. */
53
+ export declare function keyedRpc<T extends {
54
+ rpc: (fn: string, args?: Record<string, unknown>) => unknown;
55
+ }>(client: T): T;
56
+ //# sourceMappingURL=pick159.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pick159.d.ts","sourceRoot":"","sources":["../../src/lib/pick159.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,eAAe,yFAAyF,CAAC;AACtH,eAAO,MAAM,WAAW,8CAA8C,CAAC;AAUvE,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOzD;AACD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,QAEtD;AAKD,MAAM,MAAM,YAAY,GAAG;IAAE,aAAa,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAAC;AAErG,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,YAAY,CAI5D;AAED,sGAAsG;AACtG,wBAAgB,QAAQ,CAAC,CAAC,EAAE,YAAY,GAAG,OAAO,CAEjD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAOjG;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC,CAI/F;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;QAfhC,IAAI;SAAO,MAAM;;QAAW,KAAK;WAAS,MAAM;GAmB/F;AAED,MAAM,MAAM,SAAS,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7I,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAMpG;AACD,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAIzE;AACD,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,iBAGlD;AAID,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,QAEpD;AACD,wBAAgB,eAAe,kBAE9B;AAED,+DAA+D;AAC/D,eAAO,MAAM,UAAU,aAerB,CAAC;AACH,gFAAgF;AAChF,eAAO,MAAM,cAAc,aAIzB,CAAC;AAEH,+DAA+D;AAC/D,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;;;EAIlG;AAED,gFAAgF;AAChF,wBAAgB,QAAQ,CAAC,CAAC,SAAS;IAAE,GAAG,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAA;CAAE,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAQjH"}
@@ -0,0 +1,125 @@
1
+ // Pickschermen 1.0.59: apparaatsleutel per pickstation.
2
+ // De sleutel staat alleen op het apparaat (localStorage); de database bewaart alleen de hash.
3
+ import { supabase } from "@flowselections/core";
4
+ const db = supabase;
5
+ export const NOT_PAIRED_TEXT = "Dit pickstation is nog niet gekoppeld. Vraag een beheerder om de QR-code te scannen.";
6
+ export const PAIR_FAILED = "Koppelen lukte niet. Probeer het opnieuw.";
7
+ const REDEN_TEKST = {
8
+ onbekend_of_inactief_station: "Dit pickstation is onbekend of staat uit.",
9
+ geen_geldige_code: "Er is geen geldige koppelcode. Vraag een beheerder om een nieuwe code.",
10
+ code_onjuist: "Deze code klopt niet. Controleer de code en probeer het opnieuw.",
11
+ code_vervallen: "Deze code is vervallen na te veel pogingen. Vraag een beheerder om een nieuwe code.",
12
+ };
13
+ const storageKey = (slug) => `pickstation-device-key:${slug}`;
14
+ export function readDeviceKey(slug) {
15
+ try {
16
+ const v = window.localStorage.getItem(storageKey(slug));
17
+ return v && v.length >= 32 ? v : null;
18
+ }
19
+ catch {
20
+ return null;
21
+ }
22
+ }
23
+ export function saveDeviceKey(slug, key) {
24
+ window.localStorage.setItem(storageKey(slug), key);
25
+ }
26
+ const rec = (v) => v && typeof v === "object" && !Array.isArray(v) ? v : null;
27
+ export function parseDeviceStatus(raw) {
28
+ const r = rec(raw);
29
+ if (!r || typeof r["gekoppeld"] !== "boolean")
30
+ return null;
31
+ return { stationBekend: r["station_bekend"] === true, gekoppeld: r["gekoppeld"] === true, verplicht: r["verplicht"] === true };
32
+ }
33
+ /** Moet het koppelscherm getoond worden? Onleesbare status = niet blokkeren (de database beslist). */
34
+ export function mustPair(s) {
35
+ return !!s && s.stationBekend && s.verplicht && !s.gekoppeld;
36
+ }
37
+ export function pairResult(raw) {
38
+ const r = rec(raw);
39
+ if (r?.["ok"] === true && typeof r["device_key"] === "string" && r["device_key"].length >= 32) {
40
+ return { ok: true, key: r["device_key"] };
41
+ }
42
+ const reden = typeof r?.["reden"] === "string" ? r["reden"] : "";
43
+ return { ok: false, tekst: REDEN_TEKST[reden] ?? PAIR_FAILED };
44
+ }
45
+ export async function fetchDeviceStatus(slug, key) {
46
+ const { data, error } = await db.rpc("pickstation_device_status", { p_slug: slug, p_device_key: key });
47
+ if (error)
48
+ throw new Error(error.message);
49
+ return parseDeviceStatus(data);
50
+ }
51
+ export async function pairDevice(slug, code, name) {
52
+ const { data, error } = await db.rpc("pickstation_pair_device", { p_slug: slug, p_code: code, p_device_name: name });
53
+ if (error)
54
+ return { ok: false, tekst: PAIR_FAILED };
55
+ return pairResult(data);
56
+ }
57
+ export async function createPairCode(stationId) {
58
+ const { data, error } = await db.rpc("pick_create_pair_code", { p_station_id: stationId });
59
+ if (error)
60
+ throw new Error(error.message);
61
+ const r = rec(data);
62
+ if (!r || typeof r["code"] !== "string")
63
+ throw new Error(PAIR_FAILED);
64
+ return { code: r["code"], geldigTot: String(r["geldig_tot"] ?? "") };
65
+ }
66
+ export async function listDevices(stationId) {
67
+ const { data, error } = await db.rpc("pick_station_devices_list", { p_station_id: stationId });
68
+ if (error)
69
+ throw new Error(error.message);
70
+ return Array.isArray(data) ? data : [];
71
+ }
72
+ export async function revokeDevice(deviceId) {
73
+ const { error } = await db.rpc("pick_revoke_device", { p_device_id: deviceId });
74
+ if (error)
75
+ throw new Error(error.message);
76
+ }
77
+ // Actieve sleutel van dit apparaat; null = ingelogd scherm of nog niet gekoppeld.
78
+ let activeKey = null;
79
+ export function setActiveDeviceKey(key) {
80
+ activeKey = key;
81
+ }
82
+ export function activeDeviceKey() {
83
+ return activeKey;
84
+ }
85
+ /** Functies met een variant met p_device_key (zelfde naam). */
86
+ export const KEYED_RPCS = new Set([
87
+ "pick_active_printers", "pick_apply_buffer_events", "pick_available_pick_days", "pick_claim_document",
88
+ "pick_claim_next_document", "pick_complete_print", "pick_complete_print_cart", "pick_complete_print_carts",
89
+ "pick_current_pick_day", "pick_day_counts", "pick_enqueue_print_job", "pick_mark_printed", "pick_preview_job",
90
+ "pick_print_job_status", "pick_print_jobs_status", "pick_print_plekken", "pick_queue_cart_plan",
91
+ "pick_reference_data_status", "pick_release_expired_locks", "pick_release_lock", "pick_report_missing_cart_plan",
92
+ "pick_reprint_cart", "pick_reprint_document", "pick_reset_print", "pick_reset_print_job", "pick_reset_print_jobs",
93
+ "pick_restore_to_queue", "pick_set_station_print_plek", "pick_station_dashboard", "pick_station_print_plek",
94
+ "pick_station_print_plekken", "pick_sync_pick_day", "pick_sync_queue_throttled", "pick_verify_rows",
95
+ "pickstation_auto_send_status", "pickstation_cart_sticker_state", "pickstation_document_for_order",
96
+ "pickstation_get_orders_raw", "pickstation_get_planning_context", "pickstation_get_settings", "pickstation_log_print",
97
+ "pickstation_order_sticker_meldingen", "pickstation_resolve_delivery_orders", "pickstation_sticker_past_controle",
98
+ "pickstation_sticker_reprint",
99
+ "pick_read_station", "pick_read_locks", "pick_read_queue", "pick_read_country_counts", "pick_read_by_code",
100
+ "pick_read_unscanned_earlier",
101
+ ]);
102
+ /** Engine-functies: via een eigen pickstation_-omhulsel met sleutelcontrole. */
103
+ export const ENGINE_WRAPPED = new Set([
104
+ "logistics_barcode_lookup", "logistics_cart_plan_status", "logistics_cart_slip_plan", "logistics_complete_task",
105
+ "logistics_is_pick_workday", "logistics_order_released", "logistics_pick_mode",
106
+ "logistics_shipping_note_from_barcode", "logistics_working_hours_status",
107
+ ]);
108
+ /** Naam en argumenten (op naam) van de variant met sleutel. */
109
+ export function keyedCall(fn, args, key) {
110
+ if (ENGINE_WRAPPED.has(fn))
111
+ return { fn: `pickstation_${fn}`, args: { ...(args ?? {}), p_device_key: key } };
112
+ if (KEYED_RPCS.has(fn))
113
+ return { fn, args: { ...(args ?? {}), p_device_key: key } };
114
+ return { fn, args };
115
+ }
116
+ /** Client-omhulsel: stuurt elke bekende aanroep naar de variant met sleutel. */
117
+ export function keyedRpc(client) {
118
+ return {
119
+ ...client,
120
+ rpc: (fn, args) => {
121
+ const c = keyedCall(fn, args, activeKey);
122
+ return client.rpc(c.fn, c.args);
123
+ },
124
+ };
125
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"pickApi.d.ts","sourceRoot":"","sources":["../../src/lib/pickApi.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pickApi.d.ts","sourceRoot":"","sources":["../../src/lib/pickApi.ts"],"names":[],"mappings":"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"}
@@ -3,12 +3,16 @@ import { supabase } from "@flowselections/core";
3
3
  import { cartPlanMismatchesOf, parsePickCartPlan } from "./pickTypes.js";
4
4
  import { safeArray } from "./pickTypes.js";
5
5
  import { withRetry } from "./pickRetry.js";
6
+ import { activeDeviceKey, keyedCall } from "./pick159.js";
6
7
  const raw = supabase;
7
8
  /** Zelfde client, maar RPC-aanroepen vangen tijdelijke netwerkhaperingen op. */
8
9
  export function createRetryingDb(base) {
9
10
  return {
10
11
  from: (t) => base.from(t),
11
- rpc: (fn, args) => withRetry(() => base.rpc(fn, args)),
12
+ rpc: (fn, args) => {
13
+ const c = keyedCall(fn, args, activeDeviceKey());
14
+ return withRetry(() => base.rpc(c.fn, c.args));
15
+ },
12
16
  channel: (name) => base.channel(name),
13
17
  removeChannel: (c) => base.removeChannel(c),
14
18
  get auth() {
@@ -154,7 +158,7 @@ export const pickApi = {
154
158
  return unwrap(await db.from("pick_stations").select("*").order("sort_order"));
155
159
  },
156
160
  async stationBySlug(slug) {
157
- const rows = unwrap(await db.from("pick_stations").select("*").eq("slug", slug).limit(1));
161
+ const rows = unwrap(await db.rpc("pick_read_station", { p_slug: slug }));
158
162
  return rows[0] ?? null;
159
163
  },
160
164
  async screens(stationId) {
@@ -167,10 +171,7 @@ export const pickApi = {
167
171
  return unwrap(await db.from("pick_screen_document_types").select("*").eq("screen_id", screenId).order("print_order"));
168
172
  },
169
173
  async locks(stationId) {
170
- let q = db.from("pick_queue_locks").select("*");
171
- if (stationId)
172
- q = q.eq("station_id", stationId);
173
- return unwrap(await q);
174
+ return unwrap(await db.rpc("pick_read_locks", { p_station_id: stationId ?? null }));
174
175
  },
175
176
  async dashboard() {
176
177
  const { data, error } = await db.rpc("pick_station_dashboard");
@@ -241,22 +242,16 @@ export const pickApi = {
241
242
  };
242
243
  },
243
244
  async countryCounts(args) {
244
- let q = db
245
- .from("pick_queue")
246
- .select("country_code")
247
- .is("printed_at", null)
248
- .is("cancelled_at", null)
249
- .is("completed_at", null)
250
- .limit(5000);
251
- if (args.screenId)
252
- q = q.eq("screen_id", args.screenId);
253
- if (args.stationId)
254
- q = q.eq("station_id", args.stationId);
255
- const rows = unwrap(await q);
245
+ const { data, error } = await db.rpc("pick_read_country_counts", {
246
+ p_station_id: args.stationId ?? null,
247
+ p_screen_id: args.screenId ?? null,
248
+ });
249
+ if (error)
250
+ throw new Error(error.message);
256
251
  const counts = {};
257
- for (const r of rows) {
258
- const c = r.country_code ?? "??";
259
- counts[c] = (counts[c] ?? 0) + 1;
252
+ if (data && typeof data === "object" && !Array.isArray(data)) {
253
+ for (const [k, v] of Object.entries(data))
254
+ counts[k] = Number(v) || 0;
260
255
  }
261
256
  return counts;
262
257
  },
@@ -264,32 +259,6 @@ export const pickApi = {
264
259
  async queue(params) {
265
260
  const pageSize = params.pageSize ?? 50;
266
261
  const page = params.page ?? 0;
267
- let q = db.from("pick_queue").select("*", { count: "exact" });
268
- if (params.screenId)
269
- q = q.eq("screen_id", params.screenId);
270
- if (params.stationId)
271
- q = q.eq("station_id", params.stationId);
272
- if (params.country)
273
- q = q.eq("country_code", params.country);
274
- if (params.documentTypeId)
275
- q = q.eq("document_type_id", params.documentTypeId);
276
- if (params.urgentOnly)
277
- q = q.eq("is_urgent", true);
278
- if (params.pickDay)
279
- q = q.eq("payload->>pickDate", params.pickDay);
280
- q = q.is("cancelled_at", null).is("completed_at", null);
281
- if (!params.includeDone)
282
- q = q.is("printed_at", null);
283
- if (params.search) {
284
- const s = `%${params.search}%`;
285
- q = q.or([
286
- `document_number.ilike.${s}`,
287
- `order_number.ilike.${s}`,
288
- `customer_name.ilike.${s}`,
289
- `reference.ilike.${s}`,
290
- `barcode.ilike.${s}`,
291
- ].join(","));
292
- }
293
262
  const rules = params.sortRules?.length
294
263
  ? params.sortRules
295
264
  : [
@@ -297,50 +266,35 @@ export const pickApi = {
297
266
  { field: "priority", direction: "asc" },
298
267
  { field: "announced_at", direction: "asc" },
299
268
  ];
300
- for (const r of rules)
301
- q = q.order(r.field, { ascending: r.direction !== "desc" });
302
- q = q.range(page * pageSize, page * pageSize + pageSize - 1);
303
- const res = await q;
304
- if (res.error)
305
- throw new Error(res.error.message);
306
- return { items: safeArray(res.data), total: res.count ?? 0 };
269
+ const { data, error } = await db.rpc("pick_read_queue", {
270
+ p_station_id: params.stationId ?? null,
271
+ p_screen_id: params.screenId ?? null,
272
+ p_country: params.country ?? null,
273
+ p_search: params.search || null,
274
+ p_document_type_id: params.documentTypeId ?? null,
275
+ p_urgent_only: !!params.urgentOnly,
276
+ p_include_done: !!params.includeDone,
277
+ p_pick_day: params.pickDay ?? null,
278
+ p_sort: rules.map((r) => ({ field: r.field, direction: r.direction })),
279
+ p_offset: page * pageSize,
280
+ p_limit: pageSize,
281
+ });
282
+ if (error)
283
+ throw new Error(error.message);
284
+ const row = (data && typeof data === "object" ? data : {});
285
+ return { items: safeArray(row["items"]), total: Number(row["total"] ?? 0) || 0 };
307
286
  },
308
287
  /** Zoekt één wachtrijregel op barcode, documentnummer of ordernummer (voor de scanner). */
309
288
  async findByCode(code, stationId) {
310
289
  const value = code.trim();
311
290
  if (!value)
312
291
  return null;
313
- let q = db
314
- .from("pick_queue")
315
- .select("*")
316
- .is("cancelled_at", null)
317
- .is("completed_at", null)
318
- .or([
319
- `barcode.eq.${value}`,
320
- `document_number.eq.${value}`,
321
- `order_number.eq.${value}`,
322
- ].join(","))
323
- .order("printed_at", { ascending: true, nullsFirst: true })
324
- .limit(1);
325
- if (stationId)
326
- q = q.eq("station_id", stationId);
327
- const rows = unwrap(await q);
292
+ const rows = unwrap(await db.rpc("pick_read_by_code", { p_code: value, p_station_id: stationId ?? null }));
328
293
  return rows[0] ?? null;
329
294
  },
330
295
  /** Geprint, nog niet gescand, van een pickdag vóór de gekozen dag (Engine 1.0.152). */
331
296
  async unscannedEarlier(args) {
332
- let q = db
333
- .from("pick_queue")
334
- .select("*")
335
- .not("printed_at", "is", null)
336
- .is("cancelled_at", null)
337
- .is("completed_at", null)
338
- .lt("payload->>pickDate", args.beforeDay)
339
- .order("printed_at", { ascending: true })
340
- .limit(200);
341
- if (args.stationId)
342
- q = q.eq("station_id", args.stationId);
343
- return unwrap(await q);
297
+ return unwrap(await db.rpc("pick_read_unscanned_earlier", { p_station_id: args.stationId ?? null, p_before_day: args.beforeDay }));
344
298
  },
345
299
  async claimNext(args) {
346
300
  const { data, error } = await db.rpc("pick_claim_next_document", {
@@ -1 +1 @@
1
- {"version":3,"file":"pickPreview.d.ts","sourceRoot":"","sources":["../../src/lib/pickPreview.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,iBAAiB;IAChC,0DAA0D;IAC1D,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;IACrB,qFAAqF;IACrF,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,yDAAyD;IACzD,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,oEAAoE;IACpE,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,eAAO,MAAM,2BAA2B,gCAAgC,CAAC;AACzE,eAAO,MAAM,2BAA2B,uGAC8D,CAAC;AAEvG,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;gBAErB,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB,GAAE,MAAM,GAAG,IAAW;CAMnF;AAcD,yFAAyF;AACzF,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA2C7B"}
1
+ {"version":3,"file":"pickPreview.d.ts","sourceRoot":"","sources":["../../src/lib/pickPreview.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,iBAAiB;IAChC,0DAA0D;IAC1D,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;IACrB,qFAAqF;IACrF,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,yDAAyD;IACzD,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,oEAAoE;IACpE,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,eAAO,MAAM,2BAA2B,gCAAgC,CAAC;AACzE,eAAO,MAAM,2BAA2B,uGAC8D,CAAC;AAEvG,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;gBAErB,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB,GAAE,MAAM,GAAG,IAAW;CAMnF;AAcD,yFAAyF;AACzF,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA2C7B"}
@@ -2,6 +2,7 @@
2
2
  // RPC: pick_preview_job(_station_slug, _queue_item_id) -> jsonb
3
3
  // Deze module print hier nooit mee; de RPC raakt print_jobs niet aan.
4
4
  import { supabase } from "../integrations/supabase/client.js";
5
+ import { activeDeviceKey, keyedCall } from "./pick159.js";
5
6
  export const PREVIEW_UNAVAILABLE_MESSAGE = "Voorbeeld niet beschikbaar.";
6
7
  export const PREVIEW_LAYOUT_ONLY_MESSAGE = "Voorbeeld niet beschikbaar. Het document wordt bij het printen opgemaakt met de ingestelde layout.";
7
8
  export class PickPreviewError extends Error {
@@ -25,10 +26,8 @@ function tekst(value) {
25
26
  }
26
27
  /** Haalt het voorbeeld op. Foutteksten uit de database worden letterlijk doorgegeven. */
27
28
  export async function fetchPickPreview(args) {
28
- const { data, error } = await supabase.rpc("pick_preview_job", {
29
- _station_slug: args.stationSlug,
30
- _queue_item_id: args.queueItemId,
31
- });
29
+ const call = keyedCall("pick_preview_job", { _station_slug: args.stationSlug, _queue_item_id: args.queueItemId }, activeDeviceKey());
30
+ const { data, error } = await supabase.rpc(call.fn, call.args ?? {});
32
31
  if (args.signal?.aborted)
33
32
  throw new PickPreviewError("Voorbeeld afgebroken.", "afgebroken");
34
33
  if (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"pickStickers.d.ts","sourceRoot":"","sources":["../../src/lib/pickStickers.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,eAAe,0BAA0B,CAAC;AAEvD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AACD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AACD,MAAM,WAAW,cAAc;IAAG,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE;AAOpE,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAQvD,CAAC;AACF,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAG3D;AAED,wEAAwE;AACxE,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB,GAAG,IAAI,CAqB3E;AAED,gFAAgF;AAChF,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB,GAAG,IAAI,CAIjF;AAED,+EAA+E;AAC/E,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,EAAE,GAAG,IAAI,CAe3E;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,EAAE,GAAG,IAAI,CAI/E;AAED,wFAAwF;AACxF,wBAAgB,cAAc,CAAC,CAAC,EAAE,gBAAgB,GAAG,MAAM,GAAG,IAAI,CAIjE;AAQD;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAGjH;AAED,wBAAsB,0BAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,CAGvH"}
1
+ {"version":3,"file":"pickStickers.d.ts","sourceRoot":"","sources":["../../src/lib/pickStickers.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,eAAe,0BAA0B,CAAC;AAEvD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AACD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AACD,MAAM,WAAW,cAAc;IAAG,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE;AAOpE,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAQvD,CAAC;AACF,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAG3D;AAED,wEAAwE;AACxE,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB,GAAG,IAAI,CAqB3E;AAED,gFAAgF;AAChF,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB,GAAG,IAAI,CAIjF;AAED,+EAA+E;AAC/E,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,EAAE,GAAG,IAAI,CAe3E;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,EAAE,GAAG,IAAI,CAI/E;AAED,wFAAwF;AACxF,wBAAgB,cAAc,CAAC,CAAC,EAAE,gBAAgB,GAAG,MAAM,GAAG,IAAI,CAIjE;AAQD;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAGjH;AAED,wBAAsB,0BAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,CAGvH"}
@@ -1,7 +1,8 @@
1
1
  // Stickerstand en stickermeldingen: alleen lezen uit de Engine. Deze module
2
2
  // voert zelf nooit print.sticker/print.traysticker uit en haalt geen PDF op.
3
3
  import { supabase } from "@flowselections/core";
4
- const db = supabase;
4
+ import { keyedRpc } from "./pick159.js";
5
+ const db = keyedRpc(supabase);
5
6
  export const STICKER_UNKNOWN = "Stickerstand onbekend";
6
7
  const rec = (v) => v && typeof v === "object" && !Array.isArray(v) ? v : null;
7
8
  const txt = (v) => (typeof v === "string" && v.trim() ? v : typeof v === "number" ? String(v) : null);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flowselections/pick-schermen-kwekers",
3
- "version": "1.0.57",
3
+ "version": "1.0.60",
4
4
  "flowselections": {
5
5
  "moduleId": "pick-schermen",
6
6
  "pages": [
@@ -59,12 +59,13 @@
59
59
  },
60
60
  "dependencies": {
61
61
  "@flowselections/layout-maker": "^1.19.0",
62
- "@supabase/supabase-js": "^2.111.0"
62
+ "@supabase/supabase-js": "^2.111.0",
63
+ "qrcode": "^1.5.4"
63
64
  },
64
65
  "devDependencies": {
65
66
  "@cloudflare/vite-plugin": "^1.25.5",
66
67
  "@eslint/js": "^9.32.0",
67
- "@flowselections/core": "1.0.29",
68
+ "@flowselections/core": "1.0.30",
68
69
  "@lovable.dev/vite-tanstack-config": "2.26.5",
69
70
  "@rsbuild/core": "^1.0.0",
70
71
  "@tailwindcss/vite": "^4.2.1",
@@ -73,6 +74,7 @@
73
74
  "@tanstack/react-start": "1.167.63",
74
75
  "@tanstack/router-plugin": "1.167.33",
75
76
  "@types/node": "^22.16.5",
77
+ "@types/qrcode": "^1.5.6",
76
78
  "@types/react": "^19.2.0",
77
79
  "@types/react-dom": "^19.2.0",
78
80
  "@vitejs/plugin-react": "^5.0.4",