@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.
Files changed (95) hide show
  1. package/dist-lib/components/ComputerVerwijderenDialog.d.ts +16 -0
  2. package/dist-lib/components/ComputerVerwijderenDialog.d.ts.map +1 -0
  3. package/dist-lib/components/ComputerVerwijderenDialog.js +38 -0
  4. package/dist-lib/components/ComputersLijst.d.ts.map +1 -1
  5. package/dist-lib/components/ComputersLijst.js +5 -2
  6. package/dist-lib/components/DocumentenPage.d.ts.map +1 -1
  7. package/dist-lib/components/DocumentenPage.js +2 -3
  8. package/dist-lib/components/LayoutPrinterSelect.d.ts +3 -5
  9. package/dist-lib/components/LayoutPrinterSelect.d.ts.map +1 -1
  10. package/dist-lib/components/LayoutPrinterSelect.js +40 -17
  11. package/dist-lib/components/LayoutsPage.d.ts.map +1 -1
  12. package/dist-lib/components/LayoutsPage.js +28 -18
  13. package/dist-lib/components/PrintQueuePage.d.ts.map +1 -1
  14. package/dist-lib/components/PrintQueuePage.js +5 -71
  15. package/dist-lib/components/PrintenPage.d.ts.map +1 -1
  16. package/dist-lib/components/PrintenPage.js +2 -3
  17. package/dist-lib/components/PrinterSetupWizard.d.ts +3 -1
  18. package/dist-lib/components/PrinterSetupWizard.d.ts.map +1 -1
  19. package/dist-lib/components/PrinterSetupWizard.js +15 -29
  20. package/dist-lib/components/PrinterVervangenDialog.d.ts +14 -0
  21. package/dist-lib/components/PrinterVervangenDialog.d.ts.map +1 -0
  22. package/dist-lib/components/PrinterVervangenDialog.js +44 -0
  23. package/dist-lib/components/PrintersPage.d.ts.map +1 -1
  24. package/dist-lib/components/PrintersPage.js +2 -2
  25. package/dist-lib/components/PrintplekDetailPage.d.ts.map +1 -1
  26. package/dist-lib/components/PrintplekDetailPage.js +173 -68
  27. package/dist-lib/components/PrintplekVerwijderenDialog.d.ts +9 -0
  28. package/dist-lib/components/PrintplekVerwijderenDialog.d.ts.map +1 -0
  29. package/dist-lib/components/PrintplekVerwijderenDialog.js +34 -0
  30. package/dist-lib/components/PrintplekWizard.d.ts.map +1 -1
  31. package/dist-lib/components/PrintplekWizard.js +3 -85
  32. package/dist-lib/components/PrintplekkenPage.d.ts.map +1 -1
  33. package/dist-lib/components/PrintplekkenPage.js +28 -6
  34. package/dist-lib/components/WerkplekConfiguratiePage.d.ts.map +1 -1
  35. package/dist-lib/components/WerkplekConfiguratiePage.js +67 -25
  36. package/dist-lib/index.d.ts +9 -12
  37. package/dist-lib/index.d.ts.map +1 -1
  38. package/dist-lib/index.js +7 -13
  39. package/dist-lib/integrations/supabase/auth-middleware.d.ts +1414 -24
  40. package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
  41. package/dist-lib/integrations/supabase/client.server.d.ts +1414 -24
  42. package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
  43. package/dist-lib/integrations/supabase/moduleClient.d.ts +1414 -24
  44. package/dist-lib/integrations/supabase/moduleClient.d.ts.map +1 -1
  45. package/dist-lib/integrations/supabase/types.d.ts +1471 -42
  46. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  47. package/dist-lib/lib/aiLayout.functions.d.ts +1414 -24
  48. package/dist-lib/lib/aiLayout.functions.d.ts.map +1 -1
  49. package/dist-lib/lib/documentRoutering.d.ts +2 -1
  50. package/dist-lib/lib/documentRoutering.d.ts.map +1 -1
  51. package/dist-lib/lib/documentRoutering.js +5 -8
  52. package/dist-lib/lib/foutTekst.d.ts +3 -0
  53. package/dist-lib/lib/foutTekst.d.ts.map +1 -0
  54. package/dist-lib/lib/foutTekst.js +25 -0
  55. package/dist-lib/lib/printApi.d.ts +0 -2
  56. package/dist-lib/lib/printApi.d.ts.map +1 -1
  57. package/dist-lib/lib/printApi.js +13 -60
  58. package/dist-lib/lib/printQueue.server.d.ts +8 -0
  59. package/dist-lib/lib/printQueue.server.d.ts.map +1 -1
  60. package/dist-lib/lib/printQueue.server.js +55 -133
  61. package/dist-lib/lib/printRoutering.d.ts +34 -0
  62. package/dist-lib/lib/printRoutering.d.ts.map +1 -0
  63. package/dist-lib/lib/printRoutering.js +69 -0
  64. package/dist-lib/lib/printService.functions.d.ts +6980 -30
  65. package/dist-lib/lib/printService.functions.d.ts.map +1 -1
  66. package/dist-lib/lib/printplekken.d.ts +67 -2
  67. package/dist-lib/lib/printplekken.d.ts.map +1 -1
  68. package/dist-lib/lib/printplekken.js +141 -10
  69. package/dist-lib/lib/useDocumentData.d.ts +15 -10
  70. package/dist-lib/lib/useDocumentData.d.ts.map +1 -1
  71. package/dist-lib/lib/useDocumentData.js +43 -34
  72. package/dist-lib/lib/voorbeeldPrint.d.ts.map +1 -1
  73. package/dist-lib/lib/voorbeeldPrint.js +7 -39
  74. package/package.json +2 -2
  75. package/dist-lib/components/PdfMapAutoSaver.d.ts +0 -6
  76. package/dist-lib/components/PdfMapAutoSaver.d.ts.map +0 -1
  77. package/dist-lib/components/PdfMapAutoSaver.js +0 -12
  78. package/dist-lib/components/PdfMapGlobaleBanner.d.ts +0 -12
  79. package/dist-lib/components/PdfMapGlobaleBanner.d.ts.map +0 -1
  80. package/dist-lib/components/PdfMapGlobaleBanner.js +0 -30
  81. package/dist-lib/components/PdfMapToestemmingBanner.d.ts +0 -8
  82. package/dist-lib/components/PdfMapToestemmingBanner.d.ts.map +0 -1
  83. package/dist-lib/components/PdfMapToestemmingBanner.js +0 -245
  84. package/dist-lib/lib/pdfJobSaver.d.ts +0 -24
  85. package/dist-lib/lib/pdfJobSaver.d.ts.map +0 -1
  86. package/dist-lib/lib/pdfJobSaver.js +0 -405
  87. package/dist-lib/lib/pdfMap.d.ts +0 -90
  88. package/dist-lib/lib/pdfMap.d.ts.map +0 -1
  89. package/dist-lib/lib/pdfMap.js +0 -349
  90. package/dist-lib/lib/pdfOpslagStatus.d.ts +0 -23
  91. package/dist-lib/lib/pdfOpslagStatus.d.ts.map +0 -1
  92. package/dist-lib/lib/pdfOpslagStatus.js +0 -74
  93. package/dist-lib/lib/pdfPrinter.d.ts +0 -9
  94. package/dist-lib/lib/pdfPrinter.d.ts.map +0 -1
  95. package/dist-lib/lib/pdfPrinter.js +0 -34
