@flowselections/floriday-voorraad 1.0.46 → 1.0.48
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/voorraad/AdditionalPackagingDialog.d.ts +1 -1
- package/dist-lib/components/voorraad/AdditionalPackagingDialog.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ArtikelCompositionCard.d.ts +1 -1
- package/dist-lib/components/voorraad/ArtikelCompositionCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ArtikelWizard.d.ts +1 -1
- package/dist-lib/components/voorraad/ArtikelWizard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ArtikelWizard.js +159 -11
- package/dist-lib/components/voorraad/EditArtikelPage.d.ts +1 -1
- package/dist-lib/components/voorraad/EditArtikelPage.d.ts.map +1 -1
- package/dist-lib/components/voorraad/EditArtikelPage.js +2 -1
- package/dist-lib/components/voorraad/ExcelExportButton.d.ts +1 -1
- package/dist-lib/components/voorraad/ExcelExportButton.d.ts.map +1 -1
- package/dist-lib/components/voorraad/FloridayInfoCard.d.ts +1 -1
- package/dist-lib/components/voorraad/FloridayInfoCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/FustenPage.d.ts +1 -1
- package/dist-lib/components/voorraad/FustenPage.d.ts.map +1 -1
- package/dist-lib/components/voorraad/InventorySettingsDrawer.d.ts +1 -1
- package/dist-lib/components/voorraad/InventorySettingsDrawer.d.ts.map +1 -1
- package/dist-lib/components/voorraad/InventoryStatusBadge.d.ts +1 -1
- package/dist-lib/components/voorraad/InventoryStatusBadge.d.ts.map +1 -1
- package/dist-lib/components/voorraad/NieuwArtikelPage.d.ts +1 -1
- package/dist-lib/components/voorraad/NieuwArtikelPage.d.ts.map +1 -1
- package/dist-lib/components/voorraad/OrderHistoryCard.d.ts +1 -1
- package/dist-lib/components/voorraad/OrderHistoryCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/PriceStatusBadge.d.ts +1 -1
- package/dist-lib/components/voorraad/PriceStatusBadge.d.ts.map +1 -1
- package/dist-lib/components/voorraad/PriceStatusBadge.js +1 -1
- package/dist-lib/components/voorraad/ProductCustomFieldsCard.d.ts +1 -1
- package/dist-lib/components/voorraad/ProductCustomFieldsCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ProductLinkCard.d.ts +1 -1
- package/dist-lib/components/voorraad/ProductLinkCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/PublicatiesPage.d.ts +1 -1
- package/dist-lib/components/voorraad/PublicatiesPage.d.ts.map +1 -1
- package/dist-lib/components/voorraad/PublishProgressCard.d.ts +1 -1
- package/dist-lib/components/voorraad/PublishProgressCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/PublishReadinessCard.d.ts +1 -1
- package/dist-lib/components/voorraad/PublishReadinessCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/StepSamenstelling.d.ts +1 -1
- package/dist-lib/components/voorraad/StepSamenstelling.d.ts.map +1 -1
- package/dist-lib/components/voorraad/StockBulkButtons.d.ts +1 -1
- package/dist-lib/components/voorraad/StockBulkButtons.d.ts.map +1 -1
- package/dist-lib/components/voorraad/StockHistoryChart.d.ts +1 -1
- package/dist-lib/components/voorraad/StockHistoryChart.d.ts.map +1 -1
- package/dist-lib/components/voorraad/StockMutationHistoryCard.d.ts +1 -1
- package/dist-lib/components/voorraad/StockMutationHistoryCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/StockPushMonitor.d.ts +1 -1
- package/dist-lib/components/voorraad/StockPushMonitor.d.ts.map +1 -1
- package/dist-lib/components/voorraad/StockSyncStatus.d.ts +1 -1
- package/dist-lib/components/voorraad/StockSyncStatus.d.ts.map +1 -1
- package/dist-lib/components/voorraad/TrayStickerCard.d.ts +5 -0
- package/dist-lib/components/voorraad/TrayStickerCard.d.ts.map +1 -0
- package/dist-lib/components/voorraad/TrayStickerCard.js +100 -0
- package/dist-lib/components/voorraad/ValidationOverviewTable.d.ts +1 -1
- package/dist-lib/components/voorraad/ValidationOverviewTable.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ValidationPage.d.ts +1 -1
- package/dist-lib/components/voorraad/ValidationPage.d.ts.map +1 -1
- package/dist-lib/components/voorraad/VoorraadPage.d.ts +1 -1
- package/dist-lib/components/voorraad/VoorraadPage.d.ts.map +1 -1
- package/dist-lib/components/voorraad/VoorraadPagination.d.ts +1 -1
- package/dist-lib/components/voorraad/VoorraadPagination.d.ts.map +1 -1
- package/dist-lib/components/voorraad/VoorraadStockCard.d.ts +1 -1
- package/dist-lib/components/voorraad/VoorraadStockCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/VoorraadTable.d.ts +1 -1
- package/dist-lib/components/voorraad/VoorraadTable.d.ts.map +1 -1
- package/dist-lib/components/voorraad/VoorraadVeldenCard.d.ts +1 -1
- package/dist-lib/components/voorraad/VoorraadVeldenCard.d.ts.map +1 -1
- package/dist-lib/hooks/useTradeItemSupplyLine.js +1 -1
- package/dist-lib/integrations/supabase/auth-middleware.d.ts +3255 -199
- package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.d.ts +3255 -199
- package/dist-lib/integrations/supabase/client.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.js +1 -1
- package/dist-lib/integrations/supabase/client.server.d.ts +3255 -199
- package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.server.js +1 -1
- package/dist-lib/integrations/supabase/previewAuthStorage.d.ts +1 -1
- package/dist-lib/integrations/supabase/previewAuthStorage.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/previewAuthStorage.js +8 -1
- package/dist-lib/integrations/supabase/types.d.ts +3287 -192
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/floricode-required-features.functions.d.ts +3267 -217
- package/dist-lib/lib/floricode-required-features.functions.d.ts.map +1 -1
- package/dist-lib/lib/floricode-required-features.functions.js +1 -1
- package/dist-lib/lib/floriday-customer-offer.functions.d.ts +3267 -211
- package/dist-lib/lib/floriday-customer-offer.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-env.functions.d.ts +6126 -14
- package/dist-lib/lib/floriday-env.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-gateway.functions.d.ts +18378 -42
- package/dist-lib/lib/floriday-gateway.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-vbn-required.functions.d.ts +6126 -14
- package/dist-lib/lib/floriday-vbn-required.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-warehouse.functions.d.ts +9189 -21
- package/dist-lib/lib/floriday-warehouse.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-writes.functions.d.ts +6126 -14
- package/dist-lib/lib/floriday-writes.functions.d.ts.map +1 -1
- package/dist-lib/lib/inventory-settings.functions.d.ts +6126 -14
- package/dist-lib/lib/inventory-settings.functions.d.ts.map +1 -1
- package/dist-lib/lib/inventory-settings.functions.js +3 -3
- package/dist-lib/lib/logistics-buffer-events.server.js +1 -1
- package/dist-lib/lib/logistics-tasks.server.js +2 -2
- package/dist-lib/lib/module-runtime.server.js +1 -1
- package/dist-lib/lib/product-packing.d.ts +28 -0
- package/dist-lib/lib/product-packing.d.ts.map +1 -0
- package/dist-lib/lib/product-packing.js +90 -0
- package/dist-lib/lib/stock-sync.functions.d.ts +6126 -14
- package/dist-lib/lib/stock-sync.functions.d.ts.map +1 -1
- package/dist-lib/lib/stock-sync.functions.js +3 -3
- package/package.json +2 -2
- package/dist-lib/components/TemplatePage.d.ts +0 -2
- package/dist-lib/components/TemplatePage.d.ts.map +0 -1
- package/dist-lib/components/TemplatePage.js +0 -4
- package/dist-lib/components/settings/VoorraadSettingsCard.d.ts +0 -2
- package/dist-lib/components/settings/VoorraadSettingsCard.d.ts.map +0 -1
- package/dist-lib/components/settings/VoorraadSettingsCard.js +0 -39
- package/dist-lib/components/voorraad/ConnectionBadge.d.ts +0 -6
- package/dist-lib/components/voorraad/ConnectionBadge.d.ts.map +0 -1
- package/dist-lib/components/voorraad/ConnectionBadge.js +0 -12
- package/dist-lib/components/voorraad/ConnectionPicker.d.ts +0 -8
- package/dist-lib/components/voorraad/ConnectionPicker.d.ts.map +0 -1
- package/dist-lib/components/voorraad/ConnectionPicker.js +0 -8
- package/dist-lib/components/voorraad/FloridayStatusBadge.d.ts +0 -4
- package/dist-lib/components/voorraad/FloridayStatusBadge.d.ts.map +0 -1
- package/dist-lib/components/voorraad/FloridayStatusBadge.js +0 -8
- package/dist-lib/components/voorraad/ModuleHealthCard.d.ts +0 -2
- package/dist-lib/components/voorraad/ModuleHealthCard.d.ts.map +0 -1
- package/dist-lib/components/voorraad/ModuleHealthCard.js +0 -40
- package/dist-lib/components/voorraad/VoorraadDashboard.d.ts +0 -10
- package/dist-lib/components/voorraad/VoorraadDashboard.d.ts.map +0 -1
- package/dist-lib/components/voorraad/VoorraadDashboard.js +0 -53
- package/dist-lib/lib/floriday-field-sources.d.ts +0 -18
- package/dist-lib/lib/floriday-field-sources.d.ts.map +0 -1
- package/dist-lib/lib/floriday-field-sources.js +0 -45
- package/dist-lib/lib/floriday-schema-to-zod.d.ts +0 -9
- package/dist-lib/lib/floriday-schema-to-zod.d.ts.map +0 -1
- package/dist-lib/lib/floriday-schema-to-zod.js +0 -53
- package/dist-lib/lib/merge-products.d.ts +0 -8
- package/dist-lib/lib/merge-products.d.ts.map +0 -1
- package/dist-lib/lib/merge-products.js +0 -17
- package/dist-lib/lib/module-health.functions.d.ts +0 -53497
- package/dist-lib/lib/module-health.functions.d.ts.map +0 -1
- package/dist-lib/lib/module-health.functions.js +0 -261
- package/dist-lib/lib/validationSchemas.d.ts +0 -15
- package/dist-lib/lib/validationSchemas.d.ts.map +0 -1
- package/dist-lib/lib/validationSchemas.js +0 -25
|
@@ -4,6 +4,6 @@ interface Props {
|
|
|
4
4
|
onOpenChange: (open: boolean) => void;
|
|
5
5
|
onSave: (item: AdditionalPackagingInput) => void;
|
|
6
6
|
}
|
|
7
|
-
export declare function AdditionalPackagingDialog({ open, onOpenChange, onSave }: Props): import("react
|
|
7
|
+
export declare function AdditionalPackagingDialog({ open, onOpenChange, onSave }: Props): import("react").JSX.Element;
|
|
8
8
|
export {};
|
|
9
9
|
//# sourceMappingURL=AdditionalPackagingDialog.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdditionalPackagingDialog.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/AdditionalPackagingDialog.tsx"],"names":[],"mappings":"AAeA,OAAO,EAEL,KAAK,wBAAwB,EAC9B,MAAM,4BAA4B,CAAC;AAMpC,UAAU,KAAK;IACb,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,MAAM,EAAE,CAAC,IAAI,EAAE,wBAAwB,KAAK,IAAI,CAAC;CAClD;AAED,wBAAgB,yBAAyB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,KAAK
|
|
1
|
+
{"version":3,"file":"AdditionalPackagingDialog.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/AdditionalPackagingDialog.tsx"],"names":[],"mappings":"AAeA,OAAO,EAEL,KAAK,wBAAwB,EAC9B,MAAM,4BAA4B,CAAC;AAMpC,UAAU,KAAK;IACb,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,MAAM,EAAE,CAAC,IAAI,EAAE,wBAAwB,KAAK,IAAI,CAAC;CAClD;AAED,wBAAgB,yBAAyB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,KAAK,+BA2I9E"}
|
|
@@ -2,6 +2,6 @@ interface Props {
|
|
|
2
2
|
productId: string | null;
|
|
3
3
|
floridayId: string | null;
|
|
4
4
|
}
|
|
5
|
-
export declare function ArtikelCompositionCard({ productId, floridayId }: Props): import("react
|
|
5
|
+
export declare function ArtikelCompositionCard({ productId, floridayId }: Props): import("react").JSX.Element | null;
|
|
6
6
|
export {};
|
|
7
7
|
//# sourceMappingURL=ArtikelCompositionCard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArtikelCompositionCard.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/ArtikelCompositionCard.tsx"],"names":[],"mappings":"AAKA,UAAU,KAAK;IACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAqFD,wBAAgB,sBAAsB,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"ArtikelCompositionCard.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/ArtikelCompositionCard.tsx"],"names":[],"mappings":"AAKA,UAAU,KAAK;IACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAqFD,wBAAgB,sBAAsB,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE,KAAK,sCAgNtE"}
|
|
@@ -3,5 +3,5 @@ export declare function ArtikelWizard({ draftId: initialDraftId, tradeItemId, pr
|
|
|
3
3
|
tradeItemId?: string;
|
|
4
4
|
productId?: string;
|
|
5
5
|
resumeJobId?: string;
|
|
6
|
-
}): import("react
|
|
6
|
+
}): import("react").JSX.Element;
|
|
7
7
|
//# sourceMappingURL=ArtikelWizard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArtikelWizard.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/ArtikelWizard.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ArtikelWizard.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/ArtikelWizard.tsx"],"names":[],"mappings":"AA4MA,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EAAE,cAAc,EACvB,WAAW,EACX,SAAS,EACT,WAAW,GACZ,GAAE;IACD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACjB,+BAsqEL"}
|
|
@@ -28,6 +28,7 @@ import { usePublishJob } from "../../hooks/usePublishJob";
|
|
|
28
28
|
import { PublishReadinessCard } from "./PublishReadinessCard";
|
|
29
29
|
import { PublishProgressCard } from "./PublishProgressCard";
|
|
30
30
|
import { gatewayReadFn } from "../../lib/floriday-gateway.functions";
|
|
31
|
+
import { pickPrimaryPacking, readPackingStatus, writeConfirmedPacking, } from "../../lib/product-packing";
|
|
31
32
|
import { getFloridayReadinessFn } from "../../lib/floriday-env.functions";
|
|
32
33
|
const floridayLogo = "/flowselections-assets/Voorraad/floriday-logo.png";
|
|
33
34
|
import { VoorraadStockCard } from "../../components/voorraad/VoorraadStockCard";
|
|
@@ -131,6 +132,12 @@ export function ArtikelWizard({ draftId: initialDraftId, tradeItemId, productId,
|
|
|
131
132
|
// Lokaal opgeslagen, maar (nog) niet bevestigd door Floriday.
|
|
132
133
|
const [pendingSync, setPendingSync] = useState(null);
|
|
133
134
|
const [retryingSync, setRetryingSync] = useState(false);
|
|
135
|
+
// Belading zoals door Floriday bevestigd. null = nieuw artikel / nog niet geladen.
|
|
136
|
+
const [packingStatus, setPackingStatus] = useState(null);
|
|
137
|
+
// Stand van het artikel bij Floriday op het moment dat dit scherm het las.
|
|
138
|
+
const remoteBaselineRef = useRef(null);
|
|
139
|
+
// Vergelijking tonen wanneer Floriday intussen gewijzigd is.
|
|
140
|
+
const [conflict, setConflict] = useState(null);
|
|
134
141
|
const [productMeta, setProductMeta] = useState({ floridayActive: false, floridayTradeItemId: null, physicalStock: 0 });
|
|
135
142
|
const [deleteAck, setDeleteAck] = useState(false);
|
|
136
143
|
const [deleteOpen, setDeleteOpen] = useState(false);
|
|
@@ -285,7 +292,7 @@ export function ArtikelWizard({ draftId: initialDraftId, tradeItemId, productId,
|
|
|
285
292
|
try {
|
|
286
293
|
const { data: product, error } = await supabase
|
|
287
294
|
.from("products")
|
|
288
|
-
.select("id,product,barcode,article_number,quantity,image_url,plants_per_crate,crates_per_layer,layers_per_cart,trade_item_key,floriday_trade_item_id,custom_fields")
|
|
295
|
+
.select("id,product,barcode,article_number,quantity,image_url,plants_per_crate,crates_per_layer,layers_per_cart,floriday_packing_confirmed_at,floriday_packing_source,trade_item_key,floriday_trade_item_id,custom_fields")
|
|
289
296
|
.eq("id", productId)
|
|
290
297
|
.maybeSingle();
|
|
291
298
|
if (cancelled)
|
|
@@ -299,9 +306,13 @@ export function ArtikelWizard({ draftId: initialDraftId, tradeItemId, productId,
|
|
|
299
306
|
const barcode = String(product.barcode ?? "").trim();
|
|
300
307
|
const validGtin = isValidGtin13(barcode);
|
|
301
308
|
const imageUrl = String(product.image_url ?? "").trim();
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
const
|
|
309
|
+
// De kolommen zijn NOT NULL met technische standaardwaarden (1/10/4).
|
|
310
|
+
// Alleen wanneer Floriday de belading bevestigd heeft, zijn ze echt.
|
|
311
|
+
const packing = readPackingStatus(product);
|
|
312
|
+
setPackingStatus(packing);
|
|
313
|
+
const ppc = packing.packing?.piecesPerPackage ?? 0;
|
|
314
|
+
const cpl = packing.packing?.packagesPerLayer ?? 0;
|
|
315
|
+
const lpc = packing.packing?.layersPerLoadCarrier ?? 0;
|
|
305
316
|
const customFields = asPlainRecord(product.custom_fields);
|
|
306
317
|
const payload = asPlainRecord(customFields.floriday_payload);
|
|
307
318
|
const productTradeItemKey = String(product.trade_item_key ?? "");
|
|
@@ -321,7 +332,7 @@ export function ArtikelWizard({ draftId: initialDraftId, tradeItemId, productId,
|
|
|
321
332
|
const [cacheRes, prefRes] = await Promise.all([
|
|
322
333
|
supabase
|
|
323
334
|
.from("floriday_trade_items_cache")
|
|
324
|
-
.select("data")
|
|
335
|
+
.select("data,fetched_at")
|
|
325
336
|
.eq("connection_id", activeId)
|
|
326
337
|
.eq("floriday_id", fid)
|
|
327
338
|
.maybeSingle(),
|
|
@@ -333,6 +344,13 @@ export function ArtikelWizard({ draftId: initialDraftId, tradeItemId, productId,
|
|
|
333
344
|
.maybeSingle(),
|
|
334
345
|
]);
|
|
335
346
|
if (cacheRes.data?.data) {
|
|
347
|
+
// Stand zoals dit scherm het artikel bij Floriday las: basis voor
|
|
348
|
+
// de vergelijking vlak vóór publiceren.
|
|
349
|
+
remoteBaselineRef.current = {
|
|
350
|
+
item: cacheRes.data.data,
|
|
351
|
+
at: cacheRes.data.fetched_at ?? new Date().toISOString(),
|
|
352
|
+
source: "cache",
|
|
353
|
+
};
|
|
336
354
|
cacheData = floridayCacheToWizardData(cacheRes.data.data);
|
|
337
355
|
if (!cacheData.productGroup) {
|
|
338
356
|
const group = await lookupProductGroupForVbn(cacheData.vbnCode);
|
|
@@ -956,6 +974,95 @@ export function ArtikelWizard({ draftId: initialDraftId, tradeItemId, productId,
|
|
|
956
974
|
description: friendly.hint,
|
|
957
975
|
});
|
|
958
976
|
}, [data.vbnCode, goToStepKey, queryClient]);
|
|
977
|
+
/** Floriday levert namen soms als {nl: "..."}; toon altijd leesbare tekst. */
|
|
978
|
+
const pickRemoteName = (value) => {
|
|
979
|
+
if (typeof value === "string")
|
|
980
|
+
return value;
|
|
981
|
+
if (value && typeof value === "object") {
|
|
982
|
+
const rec = value;
|
|
983
|
+
const first = rec.nl ?? rec.en ?? Object.values(rec)[0];
|
|
984
|
+
return typeof first === "string" ? first : "";
|
|
985
|
+
}
|
|
986
|
+
return "";
|
|
987
|
+
};
|
|
988
|
+
/**
|
|
989
|
+
* Vergelijkt de huidige stand bij Floriday met de stand die dit scherm las.
|
|
990
|
+
* Bij verschillen tonen we een vergelijking; de gebruiker beslist zelf of de
|
|
991
|
+
* eigen wijziging alsnog gepubliceerd wordt (nu wint niet stilzwijgend wie
|
|
992
|
+
* het laatst publiceert). Een leesfout blokkeert het publiceren niet.
|
|
993
|
+
*/
|
|
994
|
+
const confirmNoRemoteChanges = useCallback(async (targetTradeItemId) => {
|
|
995
|
+
let live = null;
|
|
996
|
+
try {
|
|
997
|
+
const res = (await gatewayReadFn({
|
|
998
|
+
data: { path: `/suppliers-api-2026v1/trade-items/${targetTradeItemId}` },
|
|
999
|
+
}));
|
|
1000
|
+
live = res?.data ?? null;
|
|
1001
|
+
}
|
|
1002
|
+
catch {
|
|
1003
|
+
return true;
|
|
1004
|
+
}
|
|
1005
|
+
if (!live)
|
|
1006
|
+
return true;
|
|
1007
|
+
const baseline = remoteBaselineRef.current;
|
|
1008
|
+
if (!baseline) {
|
|
1009
|
+
remoteBaselineRef.current = {
|
|
1010
|
+
item: live,
|
|
1011
|
+
at: new Date().toISOString(),
|
|
1012
|
+
source: "floriday",
|
|
1013
|
+
};
|
|
1014
|
+
return true;
|
|
1015
|
+
}
|
|
1016
|
+
const describe = (item) => {
|
|
1017
|
+
const pack = pickPrimaryPacking(item?.packingConfigurations);
|
|
1018
|
+
return {
|
|
1019
|
+
Artikelnaam: pickRemoteName(item?.tradeItemName ?? item?.name) || "—",
|
|
1020
|
+
Belading: pack
|
|
1021
|
+
? `${pack.piecesPerPackage} per fust · ${pack.packagesPerLayer} per laag · ${pack.layersPerLoadCarrier} lagen`
|
|
1022
|
+
: "onbekend",
|
|
1023
|
+
Foto_s: String(Array.isArray(item?.photos)
|
|
1024
|
+
? item.photos.length
|
|
1025
|
+
: Array.isArray(item?.images)
|
|
1026
|
+
? item.images.length
|
|
1027
|
+
: 0),
|
|
1028
|
+
Kenmerken: String(Array.isArray(item?.characteristics) ? item.characteristics.length : 0),
|
|
1029
|
+
VBN_code: String(item?.vbnProductCode ?? item?.vbnCode ?? "—"),
|
|
1030
|
+
};
|
|
1031
|
+
};
|
|
1032
|
+
const before = describe(baseline.item);
|
|
1033
|
+
const after = describe(live);
|
|
1034
|
+
const differences = Object.keys(after)
|
|
1035
|
+
.filter((k) => before[k] !== after[k])
|
|
1036
|
+
.map((k) => ({
|
|
1037
|
+
label: k.replace(/_/g, "'"),
|
|
1038
|
+
mine: before[k],
|
|
1039
|
+
theirs: after[k],
|
|
1040
|
+
}));
|
|
1041
|
+
if (differences.length === 0) {
|
|
1042
|
+
remoteBaselineRef.current = {
|
|
1043
|
+
item: live,
|
|
1044
|
+
at: new Date().toISOString(),
|
|
1045
|
+
source: "floriday",
|
|
1046
|
+
};
|
|
1047
|
+
return true;
|
|
1048
|
+
}
|
|
1049
|
+
return await new Promise((resolve) => {
|
|
1050
|
+
setConflict({
|
|
1051
|
+
differences,
|
|
1052
|
+
resolve: (proceed) => {
|
|
1053
|
+
setConflict(null);
|
|
1054
|
+
if (proceed) {
|
|
1055
|
+
remoteBaselineRef.current = {
|
|
1056
|
+
item: live,
|
|
1057
|
+
at: new Date().toISOString(),
|
|
1058
|
+
source: "floriday",
|
|
1059
|
+
};
|
|
1060
|
+
}
|
|
1061
|
+
resolve(proceed);
|
|
1062
|
+
},
|
|
1063
|
+
});
|
|
1064
|
+
});
|
|
1065
|
+
}, []);
|
|
959
1066
|
const submit = async (options) => {
|
|
960
1067
|
if (!activeId) {
|
|
961
1068
|
toast.error("Geen actieve verbinding met de handelsomgeving", {
|
|
@@ -1075,6 +1182,13 @@ export function ArtikelWizard({ draftId: initialDraftId, tradeItemId, productId,
|
|
|
1075
1182
|
});
|
|
1076
1183
|
return;
|
|
1077
1184
|
}
|
|
1185
|
+
// Is het artikel bij Floriday intussen gewijzigd sinds dit scherm het las?
|
|
1186
|
+
// Dan eerst vergelijken in plaats van blind overschrijven.
|
|
1187
|
+
if (publishedTradeItemId) {
|
|
1188
|
+
const proceed = await confirmNoRemoteChanges(publishedTradeItemId);
|
|
1189
|
+
if (!proceed)
|
|
1190
|
+
return;
|
|
1191
|
+
}
|
|
1078
1192
|
setSubmitting(true);
|
|
1079
1193
|
const environment = activeConnection?.active_environment;
|
|
1080
1194
|
if (environment !== "staging" && environment !== "live") {
|
|
@@ -1276,7 +1390,38 @@ export function ArtikelWizard({ draftId: initialDraftId, tradeItemId, productId,
|
|
|
1276
1390
|
catch {
|
|
1277
1391
|
/* wordt automatisch bijgewerkt bij de volgende synchronisatie */
|
|
1278
1392
|
}
|
|
1393
|
+
// Floriday heeft de belading nu bevestigd: direct wegschrijven op
|
|
1394
|
+
// het product, zodat andere modules niet hoeven te wachten op de
|
|
1395
|
+
// 5-minuten-cron. De trigger/cron blijft het vangnet.
|
|
1396
|
+
const targetProductId = productId ?? draftId ?? null;
|
|
1397
|
+
const confirmedPacking = pickPrimaryPacking(item?.packingConfigurations);
|
|
1398
|
+
if (targetProductId && confirmedPacking) {
|
|
1399
|
+
try {
|
|
1400
|
+
await writeConfirmedPacking({
|
|
1401
|
+
productId: targetProductId,
|
|
1402
|
+
packing: confirmedPacking,
|
|
1403
|
+
source: "wizard_publish",
|
|
1404
|
+
});
|
|
1405
|
+
setPackingStatus({
|
|
1406
|
+
known: true,
|
|
1407
|
+
confirmedAt: new Date().toISOString(),
|
|
1408
|
+
source: "wizard_publish",
|
|
1409
|
+
packing: confirmedPacking,
|
|
1410
|
+
});
|
|
1411
|
+
}
|
|
1412
|
+
catch (e) {
|
|
1413
|
+
console.warn("Belading wegschrijven mislukt", e);
|
|
1414
|
+
}
|
|
1415
|
+
}
|
|
1416
|
+
remoteBaselineRef.current = {
|
|
1417
|
+
item,
|
|
1418
|
+
at: new Date().toISOString(),
|
|
1419
|
+
source: "floriday",
|
|
1420
|
+
};
|
|
1279
1421
|
const warnings = [];
|
|
1422
|
+
if (!confirmedPacking) {
|
|
1423
|
+
warnings.push("Floriday heeft nog geen belading voor dit artikel");
|
|
1424
|
+
}
|
|
1280
1425
|
const remoteName = item?.tradeItemName ?? item?.name;
|
|
1281
1426
|
if (remoteName && data.name && remoteName !== data.name) {
|
|
1282
1427
|
warnings.push("De artikelnaam wijkt af");
|
|
@@ -1545,11 +1690,11 @@ export function ArtikelWizard({ draftId: initialDraftId, tradeItemId, productId,
|
|
|
1545
1690
|
setDeleteOpen(o);
|
|
1546
1691
|
if (!o)
|
|
1547
1692
|
setDeleteAck(false);
|
|
1548
|
-
}, children: [_jsx(AlertDialogTrigger, { asChild: true, children: _jsxs(Button, { variant: "ghost", size: "sm", className: "text-destructive hover:text-destructive", children: [_jsx(Trash2, { className: "mr-2 h-4 w-4" }), "Verwijderen"] }) }), _jsxs(AlertDialogContent, { children: [_jsxs(AlertDialogHeader, { children: [_jsx(AlertDialogTitle, { children: "Product verwijderen?" }), _jsx(AlertDialogDescription, { asChild: true, children: _jsxs("div", { className: "space-y-3 text-sm", children: [_jsxs("div", { children: ["Je staat op het punt om ", _jsx("strong", { children: data.name || "dit artikel" }), data.articleCode ? _jsxs(_Fragment, { children: [" (artikelnummer ", _jsx("code", { children: data.articleCode }), ")"] }) : null, " ", "lokaal uit de voorraad te verwijderen."] }), _jsxs("div", { className: "rounded-md border p-3 bg-muted/40 space-y-1", children: [_jsxs("div", { children: ["Huidige voorraad: ", _jsx("strong", { children: productMeta.physicalStock }), " stuks"] }), _jsxs("div", { children: ["Floriday-koppeling:", " ", productMeta.floridayActive || productMeta.floridayTradeItemId ? (_jsx("span", { className: "text-emerald-700 font-medium", children: "actief" })) : (_jsx("span", { className: "text-muted-foreground", children: "geen" }))] })] }), (productMeta.floridayActive || productMeta.floridayTradeItemId) && (_jsxs("div", { className: "rounded-md border border-amber-300 bg-amber-50 p-3 text-amber-900", children: [_jsx("strong", { children: "Let op:" }), " dit artikel is gekoppeld met Floriday. Als je alleen de lokale kant verwijdert, blijft het artikel op Floriday bestaan en verschijnt het bij de volgende sync weer terug in de lijst. Trek het artikel daarna zelf in via het Floriday-portaal als je het echt weg wilt."] })), productMeta.physicalStock > 0 && (_jsxs("div", { className: "rounded-md border border-rose-300 bg-rose-50 p-3 text-rose-900", children: ["Er staat nog voorraad (", productMeta.physicalStock, " stuks) op dit product. Deze voorraad wordt \u00F3\u00F3k verwijderd en kan niet automatisch worden hersteld."] })), _jsxs("label", { className: "flex items-start gap-2 pt-1", children: [_jsx(Checkbox, { checked: deleteAck, onCheckedChange: (v) => setDeleteAck(Boolean(v)) }), _jsx("span", { children: "Ik weet zeker dat ik dit product wil verwijderen en begrijp de gevolgen." })] })] }) })] }), _jsxs(AlertDialogFooter, { children: [_jsx(AlertDialogCancel, { children: "Annuleren" }), _jsx(AlertDialogAction, { disabled: !deleteAck, onClick: handleDeleteDraft, className: "bg-destructive text-destructive-foreground hover:bg-destructive/90", children: "Definitief verwijderen" })] })] })] }))] }), isEditing && (data.name || data.vbnName) && (_jsxs("div", { className: "space-y-1", children: [_jsx("div", { className: "text-xs uppercase tracking-wide text-muted-foreground", children: "Artikel" }), _jsxs("div", { className: "flex items-center gap-3 flex-wrap", children: [_jsx("h1", { className: "text-2xl font-semibold leading-tight", children: data.name || data.vbnName }), (isEditingPublished || draftFloridayId) ? (syncState === "saving" ? (_jsxs("span", { className: "inline-flex items-center gap-1 text-xs px-2 py-0.5 rounded-full bg-muted text-muted-foreground", children: [_jsx(Loader2, { className: "h-3 w-3 animate-spin" }), " Synchroniseren\u2026"] })) : syncState === "saved" ? (_jsxs("span", { className: "inline-flex items-center gap-1 text-xs px-2 py-0.5 rounded-full bg-emerald-100 text-emerald-700", children: [_jsx(Check, { className: "h-3 w-3" }), " Gesynchroniseerd"] })) : syncState === "error" ? (_jsx("span", { className: "inline-flex items-center gap-1 text-xs px-2 py-0.5 rounded-full bg-red-100 text-red-700", title: syncError ?? undefined, children: "Sync mislukt \u2014 klik Opslaan om opnieuw te proberen" })) : null) : (_jsx("span", { className: "inline-flex items-center gap-1 text-xs px-2 py-0.5 rounded-full bg-muted text-muted-foreground", children: "Nog niet gepubliceerd naar Floriday" })), _jsx(PriceStatusBadge, { tradeItemId: tradeItemId ?? draftFloridayId ?? null, offerForSale: data.offerForSale })] }), data.name && data.vbnName && data.name !== data.vbnName && (_jsx("div", { className: "text-sm text-muted-foreground", children: data.vbnName }))] })), pendingSync && (_jsxs(Card, { className: "p-4 border-amber-300 bg-amber-50 text-amber-900 space-y-2", children: [_jsx("div", { className: "font-medium text-sm", children: "Je wijzigingen zijn opgeslagen, maar nog niet doorgegeven aan Floriday" }), _jsxs("div", { className: "text-xs", children: ["Alles wat je hier hebt ingevuld blijft bewaard in dit systeem. Zodra het doorgeven lukt, verdwijnt deze melding vanzelf.", pendingSync.error ? ` Reden: ${pendingSync.error}` : ""] }), _jsx(Button, { type: "button", variant: "outline", size: "sm", disabled: retryingSync, onClick: retrySync, children: retryingSync ? (_jsxs(_Fragment, { children: [_jsx(Loader2, { className: "h-3 w-3 animate-spin mr-1" }), " Bezig\u2026"] })) : ("Opnieuw proberen") })] })), isEditing && (_jsx(Card, { className: "p-4 bg-muted/30 flex items-center gap-3 text-sm", children: isEditingPublished ? (_jsxs(_Fragment, { children: [_jsx("img", { src: floridayLogo, alt: "Floriday", className: "h-6 w-6 shrink-0" }), _jsxs("div", { className: "flex-1", children: [_jsx("div", { className: "font-medium", children: "Gepubliceerd artikel bewerken" }), _jsx("div", { className: "text-xs text-muted-foreground", children: "Wijzigingen worden direct naar Floriday verstuurd. Je kunt vrij tussen alle secties navigeren." })] }), _jsxs(Button, { onClick: () => void submit(), disabled: submitting || invalidStepCount > 0, children: [submitting ? (_jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" })) : (_jsx(Check, { className: "mr-2 h-4 w-4" })), "Wijzigingen opslaan"] })] })) : (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex-1", children: [_jsx("div", { className: "font-medium", children: "Lokaal artikel bewerken" }), _jsx("div", { className: "text-xs text-muted-foreground", children: "Niet gepubliceerd. Je kunt vrij tussen alle secties navigeren." })] }), _jsxs(Button, { onClick: () => void submit(), disabled: submitting || invalidStepCount > 0, children: [submitting ? (_jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" })) : (_jsx(Check, { className: "mr-2 h-4 w-4" })), publishToFloriday ? "Publiceren naar Floriday" : "Wijzigingen opslaan"] })] })) })), isEditing && (_jsxs(_Fragment, { children: [_jsx(ArtikelCompositionCard, { productId: linkedProductId, floridayId: tradeItemId ?? draftFloridayId ?? null }), _jsx(FloridayInfoCard, { floridayTradeItemId: tradeItemId ?? draftFloridayId ?? null, local: {
|
|
1693
|
+
}, children: [_jsx(AlertDialogTrigger, { asChild: true, children: _jsxs(Button, { variant: "ghost", size: "sm", className: "text-destructive hover:text-destructive", children: [_jsx(Trash2, { className: "mr-2 h-4 w-4" }), "Verwijderen"] }) }), _jsxs(AlertDialogContent, { children: [_jsxs(AlertDialogHeader, { children: [_jsx(AlertDialogTitle, { children: "Product verwijderen?" }), _jsx(AlertDialogDescription, { asChild: true, children: _jsxs("div", { className: "space-y-3 text-sm", children: [_jsxs("div", { children: ["Je staat op het punt om ", _jsx("strong", { children: data.name || "dit artikel" }), data.articleCode ? _jsxs(_Fragment, { children: [" (artikelnummer ", _jsx("code", { children: data.articleCode }), ")"] }) : null, " ", "lokaal uit de voorraad te verwijderen."] }), _jsxs("div", { className: "rounded-md border p-3 bg-muted/40 space-y-1", children: [_jsxs("div", { children: ["Huidige voorraad: ", _jsx("strong", { children: productMeta.physicalStock }), " stuks"] }), _jsxs("div", { children: ["Floriday-koppeling:", " ", productMeta.floridayActive || productMeta.floridayTradeItemId ? (_jsx("span", { className: "text-emerald-700 font-medium", children: "actief" })) : (_jsx("span", { className: "text-muted-foreground", children: "geen" }))] })] }), (productMeta.floridayActive || productMeta.floridayTradeItemId) && (_jsxs("div", { className: "rounded-md border border-amber-300 bg-amber-50 p-3 text-amber-900", children: [_jsx("strong", { children: "Let op:" }), " dit artikel is gekoppeld met Floriday. Als je alleen de lokale kant verwijdert, blijft het artikel op Floriday bestaan en verschijnt het bij de volgende sync weer terug in de lijst. Trek het artikel daarna zelf in via het Floriday-portaal als je het echt weg wilt."] })), productMeta.physicalStock > 0 && (_jsxs("div", { className: "rounded-md border border-rose-300 bg-rose-50 p-3 text-rose-900", children: ["Er staat nog voorraad (", productMeta.physicalStock, " stuks) op dit product. Deze voorraad wordt \u00F3\u00F3k verwijderd en kan niet automatisch worden hersteld."] })), _jsxs("label", { className: "flex items-start gap-2 pt-1", children: [_jsx(Checkbox, { checked: deleteAck, onCheckedChange: (v) => setDeleteAck(Boolean(v)) }), _jsx("span", { children: "Ik weet zeker dat ik dit product wil verwijderen en begrijp de gevolgen." })] })] }) })] }), _jsxs(AlertDialogFooter, { children: [_jsx(AlertDialogCancel, { children: "Annuleren" }), _jsx(AlertDialogAction, { disabled: !deleteAck, onClick: handleDeleteDraft, className: "bg-destructive text-destructive-foreground hover:bg-destructive/90", children: "Definitief verwijderen" })] })] })] }))] }), isEditing && (data.name || data.vbnName) && (_jsxs("div", { className: "space-y-1", children: [_jsx("div", { className: "text-xs uppercase tracking-wide text-muted-foreground", children: "Artikel" }), _jsxs("div", { className: "flex items-center gap-3 flex-wrap", children: [_jsx("h1", { className: "text-2xl font-semibold leading-tight", children: data.name || data.vbnName }), (isEditingPublished || draftFloridayId) ? (syncState === "saving" ? (_jsxs("span", { className: "inline-flex items-center gap-1 text-xs px-2 py-0.5 rounded-full bg-muted text-muted-foreground", children: [_jsx(Loader2, { className: "h-3 w-3 animate-spin" }), " Synchroniseren\u2026"] })) : syncState === "saved" ? (_jsxs("span", { className: "inline-flex items-center gap-1 text-xs px-2 py-0.5 rounded-full bg-emerald-100 text-emerald-700", children: [_jsx(Check, { className: "h-3 w-3" }), " Gesynchroniseerd"] })) : syncState === "error" ? (_jsx("span", { className: "inline-flex items-center gap-1 text-xs px-2 py-0.5 rounded-full bg-red-100 text-red-700", title: syncError ?? undefined, children: "Sync mislukt \u2014 klik Opslaan om opnieuw te proberen" })) : null) : (_jsx("span", { className: "inline-flex items-center gap-1 text-xs px-2 py-0.5 rounded-full bg-muted text-muted-foreground", children: "Nog niet gepubliceerd naar Floriday" })), _jsx(PriceStatusBadge, { tradeItemId: tradeItemId ?? draftFloridayId ?? null, offerForSale: data.offerForSale })] }), data.name && data.vbnName && data.name !== data.vbnName && (_jsx("div", { className: "text-sm text-muted-foreground", children: data.vbnName }))] })), pendingSync && (_jsxs(Card, { className: "p-4 border-amber-300 bg-amber-50 text-amber-900 space-y-2", children: [_jsx("div", { className: "font-medium text-sm", children: "Je wijzigingen zijn opgeslagen, maar nog niet doorgegeven aan Floriday" }), _jsxs("div", { className: "text-xs", children: ["Alles wat je hier hebt ingevuld blijft bewaard in dit systeem. Zodra het doorgeven lukt, verdwijnt deze melding vanzelf.", pendingSync.error ? ` Reden: ${pendingSync.error}` : ""] }), _jsx(Button, { type: "button", variant: "outline", size: "sm", disabled: retryingSync, onClick: retrySync, children: retryingSync ? (_jsxs(_Fragment, { children: [_jsx(Loader2, { className: "h-3 w-3 animate-spin mr-1" }), " Bezig\u2026"] })) : ("Opnieuw proberen") })] })), isEditing && (_jsx(Card, { className: "p-4 bg-muted/30 flex items-center gap-3 text-sm", children: isEditingPublished ? (_jsxs(_Fragment, { children: [_jsx("img", { src: floridayLogo, alt: "Floriday", className: "h-6 w-6 shrink-0" }), _jsxs("div", { className: "flex-1", children: [_jsx("div", { className: "font-medium", children: "Gepubliceerd artikel bewerken" }), _jsx("div", { className: "text-xs text-muted-foreground", children: "Wijzigingen worden direct naar Floriday verstuurd. Je kunt vrij tussen alle secties navigeren." })] }), _jsxs(Button, { onClick: () => void submit(), disabled: submitting || invalidStepCount > 0, children: [submitting ? (_jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" })) : (_jsx(Check, { className: "mr-2 h-4 w-4" })), "Wijzigingen opslaan"] })] })) : (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex-1", children: [_jsx("div", { className: "font-medium", children: "Lokaal artikel bewerken" }), _jsx("div", { className: "text-xs text-muted-foreground", children: "Niet gepubliceerd. Je kunt vrij tussen alle secties navigeren." })] }), _jsxs(Button, { onClick: () => void submit(), disabled: submitting || invalidStepCount > 0, children: [submitting ? (_jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" })) : (_jsx(Check, { className: "mr-2 h-4 w-4" })), publishToFloriday ? "Publiceren naar Floriday" : "Wijzigingen opslaan"] })] })) })), isEditing && (_jsxs(_Fragment, { children: [_jsx(ArtikelCompositionCard, { productId: linkedProductId ?? productId ?? null, floridayId: tradeItemId ?? draftFloridayId ?? null }), _jsx(FloridayInfoCard, { floridayTradeItemId: tradeItemId ?? draftFloridayId ?? null, local: {
|
|
1549
1694
|
name: data.name || data.vbnName,
|
|
1550
1695
|
articleNumber: data.articleCode,
|
|
1551
1696
|
gtin: data.gtin,
|
|
1552
|
-
} }), _jsx(VoorraadStockCard, { connectionId: activeId, tradeItemId: tradeItemId ?? null, draftId: draftId ?? null, productId: linkedProductId }), _jsx(OrderHistoryCard, { tradeItemKey: localTradeItemKey, productName: data.name || data.vbnName || null, productId: linkedProductId ?? null }), _jsx(StockMutationHistoryCard, { tradeItemKey: localTradeItemKey, productId: linkedProductId ?? null }), _jsx(ProductLinkCard, { tradeItemKey: localTradeItemKey, productName: data.vbnName || null })] })), _jsx("ol", { className: "space-y-3", children: steps.map((s, i) => {
|
|
1697
|
+
} }), _jsx(VoorraadStockCard, { connectionId: activeId, tradeItemId: tradeItemId ?? null, draftId: draftId ?? null, productId: linkedProductId ?? productId ?? null }), _jsx(OrderHistoryCard, { tradeItemKey: localTradeItemKey, productName: data.name || data.vbnName || null, productId: linkedProductId ?? productId ?? null }), _jsx(StockMutationHistoryCard, { tradeItemKey: localTradeItemKey, productId: linkedProductId ?? productId ?? null }), _jsx(ProductLinkCard, { tradeItemKey: localTradeItemKey, productName: data.vbnName || null })] })), _jsx("ol", { className: "space-y-3", children: steps.map((s, i) => {
|
|
1553
1698
|
const isOpen = i === step;
|
|
1554
1699
|
const isValid = stepValidity[i];
|
|
1555
1700
|
const isVisited = i < step || isEditing;
|
|
@@ -1571,7 +1716,7 @@ export function ArtikelWizard({ draftId: initialDraftId, tradeItemId, productId,
|
|
|
1571
1716
|
? "border-primary bg-primary text-primary-foreground"
|
|
1572
1717
|
: status === "invalid"
|
|
1573
1718
|
? "border-destructive bg-destructive text-destructive-foreground"
|
|
1574
|
-
: "border-muted-foreground/30 text-muted-foreground"}`, children: status === "valid" ? (_jsx(Check, { className: "h-4 w-4" })) : status === "invalid" ? ("!") : (i + 1) }), _jsx("span", { className: `min-w-0 truncate font-medium ${status === "untouched" ? "text-muted-foreground" : ""}`, children: s.label }), !isOpen && summary && (_jsx("span", { className: `max-w-xs truncate text-xs ${status === "invalid" ? "text-destructive" : "text-muted-foreground"}`, children: status === "invalid" ? `Onvolledig — ${summary}` : summary }))] }), isOpen && (_jsxs(CardContent, { className: "space-y-4 pt-0", children: [_jsx("div", { "data-wizard-form-content": true, className: "w-full min-w-0", children: _jsx(StepBody, { stepKey: s.key, data: data, update: update, vbnProducts: vbnProducts, featureTypes: featureTypes, packagingTypes: packagingTypes, loadCarriers: loadCarriers, floridayCustomers: floridayCustomers, schemaQuery: schemaQuery, regulatoryQuery: regulatoryQuery, spec: spec, collectionsList: collectionsList, setCollectionsList: setCollectionsList, activeId: activeId, acceptedVbnCodes: acceptedVbnCodes, priceGroups: priceGroups, parentProductId: linkedProductId ?? draftId ?? null, parentFloridayId: draftFloridayId ?? tradeItemId ?? null, articleCodeLocked: Boolean(draftFloridayId || tradeItemId) }) }), isLastStep && !isEditingPublished && (_jsxs("div", { className: "rounded-lg border bg-muted/30 p-4 flex items-start gap-3", children: [_jsx("img", { src: floridayLogo, alt: "Floriday", className: "h-7 w-7 shrink-0 mt-0.5" }), _jsxs("div", { className: "flex-1 min-w-0", children: [_jsx(Label, { htmlFor: "publish-to-floriday", className: "font-medium cursor-pointer", children: "Publiceren naar Floriday" }), _jsx("p", { className: "text-xs text-muted-foreground mt-1", children: publishToFloriday
|
|
1719
|
+
: "border-muted-foreground/30 text-muted-foreground"}`, children: status === "valid" ? (_jsx(Check, { className: "h-4 w-4" })) : status === "invalid" ? ("!") : (i + 1) }), _jsx("span", { className: `min-w-0 truncate font-medium ${status === "untouched" ? "text-muted-foreground" : ""}`, children: s.label }), !isOpen && summary && (_jsx("span", { className: `max-w-xs truncate text-xs ${status === "invalid" ? "text-destructive" : "text-muted-foreground"}`, children: status === "invalid" ? `Onvolledig — ${summary}` : summary }))] }), isOpen && (_jsxs(CardContent, { className: "space-y-4 pt-0", children: [_jsx("div", { "data-wizard-form-content": true, className: "w-full min-w-0", children: _jsx(StepBody, { stepKey: s.key, data: data, packingStatus: packingStatus, update: update, vbnProducts: vbnProducts, featureTypes: featureTypes, packagingTypes: packagingTypes, loadCarriers: loadCarriers, floridayCustomers: floridayCustomers, schemaQuery: schemaQuery, regulatoryQuery: regulatoryQuery, spec: spec, collectionsList: collectionsList, setCollectionsList: setCollectionsList, activeId: activeId, acceptedVbnCodes: acceptedVbnCodes, priceGroups: priceGroups, parentProductId: linkedProductId ?? draftId ?? null, parentFloridayId: draftFloridayId ?? tradeItemId ?? null, articleCodeLocked: Boolean(draftFloridayId || tradeItemId) }) }), isLastStep && !isEditingPublished && (_jsxs("div", { className: "rounded-lg border bg-muted/30 p-4 flex items-start gap-3", children: [_jsx("img", { src: floridayLogo, alt: "Floriday", className: "h-7 w-7 shrink-0 mt-0.5" }), _jsxs("div", { className: "flex-1 min-w-0", children: [_jsx(Label, { htmlFor: "publish-to-floriday", className: "font-medium cursor-pointer", children: "Publiceren naar Floriday" }), _jsx("p", { className: "text-xs text-muted-foreground mt-1", children: publishToFloriday
|
|
1575
1720
|
? "Het artikel wordt aangemaakt in Floriday en is binnen enkele minuten zichtbaar voor klanten."
|
|
1576
1721
|
: "Het artikel wordt alleen lokaal opgeslagen. Je kunt het later vanuit de voorraadlijst alsnog publiceren naar Floriday." })] }), _jsx(Switch, { id: "publish-to-floriday", checked: publishToFloriday, onCheckedChange: setPublishToFloriday })] })), (isLastStep || isEditing) && (_jsx(PublishReadinessCard, { report: readiness, loading: connLoading || connectionReadiness.isLoading || schemaQuery.isLoading, onGoToStep: goToStepKey })), publishJob && (_jsx(PublishProgressCard, { job: publishJob, steps: publishSteps, retrying: submitting, onRetry: () => void submit({ resumeJobId: publishJob.id }), onFixStep: (key) => goToStepKey(key === "trade-item" ? "eigenschappen" : "aanbod") })), (isLastStep || isEditing) && invalidStepCount > 0 && (_jsxs("div", { className: "rounded-md border border-destructive/40 bg-destructive/5 px-3 py-2 text-xs text-destructive flex items-center justify-between gap-3", children: [_jsxs("span", { children: ["Nog ", invalidStepCount, " stap", invalidStepCount === 1 ? "" : "pen", " onvolledig"] }), firstInvalidIndex >= 0 && (_jsxs("button", { type: "button", onClick: () => setStep(firstInvalidIndex), className: "underline font-medium", children: ["Ga naar ", steps[firstInvalidIndex].label] }))] })), _jsx("div", { className: "flex justify-end pt-2", children: isLastStep || isEditing ? (_jsxs(Button, { onClick: () => void submit(), disabled: submitting || invalidStepCount > 0, children: [submitting ? (_jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" })) : (_jsx(Check, { className: "mr-2 h-4 w-4" })), isEditingPublished
|
|
1577
1722
|
? "Wijzigingen opslaan"
|
|
@@ -1582,7 +1727,10 @@ export function ArtikelWizard({ draftId: initialDraftId, tradeItemId, productId,
|
|
|
1582
1727
|
: isEditingDraft
|
|
1583
1728
|
? "Wijzigingen opslaan"
|
|
1584
1729
|
: "Artikel aanmaken"] })) : (_jsxs(Button, { onClick: next, disabled: !isValid, children: ["Volgende stap", _jsx(ArrowRight, { className: "ml-2 h-4 w-4" })] })) })] }))] }) }, s.key));
|
|
1585
|
-
}) })
|
|
1730
|
+
}) }), _jsx(AlertDialog, { open: Boolean(conflict), onOpenChange: (open) => {
|
|
1731
|
+
if (!open)
|
|
1732
|
+
conflict?.resolve(false);
|
|
1733
|
+
}, children: _jsxs(AlertDialogContent, { children: [_jsxs(AlertDialogHeader, { children: [_jsx(AlertDialogTitle, { children: "Dit artikel is inmiddels gewijzigd in Floriday" }), _jsx(AlertDialogDescription, { children: "Sinds dit scherm het artikel las, is het bij Floriday aangepast. Publiceer je jouw wijziging, dan overschrijf je die aanpassing." })] }), _jsx("div", { className: "overflow-hidden rounded-md border text-sm", children: _jsxs("table", { className: "w-full", children: [_jsx("thead", { className: "bg-muted/50 text-left text-xs uppercase text-muted-foreground", children: _jsxs("tr", { children: [_jsx("th", { className: "px-3 py-2 font-medium", children: "Gegeven" }), _jsx("th", { className: "px-3 py-2 font-medium", children: "Zoals jij het las" }), _jsx("th", { className: "px-3 py-2 font-medium", children: "Nu in Floriday" })] }) }), _jsx("tbody", { children: conflict?.differences.map((d) => (_jsxs("tr", { className: "border-t", children: [_jsx("td", { className: "px-3 py-2", children: d.label }), _jsx("td", { className: "px-3 py-2 text-muted-foreground", children: d.mine }), _jsx("td", { className: "px-3 py-2 font-medium", children: d.theirs })] }, d.label))) })] }) }), _jsxs(AlertDialogFooter, { children: [_jsx(AlertDialogCancel, { onClick: () => conflict?.resolve(false), children: "Annuleren en eerst opnieuw laden" }), _jsx(AlertDialogAction, { onClick: () => conflict?.resolve(true), children: "Toch mijn wijziging publiceren" })] })] }) })] }));
|
|
1586
1734
|
}
|
|
1587
1735
|
function canAdvance(key, d) {
|
|
1588
1736
|
return validateStep(key, d).ok;
|
|
@@ -2320,7 +2468,7 @@ function StepWarehouse({ data, update, activeId }) {
|
|
|
2320
2468
|
* 3. Reguliere of klantspecifieke belading (multi-select organisaties)
|
|
2321
2469
|
* 4. Optionele artikelfoto in dit fust (upload via Floriday /media)
|
|
2322
2470
|
*/
|
|
2323
|
-
function StepBeladingen({ data, update, packagingTypes, loadCarriers, floridayCustomers, activeId, }) {
|
|
2471
|
+
function StepBeladingen({ data, update, packagingTypes, loadCarriers, floridayCustomers, activeId, packingStatus, }) {
|
|
2324
2472
|
const [dialogOpen, setDialogOpen] = useState(false);
|
|
2325
2473
|
const [editingId, setEditingId] = useState(null);
|
|
2326
2474
|
const openNew = () => {
|
|
@@ -2364,7 +2512,7 @@ function StepBeladingen({ data, update, packagingTypes, loadCarriers, floridayCu
|
|
|
2364
2512
|
const editing = editingId
|
|
2365
2513
|
? data.packingConfigurations.find((p) => p.id === editingId) ?? null
|
|
2366
2514
|
: null;
|
|
2367
|
-
return (_jsxs("div", { className: "space-y-4", children: [data.packingConfigurations.length === 0 ? (_jsx("div", { className: "rounded-md border border-dashed p-6 text-center", children: _jsx("p", { className: "text-sm text-muted-foreground", children: "Nog geen beladingsconfiguratie toegevoegd." }) })) : (_jsx("div", { className: "overflow-hidden rounded-md border", children: _jsxs("table", { className: "w-full text-sm", children: [_jsx("thead", { className: "bg-muted/50 text-left text-xs uppercase text-muted-foreground", children: _jsxs("tr", { children: [_jsx("th", { className: "px-3 py-2 font-medium", children: "Primair" }), _jsx("th", { className: "px-3 py-2 font-medium", children: "Fust" }), _jsx("th", { className: "px-3 py-2 font-medium", children: "Ladingdrager" }), _jsx("th", { className: "px-3 py-2 font-medium", children: "Belading" }), _jsx("th", { className: "px-3 py-2 font-medium", children: "Type" }), _jsx("th", { className: "px-3 py-2" })] }) }), _jsx("tbody", { className: "divide-y", children: data.packingConfigurations.map((p) => {
|
|
2515
|
+
return (_jsxs("div", { className: "space-y-4", children: [packingStatus && !packingStatus.known && (_jsxs("div", { className: "rounded-md border border-amber-300 bg-amber-50 p-3 text-sm text-amber-900 dark:border-amber-800 dark:bg-amber-950/40 dark:text-amber-100", children: [_jsx("span", { className: "font-medium", children: "Belading onbekend." }), " Floriday heeft voor dit artikel nog geen belading bevestigd. Wat je hier invult wordt pas de geldende belading zodra de publicatie door Floriday is bevestigd."] })), packingStatus?.known && packingStatus.packing && (_jsxs("div", { className: "rounded-md border bg-muted/30 p-3 text-sm text-muted-foreground", children: ["Door Floriday bevestigde belading: ", packingStatus.packing.piecesPerPackage, " per fust \u00B7", " ", packingStatus.packing.packagesPerLayer, " fusten per laag \u00B7", " ", packingStatus.packing.layersPerLoadCarrier, " lagen per kar."] })), data.packingConfigurations.length === 0 ? (_jsx("div", { className: "rounded-md border border-dashed p-6 text-center", children: _jsx("p", { className: "text-sm text-muted-foreground", children: "Nog geen beladingsconfiguratie toegevoegd." }) })) : (_jsx("div", { className: "overflow-hidden rounded-md border", children: _jsxs("table", { className: "w-full text-sm", children: [_jsx("thead", { className: "bg-muted/50 text-left text-xs uppercase text-muted-foreground", children: _jsxs("tr", { children: [_jsx("th", { className: "px-3 py-2 font-medium", children: "Primair" }), _jsx("th", { className: "px-3 py-2 font-medium", children: "Fust" }), _jsx("th", { className: "px-3 py-2 font-medium", children: "Ladingdrager" }), _jsx("th", { className: "px-3 py-2 font-medium", children: "Belading" }), _jsx("th", { className: "px-3 py-2 font-medium", children: "Type" }), _jsx("th", { className: "px-3 py-2" })] }) }), _jsx("tbody", { className: "divide-y", children: data.packingConfigurations.map((p) => {
|
|
2368
2516
|
const pkgLabel = packagingTypes.find((r) => codeOf(r) === p.packagingType);
|
|
2369
2517
|
const lcLabel = loadCarriers.find((r) => codeOf(r) === p.loadCarrier);
|
|
2370
2518
|
return (_jsxs("tr", { className: "hover:bg-muted/30", children: [_jsx("td", { className: "px-3 py-2", children: _jsx("input", { type: "radio", name: "primary-packing", checked: Boolean(p.isPrimary), onChange: () => setPrimary(p.id), "aria-label": "Als primaire belading instellen" }) }), _jsxs("td", { className: "px-3 py-2", children: [_jsx("div", { className: "font-medium", children: pkgLabel
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditArtikelPage.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/EditArtikelPage.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"EditArtikelPage.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/EditArtikelPage.tsx"],"names":[],"mappings":"AAaA,wBAAgB,eAAe,CAAC,EAC9B,EAAE,EACF,WAAW,GACZ,EAAE;IACD,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,+BAoFA"}
|
|
@@ -4,6 +4,7 @@ import { Card } from "@flowselections/core";
|
|
|
4
4
|
import { Loader2 } from "lucide-react";
|
|
5
5
|
import { ArtikelWizard } from "./ArtikelWizard";
|
|
6
6
|
import { ProductCustomFieldsCard } from "./ProductCustomFieldsCard";
|
|
7
|
+
import { TrayStickerCard } from "./TrayStickerCard";
|
|
7
8
|
import { supabase } from "../../integrations/supabase/client";
|
|
8
9
|
export function EditArtikelPage({ id, resumeJobId, }) {
|
|
9
10
|
const [resolved, setResolved] = useState(null);
|
|
@@ -63,7 +64,7 @@ export function EditArtikelPage({ id, resumeJobId, }) {
|
|
|
63
64
|
return (_jsx("main", { className: "p-6", children: _jsxs(Card, { className: "p-6 text-sm space-y-1", children: [_jsx("div", { children: "Artikel niet gevonden." }), resolved.reason && (_jsx("div", { className: "text-muted-foreground", children: resolved.reason }))] }) }));
|
|
64
65
|
}
|
|
65
66
|
if (resolved.kind === "product") {
|
|
66
|
-
return (_jsxs(_Fragment, { children: [_jsx(ArtikelWizard, { productId: resolved.id, resumeJobId: resumeJobId }),
|
|
67
|
+
return (_jsxs(_Fragment, { children: [_jsx(ArtikelWizard, { productId: resolved.id, resumeJobId: resumeJobId }), _jsxs("div", { className: "p-6 pt-0 space-y-6", children: [_jsx(TrayStickerCard, { productId: resolved.id }), _jsx(ProductCustomFieldsCard, { productId: resolved.id })] })] }));
|
|
67
68
|
}
|
|
68
69
|
return _jsx(ArtikelWizard, { tradeItemId: resolved.id, resumeJobId: resumeJobId });
|
|
69
70
|
}
|
|
@@ -3,5 +3,5 @@ export declare function ExcelExportButton({ items, filename, onExported, }: {
|
|
|
3
3
|
items: TradeItem[];
|
|
4
4
|
filename?: string;
|
|
5
5
|
onExported?: () => void | Promise<void>;
|
|
6
|
-
}): import("react
|
|
6
|
+
}): import("react").JSX.Element;
|
|
7
7
|
//# sourceMappingURL=ExcelExportButton.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExcelExportButton.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/ExcelExportButton.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAG3D,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,QAAqB,EACrB,UAAU,GACX,EAAE;IACD,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzC
|
|
1
|
+
{"version":3,"file":"ExcelExportButton.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/ExcelExportButton.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAG3D,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,QAAqB,EACrB,UAAU,GACX,EAAE;IACD,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzC,+BAgDA"}
|
|
@@ -7,6 +7,6 @@ interface Props {
|
|
|
7
7
|
gtin?: string | null;
|
|
8
8
|
};
|
|
9
9
|
}
|
|
10
|
-
export declare function FloridayInfoCard({ floridayTradeItemId, local }: Props): import("react
|
|
10
|
+
export declare function FloridayInfoCard({ floridayTradeItemId, local }: Props): import("react").JSX.Element | null;
|
|
11
11
|
export {};
|
|
12
12
|
//# sourceMappingURL=FloridayInfoCard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FloridayInfoCard.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/FloridayInfoCard.tsx"],"names":[],"mappings":"AAYA,UAAU,KAAK;IACb,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,8EAA8E;IAC9E,KAAK,CAAC,EAAE;QACN,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACtB,CAAC;CACH;AA6DD,wBAAgB,gBAAgB,CAAC,EAAE,mBAAmB,EAAE,KAAK,EAAE,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"FloridayInfoCard.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/FloridayInfoCard.tsx"],"names":[],"mappings":"AAYA,UAAU,KAAK;IACb,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,8EAA8E;IAC9E,KAAK,CAAC,EAAE;QACN,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACtB,CAAC;CACH;AA6DD,wBAAgB,gBAAgB,CAAC,EAAE,mBAAmB,EAAE,KAAK,EAAE,EAAE,KAAK,sCAqRrE"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare function FustenPage(): import("react
|
|
1
|
+
export declare function FustenPage(): import("react").JSX.Element;
|
|
2
2
|
//# sourceMappingURL=FustenPage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FustenPage.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/FustenPage.tsx"],"names":[],"mappings":"AAiKA,wBAAgB,UAAU,
|
|
1
|
+
{"version":3,"file":"FustenPage.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/FustenPage.tsx"],"names":[],"mappings":"AAiKA,wBAAgB,UAAU,gCAkMzB"}
|
|
@@ -6,5 +6,5 @@ export declare function InventorySettingsDrawer({ open, onOpenChange, connection
|
|
|
6
6
|
productIds: string[];
|
|
7
7
|
current?: InventorySetting | undefined;
|
|
8
8
|
onSaved?: () => void;
|
|
9
|
-
}): import("react
|
|
9
|
+
}): import("react").JSX.Element;
|
|
10
10
|
//# sourceMappingURL=InventorySettingsDrawer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InventorySettingsDrawer.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/InventorySettingsDrawer.tsx"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAE,gBAAgB,EAAa,MAAM,kCAAkC,CAAC;AAWpF,wBAAgB,uBAAuB,CAAC,EACtC,IAAI,EACJ,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,OAAO,EACP,OAAO,GACR,EAAE;IACD,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;IACvC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB
|
|
1
|
+
{"version":3,"file":"InventorySettingsDrawer.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/InventorySettingsDrawer.tsx"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAE,gBAAgB,EAAa,MAAM,kCAAkC,CAAC;AAWpF,wBAAgB,uBAAuB,CAAC,EACtC,IAAI,EACJ,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,OAAO,EACP,OAAO,GACR,EAAE;IACD,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;IACvC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB,+BA0LA"}
|
|
@@ -2,5 +2,5 @@ import type { InventorySetting, StockMode } from "../../hooks/useInventorySettin
|
|
|
2
2
|
export declare const MODE_LABELS: Record<StockMode, string>;
|
|
3
3
|
export declare function InventoryStatusBadge({ setting }: {
|
|
4
4
|
setting: InventorySetting | undefined;
|
|
5
|
-
}): import("react
|
|
5
|
+
}): import("react").JSX.Element;
|
|
6
6
|
//# sourceMappingURL=InventoryStatusBadge.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InventoryStatusBadge.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/InventoryStatusBadge.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAEpF,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAMjD,CAAC;AA4BF,wBAAgB,oBAAoB,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,gBAAgB,GAAG,SAAS,CAAA;CAAE
|
|
1
|
+
{"version":3,"file":"InventoryStatusBadge.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/InventoryStatusBadge.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAEpF,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAMjD,CAAC;AA4BF,wBAAgB,oBAAoB,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,gBAAgB,GAAG,SAAS,CAAA;CAAE,+BAyB1F"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare function NieuwArtikelPage(): import("react
|
|
1
|
+
export declare function NieuwArtikelPage(): import("react").JSX.Element;
|
|
2
2
|
//# sourceMappingURL=NieuwArtikelPage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NieuwArtikelPage.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/NieuwArtikelPage.tsx"],"names":[],"mappings":"AAEA,wBAAgB,gBAAgB,
|
|
1
|
+
{"version":3,"file":"NieuwArtikelPage.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/NieuwArtikelPage.tsx"],"names":[],"mappings":"AAEA,wBAAgB,gBAAgB,gCAE/B"}
|
|
@@ -3,6 +3,6 @@ interface Props {
|
|
|
3
3
|
productName: string | null;
|
|
4
4
|
productId?: string | null;
|
|
5
5
|
}
|
|
6
|
-
export declare function OrderHistoryCard({ tradeItemKey, productName, productId }: Props): import("react
|
|
6
|
+
export declare function OrderHistoryCard({ tradeItemKey, productName, productId }: Props): import("react").JSX.Element;
|
|
7
7
|
export {};
|
|
8
8
|
//# sourceMappingURL=OrderHistoryCard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OrderHistoryCard.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/OrderHistoryCard.tsx"],"names":[],"mappings":"AAKA,UAAU,KAAK;IACb,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAgDD,wBAAgB,gBAAgB,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,KAAK
|
|
1
|
+
{"version":3,"file":"OrderHistoryCard.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/OrderHistoryCard.tsx"],"names":[],"mappings":"AAKA,UAAU,KAAK;IACb,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAgDD,wBAAgB,gBAAgB,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,KAAK,+BAoK/E"}
|
|
@@ -2,6 +2,6 @@ type Props = {
|
|
|
2
2
|
tradeItemId: string | null | undefined;
|
|
3
3
|
offerForSale: boolean;
|
|
4
4
|
};
|
|
5
|
-
export declare function PriceStatusBadge({ tradeItemId, offerForSale }: Props): import("react
|
|
5
|
+
export declare function PriceStatusBadge({ tradeItemId, offerForSale }: Props): import("react").JSX.Element | null;
|
|
6
6
|
export {};
|
|
7
7
|
//# sourceMappingURL=PriceStatusBadge.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PriceStatusBadge.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/PriceStatusBadge.tsx"],"names":[],"mappings":"AAGA,KAAK,KAAK,GAAG;IACX,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACvC,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC;AAeF,wBAAgB,gBAAgB,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"PriceStatusBadge.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/PriceStatusBadge.tsx"],"names":[],"mappings":"AAGA,KAAK,KAAK,GAAG;IACX,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACvC,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC;AAeF,wBAAgB,gBAAgB,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,EAAE,KAAK,sCAkEpE"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { CircleDollarSign, Clock, MinusCircle, Loader2 } from "lucide-react";
|
|
3
|
-
import { useTradeItemSupplyLine } from "../../hooks/useTradeItemSupplyLine";
|
|
3
|
+
import { useTradeItemSupplyLine } from "../../hooks/useTradeItemSupplyLine.js";
|
|
4
4
|
function formatDate(iso) {
|
|
5
5
|
if (!iso)
|
|
6
6
|
return "—";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** Eigen voorraadvelden met `show_in_detail`, tonen en bewerken op de productpagina. */
|
|
2
2
|
export declare function ProductCustomFieldsCard({ productId }: {
|
|
3
3
|
productId: string;
|
|
4
|
-
}): import("react
|
|
4
|
+
}): import("react").JSX.Element | null;
|
|
5
5
|
//# sourceMappingURL=ProductCustomFieldsCard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProductCustomFieldsCard.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/ProductCustomFieldsCard.tsx"],"names":[],"mappings":"AAyBA,wFAAwF;AACxF,wBAAgB,uBAAuB,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"ProductCustomFieldsCard.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/ProductCustomFieldsCard.tsx"],"names":[],"mappings":"AAyBA,wFAAwF;AACxF,wBAAgB,uBAAuB,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,sCA6H3E"}
|
|
@@ -8,6 +8,6 @@ interface Props {
|
|
|
8
8
|
* Koppelt ERP-`products` rijen aan één Floriday-voorraadrij (`trade_item_key`).
|
|
9
9
|
* Zonder koppeling doen bestel-triggers niets voor mailbox/manual-orders.
|
|
10
10
|
*/
|
|
11
|
-
export declare function ProductLinkCard({ tradeItemKey, productName }: Props): import("react
|
|
11
|
+
export declare function ProductLinkCard({ tradeItemKey, productName }: Props): import("react").JSX.Element;
|
|
12
12
|
export {};
|
|
13
13
|
//# sourceMappingURL=ProductLinkCard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProductLinkCard.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/ProductLinkCard.tsx"],"names":[],"mappings":"AAWA,UAAU,KAAK;IACb,qFAAqF;IACrF,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,+DAA+D;IAC/D,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AASD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,KAAK
|
|
1
|
+
{"version":3,"file":"ProductLinkCard.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/ProductLinkCard.tsx"],"names":[],"mappings":"AAWA,UAAU,KAAK;IACb,qFAAqF;IACrF,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,+DAA+D;IAC/D,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AASD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,KAAK,+BA4OnE"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare function PublicatiesPage(): import("react
|
|
1
|
+
export declare function PublicatiesPage(): import("react").JSX.Element;
|
|
2
2
|
//# sourceMappingURL=PublicatiesPage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PublicatiesPage.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/PublicatiesPage.tsx"],"names":[],"mappings":"AA+BA,wBAAgB,eAAe,
|
|
1
|
+
{"version":3,"file":"PublicatiesPage.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/PublicatiesPage.tsx"],"names":[],"mappings":"AA+BA,wBAAgB,eAAe,gCAuI9B"}
|
|
@@ -8,5 +8,5 @@ export declare function PublishProgressCard({ job, steps, onRetry, retrying, onF
|
|
|
8
8
|
onRetry?: () => void;
|
|
9
9
|
retrying?: boolean;
|
|
10
10
|
onFixStep?: (stepKey: string) => void;
|
|
11
|
-
}): import("react
|
|
11
|
+
}): import("react").JSX.Element | null;
|
|
12
12
|
//# sourceMappingURL=PublishProgressCard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PublishProgressCard.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/PublishProgressCard.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAoBhF;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,GAAG,EACH,KAAK,EACL,OAAO,EACP,QAAQ,EACR,SAAS,GACV,EAAE;IACD,GAAG,EAAE,aAAa,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC,
|
|
1
|
+
{"version":3,"file":"PublishProgressCard.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/PublishProgressCard.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAoBhF;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,GAAG,EACH,KAAK,EACL,OAAO,EACP,QAAQ,EACR,SAAS,GACV,EAAE;IACD,GAAG,EAAE,aAAa,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC,sCAyDA"}
|
|
@@ -6,5 +6,5 @@ export declare function PublishReadinessCard({ report, loading, onGoToStep, }: {
|
|
|
6
6
|
report: ReadinessReport;
|
|
7
7
|
loading?: boolean;
|
|
8
8
|
onGoToStep?: (stepKey: string) => void;
|
|
9
|
-
}): import("react
|
|
9
|
+
}): import("react").JSX.Element;
|
|
10
10
|
//# sourceMappingURL=PublishReadinessCard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PublishReadinessCard.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/PublishReadinessCard.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAEnE;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,MAAM,EACN,OAAO,EACP,UAAU,GACX,EAAE;IACD,MAAM,EAAE,eAAe,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC
|
|
1
|
+
{"version":3,"file":"PublishReadinessCard.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/PublishReadinessCard.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAEnE;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,MAAM,EACN,OAAO,EACP,UAAU,GACX,EAAE;IACD,MAAM,EAAE,eAAe,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC,+BAuEA"}
|
|
@@ -5,6 +5,6 @@ interface Props {
|
|
|
5
5
|
packings: PackingConfigurationInput[];
|
|
6
6
|
packagingTypeLabel: (code: string) => string;
|
|
7
7
|
}
|
|
8
|
-
export declare function StepSamenstelling({ productId, floridayId, packings, packagingTypeLabel, }: Props): import("react
|
|
8
|
+
export declare function StepSamenstelling({ productId, floridayId, packings, packagingTypeLabel, }: Props): import("react").JSX.Element;
|
|
9
9
|
export {};
|
|
10
10
|
//# sourceMappingURL=StepSamenstelling.d.ts.map
|