@flowselections/layout-maker 1.13.2 → 1.19.0

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 (83) hide show
  1. package/dist-lib/components/AfdrukKnop.d.ts +5 -0
  2. package/dist-lib/components/AfdrukKnop.d.ts.map +1 -1
  3. package/dist-lib/components/AfdrukKnop.js +5 -0
  4. package/dist-lib/components/DocumentRouteringPage.d.ts +3 -1
  5. package/dist-lib/components/DocumentRouteringPage.d.ts.map +1 -1
  6. package/dist-lib/components/DocumentRouteringPage.js +66 -64
  7. package/dist-lib/components/DocumentenPage.d.ts +4 -0
  8. package/dist-lib/components/DocumentenPage.d.ts.map +1 -0
  9. package/dist-lib/components/DocumentenPage.js +16 -0
  10. package/dist-lib/components/LayoutsPage.d.ts +3 -1
  11. package/dist-lib/components/LayoutsPage.d.ts.map +1 -1
  12. package/dist-lib/components/LayoutsPage.js +3 -2
  13. package/dist-lib/components/LayoutsPrintersTabPage.d.ts +2 -0
  14. package/dist-lib/components/LayoutsPrintersTabPage.d.ts.map +1 -0
  15. package/dist-lib/components/LayoutsPrintersTabPage.js +32 -0
  16. package/dist-lib/components/LogosPage.d.ts +3 -1
  17. package/dist-lib/components/LogosPage.d.ts.map +1 -1
  18. package/dist-lib/components/LogosPage.js +3 -2
  19. package/dist-lib/components/ModuleTabs.d.ts +19 -0
  20. package/dist-lib/components/ModuleTabs.d.ts.map +1 -0
  21. package/dist-lib/components/ModuleTabs.js +17 -0
  22. package/dist-lib/components/PakbonBuilderPage.d.ts.map +1 -1
  23. package/dist-lib/components/PakbonBuilderPage.js +30 -4
  24. package/dist-lib/components/PrintQueuePage.d.ts.map +1 -1
  25. package/dist-lib/components/PrintQueuePage.js +15 -2
  26. package/dist-lib/components/PrintenPage.d.ts +4 -0
  27. package/dist-lib/components/PrintenPage.d.ts.map +1 -0
  28. package/dist-lib/components/PrintenPage.js +21 -0
  29. package/dist-lib/components/PrinterSetupWizard.js +3 -3
  30. package/dist-lib/components/PrintersPage.d.ts +3 -1
  31. package/dist-lib/components/PrintersPage.d.ts.map +1 -1
  32. package/dist-lib/components/PrintersPage.js +20 -38
  33. package/dist-lib/components/PrintersRedirectPage.d.ts +2 -0
  34. package/dist-lib/components/PrintersRedirectPage.d.ts.map +1 -0
  35. package/dist-lib/components/PrintersRedirectPage.js +14 -0
  36. package/dist-lib/components/PrintplekDetailPage.d.ts +2 -0
  37. package/dist-lib/components/PrintplekDetailPage.d.ts.map +1 -0
  38. package/dist-lib/components/PrintplekDetailPage.js +81 -0
  39. package/dist-lib/components/PrintplekWizard.d.ts +8 -0
  40. package/dist-lib/components/PrintplekWizard.d.ts.map +1 -0
  41. package/dist-lib/components/PrintplekWizard.js +194 -0
  42. package/dist-lib/components/PrintplekkenPage.d.ts +4 -0
  43. package/dist-lib/components/PrintplekkenPage.d.ts.map +1 -0
  44. package/dist-lib/components/PrintplekkenPage.js +110 -0
  45. package/dist-lib/index.d.ts +15 -1
  46. package/dist-lib/index.d.ts.map +1 -1
  47. package/dist-lib/index.js +16 -7
  48. package/dist-lib/integrations/supabase/auth-middleware.d.ts +363 -0
  49. package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
  50. package/dist-lib/integrations/supabase/client.server.d.ts +363 -0
  51. package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
  52. package/dist-lib/integrations/supabase/types.d.ts +370 -0
  53. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  54. package/dist-lib/lib/aiLayout.functions.d.ts +363 -0
  55. package/dist-lib/lib/aiLayout.functions.d.ts.map +1 -1
  56. package/dist-lib/lib/browserPrint.d.ts +4 -0
  57. package/dist-lib/lib/browserPrint.d.ts.map +1 -1
  58. package/dist-lib/lib/browserPrint.js +4 -0
  59. package/dist-lib/lib/pakbonHtml.d.ts +5 -2
  60. package/dist-lib/lib/pakbonHtml.d.ts.map +1 -1
  61. package/dist-lib/lib/pakbonHtml.js +5 -2
  62. package/dist-lib/lib/printApi.d.ts +23 -7
  63. package/dist-lib/lib/printApi.d.ts.map +1 -1
  64. package/dist-lib/lib/printApi.js +51 -15
  65. package/dist-lib/lib/printQueue.d.ts +28 -0
  66. package/dist-lib/lib/printQueue.d.ts.map +1 -0
  67. package/dist-lib/lib/printQueue.js +70 -0
  68. package/dist-lib/lib/printQueue.server.d.ts.map +1 -1
  69. package/dist-lib/lib/printQueue.server.js +141 -18
  70. package/dist-lib/lib/printService.functions.d.ts +1452 -0
  71. package/dist-lib/lib/printService.functions.d.ts.map +1 -1
  72. package/dist-lib/lib/printplekWizard.d.ts +57 -0
  73. package/dist-lib/lib/printplekWizard.d.ts.map +1 -0
  74. package/dist-lib/lib/printplekWizard.js +87 -0
  75. package/dist-lib/lib/printplekken.d.ts +75 -0
  76. package/dist-lib/lib/printplekken.d.ts.map +1 -0
  77. package/dist-lib/lib/printplekken.js +198 -0
  78. package/dist-lib/lib/testpagina.d.ts.map +1 -1
  79. package/dist-lib/lib/testpagina.js +5 -5
  80. package/dist-lib/lib/useDocumentData.d.ts +6 -0
  81. package/dist-lib/lib/useDocumentData.d.ts.map +1 -1
  82. package/dist-lib/lib/useDocumentData.js +31 -0
  83. package/package.json +14 -14
