@flowselections/layout-maker 1.59.2 → 1.62.1

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 (58) hide show
  1. package/dist-lib/components/LivePrintstatusRegel.d.ts.map +1 -1
  2. package/dist-lib/components/LivePrintstatusRegel.js +29 -29
  3. package/dist-lib/components/PrintInstallatiesBlok.d.ts +3 -0
  4. package/dist-lib/components/PrintInstallatiesBlok.d.ts.map +1 -0
  5. package/dist-lib/components/PrintInstallatiesBlok.js +29 -0
  6. package/dist-lib/components/PrintQueuePage.d.ts.map +1 -1
  7. package/dist-lib/components/PrintQueuePage.js +27 -8
  8. package/dist-lib/components/PrintStatusBanner.d.ts.map +1 -1
  9. package/dist-lib/components/PrintStatusBanner.js +3 -1
  10. package/dist-lib/components/PrintenInstellenWizard.d.ts.map +1 -1
  11. package/dist-lib/components/PrintenInstellenWizard.js +14 -1
  12. package/dist-lib/components/PrintplekDetailPage.d.ts.map +1 -1
  13. package/dist-lib/components/PrintplekDetailPage.js +18 -5
  14. package/dist-lib/components/WerkplekOmzettingStap.d.ts.map +1 -1
  15. package/dist-lib/components/WerkplekOmzettingStap.js +2 -1
  16. package/dist-lib/components/WerkplekkenTab.d.ts.map +1 -1
  17. package/dist-lib/components/WerkplekkenTab.js +27 -3
  18. package/dist-lib/index.d.ts +2 -0
  19. package/dist-lib/index.d.ts.map +1 -1
  20. package/dist-lib/index.js +5 -3
  21. package/dist-lib/integrations/supabase/types.d.ts +441 -0
  22. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  23. package/dist-lib/lib/computerKoppeling.d.ts +47 -0
  24. package/dist-lib/lib/computerKoppeling.d.ts.map +1 -0
  25. package/dist-lib/lib/computerKoppeling.js +48 -0
  26. package/dist-lib/lib/etiketControle.d.ts +8 -0
  27. package/dist-lib/lib/etiketControle.d.ts.map +1 -1
  28. package/dist-lib/lib/etiketControle.js +7 -2
  29. package/dist-lib/lib/foutTekst.d.ts +6 -0
  30. package/dist-lib/lib/foutTekst.d.ts.map +1 -1
  31. package/dist-lib/lib/foutTekst.js +46 -16
  32. package/dist-lib/lib/layoutVerwijzingen.js +1 -1
  33. package/dist-lib/lib/printApi.d.ts +1 -1
  34. package/dist-lib/lib/printApi.d.ts.map +1 -1
  35. package/dist-lib/lib/printApi.js +5 -4
  36. package/dist-lib/lib/printQueue.server.d.ts.map +1 -1
  37. package/dist-lib/lib/printQueue.server.js +16 -2
  38. package/dist-lib/lib/printService.functions.d.ts +129 -0
  39. package/dist-lib/lib/printService.functions.d.ts.map +1 -1
  40. package/dist-lib/lib/printService.functions.js +113 -2
  41. package/dist-lib/lib/printnodeStatus.d.ts +1 -0
  42. package/dist-lib/lib/printnodeStatus.d.ts.map +1 -1
  43. package/dist-lib/lib/printnodeStatus.js +4 -2
  44. package/dist-lib/lib/printnodeWebhook.d.ts +12 -0
  45. package/dist-lib/lib/printnodeWebhook.d.ts.map +1 -1
  46. package/dist-lib/lib/printnodeWebhook.js +27 -1
  47. package/dist-lib/lib/printplekken.d.ts +3 -1
  48. package/dist-lib/lib/printplekken.d.ts.map +1 -1
  49. package/dist-lib/lib/printplekken.js +6 -3
  50. package/dist-lib/lib/queueTick.d.ts.map +1 -1
  51. package/dist-lib/lib/queueTick.js +9 -0
  52. package/dist-lib/lib/runnerRegistry.server.d.ts +5 -0
  53. package/dist-lib/lib/runnerRegistry.server.d.ts.map +1 -1
  54. package/dist-lib/lib/runnerRegistry.server.js +22 -1
  55. package/dist-lib/lib/shellPoort.d.ts +21 -0
  56. package/dist-lib/lib/shellPoort.d.ts.map +1 -0
  57. package/dist-lib/lib/shellPoort.js +43 -0
  58. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"LivePrintstatusRegel.d.ts","sourceRoot":"","sources":["../../src/components/LivePrintstatusRegel.tsx"],"names":[],"mappings":"AAWA,wBAAgB,oBAAoB,gCAyEnC"}
1
+ {"version":3,"file":"LivePrintstatusRegel.d.ts","sourceRoot":"","sources":["../../src/components/LivePrintstatusRegel.tsx"],"names":[],"mappings":"AAeA,wBAAgB,oBAAoB,gCAiFnC"}
@@ -1,13 +1,15 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  // ============================================================================
3
- // src/components/LivePrintstatusRegel.tsx — één regel "Live printstatus: aan /
4
- // uit" met de knop "Opnieuw koppelen" (alleen voor herstel).
3
+ // src/components/LivePrintstatusRegel.tsx — één eenvoudige regel over de live
4
+ // printstatus. Cijfers, adres en meldingen staan onder "Details voor beheer".
5
5
  // ============================================================================
6
6
  import { useQuery, useQueryClient } from "@tanstack/react-query";
7
7
  import { useServerFn } from "@tanstack/react-start";
8
8
  import { useState } from "react";
9
- import { Badge, Button, toast } from "@flowselections/core";
9
+ import { Button, toast } from "@flowselections/core";
10
10
  import { webhookOpnieuwKoppelen, webhookStatus } from "../lib/printService.functions.js";
