@flowselections/layout-maker 1.8.2 → 1.13.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/README.md +8 -1
  2. package/dist-lib/components/ComputersLijst.d.ts +2 -1
  3. package/dist-lib/components/ComputersLijst.d.ts.map +1 -1
  4. package/dist-lib/components/ComputersLijst.js +2 -2
  5. package/dist-lib/components/DocumentRouteringPage.d.ts +2 -0
  6. package/dist-lib/components/DocumentRouteringPage.d.ts.map +1 -0
  7. package/dist-lib/components/DocumentRouteringPage.js +115 -0
  8. package/dist-lib/components/LayoutsPage.d.ts.map +1 -1
  9. package/dist-lib/components/LayoutsPage.js +13 -8
  10. package/dist-lib/components/PrintQueuePage.d.ts.map +1 -1
  11. package/dist-lib/components/PrintQueuePage.js +16 -1
  12. package/dist-lib/components/PrintStatusBanner.d.ts +8 -0
  13. package/dist-lib/components/PrintStatusBanner.d.ts.map +1 -0
  14. package/dist-lib/components/PrintStatusBanner.js +15 -0
  15. package/dist-lib/components/PrintersPage.d.ts.map +1 -1
  16. package/dist-lib/components/PrintersPage.js +7 -23
  17. package/dist-lib/components/WerkplekConfiguratiePage.d.ts.map +1 -1
  18. package/dist-lib/components/WerkplekConfiguratiePage.js +35 -24
  19. package/dist-lib/components/WerkplekkenTabel.d.ts +2 -2
  20. package/dist-lib/components/WerkplekkenTabel.d.ts.map +1 -1
  21. package/dist-lib/components/WerkplekkenTabel.js +4 -3
  22. package/dist-lib/index.d.ts +8 -3
  23. package/dist-lib/index.d.ts.map +1 -1
  24. package/dist-lib/index.js +9 -5
  25. package/dist-lib/integrations/supabase/auth-middleware.d.ts +491 -145
  26. package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
  27. package/dist-lib/integrations/supabase/client.server.d.ts +491 -145
  28. package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
  29. package/dist-lib/integrations/supabase/types.d.ts +505 -150
  30. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  31. package/dist-lib/lib/aiLayout.functions.d.ts +491 -145
  32. package/dist-lib/lib/aiLayout.functions.d.ts.map +1 -1
  33. package/dist-lib/lib/documentBron.d.ts +35 -0
  34. package/dist-lib/lib/documentBron.d.ts.map +1 -0
  35. package/dist-lib/lib/documentBron.js +62 -0
  36. package/dist-lib/lib/documentRoutering.d.ts +23 -0
  37. package/dist-lib/lib/documentRoutering.d.ts.map +1 -0
  38. package/dist-lib/lib/documentRoutering.js +58 -0
  39. package/dist-lib/lib/documentTypes.d.ts +54 -0
  40. package/dist-lib/lib/documentTypes.d.ts.map +1 -1
  41. package/dist-lib/lib/documentTypes.js +56 -0
  42. package/dist-lib/lib/formaatPrinters.d.ts +5 -0
  43. package/dist-lib/lib/formaatPrinters.d.ts.map +1 -1
  44. package/dist-lib/lib/formaatPrinters.js +12 -0
  45. package/dist-lib/lib/printApi.d.ts +20 -5
  46. package/dist-lib/lib/printApi.d.ts.map +1 -1
  47. package/dist-lib/lib/printApi.js +93 -32
  48. package/dist-lib/lib/printQueue.server.d.ts.map +1 -1
  49. package/dist-lib/lib/printQueue.server.js +72 -1
  50. package/dist-lib/lib/printService.functions.d.ts +1964 -580
  51. package/dist-lib/lib/printService.functions.d.ts.map +1 -1
  52. package/dist-lib/lib/printerTelling.d.ts +24 -0
  53. package/dist-lib/lib/printerTelling.d.ts.map +1 -0
  54. package/dist-lib/lib/printerTelling.js +41 -0
  55. package/dist-lib/lib/useDocumentData.d.ts +4 -0
  56. package/dist-lib/lib/useDocumentData.d.ts.map +1 -1
  57. package/dist-lib/lib/useDocumentData.js +106 -1
  58. package/package.json +7 -2