@@ -0,0 +1,57 @@
1
+ export interface WizardPrinter {
2
+ id: string;
3
+ naam: string;
4
+ papierformaat?: string | null;
5
+ }
6
+ export interface WizardLayout {
7
+ documenttype?: string | null;
8
+ actief?: boolean | null;
9
+ }
10
+ /** Oppervlakte van een papierformaat in mm²; onbekend = middelmaat (A4). */
11
+ export declare function formaatOppervlak(code?: string | null): number;
12
+ /**
13
+ * Documentsoorten die er in deze shell toe doen: alles waarvoor een actieve
14
+ * layout bestaat, in de vaste volgorde van DOCUMENT_TYPES. Zonder layouts
15
+ * vallen we terug op de twee soorten die overal voorkomen.
16
+ */
17
+ export declare function relevanteDocumenttypes(layouts: WizardLayout[]): string[];
18
+ /** De overige documentsoorten, voor de uitklap "Meer documenten". */
19
+ export declare function overigeDocumenttypes(relevant: string[]): string[];
20
+ /**
21
+ * Verstandige voorkeuze: kleine documenten naar de kleinste printer, de rest
22
+ * naar de grootste. Bij één printer krijgt alles diezelfde printer.
23
+ */
24
+ export declare function voorgesteldeDocumentPrinters(documenttypes: string[], printers: WizardPrinter[]): Record<string, string>;
25
+ export interface WizardStatus {
26
+ naam: string;
27
+ computers: string[];
28
+ printers: number;
29
+ documentPrinters: Record<string, string>;
30
+ }
31
+ /** Mag de gebruiker door naar de volgende stap? */
32
+ export declare function wizardStapKlaar(stap: number, status: WizardStatus): boolean;
33
+ /** Eerste stap die nog niet af is — om een halve printplek af te maken. */
34
+ export declare function eersteOnvoltooideStap(status: WizardStatus): number;
35
+ export declare const WIZARD_STAPPEN: readonly [{
36
+ readonly nummer: 1;
37
+ readonly titel: "Naam";
38
+ readonly vraag: "Waar sta je?";
39
+ }, {
40
+ readonly nummer: 2;
41
+ readonly titel: "Computers";
42
+ readonly vraag: "Welke computers staan hier?";
43
+ }, {
44
+ readonly nummer: 3;
45
+ readonly titel: "Printers";
46
+ readonly vraag: "Klopt deze printerlijst?";
47
+ }, {
48
+ readonly nummer: 4;
49
+ readonly titel: "Documenten";
50
+ readonly vraag: "Wat print hier?";
51
+ }, {
52
+ readonly nummer: 5;
53
+ readonly titel: "Test";
54
+ readonly vraag: "Even proefdraaien";
55
+ }];
56
+ export declare const NAAM_SUGGESTIES: string[];
57
+ //# sourceMappingURL=printplekWizard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"printplekWizard.d.ts","sourceRoot":"","sources":["../../src/lib/printplekWizard.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CACzB;AAWD,4EAA4E;AAC5E,wBAAgB,gBAAgB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAI7D;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,EAAE,CAUxE;AAED,qEAAqE;AACrE,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAGjE;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,aAAa,EAAE,MAAM,EAAE,EACvB,QAAQ,EAAE,aAAa,EAAE,GACxB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAaxB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1C;AAED,mDAAmD;AACnD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAa3E;AAED,2EAA2E;AAC3E,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAKlE;AAED,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;EAMjB,CAAC;AAEX,eAAO,MAAM,eAAe,UAA6D,CAAC"}
@@ -0,0 +1,87 @@
1
+ // ============================================================================
2
+ // src/lib/printplekWizard.ts — hulpfuncties voor de printplek-wizard.
3
+ // Puur rekenwerk (geen React, geen database) zodat het los testbaar blijft.
4
+ // ============================================================================
5
+ import { DOCUMENT_TYPES, PAPIERFORMATEN } from "./documentTypes.js";
6
+ /** Documentsoorten die op klein papier (labels/stickers) horen. */
7
+ const KLEINE_DOCUMENTEN = new Set([
8
+ "sticker",
9
+ "etiket",
10
+ "productlabel",
11
+ "barcode_label",
12
+ "verzendlabel",
13
+ ]);
14
+ /** Oppervlakte van een papierformaat in mm²; onbekend = middelmaat (A4). */
15
+ export function formaatOppervlak(code) {
16
+ const def = PAPIERFORMATEN.find((f) => f.code === (code ?? "").toUpperCase());
17
+ if (!def)
18
+ return 210 * 297;
19
+ return def.breedte * def.hoogte;
20
+ }
21
+ /**
22
+ * Documentsoorten die er in deze shell toe doen: alles waarvoor een actieve
23
+ * layout bestaat, in de vaste volgorde van DOCUMENT_TYPES. Zonder layouts
24
+ * vallen we terug op de twee soorten die overal voorkomen.
25
+ */
26
+ export function relevanteDocumenttypes(layouts) {
27
+ const lijst = Array.isArray(layouts) ? layouts : [];
28
+ const actief = new Set(lijst
29
+ .filter((l) => l.actief !== false)
30
+ .map((l) => (l.documenttype ?? "").trim())
31
+ .filter(Boolean));
32
+ const gevonden = DOCUMENT_TYPES.filter((d) => actief.has(d.value)).map((d) => d.value);
33
+ return gevonden.length > 0 ? gevonden : ["pakbon", "sticker"];
34
+ }
35
+ /** De overige documentsoorten, voor de uitklap "Meer documenten". */
36
+ export function overigeDocumenttypes(relevant) {
37
+ const set = new Set(relevant);
38
+ return DOCUMENT_TYPES.filter((d) => !set.has(d.value)).map((d) => d.value);
39
+ }
40
+ /**
41
+ * Verstandige voorkeuze: kleine documenten naar de kleinste printer, de rest
42
+ * naar de grootste. Bij één printer krijgt alles diezelfde printer.
43
+ */
44
+ export function voorgesteldeDocumentPrinters(documenttypes, printers) {
45
+ const lijst = Array.isArray(printers) ? printers : [];
46
+ if (lijst.length === 0)
47
+ return {};
48
+ const gesorteerd = [...lijst].sort((a, b) => formaatOppervlak(a.papierformaat) - formaatOppervlak(b.papierformaat));
49
+ const kleinste = gesorteerd[0];
50
+ const grootste = gesorteerd[gesorteerd.length - 1];
51
+ const uitkomst = {};
52
+ for (const d of documenttypes) {
53
+ uitkomst[d] = KLEINE_DOCUMENTEN.has(d) ? kleinste.id : grootste.id;
54
+ }
55
+ return uitkomst;
56
+ }
57
+ /** Mag de gebruiker door naar de volgende stap? */
58
+ export function wizardStapKlaar(stap, status) {
59
+ switch (stap) {
60
+ case 1:
61
+ return status.naam.trim().length > 0;
62
+ case 2:
63
+ return status.computers.length > 0;
64
+ case 3:
65
+ return status.printers > 0;
66
+ case 4:
67
+ return Object.values(status.documentPrinters).some((v) => Boolean(v));
68
+ default:
69
+ return true;
70
+ }
71
+ }
72
+ /** Eerste stap die nog niet af is — om een halve printplek af te maken. */
73
+ export function eersteOnvoltooideStap(status) {
74
+ for (let stap = 1; stap <= 4; stap += 1) {
75
+ if (!wizardStapKlaar(stap, status))
76
+ return stap;
77
+ }
78
+ return 5;
79
+ }
80
+ export const WIZARD_STAPPEN = [
81
+ { nummer: 1, titel: "Naam", vraag: "Waar sta je?" },
82
+ { nummer: 2, titel: "Computers", vraag: "Welke computers staan hier?" },
83
+ { nummer: 3, titel: "Printers", vraag: "Klopt deze printerlijst?" },
84
+ { nummer: 4, titel: "Documenten", vraag: "Wat print hier?" },
85
+ { nummer: 5, titel: "Test", vraag: "Even proefdraaien" },
86
+ ];
87
+ export const NAAM_SUGGESTIES = ["Pickstation 1", "Pickstation 2", "Expeditie", "Kantoor"];
@@ -0,0 +1,75 @@
1
+ export interface Printplek {
2
+ id: string;
3
+ naam: string;
4
+ omschrijving: string | null;
5
+ actief: boolean;
6
+ }
7
+ export interface PrintplekComputer {
8
+ id: string;
9
+ print_plek_id: string;
10
+ computer_naam: string;
11
+ }
12
+ export interface PrintplekDocumentPrinter {
13
+ id: string;
14
+ print_plek_id: string;
15
+ documenttype: string;
16
+ printer_id: string | null;
17
+ papierformaat: string | null;
18
+ }
19
+ export interface PrintplekKoppeling {
20
+ id: string;
21
+ print_plek_id: string;
22
+ /** Vrije aanduiding van de aanleverende module, bijv. "pickstation". */
23
+ bron: string;
24
+ bron_id: string;
25
+ label: string | null;
26
+ }
27
+ /** Alle printplekken met hun computers, documentregels en koppelingen. */
28
+ export declare function usePrintplekken(): {
29
+ plekken: Printplek[];
30
+ computers: PrintplekComputer[];
31
+ regels: PrintplekDocumentPrinter[];
32
+ koppelingen: PrintplekKoppeling[];
33
+ laden: boolean;
34
+ fout: string | null;
35
+ reload: (stil?: boolean) => Promise<void>;
36
+ };
37
+ /**
38
+ * Eenvoudige lijst van actieve printplekken. Bedoeld voor andere modules die
39
+ * een keuzelijst willen tonen (bijv. "welke printplek hoort bij dit
40
+ * pickstation?").
41
+ */
42
+ export declare function printplekkenLijst(): Promise<Printplek[]>;
43
+ /** Hook-variant van `printplekkenLijst` voor gebruik in andere modules. */
44
+ export declare function useBeschikbarePrintplekken(): {
45
+ plekken: Printplek[];
46
+ laden: boolean;
47
+ reload: () => Promise<void>;
48
+ };
49
+ export declare function maakPrintplek(naam: string, omschrijving?: string): Promise<string>;
50
+ export declare function bewerkPrintplek(id: string, velden: {
51
+ naam?: string;
52
+ omschrijving?: string | null;
53
+ actief?: boolean;
54
+ }): Promise<void>;
55
+ export declare function verwijderPrintplek(id: string): Promise<void>;
56
+ /** Zet een computer (werkplek) bij een printplek. Een computer hoort bij één plek. */
57
+ export declare function koppelComputerAanPrintplek(printPlekId: string, computerNaam: string): Promise<void>;
58
+ export declare function ontkoppelComputer(computerNaam: string): Promise<void>;
59
+ /** Legt vast welke printer een documentsoort op deze printplek gebruikt. */
60
+ export declare function zetPrintplekPrinter(printPlekId: string, documenttype: string, printerId: string | null, papierformaat?: string | null): Promise<void>;
61
+ /**
62
+ * Koppelt een willekeurige externe eenheid (pickstation, scanner, balie) aan
63
+ * een printplek. `bron` is een vrij label van de aanleverende module.
64
+ */
65
+ export declare function koppelBronAanPrintplek(printPlekId: string, bron: string, bronId: string, label?: string): Promise<void>;
66
+ export declare function ontkoppelBron(bron: string, bronId: string): Promise<void>;
67
+ /** De printplek die bij een externe eenheid hoort, of `null`. */
68
+ export declare function printplekVoorBron(bron: string, bronId: string): Promise<string | null>;
69
+ /** De printer die op deze printplek voor deze documentsoort is ingesteld. */
70
+ export declare function printerVoorPrintplek(printPlekId: string, documenttype: string): Promise<string | null>;
71
+ /** De printplek waar een computer/werkplek bij hoort, of `null`. */
72
+ export declare function printplekVoorComputer(computerNaam: string): Promise<string | null>;
73
+ /** Naam van een printplek, voor nette foutmeldingen. */
74
+ export declare function printplekNaam(printPlekId: string): Promise<string | null>;
75
+ //# sourceMappingURL=printplekken.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"printplekken.d.ts","sourceRoot":"","sources":["../../src/lib/printplekken.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAQD,0EAA0E;AAC1E,wBAAgB,eAAe;;;;;;;;EAkC9B;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,CAO9D;AAED,2EAA2E;AAC3E,wBAAgB,0BAA0B;;;;EAczC;AAMD,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQxF;AAED,wBAAsB,eAAe,CACnC,EAAE,EAAE,MAAM,EACV,MAAM,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,iBAI1E;AAED,wBAAsB,kBAAkB,CAAC,EAAE,EAAE,MAAM,iBAGlD;AAED,sFAAsF;AACtF,wBAAsB,0BAA0B,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,iBAMzF;AAED,wBAAsB,iBAAiB,CAAC,YAAY,EAAE,MAAM,iBAM3D;AAED,4EAA4E;AAC5E,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,iBAqB9B;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,iBAYf;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,iBAO/D;AAED,iEAAiE;AACjE,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQ5F;AAMD,6EAA6E;AAC7E,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAUxB;AAED,oEAAoE;AACpE,wBAAsB,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CASxF;AAED,wDAAwD;AACxD,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAO/E"}
@@ -0,0 +1,198 @@
1
+ // ============================================================================
2
+ // src/lib/printplekken.ts — printplekken: een fysieke plek (pickstation,
3
+ // expeditie, kantoor) die één of meer computers en hun printers bundelt.
4
+ // Andere modules koppelen zich hieraan via `print_plek_koppelingen`, zonder
5
+ // dat deze module iets van die modules hoeft te weten.
6
+ // ============================================================================
7
+ import { useCallback, useEffect, useState } from "react";
8
+ import { supabase } from "./supabaseClient.js";
9
+ const arr = (v) => (Array.isArray(v) ? v : []);
10
+ // ---------------------------------------------------------------------------
11
+ // Lezen
12
+ // ---------------------------------------------------------------------------
13
+ /** Alle printplekken met hun computers, documentregels en koppelingen. */
14
+ export function usePrintplekken() {
15
+ const [plekken, setPlekken] = useState([]);
16
+ const [computers, setComputers] = useState([]);
17
+ const [regels, setRegels] = useState([]);
18
+ const [koppelingen, setKoppelingen] = useState([]);
19
+ const [laden, setLaden] = useState(true);
20
+ const [fout, setFout] = useState(null);
21
+ const load = useCallback(async (stil = false) => {
22
+ if (!stil)
23
+ setLaden(true);
24
+ const [p, c, r, k] = await Promise.all([
25
+ supabase.from("print_plekken").select("*").order("naam"),
26
+ supabase.from("print_plek_computers").select("*"),
27
+ supabase.from("document_printplek_printers").select("*"),
28
+ supabase.from("print_plek_koppelingen").select("*"),
29
+ ]);
30
+ const eersteFout = p.error ?? c.error ?? r.error ?? k.error;
31
+ setFout(eersteFout
32
+ ? "Printplekken konden niet worden geladen. Voer sql/print-schema.sql uit in deze shell."
33
+ : null);
34
+ setPlekken(arr(p.data));
35
+ setComputers(arr(c.data));
36
+ setRegels(arr(r.data));
37
+ setKoppelingen(arr(k.data));
38
+ setLaden(false);
39
+ }, []);
40
+ useEffect(() => {
41
+ void load();
42
+ }, [load]);
43
+ return { plekken, computers, regels, koppelingen, laden, fout, reload: load };
44
+ }
45
+ /**
46
+ * Eenvoudige lijst van actieve printplekken. Bedoeld voor andere modules die
47
+ * een keuzelijst willen tonen (bijv. "welke printplek hoort bij dit
48
+ * pickstation?").
49
+ */
50
+ export async function printplekkenLijst() {
51
+ const { data } = await supabase
52
+ .from("print_plekken")
53
+ .select("id, naam, omschrijving, actief")
54
+ .eq("actief", true)
55
+ .order("naam");
56
+ return arr(data);
57
+ }
58
+ /** Hook-variant van `printplekkenLijst` voor gebruik in andere modules. */
59
+ export function useBeschikbarePrintplekken() {
60
+ const [plekken, setPlekken] = useState([]);
61
+ const [laden, setLaden] = useState(true);
62
+ const load = useCallback(async () => {
63
+ setPlekken(await printplekkenLijst());
64
+ setLaden(false);
65
+ }, []);
66
+ useEffect(() => {
67
+ void load();
68
+ }, [load]);
69
+ return { plekken, laden, reload: load };
70
+ }
71
+ // ---------------------------------------------------------------------------
72
+ // Schrijven
73
+ // ---------------------------------------------------------------------------
74
+ export async function maakPrintplek(naam, omschrijving) {
75
+ const { data, error } = await supabase
76
+ .from("print_plekken")
77
+ .insert({ naam: naam.trim(), omschrijving: omschrijving?.trim() || null })
78
+ .select("id")
79
+ .maybeSingle();
80
+ if (error)
81
+ throw error;
82
+ return data?.id ?? "";
83
+ }
84
+ export async function bewerkPrintplek(id, velden) {
85
+ const { error } = await supabase.from("print_plekken").update(velden).eq("id", id);
86
+ if (error)
87
+ throw error;
88
+ }
89
+ export async function verwijderPrintplek(id) {
90
+ const { error } = await supabase.from("print_plekken").delete().eq("id", id);
91
+ if (error)
92
+ throw error;
93
+ }
94
+ /** Zet een computer (werkplek) bij een printplek. Een computer hoort bij één plek. */
95
+ export async function koppelComputerAanPrintplek(printPlekId, computerNaam) {
96
+ const { error } = await supabase.from("print_plek_computers").upsert({ print_plek_id: printPlekId, computer_naam: computerNaam.trim() }, { onConflict: "computer_naam" });
97
+ if (error)
98
+ throw error;
99
+ }
100
+ export async function ontkoppelComputer(computerNaam) {
101
+ const { error } = await supabase
102
+ .from("print_plek_computers")
103
+ .delete()
104
+ .eq("computer_naam", computerNaam.trim());
105
+ if (error)
106
+ throw error;
107
+ }
108
+ /** Legt vast welke printer een documentsoort op deze printplek gebruikt. */
109
+ export async function zetPrintplekPrinter(printPlekId, documenttype, printerId, papierformaat) {
110
+ if (!printerId) {
111
+ const { error } = await supabase
112
+ .from("document_printplek_printers")
113
+ .delete()
114
+ .eq("print_plek_id", printPlekId)
115
+ .eq("documenttype", documenttype);
116
+ if (error)
117
+ throw error;
118
+ return;
119
+ }
120
+ const { error } = await supabase.from("document_printplek_printers").upsert({
121
+ print_plek_id: printPlekId,
122
+ documenttype,
123
+ printer_id: printerId,
124
+ papierformaat: papierformaat ?? null,
125
+ }, { onConflict: "print_plek_id,documenttype" });
126
+ if (error)
127
+ throw error;
128
+ }
129
+ /**
130
+ * Koppelt een willekeurige externe eenheid (pickstation, scanner, balie) aan
131
+ * een printplek. `bron` is een vrij label van de aanleverende module.
132
+ */
133
+ export async function koppelBronAanPrintplek(printPlekId, bron, bronId, label) {
134
+ const { error } = await supabase.from("print_plek_koppelingen").upsert({
135
+ print_plek_id: printPlekId,
136
+ bron: bron.trim(),
137
+ bron_id: String(bronId).trim(),
138
+ label: label?.trim() || null,
139
+ }, { onConflict: "bron,bron_id" });
140
+ if (error)
141
+ throw error;
142
+ }
143
+ export async function ontkoppelBron(bron, bronId) {
144
+ const { error } = await supabase
145
+ .from("print_plek_koppelingen")
146
+ .delete()
147
+ .eq("bron", bron.trim())
148
+ .eq("bron_id", String(bronId).trim());
149
+ if (error)
150
+ throw error;
151
+ }
152
+ /** De printplek die bij een externe eenheid hoort, of `null`. */
153
+ export async function printplekVoorBron(bron, bronId) {
154
+ const { data } = await supabase
155
+ .from("print_plek_koppelingen")
156
+ .select("print_plek_id")
157
+ .eq("bron", bron.trim())
158
+ .eq("bron_id", String(bronId).trim())
159
+ .maybeSingle();
160
+ return data?.print_plek_id ?? null;
161
+ }
162
+ // ---------------------------------------------------------------------------
163
+ // Printerkeuze
164
+ // ---------------------------------------------------------------------------
165
+ /** De printer die op deze printplek voor deze documentsoort is ingesteld. */
166
+ export async function printerVoorPrintplek(printPlekId, documenttype) {
167
+ const id = (printPlekId ?? "").trim();
168
+ if (!id)
169
+ return null;
170
+ const { data } = await supabase
171
+ .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;
177
+ }
178
+ /** De printplek waar een computer/werkplek bij hoort, of `null`. */
179
+ export async function printplekVoorComputer(computerNaam) {
180
+ const naam = (computerNaam ?? "").trim();
181
+ if (!naam)
182
+ return null;
183
+ const { data } = await supabase
184
+ .from("print_plek_computers")
185
+ .select("print_plek_id")
186
+ .eq("computer_naam", naam)
187
+ .maybeSingle();
188
+ return data?.print_plek_id ?? null;
189
+ }
190
+ /** Naam van een printplek, voor nette foutmeldingen. */
191
+ export async function printplekNaam(printPlekId) {
192
+ const { data } = await supabase
193
+ .from("print_plekken")
194
+ .select("naam")
195
+ .eq("id", printPlekId)
196
+ .maybeSingle();
197
+ return data?.naam ?? null;
198
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"testpagina.d.ts","sourceRoot":"","sources":["../../src/lib/testpagina.ts"],"names":[],"mappings":"AAQA,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,iBAsBrE"}
1
+ {"version":3,"file":"testpagina.d.ts","sourceRoot":"","sources":["../../src/lib/testpagina.ts"],"names":[],"mappings":"AASA,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,iBAwBrE"}
@@ -1,8 +1,9 @@
1
1
  // ============================================================================
