@flowselections/floriday-voorraad 1.0.23 → 1.0.27

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 (106) hide show
  1. package/dist-lib/assets/floriday-logo.png.asset.json +4 -4
  2. package/dist-lib/components/TemplatePage.d.ts +1 -1
  3. package/dist-lib/components/TemplatePage.d.ts.map +1 -1
  4. package/dist-lib/components/voorraad/AdditionalPackagingDialog.d.ts +1 -1
  5. package/dist-lib/components/voorraad/AdditionalPackagingDialog.d.ts.map +1 -1
  6. package/dist-lib/components/voorraad/ArtikelCompositionCard.d.ts +1 -1
  7. package/dist-lib/components/voorraad/ArtikelCompositionCard.d.ts.map +1 -1
  8. package/dist-lib/components/voorraad/ArtikelWizard.d.ts +1 -1
  9. package/dist-lib/components/voorraad/ArtikelWizard.d.ts.map +1 -1
  10. package/dist-lib/components/voorraad/ArtikelWizard.js +633 -101
  11. package/dist-lib/components/voorraad/ConnectionBadge.d.ts +1 -1
  12. package/dist-lib/components/voorraad/ConnectionBadge.d.ts.map +1 -1
  13. package/dist-lib/components/voorraad/EditArtikelPage.d.ts +1 -1
  14. package/dist-lib/components/voorraad/EditArtikelPage.d.ts.map +1 -1
  15. package/dist-lib/components/voorraad/ExcelExportButton.d.ts +1 -1
  16. package/dist-lib/components/voorraad/ExcelExportButton.d.ts.map +1 -1
  17. package/dist-lib/components/voorraad/FloridayInfoCard.d.ts +1 -1
  18. package/dist-lib/components/voorraad/FloridayInfoCard.d.ts.map +1 -1
  19. package/dist-lib/components/voorraad/FloridayStatusBadge.d.ts +1 -1
  20. package/dist-lib/components/voorraad/FloridayStatusBadge.d.ts.map +1 -1
  21. package/dist-lib/components/voorraad/NieuwArtikelPage.d.ts +1 -1
  22. package/dist-lib/components/voorraad/NieuwArtikelPage.d.ts.map +1 -1
  23. package/dist-lib/components/voorraad/OrderHistoryCard.d.ts +1 -1
  24. package/dist-lib/components/voorraad/OrderHistoryCard.d.ts.map +1 -1
  25. package/dist-lib/components/voorraad/PriceStatusBadge.d.ts +1 -1
  26. package/dist-lib/components/voorraad/PriceStatusBadge.d.ts.map +1 -1
  27. package/dist-lib/components/voorraad/ProductLinkCard.d.ts +1 -1
  28. package/dist-lib/components/voorraad/ProductLinkCard.d.ts.map +1 -1
  29. package/dist-lib/components/voorraad/StepSamenstelling.d.ts +10 -0
  30. package/dist-lib/components/voorraad/StepSamenstelling.d.ts.map +1 -0
  31. package/dist-lib/components/voorraad/StepSamenstelling.js +333 -0
  32. package/dist-lib/components/voorraad/StockBulkButtons.d.ts +1 -1
  33. package/dist-lib/components/voorraad/StockBulkButtons.d.ts.map +1 -1
  34. package/dist-lib/components/voorraad/ValidationOverviewTable.d.ts +1 -1
  35. package/dist-lib/components/voorraad/ValidationOverviewTable.d.ts.map +1 -1
  36. package/dist-lib/components/voorraad/ValidationPage.d.ts +1 -1
  37. package/dist-lib/components/voorraad/ValidationPage.d.ts.map +1 -1
  38. package/dist-lib/components/voorraad/VoorraadDashboard.d.ts +1 -1
  39. package/dist-lib/components/voorraad/VoorraadDashboard.d.ts.map +1 -1
  40. package/dist-lib/components/voorraad/VoorraadPage.d.ts +1 -1
  41. package/dist-lib/components/voorraad/VoorraadPage.d.ts.map +1 -1
  42. package/dist-lib/components/voorraad/VoorraadPage.js +14 -3
  43. package/dist-lib/components/voorraad/VoorraadPagination.d.ts +1 -1
  44. package/dist-lib/components/voorraad/VoorraadPagination.d.ts.map +1 -1
  45. package/dist-lib/components/voorraad/VoorraadStockCard.d.ts +1 -1
  46. package/dist-lib/components/voorraad/VoorraadStockCard.d.ts.map +1 -1
  47. package/dist-lib/components/voorraad/VoorraadTable.d.ts +1 -1
  48. package/dist-lib/components/voorraad/VoorraadTable.d.ts.map +1 -1
  49. package/dist-lib/components/voorraad/VoorraadTable.js +6 -13
  50. package/dist-lib/hooks/useFloriday.d.ts +6 -6
  51. package/dist-lib/hooks/useFloriday.d.ts.map +1 -1
  52. package/dist-lib/hooks/useFloridayPriceGroups.d.ts +20 -0
  53. package/dist-lib/hooks/useFloridayPriceGroups.d.ts.map +1 -0
  54. package/dist-lib/hooks/useFloridayPriceGroups.js +55 -0
  55. package/dist-lib/hooks/useFloridayVbnRequired.d.ts +5 -0
  56. package/dist-lib/hooks/useFloridayVbnRequired.d.ts.map +1 -0
  57. package/dist-lib/hooks/useFloridayVbnRequired.js +16 -0
  58. package/dist-lib/hooks/useLocalTradeItems.d.ts.map +1 -1
  59. package/dist-lib/hooks/useLocalTradeItems.js +14 -0
  60. package/dist-lib/hooks/useTradeItemSpec.d.ts.map +1 -1
  61. package/dist-lib/hooks/useTradeItemSpec.js +48 -1
  62. package/dist-lib/hooks/useTradeItemSupplyLine.d.ts +1 -1
  63. package/dist-lib/hooks/useTradeItemSupplyLine.d.ts.map +1 -1
  64. package/dist-lib/hooks/useVbnRegulatoryFeatures.d.ts +1 -1
  65. package/dist-lib/hooks/useVbnRegulatoryFeatures.d.ts.map +1 -1
  66. package/dist-lib/integrations/supabase/auth-middleware.d.ts +2378 -361
  67. package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
  68. package/dist-lib/integrations/supabase/client.d.ts +2378 -361
  69. package/dist-lib/integrations/supabase/client.d.ts.map +1 -1
  70. package/dist-lib/integrations/supabase/client.server.d.ts +2378 -361
  71. package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
  72. package/dist-lib/integrations/supabase/types.d.ts +2412 -344
  73. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  74. package/dist-lib/integrations/supabase/types.js +11 -9
  75. package/dist-lib/lib/centralSecrets.server.d.ts +21 -0
  76. package/dist-lib/lib/centralSecrets.server.d.ts.map +1 -0
  77. package/dist-lib/lib/centralSecrets.server.js +111 -0
  78. package/dist-lib/lib/floricode-required-features.functions.d.ts +2378 -367
  79. package/dist-lib/lib/floricode-required-features.functions.d.ts.map +1 -1
  80. package/dist-lib/lib/floriday-customer-offer.functions.d.ts +2380 -361
  81. package/dist-lib/lib/floriday-customer-offer.functions.d.ts.map +1 -1
  82. package/dist-lib/lib/floriday-gateway.functions.d.ts +10760 -675
  83. package/dist-lib/lib/floriday-gateway.functions.d.ts.map +1 -1
  84. package/dist-lib/lib/floriday-gateway.server.d.ts.map +1 -1
  85. package/dist-lib/lib/floriday-gateway.server.js +34 -9
  86. package/dist-lib/lib/floriday-payload.d.ts +21 -3
  87. package/dist-lib/lib/floriday-payload.d.ts.map +1 -1
  88. package/dist-lib/lib/floriday-payload.js +167 -34
  89. package/dist-lib/lib/floriday-vbn-required.functions.d.ts +27769 -0
  90. package/dist-lib/lib/floriday-vbn-required.functions.d.ts.map +1 -0
  91. package/dist-lib/lib/floriday-vbn-required.functions.js +85 -0
  92. package/dist-lib/lib/floriday-warehouse.functions.d.ts +6542 -491
  93. package/dist-lib/lib/floriday-warehouse.functions.d.ts.map +1 -1
  94. package/dist-lib/lib/floriday-writes.functions.d.ts +4647 -612
  95. package/dist-lib/lib/floriday-writes.functions.d.ts.map +1 -1
  96. package/dist-lib/lib/floriday-writes.functions.js +36 -1
  97. package/dist-lib/lib/trade-item-prices.d.ts +43 -0
  98. package/dist-lib/lib/trade-item-prices.d.ts.map +1 -0
  99. package/dist-lib/lib/trade-item-prices.js +229 -0
  100. package/package.json +3 -3
  101. package/dist-lib/components/settings/VoorraadSettingsCard.d.ts +0 -2
  102. package/dist-lib/components/settings/VoorraadSettingsCard.d.ts.map +0 -1
  103. package/dist-lib/components/settings/VoorraadSettingsCard.js +0 -39
  104. package/dist-lib/components/voorraad/ConnectionPicker.d.ts +0 -8
  105. package/dist-lib/components/voorraad/ConnectionPicker.d.ts.map +0 -1
  106. package/dist-lib/components/voorraad/ConnectionPicker.js +0 -8
