@flowselections/floriday-voorraad 1.0.13 → 1.0.15

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 (114) hide show
  1. package/dist-lib/assets/floriday-logo.png.asset.json +11 -0
  2. package/dist-lib/components/voorraad/ArtikelWizard.d.ts +5 -0
  3. package/dist-lib/components/voorraad/ArtikelWizard.d.ts.map +1 -0
  4. package/dist-lib/components/voorraad/ArtikelWizard.js +1229 -0
  5. package/dist-lib/components/voorraad/EditArtikelPage.d.ts +4 -0
  6. package/dist-lib/components/voorraad/EditArtikelPage.d.ts.map +1 -0
  7. package/dist-lib/components/voorraad/EditArtikelPage.js +51 -0
  8. package/dist-lib/components/voorraad/NieuwArtikelPage.d.ts +2 -0
  9. package/dist-lib/components/voorraad/NieuwArtikelPage.d.ts.map +1 -0
  10. package/dist-lib/components/voorraad/NieuwArtikelPage.js +5 -0
  11. package/dist-lib/components/voorraad/StockBulkButtons.d.ts +7 -0
  12. package/dist-lib/components/voorraad/StockBulkButtons.d.ts.map +1 -0
  13. package/dist-lib/components/voorraad/StockBulkButtons.js +356 -0
  14. package/dist-lib/components/voorraad/ValidationOverviewTable.d.ts +7 -0
  15. package/dist-lib/components/voorraad/ValidationOverviewTable.d.ts.map +1 -0
  16. package/dist-lib/components/voorraad/ValidationOverviewTable.js +87 -0
  17. package/dist-lib/components/voorraad/ValidationPage.d.ts +2 -0
  18. package/dist-lib/components/voorraad/ValidationPage.d.ts.map +1 -0
  19. package/dist-lib/components/voorraad/ValidationPage.js +12 -0
  20. package/dist-lib/components/voorraad/VoorraadDashboard.d.ts +6 -0
  21. package/dist-lib/components/voorraad/VoorraadDashboard.d.ts.map +1 -0
  22. package/dist-lib/components/voorraad/VoorraadDashboard.js +42 -0
  23. package/dist-lib/components/voorraad/VoorraadPage.d.ts.map +1 -1
  24. package/dist-lib/components/voorraad/VoorraadPage.js +70 -11
  25. package/dist-lib/components/voorraad/VoorraadPagination.d.ts +10 -0
  26. package/dist-lib/components/voorraad/VoorraadPagination.d.ts.map +1 -0
  27. package/dist-lib/components/voorraad/VoorraadPagination.js +12 -0
  28. package/dist-lib/components/voorraad/VoorraadStockCard.d.ts +8 -0
  29. package/dist-lib/components/voorraad/VoorraadStockCard.d.ts.map +1 -0
  30. package/dist-lib/components/voorraad/VoorraadStockCard.js +33 -0
  31. package/dist-lib/components/voorraad/VoorraadTable.d.ts.map +1 -1
  32. package/dist-lib/components/voorraad/VoorraadTable.js +16 -5
  33. package/dist-lib/hooks/useFloriday.d.ts +55 -0
  34. package/dist-lib/hooks/useFloriday.d.ts.map +1 -0
  35. package/dist-lib/hooks/useFloriday.js +298 -0
  36. package/dist-lib/hooks/useLocalTradeItems.d.ts +17 -1
  37. package/dist-lib/hooks/useLocalTradeItems.d.ts.map +1 -1
  38. package/dist-lib/hooks/useLocalTradeItems.js +54 -10
  39. package/dist-lib/hooks/useTradeItemSpec.d.ts +42 -0
  40. package/dist-lib/hooks/useTradeItemSpec.d.ts.map +1 -0
  41. package/dist-lib/hooks/useTradeItemSpec.js +448 -0
  42. package/dist-lib/hooks/useTradeItemStock.d.ts +19 -0
  43. package/dist-lib/hooks/useTradeItemStock.d.ts.map +1 -0
  44. package/dist-lib/hooks/useTradeItemStock.js +78 -0
  45. package/dist-lib/hooks/useVbnRegulatoryFeatures.d.ts +3 -0
  46. package/dist-lib/hooks/useVbnRegulatoryFeatures.d.ts.map +1 -0
  47. package/dist-lib/hooks/useVbnRegulatoryFeatures.js +19 -0
  48. package/dist-lib/hooks/useVoorraadData.d.ts +2 -1
  49. package/dist-lib/hooks/useVoorraadData.d.ts.map +1 -1
  50. package/dist-lib/hooks/useVoorraadData.js +39 -11
  51. package/dist-lib/index.d.ts +4 -0
  52. package/dist-lib/index.d.ts.map +1 -1
  53. package/dist-lib/index.js +6 -5
  54. package/dist-lib/integrations/supabase/auth-middleware.d.ts +8346 -3367
  55. package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
  56. package/dist-lib/integrations/supabase/client.d.ts +8346 -3367
  57. package/dist-lib/integrations/supabase/client.d.ts.map +1 -1
  58. package/dist-lib/integrations/supabase/client.server.d.ts +8346 -3367
  59. package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
  60. package/dist-lib/integrations/supabase/types.d.ts +8460 -3341
  61. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  62. package/dist-lib/integrations/supabase/types.js +10 -1
  63. package/dist-lib/lib/__tests__/floricode-required-features.test.d.ts +2 -0
  64. package/dist-lib/lib/__tests__/floricode-required-features.test.d.ts.map +1 -0
  65. package/dist-lib/lib/__tests__/floricode-required-features.test.js +186 -0
  66. package/dist-lib/lib/floricode-client.d.ts +15 -1
  67. package/dist-lib/lib/floricode-client.d.ts.map +1 -1
  68. package/dist-lib/lib/floricode-client.js +42 -4
  69. package/dist-lib/lib/floricode-required-features.functions.d.ts +10026 -0
  70. package/dist-lib/lib/floricode-required-features.functions.d.ts.map +1 -0
  71. package/dist-lib/lib/floricode-required-features.functions.js +170 -0
  72. package/dist-lib/lib/floriday-client.d.ts +36 -8
  73. package/dist-lib/lib/floriday-client.d.ts.map +1 -1
  74. package/dist-lib/lib/floriday-client.js +206 -25
  75. package/dist-lib/lib/floriday-env.d.ts +29 -0
  76. package/dist-lib/lib/floriday-env.d.ts.map +1 -0
  77. package/dist-lib/lib/floriday-env.js +42 -0
  78. package/dist-lib/lib/floriday-env.server.d.ts +15 -0
  79. package/dist-lib/lib/floriday-env.server.d.ts.map +1 -0
  80. package/dist-lib/lib/floriday-env.server.js +13 -0
  81. package/dist-lib/lib/floriday-field-sources.d.ts +18 -0
  82. package/dist-lib/lib/floriday-field-sources.d.ts.map +1 -0
  83. package/dist-lib/lib/floriday-field-sources.js +45 -0
  84. package/dist-lib/lib/floriday-gateway-entities.d.ts +44 -0
  85. package/dist-lib/lib/floriday-gateway-entities.d.ts.map +1 -0
  86. package/dist-lib/lib/floriday-gateway-entities.js +51 -0
  87. package/dist-lib/lib/floriday-gateway.functions.d.ts +39999 -0
  88. package/dist-lib/lib/floriday-gateway.functions.d.ts.map +1 -0
  89. package/dist-lib/lib/floriday-gateway.functions.js +68 -0
  90. package/dist-lib/lib/floriday-gateway.server.d.ts +122 -0
  91. package/dist-lib/lib/floriday-gateway.server.d.ts.map +1 -0
  92. package/dist-lib/lib/floriday-gateway.server.js +230 -0
  93. package/dist-lib/lib/floriday-import-validator.d.ts +26 -0
  94. package/dist-lib/lib/floriday-import-validator.d.ts.map +1 -0
  95. package/dist-lib/lib/floriday-import-validator.js +41 -0
  96. package/dist-lib/lib/floriday-payload.d.ts +47 -3
  97. package/dist-lib/lib/floriday-payload.d.ts.map +1 -1
  98. package/dist-lib/lib/floriday-payload.js +179 -7
  99. package/dist-lib/lib/floriday-schema-to-zod.d.ts +9 -0
  100. package/dist-lib/lib/floriday-schema-to-zod.d.ts.map +1 -0
  101. package/dist-lib/lib/floriday-schema-to-zod.js +53 -0
  102. package/dist-lib/lib/floriday-writes.functions.d.ts +19998 -0
  103. package/dist-lib/lib/floriday-writes.functions.d.ts.map +1 -0
  104. package/dist-lib/lib/floriday-writes.functions.js +74 -0
  105. package/dist-lib/lib/image-resize.d.ts +43 -0
  106. package/dist-lib/lib/image-resize.d.ts.map +1 -0
  107. package/dist-lib/lib/image-resize.js +212 -0
  108. package/dist-lib/lib/normalize-errors-middleware.d.ts +2 -0
  109. package/dist-lib/lib/normalize-errors-middleware.d.ts.map +1 -0
  110. package/dist-lib/lib/normalize-errors-middleware.js +24 -0
  111. package/dist-lib/lib/wizard-step-fields.d.ts +15 -0
  112. package/dist-lib/lib/wizard-step-fields.d.ts.map +1 -0
  113. package/dist-lib/lib/wizard-step-fields.js +51 -0
  114. package/package.json +35 -14
