@flowselections/layout-maker 1.45.19 → 1.46.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 (57) hide show
  1. package/dist-lib/components/DocumentenPage.d.ts.map +1 -1
  2. package/dist-lib/components/DocumentenPage.js +2 -3
  3. package/dist-lib/components/PrintQueuePage.d.ts.map +1 -1
  4. package/dist-lib/components/PrintQueuePage.js +5 -71
  5. package/dist-lib/components/PrintenPage.d.ts.map +1 -1
  6. package/dist-lib/components/PrintenPage.js +2 -3
  7. package/dist-lib/components/PrinterSetupWizard.d.ts.map +1 -1
  8. package/dist-lib/components/PrinterSetupWizard.js +2 -25
  9. package/dist-lib/components/PrintplekDetailPage.d.ts.map +1 -1
  10. package/dist-lib/components/PrintplekDetailPage.js +3 -25
  11. package/dist-lib/components/PrintplekWizard.d.ts.map +1 -1
  12. package/dist-lib/components/PrintplekWizard.js +3 -85
  13. package/dist-lib/index.d.ts +0 -8
  14. package/dist-lib/index.d.ts.map +1 -1
  15. package/dist-lib/index.js +0 -10
  16. package/dist-lib/integrations/supabase/auth-middleware.d.ts +931 -46
  17. package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
  18. package/dist-lib/integrations/supabase/client.server.d.ts +931 -46
  19. package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
  20. package/dist-lib/integrations/supabase/moduleClient.d.ts +931 -46
  21. package/dist-lib/integrations/supabase/moduleClient.d.ts.map +1 -1
  22. package/dist-lib/integrations/supabase/types.d.ts +955 -47
  23. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  24. package/dist-lib/lib/aiLayout.functions.d.ts +931 -46
  25. package/dist-lib/lib/aiLayout.functions.d.ts.map +1 -1
  26. package/dist-lib/lib/printApi.d.ts +0 -2
  27. package/dist-lib/lib/printApi.d.ts.map +1 -1
  28. package/dist-lib/lib/printApi.js +0 -21
  29. package/dist-lib/lib/printQueue.server.d.ts +8 -0
  30. package/dist-lib/lib/printQueue.server.d.ts.map +1 -1
  31. package/dist-lib/lib/printQueue.server.js +36 -67
  32. package/dist-lib/lib/printService.functions.d.ts +4425 -0
  33. package/dist-lib/lib/printService.functions.d.ts.map +1 -1
  34. package/dist-lib/lib/voorbeeldPrint.d.ts.map +1 -1
  35. package/dist-lib/lib/voorbeeldPrint.js +7 -39
  36. package/package.json +1 -1
  37. package/dist-lib/components/PdfMapAutoSaver.d.ts +0 -6
  38. package/dist-lib/components/PdfMapAutoSaver.d.ts.map +0 -1
  39. package/dist-lib/components/PdfMapAutoSaver.js +0 -12
  40. package/dist-lib/components/PdfMapGlobaleBanner.d.ts +0 -12
  41. package/dist-lib/components/PdfMapGlobaleBanner.d.ts.map +0 -1
  42. package/dist-lib/components/PdfMapGlobaleBanner.js +0 -30
  43. package/dist-lib/components/PdfMapToestemmingBanner.d.ts +0 -8
  44. package/dist-lib/components/PdfMapToestemmingBanner.d.ts.map +0 -1
  45. package/dist-lib/components/PdfMapToestemmingBanner.js +0 -245
  46. package/dist-lib/lib/pdfJobSaver.d.ts +0 -24
  47. package/dist-lib/lib/pdfJobSaver.d.ts.map +0 -1
  48. package/dist-lib/lib/pdfJobSaver.js +0 -405
  49. package/dist-lib/lib/pdfMap.d.ts +0 -90
  50. package/dist-lib/lib/pdfMap.d.ts.map +0 -1
  51. package/dist-lib/lib/pdfMap.js +0 -349
  52. package/dist-lib/lib/pdfOpslagStatus.d.ts +0 -23
  53. package/dist-lib/lib/pdfOpslagStatus.d.ts.map +0 -1
  54. package/dist-lib/lib/pdfOpslagStatus.js +0 -74
  55. package/dist-lib/lib/pdfPrinter.d.ts +0 -9
  56. package/dist-lib/lib/pdfPrinter.d.ts.map +0 -1
  57. package/dist-lib/lib/pdfPrinter.js +0 -34
@@ -1 +1 @@
1
- {"version":3,"file":"DocumentenPage.d.ts","sourceRoot":"","sources":["../../src/components/DocumentenPage.tsx"],"names":[],"mappings":"AAiBA,wBAAgB,cAAc,CAAC,EAAE,GAAe,EAAE,EAAE;IAAE,GAAG,CAAC,EAAE,SAAS,GAAG,OAAO,CAAA;CAAE,+BAiBhF"}
1
+ {"version":3,"file":"DocumentenPage.d.ts","sourceRoot":"","sources":["../../src/components/DocumentenPage.tsx"],"names":[],"mappings":"AAgBA,wBAAgB,cAAc,CAAC,EAAE,GAAe,EAAE,EAAE;IAAE,GAAG,CAAC,EAAE,SAAS,GAAG,OAAO,CAAA;CAAE,+BAgBhF"}
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  // ============================================================================
3
3
  // src/components/DocumentenPage.tsx — één menu-item "Documenten" met tabbladen
4
4
  // voor de documentontwerpen en de logobibliotheek.
@@ -8,12 +8,11 @@ import { FileText, Image } from "lucide-react";
8
8
  import { ModuleTabs } from "./ModuleTabs.js";
9
9
  import { LayoutsPage } from "./LayoutsPage.js";
10
10
  import { LogosPage } from "./LogosPage.js";
11
- import { PdfMapAutoSaver } from "./PdfMapAutoSaver.js";
12
11
  const TABS = [
13
12
  { id: "layouts", label: "Documenten", icon: FileText },
14
13
  { id: "logos", label: "Logo's", icon: Image },
15
14
  ];
16
15
  export function DocumentenPage({ tab = "layouts" }) {
17
16
  const [actiefTab, setActiefTab] = useState(tab);
18
- return (_jsxs(_Fragment, { children: [_jsx(PdfMapAutoSaver, {}), _jsx(ModuleTabs, { titel: "Documenten", omschrijving: "Ontwerp pakbonnen, facturen, stickers en beheer de logo's die daarop staan.", tabs: TABS, actiefTab: actiefTab, onTabWijzig: (nieuwTab) => setActiefTab(nieuwTab === "logos" ? "logos" : "layouts"), children: actiefTab === "logos" ? _jsx(LogosPage, { ingebed: true }) : _jsx(LayoutsPage, { ingebed: true }) })] }));
17
+ return (_jsx(_Fragment, { children: _jsx(ModuleTabs, { titel: "Documenten", omschrijving: "Ontwerp pakbonnen, facturen, stickers en beheer de logo's die daarop staan.", tabs: TABS, actiefTab: actiefTab, onTabWijzig: (nieuwTab) => setActiefTab(nieuwTab === "logos" ? "logos" : "layouts"), children: actiefTab === "logos" ? _jsx(LogosPage, { ingebed: true }) : _jsx(LayoutsPage, { ingebed: true }) }) }));
19
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"PrintQueuePage.d.ts","sourceRoot":"","sources":["../../src/components/PrintQueuePage.tsx"],"names":[],"mappings":"AAuFA,wBAAgB,cAAc,gCAua7B"}
1
+ {"version":3,"file":"PrintQueuePage.d.ts","sourceRoot":"","sources":["../../src/components/PrintQueuePage.tsx"],"names":[],"mappings":"AAkFA,wBAAgB,cAAc,gCA4T7B"}
@@ -1,19 +1,14 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useMemo, useRef, useState } from "react";
3
3
  import { Badge, Button, Card, CardContent, CardDescription, CardHeader, CardTitle, Input, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, Table, TableBody, TableCell, TableHead, TableHeader, TableRow, toast, } from "@flowselections/core";
4
- import { FileDown, FolderOpen, RotateCcw, Save, Search, XCircle } from "lucide-react";
4
+ import { RotateCcw, Search, XCircle } from "lucide-react";
5
5
  import { bijgewerktTekst, useAutoRefresh } from "../lib/useAutoRefresh.js";
6
6
  import { PrintStatusBanner } from "./PrintStatusBanner.js";
7
7
  import { maakPrintJob, updateJobStatus, useLayouts, usePrinters, usePrintJobs, usePrintPlekNamen, } from "../lib/useDocumentData.js";