@@ -4,6 +4,6 @@ interface Props {
4
4
  draftId?: string | null;
5
5
  productId?: string | null;
6
6
  }
7
- export declare function VoorraadStockCard({ connectionId, tradeItemId, draftId, productId }: Props): import("react/jsx-runtime").JSX.Element;
7
+ export declare function VoorraadStockCard({ connectionId, tradeItemId, draftId, productId }: Props): import("react").JSX.Element;
8
8
  export {};
9
9
  //# sourceMappingURL=VoorraadStockCard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"VoorraadStockCard.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/VoorraadStockCard.tsx"],"names":[],"mappings":"AAcA,UAAU,KAAK;IACb,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,wBAAgB,iBAAiB,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,KAAK,2CAsHzF"}
1
+ {"version":3,"file":"VoorraadStockCard.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/VoorraadStockCard.tsx"],"names":[],"mappings":"AAcA,UAAU,KAAK;IACb,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,wBAAgB,iBAAiB,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,KAAK,+BAsHzF"}
@@ -2,5 +2,5 @@ import type { TradeItem } from "../../lib/floriday-client";
2
2
  export declare function VoorraadTable({ items, loading, }: {
3
3
  items: TradeItem[];
4
4
  loading: boolean;
5
- }): import("react/jsx-runtime").JSX.Element;
5
+ }): import("react").JSX.Element;
6
6
  //# sourceMappingURL=VoorraadTable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"VoorraadTable.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/VoorraadTable.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAW3D,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,OAAO,GACR,EAAE;IACD,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB,2CA0IA"}
