@flowselections/floriday-voorraad 1.0.34 → 1.0.36

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 (112) hide show
  1. package/dist-lib/components/TemplatePage.d.ts +1 -1
  2. package/dist-lib/components/TemplatePage.d.ts.map +1 -1
  3. package/dist-lib/components/settings/VoorraadSettingsCard.d.ts +2 -0
  4. package/dist-lib/components/settings/VoorraadSettingsCard.d.ts.map +1 -0
  5. package/dist-lib/components/settings/VoorraadSettingsCard.js +39 -0
  6. package/dist-lib/components/voorraad/AdditionalPackagingDialog.d.ts +1 -1
  7. package/dist-lib/components/voorraad/AdditionalPackagingDialog.d.ts.map +1 -1
  8. package/dist-lib/components/voorraad/ArtikelCompositionCard.d.ts +1 -1
  9. package/dist-lib/components/voorraad/ArtikelCompositionCard.d.ts.map +1 -1
  10. package/dist-lib/components/voorraad/ArtikelWizard.d.ts +1 -1
  11. package/dist-lib/components/voorraad/ArtikelWizard.d.ts.map +1 -1
  12. package/dist-lib/components/voorraad/ConnectionBadge.d.ts +1 -1
  13. package/dist-lib/components/voorraad/ConnectionBadge.d.ts.map +1 -1
  14. package/dist-lib/components/voorraad/ConnectionPicker.d.ts +8 -0
  15. package/dist-lib/components/voorraad/ConnectionPicker.d.ts.map +1 -0
  16. package/dist-lib/components/voorraad/ConnectionPicker.js +8 -0
  17. package/dist-lib/components/voorraad/EditArtikelPage.d.ts +1 -1
  18. package/dist-lib/components/voorraad/EditArtikelPage.d.ts.map +1 -1
  19. package/dist-lib/components/voorraad/ExcelExportButton.d.ts +1 -1
  20. package/dist-lib/components/voorraad/ExcelExportButton.d.ts.map +1 -1
  21. package/dist-lib/components/voorraad/FloridayInfoCard.d.ts +1 -1
  22. package/dist-lib/components/voorraad/FloridayInfoCard.d.ts.map +1 -1
  23. package/dist-lib/components/voorraad/FloridayStatusBadge.d.ts +1 -1
  24. package/dist-lib/components/voorraad/FloridayStatusBadge.d.ts.map +1 -1
  25. package/dist-lib/components/voorraad/FustenPage.d.ts +1 -1
  26. package/dist-lib/components/voorraad/FustenPage.d.ts.map +1 -1
  27. package/dist-lib/components/voorraad/ModuleHealthCard.d.ts +1 -1
  28. package/dist-lib/components/voorraad/ModuleHealthCard.d.ts.map +1 -1
  29. package/dist-lib/components/voorraad/NieuwArtikelPage.d.ts +1 -1
  30. package/dist-lib/components/voorraad/NieuwArtikelPage.d.ts.map +1 -1
  31. package/dist-lib/components/voorraad/OrderHistoryCard.d.ts +1 -1
  32. package/dist-lib/components/voorraad/OrderHistoryCard.d.ts.map +1 -1
  33. package/dist-lib/components/voorraad/PriceStatusBadge.d.ts +1 -1
  34. package/dist-lib/components/voorraad/PriceStatusBadge.d.ts.map +1 -1
  35. package/dist-lib/components/voorraad/ProductCustomFieldsCard.d.ts +1 -1
  36. package/dist-lib/components/voorraad/ProductCustomFieldsCard.d.ts.map +1 -1
  37. package/dist-lib/components/voorraad/ProductLinkCard.d.ts +1 -1
  38. package/dist-lib/components/voorraad/ProductLinkCard.d.ts.map +1 -1
  39. package/dist-lib/components/voorraad/PublicatiesPage.d.ts +1 -1
  40. package/dist-lib/components/voorraad/PublicatiesPage.d.ts.map +1 -1
  41. package/dist-lib/components/voorraad/PublishProgressCard.d.ts +1 -1
  42. package/dist-lib/components/voorraad/PublishProgressCard.d.ts.map +1 -1
  43. package/dist-lib/components/voorraad/PublishReadinessCard.d.ts +1 -1
  44. package/dist-lib/components/voorraad/PublishReadinessCard.d.ts.map +1 -1
  45. package/dist-lib/components/voorraad/StepSamenstelling.d.ts +1 -1
  46. package/dist-lib/components/voorraad/StepSamenstelling.d.ts.map +1 -1
  47. package/dist-lib/components/voorraad/StockBulkButtons.d.ts +1 -1
  48. package/dist-lib/components/voorraad/StockBulkButtons.d.ts.map +1 -1
  49. package/dist-lib/components/voorraad/StockPushMonitor.d.ts +1 -1
  50. package/dist-lib/components/voorraad/StockPushMonitor.d.ts.map +1 -1
  51. package/dist-lib/components/voorraad/StockSyncStatus.d.ts +1 -1
  52. package/dist-lib/components/voorraad/StockSyncStatus.d.ts.map +1 -1
  53. package/dist-lib/components/voorraad/ValidationOverviewTable.d.ts +1 -1
  54. package/dist-lib/components/voorraad/ValidationOverviewTable.d.ts.map +1 -1
  55. package/dist-lib/components/voorraad/ValidationPage.d.ts +1 -1
  56. package/dist-lib/components/voorraad/ValidationPage.d.ts.map +1 -1
  57. package/dist-lib/components/voorraad/VoorraadDashboard.d.ts +1 -1
  58. package/dist-lib/components/voorraad/VoorraadDashboard.d.ts.map +1 -1
  59. package/dist-lib/components/voorraad/VoorraadPage.d.ts +1 -1
  60. package/dist-lib/components/voorraad/VoorraadPage.d.ts.map +1 -1
  61. package/dist-lib/components/voorraad/VoorraadPagination.d.ts +1 -1
  62. package/dist-lib/components/voorraad/VoorraadPagination.d.ts.map +1 -1
  63. package/dist-lib/components/voorraad/VoorraadStockCard.d.ts +1 -1
  64. package/dist-lib/components/voorraad/VoorraadStockCard.d.ts.map +1 -1
  65. package/dist-lib/components/voorraad/VoorraadStockCard.js +104 -5
  66. package/dist-lib/components/voorraad/VoorraadTable.d.ts +1 -1
  67. package/dist-lib/components/voorraad/VoorraadTable.d.ts.map +1 -1
  68. package/dist-lib/components/voorraad/VoorraadVeldenCard.d.ts +1 -1
  69. package/dist-lib/components/voorraad/VoorraadVeldenCard.d.ts.map +1 -1
  70. package/dist-lib/hooks/useFloriday.d.ts +6 -6
  71. package/dist-lib/hooks/useFloriday.d.ts.map +1 -1
  72. package/dist-lib/hooks/useFloridayVbnRequired.d.ts +2 -2
  73. package/dist-lib/hooks/useFloridayVbnRequired.d.ts.map +1 -1
  74. package/dist-lib/hooks/useStockPushJobs.d.ts +3 -3
  75. package/dist-lib/hooks/useStockPushJobs.d.ts.map +1 -1
  76. package/dist-lib/hooks/useStockSyncHealth.d.ts +1 -1
  77. package/dist-lib/hooks/useStockSyncHealth.d.ts.map +1 -1
  78. package/dist-lib/hooks/useTradeItemStock.d.ts +7 -5
  79. package/dist-lib/hooks/useTradeItemStock.d.ts.map +1 -1
  80. package/dist-lib/hooks/useTradeItemStock.js +14 -18
  81. package/dist-lib/hooks/useTradeItemSupplyLine.d.ts +1 -1
  82. package/dist-lib/hooks/useTradeItemSupplyLine.d.ts.map +1 -1
  83. package/dist-lib/hooks/useVbnRegulatoryFeatures.d.ts +1 -1
  84. package/dist-lib/hooks/useVbnRegulatoryFeatures.d.ts.map +1 -1
  85. package/dist-lib/index.d.ts +2 -0
  86. package/dist-lib/index.d.ts.map +1 -1
  87. package/dist-lib/index.js +2 -0
  88. package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
  89. package/dist-lib/integrations/supabase/client.d.ts.map +1 -1
  90. package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
  91. package/dist-lib/lib/floricode-required-features.functions.d.ts +7 -1
  92. package/dist-lib/lib/floricode-required-features.functions.d.ts.map +1 -1
  93. package/dist-lib/lib/floriday-customer-offer.functions.d.ts +1 -3
  94. package/dist-lib/lib/floriday-customer-offer.functions.d.ts.map +1 -1
  95. package/dist-lib/lib/floriday-env.functions.d.ts.map +1 -1
  96. package/dist-lib/lib/floriday-gateway.functions.d.ts.map +1 -1
  97. package/dist-lib/lib/floriday-vbn-required.functions.d.ts.map +1 -1
  98. package/dist-lib/lib/floriday-warehouse.functions.d.ts.map +1 -1
  99. package/dist-lib/lib/floriday-writes.functions.d.ts.map +1 -1
  100. package/dist-lib/lib/module-health.functions.d.ts.map +1 -1
  101. package/dist-lib/lib/module-health.functions.js +88 -0
  102. package/dist-lib/lib/stock-sync.functions.d.ts.map +1 -1
  103. package/package.json +13 -1
  104. package/dist-lib/components/voorraad/LogistiekTakenCard.d.ts +0 -2
  105. package/dist-lib/components/voorraad/LogistiekTakenCard.d.ts.map +0 -1
  106. package/dist-lib/components/voorraad/LogistiekTakenCard.js +0 -54
  107. package/dist-lib/hooks/useLogisticsTasks.d.ts +0 -13
  108. package/dist-lib/hooks/useLogisticsTasks.d.ts.map +0 -1
  109. package/dist-lib/hooks/useLogisticsTasks.js +0 -155
  110. package/dist-lib/hooks/useRegisterModuleBaseUrl.d.ts +0 -2
  111. package/dist-lib/hooks/useRegisterModuleBaseUrl.d.ts.map +0 -1
  112. package/dist-lib/hooks/useRegisterModuleBaseUrl.js +0 -31
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flowselections/floriday-voorraad",
3
- "version": "1.0.34",
3
+ "version": "1.0.36",
4
4
  "sideEffects": false,
