@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
@@ -1 +1 @@
1
- {"version":3,"file":"PickPublicPage.d.ts","sourceRoot":"","sources":["../../src/components/PickPublicPage.tsx"],"names":[],"mappings":"AAKA,UAAU,KAAK;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,+DAA+D;AAC/D,wBAAgB,cAAc,CAAC,EAAE,IAAI,EAAE,EAAE,KAAK,+BA2B7C"}
1
+ {"version":3,"file":"PickPublicPage.d.ts","sourceRoot":"","sources":["../../src/components/PickPublicPage.tsx"],"names":[],"mappings":"AAQA,UAAU,KAAK;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,+DAA+D;AAC/D,wBAAgB,cAAc,CAAC,EAAE,IAAI,EAAE,EAAE,KAAK,+BAiE7C"}
@@ -1,17 +1,48 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useEffect, useState } from "react";
2
3
  import { useQuery } from "@tanstack/react-query";
3
4
  import { Loader2 } from "lucide-react";
4
5
  import { pickApi } from "../lib/pickApi.js";
6
+ import { fetchDeviceStatus, mustPair, readDeviceKey, setActiveDeviceKey } from "../lib/pick159.js";
5
7
  import { PickScherm } from "./pick/PickScherm.js";
8
+ import { StationPairing } from "./pick/StationPairing.js";
6
9
  /** Openbaar pickscherm, bereikbaar via /pickstation/<slug>. */