1
+ {"version":3,"file":"VoorraadTable.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/VoorraadTable.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAY3D,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,OAAO,GACR,EAAE;IACD,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB,+BA6IA"}
@@ -29,18 +29,6 @@ export function VoorraadTable({ items, loading, }) {
29
29
  };
30
30
  const floriday = item.floriday ?? null;
31
31
  const thumbUrl = floriday?.photoUrl || item.imageUrl;
32
- const floridayTooltip = floriday
33
- ? [
34
- `Naam (Floriday): ${floriday.name || "—"}`,
35
- `Artikelnr (Floriday): ${floriday.supplierArticleCode || "—"}`,
36
- `GTIN: ${floriday.articleGtin || "—"}`,
37
- floriday.vbnProductCode
38
- ? `VBN-code: ${floriday.vbnProductCode}`
39
- : null,
40
- ]
41
- .filter(Boolean)
42
- .join("\n")
43
- : null;
44
32
  return (_jsxs("tr", { className: `border-t hover:bg-muted/30 ${clickable ? "cursor-pointer" : ""}`, onClick: clickable ? open : undefined, role: clickable ? "button" : undefined, tabIndex: clickable ? 0 : undefined, onKeyDown: clickable
45
33
  ? (e) => {
46
34
  if (e.key === "Enter" || e.key === " ") {
@@ -48,6 +36,11 @@ export function VoorraadTable({ items, loading, }) {
48
36
  open();
49
37
  }
50
38
  }
51
- : undefined, "aria-label": clickable ? `Bewerk ${item.name}` : undefined, children: [_jsx("td", { className: "p-2", children: thumbUrl ? (_jsx("img", { src: thumbUrl, alt: item.name, className: "h-10 w-10 rounded object-cover", loading: "lazy" })) : (_jsx("div", { className: "h-10 w-10 rounded bg-muted flex items-center justify-center", children: _jsx(Package, { className: "h-4 w-4 text-muted-foreground" }) })) }), _jsxs("td", { className: "p-3", children: [_jsxs("div", { className: "flex items-center gap-2 flex-wrap", children: [_jsx("span", { className: "font-medium text-foreground", children: item.name }), floriday && (_jsx("span", { className: "inline-flex items-center justify-center h-4 min-w-4 px-1 rounded-full bg-emerald-500/15 text-emerald-700 border border-emerald-500/30 text-[10px] font-semibold leading-none", title: floridayTooltip ?? "Gekoppeld met Floriday", "aria-label": "Gekoppeld met Floriday", children: "F" }))] }), low && (_jsx("div", { className: "text-xs text-destructive", children: "onder minimumvoorraad" }))] }), _jsx("td", { className: "p-3", children: item.itemType === "productgroep" ? (_jsx(Badge, { className: "bg-indigo-500/15 text-indigo-700 border-indigo-500/30", children: "Productgroep" })) : item.itemType === "samenstelling" ? (_jsx(Badge, { className: "bg-emerald-500/15 text-emerald-700 border-emerald-500/30", children: "Samenstelling" })) : (_jsx(Badge, { variant: "secondary", children: "Artikel" })) }), _jsx("td", { className: "p-3 font-mono text-xs", children: item.articleNumber || "—" }), columns.map((c) => (_jsx("td", { className: "p-3 text-right tabular-nums text-muted-foreground", children: Number(item[c.key] ?? 0) }, c.key)))] }, item.id));
39
+ : undefined, "aria-label": clickable ? `Bewerk ${item.name}` : undefined, children: [_jsx("td", { className: "p-2", children: thumbUrl ? (_jsx("img", { src: thumbUrl, alt: item.name, className: "h-10 w-10 rounded object-cover", loading: "lazy" })) : (_jsx("div", { className: "h-10 w-10 rounded bg-muted flex items-center justify-center", children: _jsx(Package, { className: "h-4 w-4 text-muted-foreground" }) })) }), _jsxs("td", { className: "p-3", children: [_jsxs("div", { className: "flex flex-col items-start gap-1", children: [_jsx("span", { className: "font-medium text-foreground", children: item.name }), _jsxs("div", { role: "status", "aria-label": floriday
40
+ ? "Online in Floriday"
41
+ : "Niet online in Floriday", title: floriday
42
+ ? "Online in Floriday"
43
+ : "Niet online in Floriday", className: "inline-flex items-center gap-1.5 rounded-full border border-border bg-background px-2 py-0.5 text-[11px] font-medium leading-none text-muted-foreground", children: [_jsx("span", { className: "h-1.5 w-1.5 rounded-full " +
44
+ (floriday ? "bg-emerald-500" : "bg-red-500"), "aria-hidden": true }), _jsx("span", { children: "Floriday" })] })] }), low && (_jsx("div", { className: "text-xs text-destructive", children: "onder minimumvoorraad" }))] }), _jsx("td", { className: "p-3", children: item.itemType === "productgroep" ? (_jsx(Badge, { className: "bg-indigo-500/15 text-indigo-700 border-indigo-500/30", children: "Productgroep" })) : item.itemType === "samenstelling" ? (_jsx(Badge, { className: "bg-emerald-500/15 text-emerald-700 border-emerald-500/30", children: "Samenstelling" })) : (_jsx(Badge, { variant: "secondary", children: "Artikel" })) }), _jsx("td", { className: "p-3 font-mono text-xs", children: item.articleNumber || "—" }), columns.map((c) => (_jsx("td", { className: "p-3 text-right tabular-nums text-muted-foreground", children: Number(item[c.key] ?? 0) }, c.key)))] }, item.id));
52
45
  }) })] }) }));
