@flowselections/floriday-authenticatie-module 1.0.88 → 1.0.91
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/FlorydayConnectionPage.d.ts.map +1 -1
- package/dist-lib/components/floriday/FlorydayConnectionPage.js +2 -1
- package/dist-lib/components/settings/FloricodeHealthBanner.d.ts +5 -0
- package/dist-lib/components/settings/FloricodeHealthBanner.d.ts.map +1 -0
- package/dist-lib/components/settings/FloricodeHealthBanner.js +27 -0
- package/dist-lib/components/settings/FloricodeSettingsCard.d.ts.map +1 -1
- package/dist-lib/components/settings/FloricodeSettingsCard.js +17 -2
- package/dist-lib/index.d.ts +1 -0
- package/dist-lib/index.d.ts.map +1 -1
- package/dist-lib/index.js +1 -0
- package/dist-lib/integrations/supabase/types.d.ts +419 -0
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/cron/sync-floricode-all.d.ts.map +1 -1
- package/dist-lib/lib/cron/sync-floricode-all.js +0 -2
- package/dist-lib/lib/customer-sticker-fields.d.ts +5 -0
- package/dist-lib/lib/customer-sticker-fields.d.ts.map +1 -1
- package/dist-lib/lib/customer-sticker-fields.js +7 -0
- package/dist-lib/lib/floricode-regulatory-features.d.ts +1 -0
- package/dist-lib/lib/floricode-regulatory-features.d.ts.map +1 -1
- package/dist-lib/lib/floricode-regulatory-features.js +27 -12
- package/dist-lib/lib/floricode-sync-plan.d.ts +64 -0
- package/dist-lib/lib/floricode-sync-plan.d.ts.map +1 -0
- package/dist-lib/lib/floricode-sync-plan.js +54 -0
- package/dist-lib/lib/floricode-sync.server.d.ts +39 -7
- package/dist-lib/lib/floricode-sync.server.d.ts.map +1 -1
- package/dist-lib/lib/floricode-sync.server.js +131 -86
- package/dist-lib/lib/floricode.functions.d.ts +14 -0
- package/dist-lib/lib/floricode.functions.d.ts.map +1 -1
- package/dist-lib/lib/floricode.functions.js +26 -9
- package/dist-lib/lib/floriday-stickers.functions.js +2 -2
- package/dist-lib/lib/gateway/webhook-subscribe.d.ts.map +1 -1
- package/dist-lib/lib/gateway/webhook-subscribe.js +11 -1
- package/dist-lib/lib/module-version.d.ts +1 -1
- package/dist-lib/lib/module-version.js +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FlorydayConnectionPage.d.ts","sourceRoot":"","sources":["../../../src/components/floriday/FlorydayConnectionPage.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FlorydayConnectionPage.d.ts","sourceRoot":"","sources":["../../../src/components/floriday/FlorydayConnectionPage.tsx"],"names":[],"mappings":"AAOA,wBAAgB,sBAAsB,gCAiBrC"}
|
|
@@ -4,6 +4,7 @@ import { FloricodeSettingsCard } from "../settings/FloricodeSettingsCard.js";
|
|
|
4
4
|
import { FlorydayWebhooksCard } from "./FlorydayWebhooksCard.js";
|
|
5
5
|
import { FlorydayShellRoutesCard } from "./FlorydayShellRoutesCard.js";
|
|
6
6
|
import { FlorydayCronStallBanner } from "./FlorydayCronStallBanner.js";
|
|
7
|
+
import { FloricodeHealthBanner } from "../settings/FloricodeHealthBanner.js";
|
|
7
8
|
export function FlorydayConnectionPage() {
|
|
8
|
-
return (_jsxs("main", { className: "p-6 max-w-4xl mx-auto space-y-6", children: [_jsxs("div", { children: [_jsx("h1", { className: "text-2xl font-bold", children: "Floriday koppeling" }), _jsx("p", { className: "text-sm text-muted-foreground mt-1", children: "Verbind je Floriday-account om automatisch gegevens uit te wisselen met het platform." })] }), _jsx(FlorydayCronStallBanner, {}), _jsx(FlorydaySettingsCard, {}), _jsx(FlorydayWebhooksCard, {}), _jsx(FlorydayShellRoutesCard, {}), _jsx(FloricodeSettingsCard, {})] }));
|
|
9
|
+
return (_jsxs("main", { className: "p-6 max-w-4xl mx-auto space-y-6", children: [_jsxs("div", { children: [_jsx("h1", { className: "text-2xl font-bold", children: "Floriday koppeling" }), _jsx("p", { className: "text-sm text-muted-foreground mt-1", children: "Verbind je Floriday-account om automatisch gegevens uit te wisselen met het platform." })] }), _jsx(FlorydayCronStallBanner, {}), _jsx(FloricodeHealthBanner, {}), _jsx(FlorydaySettingsCard, {}), _jsx(FlorydayWebhooksCard, {}), _jsx(FlorydayShellRoutesCard, {}), _jsx(FloricodeSettingsCard, {})] }));
|
|
9
10
|
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Waarschuwing voor de kaart en de pagina Floriday koppeling. Toont niets als alles goed is. */
|
|
2
|
+
export declare function FloricodeHealthBanner({ className }: {
|
|
3
|
+
className?: string;
|
|
4
|
+
}): import("react").JSX.Element | null;
|
|
5
|
+
//# sourceMappingURL=FloricodeHealthBanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FloricodeHealthBanner.d.ts","sourceRoot":"","sources":["../../../src/components/settings/FloricodeHealthBanner.tsx"],"names":[],"mappings":"AAMA,iGAAiG;AACjG,wBAAgB,qBAAqB,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,sCA6B1E"}
|
|
@@ -0,0 +1,27 @@
|
|
|
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 { getFloricodeCronStatus, getFloricodeSyncStatus } from "../../lib/floricode.functions.js";
|
|
6
|
+
import { classifyFloricodeSource } from "../../lib/floricode-sync-plan.js";
|
|
7
|
+
/** Waarschuwing voor de kaart en de pagina Floriday koppeling. Toont niets als alles goed is. */
|
|
8
|
+
export function FloricodeHealthBanner({ className }) {
|
|
9
|
+
const getStatus = useServerFn(getFloricodeSyncStatus);
|
|
10
|
+
const getCron = useServerFn(getFloricodeCronStatus);
|
|
11
|
+
const rows = useQuery({ queryKey: ["floricode-sync-status"], queryFn: () => getStatus(), refetchInterval: 60000 });
|
|
12
|
+
const cron = useQuery({ queryKey: ["floricode-cron-status"], queryFn: () => getCron(), refetchInterval: 60000 });
|
|
13
|
+
const now = Date.now();
|
|
14
|
+
const old = (rows.data ?? []).filter((r) => classifyFloricodeSource(r, now).stale && r.status !== "error");
|
|
15
|
+
const messages = [];
|
|
16
|
+
if (cron.data && !cron.data.scheduled) {
|
|
17
|
+
messages.push(cron.data.shellAddressMissing
|
|
18
|
+
? "Floricode-gegevens worden niet automatisch bijgewerkt: het adres van je werkomgeving ontbreekt."
|
|
19
|
+
: "Floricode-gegevens worden nog niet automatisch bijgewerkt. Dit wordt binnen een uur vanzelf ingepland.");
|
|
20
|
+
}
|
|
21
|
+
if (old.length > 0) {
|
|
22
|
+
messages.push(`Deze Floricode-gegevens zijn ouder dan 7 dagen: ${old.map((r) => r.resource).join(", ")}.`);
|
|
23
|
+
}
|
|
24
|
+
if (messages.length === 0)
|
|
25
|
+
return null;
|
|
26
|
+
return (_jsx("div", { role: "alert", className: "rounded-md border border-amber-300 bg-amber-50 px-3 py-2 text-sm text-amber-900 " + (className ?? ""), children: _jsxs("div", { className: "flex items-start gap-2", children: [_jsx(AlertTriangle, { className: "mt-0.5 h-4 w-4 shrink-0" }), _jsx("div", { className: "space-y-0.5", children: messages.map((m) => _jsx("p", { children: m }, m)) })] }) }));
|
|
27
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FloricodeSettingsCard.d.ts","sourceRoot":"","sources":["../../../src/components/settings/FloricodeSettingsCard.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FloricodeSettingsCard.d.ts","sourceRoot":"","sources":["../../../src/components/settings/FloricodeSettingsCard.tsx"],"names":[],"mappings":"AAoEA,wBAAgB,qBAAqB,gCA4EpC"}
|
|
@@ -5,6 +5,21 @@ import { useServerFn } from "@tanstack/react-start";
|
|
|
5
5
|
import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query";
|
|
6
6
|
import { Card, Button, Input, Label, Badge, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, toast, } from "@flowselections/core";
|
|
7
7
|
import { getFloricodeSettings, saveFloricodeCredentials, clearFloricodeCredentials, testFloricodeConnection, getFloricodeSyncStatus, triggerFloricodeResourceSync, resetFloricodeResourceCursor, } from "../../lib/floricode.functions.js";
|
|
8
|
+
import { FloricodeHealthBanner } from "./FloricodeHealthBanner.js";
|
|
9
|
+
import { classifyFloricodeSource } from "../../lib/floricode-sync-plan.js";
|
|
10
|
+
function sourceLabel(row) {
|
|
11
|
+
const v = classifyFloricodeSource(row, Date.now());
|
|
12
|
+
const nl = (n) => n.toLocaleString("nl-NL");
|
|
13
|
+
if (v.kind === "complete")
|
|
14
|
+
return v.stale ? "Compleet, maar ouder dan 7 dagen" : "Compleet";
|
|
15
|
+
if (v.kind === "busy")
|
|
16
|
+
return v.total ? `Bezig (${nl(v.done)} van ${nl(v.total)})` : `Bezig (${nl(v.done)})`;
|
|
17
|
+
if (v.kind === "stalled")
|
|
18
|
+
return `Staat stil sinds ${formatDate(v.since)}`;
|
|
19
|
+
if (v.kind === "error")
|
|
20
|
+
return "Er ging iets mis bij het bijwerken";
|
|
21
|
+
return "Nog nooit bijgewerkt";
|
|
22
|
+
}
|
|
8
23
|
const floricodeLogo = "/flowselections-assets/floriday-authenticatie/floricode-logo.png";
|
|
9
24
|
function formatDate(iso) {
|
|
10
25
|
if (!iso)
|
|
@@ -219,11 +234,11 @@ function SyncBlock({ configured }) {
|
|
|
219
234
|
const d = (STATUS_ORDER[a.meta.key] ?? 9) - (STATUS_ORDER[b.meta.key] ?? 9);
|
|
220
235
|
return d !== 0 ? d : a.row.resource.localeCompare(b.row.resource);
|
|
221
236
|
});
|
|
222
|
-
return (_jsx(StepBlock, { number: 3, title: "Gegevens up-to-date houden", description: "We halen je Floricode-gegevens automatisch op en bewaren ze in je werkomgeving. Zo werkt alles effici\u00EBnt & snel.", children: _jsxs("div", { className: "space-y-3", children: [classified.length === 0 && (_jsx("p", { className: "text-xs text-muted-foreground", children: "Nog geen synchronisatiegegevens beschikbaar." })), classified.map(({ row, meta }) => {
|
|
237
|
+
return (_jsx(StepBlock, { number: 3, title: "Gegevens up-to-date houden", description: "We halen je Floricode-gegevens automatisch op en bewaren ze in je werkomgeving. Zo werkt alles effici\u00EBnt & snel.", children: _jsxs("div", { className: "space-y-3", children: [_jsx(FloricodeHealthBanner, {}), classified.length === 0 && (_jsx("p", { className: "text-xs text-muted-foreground", children: "Nog geen synchronisatiegegevens beschikbaar." })), classified.map(({ row, meta }) => {
|
|
223
238
|
const hasProblem = meta.key === "error" ||
|
|
224
239
|
meta.key === "unavailable" ||
|
|
225
240
|
meta.key === "hanging";
|
|
226
|
-
return (_jsxs("div", { className: "rounded-lg border border-border/60 bg-card p-4", children: [_jsxs("div", { className: "grid grid-cols-[minmax(0,1fr)_auto] items-start gap-3 sm:flex sm:items-center sm:justify-between", children: [_jsxs("div", { className: "min-w-0", children: [_jsxs("div", { className: "flex items-center gap-2 flex-wrap", children: [_jsx("h5", { className: "font-medium text-sm truncate", children: row.resource }), hasProblem && (_jsxs("span", { className: `inline-flex items-center gap-1.5 rounded-full border px-2 py-0.5 text-[10px] font-medium ${meta.tone}`, children: [_jsx("span", { className: `h-1.5 w-1.5 rounded-full ${meta.dot}` }), meta.label] }))] }), _jsx("p", { className: "text-[11px] text-muted-foreground mt-0.5", children:
|
|
241
|
+
return (_jsxs("div", { className: "rounded-lg border border-border/60 bg-card p-4", children: [_jsxs("div", { className: "grid grid-cols-[minmax(0,1fr)_auto] items-start gap-3 sm:flex sm:items-center sm:justify-between", children: [_jsxs("div", { className: "min-w-0", children: [_jsxs("div", { className: "flex items-center gap-2 flex-wrap", children: [_jsx("h5", { className: "font-medium text-sm truncate", children: row.resource }), hasProblem && (_jsxs("span", { className: `inline-flex items-center gap-1.5 rounded-full border px-2 py-0.5 text-[10px] font-medium ${meta.tone}`, children: [_jsx("span", { className: `h-1.5 w-1.5 rounded-full ${meta.dot}` }), meta.label] }))] }), _jsx("p", { className: "text-[11px] text-muted-foreground mt-0.5", children: sourceLabel(row) })] }), _jsx(Button, { variant: "outline", size: "sm", className: "shrink-0", disabled: !configured || syncMut.isPending, onClick: () => syncMut.mutate(row.resource), children: syncMut.isPending && syncMut.variables === row.resource
|
|
227
242
|
? "Bezig…"
|
|
228
243
|
: "Nu bijwerken" })] }), _jsxs("div", { className: "mt-3 grid grid-cols-1 sm:grid-cols-2 gap-2", children: [_jsx(MetricTile, { label: "Laatst bijgewerkt", value: timeAgo(row.lastSyncAt) }), _jsx(MetricTile, { label: "Aantal records", value: (row.rowCount ?? 0).toLocaleString("nl-NL") })] }), hasProblem && (_jsxs("div", { className: "mt-3 flex items-center justify-between gap-3 flex-wrap", children: [row.errorMessage ? (_jsx("p", { className: `text-[11px] break-words ${meta.key === "unavailable"
|
|
229
244
|
? "text-amber-700"
|
package/dist-lib/index.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export { FlorydayConnectionPage } from './components/floriday/FlorydayConnection
|
|
|
4
4
|
export { FlorydayApiLogPage } from './components/floriday/FlorydayApiLogPage.js';
|
|
5
5
|
export { FlorydaySyncHealthBanner } from './components/floriday/FlorydaySyncHealthBanner.js';
|
|
6
6
|
export { FlorydayCredentialStatusBanner } from './components/floriday/FlorydayCredentialStatusBanner.js';
|
|
7
|
+
export { FloricodeHealthBanner } from './components/settings/FloricodeHealthBanner.js';
|
|
7
8
|
export * from './lib/floriday.functions.js';
|
|
8
9
|
export * from './lib/floriday-sync.functions.js';
|
|
9
10
|
export * from './lib/floriday-api-log.functions.js';
|
package/dist-lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAIvD,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,iDAAiD,CAAC;AACzF,OAAO,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAC;AACjF,OAAO,EAAE,wBAAwB,EAAE,MAAM,mDAAmD,CAAC;AAC7F,OAAO,EAAE,8BAA8B,EAAE,MAAM,yDAAyD,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAIvD,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,iDAAiD,CAAC;AACzF,OAAO,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAC;AACjF,OAAO,EAAE,wBAAwB,EAAE,MAAM,mDAAmD,CAAC;AAC7F,OAAO,EAAE,8BAA8B,EAAE,MAAM,yDAAyD,CAAC;AACzG,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AAGvF,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kCAAkC,CAAC;AACjD,cAAc,qCAAqC,CAAC;AACpD,cAAc,sCAAsC,CAAC;AAErD,eAAO,MAAM,2BAA2B,EAAE,UA2BzC,CAAC"}
|
package/dist-lib/index.js
CHANGED
|
@@ -6,6 +6,7 @@ export { FlorydayConnectionPage } from './components/floriday/FlorydayConnection
|
|
|
6
6
|
export { FlorydayApiLogPage } from './components/floriday/FlorydayApiLogPage.js';
|
|
7
7
|
export { FlorydaySyncHealthBanner } from './components/floriday/FlorydaySyncHealthBanner.js';
|
|
8
8
|
export { FlorydayCredentialStatusBanner } from './components/floriday/FlorydayCredentialStatusBanner.js';
|
|
9
|
+
export { FloricodeHealthBanner } from './components/settings/FloricodeHealthBanner.js';
|
|
9
10
|
export * from './lib/floriday.functions.js';
|
|
10
11
|
export * from './lib/floriday-sync.functions.js';
|
|
11
12
|
export * from './lib/floriday-api-log.functions.js';
|