@flowselections/floriday-klanten-module 1.0.49 → 1.0.50
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/klanten/DeliveryLocationsTab.js +1 -1
- package/dist-lib/components/klanten/DiscountsTab.js +1 -1
- package/dist-lib/components/klanten/ExternalCacheBanner.d.ts.map +1 -1
- package/dist-lib/components/klanten/ExternalCacheBanner.js +2 -5
- package/dist-lib/components/klanten/FloridayNetworkStatus.d.ts.map +1 -1
- package/dist-lib/components/klanten/FloridayNetworkStatus.js +3 -1
- package/dist-lib/components/klanten/KlantDetail.d.ts.map +1 -1
- package/dist-lib/components/klanten/KlantDetail.js +15 -3
- package/dist-lib/components/klanten/KlantDetailLayout.d.ts.map +1 -1
- package/dist-lib/components/klanten/KlantDetailLayout.js +3 -1
- package/dist-lib/components/klanten/KlantenOverzicht.js +2 -2
- package/dist-lib/components/klanten/SyncStatusChip.d.ts.map +1 -1
- package/dist-lib/components/klanten/SyncStatusChip.js +5 -4
- package/dist-lib/components/klanten/pricegroups/PriceGroupFormPage.js +2 -2
- package/dist-lib/components/klanten/pricegroups/UnknownFloridayMembers.js +2 -2
- package/dist-lib/integrations/supabase/types.d.ts +104 -0
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/floriday-network-status.functions.d.ts +2 -0
- package/dist-lib/lib/floriday-network-status.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-network-status.functions.js +38 -17
- package/dist-lib/lib/friendly-twinfield-error.d.ts +8 -0
- package/dist-lib/lib/friendly-twinfield-error.d.ts.map +1 -0
- package/dist-lib/lib/friendly-twinfield-error.js +16 -0
- package/package.json +1 -1
|
@@ -2,6 +2,8 @@ export type FloridayNetworkStatus = {
|
|
|
2
2
|
/** null = onbekend (geen actieve Floriday-koppeling). */
|
|
3
3
|
inNetwork: boolean | null;
|
|
4
4
|
endDate: string | null;
|
|
5
|
+
/** Alleen voor beheerders: waarom het antwoord onbekend is. */
|
|
6
|
+
reason: string | null;
|
|
5
7
|
};
|
|
6
8
|
/**
|
|
7
9
|
* "In je Floriday-netwerk": alleen lezen uit de caches van de Floriday-module, op organisatie-id.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"floriday-network-status.functions.d.ts","sourceRoot":"","sources":["../../src/lib/floriday-network-status.functions.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,qBAAqB,GAAG;IAClC,yDAAyD;IACzD,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"floriday-network-status.functions.d.ts","sourceRoot":"","sources":["../../src/lib/floriday-network-status.functions.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,qBAAqB,GAAG;IAClC,yDAAyD;IACzD,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,+DAA+D;IAC/D,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,wBAAwB;;;;8CAEX,OAAO;;kCAgD7B,CAAC"}
|
|
@@ -11,23 +11,44 @@ export const getFloridayNetworkStatus = createServerFn({ method: "GET" })
|
|
|
11
11
|
.inputValidator((input) => z.object({ organizationId: z.string().min(1).max(64) }).parse(input))
|
|
12
12
|
.handler(async ({ data, context }) => {
|
|
13
13
|
const sb = context.supabase;
|
|
14
|
-
|
|
15
|
-
.from("floriday_connections")
|
|
16
|
-
.select("id")
|
|
17
|
-
.eq("is_active", true)
|
|
18
|
-
.order("updated_at", { ascending: false })
|
|
19
|
-
.limit(1)
|
|
20
|
-
.maybeSingle();
|
|
14
|
+
// Voorkeur: alleen-lezen functie van Floriday-auth (zodra geleverd). Ontbreekt die: terugval, fail closed.
|
|
21
15
|
let inNetwork = null;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
16
|
+
let reason = null;
|
|
17
|
+
const rpc = await sb.rpc("floriday_network_status", { p_organization_id: data.organizationId });
|
|
18
|
+
if (!rpc.error) {
|
|
19
|
+
const row = Array.isArray(rpc.data) ? rpc.data[0] : rpc.data;
|
|
20
|
+
inNetwork = typeof row?.in_network === "boolean" ? row.in_network : null;
|
|
21
|
+
if (inNetwork === null)
|
|
22
|
+
reason = "Geen actieve Floriday-koppeling";
|
|
23
|
+
else if (row?.list_synced_at) {
|
|
24
|
+
const days = Math.floor((Date.now() - new Date(row.list_synced_at).getTime()) / 86400000);
|
|
25
|
+
if (days >= 2)
|
|
26
|
+
reason = `Verbindingenlijst ${days} dagen oud`;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
const { data: conn } = await sb
|
|
31
|
+
.from("floriday_connections")
|
|
32
|
+
.select("id")
|
|
33
|
+
.eq("is_active", true)
|
|
34
|
+
.order("updated_at", { ascending: false })
|
|
35
|
+
.limit(1)
|
|
36
|
+
.maybeSingle();
|
|
37
|
+
if (conn?.id) {
|
|
38
|
+
const { data: rows, error } = await sb
|
|
39
|
+
.from("floriday_connections_cache")
|
|
40
|
+
.select("connection_id")
|
|
41
|
+
.eq("connection_id", conn.id)
|
|
42
|
+
.eq("data->>customerOrganizationId", data.organizationId)
|
|
43
|
+
.eq("data->>isDeleted", "false")
|
|
44
|
+
.limit(1);
|
|
45
|
+
inNetwork = error ? null : (rows ?? []).length > 0;
|
|
46
|
+
if (error)
|
|
47
|
+
reason = "Verbindingenlijst niet leesbaar";
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
reason = "Verbindingenlijst niet leesbaar (leesfunctie van Floriday-auth ontbreekt)";
|
|
51
|
+
}
|
|
31
52
|
}
|
|
32
53
|
const { data: cust } = await sb
|
|
33
54
|
.from("floriday_customers_cache")
|
|
@@ -37,5 +58,5 @@ export const getFloridayNetworkStatus = createServerFn({ method: "GET" })
|
|
|
37
58
|
.limit(1)
|
|
38
59
|
.maybeSingle();
|
|
39
60
|
const end = cust?.data?.endDate;
|
|
40
|
-
return { inNetwork, endDate: typeof end === "string" && end.trim() ? end : null };
|
|
61
|
+
return { inNetwork, reason, endDate: typeof end === "string" && end.trim() ? end : null };
|
|
41
62
|
});
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Maakt van een opgeslagen Twinfield-fout een rustige tekst voor gebruikers.
|
|
3
|
+
* Technische fouten (SOAP, HTTP, XML) worden vervangen door één vaste zin;
|
|
4
|
+
* een voorvoegsel "fieldN:" wordt weggehaald. De ruwe tekst blijft in het logboek.
|
|
5
|
+
*/
|
|
6
|
+
export declare const GENERIC_BOOKKEEPING_ERROR = "De boekhouding gaf een fout. Probeer het later opnieuw.";
|
|
7
|
+
export declare function friendlyTwinfieldError(raw: string | null | undefined): string | null;
|
|
8
|
+
//# sourceMappingURL=friendly-twinfield-error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"friendly-twinfield-error.d.ts","sourceRoot":"","sources":["../../src/lib/friendly-twinfield-error.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,4DAA4D,CAAC;AAEnG,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAMpF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Maakt van een opgeslagen Twinfield-fout een rustige tekst voor gebruikers.
|
|
3
|
+
* Technische fouten (SOAP, HTTP, XML) worden vervangen door één vaste zin;
|
|
4
|
+
* een voorvoegsel "fieldN:" wordt weggehaald. De ruwe tekst blijft in het logboek.
|
|
5
|
+
*/
|
|
6
|
+
export const GENERIC_BOOKKEEPING_ERROR = "De boekhouding gaf een fout. Probeer het later opnieuw.";
|
|
7
|
+
export function friendlyTwinfieldError(raw) {
|
|
8
|
+
if (!raw)
|
|
9
|
+
return null;
|
|
10
|
+
const s = raw.replace(/^\s*field\d+\s*:\s*/i, "").trim();
|
|
11
|
+
if (!s)
|
|
12
|
+
return null;
|
|
13
|
+
if (/soap|http|xml|<\/?[a-z]|status \d{3}|fetch|timeout|ECONN/i.test(s))
|
|
14
|
+
return GENERIC_BOOKKEEPING_ERROR;
|
|
15
|
+
return s;
|
|
16
|
+
}
|