53
46
  }
@@ -27,25 +27,25 @@ export interface FloridaySchema {
27
27
  payload?: unknown;
28
28
  }>>;
29
29
  }
30
- export declare function useFloridaySchema(resource: string, params?: Record<string, string>): import("@tanstack/react-query").UseQueryResult<FloridaySchema, Error>;
31
- export declare function useTradeItemFormSchema(): import("@tanstack/react-query").UseQueryResult<FloridaySchema, Error>;
32
- export declare function useCodeList(listName: string | null | undefined): import("@tanstack/react-query").UseQueryResult<{
30
+ export declare function useFloridaySchema(resource: string, params?: Record<string, string>): import("@tanstack/react-query").UseQueryResult<NoInfer<FloridaySchema>, Error>;
31
+ export declare function useTradeItemFormSchema(): import("@tanstack/react-query").UseQueryResult<NoInfer<FloridaySchema>, Error>;
32
+ export declare function useCodeList(listName: string | null | undefined): import("@tanstack/react-query").UseQueryResult<NoInfer<{
33
33
  ok: boolean;
34
34
  listName: string;
35
35
  values: {
36
36
  code: string;
37
37
  description?: string;
38
38
  }[];
39
- }, Error>;
39
+ }>, Error>;
40
40
  import type { GatewayEntity } from "../lib/floriday-gateway-entities";