@@ -0,0 +1,78 @@
1
+ import { useCallback, useEffect, useState } from "react";
2
+ import { supabase } from "../integrations/supabase/client";
3
+ const EMPTY = {
4
+ physical_stock: 0,
5
+ minimum_stock: 0,
6
+ reserved_stock: 0,
7
+ incoming_stock: 0,
8
+ notes: null,
9
+ };
10
+ export function stockKeyFor(params) {
11
+ if (params.tradeItemId)
12
+ return params.tradeItemId;
13
+ if (params.draftId)
14
+ return `draft:${params.draftId}`;
15
+ return null;
16
+ }
17
+ export function useTradeItemStock(connectionId, key) {
18
+ const [row, setRow] = useState(null);
19
+ const [loading, setLoading] = useState(false);
20
+ useEffect(() => {
21
+ if (!connectionId || !key) {
22
+ setRow(null);
23
+ return;
24
+ }
25
+ let cancelled = false;
26
+ setLoading(true);
27
+ (async () => {
28
+ const { data } = await supabase
29
+ .from("trade_item_stock")
30
+ .select("physical_stock,minimum_stock,reserved_stock,incoming_stock,notes,updated_at")
31
+ .eq("connection_id", connectionId)
32
+ .eq("trade_item_key", key)
33
+ .maybeSingle();
34
+ if (cancelled)
35
+ return;
36
+ setRow(data ?? { ...EMPTY });
37
+ setLoading(false);
38
+ })();
39
+ return () => {
40
+ cancelled = true;
41
+ };
42
+ }, [connectionId, key]);
43
+ const save = useCallback(async (values) => {
44
+ if (!connectionId || !key)
45
+ throw new Error("Ontbrekende connectie of artikel-key");
46
+ const userRes = await supabase.auth.getUser();
47
+ const userId = userRes.data.user?.id;
48
+ if (!userId)
49
+ throw new Error("Niet ingelogd");
50
+ const { error } = await supabase
51
+ .from("trade_item_stock")
52
+ .upsert({
53
+ user_id: userId,
54
+ connection_id: connectionId,
55
+ trade_item_key: key,
56
+ physical_stock: values.physical_stock,
57
+ minimum_stock: values.minimum_stock,
58
+ reserved_stock: values.reserved_stock,
59
+ incoming_stock: values.incoming_stock,
60
+ notes: values.notes,
61
+ }, { onConflict: "connection_id,trade_item_key" });
62
+ if (error)
63
+ throw new Error(error.message);
64
+ setRow(values);
65
+ }, [connectionId, key]);
66
+ return { row: row ?? EMPTY, loading, save };
67
+ }
68
+ export async function fetchStockMap(connectionId) {
69
+ const { data } = await supabase
70
+ .from("trade_item_stock")
71
+ .select("trade_item_key,physical_stock,minimum_stock,reserved_stock,incoming_stock,notes,updated_at")
72
+ .eq("connection_id", connectionId);
73
+ const map = new Map();
74
+ for (const r of (data ?? [])) {
75
+ map.set(r.trade_item_key, r);
76
+ }
77
+ return map;
78
+ }
@@ -0,0 +1,3 @@
1
+ import { type GetRequiredFeaturesResult } from "../lib/floricode-required-features.functions";
2
+ export declare function useVbnRegulatoryFeatures(vbnCode: string | null | undefined): import("@tanstack/react-query").UseQueryResult<GetRequiredFeaturesResult, Error>;
3
+ //# sourceMappingURL=useVbnRegulatoryFeatures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useVbnRegulatoryFeatures.d.ts","sourceRoot":"","sources":["../../src/hooks/useVbnRegulatoryFeatures.ts"],"names":[],"mappings":"AAQA,OAAO,EAEL,KAAK,yBAAyB,EAC/B,MAAM,8CAA8C,CAAC;AAEtD,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,oFAS1E"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Autoritatieve verplichte/geadviseerde karakteristieken per VBN-productcode,
3
+ * gelezen uit `floricode_records.RegulatoryFeatureType`.
4
+ *
5
+ * Vervangt de vroegere afleiding uit `codeLists['vbn-product-code']` /
6
+ * `vbn-product-group`, die deze koppeling niet bevat.
7
+ */
8
+ import { useQuery } from "@tanstack/react-query";
9
+ import { getVbnRequiredFeatures, } from "../lib/floricode-required-features.functions";
10
+ export function useVbnRegulatoryFeatures(vbnCode) {
11
+ const code = String(vbnCode ?? "").trim();
12
+ const enabled = /^\d{5,6}$/.test(code);
13
+ return useQuery({
14
+ queryKey: ["vbn-regulatory-features", code],
15
+ queryFn: () => getVbnRequiredFeatures({ data: { vbnCode: code } }),
16
+ enabled,
17
+ staleTime: 60 * 60 * 1000,
18
+ });
19
+ }
@@ -2,7 +2,8 @@ import { type TradeItem } from "../lib/floriday-client";
2
2
  /**
3
3
  * Reads trade items from the shared `floriday_trade_items_cache` (gepubliceerd,
4
4
  * gevuld door de Auth-module elke 5 min) en merget lokale, niet-gepubliceerde
5
- * producten uit `trade_item_drafts`.
5
+ * producten uit `trade_item_drafts`. Voorraadwaarden uit `trade_item_stock`
6
+ * overschrijven de cache-waarden (lokale bron van waarheid voor stock).
6
7
  */
