@flowselections/floriday-authenticatie-module 1.0.13 → 1.0.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-lib/components/floriday/FlorydaySyncHealthBanner.d.ts +20 -0
- package/dist-lib/components/floriday/FlorydaySyncHealthBanner.d.ts.map +1 -0
- package/dist-lib/components/floriday/FlorydaySyncHealthBanner.js +35 -0
- package/dist-lib/components/settings/FlorydaySettingsCard.d.ts.map +1 -1
- package/dist-lib/components/settings/FlorydaySettingsCard.js +75 -53
- package/dist-lib/integrations/supabase/auth-middleware.d.ts +6121 -2360
- package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.d.ts +6121 -2360
- package/dist-lib/integrations/supabase/client.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.server.d.ts +6121 -2360
- package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/types.d.ts +6259 -2382
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/types.js +10 -1
- package/dist-lib/lib/floricode-product-features.d.ts +50 -0
- package/dist-lib/lib/floricode-product-features.d.ts.map +1 -0
- package/dist-lib/lib/floricode-product-features.js +314 -0
- package/dist-lib/lib/floricode-regulatory-features.d.ts +41 -0
- package/dist-lib/lib/floricode-regulatory-features.d.ts.map +1 -0
- package/dist-lib/lib/floricode-regulatory-features.js +226 -0
- package/dist-lib/lib/floriday-auction-letters.functions.d.ts +9307 -0
- package/dist-lib/lib/floriday-auction-letters.functions.d.ts.map +1 -0
- package/dist-lib/lib/floriday-auction-letters.functions.js +129 -0
- package/dist-lib/lib/floriday-gateway-hmac.d.ts +29 -0
- package/dist-lib/lib/floriday-gateway-hmac.d.ts.map +1 -0
- package/dist-lib/lib/floriday-gateway-hmac.js +119 -0
- package/dist-lib/lib/floriday-labels.functions.d.ts +9312 -0
- package/dist-lib/lib/floriday-labels.functions.d.ts.map +1 -0
- package/dist-lib/lib/floriday-labels.functions.js +141 -0
- package/dist-lib/lib/floriday-public.functions.d.ts +55883 -0
- package/dist-lib/lib/floriday-public.functions.d.ts.map +1 -0
- package/dist-lib/lib/floriday-public.functions.js +241 -0
- package/dist-lib/lib/floriday-scopes.d.ts +20 -0
- package/dist-lib/lib/floriday-scopes.d.ts.map +1 -0
- package/dist-lib/lib/floriday-scopes.js +89 -0
- package/dist-lib/lib/floriday-stickers.functions.d.ts +9304 -0
- package/dist-lib/lib/floriday-stickers.functions.d.ts.map +1 -0
- package/dist-lib/lib/floriday-stickers.functions.js +128 -0
- package/dist-lib/lib/floriday-sync.functions.d.ts +240368 -1916
- package/dist-lib/lib/floriday-sync.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-sync.functions.js +836 -35
- package/dist-lib/lib/floriday-writes.functions.d.ts +55812 -0
- package/dist-lib/lib/floriday-writes.functions.d.ts.map +1 -0
- package/dist-lib/lib/floriday-writes.functions.js +160 -0
- package/dist-lib/lib/floriday.functions.d.ts +125816 -46888
- package/dist-lib/lib/floriday.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday.functions.js +451 -58
- package/package.json +2 -2
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type FlorydayEnvironment } from "../../lib/floriday.functions";
|
|
2
|
+
/**
|
|
3
|
+
* Herbruikbare waarschuwingsbanner voor andere modules.
|
|
4
|
+
*
|
|
5
|
+
* Toont een rode melding zodra een of meer Floriday-bronnen die door deze
|
|
6
|
+
* module gebruikt worden langer dan tweemaal hun verwachte sync-interval
|
|
7
|
+
* achterlopen. Toont niets als alles up-to-date is.
|
|
8
|
+
*
|
|
9
|
+
* Voorbeeld in de Verkoopmodule:
|
|
10
|
+
* <FlorydaySyncHealthBanner
|
|
11
|
+
* environment="live"
|
|
12
|
+
* watch={["sales-orders", "fulfillment-orders"]}
|
|
13
|
+
* />
|
|
14
|
+
*/
|
|
15
|
+
export declare function FlorydaySyncHealthBanner({ environment, watch, className, }: {
|
|
16
|
+
environment: FlorydayEnvironment;
|
|
17
|
+
watch: string[];
|
|
18
|
+
className?: string;
|
|
19
|
+
}): import("react/jsx-runtime").JSX.Element | null;
|
|
20
|
+
//# sourceMappingURL=FlorydaySyncHealthBanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FlorydaySyncHealthBanner.d.ts","sourceRoot":"","sources":["../../../src/components/floriday/FlorydaySyncHealthBanner.tsx"],"names":[],"mappings":"AAIA,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,0BAA0B,CAAC;AAElC;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CAAC,EACvC,WAAW,EACX,KAAK,EACL,SAAS,GACV,EAAE;IACD,WAAW,EAAE,mBAAmB,CAAC;IACjC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,kDAqCA"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useQuery } from "@tanstack/react-query";
|
|
3
|
+
import { useServerFn } from "@tanstack/react-start";
|
|
4
|
+
import { AlertTriangle } from "lucide-react";
|
|
5
|
+
import { getFlorydaySyncHealth, } from "../../lib/floriday.functions";
|
|
6
|
+
/**
|
|
7
|
+
* Herbruikbare waarschuwingsbanner voor andere modules.
|
|
8
|
+
*
|
|
9
|
+
* Toont een rode melding zodra een of meer Floriday-bronnen die door deze
|
|
10
|
+
* module gebruikt worden langer dan tweemaal hun verwachte sync-interval
|
|
11
|
+
* achterlopen. Toont niets als alles up-to-date is.
|
|
12
|
+
*
|
|
13
|
+
* Voorbeeld in de Verkoopmodule:
|
|
14
|
+
* <FlorydaySyncHealthBanner
|
|
15
|
+
* environment="live"
|
|
16
|
+
* watch={["sales-orders", "fulfillment-orders"]}
|
|
17
|
+
* />
|
|
18
|
+
*/
|
|
19
|
+
export function FlorydaySyncHealthBanner({ environment, watch, className, }) {
|
|
20
|
+
const fn = useServerFn(getFlorydaySyncHealth);
|
|
21
|
+
const query = useQuery({
|
|
22
|
+
queryKey: ["floriday-sync-health", environment, watch.join(",")],
|
|
23
|
+
queryFn: () => fn({ data: { environment } }),
|
|
24
|
+
refetchInterval: 60000,
|
|
25
|
+
});
|
|
26
|
+
if (!query.data?.ok)
|
|
27
|
+
return null;
|
|
28
|
+
const stale = query.data.items.filter((i) => watch.includes(i.entity_type) && i.is_stale);
|
|
29
|
+
if (stale.length === 0)
|
|
30
|
+
return null;
|
|
31
|
+
return (_jsx("div", { role: "alert", className: "rounded-md border border-red-300 bg-red-50 px-3 py-2 text-sm text-red-800 " +
|
|
32
|
+
(className ?? ""), children: _jsxs("div", { className: "flex items-start gap-2", children: [_jsx(AlertTriangle, { className: "mt-0.5 h-4 w-4 shrink-0" }), _jsxs("div", { children: [_jsx("p", { className: "font-medium", children: "Floriday-gegevens lopen achter" }), _jsxs("p", { className: "text-[12px] mt-0.5", children: ["De volgende onderdelen zijn al langer dan verwacht niet bijgewerkt:", " ", stale
|
|
33
|
+
.map((s) => `${s.entity_type} (${s.minutes_behind} min)`)
|
|
34
|
+
.join(", "), ". Controleer de Floriday-koppeling in Instellingen."] })] })] }) }));
|
|
35
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FlorydaySettingsCard.d.ts","sourceRoot":"","sources":["../../../src/components/settings/FlorydaySettingsCard.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FlorydaySettingsCard.d.ts","sourceRoot":"","sources":["../../../src/components/settings/FlorydaySettingsCard.tsx"],"names":[],"mappings":"AAyEA,wBAAgB,oBAAoB,4CAqHnC"}
|
|
@@ -6,7 +6,7 @@ import { useServerFn } from "@tanstack/react-start";
|
|
|
6
6
|
import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query";
|
|
7
7
|
import { Card, Button, Input, Label, Badge, Tabs, TabsList, TabsTrigger, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, toast, } from "@flowselections/core";
|
|
8
8
|
import { listFlorydayConnections, upsertFlorydayConnection, testFlorydayConnection, deleteFlorydayConnection, getFlorydaySettings, setFlorydayActiveEnvironment, listFlorydayWarehouses, updateFlorydayPublishingSettings, validateGln, syncFlorydayConnections, getFlorydaySyncStatus, } from "../../lib/floriday.functions";
|
|
9
|
-
import { syncFlorydayTradeItems, syncFlorydaySalesOrders, syncFlorydayCustomerOrganizations, syncFlorydayCarriers, } from "../../lib/floriday-sync.functions";
|
|
9
|
+
import { syncFlorydayTradeItems, syncFlorydaySalesOrders, syncFlorydayCustomerOrganizations, syncFlorydayCarriers, syncFlorydayFulfillmentOrders, syncFlorydayCustomerStickers, syncFlorydayWarehouses, syncFlorydayPackings, syncFlorydayDeliveryLocations, syncFlorydayClockSupplies, syncFlorydayDeliveryOrders, syncFlorydayClockPresales, syncFlorydayContracts, syncFlorydayBlanketOrders, syncFlorydayAdditionalServices, syncFlorydayCommercialServiceTypes, syncFlorydayCollections, syncFlorydayPriceGroups, syncFlorydayDeliveryConditionSets, syncFlorydaySalesStrategies, syncFlorydayBaseItems, syncFlorydayContractTradeItemGroups, } from "../../lib/floriday-sync.functions";
|
|
10
10
|
export function FlorydaySettingsCard() {
|
|
11
11
|
const [open, setOpen] = useState(false);
|
|
12
12
|
const qc = useQueryClient();
|
|
@@ -181,67 +181,89 @@ function formatRelative(iso) {
|
|
|
181
181
|
return `${days} dag${days === 1 ? "" : "en"} geleden`;
|
|
182
182
|
}
|
|
183
183
|
const SYNC_RESOURCES = [
|
|
184
|
-
{
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
},
|
|
191
|
-
{
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
},
|
|
198
|
-
{
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
},
|
|
205
|
-
{
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
schedule: "Wordt twee keer per dag automatisch bijgewerkt (rond 08:00 en 20:00).",
|
|
209
|
-
countLabel: "Aantal klanten",
|
|
210
|
-
successLabel: "Klantorganisaties",
|
|
211
|
-
},
|
|
212
|
-
{
|
|
213
|
-
key: "carriers",
|
|
214
|
-
title: "Vervoerders",
|
|
215
|
-
schedule: "Wordt twee keer per dag automatisch bijgewerkt (rond 08:00 en 20:00).",
|
|
216
|
-
countLabel: "Aantal vervoerders",
|
|
217
|
-
successLabel: "Vervoerders",
|
|
218
|
-
},
|
|
184
|
+
{ key: "connections", title: "Inkooprelaties", schedule: "Wordt twee keer per dag automatisch bijgewerkt (rond 08:00 en 20:00).", countLabel: "Aantal relaties", successLabel: "Inkooprelaties" },
|
|
185
|
+
{ key: "trade-items", title: "Producten", schedule: "Wordt elke 5 minuten automatisch bijgewerkt.", countLabel: "Aantal producten", successLabel: "Producten" },
|
|
186
|
+
{ key: "sales-orders", title: "Verkooporders", schedule: "Wordt elke 5 minuten automatisch bijgewerkt.", countLabel: "Aantal orders", successLabel: "Verkooporders" },
|
|
187
|
+
{ key: "customer-organizations", title: "Klantorganisaties", schedule: "Wordt twee keer per dag automatisch bijgewerkt.", countLabel: "Aantal klanten", successLabel: "Klantorganisaties" },
|
|
188
|
+
{ key: "carriers", title: "Vervoerders", schedule: "Wordt twee keer per dag automatisch bijgewerkt.", countLabel: "Aantal vervoerders", successLabel: "Vervoerders" },
|
|
189
|
+
{ key: "fulfillment-orders", title: "Veilingbrieven", schedule: "Wordt elke 5 minuten automatisch bijgewerkt.", countLabel: "Aantal brieven", successLabel: "Veilingbrieven" },
|
|
190
|
+
{ key: "customer-stickers", title: "Stickers van kopers", schedule: "Wordt elke 5 minuten automatisch bijgewerkt.", countLabel: "Aantal stickers", successLabel: "Stickers" },
|
|
191
|
+
{ key: "warehouses", title: "Magazijnen", schedule: "Wordt twee keer per dag automatisch bijgewerkt.", countLabel: "Aantal magazijnen", successLabel: "Magazijnen" },
|
|
192
|
+
{ key: "packings", title: "Verpakkingen", schedule: "Wordt dagelijks automatisch bijgewerkt.", countLabel: "Aantal verpakkingen", successLabel: "Verpakkingen" },
|
|
193
|
+
{ key: "delivery-locations", title: "Afleveradressen", schedule: "Wordt twee keer per dag automatisch bijgewerkt.", countLabel: "Aantal adressen", successLabel: "Afleveradressen" },
|
|
194
|
+
{ key: "clock-supplies", title: "Klokaanvoer", schedule: "Wordt elke 5 minuten automatisch bijgewerkt.", countLabel: "Aantal partijen", successLabel: "Klokaanvoer" },
|
|
195
|
+
{ key: "delivery-orders", title: "Daghandel", schedule: "Wordt elke 5 minuten automatisch bijgewerkt.", countLabel: "Aantal leveropdrachten", successLabel: "Daghandel" },
|
|
196
|
+
{ key: "clock-presales", title: "Klokvoorverkoop", schedule: "Wordt elke 5 minuten automatisch bijgewerkt.", countLabel: "Aantal voorverkopen", successLabel: "Klokvoorverkoop" },
|
|
197
|
+
{ key: "contracts", title: "Contracten", schedule: "Wordt elk uur automatisch bijgewerkt.", countLabel: "Aantal contracten", successLabel: "Contracten" },
|
|
198
|
+
{ key: "blanket-orders", title: "Contract-afroepen", schedule: "Wordt elke 15 minuten automatisch bijgewerkt.", countLabel: "Aantal afroepen", successLabel: "Contract-afroepen" },
|
|
199
|
+
// ── Stamdata voor productformulieren ───────────────────────────────────
|
|
200
|
+
{ key: "additional-services", title: "Extra services", schedule: "Wordt elk uur automatisch bijgewerkt.", countLabel: "Aantal services", successLabel: "Extra services" },
|
|
201
|
+
{ key: "commercial-service-types", title: "Servicetypes", schedule: "Wordt elk uur automatisch bijgewerkt.", countLabel: "Aantal types", successLabel: "Servicetypes" },
|
|
202
|
+
{ key: "collections", title: "Collecties", schedule: "Wordt elk uur automatisch bijgewerkt.", countLabel: "Aantal collecties", successLabel: "Collecties" },
|
|
203
|
+
{ key: "price-groups", title: "Prijsgroepen", schedule: "Wordt elk uur automatisch bijgewerkt.", countLabel: "Aantal prijsgroepen", successLabel: "Prijsgroepen" },
|
|
204
|
+
{ key: "delivery-condition-sets", title: "Leveringsvoorwaarden", schedule: "Wordt elk uur automatisch bijgewerkt.", countLabel: "Aantal sets", successLabel: "Leveringsvoorwaarden" },
|
|
205
|
+
{ key: "sales-strategies", title: "Verkoopstrategieën", schedule: "Wordt elk uur automatisch bijgewerkt.", countLabel: "Aantal strategieën", successLabel: "Verkoopstrategieën" },
|
|
206
|
+
{ key: "base-items", title: "Basisproducten", schedule: "Wordt elk uur automatisch bijgewerkt.", countLabel: "Aantal basisproducten", successLabel: "Basisproducten" },
|
|
207
|
+
{ key: "contract-trade-item-groups", title: "Contractgroepen", schedule: "Wordt elk uur automatisch bijgewerkt.", countLabel: "Aantal groepen", successLabel: "Contractgroepen" },
|
|
219
208
|
];
|
|
209
|
+
function formatSyncFailure(resource, error) {
|
|
210
|
+
const message = String(error ?? "onbekende fout");
|
|
211
|
+
const lower = message.toLowerCase();
|
|
212
|
+
const policyDenied = lower.includes("access_denied") ||
|
|
213
|
+
lower.includes("policy evaluation failed") ||
|
|
214
|
+
lower.includes("403") ||
|
|
215
|
+
lower.includes("forbidden");
|
|
216
|
+
if (resource === "sales-strategies" &&
|
|
217
|
+
(policyDenied ||
|
|
218
|
+
lower.includes("clock-supply") ||
|
|
219
|
+
lower.includes("verkoopstrategieën/klokaanvoer"))) {
|
|
220
|
+
return "Floriday heeft Verkoopstrategieën nog niet vrijgegeven voor deze koppeling. Laat dit in Floriday activeren en vernieuw daarna de verbinding.";
|
|
221
|
+
}
|
|
222
|
+
if ((resource === "contracts" ||
|
|
223
|
+
resource === "blanket-orders" ||
|
|
224
|
+
resource === "contract-trade-item-groups") &&
|
|
225
|
+
(policyDenied ||
|
|
226
|
+
lower.includes("contract:") ||
|
|
227
|
+
lower.includes("contracten-module"))) {
|
|
228
|
+
return "Floriday heeft de Contracten-module nog niet vrijgegeven voor deze koppeling. Laat dit in Floriday activeren en vernieuw daarna de verbinding.";
|
|
229
|
+
}
|
|
230
|
+
return message;
|
|
231
|
+
}
|
|
220
232
|
function SyncStatusPanel({ env, connection, }) {
|
|
221
233
|
const qc = useQueryClient();
|
|
222
234
|
const getStatus = useServerFn(getFlorydaySyncStatus);
|
|
223
|
-
const
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
235
|
+
const fns = {
|
|
236
|
+
"connections": useServerFn(syncFlorydayConnections),
|
|
237
|
+
"trade-items": useServerFn(syncFlorydayTradeItems),
|
|
238
|
+
"sales-orders": useServerFn(syncFlorydaySalesOrders),
|
|
239
|
+
"customer-organizations": useServerFn(syncFlorydayCustomerOrganizations),
|
|
240
|
+
"carriers": useServerFn(syncFlorydayCarriers),
|
|
241
|
+
"fulfillment-orders": useServerFn(syncFlorydayFulfillmentOrders),
|
|
242
|
+
"customer-stickers": useServerFn(syncFlorydayCustomerStickers),
|
|
243
|
+
"warehouses": useServerFn(syncFlorydayWarehouses),
|
|
244
|
+
"packings": useServerFn(syncFlorydayPackings),
|
|
245
|
+
"delivery-locations": useServerFn(syncFlorydayDeliveryLocations),
|
|
246
|
+
"clock-supplies": useServerFn(syncFlorydayClockSupplies),
|
|
247
|
+
"delivery-orders": useServerFn(syncFlorydayDeliveryOrders),
|
|
248
|
+
"clock-presales": useServerFn(syncFlorydayClockPresales),
|
|
249
|
+
"contracts": useServerFn(syncFlorydayContracts),
|
|
250
|
+
"blanket-orders": useServerFn(syncFlorydayBlanketOrders),
|
|
251
|
+
"additional-services": useServerFn(syncFlorydayAdditionalServices),
|
|
252
|
+
"commercial-service-types": useServerFn(syncFlorydayCommercialServiceTypes),
|
|
253
|
+
"collections": useServerFn(syncFlorydayCollections),
|
|
254
|
+
"price-groups": useServerFn(syncFlorydayPriceGroups),
|
|
255
|
+
"delivery-condition-sets": useServerFn(syncFlorydayDeliveryConditionSets),
|
|
256
|
+
"sales-strategies": useServerFn(syncFlorydaySalesStrategies),
|
|
257
|
+
"base-items": useServerFn(syncFlorydayBaseItems),
|
|
258
|
+
"contract-trade-item-groups": useServerFn(syncFlorydayContractTradeItemGroups),
|
|
259
|
+
};
|
|
228
260
|
const statusQuery = useQuery({
|
|
229
261
|
queryKey: ["floriday-sync-status", env],
|
|
230
262
|
queryFn: () => getStatus({ data: { environment: env } }),
|
|
231
263
|
enabled: Boolean(connection),
|
|
232
264
|
refetchInterval: 30000,
|
|
233
265
|
});
|
|
234
|
-
const syncFor = (key) => {
|
|
235
|
-
if (key === "connections")
|
|
236
|
-
return () => syncConnections({ data: { environment: env } });
|
|
237
|
-
if (key === "trade-items")
|
|
238
|
-
return () => syncTrade({ data: { environment: env } });
|
|
239
|
-
if (key === "sales-orders")
|
|
240
|
-
return () => syncSales({ data: { environment: env } });
|
|
241
|
-
if (key === "carriers")
|
|
242
|
-
return () => syncCarriers({ data: { environment: env } });
|
|
243
|
-
return () => syncCustomers({ data: { environment: env } });
|
|
244
|
-
};
|
|
266
|
+
const syncFor = (key) => () => fns[key]({ data: { environment: env } });
|
|
245
267
|
const syncMutation = useMutation({
|
|
246
268
|
mutationFn: async (key) => {
|
|
247
269
|
const res = await syncFor(key)();
|
|
@@ -256,7 +278,7 @@ function SyncStatusPanel({ env, connection, }) {
|
|
|
256
278
|
: `${meta.successLabel}: alles is al up-to-date.`);
|
|
257
279
|
}
|
|
258
280
|
else {
|
|
259
|
-
toast.error(`Bijwerken mislukt: ${res?.error
|
|
281
|
+
toast.error(`Bijwerken mislukt: ${formatSyncFailure(key, res?.error)}`);
|
|
260
282
|
}
|
|
261
283
|
qc.invalidateQueries({ queryKey: ["floriday-sync-status", env] });
|
|
262
284
|
},
|