2
- // src/lib/testpagina.ts — een testpagina naar een printer sturen
2
+ // src/lib/testpagina.ts — een testpagina naar een printer sturen.
3
+ // Altijd via PrintNode: een testpagina die in het browser-printvenster
4
+ // uitkomt zegt niets over de koppeling die je wilt testen.
3
5
  // ============================================================================
4
6
  import { toast } from "@flowselections/core";
5
- import { drukAf } from "./browserPrint.js";
6
7
  import { printDirect } from "./directPrint.js";
7
8
  export async function drukTestpaginaAf(printerId, naam) {
8
9
  const html = `<div style="padding:20mm;font-size:14pt"><h1 style="font-size:20pt">Testpagina</h1>
@@ -21,9 +22,8 @@ export async function drukTestpaginaAf(printerId, naam) {
21
22
  toast.success(`Testpagina verstuurd naar ${direct.printernaam ?? naam}`);
22
23
  return;
23
24
  }
24
- if (direct.reden)
25
- toast.error(direct.reden);
26
- await drukAf(opdracht);
25
+ toast.error(direct.reden ??
26
+ `${naam} is nog niet gekoppeld aan het printprogramma — controleer de werkplek.`);
27
27
  }
28
28
  catch {
29
29
  toast.error("De testpagina kon niet worden afgedrukt");
@@ -1,4 +1,5 @@
1
1
  import type { LayoutElementModel, LayoutModel, PageSettings } from "./documentTypes.js";
2
+ import type { PlekNamen } from "./printQueue.js";
2
3
  export interface PrinterModel {
3
4
  id: string;
4
5
  naam: string;
@@ -90,6 +91,11 @@ export declare function usePrintJobs(): {
90
91
  loading: boolean;
91
92
  reload: (stil?: boolean) => Promise<void>;
92
93
  };
94
+ /**
95
+ * Namen van printplekken plus de koppelingen (pickstation/computer → plek),
96
+ * zodat de wachtrij kan tonen vanaf welke plek een opdracht komt.
97
+ */
98
+ export declare function usePrintPlekNamen(): PlekNamen;
93
99
  export declare function updateJobStatus(id: string, status: string): Promise<void>;
94
100
  export declare function maakPrintJob(input: {
95
101
  layout_id: string;
@@ -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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"}
@@ -399,6 +399,37 @@ export function usePrintJobs() {
399
399
  }, [load]);
400
400
  return { jobs, loading, reload: load };
401
401
  }
402
+ /**
403
+ * Namen van printplekken plus de koppelingen (pickstation/computer → plek),
404
+ * zodat de wachtrij kan tonen vanaf welke plek een opdracht komt.
405
+ */
406
+ export function usePrintPlekNamen() {
407
+ const [namen, setNamen] = useState({ plekken: new Map(), koppelingen: new Map() });
408
+ useEffect(() => {
409
+ let actief = true;
410
+ void (async () => {
411
+ const [plekRes, kopRes] = await Promise.all([
412
+ supabase.from("print_plekken").select("id, naam"),
413
+ supabase.from("print_plek_koppelingen").select("bron_id, print_plek_id"),
414
+ ]);
415
+ if (!actief)
416
+ return;
417
+ const plekken = new Map();
418
+ for (const p of arr(plekRes.data))
419
+ plekken.set(p.id, p.naam);
420
+ const koppelingen = new Map();
421
+ for (const k of arr(kopRes.data)) {
422
+ if (k.bron_id && k.print_plek_id)
423
+ koppelingen.set(String(k.bron_id).toLowerCase(), k.print_plek_id);
424
+ }
425
+ setNamen({ plekken, koppelingen });
426
+ })();
427
+ return () => {
428
+ actief = false;
429
+ };
430
+ }, []);
431
+ return namen;
432
+ }
402
433
  export async function updateJobStatus(id, status) {
403
434
  const patch = { status };
404
435
  if (status === "voltooid")
package/package.json CHANGED
@@ -1,18 +1,18 @@
1
1
  {
2
2
  "name": "@flowselections/layout-maker",
3
- "version": "1.13.2",
3
+ "version": "1.19.0",
4
4
  "flowselections": {
5
5
  "moduleId": "layout-maker",
6
6
  "pages": [
7
7
  {
8
- "export": "LayoutsPage",
8
+ "export": "DocumentenPage",
9
9
  "route": "layouts-printers",
10
- "title": "Layouts"
10
+ "title": "Documenten"
11
11
  },
12
12
  {
13
- "export": "PrintersPage",
14
- "route": "layouts-printers/printers",
15
- "title": "Printers"
13
+ "export": "LayoutsPrintersTabPage",
14
+ "route": "layouts-printers/$tab",
15
+ "title": "Layouts en printers"
16
16
  },
17
17
  {
18
18
  "export": "WerkplekConfiguratiePage",
@@ -20,20 +20,20 @@
20
20
  "title": "Werkplek configureren"
21
21
  },
22
22
  {
23
- "export": "DocumentRouteringPage",
24
- "route": "layouts-printers/routering",
25
- "title": "Routering"
23
+ "export": "PrintenPage",
24
+ "route": "layouts-printers/printplekken",
25
+ "title": "Printplekken"
26
+ },
27
+ {
28
+ "export": "PrintplekDetailPage",
29
+ "route": "layouts-printers/printplekken/$printplekId",
30
+ "title": "Printplek"
26
31
  },
27
32
  {
28
33
  "export": "PrintQueuePage",
29
34
  "route": "layouts-printers/wachtrij",
30
35
  "title": "Printwachtrij"
31
36
  },
32
- {
33
- "export": "LogosPage",
34
- "route": "layouts-printers/logos",
35
- "title": "Logo's"
36
- },
37
37
  {
38
38
  "export": "PakbonBuilderPage",
39
39
  "route": "layouts-printers/pakbon/$layoutId",