7
8
  export declare function useVoorraadData(connectionId: string | null): {
8
9
  items: TradeItem[];
@@ -1 +1 @@
1
- {"version":3,"file":"useVoorraadData.d.ts","sourceRoot":"","sources":["../../src/hooks/useVoorraadData.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsB,KAAK,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAG5E;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;;;;;EAqD1D"}
1
+ {"version":3,"file":"useVoorraadData.d.ts","sourceRoot":"","sources":["../../src/hooks/useVoorraadData.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsB,KAAK,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAoB5E;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;;;;;EAkE1D"}
@@ -2,37 +2,61 @@ import { useCallback, useEffect, useState } from "react";
2
2
  import { supabase } from "../integrations/supabase/client";
3
3
  import { normaliseTradeItem } from "../lib/floriday-client";
4
4
  import { useLocalTradeItems } from "./useLocalTradeItems";
5
+ import { fetchStockMap } from "./useTradeItemStock";
6
+ function applyStock(item, s) {
7
+ if (!s)
8
+ return item;
9
+ const physical = s.physical_stock;
10
+ const reserved = s.reserved_stock;
11
+ const available = Math.max(0, physical - reserved);
12
+ return {
13
+ ...item,
14
+ quantity: physical,
15
+ minQuantity: s.minimum_stock,
16
+ reservedQuantity: reserved,
17
+ incomingQuantity: s.incoming_stock,
18
+ availableQuantity: available,
19
+ economicQuantity: available + s.incoming_stock,
20
+ };
21
+ }
5
22
  /**
6
23
  * Reads trade items from the shared `floriday_trade_items_cache` (gepubliceerd,
7
24
  * gevuld door de Auth-module elke 5 min) en merget lokale, niet-gepubliceerde
8
- * producten uit `trade_item_drafts`.
25
+ * producten uit `trade_item_drafts`. Voorraadwaarden uit `trade_item_stock`
26
+ * overschrijven de cache-waarden (lokale bron van waarheid voor stock).
9
27
  */
10
28
  export function useVoorraadData(connectionId) {
11
29
  const [publishedItems, setPublishedItems] = useState([]);
30
+ const [stockMap, setStockMap] = useState(new Map());
12
31
  const [loading, setLoading] = useState(false);
13
32
  const [error, setError] = useState(null);
14
33
  const { items: localItems, loading: localLoading, reload: reloadLocal, } = useLocalTradeItems(connectionId);
15
34
  const loadPublished = useCallback(async () => {
16
35
  if (!connectionId) {
17
36
  setPublishedItems([]);
37
+ setStockMap(new Map());
18
38
  return;
19
39
  }
20
40
  setLoading(true);
21
41
  setError(null);
22
42
  try {
23
- const { data, error } = await supabase
24
- .from("floriday_trade_items_cache")
25
- .select("data,floriday_id,is_deleted")
26
- .eq("connection_id", connectionId)
27
- .eq("is_deleted", false)
28
- .limit(1000);
29
- if (error)
30
- throw error;
31
- const normalised = (data ?? [])
43
+ const [pubRes, stock] = await Promise.all([
44
+ supabase
45
+ .from("floriday_trade_items_cache")
46
+ .select("data,floriday_id,is_deleted")
47
+ .eq("connection_id", connectionId)
48
+ .eq("is_deleted", false)
49
+ .limit(1000),
50
+ fetchStockMap(connectionId),
51
+ ]);
52
+ if (pubRes.error)
53
+ throw pubRes.error;
54
+ const normalised = (pubRes.data ?? [])
32
55
  .map((row) => normaliseTradeItem({ ...row.data, id: row.floriday_id }))
33
56
  .filter((i) => i.id)
34
57
  .map((i) => ({ ...i, published: true }));
35
58
  setPublishedItems(normalised);
59
+ setStockMap(stock);
36
60
  }
37
61
  catch (e) {
38
62
  setError(e.message);
@@ -48,8 +72,12 @@ export function useVoorraadData(connectionId) {
48
72
  const reload = useCallback(async () => {
49
73
  await Promise.all([loadPublished(), reloadLocal()]);
50
74
  }, [loadPublished, reloadLocal]);
75
+ const merged = [
76
+ ...localItems.map((i) => applyStock(i, stockMap.get(i.localId ? `draft:${i.localId}` : ""))),
77
+ ...publishedItems.map((i) => applyStock(i, stockMap.get(i.id))),
78
+ ];
51
79
  return {
52
- items: [...localItems, ...publishedItems],
80
+ items: merged,
53
81
  loading: loading || localLoading,
54
82
  error,
55
83
  reload,
@@ -1,5 +1,9 @@
1
1
  import type { FlowModule } from "@flowselections/core";
2
2
  export * from './_core-safelist';
3
3
  export { VoorraadPage } from './components/voorraad/VoorraadPage';
4
+ export { NieuwArtikelPage } from './components/voorraad/NieuwArtikelPage';
5
+ export { EditArtikelPage } from './components/voorraad/EditArtikelPage';
6
+ export { ValidationPage } from './components/voorraad/ValidationPage';
7
+ export { ArtikelWizard } from './components/voorraad/ArtikelWizard';
4
8
  export declare const floridayVoorraadModule: FlowModule;
5
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAIlE,eAAO,MAAM,sBAAsB,EAAE,UAYpC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAEpE,eAAO,MAAM,sBAAsB,EAAE,UAUpC,CAAC"}
package/dist-lib/index.js CHANGED
@@ -4,17 +4,18 @@
4
4
  import { Package } from "lucide-react";
5
5
  export * from './_core-safelist';
6
6
  export { VoorraadPage } from './components/voorraad/VoorraadPage';
7
- import { VoorraadSettingsCard } from "./components/settings/VoorraadSettingsCard";
7
+ export { NieuwArtikelPage } from './components/voorraad/NieuwArtikelPage';
8
+ export { EditArtikelPage } from './components/voorraad/EditArtikelPage';
9
+ export { ValidationPage } from './components/voorraad/ValidationPage';
10
+ export { ArtikelWizard } from './components/voorraad/ArtikelWizard';
8
11
  export const floridayVoorraadModule = {
9
12
  id: "voorraad",
10
13
  name: "Voorraad",
11
14
  version: "1.0.0",
12
15
  nav: {
13
16
  label: "Voorraad",
14
- href: "/floriday-voorraad",
17
+ href: "/voorraad",
15
18
  icon: Package,
16
19
  },
17
- settingsCards: [
18
- { component: VoorraadSettingsCard, order: 10 },
19
- ],
20
+ settingsCards: [],
20
21
  };