@@ -0,0 +1,24 @@
1
+ export interface PrinterTelling {
2
+ /** Printers die het printprogramma op die computer ziet. */
3
+ gevonden: number;
4
+ /** Printers die hier zijn ingesteld en dus gebruikt kunnen worden. */
5
+ ingesteld: number;
6
+ /** Ingestelde printers met minstens één gekoppeld ontwerp. */
7
+ gekoppeld: number;
8
+ locaties: string[];
9
+ }
10
+ interface IngesteldePrinter {
11
+ id: string;
12
+ locatie?: string | null;
13
+ extern_printer_id?: string | null;
14
+ }
15
+ interface GevondenPrinter {
16
+ id: string;
17
+ computer?: string | null;
18
+ }
19
+ /** Telt per computernaam hoeveel printers gevonden en ingesteld zijn. */
20
+ export declare function telPrintersPerComputer(ingestelde: IngesteldePrinter[], gevondenPrinters: GevondenPrinter[], metKoppeling?: Set<string>): Map<string, PrinterTelling>;
21
+ /** Korte, overal identieke omschrijving van de telling. */
22
+ export declare function printerTellingTekst(t?: PrinterTelling | null): string;
23
+ export {};
24
+ //# sourceMappingURL=printerTelling.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"printerTelling.d.ts","sourceRoot":"","sources":["../../src/lib/printerTelling.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,cAAc;IAC7B,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,CAAC;IACjB,sEAAsE;IACtE,SAAS,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,UAAU,iBAAiB;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,UAAU,eAAe;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,yEAAyE;AACzE,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,iBAAiB,EAAE,EAC/B,gBAAgB,EAAE,eAAe,EAAE,EACnC,YAAY,GAAE,GAAG,CAAC,MAAM,CAAa,GACpC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CA0B7B;AAED,2DAA2D;AAC3D,wBAAgB,mBAAmB,CAAC,CAAC,CAAC,EAAE,cAAc,GAAG,IAAI,GAAG,MAAM,CAKrE"}
@@ -0,0 +1,41 @@
1
+ // ============================================================================
2
+ // src/lib/printerTelling.ts — één plek waar printers geteld worden, zodat elk
3
+ // scherm dezelfde getallen laat zien: gevonden op de computer vs. ingesteld
4
+ // in deze module.
5
+ // ============================================================================
6
+ /** Telt per computernaam hoeveel printers gevonden en ingesteld zijn. */
7
+ export function telPrintersPerComputer(ingestelde, gevondenPrinters, metKoppeling = new Set()) {
8
+ const map = new Map();
9
+ const leeg = () => ({ gevonden: 0, ingesteld: 0, gekoppeld: 0, locaties: [] });
10
+ const externNaarComputer = new Map();
11
+ for (const g of gevondenPrinters) {
12
+ const naam = g.computer ?? "";
13
+ if (!naam)
14
+ continue;
15
+ externNaarComputer.set(g.id, naam);
16
+ const rij = map.get(naam) ?? leeg();
17
+ rij.gevonden += 1;
18
+ map.set(naam, rij);
19
+ }
20
+ for (const p of ingestelde) {
21
+ const extern = p.extern_printer_id ?? null;
22
+ const naam = extern ? externNaarComputer.get(extern) : undefined;
23
+ if (!naam)
24
+ continue;
25
+ const rij = map.get(naam) ?? leeg();
26
+ rij.ingesteld += 1;
27
+ if (metKoppeling.has(p.id))
28
+ rij.gekoppeld += 1;
29
+ if (p.locatie && !rij.locaties.includes(p.locatie))
30
+ rij.locaties.push(p.locatie);
31
+ map.set(naam, rij);
32
+ }
33
+ return map;
34
+ }
35
+ /** Korte, overal identieke omschrijving van de telling. */
36
+ export function printerTellingTekst(t) {
37
+ const ingesteld = t?.ingesteld ?? 0;
38
+ const beschikbaar = Math.max((t?.gevonden ?? 0) - ingesteld, 0);
39
+ const eerste = `${ingesteld} ingesteld`;
40
+ return beschikbaar > 0 ? `${eerste} · ${beschikbaar} nog beschikbaar` : eerste;
41
+ }
@@ -30,7 +30,11 @@ export interface PrintJobModel {
30
30
  created_at: string;
31
31
  voltooid_op: string | null;
32
32
  extern_job_id?: string | null;
33
+ /** Vrije gegevens van de aanleverende module (o.a. het orderkenmerk). */
34
+ payload?: Record<string, unknown> | null;
33
35
  }