8
8
  import { annuleerPrintOpdrachten, printStatus } from "../lib/printService.functions.js";
9
9
  import { vraagWachtrijRonde } from "../lib/queueTickClient.js";
10
10
  import { documentTypeLabel } from "../lib/documentTypes.js";
11
- import { jobPlekLabel, jobPrintPlekId } from "../lib/printQueue.js";
12
- import { kiesPdfMap, openInEigenTabblad } from "../lib/pdfMap.js";
13
- import { bewaarPdfJobOpnieuw, downloadPdfJob } from "../lib/pdfJobSaver.js";
14
- import { pdfOpslagLabel, isOpslagFout } from "../lib/pdfOpslagStatus.js";
15
- import { PdfMapAutoSaver } from "./PdfMapAutoSaver.js";
16
- import { PdfMapToestemmingBanner } from "./PdfMapToestemmingBanner.js";
11
+ import { jobPlekLabel } from "../lib/printQueue.js";
17
12
  const STATUS_VARIANT = {
18
13
  wachtend: "outline",
19
14
  bezig: "secondary",
@@ -54,45 +49,11 @@ export function PrintQueuePage() {
54
49
  const [zoek, setZoek] = useState("");
55
50
  const [status, setStatus] = useState("alle");
56
51
  const [plekFilter, setPlekFilter] = useState("alle");
57
- const [opslagFilter, setOpslagFilter] = useState("alle");
58
52
  const [tickFout, setTickFout] = useState(null);
59
53
  const [annuleertAlles, setAnnuleertAlles] = useState(false);
60
54
  const openJobs = useMemo(() => jobs.filter((j) => j.status === "wachtend" || j.status === "bezig"), [jobs]);
61
55
  const plekNamen = usePrintPlekNamen();
62
56
  const printerNaam = useMemo(() => new Map(printers.map((p) => [p.id, p.naam])), [printers]);
63
- const pdfPrinter = printers.find((p) => p.afdrukmethode === "pdf");
64
- /** Kies direct vanuit een foute opdracht de PDF-map op deze werkplek. */
65
- const stelMapIn = async (printplekId) => {
66
- if (!pdfPrinter) {
67
- toast.error("Er is nog geen “Opslaan als PDF”-printer aangemaakt");
68
- return;
69
- }
70
- const uitkomst = await kiesPdfMap(pdfPrinter.id, printplekId);
71
- if (uitkomst.status === "gekozen") {
72
- toast.success("Map gekozen", {
73
- description: `PDF's worden opgeslagen in “${uitkomst.naam}”. De opdracht wordt opnieuw opgeslagen.`,
74
- });
75
- void reload(true);
76
- }
77
- else if (uitkomst.status === "iframe-geblokkeerd") {
78
- toast.error("Map kiezen werkt niet in een iframe", {
79
- description: "Open de app in een eigen tabblad.",
80
- action: {
81
- label: "Open in eigen tabblad",
82
- onClick: () => openInEigenTabblad(printplekId),
83
- },
84
- duration: 15000,
85
- });
86
- }
87
- else if (uitkomst.status === "niet-ondersteund") {
88
- toast.error("Deze browser ondersteunt geen mapkeuze", {
89
- description: "Gebruik Chrome, Edge of Safari op desktop.",
90
- });
91
- }
92
- else if (uitkomst.status === "fout") {
93
- toast.error("Map kiezen is mislukt", { description: uitkomst.melding });
94
- }
95
- };
96
57
  const layoutNaam = useMemo(() => new Map(layouts.map((l) => [l.id, l.naam])), [layouts]);
97
58
  /** Herkomstlabel per opdracht: printplek, anders pickstation of werkplek. */
98
59
  const plekPerJob = useMemo(() => {
@@ -110,13 +71,6 @@ export function PrintQueuePage() {
110
71
  return false;
111
72
  if (plekFilter !== "alle" && (plekPerJob.get(j.id) || "—") !== plekFilter)
112
73
  return false;
113
- if (opslagFilter === "fout" && !isOpslagFout(j.lokale_pdf_status))
114
- return false;
115
- if (opslagFilter === "opgeslagen" && j.lokale_pdf_status !== "opgeslagen")
116
- return false;
117
- if (opslagFilter === "wacht" &&
118
- !["wachtend", "genereren", "gereed", "bezig"].includes(j.lokale_pdf_status ?? ""))
119
- return false;
120
74
  return true;
121
75
  });
122
76
  const tellingen = useMemo(() => {
@@ -156,7 +110,7 @@ export function PrintQueuePage() {
156
110
  await reload(true);
157
111
  };
158
112
  const bijgewerkt = useAutoRefresh(ronde, lopende ? 5000 : 20000);
159
- return (_jsxs("main", { className: "space-y-6 p-6", children: [_jsx(PdfMapAutoSaver, {}), _jsx(PdfMapToestemmingBanner, {}), _jsxs("div", { className: "flex flex-wrap items-end justify-between gap-4", children: [_jsxs("div", { children: [_jsx("h1", { className: "text-xl font-semibold", children: "Printwachtrij" }), _jsx("p", { className: "text-sm text-muted-foreground", children: "Volg printopdrachten, herstart mislukte prints en print documenten opnieuw." })] }), _jsxs("div", { className: "flex items-center gap-3", children: [_jsx("span", { className: "text-muted-foreground text-xs", children: bijgewerktTekst(bijgewerkt) }), _jsxs(Button, { variant: "outline", size: "sm", disabled: annuleertAlles, onClick: async () => {
113
+ return (_jsxs("main", { className: "space-y-6 p-6", children: [_jsxs("div", { className: "flex flex-wrap items-end justify-between gap-4", children: [_jsxs("div", { children: [_jsx("h1", { className: "text-xl font-semibold", children: "Printwachtrij" }), _jsx("p", { className: "text-sm text-muted-foreground", children: "Volg printopdrachten, herstart mislukte prints en print documenten opnieuw." })] }), _jsxs("div", { className: "flex items-center gap-3", children: [_jsx("span", { className: "text-muted-foreground text-xs", children: bijgewerktTekst(bijgewerkt) }), _jsxs(Button, { variant: "outline", size: "sm", disabled: annuleertAlles, onClick: async () => {
160
114
  setAnnuleertAlles(true);
161
115
  try {
162
116
  const resultaat = await annuleerPrintOpdrachten({
@@ -179,31 +133,11 @@ export function PrintQueuePage() {
179
133
  setAnnuleertAlles(false);
180
134
  await reload(true);
181
135
  }
182
- }, 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", children: tellingen[s] ?? 0 })] }) }, 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-5", 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(Select, { value: opslagFilter, onValueChange: setOpslagFilter, children: [_jsx(SelectTrigger, { children: _jsx(SelectValue, {}) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "alle", children: "Alle PDF-opslag" }), _jsx(SelectItem, { value: "fout", children: "Opslag mislukt" }), _jsx(SelectItem, { value: "wacht", children: "Wacht op werkplek" }), _jsx(SelectItem, { value: "opgeslagen", children: "Opgeslagen in map" })] })] })] }), _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 })), j.lokale_pdf_fout && (_jsx("span", { className: "block text-xs text-destructive", children: j.lokale_pdf_fout })), (["map_ontbreekt", "geen_rechten", "toestemming_nodig"].includes(j.lokale_pdf_status ?? "") ||
183
- (j.lokale_pdf_status === "gereed" && !j.lokale_pdf_print_plek_id)) && (_jsxs(Button, { variant: "outline", size: "sm", className: "mt-1", onClick: () => void stelMapIn(jobPrintPlekId(j) || undefined), children: [_jsx(FolderOpen, { className: "mr-2 h-4 w-4" }), " Map instellen"] }))] }), _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
136
+ }, 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", children: tellingen[s] ?? 0 })] }) }, 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
184
137
  ? layoutNaam.get(j.gebruikte_layout_id) ?? "Onbekende layout"
185
138
  : j.gebruikte_bron
186
139
  ? "geen layout"
187
- : "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) ?? "—" : "—" }), _jsx(TableCell, { children: _jsx(Badge, { variant: STATUS_VARIANT[j.status] ?? "outline", children: pdfOpslagLabel(j.lokale_pdf_status, Boolean(j.lokale_pdf_print_plek_id)) ?? j.status }) }), _jsx(TableCell, { className: "text-sm text-muted-foreground", children: new Date(j.created_at).toLocaleString("nl-NL") }), _jsx(TableCell, { className: "text-right", children: _jsxs("div", { className: "flex justify-end gap-1", children: [(j.artefact_pad || j.resultaat_pdf_base64) && (_jsxs(Button, { variant: "ghost", size: "sm", title: "Bewaar de opgemaakte PDF", onClick: async () => {
188
- try {
189
- await downloadPdfJob(j.id, j.documentnaam ?? "document");
190
- }
191
- catch (fout) {
192
- toast.error(fout instanceof Error ? fout.message : "PDF downloaden mislukt");
193
- }
194
- }, children: [_jsx(FileDown, { className: "mr-2 h-4 w-4" }), " PDF"] })), j.lokale_pdf_status !== "opgeslagen" &&
195
- (j.artefact_pad || j.resultaat_pdf_base64) && (_jsxs(Button, { variant: "ghost", size: "sm", title: "Bewaar de bestaande PDF opnieuw in de ingestelde map", onClick: async () => {
196
- try {
197
- await bewaarPdfJobOpnieuw(j.id);
198
- toast.success("De bestaande PDF wordt opnieuw in de ingestelde map opgeslagen");
199
- }
200
- catch (fout) {
201
- toast.error(fout instanceof Error ? fout.message : "Opnieuw opslaan mislukt");
202
- }
203
- finally {
204
- void reload(true);
205
- }
206
- }, children: [_jsx(Save, { className: "mr-2 h-4 w-4" }), " Opslag opnieuw"] })), _jsxs(Button, { variant: "ghost", size: "sm", onClick: async () => {
140
+ : "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) ?? "—" : "—" }), _jsx(TableCell, { children: _jsx(Badge, { variant: STATUS_VARIANT[j.status] ?? "outline", children: j.status }) }), _jsx(TableCell, { className: "text-sm text-muted-foreground", children: new Date(j.created_at).toLocaleString("nl-NL") }), _jsx(TableCell, { className: "text-right", children: _jsxs("div", { className: "flex justify-end gap-1", children: [_jsxs(Button, { variant: "ghost", size: "sm", onClick: async () => {
207
141
  if (!j.layout_id)
208
142
  return;
209
143
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"PrintenPage.d.ts","sourceRoot":"","sources":["../../src/components/PrintenPage.tsx"],"names":[],"mappings":"AAqBA,wBAAgB,WAAW,CAAC,EAC1B,GAAoB,GACrB,EAAE;IACD,GAAG,CAAC,EAAE,cAAc,GAAG,WAAW,CAAC;CACpC,+BAuBA"}
1
+ {"version":3,"file":"PrintenPage.d.ts","sourceRoot":"","sources":["../../src/components/PrintenPage.tsx"],"names":[],"mappings":"AAoBA,wBAAgB,WAAW,CAAC,EAC1B,GAAoB,GACrB,EAAE;IACD,GAAG,CAAC,EAAE,cAAc,GAAG,WAAW,CAAC;CACpC,+BAsBA"}
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  // ============================================================================
3
3
  // src/components/PrintenPage.tsx — één menu-item "Printen" met tabbladen voor
4
4
  // printplekken (plekken, computers en printers samen) en standaardregels.
@@ -8,7 +8,6 @@ import { MapPin, Route as RouteIcon } from "lucide-react";
8
8
  import { ModuleTabs } from "./ModuleTabs.js";
9
9
  import { PrintplekkenPage } from "./PrintplekkenPage.js";
10
10
  import { DocumentRouteringPage } from "./DocumentRouteringPage.js";
11
- import { PdfMapAutoSaver } from "./PdfMapAutoSaver.js";
12
11
  const TABS = [
13
12
  {
14
13
  id: "printplekken",
@@ -19,5 +18,5 @@ const TABS = [
19
18
  ];
20
19
  export function PrintenPage({ tab = "printplekken", }) {
21
20
  const [actiefTab, setActiefTab] = useState(tab);
22
- return (_jsxs(_Fragment, { children: [_jsx(PdfMapAutoSaver, {}), _jsx(ModuleTabs, { titel: "Printen", omschrijving: "Stel per plek in het bedrijf in welke computers, printers en documenten daar horen.", tabs: TABS, actiefTab: actiefTab, onTabWijzig: (nieuwTab) => setActiefTab(nieuwTab === "routering" ? "routering" : "printplekken"), children: actiefTab === "routering" ? (_jsx(DocumentRouteringPage, { ingebed: true })) : (_jsx(PrintplekkenPage, { ingebed: true })) })] }));
21
+ return (_jsx(_Fragment, { children: _jsx(ModuleTabs, { titel: "Printen", omschrijving: "Stel per plek in het bedrijf in welke computers, printers en documenten daar horen.", tabs: TABS, actiefTab: actiefTab, onTabWijzig: (nieuwTab) => setActiefTab(nieuwTab === "routering" ? "routering" : "printplekken"), children: actiefTab === "routering" ? (_jsx(DocumentRouteringPage, { ingebed: true })) : (_jsx(PrintplekkenPage, { ingebed: true })) }) }));
23
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"PrinterSetupWizard.d.ts","sourceRoot":"","sources":["../../src/components/PrinterSetupWizard.tsx"],"names":[],"mappings":"AAoDA,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAwCD,wBAAgB,kBAAkB,CAAC,EACjC,IAAI,EACJ,YAAY,EACZ,OAAO,EACP,cAAc,EACd,iBAAsB,EACtB,eAAoB,EACpB,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;CACjC,+BAufA"}
1
+ {"version":3,"file":"PrinterSetupWizard.d.ts","sourceRoot":"","sources":["../../src/components/PrinterSetupWizard.tsx"],"names":[],"mappings":"AAkDA,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAwCD,wBAAgB,kBAAkB,CAAC,EACjC,IAAI,EACJ,YAAY,EACZ,OAAO,EACP,cAAc,EACd,iBAAsB,EACtB,eAAoB,EACpB,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;CACjC,+BA4cA"}
@@ -5,9 +5,8 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
5
5
  // ============================================================================
6
6
  import { useCallback, useEffect, useMemo, useState } from "react";
7
7
  import { Button, Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, Input, Label, toast, } from "@flowselections/core";
8
- import { Check, CheckCircle2, FileDown, FileText, Loader2, Printer, RefreshCw, Search, Tag, } from "lucide-react";
8
+ import { Check, CheckCircle2, FileText, Loader2, Printer, RefreshCw, Search, Tag, } from "lucide-react";
9
9
  import { supabase } from "../lib/supabaseClient.js";
10
- import { zorgVoorPdfPrinter } from "../lib/pdfPrinter.js";
11
10
  import { printHtml, volgJobStatus } from "../lib/printApi.js";
12
11
  import { netwerkPrinters } from "../lib/printService.functions.js";
13
12
  import { printerFormaatOpties } from "../lib/papierFormaten.js";
@@ -174,28 +173,6 @@ export function PrinterSetupWizard({ open, onOpenChange, onKlaar, computerFilter
174
173
  setBezig(false);
175
174
  }
176
175
  };
177
- /**
178
- * Voegt de virtuele "Opslaan als PDF"-printer toe. Documenten die hierheen
179
- * gaan worden niet geprint maar als downloadbare PDF in de wachtrij bewaard.
180
- * Er is maar één PDF-printer nodig; een tweede wordt niet aangemaakt.
181
- */
182
- const pdfPrinterToevoegen = async () => {
183
- setBezig(true);
184
- try {
185
- const { alAanwezig } = await zorgVoorPdfPrinter();
186
- toast.success(alAanwezig
187
- ? "'Opslaan als PDF' stond al tussen uw printers"
188
- : "'Opslaan als PDF' toegevoegd");
189
- onKlaar?.();
190
- onOpenChange(false);
191
- }
192
- catch {
193
- toast.error("Toevoegen mislukt");
194
- }
195
- finally {
196
- setBezig(false);
197
- }
198
- };
199
176
  const [testStatus, setTestStatus] = useState("leeg");
200
177
  const [testMelding, setTestMelding] = useState("");
201
178
  const testpagina = async () => {
@@ -251,7 +228,7 @@ export function PrinterSetupWizard({ open, onOpenChange, onKlaar, computerFilter
251
228
  : "Kies uw printer, geef hem een herkenbare naam en druk een testpagina af." })] }), !bewerken && _jsx(Stappenbalk, { stap: stap }), stap === 0 && (_jsxs("div", { className: "space-y-4", children: [lijst.length > 6 && (_jsxs("div", { className: "relative", children: [_jsx(Search, { className: "text-muted-foreground absolute top-2.5 left-3 h-4 w-4" }), _jsx(Input, { className: "pl-9", value: zoekterm, placeholder: "Zoek op printer of computer", onChange: (e) => setZoekterm(e.target.value) })] })), zoekt && (_jsxs("p", { className: "text-muted-foreground flex items-center gap-2 text-sm", children: [_jsx(Loader2, { className: "h-4 w-4 animate-spin" }), " Printers zoeken\u2026"] })), !zoekt && fout && _jsx("p", { className: "text-destructive text-sm", children: fout }), !zoekt && zichtbaar.length > 0 && (_jsx("div", { className: "grid gap-2 sm:grid-cols-2", children: zichtbaar.map((p) => {
252
229
  const al = bekendeExterneIds.includes(p.id);
253
230
  return (_jsx("button", { type: "button", disabled: al, onClick: () => kiesPrinter(p), className: `rounded-xl border p-4 text-left transition ${al ? "opacity-60" : "hover:border-primary/50 hover:bg-accent/40"}`, children: _jsxs("div", { className: "flex items-start gap-3", children: [_jsx(Printer, { className: "text-muted-foreground mt-0.5 h-5 w-5 shrink-0" }), _jsxs("div", { className: "min-w-0", children: [_jsx("p", { className: "truncate text-sm font-medium", children: p.naam }), _jsx("p", { className: "text-muted-foreground truncate text-xs", children: p.computer }), _jsxs("span", { className: "mt-2 flex items-center gap-1.5 text-xs", children: [_jsx("span", { className: `h-2 w-2 rounded-full ${p.online ? "bg-primary" : "bg-muted-foreground/40"}` }), al ? "Al toegevoegd" : p.online ? "Beschikbaar" : "Niet aan"] })] })] }) }, p.id));
254
- }) })), !zoekt && zichtbaar.length === 0 && _jsx(PrintProgrammaUitleg, {}), !zoekt && (_jsxs("button", { type: "button", disabled: bezig, onClick: () => void pdfPrinterToevoegen(), className: "hover:border-primary/50 hover:bg-accent/40 flex w-full items-center gap-3 rounded-xl border border-dashed p-4 text-left transition", children: [bezig ? (_jsx(Loader2, { className: "text-muted-foreground h-5 w-5 shrink-0 animate-spin" })) : (_jsx(FileDown, { className: "text-muted-foreground h-5 w-5 shrink-0" })), _jsxs("div", { children: [_jsx("p", { className: "text-sm font-medium", children: "Opslaan als PDF" }), _jsx("p", { className: "text-muted-foreground text-xs", children: "Geen fysieke printer nodig: het document verschijnt als downloadbare PDF in de printwachtrij. Handig om layouts en routering te testen." })] })] })), !zoekt && zichtbaar.length > 0 && (_jsxs("div", { className: "space-y-3", children: [_jsx("button", { type: "button", className: "text-muted-foreground hover:text-foreground text-sm underline", onClick: () => setUitlegOpen((v) => !v), children: "Ik zie mijn printer niet" }), uitlegOpen && _jsx(PrintProgrammaUitleg, { compact: true })] })), _jsx("div", { className: "flex justify-between", children: _jsxs(Button, { variant: "ghost", onClick: () => void zoeken(), disabled: zoekt, children: [_jsx(RefreshCw, { className: "mr-2 h-4 w-4" }), " Opnieuw zoeken"] }) })] })), stap === 1 && (_jsxs("div", { className: "grid gap-5 sm:grid-cols-[1fr_200px]", children: [_jsxs("div", { className: "space-y-4", children: [_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { children: "Weergavenaam" }), _jsx(Input, { value: naam, placeholder: "Bijvoorbeeld: pakbonprinter voorin", onChange: (e) => setNaam(e.target.value) })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { children: "Omschrijving (optioneel)" }), _jsx("p", { className: "text-muted-foreground text-xs", children: "Waar staat deze printer? Bijvoorbeeld: magazijn achter." }), _jsx(Input, { value: locatie, placeholder: "Bijvoorbeeld: magazijn achter", onChange: (e) => setLocatie(e.target.value) }), bekendeLocaties.length > 0 && (_jsx("div", { className: "flex flex-wrap gap-2 pt-1", children: bekendeLocaties.slice(0, 6).map((l) => (_jsx("button", { type: "button", onClick: () => setLocatie(l), className: "hover:bg-accent rounded-full border px-3 py-1 text-xs", children: l }, l))) }))] }), formaatOpties.length > 0 ? (_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { children: "Standaardformaat van deze printer" }), _jsxs("p", { className: "text-muted-foreground text-xs", children: ["Deze printer kan: ", formaatOpties.map((o) => o.label.split(" (")[0]).join(", "), "."] }), formaatOpties.length === 1 ? (_jsx("p", { className: "text-sm", children: formaatOpties[0].label })) : (_jsx("div", { className: "grid gap-2 sm:grid-cols-2", children: formaatOpties.map((o) => (_jsxs("button", { type: "button", onClick: () => setFormaatCode(o.code), className: `hover:bg-accent rounded-lg border p-3 text-left transition ${formaatCode === o.code ? "border-primary bg-accent" : ""}`, children: [o.breedte <= 120 && o.hoogte <= 220 ? (_jsx(Tag, { className: "text-muted-foreground mb-1 h-4 w-4" })) : (_jsx(FileText, { className: "text-muted-foreground mb-1 h-4 w-4" })), _jsx("p", { className: "text-sm font-medium", children: o.label.split(" (")[0] }), _jsxs("p", { className: "text-muted-foreground text-xs", children: [o.breedte, " \u00D7 ", o.hoogte, " mm"] })] }, o.code))) }))] })) : (_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { children: "Wat gaat deze printer afdrukken?" }), _jsx("p", { className: "text-muted-foreground text-xs", children: "De formaten van deze printer konden niet worden opgehaald." }), _jsx("div", { className: "grid grid-cols-2 gap-3", children: [
231
+ }) })), !zoekt && zichtbaar.length === 0 && _jsx(PrintProgrammaUitleg, {}), !zoekt && zichtbaar.length > 0 && (_jsxs("div", { className: "space-y-3", children: [_jsx("button", { type: "button", className: "text-muted-foreground hover:text-foreground text-sm underline", onClick: () => setUitlegOpen((v) => !v), children: "Ik zie mijn printer niet" }), uitlegOpen && _jsx(PrintProgrammaUitleg, { compact: true })] })), _jsx("div", { className: "flex justify-between", children: _jsxs(Button, { variant: "ghost", onClick: () => void zoeken(), disabled: zoekt, children: [_jsx(RefreshCw, { className: "mr-2 h-4 w-4" }), " Opnieuw zoeken"] }) })] })), stap === 1 && (_jsxs("div", { className: "grid gap-5 sm:grid-cols-[1fr_200px]", children: [_jsxs("div", { className: "space-y-4", children: [_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { children: "Weergavenaam" }), _jsx(Input, { value: naam, placeholder: "Bijvoorbeeld: pakbonprinter voorin", onChange: (e) => setNaam(e.target.value) })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { children: "Omschrijving (optioneel)" }), _jsx("p", { className: "text-muted-foreground text-xs", children: "Waar staat deze printer? Bijvoorbeeld: magazijn achter." }), _jsx(Input, { value: locatie, placeholder: "Bijvoorbeeld: magazijn achter", onChange: (e) => setLocatie(e.target.value) }), bekendeLocaties.length > 0 && (_jsx("div", { className: "flex flex-wrap gap-2 pt-1", children: bekendeLocaties.slice(0, 6).map((l) => (_jsx("button", { type: "button", onClick: () => setLocatie(l), className: "hover:bg-accent rounded-full border px-3 py-1 text-xs", children: l }, l))) }))] }), formaatOpties.length > 0 ? (_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { children: "Standaardformaat van deze printer" }), _jsxs("p", { className: "text-muted-foreground text-xs", children: ["Deze printer kan: ", formaatOpties.map((o) => o.label.split(" (")[0]).join(", "), "."] }), formaatOpties.length === 1 ? (_jsx("p", { className: "text-sm", children: formaatOpties[0].label })) : (_jsx("div", { className: "grid gap-2 sm:grid-cols-2", children: formaatOpties.map((o) => (_jsxs("button", { type: "button", onClick: () => setFormaatCode(o.code), className: `hover:bg-accent rounded-lg border p-3 text-left transition ${formaatCode === o.code ? "border-primary bg-accent" : ""}`, children: [o.breedte <= 120 && o.hoogte <= 220 ? (_jsx(Tag, { className: "text-muted-foreground mb-1 h-4 w-4" })) : (_jsx(FileText, { className: "text-muted-foreground mb-1 h-4 w-4" })), _jsx("p", { className: "text-sm font-medium", children: o.label.split(" (")[0] }), _jsxs("p", { className: "text-muted-foreground text-xs", children: [o.breedte, " \u00D7 ", o.hoogte, " mm"] })] }, o.code))) }))] })) : (_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { children: "Wat gaat deze printer afdrukken?" }), _jsx("p", { className: "text-muted-foreground text-xs", children: "De formaten van deze printer konden niet worden opgehaald." }), _jsx("div", { className: "grid grid-cols-2 gap-3", children: [
255
232
  { code: "papier", label: "Papier (A4)", sub: "Gewone documenten", Icon: FileText },
256
233
  { code: "etiket", label: "Etiketten", sub: "Stickers en labels", Icon: Tag },
257
234
  ].map((o) => (_jsxs("button", { type: "button", onClick: () => setGebruik(o.code), className: `hover:bg-accent rounded-lg border p-4 text-left transition ${gebruik === o.code ? "border-primary bg-accent" : ""}`, children: [_jsx(o.Icon, { className: "text-muted-foreground mb-2 h-5 w-5" }), _jsx("p", { className: "text-sm font-medium", children: o.label }), _jsx("p", { className: "text-muted-foreground text-xs", children: o.sub })] }, o.code))) })] })), _jsxs("div", { className: "flex justify-between", children: [!bewerken ? (_jsx(Button, { variant: "ghost", onClick: () => setStap(0), children: "Terug" })) : (_jsx("span", {})), _jsx(Button, { disabled: bezig, onClick: () => void opslaan(), children: bewerken ? "Opslaan" : "Opslaan en verder" })] })] }), _jsxs("div", { className: "hidden sm:block", children: [_jsx("p", { className: "text-muted-foreground mb-2 text-xs", children: "Zo komt hij in de lijst:" }), _jsxs("div", { className: "bg-card rounded-xl border p-3", children: [_jsx(Printer, { className: "text-muted-foreground mb-2 h-4 w-4" }), _jsx("p", { className: "truncate text-sm font-medium", children: naam || "Naam van de printer" }), _jsx("p", { className: "text-muted-foreground truncate text-xs", children: locatie || gekozen?.computer || "Geen omschrijving" })] })] })] })), stap === 2 && (_jsxs("div", { className: "space-y-4 text-center", children: [_jsx(CheckCircle2, { className: "text-primary mx-auto h-10 w-10" }), _jsxs("div", { children: [_jsx("p", { className: "font-medium", children: "De printer is klaar voor gebruik" }), _jsxs("p", { className: "text-muted-foreground text-sm", children: [naam, " ", locatie ? `bij ${locatie}` : "", " drukt voortaan automatisch af."] })] }), testStatus !== "leeg" && (_jsxs("p", { className: "text-muted-foreground text-sm", children: [testStatus === "bezig" && "Onderweg naar de printer…", testStatus === "gelukt" && (testMelding || "De testpagina is afgedrukt."), testStatus === "fout" &&
@@ -1 +1 @@
1
- {"version":3,"file":"PrintplekDetailPage.d.ts","sourceRoot":"","sources":["../../src/components/PrintplekDetailPage.tsx"],"names":[],"mappings":"AAiDA,wBAAgB,mBAAmB,gCA0YlC"}
1
+ {"version":3,"file":"PrintplekDetailPage.d.ts","sourceRoot":"","sources":["../../src/components/PrintplekDetailPage.tsx"],"names":[],"mappings":"AA8CA,wBAAgB,mBAAmB,gCA2WlC"}
@@ -4,7 +4,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
4
4
  // computers erbij horen, welke printers beschikbaar zijn en welk document naar
5
5
  // welke printer gaat.
6
6
  // ============================================================================
7
- import { useEffect, useMemo, useState } from "react";
7
+ import { useMemo, useState } from "react";
8
8
  import { Badge, Button, Card, CardContent, CardDescription, CardHeader, CardTitle, Input, toast, } from "@flowselections/core";
9
9
  import { Link, useParams } from "@tanstack/react-router";
10
10
  import { AlertTriangle, ArrowLeft, Check, Link2, Monitor, Plus, Printer, Trash2, Wand2, X, } from "lucide-react";
@@ -13,12 +13,9 @@ import { usePrinters } from "../lib/useDocumentData.js";
13
13
  import { useNetwerkPrinters } from "../lib/useNetwerkPrinters.js";
14
14
  import { useComputers } from "./ComputersLijst.js";
15
15
  import { DOCUMENT_TYPES, documentTypeLabel } from "../lib/documentTypes.js";
16
- import { pdfMapNaam } from "../lib/pdfMap.js";
17
16
  import { drukTestpaginaAf } from "../lib/testpagina.js";
18
17
  import { PrintplekWizard } from "./PrintplekWizard.js";
19
18
  import { TestprintDialog } from "./TestprintDialog.js";
20
- import { PdfMapAutoSaver } from "./PdfMapAutoSaver.js";
21
- import { PdfMapToestemmingBanner } from "./PdfMapToestemmingBanner.js";
22
19
  export function PrintplekDetailPage() {
23
20
  const params = useParams({ strict: false });
24
21
  const plekId = params.printplekId ?? "";
@@ -47,24 +44,6 @@ export function PrintplekDetailPage() {
47
44
  const computer = extern ? externOpComputer.get(extern) : undefined;
48
45
  return computer ? eigenNamen.has(computer) : false;
49
46
  });
50
- const [pdfMap, setPdfMap] = useState(null);
51
- useEffect(() => {
52
- let actief = true;
53
- const pdfPrinter = printers.find((printer) => printer.afdrukmethode === "pdf");
54
- if (!pdfPrinter) {
55
- setPdfMap(null);
56
- return () => {
57
- actief = false;
58
- };
59
- }
60
- void pdfMapNaam(pdfPrinter.id).then((naam) => {
61
- if (actief)
62
- setPdfMap(naam);
63
- });
64
- return () => {
65
- actief = false;
66
- };
67
- }, [printers]);
68
47
  const regelVoor = (documenttype) => regels.find((r) => r.print_plek_id === plekId && r.documenttype === documenttype) ?? null;
69
48
  const inGebruik = DOCUMENT_TYPES.filter((d) => regelVoor(d.value));
70
49
  const overige = DOCUMENT_TYPES.filter((d) => !regelVoor(d.value));
@@ -86,7 +65,7 @@ export function PrintplekDetailPage() {
86
65
  if (!plek) {
87
66
  return (_jsxs("main", { className: "space-y-4 p-6", children: [_jsx(Button, { variant: "ghost", asChild: true, children: _jsxs(Link, { to: "/layouts-printers/printplekken", children: [_jsx(ArrowLeft, { className: "mr-2 h-4 w-4" }), " Terug"] }) }), _jsx("p", { className: "text-muted-foreground text-sm", children: "Deze printplek bestaat niet (meer)." })] }));
88
67
  }
89
- return (_jsxs("main", { className: "space-y-6 p-6", children: [_jsx(PdfMapAutoSaver, {}), _jsx(PdfMapToestemmingBanner, { printplekId: plekId }), _jsxs("div", { className: "flex flex-wrap items-start justify-between gap-4", children: [_jsxs("div", { className: "space-y-1", children: [_jsx(Button, { variant: "ghost", size: "sm", asChild: true, className: "-ml-2", children: _jsxs(Link, { to: "/layouts-printers/printplekken", children: [_jsx(ArrowLeft, { className: "mr-2 h-4 w-4" }), " Alle printplekken"] }) }), naamBewerken ? (_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Input, { value: naam, onChange: (e) => setNaam(e.target.value), className: "w-64" }), _jsx(Button, { size: "icon", onClick: async () => {
68
+ return (_jsxs("main", { className: "space-y-6 p-6", children: [_jsxs("div", { className: "flex flex-wrap items-start justify-between gap-4", children: [_jsxs("div", { className: "space-y-1", children: [_jsx(Button, { variant: "ghost", size: "sm", asChild: true, className: "-ml-2", children: _jsxs(Link, { to: "/layouts-printers/printplekken", children: [_jsx(ArrowLeft, { className: "mr-2 h-4 w-4" }), " Alle printplekken"] }) }), naamBewerken ? (_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Input, { value: naam, onChange: (e) => setNaam(e.target.value), className: "w-64" }), _jsx(Button, { size: "icon", onClick: async () => {
90
69
  await bewerkPrintplek(plek.id, { naam: naam.trim() });
91
70
  setNaamBewerken(false);
92
71
  await reload(true);
@@ -115,7 +94,6 @@ export function PrintplekDetailPage() {
115
94
  const printer = eigenPrinters.find((p) => p.id === regel?.printer_id) ??
116
95
  printers.find((p) => p.id === regel?.printer_id) ??
117
96
  null;
118
- const isPdf = printer?.afdrukmethode === "pdf";
119
- return (_jsxs("div", { className: "flex flex-wrap items-center justify-between gap-3 rounded-lg border p-2", children: [_jsx("div", { className: "text-sm font-medium", children: documentTypeLabel(d.value) }), printer ? (_jsxs("span", { className: "text-muted-foreground text-sm", children: [printer.naam, isPdf ? (_jsxs("span", { className: "ml-2 inline-flex items-center gap-1 rounded-full bg-amber-100 px-2 py-0.5 text-xs font-medium text-amber-900", children: [_jsx(AlertTriangle, { className: "h-3 w-3" }), "Wordt niet geprint, maar opgeslagen als PDF", pdfMap ? ` in “${pdfMap}”` : ""] })) : null] })) : (_jsxs("span", { className: "text-destructive flex items-center gap-1 text-xs", children: [_jsx(AlertTriangle, { className: "h-3.5 w-3.5" }), " Geen printer"] }))] }, d.value));
97
+ return (_jsxs("div", { className: "flex flex-wrap items-center justify-between gap-3 rounded-lg border p-2", children: [_jsx("div", { className: "text-sm font-medium", children: documentTypeLabel(d.value) }), printer ? (_jsx("span", { className: "text-muted-foreground text-sm", children: printer.naam })) : (_jsxs("span", { className: "text-destructive flex items-center gap-1 text-xs", children: [_jsx(AlertTriangle, { className: "h-3.5 w-3.5" }), " Geen printer"] }))] }, d.value));
120
98
  }), !alleDocumenten && overige.length > 0 ? (_jsxs("p", { className: "text-muted-foreground text-xs", children: [overige.length, " documentsoort", overige.length === 1 ? "" : "en", " nog niet ingesteld."] })) : null] })] }), _jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsxs(CardTitle, { className: "flex items-center gap-2 text-base", children: [_jsx(Link2, { className: "h-4 w-4" }), " Gekoppeld aan"] }), _jsx(CardDescription, { children: "Andere modules (bijvoorbeeld pickstations) kunnen zich aan deze printplek koppelen." })] }), _jsxs(CardContent, { className: "space-y-4", children: [bronnen.length === 0 ? (_jsx("p", { className: "text-muted-foreground text-sm", children: "Nog niets gekoppeld. Kies deze printplek in de andere module (bijvoorbeeld bij een pickstation); de koppeling verschijnt hier vanzelf." })) : (_jsx("div", { className: "space-y-2", children: bronnen.map((b) => (_jsxs("div", { className: "flex flex-wrap items-center gap-3 rounded-lg border px-3 py-2 text-sm", children: [_jsx(Badge, { variant: "secondary", children: b.bron }), _jsxs("span", { className: "min-w-0 flex-1 truncate", children: [b.label ?? b.bron_id, _jsx("span", { className: "text-muted-foreground ml-2 text-xs", children: b.bron_id })] }), _jsxs(Button, { variant: "ghost", size: "sm", onClick: () => void ontkoppel(b.bron, b.bron_id), children: [_jsx(X, { className: "mr-1 h-3.5 w-3.5" }), " Ontkoppelen"] })] }, b.id))) })), weeskoppelingen.length > 0 ? (_jsxs("div", { className: "space-y-2 rounded-lg border border-dashed p-3", children: [_jsxs("p", { className: "text-muted-foreground flex items-center gap-2 text-xs", children: [_jsx(AlertTriangle, { className: "h-3.5 w-3.5" }), " Koppelingen zonder bestaande printplek:"] }), weeskoppelingen.map((b) => (_jsxs("div", { className: "flex flex-wrap items-center gap-3 text-sm", children: [_jsx("span", { className: "min-w-0 flex-1 truncate", children: b.label ?? `${b.bron} ${b.bron_id}` }), _jsxs(Button, { variant: "ghost", size: "sm", onClick: () => void ontkoppel(b.bron, b.bron_id), children: [_jsx(Trash2, { className: "mr-1 h-3.5 w-3.5" }), " Opruimen"] })] }, b.id)))] })) : null] })] })] }));
121
99
  }
@@ -1 +1 @@
1
- {"version":3,"file":"PrintplekWizard.d.ts","sourceRoot":"","sources":["../../src/components/PrintplekWizard.tsx"],"names":[],"mappings":"AAiEA,wBAAgB,eAAe,CAAC,EAC9B,IAAI,EACJ,YAAY,EACZ,WAAW,EACX,OAAO,GACR,EAAE;IACD,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,sEAAsE;IACtE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC,+BA0jBA"}
1
+ {"version":3,"file":"PrintplekWizard.d.ts","sourceRoot":"","sources":["../../src/components/PrintplekWizard.tsx"],"names":[],"mappings":"AA4DA,wBAAgB,eAAe,CAAC,EAC9B,IAAI,EACJ,YAAY,EACZ,WAAW,EACX,OAAO,GACR,EAAE;IACD,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,sEAAsE;IACtE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC,+BAiaA"}
@@ -6,10 +6,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
6
6
  // ============================================================================
7
7
  import { useEffect, useMemo, useState } from "react";
8
8
  import { Badge, Button, Checkbox, Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, Input, Label, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, toast, } from "@flowselections/core";
9
- import { AlertTriangle, ArrowLeft, ArrowRight, Check, FileDown, FolderOpen, Monitor, Printer, RefreshCw, } from "lucide-react";
10
- import { zorgVoorPdfPrinter } from "../lib/pdfPrinter.js";
11
- import { kiesPdfMap, mapKiezenMogelijk, draaitInIframe, openInEigenTabblad } from "../lib/pdfMap.js";
12
- import { supabase } from "../lib/supabaseClient.js";
9
+ import { AlertTriangle, ArrowLeft, ArrowRight, Check, Monitor, Printer, RefreshCw, } from "lucide-react";
13
10
  import { bewerkPrintplek, koppelComputerAanPrintplek, maakPrintplek, ontkoppelComputer, usePrintplekken, zetPrintplekPrinter, } from "../lib/printplekken.js";
14
11
  import { usePrinters, useLayouts } from "../lib/useDocumentData.js";
15
12
  import { useNetwerkPrinters } from "../lib/useNetwerkPrinters.js";
@@ -21,7 +18,7 @@ const GEEN = "geen";
21
18
  export function PrintplekWizard({ open, onOpenChange, printplekId, onKlaar, }) {
22
19
  const { plekken, computers: plekComputers, regels, reload } = usePrintplekken();
23
20
  const { computers, reload: herlaadComputers } = useComputers();
24
- const { printers, reload: herlaadPrinters } = usePrinters();
21
+ const { printers } = usePrinters();
25
22
  const { layouts } = useLayouts();
26
23
  const { gevonden } = useNetwerkPrinters();
27
24
  const [stap, setStap] = useState(1);
@@ -34,58 +31,6 @@ export function PrintplekWizard({ open, onOpenChange, printplekId, onKlaar, }) {
34
31
  const [alleDocumenten, setAlleDocumenten] = useState(false);
35
32
  const [voorstelGedaan, setVoorstelGedaan] = useState(false);
36
33
  const [geinitialiseerd, setGeinitialiseerd] = useState(false);
37
- const [pdfMap, setPdfMap] = useState({});
38
- /** Opent de mappenverkenner en bewaart de keuze direct. */
39
- async function mapKiezen(printerId) {
40
- if (!plekId) {
41
- toast.error("Sla eerst de naam van deze printplek op voordat u een PDF-map kiest.");
42
- return;
43
- }
44
- const uitkomst = await kiesPdfMap(printerId, plekId);
45
- if (uitkomst.status === "gekozen") {
46
- setPdfMap((m) => ({ ...m, [printerId]: uitkomst.naam }));
47
- await bewaarPdfMap(printerId, uitkomst.naam);
48
- return;
49
- }
50
- if (uitkomst.status === "niet-ondersteund") {
51
- toast.error("Uw browser kan geen mappenvenster openen. Gebruik Chrome of Edge, of typ het pad links zelf in.");
52
- return;
53
- }
54
- if (uitkomst.status === "iframe-geblokkeerd") {
55
- toast.error("De mappenverkenner is geblokkeerd omdat de app in een voorbeeldvenster (iframe) draait.", {
56
- description: "Open de app in een eigen tabblad — daar werkt Map kiezen wel. U kunt het pad ook handmatig intypen.",
57
- action: {
58
- label: "Open in eigen tabblad",
59
- onClick: () => openInEigenTabblad(plekId),
60
- },
61
- duration: 10000,
62
- });
63
- return;
64
- }
65
- if (uitkomst.status === "fout") {
66
- toast.error(`De mappenverkenner kon niet worden geopend: ${uitkomst.melding}`);
67
- }
68
- // "geannuleerd": bewust geen melding — de gebruiker koos zelf voor Annuleren.
69
- }
70
- async function bewaarPdfMap(printerId, waarde) {
71
- setBezig(true);
72
- try {
73
- const { error } = await supabase
74
- .from("printers")
75
- .update({ pdf_map: waarde.trim() || null })
76
- .eq("id", printerId);
77
- if (error)
78
- throw error;
79
- toast.success(waarde.trim() ? `PDF-map ingesteld: ${waarde.trim()}` : "PDF-map gewist");
80
- await herlaadPrinters(true);
81
- }
82
- catch {
83
- toast.error("De map kon niet worden opgeslagen");
84
- }
85
- finally {
86
- setBezig(false);
87
- }
88
- }
89
34
  // --- printers die bij de gekozen computers horen -------------------------
90
35
  const computerVanPrinter = useMemo(() => {
91
36
  const map = new Map();
@@ -95,13 +40,7 @@ export function PrintplekWizard({ open, onOpenChange, printplekId, onKlaar, }) {
95
40
  return map;
96
41
  }, [gevonden]);
97
42
  const gekozenSet = useMemo(() => new Set(gekozenComputers), [gekozenComputers]);
98
- // De virtuele "Opslaan als PDF"-printer hoort niet bij een computer en is
99
- // daarom altijd beschikbaar, op elke printplek.
100
- const isPdfPrinter = (p) => String(p.afdrukmethode ?? "") === "pdf";
101
- const pdfPrinterAanwezig = useMemo(() => (Array.isArray(printers) ? printers : []).some((p) => isPdfPrinter(p) && p.actief), [printers]);
102
43
  const plekPrinters = useMemo(() => (Array.isArray(printers) ? printers : []).filter((p) => {
103
- if (isPdfPrinter(p))
104
- return p.actief;
105
44
  const extern = p.extern_printer_id;
106
45
  const computer = extern ? computerVanPrinter.get(extern) : undefined;
107
46
  return computer ? gekozenSet.has(computer) : false;
@@ -168,23 +107,6 @@ export function PrintplekWizard({ open, onOpenChange, printplekId, onKlaar, }) {
168
107
  setVoorstelGedaan(true);
169
108
  }, [stap, voorstelGedaan, plekPrinters, relevant]);
170
109
  // --- opslaan per stap ----------------------------------------------------
171
- /** Voegt de virtuele PDF-printer toe zodat die op deze plek kiesbaar is. */
172
- async function pdfPrinterToevoegen() {
173
- setBezig(true);
174
- try {
175
- const { alAanwezig } = await zorgVoorPdfPrinter();
176
- toast.success(alAanwezig
177
- ? "'Opslaan als PDF' stond al tussen uw printers"
178
- : "'Opslaan als PDF' toegevoegd");
179
- await herlaadPrinters(true);
180
- }
181
- catch {
182
- toast.error("Toevoegen mislukt");
183
- }
184
- finally {
185
- setBezig(false);
186
- }
187
- }
188
110
  async function bewaarStap1() {
189
111
  if (plekId) {
190
112
  await bewerkPrintplek(plekId, { naam: naam.trim(), omschrijving: omschrijving.trim() || null });
@@ -266,11 +188,7 @@ export function PrintplekWizard({ open, onOpenChange, printplekId, onKlaar, }) {
266
188
  : null;
267
189
  const aangevinkt = gekozenComputers.includes(c.naam);
268
190
  return (_jsxs("label", { className: `flex items-center gap-3 rounded-lg border p-3 ${bezetNaam ? "opacity-60" : "cursor-pointer"}`, children: [_jsx(Checkbox, { checked: aangevinkt, disabled: Boolean(bezetNaam), onCheckedChange: (v) => setGekozenComputers((lijst) => v ? [...new Set([...lijst, c.naam])] : lijst.filter((n) => n !== c.naam)) }), _jsx(Monitor, { className: "text-muted-foreground h-4 w-4" }), _jsxs("span", { className: "min-w-0 flex-1", children: [_jsx("span", { className: "block truncate text-sm font-medium", children: c.naam }), _jsxs("span", { className: "text-muted-foreground text-xs", children: [c.online ? "aan" : "uit", " \u00B7 ", c.aantalGevonden, " printer", c.aantalGevonden === 1 ? "" : "s", bezetNaam ? ` · hoort al bij ${bezetNaam}` : ""] })] }), _jsx("span", { className: `h-2.5 w-2.5 rounded-full ${c.online ? "bg-emerald-500" : "bg-muted-foreground"}` })] }, c.id));
269
- })] })) : null, stap === 3 ? (_jsxs("div", { className: "space-y-2", children: [plekPrinters.filter((p) => !isPdfPrinter(p)).length === 0 ? (_jsxs("div", { className: "flex items-start gap-2 rounded-lg border p-3 text-sm", children: [_jsx(AlertTriangle, { className: "text-muted-foreground mt-0.5 h-4 w-4" }), _jsx("span", { children: "Op deze computers zijn nog geen fysieke printers ingesteld. Ga terug en kies een andere computer, of stel de printers eerst in bij Werkplekken. \"Opslaan als PDF\" werkt altijd, ook zonder fysieke printer." })] })) : null, plekPrinters.map((p) => (_jsxs("div", { className: "rounded-lg border p-3", children: [_jsxs("div", { className: "flex flex-wrap items-center justify-between gap-2", children: [_jsxs("span", { className: "flex items-center gap-2 text-sm", children: [isPdfPrinter(p) ? (_jsx(FileDown, { className: "text-muted-foreground h-4 w-4" })) : (_jsx(Printer, { className: "text-muted-foreground h-4 w-4" })), _jsx("span", { className: "font-medium", children: p.naam }), p.papierformaat ? (_jsx(Badge, { variant: "secondary", children: p.papierformaat })) : null, isPdfPrinter(p) ? _jsx(Badge, { variant: "outline", children: "PDF" }) : null] }), isPdfPrinter(p) ? null : (_jsx(Button, { size: "sm", variant: "ghost", onClick: () => void drukTestpaginaAf(p.id, p.naam), children: "Testpagina" }))] }), isPdfPrinter(p) ? (_jsxs("div", { className: "mt-3 space-y-2 border-t pt-3", children: [_jsx(Label, { className: "text-xs", children: "Map op deze computer" }), _jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsx("div", { className: "min-w-48 rounded-md border bg-muted/30 px-3 py-2 text-sm", children: pdfMap[p.id] ??
270
- (p.pdf_map ??
271
- "Nog geen echte map gekozen") }), _jsxs(Button, { size: "sm", variant: "outline", disabled: bezig, title: mapKiezenMogelijk()
272
- ? "Open de mappenverkenner"
273
- : "Werkt in Chrome of Edge", onClick: () => void mapKiezen(p.id), children: [_jsx(FolderOpen, { className: "mr-2 h-4 w-4" }), " Map kiezen"] })] }), _jsxs("p", { className: "text-muted-foreground text-xs", children: ["Kies de map met ", _jsx("strong", { children: "Map kiezen" }), ". Alleen een mapnaam of pad intypen geeft de browser geen schrijftoegang. Gereedstaande PDF's worden na de keuze automatisch opnieuw verwerkt."] }), draaitInIframe() ? (_jsxs("div", { className: "rounded-md border border-amber-300 bg-amber-50 px-3 py-2 text-xs text-amber-900", children: ["De app draait nu in een voorbeeldvenster, waarin de browser de mappenverkenner blokkeert.", " ", _jsx("button", { type: "button", className: "font-medium underline", onClick: () => openInEigenTabblad(), children: "Open de app in een eigen tabblad" }), " ", "om Map kiezen te gebruiken, of typ het pad handmatig in."] })) : null] })) : null] }, p.id))), !pdfPrinterAanwezig ? (_jsxs("button", { type: "button", disabled: bezig, onClick: () => void pdfPrinterToevoegen(), className: "hover:border-primary/50 hover:bg-muted/50 flex w-full items-center gap-3 rounded-lg border border-dashed p-3 text-left", children: [_jsx(FileDown, { className: "text-muted-foreground h-4 w-4" }), _jsxs("span", { children: [_jsx("span", { className: "block text-sm font-medium", children: "Opslaan als PDF" }), _jsx("span", { className: "text-muted-foreground text-xs", children: "Geen fysieke printer nodig: het document verschijnt als downloadbare PDF in de printwachtrij." })] })] })) : null] })) : null, stap === 4 ? (_jsxs("div", { className: "space-y-2", children: [_jsx("p", { className: "text-muted-foreground text-sm", children: "We hebben alvast een verstandige keuze gemaakt. Pas aan wat er niet klopt." }), zichtbareDocumenten.map((d) => (_jsxs("div", { className: "flex flex-wrap items-center justify-between gap-3 rounded-lg border p-2", children: [_jsx("span", { className: "text-sm font-medium", children: documentTypeLabel(d) }), _jsxs(Select, { value: documentPrinters[d] || GEEN, onValueChange: (v) => setDocumentPrinters((m) => ({ ...m, [d]: v === GEEN ? "" : v })), children: [_jsx(SelectTrigger, { className: "w-64", children: _jsx(SelectValue, { placeholder: "Kies printer" }) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: GEEN, children: "Niet op deze plek printen" }), plekPrinters.map((p) => (_jsx(SelectItem, { value: p.id, children: p.naam }, p.id)))] })] })] }, d))), overig.length > 0 ? (_jsx(Button, { variant: "ghost", size: "sm", onClick: () => setAlleDocumenten((v) => !v), children: alleDocumenten
191
+ })] })) : null, stap === 3 ? (_jsxs("div", { className: "space-y-2", children: [plekPrinters.length === 0 ? (_jsxs("div", { className: "flex items-start gap-2 rounded-lg border p-3 text-sm", children: [_jsx(AlertTriangle, { className: "text-muted-foreground mt-0.5 h-4 w-4" }), _jsx("span", { children: "Op deze computers zijn nog geen fysieke printers ingesteld. Ga terug en kies een andere computer, of stel de printers eerst in bij Werkplekken." })] })) : null, plekPrinters.map((p) => (_jsx("div", { className: "rounded-lg border p-3", children: _jsxs("div", { className: "flex flex-wrap items-center justify-between gap-2", children: [_jsxs("span", { className: "flex items-center gap-2 text-sm", children: [_jsx(Printer, { className: "text-muted-foreground h-4 w-4" }), _jsx("span", { className: "font-medium", children: p.naam }), p.papierformaat ? (_jsx(Badge, { variant: "secondary", children: p.papierformaat })) : null] }), (_jsx(Button, { size: "sm", variant: "ghost", onClick: () => void drukTestpaginaAf(p.id, p.naam), children: "Testpagina" }))] }) }, p.id)))] })) : null, stap === 4 ? (_jsxs("div", { className: "space-y-2", children: [_jsx("p", { className: "text-muted-foreground text-sm", children: "We hebben alvast een verstandige keuze gemaakt. Pas aan wat er niet klopt." }), zichtbareDocumenten.map((d) => (_jsxs("div", { className: "flex flex-wrap items-center justify-between gap-3 rounded-lg border p-2", children: [_jsx("span", { className: "text-sm font-medium", children: documentTypeLabel(d) }), _jsxs(Select, { value: documentPrinters[d] || GEEN, onValueChange: (v) => setDocumentPrinters((m) => ({ ...m, [d]: v === GEEN ? "" : v })), children: [_jsx(SelectTrigger, { className: "w-64", children: _jsx(SelectValue, { placeholder: "Kies printer" }) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: GEEN, children: "Niet op deze plek printen" }), plekPrinters.map((p) => (_jsx(SelectItem, { value: p.id, children: p.naam }, p.id)))] })] })] }, d))), overig.length > 0 ? (_jsx(Button, { variant: "ghost", size: "sm", onClick: () => setAlleDocumenten((v) => !v), children: alleDocumenten
274
192
  ? "Minder documenten"
275
193
  : `Meer documenten (${overig.length})` })) : null] })) : null, stap === 5 ? (_jsxs("div", { className: "space-y-3", children: [_jsxs("div", { className: "rounded-lg border p-3 text-sm", children: [_jsx("p", { className: "font-medium", children: naam.trim() }), _jsxs("p", { className: "text-muted-foreground", children: [gekozenComputers.length, " computer", gekozenComputers.length === 1 ? "" : "s", " \u00B7", " ", plekPrinters.length, " printer", plekPrinters.length === 1 ? "" : "s", " \u00B7", " ", Object.values(documentPrinters).filter(Boolean).length, " documentregel", Object.values(documentPrinters).filter(Boolean).length === 1 ? "" : "s"] })] }), _jsxs(Button, { variant: "outline", onClick: () => void testprint(), disabled: bezig, children: [_jsx(Printer, { className: "mr-2 h-4 w-4" }), " Testpagina versturen"] }), _jsx("p", { className: "text-muted-foreground text-xs", children: "Komt de pagina eruit? Dan is deze plek klaar voor gebruik." })] })) : null] }), _jsxs(DialogFooter, { className: "flex-row justify-between gap-2 sm:justify-between", children: [_jsx(Button, { variant: "ghost", onClick: () => (stap === 1 ? onOpenChange(false) : setStap((s) => s - 1)), disabled: bezig, children: stap === 1 ? ("Annuleren") : (_jsxs(_Fragment, { children: [_jsx(ArrowLeft, { className: "mr-2 h-4 w-4" }), " Terug"] })) }), _jsxs("div", { className: "flex items-center gap-2", children: [stap > 1 && stap < 5 ? (_jsx(Button, { variant: "ghost", onClick: () => onOpenChange(false), disabled: bezig, children: "Later afmaken" })) : null, stap === 5 ? (_jsxs(Button, { onClick: afronden, children: [_jsx(Check, { className: "mr-2 h-4 w-4" }), " Klaar"] })) : (_jsxs(Button, { onClick: () => void volgende(), disabled: bezig || !magVerder, children: ["Volgende ", _jsx(ArrowRight, { className: "ml-2 h-4 w-4" })] }))] })] })] }) }));
276
194
  }
@@ -18,14 +18,6 @@ export { bedoeldePrinter, formaatDef, paginaCss } from './lib/browserPrint.js';
18
18
  export type { Orientatie, PrinterKeuze } from './lib/browserPrint.js';
19
19
  export { PrintQueuePage } from './components/PrintQueuePage.js';
20
20
  export { annuleerPrintOpdrachten } from './lib/printService.functions.js';
21
- export { PdfMapAutoSaver } from './components/PdfMapAutoSaver.js';
22
- export { PdfMapToestemmingBanner } from './components/PdfMapToestemmingBanner.js';
23
- export { startPdfMapGlobaleBanner } from './components/PdfMapGlobaleBanner.js';
24
- export { bewaarPdfJobZodraKlaar, bewaarPdfJobOpnieuw, controleerPdfMap, startPdfMapService } from './lib/pdfJobSaver.js';
25
- export { PDF_OPSLAG_STATUSSEN, PDF_OPSLAG_FOUTSTATUSSEN, PDF_OPSLAG_LABEL, PDF_OPSLAG_MELDING, isOpslagFout, } from './lib/pdfOpslagStatus.js';
26
- export type { PdfOpslagStatus } from './lib/pdfOpslagStatus.js';
27
- export { bewaarInPdfMap, draaitInIframe, herstelPdfMapToestemming, heeftPdfMap, kiesPdfMap, koppelPdfMapAanPrintplek, luisterNaarPdfMapWijziging, lokalePdfPrintplek, mapKiezenMogelijk, openInEigenTabblad, pdfMapKoppeling, pdfMapNaam, pdfMapToestemming } from './lib/pdfMap.js';
28
- export type { PdfMapKoppeling } from './lib/pdfMap.js';
29
21
  export { AiLayoutImportDialog } from './components/AiLayoutImportDialog.js';
30
22
  export { LogosPage, LogoThumbnail } from './components/LogosPage.js';
31
23
  export { PakbonBuilderPage } from './components/PakbonBuilderPage.js';
@@ -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;AAGvD,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,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACtH,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,GACb,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,WAAW,EAAE,UAAU,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,eAAe,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAClR,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,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,UAAU,EAAE,YAAY,EAAE,eAAe,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;AACnU,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC7F,YAAY,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EACb,QAAQ,EACR,SAAS,EACT,wBAAwB,EACxB,mBAAmB,EACnB,uBAAuB,EAAE,iBAAiB,EAE1C,aAAa,EACb,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AACxB,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,aAAa,EACb,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,0BAA0B,EAC1B,oBAAoB,EACpB,eAAe,EACf,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,SAAS,EACT,iBAAiB,EACjB,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,eAAO,MAAM,YAAY,EAAE,UAkB1B,CAAC;AAMF,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}