7
10
  export function PickPublicPage({ slug }) {
11
+ const [deviceKey, setDeviceKey] = useState(null);
12
+ const [keyRead, setKeyRead] = useState(false);
13
+ const [qrCode, setQrCode] = useState(undefined);
14
+ useEffect(() => {
15
+ setActiveDeviceKey(deviceKey);
16
+ return () => setActiveDeviceKey(null);
17
+ }, [deviceKey]);
18
+ useEffect(() => {
19
+ setDeviceKey(readDeviceKey(slug));
20
+ const c = new URLSearchParams(window.location.search).get("koppelcode");
21
+ if (c)
22
+ setQrCode(c);
23
+ setKeyRead(true);
24
+ }, [slug]);
25
+ const { data: deviceStatus, isLoading: statusLoading, refetch } = useQuery({
26
+ queryKey: ["pick", "device-status", slug, deviceKey],
27
+ queryFn: () => fetchDeviceStatus(slug, deviceKey),
28
+ enabled: keyRead,
29
+ });
8
30
  const { data: station, isLoading } = useQuery({
9
- queryKey: ["pick", "station", slug],
31
+ queryKey: ["pick", "station", slug, deviceKey],
10
32
  queryFn: () => pickApi.stationBySlug(slug),
33
+ enabled: keyRead,
11
34
  });
12
- if (isLoading) {
35
+ if (isLoading || !keyRead || statusLoading) {
13
36
  return (_jsx("div", { className: "flex min-h-screen items-center justify-center bg-background", children: _jsx(Loader2, { className: "h-8 w-8 animate-spin text-primary" }) }));
14
37
  }
38
+ if (mustPair(deviceStatus ?? null) || (qrCode && !deviceStatus?.gekoppeld)) {
39
+ return (_jsx(StationPairing, { slug: slug, initialCode: qrCode, onPaired: () => {
40
+ setQrCode(undefined);
41
+ window.history.replaceState(null, "", window.location.pathname);
42
+ setDeviceKey(readDeviceKey(slug));
43
+ void refetch();
44
+ } }));
45
+ }
15
46
  if (!station) {
16
47
  return (_jsx("div", { className: "flex min-h-screen items-center justify-center bg-background", children: _jsx("p", { className: "text-muted-foreground", children: "Pickstation niet gevonden of niet actief." }) }));
17
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"PickstationsPage.d.ts","sourceRoot":"","sources":["../../src/components/PickstationsPage.tsx"],"names":[],"mappings":"AAkGA,wBAAgB,gBAAgB,gCA4L/B"}
1
+ {"version":3,"file":"PickstationsPage.d.ts","sourceRoot":"","sources":["../../src/components/PickstationsPage.tsx"],"names":[],"mappings":"AAmGA,wBAAgB,gBAAgB,gCA6L/B"}
@@ -8,6 +8,7 @@ import { usePickStations } from "../hooks/usePickConfig.js";
8
8
  import { useKoppelingVoorBron } from "../hooks/useKoppelingVoorBron.js";
9
9
  import { ReferentiedataBanner } from "./pick/ReferentiedataBanner.js";
10
10
  import { DOCUMENT_AUTO_TEXT } from "../lib/pick156.js";
11
+ import { StationDevices } from "./pick/StationDevices.js";
11
12
  const emptyDraft = { name: "", description: "", active: true };
12
13
  function publicUrl(slug) {
13
14
  const origin = typeof window !== "undefined" ? window.location.origin : "";
@@ -61,7 +62,7 @@ export function PickstationsPage() {
61
62
  return (_jsxs("main", { className: "space-y-6 p-6", children: [_jsxs("div", { className: "flex flex-wrap items-center justify-between gap-3", children: [_jsxs("div", { children: [_jsx("h1", { className: "text-2xl font-bold text-foreground", children: "Pickstations" }), _jsx("p", { className: "text-sm text-muted-foreground", children: "Beheer je pickstations en de link die je met de medewerkers deelt." })] }), _jsxs(Button, { onClick: () => setDraft({ ...emptyDraft }), children: [_jsx(Plus, { className: "mr-2 h-4 w-4" }), " Nieuw pickstation"] })] }), _jsx(ReferentiedataBanner, {}), isLoading ? (_jsxs("div", { className: "flex items-center gap-2 text-muted-foreground", children: [_jsx(Loader2, { className: "h-4 w-4 animate-spin" }), " Laden..."] })) : safeStations.length === 0 ? (_jsx("p", { className: "text-sm text-muted-foreground", children: "Nog geen pickstations." })) : (_jsx("div", { className: "grid gap-4 sm:grid-cols-2 xl:grid-cols-3", children: safeStations.map((station) => (_jsx(Card, { className: "border-2", children: _jsxs(CardContent, { className: "space-y-4 p-6", children: [_jsxs("div", { className: "flex items-start justify-between gap-2", children: [_jsxs("div", { children: [_jsx("h2", { className: "text-lg font-semibold text-foreground", children: station.name }), _jsx("p", { className: "text-sm text-muted-foreground", children: station.description })] }), _jsx("span", { className: "rounded-full px-2 py-1 text-xs font-medium " +
62
63
  (station.active
63
64
  ? "bg-primary/10 text-primary"
64
- : "bg-muted text-muted-foreground"), children: station.active ? "Actief" : "Inactief" })] }), _jsx("code", { className: "block truncate rounded bg-muted px-2 py-1 text-xs text-muted-foreground", children: publicUrl(station.slug) }), _jsx(StationPrintplek, { station: station }), _jsx("p", { className: "text-sm text-muted-foreground", children: DOCUMENT_AUTO_TEXT }), _jsxs("div", { className: "flex flex-wrap gap-2", children: [_jsx(Button, { className: "flex-1", asChild: true, children: _jsxs("a", { href: publicUrl(station.slug), target: "_blank", rel: "noreferrer", children: [_jsx(ExternalLink, { className: "mr-2 h-4 w-4" }), " Open pickstation"] }) }), _jsxs(Button, { variant: "outline", onClick: () => copyLink(station), children: [_jsx(Copy, { className: "mr-2 h-4 w-4" }), " Link kopi\u00EBren"] })] }), _jsxs("div", { className: "flex gap-2", children: [_jsxs(Button, { variant: "ghost", size: "sm", onClick: () => setDraft({
65
+ : "bg-muted text-muted-foreground"), children: station.active ? "Actief" : "Inactief" })] }), _jsx("code", { className: "block truncate rounded bg-muted px-2 py-1 text-xs text-muted-foreground", children: publicUrl(station.slug) }), _jsx(StationPrintplek, { station: station }), _jsx("p", { className: "text-sm text-muted-foreground", children: DOCUMENT_AUTO_TEXT }), _jsx(StationDevices, { stationId: station.id, slug: station.slug ?? null }), _jsxs("div", { className: "flex flex-wrap gap-2", children: [_jsx(Button, { className: "flex-1", asChild: true, children: _jsxs("a", { href: publicUrl(station.slug), target: "_blank", rel: "noreferrer", children: [_jsx(ExternalLink, { className: "mr-2 h-4 w-4" }), " Open pickstation"] }) }), _jsxs(Button, { variant: "outline", onClick: () => copyLink(station), children: [_jsx(Copy, { className: "mr-2 h-4 w-4" }), " Link kopi\u00EBren"] })] }), _jsxs("div", { className: "flex gap-2", children: [_jsxs(Button, { variant: "ghost", size: "sm", onClick: () => setDraft({
65
66
  id: station.id,
66
67
  name: station.name,
67
68
  description: station.description ?? "",
@@ -0,0 +1,6 @@
1
+ /** Beheer: apparaat koppelen (code + QR-link) en apparaten intrekken. */
2
+ export declare function StationDevices({ stationId, slug }: {
3
+ stationId: string;
4
+ slug: string | null;
5
+ }): import("react").JSX.Element;
6
+ //# sourceMappingURL=StationDevices.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StationDevices.d.ts","sourceRoot":"","sources":["../../../src/components/pick/StationDevices.tsx"],"names":[],"mappings":"AAOA,yEAAyE;AACzE,wBAAgB,cAAc,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,+BAyE7F"}
@@ -0,0 +1,55 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import { useEffect, useState } from "react";
3
+ import QRCode from "qrcode";
4
+ import { useQuery, useQueryClient } from "@tanstack/react-query";
5
+ import { Button, toast } from "@flowselections/core";
6
+ import { Loader2, Smartphone } from "lucide-react";
7
+ import { createPairCode, listDevices, revokeDevice } from "../../lib/pick159.js";
8
+ /** Beheer: apparaat koppelen (code + QR-link) en apparaten intrekken. */
9
+ export function StationDevices({ stationId, slug }) {
10
+ const qc = useQueryClient();
11
+ const [code, setCode] = useState(null);
12
+ const [bezig, setBezig] = useState(false);
13
+ const { data: devices = [], isLoading } = useQuery({
14
+ queryKey: ["pick", "devices", stationId],
15
+ queryFn: () => listDevices(stationId),
16
+ });
17
+ const actief = (Array.isArray(devices) ? devices : []).filter((d) => !d.ingetrokken_op);
18
+ const origin = typeof window !== "undefined" ? window.location.origin : "";
19
+ const link = code && slug ? `${origin}/pickstation/${slug}?koppelcode=${code.code}` : null;
20
+ const [qr, setQr] = useState(null);
21
+ useEffect(() => {
22
+ // QR wordt in de browser zelf getekend; er gaat niets naar een dienst van buiten.
23
+ if (!link)
24
+ return setQr(null);
25
+ let actief = true;
26
+ QRCode.toDataURL(link, { margin: 1, width: 220 }).then((u) => actief && setQr(u)).catch(() => actief && setQr(null));
27
+ return () => {
28
+ actief = false;
29
+ };
30
+ }, [link]);
31
+ async function nieuweCode() {
32
+ setBezig(true);
33
+ try {
34
+ setCode(await createPairCode(stationId));
35
+ }
36
+ catch {
37
+ toast.error("Er kon geen koppelcode worden gemaakt.");
38
+ }
39
+ finally {
40
+ setBezig(false);
41
+ }
42
+ }
43
+ async function intrekken(id) {
44
+ if (!window.confirm("Dit apparaat intrekken? Het kan daarna niet meer printen."))
45
+ return;
46
+ try {
47
+ await revokeDevice(id);
48
+ void qc.invalidateQueries({ queryKey: ["pick", "devices", stationId] });
49
+ }
50
+ catch {
51
+ toast.error("Intrekken lukte niet.");
52
+ }
53
+ }
54
+ return (_jsxs("div", { className: "space-y-2", children: [_jsxs("p", { className: "text-sm font-medium text-foreground", children: ["Apparaten ", isLoading ? "" : actief.length === 0 ? "– nog niet gekoppeld" : `– ${actief.length} gekoppeld`] }), actief.map((d) => (_jsxs("div", { className: "flex items-center justify-between gap-2 text-sm", children: [_jsxs("span", { className: "flex items-center gap-2 text-muted-foreground", children: [_jsx(Smartphone, { className: "h-4 w-4" }), d.naam ?? "Apparaat", d.laatst_gezien ? ` · laatst gezien ${new Date(d.laatst_gezien).toLocaleString("nl-NL")}` : ""] }), _jsx(Button, { size: "sm", variant: "outline", onClick: () => void intrekken(d.id), children: "Intrekken" })] }, d.id))), _jsxs(Button, { size: "sm", variant: "secondary", disabled: bezig, onClick: () => void nieuweCode(), children: [bezig ? _jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" }) : null, "Apparaat koppelen"] }), code ? (_jsxs("div", { className: "rounded-md border border-border p-3 text-sm", children: [_jsxs("p", { children: ["Koppelcode: ", _jsx("span", { className: "font-mono text-lg font-bold tracking-widest", children: code.code })] }), _jsx("p", { className: "text-muted-foreground", children: "10 minuten geldig, maximaal 5 pogingen." }), qr ? _jsx("img", { src: qr, alt: "QR-code om dit apparaat te koppelen", className: "mt-2 h-44 w-44 rounded bg-background" }) : null, link ? _jsxs("p", { className: "mt-2 break-all text-muted-foreground", children: ["Of open op het apparaat: ", link] }) : null] })) : null] }));
55
+ }
@@ -0,0 +1,7 @@
1
+ /** Volledig scherm voor een apparaat zonder geldige sleutel. */
2
+ export declare function StationPairing({ slug, initialCode, onPaired }: {
3
+ slug: string;
4
+ initialCode?: string;
5
+ onPaired: () => void;
6
+ }): import("react").JSX.Element;
7
+ //# sourceMappingURL=StationPairing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StationPairing.d.ts","sourceRoot":"","sources":["../../../src/components/pick/StationPairing.tsx"],"names":[],"mappings":"AAKA,gEAAgE;AAChE,wBAAgB,cAAc,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,IAAI,CAAA;CAAE,+BAuC3H"}
@@ -0,0 +1,25 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ import { Button, Card, CardContent, Input, Label } from "@flowselections/core";
4
+ import { Loader2 } from "lucide-react";
5
+ import { NOT_PAIRED_TEXT, pairDevice, saveDeviceKey } from "../../lib/pick159.js";
6
+ /** Volledig scherm voor een apparaat zonder geldige sleutel. */
7
+ export function StationPairing({ slug, initialCode, onPaired }) {
8
+ const [code, setCode] = useState(initialCode ?? "");
9
+ const [naam, setNaam] = useState("");
10
+ const [bezig, setBezig] = useState(false);
11
+ const [fout, setFout] = useState(null);
12
+ async function koppel() {
13
+ setBezig(true);
14
+ setFout(null);
15
+ const r = await pairDevice(slug, code.trim().toUpperCase(), naam.trim() || null);
16
+ setBezig(false);
17
+ if (r.ok) {
18
+ saveDeviceKey(slug, r.key);
19
+ onPaired();
20
+ }
21
+ else
22
+ setFout(r.tekst);
23
+ }
24
+ return (_jsx("div", { className: "flex min-h-screen items-center justify-center bg-background p-4", children: _jsx(Card, { className: "w-full max-w-md", children: _jsxs(CardContent, { className: "space-y-4 p-6", children: [_jsx("p", { className: "text-lg font-semibold text-foreground", children: NOT_PAIRED_TEXT }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "pair-code", children: "Koppelcode" }), _jsx(Input, { id: "pair-code", value: code, maxLength: 6, autoComplete: "off", onChange: (e) => setCode(e.target.value) })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "pair-naam", children: "Naam van dit apparaat (mag leeg)" }), _jsx(Input, { id: "pair-naam", value: naam, maxLength: 80, onChange: (e) => setNaam(e.target.value) })] }), fout ? _jsx("p", { className: "text-sm text-destructive", children: fout }) : null, _jsxs(Button, { className: "w-full", disabled: bezig || code.trim().length !== 6, onClick: () => void koppel(), children: [bezig ? _jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" }) : null, "Koppelen"] })] }) }) }));
25
+ }
@@ -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;;;;;;;;;;;IA4LG,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;AAED,+EAA+E;AAC/E,wBAAgB,cAAc,CAAC,CAAC,EAAE,SAAS,OAAO,EAAE,EAAE,CAAC,EAAE,SAAS,OAAO,EAAE,GAAG,OAAO,CAEpF"}
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;;;;;;;;;;;IAoMG,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;AAED,+EAA+E;AAC/E,wBAAgB,cAAc,CAAC,CAAC,EAAE,SAAS,OAAO,EAAE,EAAE,CAAC,EAAE,SAAS,OAAO,EAAE,GAAG,OAAO,CAEpF"}
@@ -164,6 +164,10 @@ export function usePickQueue(args) {
164
164
  .channel(`pick-queue-${stationId ?? "all"}`)
165
165
  .on("postgres_changes", queueFilter, invalidate)
166
166
  .on("postgres_changes", lockFilter, invalidate)
167
+ // 1.0.59: alleen een seintje per station; de gegevens komen via functies met sleutel.
168
+ .on("postgres_changes", stationId
169
+ ? { event: "UPDATE", schema: "public", table: "pick_station_signals", filter: `station_id=eq.${stationId}` }
170
+ : { event: "UPDATE", schema: "public", table: "pick_station_signals" }, invalidate)
167
171
  .subscribe((status) => {
168
172
  setRealtimeOk(status === "SUBSCRIBED");
169
173
  });
@@ -31,5 +31,6 @@ export * from "./lib/pick145.js";
31
31
  export * from "./lib/pick150.js";
32
32
  export * from "./lib/pick152.js";
33
33
  export * from "./lib/pick156.js";
34
+ export * from "./lib/pick159.js";
34
35
  export { DocumentChoiceMelding, useDocumentChoice } from "./components/pick/DocumentChoiceMelding.js";
35
36
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGvD,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAErE,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAC9F,OAAO,EAAE,gCAAgC,EAAE,MAAM,wDAAwD,CAAC;AAC1G,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAE9E,eAAO,MAAM,kBAAkB,EAAE,UAYhC,CAAC;AAEF,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACzF,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGvD,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAErE,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAC9F,OAAO,EAAE,gCAAgC,EAAE,MAAM,wDAAwD,CAAC;AAC1G,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAE9E,eAAO,MAAM,kBAAkB,EAAE,UAYhC,CAAC;AAEF,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACzF,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC"}
package/dist-lib/index.js CHANGED
@@ -56,4 +56,5 @@ export * from "./lib/pick145.js";
56
56
  export * from "./lib/pick150.js";
57
57
  export * from "./lib/pick152.js";
58
58
  export * from "./lib/pick156.js";
59
+ export * from "./lib/pick159.js";
59
60
  export { DocumentChoiceMelding, useDocumentChoice } from "./components/pick/DocumentChoiceMelding.js";