@flowselections/logistiek-engine 1.0.169 → 1.0.170

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.
@@ -1 +1 @@
1
- {"version":3,"file":"FloridayPoortCard.d.ts","sourceRoot":"","sources":["../../src/components/FloridayPoortCard.tsx"],"names":[],"mappings":"AA6BA,wBAAgB,iBAAiB,gCAqIhC"}
1
+ {"version":3,"file":"FloridayPoortCard.d.ts","sourceRoot":"","sources":["../../src/components/FloridayPoortCard.tsx"],"names":[],"mappings":"AA6BA,wBAAgB,iBAAiB,gCAoJhC"}
@@ -19,11 +19,17 @@ function tijd(value) {
19
19
  }
20
20
  }
21
21
  export function FloridayPoortCard() {
22
- const { status, loading, fout, reload } = useFloridayGate();
22
+ const { status, schrijfstand, loading, fout, reload } = useFloridayGate();
23
23
  const refusals = Array.isArray(status.last_refusals) ? status.last_refusals : [];
24
24
  const sends = Array.isArray(status.last_sends) ? status.last_sends : [];
25
25
  const extern = Array.isArray(status.external_writes) ? status.external_writes : [];
26
26
  return (_jsxs(Card, { children: [_jsxs(CardHeader, { className: "flex flex-row items-start justify-between gap-4", children: [_jsxs("div", { children: [_jsxs(CardTitle, { className: "flex items-center gap-2", children: [status.enabled ? (_jsx(ShieldCheck, { className: "h-4 w-4 text-primary" })) : (_jsx(ShieldOff, { className: "h-4 w-4 text-muted-foreground" })), "Statussen wijzigen in Floriday"] }), _jsx(CardDescription, { children: status.enabled
27
27
  ? "Staat aan: een order wordt pas afgehandeld ná een goedgekeurde karrencontrole."
28
- : "Staat uit: er gaat geen enkele statuswijziging naar Floriday." })] }), _jsxs(Button, { variant: "outline", size: "sm", onClick: () => void reload(), children: [_jsx(RefreshCw, { className: "mr-2 h-4 w-4" }), "Vernieuwen"] })] }), _jsx(CardContent, { className: "space-y-4", children: loading ? (_jsx(Skeleton, { className: "h-20 w-full" })) : (_jsxs(_Fragment, { children: [fout ? (_jsxs("p", { className: "text-sm text-destructive", children: [fout, " Zolang dit niet gelezen kan worden, wordt er niets verstuurd."] })) : null, _jsxs("div", { className: "grid grid-cols-2 gap-3 sm:grid-cols-4", children: [_jsxs("div", { className: "rounded-md border p-3", children: [_jsx("p", { className: "text-xs text-muted-foreground", children: "Statussen" }), _jsx(Badge, { variant: status.enabled ? "default" : "outline", children: status.enabled ? "Aan" : "Uit" })] }), _jsxs("div", { className: "rounded-md border p-3", children: [_jsx("p", { className: "text-xs text-muted-foreground", children: "Voorraad doorgeven" }), _jsx(Badge, { variant: status.stock_enabled ? "default" : "outline", children: status.stock_enabled ? "Aan" : "Uit" })] }), _jsxs("div", { className: "rounded-md border p-3", children: [_jsx("p", { className: "text-xs text-muted-foreground", children: "Vandaag verstuurd" }), _jsx("p", { className: "text-lg font-semibold", children: status.sent_today })] }), _jsxs("div", { className: "rounded-md border p-3", children: [_jsx("p", { className: "text-xs text-muted-foreground", children: "Vandaag tegengehouden" }), _jsx("p", { className: "text-lg font-semibold", children: status.blocked_today })] }), _jsxs("div", { className: "rounded-md border p-3", children: [_jsx("p", { className: "text-xs text-muted-foreground", children: "Nog in de wachtrij" }), _jsx("p", { className: "text-lg font-semibold", children: status.open_pushes })] })] }), refusals.length > 0 ? (_jsxs("div", { className: "space-y-2", children: [_jsx("p", { className: "text-sm font-medium", children: "Laatst tegengehouden" }), _jsx("ul", { className: "space-y-1 text-sm text-muted-foreground", children: refusals.map((r, i) => (_jsxs("li", { className: "flex flex-wrap gap-2", children: [_jsx("span", { className: "font-medium text-foreground", children: r.order_ref }), _jsx("span", { children: r.reason }), _jsx("span", { className: "ml-auto", children: tijd(r.created_at) })] }, `${r.order_ref}-${i}`))) })] })) : null, sends.length > 0 ? (_jsxs("div", { className: "space-y-2", children: [_jsx("p", { className: "text-sm font-medium", children: "Laatst verstuurd" }), _jsx("ul", { className: "space-y-1 text-sm text-muted-foreground", children: sends.map((s, i) => (_jsxs("li", { className: "flex flex-wrap gap-2", children: [_jsx("span", { className: "font-medium text-foreground", children: s.order_ref }), _jsx("span", { children: s.ok ? "gelukt" : "mislukt" }), _jsx("span", { children: s.source_module ?? "onbekende bron" }), _jsx("span", { className: "ml-auto", children: tijd(s.created_at) })] }, `${s.order_ref}-${i}`))) })] })) : (_jsx("p", { className: "text-sm text-muted-foreground", children: "Vandaag is er vanuit deze omgeving nog niets naar Floriday gestuurd." })), extern.length > 0 ? (_jsxs("div", { className: "space-y-2", children: [_jsx("p", { className: "text-sm font-medium", children: "Al het verkeer naar Floriday (48 uur)" }), _jsx("p", { className: "text-xs text-muted-foreground", children: "Ook verkeer van andere onderdelen. Zie je hier iets wat niet van ons komt, dan schrijft een ander onderdeel rechtstreeks naar Floriday." }), _jsx("ul", { className: "space-y-1 text-sm text-muted-foreground", children: extern.map((w, i) => (_jsxs("li", { className: "flex flex-wrap gap-2", children: [_jsx("span", { className: "font-medium text-foreground", children: w.action ?? "onbekend" }), _jsx("span", { children: w.module ?? "onbekende module" }), _jsx("span", { children: w.caller ?? "onbekende aanroeper" }), _jsxs("span", { children: [w.gelukt, " van ", w.pogingen, " gelukt"] }), _jsx("span", { className: "ml-auto", children: tijd(w.laatst) })] }, `${w.module}-${w.action}-${i}`))) })] })) : null] })) })] }));
28
+ : "Staat uit: er gaat geen enkele statuswijziging naar Floriday." })] }), _jsxs(Button, { variant: "outline", size: "sm", onClick: () => void reload(), children: [_jsx(RefreshCw, { className: "mr-2 h-4 w-4" }), "Vernieuwen"] })] }), _jsx(CardContent, { className: "space-y-4", children: loading ? (_jsx(Skeleton, { className: "h-20 w-full" })) : (_jsxs(_Fragment, { children: [fout ? (_jsxs("p", { className: "text-sm text-destructive", children: [fout, " Zolang dit niet gelezen kan worden, wordt er niets verstuurd."] })) : null, _jsxs("div", { className: "flex flex-wrap items-center gap-2 rounded-md border p-3", children: [_jsx(Badge, { variant: schrijfstand.readOnly ? "outline" : "default", children: !schrijfstand.known
29
+ ? "Floriday: stand onbekend"
30
+ : schrijfstand.readOnly
31
+ ? "Floriday: alleen lezen"
32
+ : "Floriday: schrijven toegestaan" }), _jsx("span", { className: "text-sm text-muted-foreground", children: schrijfstand.readOnly
33
+ ? "Er gaat niets naar Floriday, ook niet als de schakelaars aan staan. Wat klaarstaat wacht en gaat vanzelf verder zodra schrijven weer mag."
34
+ : "De schakelaars hieronder bepalen wat er naar Floriday mag." })] }), _jsxs("div", { className: "grid grid-cols-2 gap-3 sm:grid-cols-4", children: [_jsxs("div", { className: "rounded-md border p-3", children: [_jsx("p", { className: "text-xs text-muted-foreground", children: "Statussen" }), _jsx(Badge, { variant: status.enabled ? "default" : "outline", children: status.enabled ? "Aan" : "Uit" })] }), _jsxs("div", { className: "rounded-md border p-3", children: [_jsx("p", { className: "text-xs text-muted-foreground", children: "Voorraad doorgeven" }), _jsx(Badge, { variant: status.stock_enabled ? "default" : "outline", children: status.stock_enabled ? "Aan" : "Uit" })] }), _jsxs("div", { className: "rounded-md border p-3", children: [_jsx("p", { className: "text-xs text-muted-foreground", children: "Vandaag verstuurd" }), _jsx("p", { className: "text-lg font-semibold", children: status.sent_today })] }), _jsxs("div", { className: "rounded-md border p-3", children: [_jsx("p", { className: "text-xs text-muted-foreground", children: "Vandaag tegengehouden" }), _jsx("p", { className: "text-lg font-semibold", children: status.blocked_today })] }), _jsxs("div", { className: "rounded-md border p-3", children: [_jsx("p", { className: "text-xs text-muted-foreground", children: "Nog in de wachtrij" }), _jsx("p", { className: "text-lg font-semibold", children: status.open_pushes })] })] }), refusals.length > 0 ? (_jsxs("div", { className: "space-y-2", children: [_jsx("p", { className: "text-sm font-medium", children: "Laatst tegengehouden" }), _jsx("ul", { className: "space-y-1 text-sm text-muted-foreground", children: refusals.map((r, i) => (_jsxs("li", { className: "flex flex-wrap gap-2", children: [_jsx("span", { className: "font-medium text-foreground", children: r.order_ref }), _jsx("span", { children: r.reason }), _jsx("span", { className: "ml-auto", children: tijd(r.created_at) })] }, `${r.order_ref}-${i}`))) })] })) : null, sends.length > 0 ? (_jsxs("div", { className: "space-y-2", children: [_jsx("p", { className: "text-sm font-medium", children: "Laatst verstuurd" }), _jsx("ul", { className: "space-y-1 text-sm text-muted-foreground", children: sends.map((s, i) => (_jsxs("li", { className: "flex flex-wrap gap-2", children: [_jsx("span", { className: "font-medium text-foreground", children: s.order_ref }), _jsx("span", { children: s.ok ? "gelukt" : "mislukt" }), _jsx("span", { children: s.source_module ?? "onbekende bron" }), _jsx("span", { className: "ml-auto", children: tijd(s.created_at) })] }, `${s.order_ref}-${i}`))) })] })) : (_jsx("p", { className: "text-sm text-muted-foreground", children: "Vandaag is er vanuit deze omgeving nog niets naar Floriday gestuurd." })), extern.length > 0 ? (_jsxs("div", { className: "space-y-2", children: [_jsx("p", { className: "text-sm font-medium", children: "Al het verkeer naar Floriday (48 uur)" }), _jsx("p", { className: "text-xs text-muted-foreground", children: "Ook verkeer van andere onderdelen. Zie je hier iets wat niet van ons komt, dan schrijft een ander onderdeel rechtstreeks naar Floriday." }), _jsx("ul", { className: "space-y-1 text-sm text-muted-foreground", children: extern.map((w, i) => (_jsxs("li", { className: "flex flex-wrap gap-2", children: [_jsx("span", { className: "font-medium text-foreground", children: w.action ?? "onbekend" }), _jsx("span", { children: w.module ?? "onbekende module" }), _jsx("span", { children: w.caller ?? "onbekende aanroeper" }), _jsxs("span", { children: [w.gelukt, " van ", w.pogingen, " gelukt"] }), _jsx("span", { className: "ml-auto", children: tijd(w.laatst) })] }, `${w.module}-${w.action}-${i}`))) })] })) : null] })) })] }));
29
35
  }