@@ -15,6 +15,7 @@ export interface PrintplekDocumentPrinter {
15
15
  documenttype: string;
16
16
  printer_id: string | null;
17
17
  papierformaat: string | null;
18
+ printer_ontbreekt_sinds?: string | null;
18
19
  }
19
20
  export interface PrintplekKoppeling {
20
21
  id: string;
@@ -30,6 +31,7 @@ export declare function usePrintplekken(): {
30
31
  computers: PrintplekComputer[];
31
32
  regels: PrintplekDocumentPrinter[];
32
33
  koppelingen: PrintplekKoppeling[];
34
+ toegewezen: PrintplekPrinter[];
33
35
  laden: boolean;
34
36
  fout: string | null;
35
37
  reload: (stil?: boolean) => Promise<void>;
@@ -52,7 +54,19 @@ export declare function bewerkPrintplek(id: string, velden: {
52
54
  omschrijving?: string | null;
53
55
  actief?: boolean;
54
56
  }): Promise<void>;
55
- export declare function verwijderPrintplek(id: string): Promise<void>;
57
+ export interface PrintplekImpact {
58
+ computers: string[];
59
+ regels: number;
60
+ printers: number;
61
+ koppelingen: string[];
62
+ }
63
+ /** Wat er verdwijnt als deze printplek wordt verwijderd. */
64
+ export declare function printplekVerwijderImpact(id: string): Promise<PrintplekImpact>;
65
+ /**
66
+ * Verwijdert een printplek in één databasebewerking: computers en printers
67
+ * worden losgekoppeld (blijven bestaan), plek-eigen regels verdwijnen.
68
+ */
69
+ export declare function verwijderPrintplek(id: string): Promise<PrintplekImpact>;
56
70
  /** Zet een computer (werkplek) bij een printplek. Een computer hoort bij één plek. */
57
71
  export declare function koppelComputerAanPrintplek(printPlekId: string, computerNaam: string): Promise<void>;
58
72
  export declare function ontkoppelComputer(computerNaam: string): Promise<void>;
@@ -66,8 +80,59 @@ export declare function koppelBronAanPrintplek(printPlekId: string, bron: string
66
80
  export declare function ontkoppelBron(bron: string, bronId: string): Promise<void>;
67
81
  /** De printplek die bij een externe eenheid hoort, of `null`. */
68
82
  export declare function printplekVoorBron(bron: string, bronId: string): Promise<string | null>;
69
- /** De printer die op deze printplek voor deze documentsoort is ingesteld. */
83
+ /**
84
+ * De printer die op deze printplek voor deze documentsoort is ingesteld via een
85
+ * printplek-eigen regel. Berekend met de gedeelde routering (`printer_routering`),
86
+ * dus exact wat er bij het printen gebeurt.
87
+ */
70
88
  export declare function printerVoorPrintplek(printPlekId: string, documenttype: string): Promise<string | null>;
89
+ export interface GenegeerdeComputer {
90
+ id: string;
91
+ computer_naam: string;
92
+ genegeerd_op: string;
93
+ }
94
+ export declare function genegeerdeComputersLijst(): Promise<GenegeerdeComputer[]>;
95
+ export declare function useGenegeerdeComputers(): {
96
+ genegeerd: GenegeerdeComputer[];
97
+ reload: () => Promise<void>;
98
+ };
99
+ /**
100
+ * Verwijdert een computer: haalt hem van zijn printplek en zet hem op de
101
+ * negeerlijst. `printers` bepaalt wat er met zijn printers gebeurt:
102
+ * "verwijderen" koppelt ze los van de plek, of een printplek-id om ze te verplaatsen.
103
+ */
104
+ export declare function negeerComputer(computerNaam: string, printers: {
105
+ printerIds: string[];
106
+ vanPlek: string | null;
107
+ actie: "verwijderen" | {
108
+ naarPlek: string;
109
+ };
110
+ } | null): Promise<void>;
111
+ export declare function zetComputerTerug(computerNaam: string): Promise<void>;
112
+ /**
113
+ * Verplaatst een printer naar een andere printplek, inclusief de
114
+ * printplek-eigen regels die naar hem wezen.
115
+ */
116
+ export declare function verplaatsPrinterNaarPrintplek(printerId: string, vanPlek: string, naarPlek: string): Promise<void>;
117
+ export interface PrintplekPrinter {
118
+ id: string;
119
+ print_plek_id: string;
120
+ printer_id: string;
121
+ toegevoegd_op: string;
122
+ }
123
+ export declare function wijsPrinterToeAanPrintplek(printPlekId: string, printerId: string): Promise<void>;
124
+ /** Koppelt los; regels die ernaar wezen worden zichtbaar leeggemaakt. */
125
+ export declare function koppelPrinterLosVanPrintplek(printPlekId: string, printerId: string): Promise<void>;
126
+ export interface PrinterGebruik {
127
+ printplek_regels: number;
128
+ werkplek_regels: number;
129
+ layout_koppelingen: number;
130
+ standaardregels: number;
131
+ printplekken: number;
132
+ }
133
+ export declare function printerGebruik(printerId: string): Promise<PrinterGebruik>;
134
+ /** Zet alle verwijzingen in één keer over naar `nieuw` (of `null` = geen printer). */
135
+ export declare function vervangPrinterOveral(oud: string, nieuw: string | null): Promise<Record<string, number>>;
71
136
  /** De printplek waar een computer/werkplek bij hoort, of `null`. */
72
137
  export declare function printplekVoorComputer(computerNaam: string): Promise<string | null>;
73
138
  /** Naam van een printplek, voor nette foutmeldingen. */
@@ -1 +1 @@
1
- {"version":3,"file":"printplekken.d.ts","sourceRoot":"","sources":["../../src/lib/printplekken.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"printplekken.d.ts","sourceRoot":"","sources":["../../src/lib/printplekken.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@
6
6
  // ============================================================================
7
7
  import { useCallback, useEffect, useState } from "react";
8
8
  import { supabase } from "./supabaseClient.js";
9
+ import { routeringVoor } from "./printRoutering.js";
9
10
  const arr = (v) => (Array.isArray(v) ? v : []);
10
11
  // ---------------------------------------------------------------------------
11
12
  // Lezen
@@ -16,18 +17,20 @@ export function usePrintplekken() {
16
17
  const [computers, setComputers] = useState([]);
17
18
  const [regels, setRegels] = useState([]);
18
19
  const [koppelingen, setKoppelingen] = useState([]);
20
+ const [toegewezen, setToegewezen] = useState([]);
19
21
  const [laden, setLaden] = useState(true);
20
22
  const [fout, setFout] = useState(null);
21
23
  const load = useCallback(async (stil = false) => {
22
24
  if (!stil)
23
25
  setLaden(true);
24
- const [p, c, r, k] = await Promise.all([
26
+ const [p, c, r, k, t] = await Promise.all([
25
27
  supabase.from("print_plekken").select("*").order("naam"),
26
28
  supabase.from("print_plek_computers").select("*"),
27
29
  supabase.from("document_printplek_printers").select("*"),
28
30
  supabase.from("print_plek_koppelingen").select("*"),
31
+ supabase.from("print_plek_printers").select("*"),
29
32
  ]);
30
- const eersteFout = p.error ?? c.error ?? r.error ?? k.error;
33
+ const eersteFout = p.error ?? c.error ?? r.error ?? k.error ?? t.error;
31
34
  setFout(eersteFout
32
35
  ? "Printplekken konden niet worden geladen. Voer sql/print-schema.sql uit in deze shell."
33
36
  : null);
@@ -35,12 +38,13 @@ export function usePrintplekken() {
35
38
  setComputers(arr(c.data));
36
39
  setRegels(arr(r.data));
37
40
  setKoppelingen(arr(k.data));
41
+ setToegewezen(arr(t.data));
38
42
  setLaden(false);
39
43
  }, []);
40
44
  useEffect(() => {
41
45
  void load();
42
46
  }, [load]);
43
- return { plekken, computers, regels, koppelingen, laden, fout, reload: load };
47
+ return { plekken, computers, regels, koppelingen, toegewezen, laden, fout, reload: load };
44
48
  }
45
49
  /**
46
50
  * Eenvoudige lijst van actieve printplekken. Bedoeld voor andere modules die
@@ -86,10 +90,31 @@ export async function bewerkPrintplek(id, velden) {
86
90
  if (error)
87
91
  throw error;
88
92
  }
93
+ function naarImpact(data) {
94
+ const d = (data ?? {});
95
+ return {
96
+ computers: Array.isArray(d.computers) ? d.computers : [],
97
+ regels: Number(d.regels ?? 0),
98
+ printers: Number(d.printers ?? 0),
99
+ koppelingen: Array.isArray(d.koppelingen) ? d.koppelingen : [],
100
+ };
101
+ }
102
+ /** Wat er verdwijnt als deze printplek wordt verwijderd. */
103
+ export async function printplekVerwijderImpact(id) {
104
+ const { data, error } = await supabase.rpc("printplek_verwijder_impact", { _id: id });
105
+ if (error)
106
+ throw error;
107
+ return naarImpact(data);
108
+ }
109
+ /**
110
+ * Verwijdert een printplek in één databasebewerking: computers en printers
111
+ * worden losgekoppeld (blijven bestaan), plek-eigen regels verdwijnen.
112
+ */
89
113
  export async function verwijderPrintplek(id) {
90
- const { error } = await supabase.from("print_plekken").delete().eq("id", id);
114
+ const { data, error } = await supabase.rpc("verwijder_printplek", { _id: id });
91
115
  if (error)
92
116
  throw error;
117
+ return naarImpact(data);
93
118
  }
94
119
  /** Zet een computer (werkplek) bij een printplek. Een computer hoort bij één plek. */
95
120
  export async function koppelComputerAanPrintplek(printPlekId, computerNaam) {
@@ -117,6 +142,8 @@ export async function zetPrintplekPrinter(printPlekId, documenttype, printerId,
117
142
  throw error;
118
143
  return;
119
144
  }
145
+ // Een printer kiezen voor deze plek is ook een expliciete toewijzing.
146
+ await wijsPrinterToeAanPrintplek(printPlekId, printerId);
120
147
  const { error } = await supabase.from("document_printplek_printers").upsert({
121
148
  print_plek_id: printPlekId,
122
149
  documenttype,
@@ -162,18 +189,122 @@ export async function printplekVoorBron(bron, bronId) {
162
189
  // ---------------------------------------------------------------------------
163
190
  // Printerkeuze
164
191
  // ---------------------------------------------------------------------------
165
- /** De printer die op deze printplek voor deze documentsoort is ingesteld. */
192
+ /**
193
+ * De printer die op deze printplek voor deze documentsoort is ingesteld via een
194
+ * printplek-eigen regel. Berekend met de gedeelde routering (`printer_routering`),
195
+ * dus exact wat er bij het printen gebeurt.
196
+ */
166
197
  export async function printerVoorPrintplek(printPlekId, documenttype) {
167
198
  const id = (printPlekId ?? "").trim();
168
199
  if (!id)
169
200
  return null;
201
+ const u = await routeringVoor({ documenttype, printplekId: id });
202
+ return u.bron === "printplek" ? u.printer_id : null;
203
+ }
204
+ export async function genegeerdeComputersLijst() {
205
+ const { data } = await supabase
206
+ .from("print_genegeerde_computers")
207
+ .select("*")
208
+ .order("genegeerd_op", { ascending: false });
209
+ return arr(data);
210
+ }
211
+ export function useGenegeerdeComputers() {
212
+ const [genegeerd, setGenegeerd] = useState([]);
213
+ const load = useCallback(async () => setGenegeerd(await genegeerdeComputersLijst()), []);
214
+ useEffect(() => {
215
+ void load();
216
+ }, [load]);
217
+ return { genegeerd, reload: load };
218
+ }
219
+ /**
220
+ * Verwijdert een computer: haalt hem van zijn printplek en zet hem op de
221
+ * negeerlijst. `printers` bepaalt wat er met zijn printers gebeurt:
222
+ * "verwijderen" koppelt ze los van de plek, of een printplek-id om ze te verplaatsen.
223
+ */
224
+ export async function negeerComputer(computerNaam, printers) {
225
+ const naam = computerNaam.trim();
226
+ if (printers && printers.vanPlek) {
227
+ for (const pid of printers.printerIds) {
228
+ if (printers.actie === "verwijderen")
229
+ await koppelPrinterLosVanPrintplek(printers.vanPlek, pid);
230
+ else
231
+ await verplaatsPrinterNaarPrintplek(pid, printers.vanPlek, printers.actie.naarPlek);
232
+ }
233
+ }
234
+ await ontkoppelComputer(naam);
235
+ const { error } = await supabase
236
+ .from("print_genegeerde_computers")
237
+ .upsert({ computer_naam: naam }, { onConflict: "computer_naam" });
238
+ if (error)
239
+ throw error;
240
+ }
241
+ export async function zetComputerTerug(computerNaam) {
242
+ const { error } = await supabase
243
+ .from("print_genegeerde_computers")
244
+ .delete()
245
+ .eq("computer_naam", computerNaam.trim());
246
+ if (error)
247
+ throw error;
248
+ }
249
+ /**
250
+ * Verplaatst een printer naar een andere printplek, inclusief de
251
+ * printplek-eigen regels die naar hem wezen.
252
+ */
253
+ export async function verplaatsPrinterNaarPrintplek(printerId, vanPlek, naarPlek) {
254
+ if (vanPlek === naarPlek)
255
+ return;
256
+ await wijsPrinterToeAanPrintplek(naarPlek, printerId);
170
257
  const { data } = await supabase
171
258
  .from("document_printplek_printers")
172
- .select("printer_id")
173
- .eq("print_plek_id", id)
174
- .eq("documenttype", documenttype)
175
- .maybeSingle();
176
- return data?.printer_id ?? null;
259
+ .select("documenttype, papierformaat")
260
+ .eq("print_plek_id", vanPlek)
261
+ .eq("printer_id", printerId);
262
+ for (const r of arr(data)) {
263
+ await zetPrintplekPrinter(naarPlek, r.documenttype, printerId, r.papierformaat);
264
+ }
265
+ await koppelPrinterLosVanPrintplek(vanPlek, printerId);
266
+ }
267
+ export async function wijsPrinterToeAanPrintplek(printPlekId, printerId) {
268
+ const { error } = await supabase
269
+ .from("print_plek_printers")
270
+ .upsert({ print_plek_id: printPlekId, printer_id: printerId }, {
271
+ onConflict: "print_plek_id,printer_id",
272
+ });
273
+ if (error)
274
+ throw error;
275
+ }
276
+ /** Koppelt los; regels die ernaar wezen worden zichtbaar leeggemaakt. */
277
+ export async function koppelPrinterLosVanPrintplek(printPlekId, printerId) {
278
+ const { error } = await supabase
279
+ .from("print_plek_printers")
280
+ .delete()
281
+ .eq("print_plek_id", printPlekId)
282
+ .eq("printer_id", printerId);
283
+ if (error)
284
+ throw error;
285
+ }
286
+ export async function printerGebruik(printerId) {
287
+ const { data, error } = await supabase.rpc("printer_gebruik", { _printer: printerId });
288
+ if (error)
289
+ throw error;
290
+ const d = (data ?? {});
291
+ return {
292
+ printplek_regels: Number(d.printplek_regels ?? 0),
293
+ werkplek_regels: Number(d.werkplek_regels ?? 0),
294
+ layout_koppelingen: Number(d.layout_koppelingen ?? 0),
295
+ standaardregels: Number(d.standaardregels ?? 0),
296
+ printplekken: Number(d.printplekken ?? 0),
297
+ };
298
+ }
299
+ /** Zet alle verwijzingen in één keer over naar `nieuw` (of `null` = geen printer). */
300
+ export async function vervangPrinterOveral(oud, nieuw) {
301
+ const { data, error } = await supabase.rpc("vervang_printer", {
302
+ _oud: oud,
303
+ _nieuw: nieuw,
304
+ });
305
+ if (error)
306
+ throw error;
307
+ return (data ?? {});
177
308
  }
178
309
  /** De printplek waar een computer/werkplek bij hoort, of `null`. */
179
310
  export async function printplekVoorComputer(computerNaam) {
@@ -62,6 +62,21 @@ export declare function maakLayout(input: {
62
62
  config?: Record<string, unknown>;
63
63
  }): Promise<string>;
64
64
  export declare function dupliceerLayout(id: string): Promise<string>;
65
+ /**
66
+ * Maakt deze layout de standaard voor zijn documentsoort + bron. De database
67
+ * zet de standaard bij de andere layouts van dezelfde soort en bron vanzelf
68
+ * uit (net als `wisStandaard` bij logo's) en staat er nooit twee toe.
69
+ */
70
+ export declare function maakStandaardLayout(id: string): Promise<void>;
71
+ export interface LayoutConflict {
72
+ documenttype: string;
73
+ bron: string;
74
+ actief: LayoutModel[];
75
+ winnaar: LayoutModel;
76
+ heeftStandaard: boolean;
77
+ }
78
+ /** Documentsoorten met meer dan één actieve layout binnen dezelfde bron. */
79
+ export declare function layoutConflicten(layouts: LayoutModel[]): LayoutConflict[];
65
80
  export declare function verwijderLayout(id: string): Promise<void>;
66
81
  export declare function updateLayout(id: string, patch: Record<string, unknown>): Promise<void>;
67
82
  export declare function useLayoutDetail(layoutId: string): {
@@ -86,21 +101,11 @@ export declare function useVersies(layoutId: string): {
86
101
  };
87
102
  export declare function usePrinters(): {
88
103
  printers: PrinterModel[];
89
- koppelingen: {
90
- layout_id: string;
91
- printer_id: string;
92
- }[];
93
104
  loading: boolean;
94
105
  reload: (stil?: boolean) => Promise<void>;
95
106
  };
96
107
  export declare function bewaarPrinter(input: Record<string, unknown>, id?: string): Promise<void>;
97
108
  export declare function verwijderPrinter(id: string): Promise<void>;
98
- /**
99
- * Eén printer aan een layout hangen (of loskoppelen met null). Vervangt de
100
- * bestaande koppeling(en), zodat de printerkeuze bij een document eenduidig is.
101
- */
102
- export declare function zetLayoutPrinter(layoutId: string, printerId: string | null): Promise<void>;
103
- export declare function toggleKoppeling(layoutId: string, printerId: string, aan: boolean): Promise<void>;
104
109
  export declare function usePrintJobs(): {
105
110
  jobs: PrintJobModel[];
106
111
  loading: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"useDocumentData.d.ts","sourceRoot":"","sources":["../../src/lib/useDocumentData.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useDocumentData.d.ts","sourceRoot":"","sources":["../../src/lib/useDocumentData.ts"],"names":[],"mappings":"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"}
@@ -196,6 +196,47 @@ export async function dupliceerLayout(id) {
196
196
  await supabase.from("document_layout_elements").insert(kopie);
197
197
  return nieuwId;
198
198
  }
199
+ /**
200
+ * Maakt deze layout de standaard voor zijn documentsoort + bron. De database
201
+ * zet de standaard bij de andere layouts van dezelfde soort en bron vanzelf
202
+ * uit (net als `wisStandaard` bij logo's) en staat er nooit twee toe.
203
+ */
204
+ export async function maakStandaardLayout(id) {
205
+ const { error } = await supabase
206
+ .from("document_layouts")
207
+ .update({ is_standaard: true, actief: true })
208
+ .eq("id", id);
209
+ if (error)
210
+ throw error;
211
+ }
212
+ /** Documentsoorten met meer dan één actieve layout binnen dezelfde bron. */
213
+ export function layoutConflicten(layouts) {
214
+ const groepen = new Map();
215
+ for (const l of Array.isArray(layouts) ? layouts : []) {
216
+ if (!l.actief)
217
+ continue;
218
+ const bron = String(l.bron ?? "eigen");
219
+ const k = `${l.documenttype}::${bron}`;
220
+ groepen.set(k, [...(groepen.get(k) ?? []), l]);
221
+ }
222
+ const uit = [];
223
+ for (const [k, lijst] of groepen) {
224
+ if (lijst.length < 2)
225
+ continue;
226
+ const [documenttype, bron] = k.split("::");
227
+ // Zelfde volgorde als het printen: standaard eerst, dan laatst bewerkt.
228
+ const gesorteerd = [...lijst].sort((a, b) => Number(b.is_standaard) - Number(a.is_standaard) ||
229
+ String(b.updated_at ?? "").localeCompare(String(a.updated_at ?? "")));
230
+ uit.push({
231
+ documenttype,
232
+ bron,
233
+ actief: gesorteerd,
234
+ winnaar: gesorteerd[0],
235
+ heeftStandaard: gesorteerd[0].is_standaard,
236
+ });
237
+ }
238
+ return uit;
239
+ }
199
240
  export async function verwijderLayout(id) {
200
241
  const { error } = await supabase.from("document_layouts").delete().eq("id", id);
201
242
  if (error)
@@ -337,23 +378,18 @@ export function useVersies(layoutId) {
337
378
  // --- Printers --------------------------------------------------------------
338
379
  export function usePrinters() {
339
380
  const [printers, setPrinters] = useState([]);
340
- const [koppelingen, setKoppelingen] = useState([]);
341
381
  const [loading, setLoading] = useState(true);
342
382
  const load = useCallback(async (stil = false) => {
343
383
  if (!stil)
344
384
  setLoading(true);
345
- const [{ data: p }, { data: m }] = await Promise.all([
346
- supabase.from("printers").select("*").order("naam"),
347
- supabase.from("printer_mappings").select("layout_id, printer_id"),
348
- ]);
385
+ const { data: p } = await supabase.from("printers").select("*").order("naam");
349
386
  setPrinters(arr(p));
350
- setKoppelingen(arr(m));
351
387
  setLoading(false);
352
388
  }, []);
353
389
  useEffect(() => {
354
390
  void load();
355
391
  }, [load]);
356
- return { printers, koppelingen, loading, reload: load };
392
+ return { printers, loading, reload: load };
357
393
  }
358
394
  export async function bewaarPrinter(input, id) {
359
395
  const q = id
@@ -371,33 +407,6 @@ export async function verwijderPrinter(id) {
371
407
  if (error)
372
408
  throw error;
373
409
  }
374
- /**
375
- * Eén printer aan een layout hangen (of loskoppelen met null). Vervangt de
376
- * bestaande koppeling(en), zodat de printerkeuze bij een document eenduidig is.
377
- */
378
- export async function zetLayoutPrinter(layoutId, printerId) {
379
- const { error: delError } = await supabase
380
- .from("printer_mappings")
381
- .delete()
382
- .eq("layout_id", layoutId);
383
- if (delError)
384
- throw delError;
385
- if (!printerId)
386
- return;
387
- const { error } = await supabase
388
- .from("printer_mappings")
389
- .insert({ layout_id: layoutId, printer_id: printerId });
390
- if (error)
391
- throw error;
392
- }
393
- export async function toggleKoppeling(layoutId, printerId, aan) {
394
- if (aan) {
395
- await supabase.from("printer_mappings").insert({ layout_id: layoutId, printer_id: printerId });
396
- }
397
- else {
398
- await supabase.from("printer_mappings").delete().eq("layout_id", layoutId).eq("printer_id", printerId);
399
- }
400
- }
401
410
  // --- Printwachtrij ---------------------------------------------------------
402
411
  export function usePrintJobs() {
403
412
  const [jobs, setJobs] = useState([]);
@@ -1 +1 @@
1
- {"version":3,"file":"voorbeeldPrint.d.ts","sourceRoot":"","sources":["../../src/lib/voorbeeldPrint.ts"],"names":[],"mappings":"AAQA,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,YAAY,CAAC;AAKpB,MAAM,WAAW,eAAe;IAC9B,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,wFAAwF;AACxF,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,eAAe,EACvB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,WAAW,CAAC,EAAE,MAAM,GACnB,cAAc,CAwBhB;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqEzF"}
1
+ {"version":3,"file":"voorbeeldPrint.d.ts","sourceRoot":"","sources":["../../src/lib/voorbeeldPrint.ts"],"names":[],"mappings":"AAQA,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,eAAe;IAC9B,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,wFAAwF;AACxF,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,eAAe,EACvB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,WAAW,CAAC,EAAE,MAAM,GACnB,cAAc,CAwBhB;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsCzF"}
@@ -5,10 +5,7 @@
5
5
  // zodat de wachtrij niets opnieuw opmaakt.
6
6
  // ============================================================================
7
7
  import { toast } from "@flowselections/core";
8
- import { printHtml, printerAfdrukmethode, printerVoorLayout, volgJobStatus, } from "./printApi.js";
9
- import { lokalePdfPrintplek, pdfMapToestemming } from "./pdfMap.js";
10
- import { printerVoorPrintplek } from "./printplekken.js";
11
- import { isOpslagFout, PDF_OPSLAG_MELDING } from "./pdfOpslagStatus.js";
8
+ import { printHtml, printerVoorLayout, volgJobStatus, } from "./printApi.js";
12
9
  /** Pure opbouw van de opdracht, zodat printplekdoorgifte regressiegetest kan worden. */
13
10
  export function bouwVoorbeeldPrintInvoer(layout, html, printerId, printplekId) {
14
11
  const documenttype = String(layout.documenttype ?? "pakbon");
@@ -47,55 +44,26 @@ export async function voorbeeldPrint(layout, html) {
47
44
  toast.error(`Nog geen printer gekoppeld aan ${naam} — stel dit in bij Printen > Standaardregels.`);
48
45
  return;
49
46
  }
50
- const isPdf = (await printerAfdrukmethode(printerId)) === "pdf";
51
- let printplekId;
52
- if (isPdf) {
53
- const lokalePrintplek = await lokalePdfPrintplek();
54
- if (!lokalePrintplek) {
55
- throw new Error("Deze Mac heeft nog geen PDF-map met printplek. Kies de map opnieuw bij de bedoelde printplek.");
56
- }
57
- const printerOpPlek = await printerVoorPrintplek(lokalePrintplek, documenttype);
58
- if (printerOpPlek !== printerId) {
59
- throw new Error("De PDF-map van deze Mac hoort niet bij de printplek van dit document. Controleer de printer bij deze printplek.");
60
- }
61
- const toestemming = await pdfMapToestemming(printerId);
62
- if (toestemming === "ontbreekt")
63
- throw new Error(PDF_OPSLAG_MELDING.map_ontbreekt);
64
- if (toestemming !== "granted")
65
- throw new Error(PDF_OPSLAG_MELDING.geen_rechten);
66
- printplekId = lokalePrintplek;
67
- }
47
+ const printplekId = undefined;
68
48
  const { jobId } = await printHtml(bouwVoorbeeldPrintInvoer(layout, html, printerId, printplekId));
69
- toast.success(isPdf ? "Voorbeeld wordt in de PDF-map opgeslagen" : "Voorbeeld naar de printer verstuurd");
49
+ toast.success("Voorbeeld naar de printer verstuurd");
70
50
  let afgerond = false;
71
51
  const stop = volgJobStatus(jobId, (s) => {
72
- if (isPdf && s.lokale_pdf_status === "opgeslagen" && s.lokaal_opgeslagen_op) {
73
- afgerond = true;
74
- toast.success("Voorbeeld opgeslagen in de PDF-map");
75
- stop();
76
- }
77
- else if (isPdf && isOpslagFout(s.lokale_pdf_status)) {
78
- afgerond = true;
79
- toast.error(s.lokale_pdf_fout ??
80
- PDF_OPSLAG_MELDING[s.lokale_pdf_status ?? ""] ??
81
- "Voorbeeld kon niet in de PDF-map worden opgeslagen.");
82
- stop();
83
- }
84
- else if (!isPdf && (s.status === "klaar" || s.status === "voltooid")) {
52
+ if (s.status === "klaar" || s.status === "voltooid") {
85
53
  afgerond = true;
86
54
  toast.success("Voorbeeld afgedrukt");
87
55
  stop();
88
56
  }
89
57
  else if (s.status === "mislukt") {
90
58
  afgerond = true;
91
- toast.error(s.lokale_pdf_fout ?? s.foutmelding ?? "Voorbeeld printen mislukt");
59
+ toast.error(s.foutmelding ?? "Voorbeeld printen mislukt");
92
60
  stop();
93
61
  }
94
62
  });
95
63
  window.setTimeout(() => {
96
64
  stop();
97
- if (isPdf && !afgerond) {
98
- toast.error("Het voorbeeld is nog niet opgeslagen. Controleer de opdracht in de printwachtrij.");
65
+ if (!afgerond) {
66
+ toast.error("Het voorbeeld is nog niet afgedrukt. Controleer de opdracht in de printwachtrij.");
99
67
  }
100
68
  }, 5 * 60000);
101
69
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flowselections/layout-maker",
3
- "version": "1.45.19",
3
+ "version": "1.51.2",
4
4
  "flowselections": {
5
5
  "moduleId": "layout-maker",
6
6
  "pages": [
@@ -126,7 +126,7 @@
126
126
  "devDependencies": {
127
127
  "@cloudflare/vite-plugin": "^1.25.5",
128
128
  "@eslint/js": "^9.32.0",
129
- "@flowselections/core": "1.0.21",
129
+ "@flowselections/core": "1.0.28",
130
130
  "@lovable.dev/vite-tanstack-config": "2.23.1",
131
131
  "@rsbuild/core": "^1.0.0",
132
132
  "@tailwindcss/vite": "^4.2.1",
@@ -1,6 +0,0 @@
1
- /**
2
- * Schrijft voltooide opdrachten van de virtuele PDF-printer naar de map die
3
- * in deze browser op deze computer is gekozen. Dit component rendert niets.
4
- */
5
- export declare function PdfMapAutoSaver(): null;
6
- //# sourceMappingURL=PdfMapAutoSaver.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PdfMapAutoSaver.d.ts","sourceRoot":"","sources":["../../src/components/PdfMapAutoSaver.tsx"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,eAAe,SAM9B"}
@@ -1,12 +0,0 @@
1
- import { useEffect } from "react";
2
- import { startPdfMapService } from "../lib/pdfJobSaver.js";
3
- /**
4
- * Schrijft voltooide opdrachten van de virtuele PDF-printer naar de map die
5
- * in deze browser op deze computer is gekozen. Dit component rendert niets.
6
- */
7
- export function PdfMapAutoSaver() {
8
- useEffect(() => {
9
- startPdfMapService();
10
- }, []);
11
- return null;
12
- }
@@ -1,12 +0,0 @@
1
- import { type Root } from "react-dom/client";
2
- declare global {
3
- interface Window {
4
- __layoutMakerPdfBannerRoot?: Root;
5
- }
6
- }
7
- /**
8
- * Monteert de mapmelding één keer boven de volledige shell. Zo is de actie ook
9
- * zichtbaar in modules die alleen de print-API gebruiken, zoals Pickstation.
10
- */
11
- export declare function startPdfMapGlobaleBanner(): void;
12
- //# sourceMappingURL=PdfMapGlobaleBanner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PdfMapGlobaleBanner.d.ts","sourceRoot":"","sources":["../../src/components/PdfMapGlobaleBanner.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAKzD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,0BAA0B,CAAC,EAAE,IAAI,CAAC;KACnC;CACF;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,IAAI,CAoB/C"}