36
+ export declare function zorgVoorFloridayLayouts(): Promise<boolean>;
37
+ export declare function zorgVoorStandaardLayouts(): Promise<boolean>;
34
38
  export declare function useLayouts(): {
35
39
  layouts: LayoutModel[];
36
40
  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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"}
@@ -4,19 +4,124 @@
4
4
  import { useCallback, useEffect, useState } from "react";
5
5
  import { toast } from "@flowselections/core";
6
6
  import { supabase } from "./supabaseClient.js";
7
+ import { FLORIDAY_LAYOUT_TOELICHTING, FLORIDAY_SYSTEEM_LAYOUTS, STANDAARD_LAYOUTS } from "./documentTypes.js";
7
8
  const arr = (v) => (Array.isArray(v) ? v : []);
8
9
  // --- Layouts ---------------------------------------------------------------
10
+ /**
11
+ * Zorgt dat de vaste Floriday-layouts altijd bestaan, ook in een verse shell
12
+ * waar de seed-SQL nog niet is gedraaid. Idempotent en stil bij fouten.
13
+ */
14
+ let floridaySeedGedaan = false;
15
+ export async function zorgVoorFloridayLayouts() {
16
+ if (floridaySeedGedaan)
17
+ return false;
18
+ try {
19
+ const namen = FLORIDAY_SYSTEEM_LAYOUTS.map((l) => l.naam);
20
+ const { data, error } = await supabase
21
+ .from("document_layouts")
22
+ .select("naam")
23
+ .in("naam", namen);
24
+ if (error)
25
+ return false;
26
+ const bestaand = new Set(arr(data).map((r) => r.naam));
27
+ const ontbreekt = FLORIDAY_SYSTEEM_LAYOUTS.filter((l) => !bestaand.has(l.naam));
28
+ floridaySeedGedaan = true;
29
+ if (!ontbreekt.length)
30
+ return false;
31
+ const rijen = ontbreekt.map((l) => ({
32
+ naam: l.naam,
33
+ documenttype: l.documenttype,
34
+ omschrijving: FLORIDAY_LAYOUT_TOELICHTING,
35
+ papierformaat: l.papierformaat,
36
+ breedte_mm: l.breedte_mm,
37
+ hoogte_mm: l.hoogte_mm,
38
+ orientatie: "portrait",
39
+ bron: "floriday",
40
+ systeem: true,
41
+ actief: true,
42
+ }));
43
+ const { error: insertError } = await supabase.from("document_layouts").insert(rijen);
44
+ return !insertError;
45
+ }
46
+ catch {
47
+ return false;
48
+ }
49
+ }
50
+ /**
51
+ * Zorgt dat de eigen standaardlayouts (Pakbon, Afleverbrief (BVO)) bij een
52
+ * verse shell worden aangemaakt. In tegenstelling tot de Floriday-layouts
53
+ * gebeurt dit slechts één keer per shell, bijgehouden in public.app_settings
54
+ * (key = "standaard_layouts_geseed"). Verwijdert de gebruiker een layout, dan
55
+ * wordt deze niet opnieuw aangemaakt.
56
+ */
57
+ let standaardSeedGedaan = false;
58
+ const STANDAARD_SEED_KEY = "standaard_layouts_geseed";
59
+ export async function zorgVoorStandaardLayouts() {
60
+ if (standaardSeedGedaan)
61
+ return false;
62
+ try {
63
+ const { data: vlag } = await supabase
64
+ .from("app_settings")
65
+ .select("value")
66
+ .eq("key", STANDAARD_SEED_KEY)
67
+ .maybeSingle();
68
+ if (vlag?.value === "1") {
69
+ standaardSeedGedaan = true;
70
+ return false;
71
+ }
72
+ const namen = STANDAARD_LAYOUTS.map((l) => l.naam);
73
+ const { data, error } = await supabase
74
+ .from("document_layouts")
75
+ .select("naam")
76
+ .in("naam", namen);
77
+ if (error)
78
+ return false;
79
+ const bestaand = new Set(arr(data).map((r) => r.naam));
80
+ const ontbreekt = STANDAARD_LAYOUTS.filter((l) => !bestaand.has(l.naam));
81
+ standaardSeedGedaan = true;
82
+ if (ontbreekt.length > 0) {
83
+ const rijen = ontbreekt.map((l) => ({
84
+ naam: l.naam,
85
+ documenttype: l.documenttype,
86
+ omschrijving: l.omschrijving,
87
+ papierformaat: l.papierformaat,
88
+ breedte_mm: l.breedte_mm,
89
+ hoogte_mm: l.hoogte_mm,
90
+ orientatie: "portrait",
91
+ bron: "eigen",
92
+ systeem: false,
93
+ actief: true,
94
+ }));
95
+ await supabase.from("document_layouts").insert(rijen);
96
+ }
97
+ // Markeer als geseed, ongeacht of er rijen zijn ingevoegd: het seeden is
98
+ // éénmalig per shell. upsert voorkomt een constraint-conflict bij een
99
+ // herhaalde eerste run.
100
+ await supabase
101
+ .from("app_settings")
102
+ .upsert({ key: STANDAARD_SEED_KEY, value: "1" }, { onConflict: "key" });
103
+ return ontbreekt.length > 0;
104
+ }
105
+ catch {
106
+ return false;
107
+ }
108
+ }
9
109
  export function useLayouts() {
10
110
  const [layouts, setLayouts] = useState([]);
11
111
  const [loading, setLoading] = useState(true);
12
112
  const load = useCallback(async (stil = false) => {
13
113
  if (!stil)
14
114
  setLoading(true);
115
+ const [geseedStd, geseedFlo] = await Promise.all([
116
+ zorgVoorStandaardLayouts(),
117
+ zorgVoorFloridayLayouts(),
118
+ ]);
119
+ const geseed = geseedStd || geseedFlo;
15
120
  const { data, error } = await supabase
16
121
  .from("document_layouts")
17
122
  .select("*")
18
123
  .order("updated_at", { ascending: false });
19
- if (error && !stil)
124
+ if (error && !stil && !geseed)
20
125
  toast.error("Layouts laden mislukt");
21
126
  setLayouts(arr(data));
22
127
  setLoading(false);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flowselections/layout-maker",
3
- "version": "1.8.2",
3
+ "version": "1.13.1",
4
4
  "flowselections": {
5
5
  "moduleId": "layout-maker",
6
6
  "pages": [
@@ -19,6 +19,11 @@
19
19
  "route": "layouts-printers/printers/$computerId",
20
20
  "title": "Werkplek configureren"
21
21
  },
22
+ {
23
+ "export": "DocumentRouteringPage",
24
+ "route": "layouts-printers/routering",
25
+ "title": "Routering"
26
+ },
22
27
  {
23
28
  "export": "PrintQueuePage",
24
29
  "route": "layouts-printers/wachtrij",
@@ -107,7 +112,7 @@
107
112
  "devDependencies": {
108
113
  "@cloudflare/vite-plugin": "^1.25.5",
109
114
  "@eslint/js": "^9.32.0",
110
- "@flowselections/core": "1.0.16",
115
+ "@flowselections/core": "1.0.18",
111
116
  "@lovable.dev/vite-tanstack-config": "2.13.1",
112
117
  "@rsbuild/core": "^1.0.0",
113
118
  "@tailwindcss/vite": "^4.2.1",