@@ -1,3 +1,4 @@
1
+ import { type FloridayWriteMode } from "../lib/floridayWriteMode.js";
1
2
  export interface FloridayGateRefusal {
2
3
  order_ref: string;
3
4
  reason: string;
@@ -33,6 +34,7 @@ export interface FloridayGateStatus {
33
34
  }
34
35
  export declare function useFloridayGate(): {
35
36
  status: FloridayGateStatus;
37
+ schrijfstand: FloridayWriteMode;
36
38
  loading: boolean;
37
39
  fout: string | null;
38
40
  reload: () => Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"useFloridayGate.d.ts","sourceRoot":"","sources":["../../src/hooks/useFloridayGate.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,OAAO,CAAC;IACZ,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,mBAAmB,EAAE,CAAC;IACrC,UAAU,EAAE,gBAAgB,EAAE,CAAC;IAC/B,eAAe,EAAE,yBAAyB,EAAE,CAAC;CAC9C;AAaD,wBAAgB,eAAe;;;;;EAoC9B"}
1
+ {"version":3,"file":"useFloridayGate.d.ts","sourceRoot":"","sources":["../../src/hooks/useFloridayGate.ts"],"names":[],"mappings":"AAMA,OAAO,EAAkB,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAElF,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,OAAO,CAAC;IACZ,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,mBAAmB,EAAE,CAAC;IACrC,UAAU,EAAE,gBAAgB,EAAE,CAAC;IAC/B,eAAe,EAAE,yBAAyB,EAAE,CAAC;CAC9C;AAaD,wBAAgB,eAAe;;;;;;EA6C9B"}
@@ -3,6 +3,7 @@
3
3
  // ============================================================================
4
4
  import { useCallback, useEffect, useState } from "react";
5
5
  import { supabase } from "@flowselections/core";
6
+ import { parseWriteMode } from "../lib/floridayWriteMode.js";
6
7
  const LEEG = {
7
8
  enabled: false,
8
9
  stock_enabled: false,
@@ -17,9 +18,15 @@ export function useFloridayGate() {
17
18
  const [status, setStatus] = useState(LEEG);
18
19
  const [loading, setLoading] = useState(true);
19
20
  const [fout, setFout] = useState(null);
21
+ const [schrijfstand, setSchrijfstand] = useState(parseWriteMode(null));
20
22
  const load = useCallback(async () => {
21
23
  setLoading(true);
22
- const { data, error } = await supabase.rpc("logistics_floriday_gate_status");
24
+ const [{ data, error }, modus] = await Promise.all([
25
+ supabase.rpc("logistics_floriday_gate_status"),
26
+ supabase.rpc("floriday_write_mode").then((r) => (r.error ? null : r.data), () => null),
27
+ ]);
28
+ // Fail closed: onleesbaar of onbekend telt als alleen lezen.
29
+ setSchrijfstand(parseWriteMode(modus));
23
30
  if (error || !data) {
24
31
  // Fail closed: onleesbaar tonen we als "uit", nooit als "aan".
25
32
  setStatus(LEEG);
@@ -46,5 +53,5 @@ export function useFloridayGate() {
46
53
  const t = setInterval(() => void load(), 30000);
47
54
  return () => clearInterval(t);
48
55
  }, [load]);
49
- return { status, loading, fout, reload: load };
56
+ return { status, schrijfstand, loading, fout, reload: load };
50
57
  }