41
- export declare function useCachedList(entity: GatewayEntity | null | undefined, limit?: number): import("@tanstack/react-query").UseQueryResult<{
41
+ export declare function useCachedList(entity: GatewayEntity | null | undefined, limit?: number): import("@tanstack/react-query").UseQueryResult<NoInfer<{
42
42
  ok: boolean;
43
43
  entity: string;
44
44
  rows: {
45
45
  id: string;
46
46
  data: Record<string, any>;
47
47
  }[];
48
- }, Error>;
48
+ }>, Error>;
49
49
  /**
50
50
  * Invalideert alle floriday-* queries wanneer de actieve connectie
51
51
  * (en dus mogelijk de environment) wijzigt. Voorkomt cache-bleed
@@ -1 +1 @@
1
- {"version":3,"file":"useFloriday.d.ts","sourceRoot":"","sources":["../../src/hooks/useFloriday.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAChB,MAAM,EACN,KAAK,CAAC;QACJ,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC,CACH,CAAC;CACH;AAoMD,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,yEA0BhC;AAqBD,wBAAgB,sBAAsB,0EA0CrC;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;QAMnD,OAAO;cACD,MAAM;YACR;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE;UAKvD;AAED,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAEtE,wBAAgB,aAAa,CAC3B,MAAM,EAAE,aAAa,GAAG,IAAI,GAAG,SAAS,EACxC,KAAK,SAAO;QAOF,OAAO;YACH,MAAM;UACR;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAAE,EAAE;UAKxD;AAED;;;;GAIG;AACH,wBAAgB,uCAAuC,SAStD"}
1
+ {"version":3,"file":"useFloriday.d.ts","sourceRoot":"","sources":["../../src/hooks/useFloriday.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAChB,MAAM,EACN,KAAK,CAAC;QACJ,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC,CACH,CAAC;CACH;AAoMD,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,kFA0BhC;AAqBD,wBAAgB,sBAAsB,mFA0CrC;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;QAMnD,OAAO;cACD,MAAM;YACR;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE;WAKvD;AAED,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAEtE,wBAAgB,aAAa,CAC3B,MAAM,EAAE,aAAa,GAAG,IAAI,GAAG,SAAS,EACxC,KAAK,SAAO;QAOF,OAAO;YACH,MAAM;UACR;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAAE,EAAE;WAKxD;AAED;;;;GAIG;AACH,wBAAgB,uCAAuC,SAStD"}
@@ -0,0 +1,20 @@
1
+ export interface FloridayPriceGroup {
2
+ /** Floriday priceGroupId (UUID). */
3
+ id: string;
4
+ name: string;
5
+ currency: string;
6
+ salesUnit: string;
7
+ /** Floriday buyer-organization ids die tot deze prijsgroep behoren. */
8
+ customerOrganizationIds: string[];
9
+ }
10
+ /**
11
+ * Leest alle actieve (niet verwijderde) Floriday-prijsgroepen voor de opgegeven
12
+ * connectie uit `floriday_price_groups_cache`. De sync wordt door de
13
+ * Authenticatie-module beheerd; dit is puur een read-side hook.
14
+ */
15
+ export declare function useFloridayPriceGroups(activeId: string | null): {
16
+ priceGroups: FloridayPriceGroup[];
17
+ loading: boolean;
18
+ error: string | null;
19
+ };
20
+ //# sourceMappingURL=useFloridayPriceGroups.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFloridayPriceGroups.d.ts","sourceRoot":"","sources":["../../src/hooks/useFloridayPriceGroups.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,kBAAkB;IACjC,oCAAoC;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,uBAAuB,EAAE,MAAM,EAAE,CAAC;CACnC;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;;;;EA+C7D"}
@@ -0,0 +1,55 @@
1
+ import { useEffect, useState } from "react";
2
+ import { supabase } from "../integrations/supabase/client";
3
+ /**
4
+ * Leest alle actieve (niet verwijderde) Floriday-prijsgroepen voor de opgegeven
5
+ * connectie uit `floriday_price_groups_cache`. De sync wordt door de
6
+ * Authenticatie-module beheerd; dit is puur een read-side hook.
7
+ */
8
+ export function useFloridayPriceGroups(activeId) {
9
+ const [priceGroups, setPriceGroups] = useState([]);
10
+ const [loading, setLoading] = useState(Boolean(activeId));
11
+ const [error, setError] = useState(null);
12
+ useEffect(() => {
13
+ if (!activeId) {
14
+ setPriceGroups([]);
15
+ setLoading(false);
16
+ return;
17
+ }
18
+ let cancelled = false;
19
+ setLoading(true);
20
+ (async () => {
21
+ const { data, error } = await supabase
22
+ .from("floriday_price_groups_cache")
23
+ .select("floriday_id,data")
24
+ .eq("connection_id", activeId)
25
+ .eq("is_deleted", false);
26
+ if (cancelled)
27
+ return;
28
+ if (error) {
29
+ setError(error.message);
30
+ setPriceGroups([]);
31
+ }
32
+ else {
33
+ const rows = (data ?? []).map((row) => {
34
+ const raw = row.data ?? {};
35
+ const customers = Array.isArray(raw.customers) ? raw.customers : [];
36
+ return {
37
+ id: String(raw.priceGroupId ?? row.floriday_id),
38
+ name: String(raw.name ?? "Prijsgroep"),
39
+ currency: String(raw.currency ?? "EUR"),
40
+ salesUnit: String(raw.salesUnit ?? "PIECE"),
41
+ customerOrganizationIds: customers.map((c) => String(c)),
42
+ };
43
+ });
44
+ rows.sort((a, b) => a.name.localeCompare(b.name, "nl"));
45
+ setPriceGroups(rows);
46
+ setError(null);
47
+ }
48
+ setLoading(false);
49
+ })();
50
+ return () => {
51
+ cancelled = true;
52
+ };
53
+ }, [activeId]);
54
+ return { priceGroups, loading, error };
55
+ }
@@ -0,0 +1,5 @@
1
+ export declare function useFloridayVbnRequired(vbnCode: string | null | undefined): import("@tanstack/react-query").UseQueryResult<NoInfer<{
2
+ vbnCode: string;
3
+ requiredCodes: string[];
4
+ }>, Error>;
5
+ //# sourceMappingURL=useFloridayVbnRequired.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFloridayVbnRequired.d.ts","sourceRoot":"","sources":["../../src/hooks/useFloridayVbnRequired.ts"],"names":[],"mappings":"AAOA,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;;;WASxE"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Leest de gedeelde cache van door Floriday afgedwongen verplichte
3
+ * characteristic-codes per VBN-productcode.
4
+ */
5
+ import { useQuery } from "@tanstack/react-query";
6
+ import { getFloridayVbnRequired } from "../lib/floriday-vbn-required.functions";
7
+ export function useFloridayVbnRequired(vbnCode) {
8
+ const code = String(vbnCode ?? "").trim();
9
+ const enabled = /^\d{5,6}$/.test(code);
10
+ return useQuery({
11
+ queryKey: ["floriday-vbn-required", code],
12
+ queryFn: () => getFloridayVbnRequired({ data: { vbnCode: code } }),
13
+ enabled,
14
+ staleTime: 10 * 60 * 1000,
15
+ });
16
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"useLocalTradeItems.d.ts","sourceRoot":"","sources":["../../src/hooks/useLocalTradeItems.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAwB,KAAK,kBAAkB,EAAE,KAAK,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGvG;;;;;GAKG;AAEH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,IAAI,EAAE,UAAU,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB,CAAC,EAAE,kBAAkB,CAAC;IAC1C,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,uBAAuB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC1C,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AA2DD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;;;;EA0B9D;AAED,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAsBrF;AAED,MAAM,WAAW,SAAS;IACxB,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,MAAM,CAAC,EAAE,QAAQ,GAAG,cAAc,CAAC;CACpC;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE;IACjD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB,GAAG,OAAO,CAAC,MAAM,CAAC,CA2DlB;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAOhF;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpE"}
1
+ {"version":3,"file":"useLocalTradeItems.d.ts","sourceRoot":"","sources":["../../src/hooks/useLocalTradeItems.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAwB,KAAK,kBAAkB,EAAE,KAAK,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGvG;;;;;GAKG;AAEH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,IAAI,EAAE,UAAU,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB,CAAC,EAAE,kBAAkB,CAAC;IAC1C,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,uBAAuB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC1C,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AA2DD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;;;;EA0B9D;AAED,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAsBrF;AAED,MAAM,WAAW,SAAS;IACxB,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,MAAM,CAAC,EAAE,QAAQ,GAAG,cAAc,CAAC;CACpC;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE;IACjD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB,GAAG,OAAO,CAAC,MAAM,CAAC,CA2ElB;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAOhF;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpE"}
@@ -128,6 +128,14 @@ export async function upsertLocalTradeItem(params) {
128
128
  const firstImageUrl = firstImage?.url || firstImage?.previewUrl;
129
129
  if (firstImageUrl)
130
130
  productPatch.image_url = firstImageUrl;
131
+ if (payload.vatRate !== undefined) {
132
+ const v = payload.vatRate;
133
+ productPatch.vat_rate = v === null || v === "" || Number.isNaN(Number(v)) ? null : Number(v);
134
+ }
135
+ if (payload.vatCode !== undefined) {
136
+ const c = payload.vatCode;
137
+ productPatch.vat_code = c && String(c).length > 0 ? String(c) : null;
138
+ }
131
139
  if (targetId) {
132
140
  const { error } = await supabase
133
141
  .from("products")
@@ -153,6 +161,12 @@ export async function upsertLocalTradeItem(params) {
153
161
  floriday_payload: payload,
154
162
  floriday_trade_item_id: params.meta?.floridayId ?? null,
155
163
  floriday_active: params.meta?.floridayLinkStatus === "published",
164
+ vat_rate: payload.vatRate !== null && payload.vatRate !== undefined && payload.vatRate !== ""
165
+ ? Number(payload.vatRate)
166
+ : null,
167
+ vat_code: payload.vatCode && String(payload.vatCode).length > 0
168
+ ? String(payload.vatCode)
169
+ : null,
156
170
  };
157
171
  const { error } = await supabase.from("products").insert(insertRow);
158
172
  if (error)
@@ -1 +1 @@
1
- {"version":3,"file":"useTradeItemSpec.d.ts","sourceRoot":"","sources":["../../src/hooks/useTradeItemSpec.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAuB,MAAM,eAAe,CAAC;AAEzE,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,2EAA2E;IAC3E,QAAQ,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,aAAa,EAAE,uBAAuB,EAAE,CAAC;CAC1C;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,eAAe,EAAE,kBAAkB,EAAE,CAAC;IACtC,2DAA2D;IAC3D,2BAA2B,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACzC,0FAA0F;IAC1F,2BAA2B,EAAE,OAAO,CAAC;IACrC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mGAAmG;IACnG,0BAA0B,EAAE,OAAO,CAAC;IACpC,4FAA4F;IAC5F,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,uBAAuB,EAAE,OAAO,CAAC;CAClC;AA8bD,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;IAC/C,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC3C;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,cAAc,GAAG,SAAS,EAClC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,YAAY,GAAG,IAAI,EACjC,kBAAkB,CAAC,EAAE,sBAAsB,EAAE,GAAG,IAAI,GACnD,aAAa,CAsEf"}
1
+ {"version":3,"file":"useTradeItemSpec.d.ts","sourceRoot":"","sources":["../../src/hooks/useTradeItemSpec.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAuB,MAAM,eAAe,CAAC;AAEzE,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,2EAA2E;IAC3E,QAAQ,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,aAAa,EAAE,uBAAuB,EAAE,CAAC;CAC1C;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,eAAe,EAAE,kBAAkB,EAAE,CAAC;IACtC,2DAA2D;IAC3D,2BAA2B,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACzC,0FAA0F;IAC1F,2BAA2B,EAAE,OAAO,CAAC;IACrC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mGAAmG;IACnG,0BAA0B,EAAE,OAAO,CAAC;IACpC,4FAA4F;IAC5F,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,uBAAuB,EAAE,OAAO,CAAC;CAClC;AAgeD,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;IAC/C,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC3C;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,cAAc,GAAG,SAAS,EAClC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,YAAY,GAAG,IAAI,EACjC,kBAAkB,CAAC,EAAE,sBAAsB,EAAE,GAAG,IAAI,GACnD,aAAa,CAsFf"}
@@ -389,6 +389,37 @@ function deriveVbnProductCharacteristics(schema, vbnCode) {
389
389
  productGroupId,
390
390
  };
391
391
  }
392
+ /**
393
+ * Alle VBN-karakteristieken uit `codeLists['vbn-characteristic']` als
394
+ * optionele pool — hetzelfde superset dat Floriday's eigen UI aanbiedt.
395
+ */
396
+ function allVbnCharacteristicsAsOptional(schema) {
397
+ const list = schema?.codeLists?.["vbn-characteristic"] ?? [];
398
+ if (!Array.isArray(list) || list.length === 0)
399
+ return [];
400
+ const map = new Map();
401
+ for (const item of list) {
402
+ if (!isRecord(item))
403
+ continue;
404
+ const payload = payloadOf(item);
405
+ const code = pickCharacteristicCode(String(item.code ?? payload.code ?? payload.vbn_code ?? ""));
406
+ if (!code || map.has(code))
407
+ continue;
408
+ const label = payload.description ??
409
+ payload.short_name ??
410
+ item.description ??
411
+ item.label ??
412
+ code;
413
+ map.set(code, {
414
+ code,
415
+ label: String(label),
416
+ required: false,
417
+ listName: code,
418
+ allowedValues: [],
419
+ });
420
+ }
421
+ return hydrateLabels(Array.from(map.values()), schema);
422
+ }
392
423
  export function useTradeItemSpec(schema, vbnCode, productGroup, regulatoryFeatures) {
393
424
  return useMemo(() => {
394
425
  const fromVbn = deriveVbnProductCharacteristics(schema, vbnCode);
@@ -410,11 +441,27 @@ export function useTradeItemSpec(schema, vbnCode, productGroup, regulatoryFeatur
410
441
  allowedValues: f.values,
411
442
  }));
412
443
  }
413
- const characteristics = fromRegulatory.length
444
+ const primary = fromRegulatory.length
414
445
  ? fromRegulatory
415
446
  : fromVbn.characteristics.length
416
447
  ? fromVbn.characteristics
417
448
  : schemaCharacteristics;
449
+ // Verbreed met alle VBN-karakteristieken als optionele pool, zodat de UI
450
+ // dezelfde superset toont als Floriday zelf (S01, S05, S50, …). Codes uit
451
+ // `primary` blijven leidend inclusief hun `required`-flag.
452
+ const optionalPool = allVbnCharacteristicsAsOptional(schema);
453
+ const merged = new Map();
454
+ for (const c of primary)
455
+ merged.set(c.code, c);
456
+ for (const c of optionalPool) {
457
+ if (!merged.has(c.code))
458
+ merged.set(c.code, c);
459
+ }
460
+ const characteristics = Array.from(merged.values()).sort((a, b) => {
461
+ if (a.required !== b.required)
462
+ return Number(b.required) - Number(a.required);
463
+ return a.code.localeCompare(b.code);
464
+ });
418
465
  const requiredCharacteristicCodes = new Set(characteristics.filter((c) => c.required).map((c) => c.code));
419
466
  const required = new Set((schema?.requiredFields ?? []).map((f) => f));
420
467
  const canDetermineCharacteristics = !vbnCode
@@ -17,5 +17,5 @@ export type TradeItemSupplyLine = {
17
17
  * Leest de meest recente supply-line voor een trade item en luistert realtime
18
18
  * op wijzigingen zodat de UI direct meebeweegt na een push naar Floriday.
19
19
  */
20
- export declare function useTradeItemSupplyLine(tradeItemId: string | null | undefined): import("@tanstack/react-query").UseQueryResult<TradeItemSupplyLine | null, Error>;
20
+ export declare function useTradeItemSupplyLine(tradeItemId: string | null | undefined): import("@tanstack/react-query").UseQueryResult<NoInfer<TradeItemSupplyLine | null>, Error>;
21
21
  //# sourceMappingURL=useTradeItemSupplyLine.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useTradeItemSupplyLine.d.ts","sourceRoot":"","sources":["../../src/hooks/useTradeItemSupplyLine.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,mBAAmB,GAAG;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,wBAAwB,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,qFA+C5E"}
1
+ {"version":3,"file":"useTradeItemSupplyLine.d.ts","sourceRoot":"","sources":["../../src/hooks/useTradeItemSupplyLine.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,mBAAmB,GAAG;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,wBAAwB,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,8FA+C5E"}
@@ -1,3 +1,3 @@
1
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>;
2
+ export declare function useVbnRegulatoryFeatures(vbnCode: string | null | undefined): import("@tanstack/react-query").UseQueryResult<NoInfer<GetRequiredFeaturesResult>, Error>;
3
3
  //# sourceMappingURL=useVbnRegulatoryFeatures.d.ts.map
@@ -1 +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"}
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,6FAS1E"}