11
+ import { PrintInstallatiesLijst, PrintStilstandMelding } from "./PrintInstallatiesBlok.js";
12
+ const tijd = (iso) => new Date(iso).toLocaleTimeString("nl-NL", { hour: "2-digit", minute: "2-digit" });
11
13
  export function LivePrintstatusRegel() {
12
14
  const haal = useServerFn(webhookStatus);
13
15
  const koppel = useServerFn(webhookOpnieuwKoppelen);
@@ -17,31 +19,29 @@ export function LivePrintstatusRegel() {
17
19
  const s = data && data.ok ? data : null;
18
20
  const weergave = s?.weergave ?? "uit";
19
21
  const aan = weergave === "aan";
20
- const pnTelling = s && (s.pnGeslaagd != null || s.pnMislukt != null || s.pnOntvangen != null)
21
- ? `PrintNode: ${s.pnOntvangen ?? "?"} ontvangen, ${s.pnGeslaagd ?? "?"} geslaagd, ${s.pnMislukt ?? "?"} mislukt, ${s.pnWeggegooid ?? "?"} weggegooid${s.pnUrl ? ` naar ${s.pnUrl}` : ""}`
22
- : null;
23
22
  const meldingen = Array.isArray(s?.meldingen) ? s.meldingen : [];
24
23
  const adresAfwijkend = !!(s?.pnUrl && s?.url && s.pnUrl !== s.url);
25
- return (_jsxs("div", { className: "mb-4 flex flex-wrap items-center gap-3 rounded-md border border-border bg-card px-4 py-3 text-sm", children: [_jsx("span", { className: "font-medium text-foreground", children: "Live printstatus:" }), _jsx(Badge, { variant: aan ? "default" : weergave === "onbekend" ? "outline" : "secondary", children: weergave }), _jsx("span", { className: "text-muted-foreground", children: s?.nietBereikbaar
26
- ? "webhook-adres niet bereikbaar in deze Shell — werk de Shell bij (layout-maker 1.54.0 of nieuwer installeren en de Shell opnieuw genereren)"
27
- : weergave === "onbekend"
28
- ? "wacht op de eerste melding van PrintNode"
29
- : aan
30
- ? s?.laatstOntvangenOp
31
- ? `laatste melding ${new Date(s.laatstOntvangenOp).toLocaleString("nl-NL")}`
32
- : "gekoppeld, wacht op de eerste melding van PrintNode"
33
- : s?.fout ?? "nog niet gekoppeld — de status wordt elke paar minuten opgevraagd" }), pnTelling && _jsxs("span", { className: "text-muted-foreground", children: ["\u00B7 ", pnTelling] }), adresAfwijkend && (_jsx("span", { className: "text-destructive", children: "\u00B7 PrintNode stuurt naar een ander adres dan dit Shell-adres" })), s?.melding && _jsxs("span", { className: "text-muted-foreground", children: ["\u00B7 ", s.melding] }), _jsx(Button, { size: "sm", variant: "outline", className: "ml-auto", disabled: bezig, onClick: async () => {
34
- setBezig(true);
35
- try {
36
- const r = await koppel();
37
- if (r.ok)
38
- toast.success("Live printstatus opnieuw gekoppeld");
39
- else
40
- toast.error(r.reden);
41
- }
42
- finally {
43
- setBezig(false);
44
- qc.invalidateQueries({ queryKey: ["printnode-webhook-status"] });
45
- }
46
- }, children: bezig ? "Bezig…" : "Opnieuw koppelen" }), meldingen.length > 0 && (_jsxs("details", { className: "w-full text-xs text-muted-foreground", children: [_jsxs("summary", { className: "cursor-pointer", children: ["Laatste meldingen (", meldingen.length, ")"] }), _jsx("ul", { className: "mt-2 space-y-1", children: meldingen.map((m, i) => (_jsxs("li", { children: [new Date(m.ontvangen_op).toLocaleString("nl-NL"), " \u00B7 antwoord ", m.http_status, " \u00B7", " ", (Array.isArray(m.soorten) && m.soorten.length ? m.soorten : ["leeg"]).join(", "), Array.isArray(m.printnode_ids) && m.printnode_ids.length ? ` · ${m.printnode_ids.join(", ")}` : "", ` · ${m.gematcht} bijgewerkt`, Array.isArray(m.niet_gematcht) && m.niet_gematcht.length ? ` · onbekend: ${m.niet_gematcht.join(", ")}` : ""] }, i))) })] }))] }));
24
+ const hoofdtekst = s?.nietBereikbaar
25
+ ? "De live printstatus werkt nu niet; de status wordt elke paar minuten opgehaald."
26
+ : aan
27
+ ? s?.laatstOntvangenOp
28
+ ? `Printers werken ✓ — laatste bevestiging ${tijd(s.laatstOntvangenOp)}`
29
+ : "Printers werken ✓ — wacht op de eerste bevestiging"
30
+ : weergave === "onbekend"
31
+ ? "Wacht op de eerste bevestiging van de printers."
32
+ : "De status wordt elke paar minuten opgehaald.";
33
+ return (_jsxs(_Fragment, { children: [_jsx(PrintStilstandMelding, {}), _jsxs("div", { className: "mb-4 flex flex-wrap items-center gap-3 rounded-md border border-border bg-card px-4 py-3 text-sm", children: [_jsx("span", { className: aan ? "font-medium text-foreground" : "text-muted-foreground", children: hoofdtekst }), _jsx(Button, { size: "sm", variant: "outline", className: "ml-auto", disabled: bezig, onClick: async () => {
34
+ setBezig(true);
35
+ try {
36
+ const r = await koppel();
37
+ if (r.ok)
38
+ toast.success("Live printstatus opnieuw gekoppeld");
39
+ else
40
+ toast.error("Opnieuw koppelen is niet gelukt. Probeer het opnieuw; blijft het, meld het bij kantoor.");
41
+ }
42
+ finally {
43
+ setBezig(false);
44
+ qc.invalidateQueries({ queryKey: ["printnode-webhook-status"] });
45
+ }
46
+ }, children: bezig ? "Bezig…" : "Opnieuw koppelen" }), _jsxs("details", { className: "w-full text-xs text-muted-foreground", children: [_jsx("summary", { className: "cursor-pointer", children: "Details voor beheer" }), _jsxs("div", { className: "mt-2 space-y-1", children: [_jsxs("p", { children: ["Live status: ", weergave, s?.fout ? ` · ${s.fout}` : ""] }), s && (s.pnGeslaagd != null || s.pnMislukt != null || s.pnOntvangen != null) ? (_jsxs("p", { children: ["PrintNode-tellers (sinds aanmaken webhook): ", s.pnOntvangen ?? "?", " meldingen ontvangen,", " ", s.pnGeslaagd ?? "?", " aanroepen geslaagd, ", s.pnMislukt ?? "?", " aanroepen mislukt,", " ", s.pnWeggegooid ?? "?", " meldingen weggegooid. Meldingen en aanroepen worden apart geteld (\u00E9\u00E9n aanroep kan meerdere meldingen bevatten, een mislukte aanroep wordt \u00E9\u00E9n keer herhaald)."] })) : null, s?.pnUrl ? _jsxs("p", { children: ["Adres: ", s.pnUrl] }) : null, adresAfwijkend ? _jsx("p", { className: "text-destructive", children: "PrintNode stuurt naar een ander adres dan dit Shell-adres." }) : null, s?.melding ? _jsx("p", { children: s.melding }) : null, meldingen.length > 0 ? (_jsxs(_Fragment, { children: [_jsx("p", { className: "pt-1 font-medium", children: "Laatste meldingen" }), _jsx("ul", { className: "space-y-1", children: meldingen.map((m, i) => (_jsxs("li", { children: [new Date(m.ontvangen_op).toLocaleString("nl-NL"), " \u00B7 ", m.weergave, Array.isArray(m.printnode_ids) && m.printnode_ids.length ? ` · ${m.printnode_ids.join(", ")}` : "", Array.isArray(m.niet_gematcht) && m.niet_gematcht.length ? ` · onbekend: ${m.niet_gematcht.join(", ")}` : ""] }, i))) })] })) : null, _jsx(PrintInstallatiesLijst, {})] })] })] })] }));
47
47
  }
@@ -0,0 +1,3 @@
1
+ export declare function PrintStilstandMelding(): import("react").JSX.Element | null;
2
+ export declare function PrintInstallatiesLijst(): import("react").JSX.Element | null;
3
+ //# sourceMappingURL=PrintInstallatiesBlok.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PrintInstallatiesBlok.d.ts","sourceRoot":"","sources":["../../src/components/PrintInstallatiesBlok.tsx"],"names":[],"mappings":"AAYA,wBAAgB,qBAAqB,uCAepC;AAED,wBAAgB,sBAAsB,uCA6BrC"}
@@ -0,0 +1,29 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // ============================================================================
3
+ // src/components/PrintInstallatiesBlok.tsx — stilstandmelding (voor iedereen)
4
+ // en de lijst met printinstallaties (alleen onder "Details voor beheer").
5
+ // ============================================================================
6
+ import { useQuery } from "@tanstack/react-query";
7
+ import { useServerFn } from "@tanstack/react-start";
8
+ import { printInstallaties } from "../lib/printService.functions.js";
9
+ const tijd = (iso) => new Date(iso).toLocaleTimeString("nl-NL", { hour: "2-digit", minute: "2-digit" });
10
+ export function PrintStilstandMelding() {
11
+ const haal = useServerFn(printInstallaties);
12
+ const { data } = useQuery({ queryKey: ["print-installaties"], queryFn: () => haal(), refetchInterval: 60000 });
13
+ if (!data?.ok || !data.stil)
14
+ return null;
15
+ const tekst = data.reden === "geen_shell_adres"
16
+ ? "Printen staat stil: er is geen Shell-adres ingesteld. Meld dit bij kantoor."
17
+ : data.reden === "shell_niet_aangemeld"
18
+ ? "Printen staat stil: de Shell heeft zich nog niet gemeld. Meld dit bij kantoor."
19
+ : `Printen staat stil: de Shell reageert niet sinds ${data.sinds ? tijd(data.sinds) : "onbekend"}`;
20
+ return (_jsx("div", { className: "mb-4 rounded-md border border-destructive bg-destructive/10 px-4 py-3 text-sm font-medium text-destructive", children: tekst }));
21
+ }
22
+ export function PrintInstallatiesLijst() {
23
+ const haal = useServerFn(printInstallaties);
24
+ const { data } = useQuery({ queryKey: ["print-installaties"], queryFn: () => haal(), refetchInterval: 60000 });
25
+ const lijst = data?.ok && Array.isArray(data.installaties) ? data.installaties : [];
26
+ if (!data?.ok || !data.beheer)
27
+ return null;
28
+ return (_jsxs("div", { className: "pt-2", children: [_jsx("p", { className: "font-medium", children: "Printinstallaties" }), _jsxs("table", { className: "mt-1 w-full text-left", children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { className: "pr-2", children: "Adres" }), _jsx("th", { className: "pr-2", children: "Versie" }), _jsx("th", { className: "pr-2", children: "Laatst actief" }), _jsx("th", { className: "pr-2", children: "Rol" }), _jsx("th", { children: "Opdrachten 7 dagen" })] }) }), _jsx("tbody", { children: lijst.map((i, n) => (_jsxs("tr", { children: [_jsx("td", { className: "pr-2", children: i.adres }), _jsx("td", { className: "pr-2", children: i.versie ?? "niet gemeld" }), _jsx("td", { className: "pr-2", children: i.laatstActief ? new Date(i.laatstActief).toLocaleString("nl-NL") : "—" }), _jsx("td", { className: "pr-2", children: i.isShell ? "Shell (print)" : i.actief ? "overgeslagen: niet de Shell" : "uit" }), _jsx("td", { children: i.opdrachten7d })] }, n))) })] })] }));
29
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"PrintQueuePage.d.ts","sourceRoot":"","sources":["../../src/components/PrintQueuePage.tsx"],"names":[],"mappings":"AAoFA,wBAAgB,cAAc,gCA4Z7B"}
1
+ {"version":3,"file":"PrintQueuePage.d.ts","sourceRoot":"","sources":["../../src/components/PrintQueuePage.tsx"],"names":[],"mappings":"AAwFA,wBAAgB,cAAc,gCA6a7B"}
@@ -6,11 +6,13 @@ import { RotateCcw, Search, XCircle } from "lucide-react";
6
6
  import { bijgewerktTekst, useAutoRefresh } from "../lib/useAutoRefresh.js";
7
7
  import { PrintStatusBanner } from "./PrintStatusBanner.js";
8
8
  import { useLayouts, usePrinters, usePrintJobs, usePrintPlekNamen, } from "../lib/useDocumentData.js";