5
5
  "type": "module",
6
6
  "main": "./dist-lib/index.js",
@@ -95,6 +95,18 @@
95
95
  "route": "voorraad_/$id",
96
96
  "title": "Artikel bewerken",
97
97
  "nav": false
98
+ },
99
+ {
100
+ "export": "FustenPage",
101
+ "route": "voorraad_/fusten",
102
+ "title": "Fusten",
103
+ "nav": false
104
+ },
105
+ {
106
+ "export": "PublicatiesPage",
107
+ "route": "voorraad_/publicaties",
108
+ "title": "Publicaties",
109
+ "nav": false
98
110
  }
99
111
  ]
100
112
  }
@@ -1,2 +0,0 @@
1
- export declare function LogistiekTakenCard(): import("react").JSX.Element | null;
2
- //# sourceMappingURL=LogistiekTakenCard.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LogistiekTakenCard.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/LogistiekTakenCard.tsx"],"names":[],"mappings":"AAqBA,wBAAgB,kBAAkB,uCAoIjC"}
@@ -1,54 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- /**
3
- * Toont de taken die de Logistics Engine voor de voorraadmodule plande
4
- * (public.logistics_tasks, owner_module = "voorraad").
5
- *
6
- * Deze module beslist niets zelf: ze voert `stock.reserve` uit en meldt de
7
- * taak af. In schaduwmodus wordt alleen vergeleken, nooit geschreven.
8
- */
9
- import { useState } from "react";
10
- import { Button, Card } from "@flowselections/core";
11
- import { AlertTriangle, Eye, Play, RefreshCw } from "lucide-react";
12
- import { runStockReserveTask, useLogisticsTasks, } from "../../hooks/useLogisticsTasks";
13
- import { useFloridayConnection } from "../../hooks/useFloridayConnection";
14
- import { describeLoadCarriers, parseStockReservePlan, } from "../../lib/logistics-engine";
15
- export function LogistiekTakenCard() {
16
- const { tasks, loading, error, refetch } = useLogisticsTasks([
17
- "planned",
18
- "ready",
19
- ]);
20
- const { activeId } = useFloridayConnection();
21
- const [busyId, setBusyId] = useState(null);
22
- const [results, setResults] = useState({});
23
- const reserveTasks = tasks.filter((t) => t.task_type === "stock.reserve");
24
- if (loading)
25
- return null;
26
- if (!error && reserveTasks.length === 0)
27
- return null;
28
- async function handleRun(taskId) {
29
- const task = reserveTasks.find((t) => t.id === taskId);
30
- if (!task)
31
- return;
32
- setBusyId(taskId);
33
- try {
34
- const result = await runStockReserveTask(task, activeId);
35
- setResults((prev) => ({ ...prev, [taskId]: result }));
36
- }
37
- catch (e) {
38
- setResults((prev) => ({ ...prev, [taskId]: e?.message ?? String(e) }));
39
- }
40
- finally {
41
- setBusyId(null);
42
- refetch();
43
- }
44
- }
45
- return (_jsxs(Card, { className: "p-4 space-y-3", children: [_jsxs("div", { className: "flex items-center justify-between gap-2", children: [_jsxs("div", { children: [_jsx("h2", { className: "text-sm font-semibold", children: "Logistics Engine \u2014 taken" }), _jsx("p", { className: "text-xs text-muted-foreground", children: "De Engine plant; deze module voert alleen uit. Taken met schaduwmodus worden uitsluitend vergeleken." })] }), _jsx(Button, { variant: "outline", size: "sm", onClick: () => refetch(), children: _jsx(RefreshCw, { className: "h-4 w-4" }) })] }), error && (_jsxs("div", { className: "flex items-start gap-2 rounded-md border border-amber-500/30 bg-amber-500/10 px-3 py-2 text-sm text-amber-800", children: [_jsx(AlertTriangle, { className: "mt-0.5 h-4 w-4 shrink-0" }), _jsxs("span", { children: ["Taken niet leesbaar: ", error] })] })), _jsx("ul", { className: "space-y-2", children: reserveTasks.map((task) => {
46
- const plan = parseStockReservePlan(task.payload);
47
- const result = results[task.id];
48
- return (_jsxs("li", { className: "rounded-md border border-border p-3 text-sm", children: [_jsxs("div", { className: "flex items-start justify-between gap-3", children: [_jsxs("div", { className: "min-w-0", children: [_jsxs("div", { className: "font-medium", children: [task.task_type, " \u00B7 ", task.order_ref, task.shadow && (_jsx("span", { className: "ml-2 rounded bg-muted px-1.5 py-0.5 text-[10px] uppercase tracking-wide text-muted-foreground", children: "schaduw" }))] }), _jsxs("div", { className: "text-xs text-muted-foreground", children: [describeLoadCarriers(plan.loadCarriers), " \u00B7", " ", plan.lines.length, " regel(s) \u00B7 status ", task.status, task.rule_version != null
49
- ? ` · rule v${task.rule_version}`
50
- : "", task.planned_start
51
- ? ` · ${new Date(task.planned_start).toLocaleString("nl-NL")}`
52
- : ""] })] }), _jsx(Button, { size: "sm", variant: task.shadow ? "outline" : "default", onClick: () => handleRun(task.id), disabled: busyId === task.id, children: task.shadow ? (_jsxs(_Fragment, { children: [_jsx(Eye, { className: "mr-1 h-4 w-4" }), " Vergelijk"] })) : (_jsxs(_Fragment, { children: [_jsx(Play, { className: "mr-1 h-4 w-4" }), " Uitvoeren"] })) })] }), result && (_jsx("div", { className: "mt-2 rounded bg-muted/50 p-2 text-xs", children: typeof result === "string" ? (_jsx("span", { className: "text-destructive", children: result })) : (_jsxs(_Fragment, { children: [_jsx("div", { children: result.message }), result.diff.length > 0 && (_jsx("ul", { className: "mt-1 space-y-0.5", children: result.diff.map((d) => (_jsxs("li", { children: [d.tradeItemKey, ": ", d.currentReserved, " \u2192", " ", d.engineReserved, " (", d.delta >= 0 ? "+" : "", d.delta, ")"] }, d.tradeItemKey))) }))] })) }))] }, task.id));
53
- }) })] }));
54
- }
@@ -1,13 +0,0 @@
1
- import { type LogisticsTaskRow, type TaskExecutionResult } from "../lib/logistics-engine";
2
- export declare function useLogisticsTasks(statuses?: string[]): {
3
- tasks: LogisticsTaskRow[];
4
- loading: boolean;
5
- error: string | null;
6
- refetch: () => Promise<void>;
7
- };
8
- /**
9
- * Voert één `stock.reserve` taak uit. De Engine bepaalt WAT er gereserveerd
10
- * wordt; deze module rekent niets zelf uit.
11
- */
12
- export declare function runStockReserveTask(task: LogisticsTaskRow, connectionId: string | null): Promise<TaskExecutionResult>;
13
- //# sourceMappingURL=useLogisticsTasks.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useLogisticsTasks.d.ts","sourceRoot":"","sources":["../../src/hooks/useLogisticsTasks.ts"],"names":[],"mappings":"AAUA,OAAO,EAIL,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACzB,MAAM,yBAAyB,CAAC;AAKjC,wBAAgB,iBAAiB,CAAC,QAAQ,GAAE,MAAM,EAAyB;;;;;EAuD1E;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,gBAAgB,EACtB,YAAY,EAAE,MAAM,GAAG,IAAI,GAC1B,OAAO,CAAC,mBAAmB,CAAC,CAoG9B"}
@@ -1,155 +0,0 @@
1
- /**
2
- * Taken van de Logistics Engine voor deze module, rechtstreeks uit de
3
- * gedeelde Supabase-database (public.logistics_tasks).
4
- *
5
- * De Engine plant; wij tonen, voeren `stock.reserve` uit en melden af.
6
- * In schaduwmodus wordt alleen vergeleken en NIETS geschreven aan voorraad;
7
- * de taak wordt dan ook niet afgemeld.
8
- */
9
- import { useCallback, useEffect, useState } from "react";
10
- import { supabase } from "../integrations/supabase/client";
11
- import { OWNER_MODULE, describeLoadCarriers, parseStockReservePlan, } from "../lib/logistics-engine";
12
- const TASK_COLUMNS = "id,order_ref,buffer_ref,task_type,sequence,depends_on,planned_start,planned_end,due_at,status,shadow,payload,result,rule_version";
13
- export function useLogisticsTasks(statuses = ["planned", "ready"]) {
14
- const key = statuses.join(",");
15
- const [tasks, setTasks] = useState([]);
16
- const [loading, setLoading] = useState(true);
17
- const [error, setError] = useState(null);
18
- const refetch = useCallback(async () => {
19
- const { data, error } = await supabase
20
- .from("logistics_tasks")
21
- .select(TASK_COLUMNS)
22
- .eq("owner_module", OWNER_MODULE)
23
- .in("status", key.split(","))
24
- .order("planned_start", { ascending: true });
25
- if (error) {
26
- setError(error.message);
27
- return;
28
- }
29
- setError(null);
30
- setTasks((data ?? []));
31
- }, [key]);
32
- useEffect(() => {
33
- let cancelled = false;
34
- setLoading(true);
35
- (async () => {
36
- await refetch();
37
- if (!cancelled)
38
- setLoading(false);
39
- })();
40
- return () => {
41
- cancelled = true;
42
- };
43
- }, [refetch]);
44
- useEffect(() => {
45
- const channel = supabase
46
- .channel(`logistics-tasks-${OWNER_MODULE}`)
47
- .on("postgres_changes", {
48
- event: "*",
49
- schema: "public",
50
- table: "logistics_tasks",
51
- filter: `owner_module=eq.${OWNER_MODULE}`,
52
- }, () => {
53
- refetch();
54
- })
55
- .subscribe();
56
- return () => {
57
- supabase.removeChannel(channel);
58
- };
59
- }, [refetch]);
60
- return { tasks, loading, error, refetch };
61
- }
62
- /**
63
- * Voert één `stock.reserve` taak uit. De Engine bepaalt WAT er gereserveerd
64
- * wordt; deze module rekent niets zelf uit.
65
- */
66
- export async function runStockReserveTask(task, connectionId) {
67
- const plan = parseStockReservePlan(task.payload);
68
- const shadow = task.shadow;
69
- if (plan.lines.length === 0) {
70
- return {
71
- taskId: task.id,
72
- applied: false,
73
- shadow,
74
- diff: [],
75
- message: `Taak zonder regels (${describeLoadCarriers(plan.loadCarriers)}).`,
76
- };
77
- }
78
- const keys = plan.lines.map((l) => l.tradeItemKey);
79
- let query = supabase
80
- .from("trade_item_stock")
81
- .select("trade_item_key,physical_stock,reserved_stock,connection_id")
82
- .in("trade_item_key", keys);
83
- if (connectionId)
84
- query = query.eq("connection_id", connectionId);
85
- const { data: rows, error: readError } = await query;
86
- if (readError)
87
- throw new Error(`voorraad lezen: ${readError.message}`);
88
- const stock = (rows ?? []);
89
- const diff = plan.lines.map((line) => {
90
- const row = stock.find((r) => r.trade_item_key === line.tradeItemKey);
91
- const currentReserved = row?.reserved_stock ?? 0;
92
- return {
93
- tradeItemKey: line.tradeItemKey,
94
- currentReserved,
95
- engineReserved: line.quantity,
96
- delta: line.quantity - currentReserved,
97
- };
98
- });
99
- if (shadow) {
100
- return {
101
- taskId: task.id,
102
- applied: false,
103
- shadow: true,
104
- diff,
105
- message: `Schaduwmodus: ${diff.length} regel(s) vergeleken, niets geschreven (${describeLoadCarriers(plan.loadCarriers)}).`,
106
- };
107
- }
108
- await supabase
109
- .from("logistics_tasks")
110
- .update({ status: "in_progress", started_at: new Date().toISOString() })
111
- .eq("id", task.id);
112
- try {
113
- for (const line of plan.lines) {
114
- const row = stock.find((r) => r.trade_item_key === line.tradeItemKey);
115
- if (!row)
116
- throw new Error(`Geen voorraadrij voor ${line.tradeItemKey}`);
117
- const { error } = await supabase
118
- .from("trade_item_stock")
119
- .update({ reserved_stock: line.quantity })
120
- .eq("connection_id", row.connection_id)
121
- .eq("trade_item_key", line.tradeItemKey);
122
- if (error) {
123
- throw new Error(`reservering ${line.tradeItemKey}: ${error.message}`);
124
- }
125
- }
126
- }
127
- catch (e) {
128
- const message = e?.message ?? String(e);
129
- await supabase
130
- .from("logistics_tasks")
131
- .update({
132
- status: "failed",
133
- result: { message, diff },
134
- completed_at: new Date().toISOString(),
135
- })
136
- .eq("id", task.id);
137
- throw new Error(message);
138
- }
139
- const result = {
140
- taskId: task.id,
141
- applied: true,
142
- shadow: false,
143
- diff,
144
- message: `${plan.lines.length} regel(s) gereserveerd (${describeLoadCarriers(plan.loadCarriers)}).`,
145
- };
146
- await supabase
147
- .from("logistics_tasks")
148
- .update({
149
- status: "done",
150
- result: result,
151
- completed_at: new Date().toISOString(),
152
- })
153
- .eq("id", task.id);
154
- return result;
155
- }
@@ -1,2 +0,0 @@
1
- export declare function useRegisterModuleBaseUrl(): void;
2
- //# sourceMappingURL=useRegisterModuleBaseUrl.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useRegisterModuleBaseUrl.d.ts","sourceRoot":"","sources":["../../src/hooks/useRegisterModuleBaseUrl.ts"],"names":[],"mappings":"AAUA,wBAAgB,wBAAwB,SA0BvC"}
@@ -1,31 +0,0 @@
1
- /**
2
- * Registreert eenmalig per sessie de basis-URL van de shell waarin deze
3
- * module draait, zodat de Postgres-cron de voorraadsync-hooks kan aanroepen
4
- * zonder hardgecodeerde host.
5
- */
6
- import { useEffect, useRef } from "react";
7
- import { registerModuleBaseUrl } from "../lib/module-runtime-config.functions";
8
- let alreadyRegistered = false;
9
- export function useRegisterModuleBaseUrl() {
10
- const started = useRef(false);
11
- useEffect(() => {
12
- if (alreadyRegistered || started.current)
13
- return;
14
- started.current = true;
15
- alreadyRegistered = true;
16
- registerModuleBaseUrl()
17
- .then((res) => {
18
- if (res?.ok) {
19
- console.info(`[voorraad] basis-URL geregistreerd: ${res.baseUrl}${res.changed ? " (bijgewerkt)" : ""}`);
20
- }
21
- else {
22
- alreadyRegistered = false;
23
- console.warn(`[voorraad] basis-URL niet geregistreerd: ${res?.reason ?? "onbekende reden"}`);
24
- }
25
- })
26
- .catch((e) => {
27
- alreadyRegistered = false;
28
- console.warn("[voorraad] kon basis-URL niet registreren:", e?.message ?? e);
29
- });
30
- }, []);
31
- }