@flowselections/layout-maker 1.45.19 → 1.51.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-lib/components/ComputerVerwijderenDialog.d.ts +16 -0
- package/dist-lib/components/ComputerVerwijderenDialog.d.ts.map +1 -0
- package/dist-lib/components/ComputerVerwijderenDialog.js +38 -0
- package/dist-lib/components/ComputersLijst.d.ts.map +1 -1
- package/dist-lib/components/ComputersLijst.js +5 -2
- package/dist-lib/components/DocumentenPage.d.ts.map +1 -1
- package/dist-lib/components/DocumentenPage.js +2 -3
- package/dist-lib/components/LayoutPrinterSelect.d.ts +3 -5
- package/dist-lib/components/LayoutPrinterSelect.d.ts.map +1 -1
- package/dist-lib/components/LayoutPrinterSelect.js +40 -17
- package/dist-lib/components/LayoutsPage.d.ts.map +1 -1
- package/dist-lib/components/LayoutsPage.js +28 -18
- package/dist-lib/components/PrintQueuePage.d.ts.map +1 -1
- package/dist-lib/components/PrintQueuePage.js +5 -71
- package/dist-lib/components/PrintenPage.d.ts.map +1 -1
- package/dist-lib/components/PrintenPage.js +2 -3
- package/dist-lib/components/PrinterSetupWizard.d.ts +3 -1
- package/dist-lib/components/PrinterSetupWizard.d.ts.map +1 -1
- package/dist-lib/components/PrinterSetupWizard.js +15 -29
- package/dist-lib/components/PrinterVervangenDialog.d.ts +14 -0
- package/dist-lib/components/PrinterVervangenDialog.d.ts.map +1 -0
- package/dist-lib/components/PrinterVervangenDialog.js +44 -0
- package/dist-lib/components/PrintersPage.d.ts.map +1 -1
- package/dist-lib/components/PrintersPage.js +2 -2
- package/dist-lib/components/PrintplekDetailPage.d.ts.map +1 -1
- package/dist-lib/components/PrintplekDetailPage.js +173 -68
- package/dist-lib/components/PrintplekVerwijderenDialog.d.ts +9 -0
- package/dist-lib/components/PrintplekVerwijderenDialog.d.ts.map +1 -0
- package/dist-lib/components/PrintplekVerwijderenDialog.js +34 -0
- package/dist-lib/components/PrintplekWizard.d.ts.map +1 -1
- package/dist-lib/components/PrintplekWizard.js +3 -85
- package/dist-lib/components/PrintplekkenPage.d.ts.map +1 -1
- package/dist-lib/components/PrintplekkenPage.js +28 -6
- package/dist-lib/components/WerkplekConfiguratiePage.d.ts.map +1 -1
- package/dist-lib/components/WerkplekConfiguratiePage.js +67 -25
- package/dist-lib/index.d.ts +9 -12
- package/dist-lib/index.d.ts.map +1 -1
- package/dist-lib/index.js +7 -13
- package/dist-lib/integrations/supabase/auth-middleware.d.ts +1414 -24
- package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.server.d.ts +1414 -24
- package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/moduleClient.d.ts +1414 -24
- package/dist-lib/integrations/supabase/moduleClient.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/types.d.ts +1471 -42
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/aiLayout.functions.d.ts +1414 -24
- package/dist-lib/lib/aiLayout.functions.d.ts.map +1 -1
- package/dist-lib/lib/documentRoutering.d.ts +2 -1
- package/dist-lib/lib/documentRoutering.d.ts.map +1 -1
- package/dist-lib/lib/documentRoutering.js +5 -8
- package/dist-lib/lib/foutTekst.d.ts +3 -0
- package/dist-lib/lib/foutTekst.d.ts.map +1 -0
- package/dist-lib/lib/foutTekst.js +25 -0
- package/dist-lib/lib/printApi.d.ts +0 -2
- package/dist-lib/lib/printApi.d.ts.map +1 -1
- package/dist-lib/lib/printApi.js +13 -60
- package/dist-lib/lib/printQueue.server.d.ts +8 -0
- package/dist-lib/lib/printQueue.server.d.ts.map +1 -1
- package/dist-lib/lib/printQueue.server.js +55 -133
- package/dist-lib/lib/printRoutering.d.ts +34 -0
- package/dist-lib/lib/printRoutering.d.ts.map +1 -0
- package/dist-lib/lib/printRoutering.js +69 -0
- package/dist-lib/lib/printService.functions.d.ts +6980 -30
- package/dist-lib/lib/printService.functions.d.ts.map +1 -1
- package/dist-lib/lib/printplekken.d.ts +67 -2
- package/dist-lib/lib/printplekken.d.ts.map +1 -1
- package/dist-lib/lib/printplekken.js +141 -10
- package/dist-lib/lib/useDocumentData.d.ts +15 -10
- package/dist-lib/lib/useDocumentData.d.ts.map +1 -1
- package/dist-lib/lib/useDocumentData.js +43 -34
- package/dist-lib/lib/voorbeeldPrint.d.ts.map +1 -1
- package/dist-lib/lib/voorbeeldPrint.js +7 -39
- package/package.json +2 -2
- package/dist-lib/components/PdfMapAutoSaver.d.ts +0 -6
- package/dist-lib/components/PdfMapAutoSaver.d.ts.map +0 -1
- package/dist-lib/components/PdfMapAutoSaver.js +0 -12
- package/dist-lib/components/PdfMapGlobaleBanner.d.ts +0 -12
- package/dist-lib/components/PdfMapGlobaleBanner.d.ts.map +0 -1
- package/dist-lib/components/PdfMapGlobaleBanner.js +0 -30
- package/dist-lib/components/PdfMapToestemmingBanner.d.ts +0 -8
- package/dist-lib/components/PdfMapToestemmingBanner.d.ts.map +0 -1
- package/dist-lib/components/PdfMapToestemmingBanner.js +0 -245
- package/dist-lib/lib/pdfJobSaver.d.ts +0 -24
- package/dist-lib/lib/pdfJobSaver.d.ts.map +0 -1
- package/dist-lib/lib/pdfJobSaver.js +0 -405
- package/dist-lib/lib/pdfMap.d.ts +0 -90
- package/dist-lib/lib/pdfMap.d.ts.map +0 -1
- package/dist-lib/lib/pdfMap.js +0 -349
- package/dist-lib/lib/pdfOpslagStatus.d.ts +0 -23
- package/dist-lib/lib/pdfOpslagStatus.d.ts.map +0 -1
- package/dist-lib/lib/pdfOpslagStatus.js +0 -74
- package/dist-lib/lib/pdfPrinter.d.ts +0 -9
- package/dist-lib/lib/pdfPrinter.d.ts.map +0 -1
- package/dist-lib/lib/pdfPrinter.js +0 -34
|
@@ -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,
|
|
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
|
|
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.
|
|
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
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PrintplekkenPage.d.ts","sourceRoot":"","sources":["../../src/components/PrintplekkenPage.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PrintplekkenPage.d.ts","sourceRoot":"","sources":["../../src/components/PrintplekkenPage.tsx"],"names":[],"mappings":"AAsDA,wBAAgB,gBAAgB,CAAC,EAAE,OAAe,EAAE,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,+BA6d/E"}
|
|
@@ -5,16 +5,17 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
5
5
|
// zodat instellen en monitoren op dezelfde plek gebeuren.
|
|
6
6
|
// ============================================================================
|
|
7
7
|
import { useMemo, useState } from "react";
|
|
8
|
-
import { Badge, Button, Card, CardContent, CardDescription, CardHeader, CardTitle, Input, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@flowselections/core";
|
|
8
|
+
import { Badge, Button, Card, CardContent, CardDescription, CardHeader, CardTitle, Input, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, toast, } from "@flowselections/core";
|
|
9
9
|
import { Link, useNavigate } from "@tanstack/react-router";
|
|
10
|
-
import { ChevronRight, MapPin, Monitor, Plus, Printer, Search, Wand2 } from "lucide-react";
|
|
11
|
-
import { koppelComputerAanPrintplek, usePrintplekken } from "../lib/printplekken.js";
|
|
10
|
+
import { ChevronRight, MapPin, Monitor, Plus, Printer, RotateCcw, Search, Trash2, Wand2, } from "lucide-react";
|
|
11
|
+
import { koppelComputerAanPrintplek, negeerComputer, useGenegeerdeComputers, usePrintplekken, zetComputerTerug, } from "../lib/printplekken.js";
|
|
12
12
|
import { usePrinters } from "../lib/useDocumentData.js";
|
|
13
13
|
import { useNetwerkPrinters } from "../lib/useNetwerkPrinters.js";
|
|
14
14
|
import { useComputers } from "./ComputersLijst.js";
|
|
15
15
|
import { ComputersLijst } from "./ComputersLijst.js";
|
|
16
16
|
import { telPrintersPerComputer } from "../lib/printerTelling.js";
|
|
17
17
|
import { PrintplekWizard } from "./PrintplekWizard.js";
|
|
18
|
+
import { PrintplekVerwijderenDialog } from "./PrintplekVerwijderenDialog.js";
|
|
18
19
|
import { TestprintDialog } from "./TestprintDialog.js";
|
|
19
20
|
import { PrintStatusBanner } from "./PrintStatusBanner.js";
|
|
20
21
|
import { bijgewerktTekst, useAutoRefresh } from "../lib/useAutoRefresh.js";
|
|
@@ -24,11 +25,14 @@ export function PrintplekkenPage({ ingebed = false } = {}) {
|
|
|
24
25
|
const { computers, loading: computersLaden, fout: computersFout, reload: herlaadComputers, } = useComputers();
|
|
25
26
|
const { printers, reload: herlaadPrinters } = usePrinters();
|
|
26
27
|
const { gevonden, zoek } = useNetwerkPrinters();
|
|
28
|
+
const { genegeerd, reload: herlaadGenegeerd } = useGenegeerdeComputers();
|
|
27
29
|
const navigate = useNavigate();
|
|
30
|
+
const [teVerwijderen, setTeVerwijderen] = useState(null);
|
|
28
31
|
const [zoekterm, setZoekterm] = useState("");
|
|
29
32
|
const [wizardOpen, setWizardOpen] = useState(false);
|
|
30
33
|
const [testprint, setTestprint] = useState(null);
|
|
31
34
|
const [computerToevoegen, setComputerToevoegen] = useState(false);
|
|
35
|
+
const [toonGenegeerd, setToonGenegeerd] = useState(false);
|
|
32
36
|
const bijgewerkt = useAutoRefresh(async () => {
|
|
33
37
|
await Promise.all([reload(true), herlaadComputers(true), herlaadPrinters(true), zoek()]);
|
|
34
38
|
}, 10000, computerToevoegen || wizardOpen);
|
|
@@ -97,14 +101,32 @@ export function PrintplekkenPage({ ingebed = false } = {}) {
|
|
|
97
101
|
const Wrapper = ingebed ? "div" : "main";
|
|
98
102
|
return (_jsxs(Wrapper, { className: ingebed ? "space-y-6" : "space-y-6 p-6", children: [_jsxs("div", { className: "flex flex-wrap items-end justify-between gap-4", children: [!ingebed && (_jsxs("div", { children: [_jsx("h1", { className: "text-xl font-semibold", children: "Printplekken" }), _jsx("p", { className: "text-muted-foreground text-sm", children: "Een printplek is een fysieke plek in het bedrijf, bijvoorbeeld een pickstation. Alle computers en printers op die plek horen bij elkaar." })] })), _jsxs("div", { className: "ml-auto flex items-center gap-2", children: [_jsxs(Button, { variant: "outline", onClick: () => setComputerToevoegen(true), children: [_jsx(Plus, { className: "mr-2 h-4 w-4" }), " Computer aanmelden"] }), _jsxs(Button, { onClick: () => setWizardOpen(true), children: [_jsx(Wand2, { className: "mr-2 h-4 w-4" }), " Printplek instellen"] })] })] }), _jsx(PrintStatusBanner, { fout: computersFout, offlineWerkplekken: computers.filter((c) => !c.online).map((c) => c.naam), toonWerkplekLink: false }), fout ? (_jsx("div", { className: "border-destructive/40 bg-destructive/10 text-destructive rounded-xl border p-3 text-sm", children: fout })) : null, _jsxs("div", { className: "flex flex-wrap items-center gap-3 rounded-xl border p-3", children: [_jsxs("div", { className: "relative min-w-[220px] flex-1", children: [_jsx(Search, { className: "text-muted-foreground absolute top-2.5 left-3 h-4 w-4" }), _jsx(Input, { className: "pl-9", placeholder: "Zoek printplek of computer\u2026", value: zoekterm, onChange: (e) => setZoekterm(e.target.value) })] }), _jsxs("span", { className: "text-muted-foreground text-sm", children: [plekken.length, " plek", plekken.length === 1 ? "" : "ken", " \u00B7 ", computers.length, " computer", computers.length === 1 ? "" : "s", " (", computersOnline, " aan) \u00B7 ", totaalPrinters, " printer", totaalPrinters === 1 ? "" : "s"] }), _jsx("span", { className: "text-muted-foreground ml-auto text-xs", children: bijgewerktTekst(bijgewerkt) })] }), kaarten.length === 0 ? (_jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { className: "text-base", children: plekken.length === 0 ? "Nog geen printplekken" : "Geen resultaten" }), _jsx(CardDescription, { children: plekken.length === 0
|
|
99
103
|
? 'Maak er één aan per plek waar geprint wordt, bijvoorbeeld "Pickstation 1".'
|
|
100
|
-
: "Geen printplek of computer gevonden met deze zoekterm." })] }), _jsx(CardContent, { className: "flex flex-wrap gap-2", children: _jsxs(Button, { onClick: () => setWizardOpen(true), children: [_jsx(Wand2, { className: "mr-2 h-4 w-4" }), " Printplek instellen"] }) })] })) : (_jsx("div", { className: "grid gap-4 xl:grid-cols-2", children: kaarten.map((k) => (_jsxs("div", { className: "rounded-xl border p-4", children: [_jsxs("div", { className: "flex items-start justify-between gap-3", children: [_jsxs("div", { className: "min-w-0", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(MapPin, { className: "text-muted-foreground h-4 w-4" }), _jsx("span", { className: "truncate font-medium", children: k.plek.naam }), _jsx("span", { className: `h-2.5 w-2.5 shrink-0 rounded-full ${k.klaar ? "bg-emerald-500" : "bg-destructive"}`, "aria-label": k.klaar ? "Klaar om te printen" : "Nog niet compleet" })] }), k.plek.omschrijving ? (_jsx("p", { className: "text-muted-foreground mt-1 text-xs", children: k.plek.omschrijving })) : null] }), _jsxs("div", { className: "flex shrink-0 items-center gap-3", children: [_jsxs("button", { type: "button", className: "text-primary flex items-center text-xs", onClick: () => setTestprint({ id: k.plek.id, naam: k.plek.naam }), children: [_jsx(Printer, { className: "mr-1 h-3.5 w-3.5" }), " Testprint"] }), _jsxs(Link, { to: "/layouts-printers/printplekken/$printplekId", params: { printplekId: k.plek.id }, className: "text-primary flex items-center text-xs", children: ["Instellen ", _jsx(ChevronRight, { className: "ml-1 h-3.5 w-3.5" })] })] })] }), _jsx("div", { className: "mt-3 space-y-2", children: k.computerLijst.length === 0 ? (_jsxs("div", { className: "text-muted-foreground flex flex-wrap items-center gap-2 rounded-lg border border-dashed p-3 text-sm", children: ["Nog geen computer gekoppeld", nietGekoppeld.length > 0 ? (_jsxs(Select, { onValueChange: (naam) => void koppel(k.plek.id, naam), children: [_jsx(SelectTrigger, { className: "h-8 w-[190px]", children: _jsx(SelectValue, { placeholder: "Computer koppelen" }) }), _jsx(SelectContent, { children: nietGekoppeld.map((c) => (_jsx(SelectItem, { value: c.naam, children: c.naam }, c.id))) })] })) : (_jsx(Button, { variant: "ghost", size: "sm", onClick: () => setComputerToevoegen(true), children: "Computer aanmelden" }))] })) : (k.computerLijst.map((c) => (_jsxs("div", { className: "bg-muted/40 flex flex-wrap items-center gap-3 rounded-lg px-3 py-2 text-sm", children: [_jsx(Monitor, { className: "text-muted-foreground h-4 w-4 shrink-0" }), _jsx("span", { className: "min-w-0 flex-1 truncate font-medium", children: c.naam }), _jsx("span", { className: `rounded-full px-2 py-0.5 text-xs font-medium ${c.online ? "bg-primary/10 text-primary" : "bg-muted text-muted-foreground"}`, children: c.aangemeld ? (c.online ? "Aan" : "Uit") : "Niet aangemeld" }), _jsxs("span", { className: "text-muted-foreground text-xs", children: [c.ingesteld, " printer", c.ingesteld === 1 ? "" : "s", " \u00B7 ", c.gevonden, " gevonden"] }), _jsx(Button, { variant: "ghost", size: "sm", disabled: !c.id, onClick: () => naarComputer(c.id), children: "Printers toevoegen" })] }, c.koppelingId)))) }), _jsxs("div", { className: "text-muted-foreground mt-3 flex items-start gap-2 text-xs", children: [_jsx(Printer, { className: "mt-0.5 h-3.5 w-3.5 shrink-0" }), _jsx("span", { children: k.documentRegels.length === 0
|
|
104
|
+
: "Geen printplek of computer gevonden met deze zoekterm." })] }), _jsx(CardContent, { className: "flex flex-wrap gap-2", children: _jsxs(Button, { onClick: () => setWizardOpen(true), children: [_jsx(Wand2, { className: "mr-2 h-4 w-4" }), " Printplek instellen"] }) })] })) : (_jsx("div", { className: "grid gap-4 xl:grid-cols-2", children: kaarten.map((k) => (_jsxs("div", { className: "rounded-xl border p-4", children: [_jsxs("div", { className: "flex items-start justify-between gap-3", children: [_jsxs("div", { className: "min-w-0", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(MapPin, { className: "text-muted-foreground h-4 w-4" }), _jsx("span", { className: "truncate font-medium", children: k.plek.naam }), _jsx("span", { className: `h-2.5 w-2.5 shrink-0 rounded-full ${k.klaar ? "bg-emerald-500" : "bg-destructive"}`, "aria-label": k.klaar ? "Klaar om te printen" : "Nog niet compleet" })] }), k.plek.omschrijving ? (_jsx("p", { className: "text-muted-foreground mt-1 text-xs", children: k.plek.omschrijving })) : null] }), _jsxs("div", { className: "flex shrink-0 items-center gap-3", children: [_jsxs("button", { type: "button", className: "text-primary flex items-center text-xs", onClick: () => setTestprint({ id: k.plek.id, naam: k.plek.naam }), children: [_jsx(Printer, { className: "mr-1 h-3.5 w-3.5" }), " Testprint"] }), _jsxs("button", { type: "button", className: "text-destructive flex items-center text-xs", onClick: () => setTeVerwijderen({ id: k.plek.id, naam: k.plek.naam }), children: [_jsx(Trash2, { className: "mr-1 h-3.5 w-3.5" }), " Verwijderen"] }), _jsxs(Link, { to: "/layouts-printers/printplekken/$printplekId", params: { printplekId: k.plek.id }, className: "text-primary flex items-center text-xs", children: ["Instellen ", _jsx(ChevronRight, { className: "ml-1 h-3.5 w-3.5" })] })] })] }), _jsx("div", { className: "mt-3 space-y-2", children: k.computerLijst.length === 0 ? (_jsxs("div", { className: "text-muted-foreground flex flex-wrap items-center gap-2 rounded-lg border border-dashed p-3 text-sm", children: ["Nog geen computer gekoppeld", nietGekoppeld.length > 0 ? (_jsxs(Select, { onValueChange: (naam) => void koppel(k.plek.id, naam), children: [_jsx(SelectTrigger, { className: "h-8 w-[190px]", children: _jsx(SelectValue, { placeholder: "Computer koppelen" }) }), _jsx(SelectContent, { children: nietGekoppeld.map((c) => (_jsx(SelectItem, { value: c.naam, children: c.naam }, c.id))) })] })) : (_jsx(Button, { variant: "ghost", size: "sm", onClick: () => setComputerToevoegen(true), children: "Computer aanmelden" }))] })) : (k.computerLijst.map((c) => (_jsxs("div", { className: "bg-muted/40 flex flex-wrap items-center gap-3 rounded-lg px-3 py-2 text-sm", children: [_jsx(Monitor, { className: "text-muted-foreground h-4 w-4 shrink-0" }), _jsx("span", { className: "min-w-0 flex-1 truncate font-medium", children: c.naam }), _jsx("span", { className: `rounded-full px-2 py-0.5 text-xs font-medium ${c.online ? "bg-primary/10 text-primary" : "bg-muted text-muted-foreground"}`, children: c.aangemeld ? (c.online ? "Aan" : "Uit") : "Niet aangemeld" }), _jsxs("span", { className: "text-muted-foreground text-xs", children: [c.ingesteld, " printer", c.ingesteld === 1 ? "" : "s", " \u00B7 ", c.gevonden, " gevonden"] }), _jsx(Button, { variant: "ghost", size: "sm", disabled: !c.id, onClick: () => naarComputer(c.id), children: "Printers toevoegen" })] }, c.koppelingId)))) }), _jsxs("div", { className: "text-muted-foreground mt-3 flex items-start gap-2 text-xs", children: [_jsx(Printer, { className: "mt-0.5 h-3.5 w-3.5 shrink-0" }), _jsx("span", { children: k.documentRegels.length === 0
|
|
101
105
|
? "Nog geen document aan een printer gekoppeld"
|
|
102
106
|
: k.documentRegels
|
|
103
107
|
.map((r) => `${documentTypeLabel(r.documenttype)} → ${printerNaam.get(r.printer_id ?? "") ?? "onbekende printer"}`)
|
|
104
108
|
.join(" · ") })] }), k.bronnen.length > 0 ? (_jsx("div", { className: "mt-3 flex flex-wrap gap-1", children: Array.from(new Set(k.bronnen.map((b) => b.bron))).map((bron) => (_jsxs(Badge, { variant: "secondary", children: [k.bronnen.filter((b) => b.bron === bron).length, "\u00D7 ", bron] }, bron))) })) : null] }, k.plek.id))) })), nietGekoppeld.length > 0 ? (_jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsxs(CardTitle, { className: "text-base", children: ["Computers zonder printplek (", nietGekoppeld.length, ")"] }), _jsx(CardDescription, { children: "Deze computers zijn aangemeld maar horen nog nergens bij. Kies hieronder waar ze staan." })] }), _jsx(CardContent, { className: "space-y-2", children: nietGekoppeld.map((c) => {
|
|
105
109
|
const info = perComputer.get(c.naam);
|
|
106
|
-
return (_jsxs("div", { className: "flex flex-wrap items-center gap-3 rounded-lg border px-3 py-2 text-sm", children: [_jsx(Monitor, { className: "text-muted-foreground h-4 w-4 shrink-0" }), _jsx("span", { className: "min-w-0 flex-1 truncate font-medium", children: c.naam }), _jsx("span", { className: `rounded-full px-2 py-0.5 text-xs font-medium ${c.online ? "bg-primary/10 text-primary" : "bg-muted text-muted-foreground"}`, children: c.online ? "Aan" : "Uit" }), _jsxs("span", { className: "text-muted-foreground text-xs", children: [info?.gevonden ?? c.aantalGevonden, " printers gevonden"] }), plekken.length > 0 ? (_jsxs(Select, { onValueChange: (plekId) => void koppel(plekId, c.naam), children: [_jsx(SelectTrigger, { className: "h-8 w-[170px]", children: _jsx(SelectValue, { placeholder: "Plek kiezen" }) }), _jsx(SelectContent, { children: plekken.map((p) => (_jsx(SelectItem, { value: p.id, children: p.naam }, p.id))) })] })) : (_jsx(Button, { variant: "ghost", size: "sm", onClick: () => setWizardOpen(true), children: "Printplek maken" }))
|
|
107
|
-
|
|
110
|
+
return (_jsxs("div", { className: "flex flex-wrap items-center gap-3 rounded-lg border px-3 py-2 text-sm", children: [_jsx(Monitor, { className: "text-muted-foreground h-4 w-4 shrink-0" }), _jsx("span", { className: "min-w-0 flex-1 truncate font-medium", children: c.naam }), _jsx("span", { className: `rounded-full px-2 py-0.5 text-xs font-medium ${c.online ? "bg-primary/10 text-primary" : "bg-muted text-muted-foreground"}`, children: c.online ? "Aan" : "Uit" }), _jsxs("span", { className: "text-muted-foreground text-xs", children: [info?.gevonden ?? c.aantalGevonden, " printers gevonden"] }), plekken.length > 0 ? (_jsxs(Select, { onValueChange: (plekId) => void koppel(plekId, c.naam), children: [_jsx(SelectTrigger, { className: "h-8 w-[170px]", children: _jsx(SelectValue, { placeholder: "Plek kiezen" }) }), _jsx(SelectContent, { children: plekken.map((p) => (_jsx(SelectItem, { value: p.id, children: p.naam }, p.id))) })] })) : (_jsx(Button, { variant: "ghost", size: "sm", onClick: () => setWizardOpen(true), children: "Printplek maken" })), _jsxs(Button, { variant: "ghost", size: "sm", className: "text-destructive", onClick: async () => {
|
|
111
|
+
try {
|
|
112
|
+
await negeerComputer(c.naam, null);
|
|
113
|
+
await Promise.all([herlaadComputers(true), herlaadGenegeerd()]);
|
|
114
|
+
toast.success(`${c.naam} verwijderd`);
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
toast.error("Verwijderen mislukt");
|
|
118
|
+
}
|
|
119
|
+
}, children: [_jsx(Trash2, { className: "mr-1 h-3.5 w-3.5" }), " Verwijderen"] })] }, c.id));
|
|
120
|
+
}) })] })) : null, genegeerd.length > 0 ? (_jsxs("div", { className: "space-y-2", children: [_jsxs(Button, { variant: "ghost", size: "sm", onClick: () => setToonGenegeerd((v) => !v), children: [toonGenegeerd ? "Verberg" : "Toon", " genegeerde computers (", genegeerd.length, ")"] }), toonGenegeerd ? (_jsx(Card, { children: _jsx(CardContent, { className: "space-y-2 py-4", children: genegeerd.map((g) => (_jsxs("div", { className: "flex flex-wrap items-center gap-3 rounded-lg border px-3 py-2 text-sm", children: [_jsx(Monitor, { className: "text-muted-foreground h-4 w-4 shrink-0" }), _jsx("span", { className: "min-w-0 flex-1 truncate font-medium", children: g.computer_naam }), _jsxs("span", { className: "text-muted-foreground text-xs", children: ["verwijderd op ", new Date(g.genegeerd_op).toLocaleString("nl-NL")] }), _jsxs(Button, { variant: "outline", size: "sm", onClick: async () => {
|
|
121
|
+
try {
|
|
122
|
+
await zetComputerTerug(g.computer_naam);
|
|
123
|
+
await Promise.all([herlaadComputers(true), herlaadGenegeerd()]);
|
|
124
|
+
toast.success(`${g.computer_naam} teruggezet`);
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
toast.error("Terugzetten mislukt");
|
|
128
|
+
}
|
|
129
|
+
}, children: [_jsx(RotateCcw, { className: "mr-1 h-3.5 w-3.5" }), " Terugzetten"] })] }, g.id))) }) })) : null] })) : null, !computersLaden && computers.length === 0 && plekken.length === 0 ? (_jsx(Card, { children: _jsxs(CardContent, { className: "space-y-3 py-6 text-sm", children: [_jsx("p", { className: "font-medium", children: "Nog geen computer aangemeld" }), _jsx("p", { className: "text-muted-foreground", children: "Installeer het printprogramma op de computer waar de printers aan hangen. Zodra die zich meldt, verschijnt hij hier." }), _jsxs(Button, { onClick: () => setComputerToevoegen(true), children: [_jsx(Plus, { className: "mr-2 h-4 w-4" }), " Computer aanmelden"] })] }) })) : null, _jsx(PrintplekVerwijderenDialog, { plek: teVerwijderen, onOpenChange: (v) => !v && setTeVerwijderen(null), onKlaar: () => vernieuwAlles() }), _jsx(PrintplekWizard, { open: wizardOpen, onOpenChange: setWizardOpen, onKlaar: () => vernieuwAlles() }), _jsx(TestprintDialog, { open: testprint !== null, onOpenChange: (v) => !v && setTestprint(null), printplekId: testprint?.id ?? null, printplekNaam: testprint?.naam ?? null }), _jsx(ComputersLijst, { computers: computers, loading: false, fout: null, onVernieuw: () => {
|
|
108
130
|
void herlaadComputers();
|
|
109
131
|
void zoek();
|
|
110
132
|
}, onPrintersToevoegen: (naam) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WerkplekConfiguratiePage.d.ts","sourceRoot":"","sources":["../../src/components/WerkplekConfiguratiePage.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"WerkplekConfiguratiePage.d.ts","sourceRoot":"","sources":["../../src/components/WerkplekConfiguratiePage.tsx"],"names":[],"mappings":"AA2CA,wBAAgB,wBAAwB,gCAkXvC"}
|
|
@@ -3,7 +3,10 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
// src/components/WerkplekConfiguratiePage.tsx — één computer configureren:
|
|
4
4
|
// printers op deze computer en welke ontwerpen er worden afgedrukt.
|
|
5
5
|
// ============================================================================
|
|
6
|
-
import { useMemo, useState } from "react";
|
|
6
|
+
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
7
|
+
import { supabase } from "../lib/supabaseClient.js";
|
|
8
|
+
import { printplekVoorComputer, wijsPrinterToeAanPrintplek } from "../lib/printplekken.js";
|
|
9
|
+
import { leesbareFout } from "../lib/foutTekst.js";
|
|
7
10
|
import { Button, Card, CardContent, CardDescription, CardHeader, CardTitle, Input, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, toast, } from "@flowselections/core";
|
|
8
11
|
import { Link, useParams } from "@tanstack/react-router";
|
|
9
12
|
import { ChevronRight, Monitor, Plus, Printer, Search } from "lucide-react";
|
|
@@ -21,7 +24,7 @@ const VOLG_ROUTERING = "volg-routering";
|
|
|
21
24
|
export function WerkplekConfiguratiePage() {
|
|
22
25
|
const params = useParams({ strict: false });
|
|
23
26
|
const computerId = params.computerId ?? "";
|
|
24
|
-
const { printers,
|
|
27
|
+
const { printers, reload } = usePrinters();
|
|
25
28
|
const { computers, reload: herlaadComputers } = useComputers();
|
|
26
29
|
const { gevonden, zoek } = useNetwerkPrinters();
|
|
27
30
|
const { koppelingen: routering, reload: herlaadRoutering } = useWerkplekPrinters();
|
|
@@ -47,9 +50,47 @@ export function WerkplekConfiguratiePage() {
|
|
|
47
50
|
})
|
|
48
51
|
.filter((r) => (computer ? r.computer === computer.naam : false));
|
|
49
52
|
const actievePrinter = printers.find((p) => p.id === gekozenPrinter) ?? null;
|
|
50
|
-
const tellingen = useMemo(() => telPrintersPerComputer(printers, gevonden, new Set(
|
|
53
|
+
const tellingen = useMemo(() => telPrintersPerComputer(printers, gevonden, new Set()), [printers, gevonden]);
|
|
51
54
|
const werkplekNaam = computer?.naam ?? "";
|
|
52
55
|
const eigenRoutering = routering.filter((r) => r.werkplek === werkplekNaam);
|
|
56
|
+
const [plekId, setPlekId] = useState(null);
|
|
57
|
+
const [gekoppeld, setGekoppeld] = useState(new Set());
|
|
58
|
+
const laadKoppeling = useCallback(async () => {
|
|
59
|
+
if (!werkplekNaam) {
|
|
60
|
+
setPlekId(null);
|
|
61
|
+
setGekoppeld(new Set());
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
const id = await printplekVoorComputer(werkplekNaam);
|
|
65
|
+
setPlekId(id);
|
|
66
|
+
if (!id) {
|
|
67
|
+
setGekoppeld(new Set());
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const { data } = await supabase
|
|
71
|
+
.from("print_plek_printers")
|
|
72
|
+
.select("printer_id")
|
|
73
|
+
.eq("print_plek_id", id);
|
|
74
|
+
const lijst = Array.isArray(data) ? data : [];
|
|
75
|
+
setGekoppeld(new Set(lijst.map((r) => r.printer_id)));
|
|
76
|
+
}, [werkplekNaam]);
|
|
77
|
+
useEffect(() => {
|
|
78
|
+
void laadKoppeling();
|
|
79
|
+
}, [laadKoppeling, printers]);
|
|
80
|
+
// Zonder printplek geldt de controle niet; dan zijn alle printers bruikbaar.
|
|
81
|
+
const isBruikbaar = (id) => !plekId || gekoppeld.has(id);
|
|
82
|
+
const koppel = async (printerId) => {
|
|
83
|
+
if (!plekId)
|
|
84
|
+
return;
|
|
85
|
+
try {
|
|
86
|
+
await wijsPrinterToeAanPrintplek(plekId, printerId);
|
|
87
|
+
await laadKoppeling();
|
|
88
|
+
toast.success("Printer gekoppeld aan de printplek");
|
|
89
|
+
}
|
|
90
|
+
catch (err) {
|
|
91
|
+
toast.error(leesbareFout(err, "Koppelen mislukt"));
|
|
92
|
+
}
|
|
93
|
+
};
|
|
53
94
|
const zetDocument = async (documenttype, printerId) => {
|
|
54
95
|
if (!werkplekNaam)
|
|
55
96
|
return;
|
|
@@ -62,8 +103,8 @@ export function WerkplekConfiguratiePage() {
|
|
|
62
103
|
await herlaadRoutering();
|
|
63
104
|
toast.success("Opgeslagen");
|
|
64
105
|
}
|
|
65
|
-
catch {
|
|
66
|
-
toast.error(
|
|
106
|
+
catch (err) {
|
|
107
|
+
toast.error(leesbareFout(err));
|
|
67
108
|
}
|
|
68
109
|
};
|
|
69
110
|
const zichtbareComputers = computers.filter((c) => zoekComputer.trim() ? c.naam.toLowerCase().includes(zoekComputer.trim().toLowerCase()) : true);
|
|
@@ -78,35 +119,36 @@ export function WerkplekConfiguratiePage() {
|
|
|
78
119
|
? `${computer.online ? "Aan" : "Uit"} · ${printerTellingTekst(tellingen.get(computer.naam))}`
|
|
79
120
|
: "Deze computer is niet gevonden. Staat hij aan?" })] }) }), _jsxs(Card, { children: [_jsxs(CardHeader, { className: "pb-3", children: [_jsx(CardTitle, { className: "text-base", children: "Wat print deze werkplek" }), _jsxs(CardDescription, { children: ["Kies per documentsoort de printer op deze werkplek. Staat er \"Volg routering\", dan geldt de standaardprinter uit", " ", _jsx(Link, { to: "/layouts-printers/printplekken", className: "text-foreground underline", children: "Standaardregels" }), "."] })] }), _jsxs(CardContent, { className: "grid gap-2 sm:grid-cols-2", children: [DOCUMENT_TYPES.map((d) => {
|
|
80
121
|
const huidig = eigenRoutering.find((r) => r.documenttype === d.value);
|
|
81
|
-
return (_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "min-w-0 flex-1 truncate text-sm", children: documentTypeLabel(d.value) }), _jsxs(Select, { value: huidig?.printer_id ?? VOLG_ROUTERING, onValueChange: (v) => void zetDocument(d.value, v === VOLG_ROUTERING ? null : v), children: [_jsx(SelectTrigger, { className: "w-52", children: _jsx(SelectValue, {}) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: VOLG_ROUTERING, children: "Volg routering" }), rijen.map(({ printer }) => (
|
|
122
|
+
return (_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "min-w-0 flex-1 truncate text-sm", children: documentTypeLabel(d.value) }), _jsxs(Select, { value: huidig?.printer_id ?? VOLG_ROUTERING, onValueChange: (v) => void zetDocument(d.value, v === VOLG_ROUTERING ? null : v), children: [_jsx(SelectTrigger, { className: "w-52", children: _jsx(SelectValue, {}) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: VOLG_ROUTERING, children: "Volg routering" }), rijen.map(({ printer }) => (_jsxs(SelectItem, { value: printer.id, disabled: !isBruikbaar(printer.id), children: [printer.naam, !isBruikbaar(printer.id) ? " (niet gekoppeld aan printplek)" : ""] }, printer.id)))] })] })] }, d.value));
|
|
82
123
|
}), rijen.length === 0 && (_jsx("p", { className: "text-muted-foreground text-sm", children: "Voeg eerst een printer toe op deze werkplek." }))] })] }), _jsxs("div", { className: "grid gap-6 xl:grid-cols-[1fr_340px]", children: [_jsxs("div", { className: "space-y-3", children: [rijen.length === 0 && (_jsx(Card, { children: _jsxs(CardContent, { className: "space-y-4 py-10 text-center", children: [_jsx(Printer, { className: "text-muted-foreground mx-auto h-8 w-8" }), _jsx("p", { className: "text-sm font-medium", children: "Nog geen printers op deze werkplek" }), _jsx(Button, { onClick: () => {
|
|
83
124
|
setBewerken(null);
|
|
84
125
|
setWizard(true);
|
|
85
|
-
}, children: "Printer toevoegen" })] }) })), rijen.map(({ printer, online }) => (_jsx(PrinterKaart, { printer: printer, computer: computer?.naam ?? null, beschikbaar: online, gekozen: printer.id === gekozenPrinter, onKies: () => setGekozenPrinter(printer.id), onTest: () => void drukTestpaginaAf(printer.id, printer.naam), onBewerk: () => {
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
126
|
+
}, children: "Printer toevoegen" })] }) })), rijen.map(({ printer, online }) => (_jsxs("div", { className: "space-y-1", children: [!isBruikbaar(printer.id) && (_jsxs("div", { className: "border-destructive/40 bg-destructive/5 flex items-center justify-between gap-2 rounded-md border px-3 py-2 text-sm", children: [_jsx("span", { children: "Niet gekoppeld aan printplek \u2014 kan nog geen documenten krijgen." }), _jsx(Button, { size: "sm", variant: "outline", onClick: () => void koppel(printer.id), children: "Koppelen" })] })), _jsx(PrinterKaart, { printer: printer, computer: computer?.naam ?? null, beschikbaar: online, gekozen: printer.id === gekozenPrinter, onKies: () => setGekozenPrinter(printer.id), onTest: () => void drukTestpaginaAf(printer.id, printer.naam), onBewerk: () => {
|
|
127
|
+
setBewerken({
|
|
128
|
+
id: printer.id,
|
|
129
|
+
naam: printer.naam,
|
|
130
|
+
locatie: printer.locatie,
|
|
131
|
+
papierformaat: printer.papierformaat,
|
|
132
|
+
});
|
|
133
|
+
setWizard(true);
|
|
134
|
+
}, onVerwijder: async () => {
|
|
135
|
+
try {
|
|
136
|
+
await verwijderPrinter(printer.id);
|
|
137
|
+
toast.success("Printer verwijderd");
|
|
138
|
+
void reload();
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
toast.error("Verwijderen mislukt");
|
|
142
|
+
}
|
|
143
|
+
} })] }, printer.id)))] }), actievePrinter && (_jsxs(Card, { className: "h-fit", children: [_jsxs(CardHeader, { className: "pb-3", children: [_jsx(CardTitle, { className: "text-base", children: "Documenten op deze printer" }), _jsx(CardDescription, { children: actievePrinter.naam })] }), _jsx(CardContent, { className: "space-y-2", children: eigenRoutering.filter((r) => r.printer_id === actievePrinter.id).length === 0 ? (_jsx("p", { className: "text-muted-foreground text-sm", children: "Nog geen documentsoorten naar deze printer gestuurd. Stel dat hierboven in bij \"Wat print deze werkplek\"." })) : (eigenRoutering
|
|
103
144
|
.filter((r) => r.printer_id === actievePrinter.id)
|
|
104
145
|
.map((r) => (_jsx("p", { className: "truncate text-sm", children: documentTypeLabel(r.documenttype) }, r.id)))) })] }))] })] })] }), _jsx(PrinterSetupWizard, { open: wizard, onOpenChange: (v) => {
|
|
105
146
|
setWizard(v);
|
|
106
147
|
if (!v)
|
|
107
148
|
setBewerken(null);
|
|
108
|
-
}, computerFilter: computer?.naam ?? null, bekendeExterneIds: bekendeExterneIds, bekendeLocaties: bekendeLocaties, bewerken: bewerken, onKlaar: () => {
|
|
149
|
+
}, computerFilter: computer?.naam ?? null, printPlekId: plekId, bekendeExterneIds: bekendeExterneIds, bekendeLocaties: bekendeLocaties, bewerken: bewerken, onKlaar: () => {
|
|
109
150
|
void reload();
|
|
110
151
|
void zoek();
|
|
152
|
+
void laadKoppeling();
|
|
111
153
|
} })] }));
|
|
112
154
|
}
|
package/dist-lib/index.d.ts
CHANGED
|
@@ -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';
|
|
@@ -70,10 +62,10 @@ export type { DocumentType, ElementConditie, ElementConfig, ElementStijl, Elemen
|
|
|
70
62
|
export { alleEntiteiten, alleVelden, registreerEntiteit, veldRegisterSubscribe, zoekVeld } from './lib/fieldRegistry.js';
|
|
71
63
|
export type { EntiteitDefinitie, VeldDefinitie, VeldSoort } from './lib/fieldRegistry.js';
|
|
72
64
|
export { VOORBEELD_REGELS, bouwDocumentHtml, conditieVoldoet, voorbeeldContext, vulVelden } from './lib/layoutPreview.js';
|
|
73
|
-
export { bewaarElementen, bewaarPrinter, bewaarVersie, dupliceerLayout, maakLayout,
|
|
65
|
+
export { bewaarElementen, bewaarPrinter, bewaarVersie, dupliceerLayout, layoutConflicten, maakLayout, maakStandaardLayout, maakPrintJob, updateJobStatus, updateLayout, useLayoutDetail, useLayouts, usePrintJobs, usePrintPlekNamen, usePrinters, useVersies, verwijderLayout, verwijderPrinter, zorgVoorFloridayLayouts } from './lib/useDocumentData.js';
|
|
74
66
|
export { jobPickstation, jobPlekLabel, jobPrintPlekId, jobWerkplek } from './lib/printQueue.js';
|
|
75
67
|
export type { PlekNamen } from './lib/printQueue.js';
|
|
76
|
-
export type { PrintJobModel, PrinterModel } from './lib/useDocumentData.js';
|
|
68
|
+
export type { LayoutConflict, PrintJobModel, PrinterModel } from './lib/useDocumentData.js';
|
|
77
69
|
export { beschikbareLayouts, beschikbarePrinters, printDocument, printPdf, printHtml, printVerzendbriefVoorKar, printerVoorWerkplek, printerVoorDocumenttype, printerVoorLayout, volgJobStatus, DubbeleAanvraagFout, } from './lib/printApi.js';
|
|
78
70
|
export type { PrintDocumentInput, PrintDocumentResult, PrintPdfInput, PrintHtmlInput, VerzendbriefVoorKarInput, JobStatus, } from './lib/printApi.js';
|
|
79
71
|
export { printDirect } from './lib/directPrint.js';
|
|
@@ -91,10 +83,15 @@ export { TemplateModuleLogo } from './components/TemplateModuleLogo.js';
|
|
|
91
83
|
export { PrintplekkenPage } from './components/PrintplekkenPage.js';
|
|
92
84
|
export { PrintplekDetailPage } from './components/PrintplekDetailPage.js';
|
|
93
85
|
export { PrintplekWizard } from './components/PrintplekWizard.js';
|
|
94
|
-
export { bewerkPrintplek, koppelBronAanPrintplek, koppelComputerAanPrintplek, maakPrintplek, ontkoppelBron, ontkoppelComputer, printerVoorPrintplek, printplekNaam, printplekVoorBron, printplekVoorComputer, printplekkenLijst, useBeschikbarePrintplekken, useKoppelingVoorBron, usePrintplekken, verwijderPrintplek, zetPrintplekPrinter, } from './lib/printplekken.js';
|
|
95
|
-
export
|
|
86
|
+
export { bewerkPrintplek, koppelBronAanPrintplek, koppelComputerAanPrintplek, maakPrintplek, ontkoppelBron, ontkoppelComputer, printerVoorPrintplek, genegeerdeComputersLijst, useGenegeerdeComputers, negeerComputer, zetComputerTerug, verplaatsPrinterNaarPrintplek, type GenegeerdeComputer, printplekNaam, printplekVoorBron, printplekVoorComputer, printplekkenLijst, useBeschikbarePrintplekken, useKoppelingVoorBron, usePrintplekken, verwijderPrintplek, printplekVerwijderImpact, type PrintplekImpact, zetPrintplekPrinter, wijsPrinterToeAanPrintplek, koppelPrinterLosVanPrintplek, printerGebruik, vervangPrinterOveral, } from './lib/printplekken.js';
|
|
87
|
+
export { PrinterVervangenDialog } from './components/PrinterVervangenDialog.js';
|
|
88
|
+
export { ComputerVerwijderenDialog } from './components/ComputerVerwijderenDialog.js';
|
|
89
|
+
export type { Printplek, PrintplekComputer, PrintplekDocumentPrinter, PrintplekKoppeling, PrintplekPrinter, PrinterGebruik, } from './lib/printplekken.js';
|
|
96
90
|
export { GeenPrinterFout } from './lib/printApi.js';
|
|
97
91
|
export declare const layoutmodule: FlowModule;
|
|
98
92
|
export { voorbeeldPrint } from './lib/voorbeeldPrint.js';
|
|
99
93
|
export { LayoutPrinterSelect } from './components/LayoutPrinterSelect.js';
|
|
94
|
+
export { routeringVoor, useRouteringOverzicht, } from './lib/printRoutering.js';
|
|
95
|
+
export type { RouteringBron, RouteringUitkomst, RouteringInvoer, OvergeslagenRegel, } from './lib/printRoutering.js';
|
|
96
|
+
export { PrintplekVerwijderenDialog } from './components/PrintplekVerwijderenDialog.js';
|
|
100
97
|
//# sourceMappingURL=index.d.ts.map
|
package/dist-lib/index.d.ts.map
CHANGED
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist-lib/index.js
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
// src/index.ts — MODULE CONTRACT (layout-maker)
|
|
3
3
|
// ============================================================================
|
|
4
4
|
import { LayoutTemplate, Printer, FileText, ListChecks } from "lucide-react";
|
|
5
|
-
import { startPdfMapService } from './lib/pdfJobSaver.js';
|
|
6
5
|
import './_core-safelist.js';
|
|
7
6
|
export { LayoutsPage } from './components/LayoutsPage.js';
|
|
8
7
|
export { PrintProgrammaUitleg, WerktHetNiet } from './components/PrintProgrammaUitleg.js';
|
|
@@ -19,12 +18,6 @@ export { bepaalTestOverzicht, verstuurTestprint } from './lib/testprint.js';
|
|
|
19
18
|
export { bedoeldePrinter, formaatDef, paginaCss } from './lib/browserPrint.js';
|
|
20
19
|
export { PrintQueuePage } from './components/PrintQueuePage.js';
|
|
21
20
|
export { annuleerPrintOpdrachten } from './lib/printService.functions.js';
|
|
22
|
-
export { PdfMapAutoSaver } from './components/PdfMapAutoSaver.js';
|
|
23
|
-
export { PdfMapToestemmingBanner } from './components/PdfMapToestemmingBanner.js';
|
|
24
|
-
export { startPdfMapGlobaleBanner } from './components/PdfMapGlobaleBanner.js';
|
|
25
|
-
export { bewaarPdfJobZodraKlaar, bewaarPdfJobOpnieuw, controleerPdfMap, startPdfMapService } from './lib/pdfJobSaver.js';
|
|
26
|
-
export { PDF_OPSLAG_STATUSSEN, PDF_OPSLAG_FOUTSTATUSSEN, PDF_OPSLAG_LABEL, PDF_OPSLAG_MELDING, isOpslagFout, } from './lib/pdfOpslagStatus.js';
|
|
27
|
-
export { bewaarInPdfMap, draaitInIframe, herstelPdfMapToestemming, heeftPdfMap, kiesPdfMap, koppelPdfMapAanPrintplek, luisterNaarPdfMapWijziging, lokalePdfPrintplek, mapKiezenMogelijk, openInEigenTabblad, pdfMapKoppeling, pdfMapNaam, pdfMapToestemming } from './lib/pdfMap.js';
|
|
28
21
|
export { AiLayoutImportDialog } from './components/AiLayoutImportDialog.js';
|
|
29
22
|
export { LogosPage, LogoThumbnail } from './components/LogosPage.js';
|
|
30
23
|
export { PakbonBuilderPage } from './components/PakbonBuilderPage.js';
|
|
@@ -56,7 +49,7 @@ export { DocumentSettingsPanel } from './components/DocumentSettingsPanel.js';
|
|
|
56
49
|
export { DOCUMENT_TYPES, ELEMENT_STANDAARD, FLORIDAY_LAYOUT_TOELICHTING, FLORIDAY_SYSTEEM_LAYOUTS, PAPIERFORMATEN, STANDAARD_KOLOMMEN, STANDAARD_LAYOUTS, STANDAARD_LAYOUT_TOELICHTING, STANDAARD_STIJL, documentTypeLabel, isFloridayLayout } from './lib/documentTypes.js';
|
|
57
50
|
export { alleEntiteiten, alleVelden, registreerEntiteit, veldRegisterSubscribe, zoekVeld } from './lib/fieldRegistry.js';
|
|
58
51
|
export { VOORBEELD_REGELS, bouwDocumentHtml, conditieVoldoet, voorbeeldContext, vulVelden } from './lib/layoutPreview.js';
|
|
59
|
-
export { bewaarElementen, bewaarPrinter, bewaarVersie, dupliceerLayout, maakLayout,
|
|
52
|
+
export { bewaarElementen, bewaarPrinter, bewaarVersie, dupliceerLayout, layoutConflicten, maakLayout, maakStandaardLayout, maakPrintJob, updateJobStatus, updateLayout, useLayoutDetail, useLayouts, usePrintJobs, usePrintPlekNamen, usePrinters, useVersies, verwijderLayout, verwijderPrinter, zorgVoorFloridayLayouts } from './lib/useDocumentData.js';
|
|
60
53
|
export { jobPickstation, jobPlekLabel, jobPrintPlekId, jobWerkplek } from './lib/printQueue.js';
|
|
61
54
|
export { beschikbareLayouts, beschikbarePrinters, printDocument, printPdf, printHtml, printVerzendbriefVoorKar, printerVoorWerkplek, printerVoorDocumenttype, printerVoorLayout, volgJobStatus, DubbeleAanvraagFout, } from './lib/printApi.js';
|
|
62
55
|
export { printDirect } from './lib/directPrint.js';
|
|
@@ -71,12 +64,14 @@ export { TemplateModuleLogo } from './components/TemplateModuleLogo.js';
|
|
|
71
64
|
export { PrintplekkenPage } from './components/PrintplekkenPage.js';
|
|
72
65
|
export { PrintplekDetailPage } from './components/PrintplekDetailPage.js';
|
|
73
66
|
export { PrintplekWizard } from './components/PrintplekWizard.js';
|
|
74
|
-
export { bewerkPrintplek, koppelBronAanPrintplek, koppelComputerAanPrintplek, maakPrintplek, ontkoppelBron, ontkoppelComputer, printerVoorPrintplek, printplekNaam, printplekVoorBron, printplekVoorComputer, printplekkenLijst, useBeschikbarePrintplekken, useKoppelingVoorBron, usePrintplekken, verwijderPrintplek, zetPrintplekPrinter, } from './lib/printplekken.js';
|
|
67
|
+
export { bewerkPrintplek, koppelBronAanPrintplek, koppelComputerAanPrintplek, maakPrintplek, ontkoppelBron, ontkoppelComputer, printerVoorPrintplek, genegeerdeComputersLijst, useGenegeerdeComputers, negeerComputer, zetComputerTerug, verplaatsPrinterNaarPrintplek, printplekNaam, printplekVoorBron, printplekVoorComputer, printplekkenLijst, useBeschikbarePrintplekken, useKoppelingVoorBron, usePrintplekken, verwijderPrintplek, printplekVerwijderImpact, zetPrintplekPrinter, wijsPrinterToeAanPrintplek, koppelPrinterLosVanPrintplek, printerGebruik, vervangPrinterOveral, } from './lib/printplekken.js';
|
|
68
|
+
export { PrinterVervangenDialog } from './components/PrinterVervangenDialog.js';
|
|
69
|
+
export { ComputerVerwijderenDialog } from './components/ComputerVerwijderenDialog.js';
|
|
75
70
|
export { GeenPrinterFout } from './lib/printApi.js';
|
|
76
71
|
export const layoutmodule = {
|
|
77
72
|
id: "layout-maker",
|
|
78
73
|
name: "Layouts en printers",
|
|
79
|
-
version: "1.
|
|
74
|
+
version: "1.50.0",
|
|
80
75
|
nav: {
|
|
81
76
|
label: "Layouts en printers",
|
|
82
77
|
href: "/layouts-printers/documenten",
|
|
@@ -89,8 +84,7 @@ export const layoutmodule = {
|
|
|
89
84
|
},
|
|
90
85
|
settingsCards: [],
|
|
91
86
|
};
|
|
92
|
-
// De shell importeert dit modulecontract op iedere pagina. Daardoor blijft de
|
|
93
|
-
// lokale PDF-afhandelaar actief, ook buiten de Layout Maker-routes.
|
|
94
|
-
startPdfMapService();
|
|
95
87
|
export { voorbeeldPrint } from './lib/voorbeeldPrint.js';
|
|
96
88
|
export { LayoutPrinterSelect } from './components/LayoutPrinterSelect.js';
|
|
89
|
+
export { routeringVoor, useRouteringOverzicht, } from './lib/printRoutering.js';
|
|
90
|
+
export { PrintplekVerwijderenDialog } from './components/PrintplekVerwijderenDialog.js';
|