9
- import { annuleerPrintOpdrachten, opnieuwPrinten, printTellingen } from "../lib/printService.functions.js";
9
+ import { annuleerPrintOpdrachten, opnieuwPrinten } from "../lib/printService.functions.js";
10
10
  import { opnieuwActie, printnodeStatusLabel, SCANBARE_SOORTEN } from "../lib/printnodeStatus.js";
11
11
  import { supabase } from "../lib/supabaseClient.js";
12
12
  import { vraagWachtrijRonde } from "../lib/queueTickClient.js";
13
13
  import { documentTypeLabel } from "../lib/documentTypes.js";
14
+ import { gebruikersTekst } from "../lib/foutTekst.js";
15
+ const isTestprintJob = (j) => j.payload?.["is_testprint"] === true;
14
16
  import { jobPlekLabel } from "../lib/printQueue.js";
15
17
  const STATUS_VARIANT = {
16
18
  wachtend: "outline",
@@ -22,7 +24,7 @@ const STATUS_VARIANT = {
22
24
  /** Leesbare naam van de bron waaruit het document is opgemaakt. */
23
25
  const BRON_LABEL = {
24
26
  extern_pdf: "aangeleverde PDF",
25
- floriday_1op1: "Floriday-document (1-op-1)",
27
+ floriday_1op1: "Origineel Floriday-document",
26
28
  eigen_layout: "eigen ontwerp",
27
29
  render_html: "meegestuurde opmaak",
28
30
  klantlayout: "klantlayout",
@@ -82,7 +84,18 @@ export function PrintQueuePage() {
82
84
  const [tellingFout, setTellingFout] = useState(null);
83
85
  const herlaadTellingen = async () => {
84
86
  try {
85
- const t = await printTellingen();
87
+ // Alleen aantallen tellen in de database (geen rijen ophalen), parallel.
88
+ const statussen = ["wachtend", "bezig", "voltooid", "mislukt", "geannuleerd"];
89
+ const t = {};
90
+ await Promise.all(statussen.map(async (st) => {
91
+ const { count, error } = await supabase
92
+ .from("print_jobs")
93
+ .select("id", { count: "exact", head: true })
94
+ .eq("status", st);
95
+ if (error)
96
+ throw new Error(`Tellen is niet gelukt (${st})`);
97
+ t[st] = count ?? 0;
98
+ }));
86
99
  if (t && typeof t === "object") {
87
100
  setTellingen(t);
88
101
  setTellingFout(null);
@@ -92,6 +105,11 @@ export function PrintQueuePage() {
92
105
  setTellingFout(e instanceof Error ? e.message : "Tellen is niet gelukt");
93
106
  }
94
107
  };
108
+ // Tellingen direct bij openen (niet wachten op de eerste verversronde).
109
+ useEffect(() => {
110
+ void herlaadTellingen();
111
+ // eslint-disable-next-line react-hooks/exhaustive-deps
112
+ }, []);
95
113
  const printerById = useMemo(() => new Map(printers.map((p) => [p.id, p])), [printers]);
96
114
  // "Gescand": goedgekeurde controlescan van de kar (match op cart_id). Alleen lezen.
97
115
  const [gescand, setGescand] = useState(new Map());
@@ -185,11 +203,12 @@ export function PrintQueuePage() {
185
203
  setAnnuleertAlles(false);
186
204
  await reload(true);
187
205
  }
188
- }, children: [_jsx(XCircle, { className: "mr-2 h-4 w-4" }), annuleertAlles ? "Bezig…" : `Alles annuleren (${openJobs.length})`] })] })] }), _jsx(PrintStatusBanner, { fout: tickFout }), _jsx("div", { className: "grid gap-4 md:grid-cols-4", children: ["wachtend", "bezig", "voltooid", "mislukt"].map((s) => (_jsx(Card, { children: _jsxs(CardHeader, { className: "pb-2", children: [_jsx(CardDescription, { className: "capitalize", children: s }), _jsx(CardTitle, { className: "text-2xl", title: tellingFout ?? undefined, children: tellingFout && !tellingen ? "—" : tellingen ? (tellingen[s] ?? 0) : "laden…" }), tellingFout ? _jsx("p", { className: "text-destructive text-xs", children: tellingFout }) : null] }) }, s))) }), _jsxs(Card, { children: [_jsxs(CardHeader, { className: "pb-3", children: [_jsx(CardTitle, { className: "text-base", children: "Opdrachten" }), _jsx(CardDescription, { children: loading ? "Laden…" : `${gefilterd.length} opdrachten` })] }), _jsxs(CardContent, { className: "space-y-4", children: [_jsxs("div", { className: "grid gap-3 md:grid-cols-4", children: [_jsxs("div", { className: "relative md:col-span-2", children: [_jsx(Search, { className: "absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground" }), _jsx(Input, { className: "pl-9", placeholder: "Zoek op document of gebruiker", value: zoek, onChange: (e) => setZoek(e.target.value) })] }), _jsxs(Select, { value: status, onValueChange: setStatus, children: [_jsx(SelectTrigger, { children: _jsx(SelectValue, {}) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "alle", children: "Alle statussen" }), ["wachtend", "bezig", "voltooid", "mislukt", "geannuleerd"].map((s) => (_jsx(SelectItem, { value: s, children: s }, s)))] })] }), _jsxs(Select, { value: plekFilter, onValueChange: setPlekFilter, children: [_jsx(SelectTrigger, { children: _jsx(SelectValue, {}) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "alle", children: "Alle printplekken" }), plekOpties.map((p) => (_jsx(SelectItem, { value: p, children: p }, p))), _jsx(SelectItem, { value: "\u2014", children: "Zonder printplek" })] })] })] }), _jsxs(Table, { children: [_jsx(TableHeader, { children: _jsxs(TableRow, { children: [_jsx(TableHead, { children: "Document" }), _jsx(TableHead, { children: "Printplek" }), _jsx(TableHead, { children: "Layout (aangeleverd \u2192 gebruikt)" }), _jsx(TableHead, { children: "Printer" }), _jsx(TableHead, { children: "Status" }), _jsx(TableHead, { children: "Tijdstip" }), _jsx(TableHead, { className: "text-right", children: "Acties" })] }) }), _jsxs(TableBody, { children: [gefilterd.length === 0 && (_jsx(TableRow, { children: _jsx(TableCell, { colSpan: 7, className: "py-10 text-center text-sm text-muted-foreground", children: "Geen printopdrachten." }) })), gefilterd.map((j) => (_jsxs(TableRow, { children: [_jsxs(TableCell, { children: [_jsx("span", { className: "font-medium", children: j.documentnaam ?? documentTypeLabel(j.documenttype) }), j.is_herprint && (_jsx(Badge, { variant: "outline", className: "ml-2", children: "herprint" })), !heeftOrderKenmerk(j) && (_jsx(Badge, { variant: "outline", className: "ml-2 text-amber-600", children: "geen orderkenmerk" })), j.foutmelding && (_jsx("span", { className: "block text-xs text-destructive", children: j.foutmelding }))] }), _jsx(TableCell, { className: "text-sm text-muted-foreground", children: plekPerJob.get(j.id) || "—" }), _jsxs(TableCell, { className: "text-sm text-muted-foreground", children: [_jsx("span", { title: "Aangeleverd door de module", children: j.layout_id ? layoutNaam.get(j.layout_id) ?? "Onbekende layout" : "geen" }), _jsxs("span", { className: "block text-xs", children: ["\u2192", " ", _jsx("span", { title: "Layout die de wachtrij gebruikte", children: j.gebruikte_layout_id
189
- ? layoutNaam.get(j.gebruikte_layout_id) ?? "Onbekende layout"
190
- : j.gebruikte_bron
191
- ? "geen layout"
192
- : "nog niet verwerkt" }), j.gebruikte_bron && (_jsx(Badge, { variant: "outline", className: "ml-2", children: BRON_LABEL[j.gebruikte_bron] ?? j.gebruikte_bron }))] })] }), _jsx(TableCell, { className: "text-sm text-muted-foreground", children: j.printer_id ? printerNaam.get(j.printer_id) ?? "—" : "—" }), _jsxs(TableCell, { children: [_jsx(Badge, { variant: STATUS_VARIANT[j.status] ?? "outline", children: printnodeStatusLabel(j) }), SCANBARE_SOORTEN.has(j.documenttype) && !j.is_herprint && j.status === "voltooid" &&
206
+ }, children: [_jsx(XCircle, { className: "mr-2 h-4 w-4" }), annuleertAlles ? "Bezig…" : `Alles annuleren (${openJobs.length})`] })] })] }), _jsx(PrintStatusBanner, { fout: tickFout }), _jsx("div", { className: "grid gap-4 md:grid-cols-4", children: ["wachtend", "bezig", "voltooid", "mislukt"].map((s) => (_jsx(Card, { children: _jsxs(CardHeader, { className: "pb-2", children: [_jsx(CardDescription, { className: "capitalize", children: s }), _jsx(CardTitle, { className: "text-2xl", title: tellingFout ?? undefined, children: tellingFout && !tellingen ? "—" : tellingen ? (tellingen[s] ?? 0) : "laden…" }), tellingFout ? _jsx("p", { className: "text-destructive text-xs", children: tellingFout }) : null] }) }, s))) }), _jsxs(Card, { children: [_jsxs(CardHeader, { className: "pb-3", children: [_jsx(CardTitle, { className: "text-base", children: "Opdrachten" }), _jsx(CardDescription, { children: loading ? "Laden…" : `${gefilterd.length} opdrachten` })] }), _jsxs(CardContent, { className: "space-y-4", children: [_jsxs("div", { className: "grid gap-3 md:grid-cols-4", children: [_jsxs("div", { className: "relative md:col-span-2", children: [_jsx(Search, { className: "absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground" }), _jsx(Input, { className: "pl-9", placeholder: "Zoek op document of gebruiker", value: zoek, onChange: (e) => setZoek(e.target.value) })] }), _jsxs(Select, { value: status, onValueChange: setStatus, children: [_jsx(SelectTrigger, { children: _jsx(SelectValue, {}) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "alle", children: "Alle statussen" }), ["wachtend", "bezig", "voltooid", "mislukt", "geannuleerd"].map((s) => (_jsx(SelectItem, { value: s, children: s }, s)))] })] }), _jsxs(Select, { value: plekFilter, onValueChange: setPlekFilter, children: [_jsx(SelectTrigger, { children: _jsx(SelectValue, {}) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "alle", children: "Alle printplekken" }), plekOpties.map((p) => (_jsx(SelectItem, { value: p, children: p }, p))), _jsx(SelectItem, { value: "\u2014", children: "Zonder printplek" })] })] })] }), _jsxs(Table, { children: [_jsx(TableHeader, { children: _jsxs(TableRow, { children: [_jsx(TableHead, { children: "Document" }), _jsx(TableHead, { children: "Printplek" }), _jsx(TableHead, { children: "Ontwerp" }), _jsx(TableHead, { children: "Printer" }), _jsx(TableHead, { children: "Status" }), _jsx(TableHead, { children: "Tijdstip" }), _jsx(TableHead, { className: "text-right", children: "Acties" })] }) }), _jsxs(TableBody, { children: [gefilterd.length === 0 && (_jsx(TableRow, { children: _jsx(TableCell, { colSpan: 7, className: "py-10 text-center text-sm text-muted-foreground", children: "Geen printopdrachten." }) })), gefilterd.map((j) => (_jsxs(TableRow, { children: [_jsxs(TableCell, { children: [_jsx("span", { className: "font-medium", children: j.documentnaam ?? documentTypeLabel(j.documenttype) }), j.is_herprint && (_jsx(Badge, { variant: "outline", className: "ml-2", children: "herprint" })), !heeftOrderKenmerk(j) && !isTestprintJob(j) && (_jsx(Badge, { variant: "outline", className: "ml-2 text-amber-600", children: "geen orderkenmerk" })), j.foutmelding && (_jsx("span", { className: "block text-xs text-destructive", title: `Details voor beheer: ${j.foutmelding}`, children: gebruikersTekst(j.foutmelding, documentTypeLabel) ??
207
+ String(j.foutmelding).replace(/^[A-Z_]+:\s*/, "") }))] }), _jsx(TableCell, { className: "text-sm text-muted-foreground", children: plekPerJob.get(j.id) || "—" }), _jsx(TableCell, { className: "text-sm text-muted-foreground", children: _jsxs("span", { className: "block", title: "Gebruikt ontwerp", children: [_jsx("span", { children: j.gebruikte_layout_id
208
+ ? layoutNaam.get(j.gebruikte_layout_id) ?? "Onbekend ontwerp"
209
+ : j.gebruikte_bron
210
+ ? "geen eigen ontwerp"
211
+ : "nog niet verwerkt" }), j.gebruikte_bron && (_jsx(Badge, { variant: "outline", className: "ml-2", children: BRON_LABEL[j.gebruikte_bron] ?? j.gebruikte_bron }))] }) }), _jsx(TableCell, { className: "text-sm text-muted-foreground", children: j.printer_id ? printerNaam.get(j.printer_id) ?? "—" : "—" }), _jsxs(TableCell, { children: [_jsx(Badge, { variant: STATUS_VARIANT[j.status] ?? "outline", children: printnodeStatusLabel(j) }), SCANBARE_SOORTEN.has(j.documenttype) && !j.is_herprint && j.status === "voltooid" &&
193
212
  (() => {
194
213
  const scan = gescand.get(String(j.payload?.["cart_id"] ?? ""));
195
214
  if (scan == null)
@@ -1 +1 @@
1
- {"version":3,"file":"PrintStatusBanner.d.ts","sourceRoot":"","sources":["../../src/components/PrintStatusBanner.tsx"],"names":[],"mappings":"AAQA,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,kBAAuB,EACvB,gBAAuB,GACxB,EAAE;IACD,qDAAqD;IACrD,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,8CAA8C;IAC9C,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,sCA2CA"}
1
+ {"version":3,"file":"PrintStatusBanner.d.ts","sourceRoot":"","sources":["../../src/components/PrintStatusBanner.tsx"],"names":[],"mappings":"AAQA,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,kBAAuB,EACvB,gBAAuB,GACxB,EAAE;IACD,qDAAqD;IACrD,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,8CAA8C;IAC9C,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,sCAoCA"}
@@ -9,7 +9,9 @@ export function PrintStatusBanner({ fout, offlineWerkplekken = [], toonWerkplekL
9
9
  const sleutelProbleem = !!fout && /toegangsbewijs|401|unauthorized|token|sleutel/i.test(fout);
10
10
  if (!fout && offlineWerkplekken.length === 0)
11
11
  return null;
12
- return (_jsxs("div", { className: "border-destructive/30 bg-destructive/5 text-destructive space-y-1 rounded-xl border p-4 text-sm", children: [_jsxs("p", { className: "flex items-center gap-2 font-medium", children: [_jsx(AlertTriangle, { className: "h-4 w-4" }), " Er kan nu niet worden afgedrukt"] }), fout && (_jsxs("p", { children: [fout, " ", sleutelProbleem && (_jsxs(_Fragment, { children: ["Controleer de sleutel van de printdienst bij", " ", _jsx(Link, { to: "/instellingen", className: "underline", children: "Instellingen" }), "."] }))] })), offlineWerkplekken.length > 0 && (_jsxs("p", { children: [offlineWerkplekken.length === 1
12
+ return (_jsxs("div", { className: "border-destructive/30 bg-destructive/5 text-destructive space-y-1 rounded-xl border p-4 text-sm", children: [_jsxs("p", { className: "flex items-center gap-2 font-medium", children: [_jsx(AlertTriangle, { className: "h-4 w-4" }), " Er kan nu niet worden afgedrukt"] }), fout && (_jsx("p", { children: sleutelProbleem
13
+ ? "Er kan nu niet worden geprint: de koppeling met de printdienst is verlopen. Vraag de beheerder dit te herstellen."
14
+ : fout })), offlineWerkplekken.length > 0 && (_jsxs("p", { children: [offlineWerkplekken.length === 1
13
15
  ? `Werkplek ${offlineWerkplekken[0]} staat uit`
14
16
  : `${offlineWerkplekken.length} werkplekken staan uit (${offlineWerkplekken.join(", ")})`, ". Opdrachten blijven wachten tot het printprogramma op die computer draait.", toonWerkplekLink && (_jsxs(_Fragment, { children: [" ", _jsx(Link, { to: "/layouts-printers/printplekken", className: "underline", children: "Naar printplekken" })] }))] }))] }));
15
17
  }
@@ -1 +1 @@
1
- {"version":3,"file":"PrintenInstellenWizard.d.ts","sourceRoot":"","sources":["../../src/components/PrintenInstellenWizard.tsx"],"names":[],"mappings":"AAsBA,wBAAgB,sBAAsB,CAAC,EACrC,IAAI,EACJ,YAAY,EACZ,OAAO,GACR,EAAE;IACD,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB,+BA0JA"}
1
+ {"version":3,"file":"PrintenInstellenWizard.d.ts","sourceRoot":"","sources":["../../src/components/PrintenInstellenWizard.tsx"],"names":[],"mappings":"AAsBA,wBAAgB,sBAAsB,CAAC,EACrC,IAAI,EACJ,YAAY,EACZ,OAAO,GACR,EAAE;IACD,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB,+BAyKA"}
@@ -68,7 +68,20 @@ export function PrintenInstellenWizard({ open, onOpenChange, onKlaar, }) {
68
68
  setStatus((s) => ({ ...s, [printerId]: `mislukt: ${leesbareFout(e, "versturen mislukt")}` }));
69
69
  }
70
70
  };
71
- return (_jsx(Dialog, { open: open, onOpenChange: onOpenChange, children: _jsxs(DialogContent, { className: "max-h-[85vh] max-w-2xl overflow-y-auto", children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: stap === 0 ? "Printen instellen — voorstel uit huidige instellingen" : `Printen instellen — stap ${stap} van 4` }), _jsx(DialogDescription, { children: "In een paar minuten weet je zeker waar het papier uitkomt." })] }), stap === 0 && voorstel?.length ? (_jsx(WerkplekOmzettingStap, { voorstel: voorstel, printers: printers, beheerder: beheerder, onOverslaan: () => setStap(1), onKlaar: () => { void reloadPrinters(); onKlaar?.(); setNaam(voorstel[0]?.naam ?? naam); setStap(3); } })) : null, stap === 1 ? (_jsxs("div", { className: "space-y-2 text-sm", children: [_jsx("p", { children: "Op deze computers draait het printprogramma:" }), computers.map((c) => (_jsxs("div", { className: "flex items-center gap-2 rounded border p-2", children: [_jsx("span", { className: "font-medium", children: c.naam }), _jsx(Badge, { variant: c.online ? "secondary" : "destructive", children: c.online ? "online" : "offline" }), _jsxs("span", { className: "text-muted-foreground text-xs", children: [c.aantalGevonden, " printers"] })] }, c.id))), !loading && !computers.length ? _jsx("p", { className: "text-muted-foreground", children: "Nog geen computers gevonden. Installeer het printprogramma op de computer met de printers." }) : null, _jsxs(Button, { size: "sm", variant: "outline", onClick: () => { void reload(); void reloadPrinters(); }, children: [loading ? _jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" }) : _jsx(RefreshCw, { className: "mr-2 h-4 w-4" }), " Opnieuw zoeken"] })] })) : null, stap === 2 ? (_jsxs("div", { className: "grid gap-2 text-sm sm:grid-cols-[9rem_1fr]", children: [_jsx("span", { children: "Naam werkplek" }), _jsx(Input, { value: naam, onChange: (e) => setNaam(e.target.value) }), _jsx("span", { children: "A4-printer" }), _jsxs("select", { className: selectKlasse, value: a4 ?? "", onChange: (e) => setA4(e.target.value || null), children: [_jsx("option", { value: "", children: "\u2014 geen \u2014" }), bruikbaar.map((p) => _jsxs("option", { value: p.id, children: [printerTitel(p), p.locatie ? ` · ${p.locatie}` : ""] }, p.id))] }), _jsx("span", { children: "Labelprinter" }), _jsxs("select", { className: selectKlasse, value: label ?? "", onChange: (e) => setLabel(e.target.value || null), children: [_jsx("option", { value: "", children: "\u2014 geen \u2014" }), bruikbaar.map((p) => _jsxs("option", { value: p.id, children: [printerTitel(p), p.locatie ? ` · ${p.locatie}` : ""] }, p.id))] }), labelPrinter ? (_jsx("div", { className: "sm:col-span-2", children: _jsx(GeladenEtiketKeuze, { printer: labelPrinter, onGewijzigd: () => void reloadPrinters() }) })) : null] })) : null, stap === 3 ? (_jsx("div", { className: "space-y-2 text-sm", children: [a4 ? { id: a4, soort: "vrij" } : null, label ? { id: label, soort: "sticker" } : null]
71
+ // Vangnet: ook Escape vanuit een keuzelijst sluit de wizard.
72
+ useEffect(() => {
73
+ if (!open)
74
+ return;
75
+ const toets = (e) => {
76
+ if (e.key === "Escape")
77
+ onOpenChange(false);
78
+ };
79
+ window.addEventListener("keydown", toets);
80
+ return () => window.removeEventListener("keydown", toets);
81
+ }, [open, onOpenChange]);
82
+ return (_jsx(Dialog, { open: open, onOpenChange: onOpenChange, children: _jsxs(DialogContent, { className: "max-h-[85vh] max-w-2xl overflow-y-auto",
83
+ // Escape en klikken naast het venster sluiten zonder op te slaan.
84
+ onEscapeKeyDown: () => onOpenChange(false), onPointerDownOutside: () => onOpenChange(false), children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: stap === 0 ? "Printen instellen — voorstel uit huidige instellingen" : `Printen instellen — stap ${stap} van 4` }), _jsx(DialogDescription, { children: "In een paar minuten weet je zeker waar het papier uitkomt." })] }), stap === 0 && voorstel?.length ? (_jsx(WerkplekOmzettingStap, { voorstel: voorstel, printers: printers, beheerder: beheerder, onOverslaan: () => setStap(1), onKlaar: () => { void reloadPrinters(); onKlaar?.(); setNaam(voorstel[0]?.naam ?? naam); setStap(3); } })) : null, stap === 1 ? (_jsxs("div", { className: "space-y-2 text-sm", children: [_jsx("p", { children: "Op deze computers draait het printprogramma:" }), computers.map((c) => (_jsxs("div", { className: "flex items-center gap-2 rounded border p-2", children: [_jsx("span", { className: "font-medium", children: c.naam }), _jsx(Badge, { variant: c.online ? "secondary" : "destructive", children: c.online ? "online" : "offline" }), _jsxs("span", { className: "text-muted-foreground text-xs", children: [c.aantalGevonden, " printers"] })] }, c.id))), !loading && !computers.length ? _jsx("p", { className: "text-muted-foreground", children: "Nog geen computers gevonden. Installeer het printprogramma op de computer met de printers." }) : null, _jsxs(Button, { size: "sm", variant: "outline", onClick: () => { void reload(); void reloadPrinters(); }, children: [loading ? _jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" }) : _jsx(RefreshCw, { className: "mr-2 h-4 w-4" }), " Opnieuw zoeken"] })] })) : null, stap === 2 ? (_jsxs("div", { className: "grid gap-2 text-sm sm:grid-cols-[9rem_1fr]", children: [_jsx("span", { children: "Naam werkplek" }), _jsx(Input, { value: naam, onChange: (e) => setNaam(e.target.value) }), _jsx("span", { children: "A4-printer" }), _jsxs("select", { className: selectKlasse, value: a4 ?? "", onChange: (e) => setA4(e.target.value || null), children: [_jsx("option", { value: "", children: "\u2014 geen \u2014" }), bruikbaar.map((p) => _jsxs("option", { value: p.id, children: [printerTitel(p), p.locatie ? ` · ${p.locatie}` : ""] }, p.id))] }), _jsx("span", { children: "Labelprinter" }), _jsxs("select", { className: selectKlasse, value: label ?? "", onChange: (e) => setLabel(e.target.value || null), children: [_jsx("option", { value: "", children: "\u2014 geen \u2014" }), bruikbaar.map((p) => _jsxs("option", { value: p.id, children: [printerTitel(p), p.locatie ? ` · ${p.locatie}` : ""] }, p.id))] }), labelPrinter ? (_jsx("div", { className: "sm:col-span-2", children: _jsx(GeladenEtiketKeuze, { printer: labelPrinter, onGewijzigd: () => void reloadPrinters() }) })) : null] })) : null, stap === 3 ? (_jsx("div", { className: "space-y-2 text-sm", children: [a4 ? { id: a4, soort: "vrij" } : null, label ? { id: label, soort: "sticker" } : null]
72
85
  .filter(Boolean)
73
86
  .map((r) => {
74
87
  const p = printers.find((x) => x.id === r.id);
@@ -1 +1 @@
1
- {"version":3,"file":"PrintplekDetailPage.d.ts","sourceRoot":"","sources":["../../src/components/PrintplekDetailPage.tsx"],"names":[],"mappings":"AAkEA,wBAAgB,mBAAmB,gCA0oBlC"}
1
+ {"version":3,"file":"PrintplekDetailPage.d.ts","sourceRoot":"","sources":["../../src/components/PrintplekDetailPage.tsx"],"names":[],"mappings":"AAoEA,wBAAgB,mBAAmB,gCAqqBlC"}
@@ -22,6 +22,8 @@ import { leesbareFout } from "../lib/foutTekst.js";
22
22
  import { supabase } from "../lib/supabaseClient.js";
23
23
  import { useRouteringOverzicht } from "../lib/printRoutering.js";
24
24
  import { routeringMeldingTekst } from "../lib/waaromPrinter.js";
25
+ import { STATUS_ONBEKEND_TEKST, toestandVanComputer, zelfdeNaamTekst } from "../lib/computerKoppeling.js";
26
+ import { koppelComputerOpId } from "../lib/printService.functions.js";
25
27
  const BRON_LABEL = {
26
28
  werkplek_formaat: "Werkplek (papierformaat)",
27
29
  werkplek_afwijking: "Werkplek (afwijking)",
@@ -56,8 +58,10 @@ export function PrintplekDetailPage() {
56
58
  void supabase.removeChannel(kanaal);
57
59
  };
58
60
  }, []);
59
- const computerAan = (naam) => {
60
- const k = computers.find((x) => x.naam === naam);
61
+ const computerAan = (naam, pnId) => {
62
+ const k = pnId != null && pnId !== ""
63
+ ? computers.find((x) => String(x.id) === String(pnId))
64
+ : computers.find((x) => x.naam === naam);
61
65
  if (!k)
62
66
  return false;
63
67
  const live = statusPerId.get(String(k.id));
@@ -220,7 +224,7 @@ export function PrintplekDetailPage() {
220
224
  setNaamBewerken(true);
221
225
  }, children: plek.naam })), _jsx("p", { className: "text-muted-foreground text-sm", children: plek.omschrijving ?? "Hier stel je alles in wat er op deze plek wordt afgedrukt." })] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsxs(Button, { variant: "outline", onClick: () => setTestprintOpen(true), children: [_jsx(Printer, { className: "mr-2 h-4 w-4" }), " Testprint controleren"] }), _jsxs(Button, { variant: "ghost", className: "text-destructive", onClick: () => setVerwijderOpen(true), children: [_jsx(Trash2, { className: "mr-2 h-4 w-4" }), " Verwijderen"] })] })] }), _jsx(PrintplekVerwijderenDialog, { plek: verwijderOpen ? { id: plek.id, naam: plek.naam } : null, onOpenChange: setVerwijderOpen, onKlaar: () => void navigate({ to: "/layouts-printers/printplekken" }) }), _jsx(TestprintDialog, { open: testprintOpen, onOpenChange: setTestprintOpen, printplekId: plekId, printplekNaam: plek.naam }), uitgevallen.length > 0 && (_jsxs("div", { role: "alert", className: "rounded-lg border border-destructive bg-destructive/10 px-4 py-3 text-sm text-destructive", children: [_jsx("strong", { children: "Computer niet verbonden:" }), " ", uitgevallen.join(", "), ". Opdrachten voor deze plek worden pas geprint als de computer weer verbonden is, en verlopen anders."] })), _jsxs(Card, { children: [_jsxs(CardHeader, { className: "flex flex-row items-start justify-between gap-3", children: [_jsxs("div", { children: [_jsxs(CardTitle, { className: "flex items-center gap-2 text-base", children: [_jsx(Monitor, { className: "h-4 w-4" }), " Computers op deze plek"] }), _jsx(CardDescription, { children: "Het bolletje laat zien of de computer nu aan staat." })] }), vrijeComputers.length > 0 ? (_jsxs("div", { className: "flex items-center gap-2", children: [_jsxs("select", { className: selectKlasse, value: computerToevoegen, onChange: (e) => setComputerToevoegen(e.target.value), "aria-label": "Computer kiezen", children: [_jsx("option", { value: "", children: "Computer kiezen\u2026" }), vrijeComputers.map((c) => (_jsx("option", { value: c.naam, children: c.naam }, c.id)))] }), _jsxs(Button, { size: "sm", disabled: !computerToevoegen, onClick: async () => {
222
226
  try {
223
- await koppelComputerAanPrintplek(plekId, computerToevoegen);
227
+ await koppelComputerAanPrintplek(plekId, computerToevoegen, computers.find((k) => k.naam === computerToevoegen)?.id);
224
228
  setComputerToevoegen("");
225
229
  await vernieuw();
226
230
  }
@@ -228,8 +232,17 @@ export function PrintplekDetailPage() {
228
232
  toast.error("Toevoegen mislukt");
229
233
  }
230
234
  }, children: [_jsx(Plus, { className: "mr-1 h-4 w-4" }), " Computer toevoegen"] })] })) : null] }), _jsx(CardContent, { className: "space-y-2", children: eigenComputers.length === 0 ? (_jsx("p", { className: "text-muted-foreground text-sm", children: "Nog geen computers gekoppeld." })) : (eigenComputers.map((c) => {
231
- const aan = computerAan(c.computer_naam);
232
- return (_jsxs("div", { className: "flex items-center gap-3 rounded-lg border px-3 py-2 text-sm", children: [_jsx("span", { className: `h-2 w-2 rounded-full ${aan ? "bg-emerald-500" : "bg-muted-foreground"}` }), _jsx("span", { className: "min-w-0 flex-1 truncate font-medium", children: c.computer_naam }), _jsx("span", { className: "text-muted-foreground text-xs", children: aan ? "Aan" : "Uit" }), _jsxs(Button, { size: "sm", variant: "ghost", className: "text-destructive", onClick: () => setTeVerwijderen(c.computer_naam), children: [_jsx(Trash2, { className: "mr-1 h-3.5 w-3.5" }), " Verwijderen"] })] }, c.id));
235
+ const aan = computerAan(c.computer_naam, c.printnode_computer_id);
236
+ const t = toestandVanComputer({ ...c, printnode_computer_id: c.printnode_computer_id ?? null }, computers);
237
+ return (_jsxs("div", { className: "flex items-center gap-3 rounded-lg border px-3 py-2 text-sm", children: [_jsx("span", { className: `h-2 w-2 rounded-full ${aan ? "bg-emerald-500" : "bg-muted-foreground"}` }), _jsx("span", { className: "min-w-0 flex-1 truncate font-medium", children: c.computer_naam }), t.soort === "gekoppeld" ? (_jsx("span", { className: "text-muted-foreground text-xs", children: aan ? "Aan" : "Uit" })) : t.soort === "zelfde_naam" ? (_jsxs("span", { className: "flex items-center gap-2 text-xs", children: [_jsx("span", { className: "text-muted-foreground", children: zelfdeNaamTekst(t.kandidaat.naam) }), _jsx(Button, { size: "sm", variant: "outline", onClick: async () => {
238
+ const r = await koppelComputerOpId({ data: { rijId: c.id, printnodeId: t.kandidaat.id } });
239
+ if (r.ok) {
240
+ toast.success("Computer gekoppeld");
241
+ await vernieuw();
242
+ }
243
+ else
244
+ toast.error(r.fout);
245
+ }, children: "Koppelen" })] })) : (_jsx("span", { className: "text-muted-foreground text-xs", children: STATUS_ONBEKEND_TEKST })), _jsxs(Button, { size: "sm", variant: "ghost", className: "text-destructive", onClick: () => setTeVerwijderen(c.computer_naam), children: [_jsx(Trash2, { className: "mr-1 h-3.5 w-3.5" }), " Verwijderen"] })] }, c.id));
233
246
  })) })] }), _jsx(ComputerVerwijderenDialog, { open: !!teVerwijderen, onOpenChange: (v) => !v && setTeVerwijderen(null), computerNaam: teVerwijderen, printplekId: plekId, printers: teVerwijderenPrinters, andereplekken: andereplekken, onKlaar: () => {
234
247
  void herlaadComputers(true);
235
248
  void vernieuw();
@@ -1 +1 @@
1
- {"version":3,"file":"WerkplekOmzettingStap.d.ts","sourceRoot":"","sources":["../../src/components/WerkplekOmzettingStap.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAA+B,KAAK,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAW9F,wBAAgB,qBAAqB,CAAC,EACpC,QAAQ,EAAE,KAAK,EACf,QAAQ,EACR,SAAS,EACT,OAAO,EACP,WAAW,GACZ,EAAE;IACD,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB,+BA8FA"}
1
+ {"version":3,"file":"WerkplekOmzettingStap.d.ts","sourceRoot":"","sources":["../../src/components/WerkplekOmzettingStap.tsx"],"names":[],"mappings":"AASA,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAA+B,KAAK,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAW9F,wBAAgB,qBAAqB,CAAC,EACpC,QAAQ,EAAE,KAAK,EACf,QAAQ,EACR,SAAS,EACT,OAAO,EACP,WAAW,GACZ,EAAE;IACD,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB,+BA8FA"}
@@ -6,6 +6,7 @@ import { useState } from "react";
6
6
  import { Badge, Button, Input, toast } from "@flowselections/core";
7
7
  import { documentTypeLabel } from "../lib/documentTypes.js";
8
8
  import { leesbareFout } from "../lib/foutTekst.js";
9
+ import { etiketTekst } from "../lib/etiketControle.js";
9
10
  import { printerTitel } from "../lib/werkplekken.js";
10
11
  import { herbereken, pasOmzettingToe } from "../lib/werkplekOmzetting.js";
11
12
  const selectKlasse = "border-input bg-background rounded-md border px-2 py-1 text-sm";
@@ -26,7 +27,7 @@ export function WerkplekOmzettingStap({ voorstel: begin, printers, beheerder, on
26
27
  return (_jsxs("div", { className: "space-y-3 text-sm", children: [_jsx("p", { children: "Op basis van de huidige instellingen stelt de module deze werkplekken voor. Controleer per documentsoort de printer van nu en die van na de omzetting. Er wordt pas iets aangemaakt als je bevestigt." }), voorstel.map((w, i) => {
27
28
  const etiket = printers.find((p) => p.id === w.label_printer_id)?.geladen_etiket;
28
29
  const verschillen = w.soorten.filter((s) => s.verschil).length;
29
- return (_jsxs("div", { className: "space-y-2 rounded border p-2", "data-werkplek-voorstel": w.print_plek_id ?? "kantoor", children: [_jsxs("div", { className: "grid gap-2 sm:grid-cols-[8rem_1fr]", children: [_jsx("span", { children: "Naam" }), _jsx(Input, { value: w.naam, disabled: w.bestaat || !beheerder, onChange: (e) => wijzig(i, { naam: e.target.value }) }), _jsx("span", { children: "A4-printer" }), _jsxs("select", { className: selectKlasse, disabled: w.bestaat || !beheerder, value: w.a4_printer_id ?? "", onChange: (e) => wijzig(i, { a4_printer_id: e.target.value || null }), children: [_jsx("option", { value: "", children: "\u2014 geen \u2014" }), bruikbaar.map((p) => _jsx("option", { value: p.id, children: printerTitel(p) }, p.id))] }), _jsx("span", { children: "Labelprinter" }), _jsxs("select", { className: selectKlasse, disabled: w.bestaat || !beheerder, value: w.label_printer_id ?? "", onChange: (e) => wijzig(i, { label_printer_id: e.target.value || null }), children: [_jsx("option", { value: "", children: "\u2014 geen \u2014" }), bruikbaar.map((p) => _jsx("option", { value: p.id, children: printerTitel(p) }, p.id))] }), _jsx("span", { children: "Geladen etiket" }), _jsx("span", { className: etiket ? "" : "text-destructive", children: etiket ? JSON.stringify(etiket) : "nog niet ingesteld — stel het in bij Werkplekken" })] }), _jsxs("div", { className: "flex items-center gap-2", children: [w.print_plek_id ? _jsx(Badge, { variant: "outline", children: "gekoppeld aan printplek" }) : _jsx(Badge, { variant: "outline", children: "op basis van standaardregels" }), w.bestaat ? _jsx(Badge, { variant: "secondary", children: "bestaat al \u2014 wordt overgeslagen" }) : null, _jsxs(Badge, { variant: verschillen ? "destructive" : "secondary", children: [verschillen, " verschillen"] })] }), _jsxs("table", { className: "w-full text-xs", children: [_jsx("thead", { children: _jsxs("tr", { className: "text-muted-foreground text-left", children: [_jsx("th", { className: "py-0.5", children: "Documentsoort" }), _jsx("th", { children: "Nu" }), _jsx("th", { children: "Bron nu" }), _jsx("th", { children: "Na omzetting" })] }) }), _jsx("tbody", { children: w.soorten.map((s) => (_jsxs("tr", { className: s.verschil ? "bg-destructive/10 font-medium" : "", "data-verschil": s.verschil ? "ja" : "nee", children: [_jsxs("td", { className: "py-0.5", children: [documentTypeLabel(s.documenttype), s.geen_etiketlayout ? (_jsx("div", { className: "text-destructive", "data-geen-etiketlayout": "ja", children: "Deze soort heeft nog geen etiketlayout (layout staat op A4)" })) : null] }), _jsx("td", { children: titel(s.printer_id) }), _jsx("td", { children: BRON[s.bron ?? "geen"] ?? s.bron }), _jsxs("td", { children: [titel(s.na_printer_id), s.klasse === "label" ? " (label)" : " (A4)"] })] }, s.documenttype))) })] })] }, `${w.print_plek_id ?? "kantoor"}`));
30
+ return (_jsxs("div", { className: "space-y-2 rounded border p-2", "data-werkplek-voorstel": w.print_plek_id ?? "kantoor", children: [_jsxs("div", { className: "grid gap-2 sm:grid-cols-[8rem_1fr]", children: [_jsx("span", { children: "Naam" }), _jsx(Input, { value: w.naam, disabled: w.bestaat || !beheerder, onChange: (e) => wijzig(i, { naam: e.target.value }) }), _jsx("span", { children: "A4-printer" }), _jsxs("select", { className: selectKlasse, disabled: w.bestaat || !beheerder, value: w.a4_printer_id ?? "", onChange: (e) => wijzig(i, { a4_printer_id: e.target.value || null }), children: [_jsx("option", { value: "", children: "\u2014 geen \u2014" }), bruikbaar.map((p) => _jsx("option", { value: p.id, children: printerTitel(p) }, p.id))] }), _jsx("span", { children: "Labelprinter" }), _jsxs("select", { className: selectKlasse, disabled: w.bestaat || !beheerder, value: w.label_printer_id ?? "", onChange: (e) => wijzig(i, { label_printer_id: e.target.value || null }), children: [_jsx("option", { value: "", children: "\u2014 geen \u2014" }), bruikbaar.map((p) => _jsx("option", { value: p.id, children: printerTitel(p) }, p.id))] }), _jsx("span", { children: "Geladen etiket" }), _jsx("span", { className: etiket ? "" : "text-destructive", children: etiket ? etiketTekst(etiket) : "nog niet ingesteld — stel het in bij Werkplekken" })] }), _jsxs("div", { className: "flex items-center gap-2", children: [w.print_plek_id ? _jsx(Badge, { variant: "outline", children: "gekoppeld aan printplek" }) : _jsx(Badge, { variant: "outline", children: "op basis van standaardregels" }), w.bestaat ? _jsx(Badge, { variant: "secondary", children: "bestaat al \u2014 wordt overgeslagen" }) : null, _jsxs(Badge, { variant: verschillen ? "destructive" : "secondary", children: [verschillen, " verschillen"] })] }), _jsxs("table", { className: "w-full text-xs", children: [_jsx("thead", { children: _jsxs("tr", { className: "text-muted-foreground text-left", children: [_jsx("th", { className: "py-0.5", children: "Documentsoort" }), _jsx("th", { children: "Nu" }), _jsx("th", { children: "Bron nu" }), _jsx("th", { children: "Na omzetting" })] }) }), _jsx("tbody", { children: w.soorten.map((s) => (_jsxs("tr", { className: s.verschil ? "bg-destructive/10 font-medium" : "", "data-verschil": s.verschil ? "ja" : "nee", children: [_jsxs("td", { className: "py-0.5", children: [documentTypeLabel(s.documenttype), s.geen_etiketlayout ? (_jsx("div", { className: "text-destructive", "data-geen-etiketlayout": "ja", children: "Deze soort heeft nog geen etiketlayout (layout staat op A4)" })) : null] }), _jsx("td", { children: titel(s.printer_id) }), _jsx("td", { children: BRON[s.bron ?? "geen"] ?? s.bron }), _jsxs("td", { children: [titel(s.na_printer_id), s.klasse === "label" ? " (label)" : " (A4)"] })] }, s.documenttype))) })] })] }, `${w.print_plek_id ?? "kantoor"}`));
30
31
  }), !beheerder ? _jsx("p", { className: "text-muted-foreground", children: "Alleen beheerders kunnen dit wijzigen." }) : null, _jsxs("div", { className: "flex justify-between", children: [_jsx(Button, { variant: "ghost", onClick: onOverslaan, children: "Overslaan, zelf instellen" }), _jsx(Button, { disabled: !beheerder || bezig || !nieuw.length || nieuw.some((w) => !w.naam.trim() || (!w.a4_printer_id && !w.label_printer_id)), onClick: async () => {
31
32
  if (!window.confirm(`${nieuw.length} werkplek(ken) aanmaken? De verschillen hierboven gaan dan gelden voor wie deze werkplek kiest.`))
32
33
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"WerkplekkenTab.d.ts","sourceRoot":"","sources":["../../src/components/WerkplekkenTab.tsx"],"names":[],"mappings":"AAcA,OAAO,EAUL,KAAK,UAAU,EAEhB,MAAM,oBAAoB,CAAC;AAM5B,wBAAgB,kBAAkB,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE;IAAE,OAAO,EAAE,UAAU,CAAC;IAAC,WAAW,EAAE,MAAM,IAAI,CAAA;CAAE,+BAyC5G;AAqPD,wBAAgB,cAAc,gCA4E7B"}
1
+ {"version":3,"file":"WerkplekkenTab.d.ts","sourceRoot":"","sources":["../../src/components/WerkplekkenTab.tsx"],"names":[],"mappings":"AAcA,OAAO,EAUL,KAAK,UAAU,EAEhB,MAAM,oBAAoB,CAAC;AAM5B,wBAAgB,kBAAkB,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE;IAAE,OAAO,EAAE,UAAU,CAAC;IAAC,WAAW,EAAE,MAAM,IAAI,CAAA;CAAE,+BAyE5G;AAqPD,wBAAgB,cAAc,gCA4E7B"}
@@ -11,7 +11,7 @@ import { AlertTriangle, Plus, Printer, Trash2, Wand2 } from "lucide-react";
11
11
  import { supabase } from "../lib/supabaseClient.js";
12
12
  import { DOCUMENT_TYPES, documentTypeLabel } from "../lib/documentTypes.js";
13
13
  import { leesbareFout } from "../lib/foutTekst.js";
14
- import { etiketOpties, maatTekst } from "../lib/etiketControle.js";
14
+ import { etiketOpties, etiketTekst, maatNl } from "../lib/etiketControle.js";
15
15
  import { formaatKlasse, printerTitel, slaWerkplekOp, soortPastBijFormaat, usePrinterLijst, useWerkplekken, verwijderWerkplek, zetAfwijking, zetPrinterVelden, } from "../lib/werkplekken.js";
16
16
  import { PrintenInstellenWizard } from "./PrintenInstellenWizard.js";
17
17
  const selectKlasse = "border-input bg-background rounded-md border px-2 py-1 text-sm";
@@ -20,7 +20,31 @@ export function GeladenEtiketKeuze({ printer, onGewijzigd }) {
20
20
  const opties = useMemo(() => etiketOpties(printer.ondersteunde_formaten), [printer.ondersteunde_formaten]);
21
21
  // Namen uit PrintNode kunnen spaties aan begin of eind hebben: vergelijk getrimd.
22
22
  const huidig = (printer.geladen_etiket?.naam ?? "").trim();
23
- return (_jsxs("div", { className: "flex flex-wrap items-center gap-2 text-sm", id: `etiket-${printer.id}`, children: [_jsx("span", { className: "text-muted-foreground", children: "Geladen etiket:" }), _jsxs("select", { className: selectKlasse, value: huidig, onChange: async (e) => {
23
+ const [zoek, setZoek] = useState("");
24
+ // Maten die al in een van de printers zitten (gelezen, niets vast in code).
25
+ const [inGebruik, setInGebruik] = useState(new Set());
26
+ useEffect(() => {
27
+ let actief = true;
28
+ void db
29
+ .from("printers")
30
+ .select("geladen_etiket")
31
+ .not("geladen_etiket", "is", null)
32
+ .then(({ data }) => {
33
+ if (!actief)
34
+ return;
35
+ const namen = (Array.isArray(data) ? data : []).map((r) => String(r.geladen_etiket?.naam ?? "").trim()).filter(Boolean);
36
+ setInGebruik(new Set(namen));
37
+ });
38
+ return () => {
39
+ actief = false;
40
+ };
41
+ }, []);
42
+ const q = zoek.trim().toLowerCase();
43
+ const gefilterd = opties.filter((o) => !q || `${o.naam} ${maatNl(o.breedte_mm, o.hoogte_mm)}`.toLowerCase().includes(q));
44
+ const voorgesteld = gefilterd.filter((o) => o.naam.trim() === huidig || inGebruik.has(o.naam.trim()));
45
+ const andere = gefilterd.filter((o) => !voorgesteld.includes(o));
46
+ const optie = (o) => (_jsx("option", { value: o.naam.trim(), children: etiketTekst(o) }, o.naam));
47
+ return (_jsxs("div", { className: "flex flex-wrap items-center gap-2 text-sm", id: `etiket-${printer.id}`, children: [_jsx("span", { className: "text-muted-foreground", children: "Geladen etiket:" }), opties.length > 8 ? (_jsx(Input, { className: "h-8 w-40", placeholder: "Zoek maat of naam", value: zoek, onChange: (e) => setZoek(e.target.value) })) : null, _jsxs("select", { className: selectKlasse, value: huidig, onChange: async (e) => {
24
48
  const keuze = opties.find((o) => o.naam.trim() === e.target.value) ?? null;
25
49
  try {
26
50
  await zetPrinterVelden(printer.id, { geladen_etiket: keuze });
@@ -30,7 +54,7 @@ export function GeladenEtiketKeuze({ printer, onGewijzigd }) {
30
54
  catch (err) {
31
55
  toast.error(leesbareFout(err, "Opslaan mislukt"));
32
56
  }
33
- }, children: [_jsx("option", { value: "", children: "\u2014 kies het etiket dat in de printer zit \u2014" }), huidig && !opties.some((o) => o.naam.trim() === huidig) && printer.geladen_etiket ? (_jsxs("option", { value: huidig, children: [huidig, " (", maatTekst(printer.geladen_etiket.breedte_mm, printer.geladen_etiket.hoogte_mm), ")"] })) : null, opties.map((o) => (_jsxs("option", { value: o.naam.trim(), children: [o.naam.trim(), " (", maatTekst(o.breedte_mm, o.hoogte_mm), ")"] }, o.naam)))] }), !huidig ? (_jsxs("span", { className: "text-destructive flex items-center gap-1 text-xs", children: [_jsx(AlertTriangle, { className: "h-3 w-3" }), " Niet ingesteld: er wordt niets naar deze labelprinter geprint."] })) : null, !opties.length ? _jsx("span", { className: "text-muted-foreground text-xs", children: "PrintNode meldt nog geen formaten voor deze printer." }) : null] }));
57
+ }, children: [_jsx("option", { value: "", children: "\u2014 kies het etiket dat in de printer zit \u2014" }), huidig && !opties.some((o) => o.naam.trim() === huidig) && printer.geladen_etiket ? (_jsx("option", { value: huidig, children: etiketTekst(printer.geladen_etiket) })) : null, voorgesteld.length ? _jsx("optgroup", { label: "In gebruik", children: voorgesteld.map(optie) }) : null, andere.length ? (voorgesteld.length ? _jsx("optgroup", { label: "Andere maten", children: andere.map(optie) }) : andere.map(optie)) : null] }), !huidig ? (_jsxs("span", { className: "text-destructive flex items-center gap-1 text-xs", children: [_jsx(AlertTriangle, { className: "h-3 w-3" }), " Niet ingesteld: er wordt niets naar deze labelprinter geprint."] })) : null, !opties.length ? _jsx("span", { className: "text-muted-foreground text-xs", children: "De printer meldt nog geen etiketmaten." }) : null] }));
34
58
  }
35
59
  function PrinterSelect({ printers, value, onChange, leeg = "— geen —", }) {
36
60
  return (_jsxs("select", { className: selectKlasse, value: value ?? "", onChange: (e) => onChange(e.target.value || null), children: [_jsx("option", { value: "", children: leeg }), printers.map((p) => (_jsxs("option", { value: p.id, children: [printerTitel(p), p.locatie ? ` · ${p.locatie}` : "", p.online === false ? " (offline)" : ""] }, p.id)))] }));
@@ -116,4 +116,6 @@ export type { LayoutVerwijzing, LayoutGebruik, SoortOverzicht } from "./lib/layo
116
116
  export { haalOmzettingVoorstel, pasOmzettingToe, herbereken } from "./lib/werkplekOmzetting.js";
117
117
  export type { WerkplekVoorstel } from "./lib/werkplekOmzetting.js";
118
118
  export { useIsBeheerder } from "./lib/beheerder.js";
119
+ export { toestandVanComputer, maakKoppelVoorstel, STATUS_ONBEKEND_TEKST, zelfdeNaamTekst, type ComputerToestand, type KoppelVoorstelRij, } from "./lib/computerKoppeling.js";
120
+ export { computerKoppelVoorstel, koppelComputerOpId } from "./lib/printService.functions.js";
119
121
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,YAAY,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzE,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC5E,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAChH,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,UAAU,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,WAAW,EAAE,YAAY,EAAE,mBAAmB,EAAE,WAAW,EAAE,mBAAmB,EAAE,SAAS,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,eAAe,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,qBAAqB,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACvkB,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,kBAAkB,EAAE,WAAW,EAAE,mBAAmB,EAAE,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC9R,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,WAAW,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxJ,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAChF,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,4BAA4B,CAAC;AACpC,YAAY,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAChG,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,SAAS,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,iBAAiB,EAAE,aAAa,EAAE,WAAW,EAAE,2BAA2B,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AACha,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7N,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,oBAAoB,EAAE,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,EAAE,kBAAkB,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChX,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACxK,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC9H,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1H,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,aAAa,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC5H,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,2BAA2B,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACzI,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,YAAY,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,wBAAwB,EAAE,cAAc,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,4BAA4B,EAAE,eAAe,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC1Q,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjN,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACtH,YAAY,EAAE,iBAAiB,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACvH,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,UAAU,EAAE,mBAAmB,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACzV,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC7F,YAAY,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACzF,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EACb,QAAQ,EACR,SAAS,EACT,wBAAwB,EACxB,mBAAmB,EACnB,uBAAuB,EAAE,iBAAiB,EAE1C,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACzF,OAAO,EAAE,0BAA0B,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AACtF,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC1F,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACrF,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,YAAY,EACV,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,wBAAwB,EACxB,SAAS,GACV,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,YAAY,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,0BAA0B,EAC1B,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,oBAAoB,EACpB,wBAAwB,EACxB,sBAAsB,EACtB,cAAc,EACd,gBAAgB,EAChB,6BAA6B,EAC7B,KAAK,kBAAkB,EACvB,aAAa,EACb,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,0BAA0B,EAC1B,oBAAoB,EACpB,eAAe,EACf,kBAAkB,EAClB,wBAAwB,EACxB,KAAK,eAAe,EACpB,mBAAmB,EACnB,0BAA0B,EAC1B,4BAA4B,EAC5B,cAAc,EACd,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,EAAE,yBAAyB,EAAE,MAAM,wCAAwC,CAAC;AACnF,YAAY,EACV,SAAS,EACT,iBAAiB,EACjB,wBAAwB,EACxB,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,GACf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,eAAO,MAAM,YAAY,EAAE,UAkB1B,CAAC;AAGF,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAEvE,OAAO,EACL,aAAa,EACb,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AAGrF,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC9M,YAAY,EAAE,QAAQ,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAChG,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,iBAAiB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AACvI,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAChG,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC7F,YAAY,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist-lib/index.js CHANGED
@@ -76,10 +76,10 @@ export { ComputerVerwijderenDialog } from './components/ComputerVerwijderenDialo
76
76
  export { GeenPrinterFout } from './lib/printApi.js';
77
77
  export const layoutmodule = {
78
78
  id: "layout-maker",
79
- name: "Layouts en printers",
80
- version: "1.50.0",
79
+ name: "Printen",
80
+ version: "1.61.0",
81
81
  nav: {
82
- label: "Layouts en printers",
82
+ label: "Printen",
83
83
  href: "/layouts-printers/documenten",
84
84
  icon: LayoutTemplate,
85
85
  children: [
@@ -106,3 +106,5 @@ export { WerkplekOmzettingStap } from "./components/WerkplekOmzettingStap.js";
106
106
  export { useLayoutVerwijzingen, bouwOverzicht, plekVanVerwijzing, zetVerwijzingOm, isEigenVerwijzing } from "./lib/layoutVerwijzingen.js";
107
107
  export { haalOmzettingVoorstel, pasOmzettingToe, herbereken } from "./lib/werkplekOmzetting.js";
108
108
  export { useIsBeheerder } from "./lib/beheerder.js";
109
+ export { toestandVanComputer, maakKoppelVoorstel, STATUS_ONBEKEND_TEKST, zelfdeNaamTekst, } from "./lib/computerKoppeling.js";
110
+ export { computerKoppelVoorstel, koppelComputerOpId } from "./lib/printService.functions.js";