@propeller-commerce/propeller-v2-react-ui 0.24.0 → 0.26.0
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/CHANGELOG.md +66 -0
- package/dist/index.cjs +365 -37
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +170 -6
- package/dist/index.d.ts +170 -6
- package/dist/index.js +360 -41
- package/dist/index.js.map +1 -1
- package/dist/pure.cjs +2 -1
- package/dist/pure.cjs.map +1 -1
- package/dist/pure.d.cts +11 -3
- package/dist/pure.d.ts +11 -3
- package/dist/pure.js +2 -1
- package/dist/pure.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
import { getLabel, getLocalizedValue, formatPrice, localeForLanguage, getClusterSku, getClusterImageUrl, isContentHidden, getProductSku, getProductImageUrl, createServices, isCheckoutAllowed, err, ok, formatSurcharge, deriveUserMode, isContact, isCustomer, getAddresses, attributeNameMatches, getAttributeDisplayName, filterProductsBySelections, extractAttributeValues, buildInventoryFilter, findPurchaserPac, isOverAuthorizationLimit, MIN_STOCK_THRESHOLD, getNettedBonusItems, getLanguageString, collectAttributeValues, getCountryName, resolveLanguageEntry, getLanguageUri } from '@propeller-commerce/propeller-v2-core-ui';
|
|
3
3
|
export * from '@propeller-commerce/propeller-v2-core-ui';
|
|
4
4
|
import * as React6 from 'react';
|
|
5
|
-
import { createContext, useState, useRef, useCallback, useEffect, useMemo, useContext } from 'react';
|
|
5
|
+
import { createContext, useState, useRef, useCallback, useEffect, useMemo, useContext, useSyncExternalStore } from 'react';
|
|
6
6
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
7
|
-
import { ProductStatus, ProductSortField, SortOrder, CrossupsellType, CartStatus, CartAddressType, Gender, YesNo, AddressType, MagicTokenService, PaymentStatuses, OrderSearchFields, OrderItemClass, ProductSearchableField, machineService, PurchaseRole, AttributeType, OrderSortField, OrderType, BundleCondition, OrderDiscountType } from '@propeller-commerce/propeller-sdk-v2';
|
|
7
|
+
import { ProductStatus, ProductSortField, SortOrder, CrossupsellType, PriceDisplay, CartStatus, CartAddressType, Gender, YesNo, AddressType, MagicTokenService, PaymentStatuses, OrderSearchFields, OrderItemClass, ProductSearchableField, machineService, PurchaseRole, AttributeType, OrderSortField, OrderType, BundleCondition, OrderDiscountType } from '@propeller-commerce/propeller-sdk-v2';
|
|
8
8
|
import { clsx } from 'clsx';
|
|
9
9
|
import { twMerge } from 'tailwind-merge';
|
|
10
|
-
import { User } from 'lucide-react';
|
|
10
|
+
import { User, Trash2, MessageSquareQuote } from 'lucide-react';
|
|
11
11
|
|
|
12
12
|
// src/index.ts
|
|
13
13
|
var PropellerDepsContext = createContext(null);
|
|
@@ -795,7 +795,7 @@ function useCart(options) {
|
|
|
795
795
|
rememberCart(resolved);
|
|
796
796
|
return resolved;
|
|
797
797
|
}, [graphqlClient, user, companyId, language, configuration, onCartCreated]);
|
|
798
|
-
const
|
|
798
|
+
const addItem2 = useCallback(async (opts) => {
|
|
799
799
|
setLoading(true);
|
|
800
800
|
setError(null);
|
|
801
801
|
try {
|
|
@@ -842,14 +842,14 @@ function useCart(options) {
|
|
|
842
842
|
const added = [];
|
|
843
843
|
let lastCart = null;
|
|
844
844
|
for (const item of items) {
|
|
845
|
-
const result = await
|
|
845
|
+
const result = await addItem2({ createCart: true, ...item });
|
|
846
846
|
if (!result.ok) return err(result.error);
|
|
847
847
|
lastCart = result.data.cart;
|
|
848
848
|
added.push(result.data.item);
|
|
849
849
|
}
|
|
850
850
|
if (!lastCart) return err("No items to add");
|
|
851
851
|
return ok({ cart: lastCart, items: added });
|
|
852
|
-
}, [
|
|
852
|
+
}, [addItem2]);
|
|
853
853
|
const updateItemQuantity = useCallback(async (cartItemId, quantity) => {
|
|
854
854
|
if (!cartId) return void 0;
|
|
855
855
|
setLoading(true);
|
|
@@ -970,7 +970,7 @@ function useCart(options) {
|
|
|
970
970
|
return [];
|
|
971
971
|
}
|
|
972
972
|
}, [graphqlClient, language, user, resolvedCompanyId, imageSearchFilters, imageVariantFilters]);
|
|
973
|
-
return { cart, cartId, loading, error, checkoutAllowed, resolveCart, addItem, addItems, updateItemQuantity, updateItemNotes, deleteItem, addActionCode, removeActionCode, requestAuthorization, processCart, getCrossupsells, getMinQuantity, getStep };
|
|
973
|
+
return { cart, cartId, loading, error, checkoutAllowed, resolveCart, addItem: addItem2, addItems, updateItemQuantity, updateItemNotes, deleteItem, addActionCode, removeActionCode, requestAuthorization, processCart, getCrossupsells, getMinQuantity, getStep };
|
|
974
974
|
}
|
|
975
975
|
function buildAddressInput(type, addr) {
|
|
976
976
|
return {
|
|
@@ -2598,6 +2598,13 @@ function useProductSearch(options) {
|
|
|
2598
2598
|
goToPage: pagination.goToPage
|
|
2599
2599
|
};
|
|
2600
2600
|
}
|
|
2601
|
+
function isPriceOnRequest(product) {
|
|
2602
|
+
if (!product) return false;
|
|
2603
|
+
const display = product.priceData?.display ?? product.defaultProduct?.priceData?.display;
|
|
2604
|
+
return display === PriceDisplay.ON_REQUEST;
|
|
2605
|
+
}
|
|
2606
|
+
|
|
2607
|
+
// src/composables/react/useQuickOrder.ts
|
|
2601
2608
|
function toMatch(item, language) {
|
|
2602
2609
|
const isCluster = "clusterId" in item;
|
|
2603
2610
|
const displayItem = isCluster ? item.defaultProduct : item;
|
|
@@ -2616,7 +2623,8 @@ function toMatch(item, language) {
|
|
|
2616
2623
|
netPrice,
|
|
2617
2624
|
grossPrice,
|
|
2618
2625
|
minQuantity,
|
|
2619
|
-
imageUrl
|
|
2626
|
+
imageUrl,
|
|
2627
|
+
priceOnRequest: isPriceOnRequest(item)
|
|
2620
2628
|
};
|
|
2621
2629
|
}
|
|
2622
2630
|
function useQuickOrder(options) {
|
|
@@ -2763,6 +2771,146 @@ function useQuickOrder(options) {
|
|
|
2763
2771
|
return { submitting, error, searchProducts, submit };
|
|
2764
2772
|
}
|
|
2765
2773
|
|
|
2774
|
+
// src/composables/shared/utils/priceRequestList.ts
|
|
2775
|
+
function containsItem(list, code) {
|
|
2776
|
+
return list.some((i) => i.code === code);
|
|
2777
|
+
}
|
|
2778
|
+
function addItem(list, item) {
|
|
2779
|
+
if (containsItem(list, item.code)) return list;
|
|
2780
|
+
return [...list, { ...item, quantity: Math.max(item.quantity, item.minQuantity) }];
|
|
2781
|
+
}
|
|
2782
|
+
function removeItem(list, code) {
|
|
2783
|
+
return list.filter((i) => i.code !== code);
|
|
2784
|
+
}
|
|
2785
|
+
function setItemQuantity(list, code, quantity) {
|
|
2786
|
+
return list.map(
|
|
2787
|
+
(i) => i.code === code ? { ...i, quantity: Math.max(quantity, i.minQuantity) } : i
|
|
2788
|
+
);
|
|
2789
|
+
}
|
|
2790
|
+
function parseStoredList(raw) {
|
|
2791
|
+
if (!raw) return [];
|
|
2792
|
+
try {
|
|
2793
|
+
const parsed = JSON.parse(raw);
|
|
2794
|
+
if (!Array.isArray(parsed)) return [];
|
|
2795
|
+
return parsed.filter(
|
|
2796
|
+
(i) => i && typeof i.code === "string" && typeof i.productId === "number"
|
|
2797
|
+
);
|
|
2798
|
+
} catch {
|
|
2799
|
+
return [];
|
|
2800
|
+
}
|
|
2801
|
+
}
|
|
2802
|
+
|
|
2803
|
+
// src/composables/react/usePriceRequest.ts
|
|
2804
|
+
var PRICE_REQUEST_STORAGE_KEY = "propeller_price_request";
|
|
2805
|
+
var EMPTY = [];
|
|
2806
|
+
var cachedRaw = null;
|
|
2807
|
+
var cachedItems = EMPTY;
|
|
2808
|
+
function getSnapshot(key) {
|
|
2809
|
+
let raw = null;
|
|
2810
|
+
try {
|
|
2811
|
+
raw = window.localStorage.getItem(key);
|
|
2812
|
+
} catch {
|
|
2813
|
+
return EMPTY;
|
|
2814
|
+
}
|
|
2815
|
+
if (raw !== cachedRaw) {
|
|
2816
|
+
cachedRaw = raw;
|
|
2817
|
+
cachedItems = parseStoredList(raw);
|
|
2818
|
+
}
|
|
2819
|
+
return cachedItems;
|
|
2820
|
+
}
|
|
2821
|
+
function getServerSnapshot() {
|
|
2822
|
+
return EMPTY;
|
|
2823
|
+
}
|
|
2824
|
+
var listeners = /* @__PURE__ */ new Set();
|
|
2825
|
+
function subscribe(cb) {
|
|
2826
|
+
listeners.add(cb);
|
|
2827
|
+
window.addEventListener("storage", cb);
|
|
2828
|
+
return () => {
|
|
2829
|
+
listeners.delete(cb);
|
|
2830
|
+
window.removeEventListener("storage", cb);
|
|
2831
|
+
};
|
|
2832
|
+
}
|
|
2833
|
+
function write(key, next) {
|
|
2834
|
+
try {
|
|
2835
|
+
window.localStorage.setItem(key, JSON.stringify(next));
|
|
2836
|
+
} catch {
|
|
2837
|
+
}
|
|
2838
|
+
listeners.forEach((l) => l());
|
|
2839
|
+
}
|
|
2840
|
+
function usePriceRequest(options = {}) {
|
|
2841
|
+
const storageKey = options.storageKey ?? PRICE_REQUEST_STORAGE_KEY;
|
|
2842
|
+
const items = useSyncExternalStore(
|
|
2843
|
+
subscribe,
|
|
2844
|
+
() => getSnapshot(storageKey),
|
|
2845
|
+
getServerSnapshot
|
|
2846
|
+
);
|
|
2847
|
+
const ready = useSyncExternalStore(
|
|
2848
|
+
subscribe,
|
|
2849
|
+
() => true,
|
|
2850
|
+
() => false
|
|
2851
|
+
);
|
|
2852
|
+
const [submitting, setSubmitting] = useState(false);
|
|
2853
|
+
const [error, setError] = useState(null);
|
|
2854
|
+
const add = useCallback(
|
|
2855
|
+
(item) => {
|
|
2856
|
+
const current = getSnapshot(storageKey);
|
|
2857
|
+
if (containsItem(current, item.code)) return false;
|
|
2858
|
+
write(storageKey, addItem(current, item));
|
|
2859
|
+
return true;
|
|
2860
|
+
},
|
|
2861
|
+
[storageKey]
|
|
2862
|
+
);
|
|
2863
|
+
const remove = useCallback(
|
|
2864
|
+
(code) => write(storageKey, removeItem(getSnapshot(storageKey), code)),
|
|
2865
|
+
[storageKey]
|
|
2866
|
+
);
|
|
2867
|
+
const setQuantity = useCallback(
|
|
2868
|
+
(code, quantity) => write(storageKey, setItemQuantity(getSnapshot(storageKey), code, quantity)),
|
|
2869
|
+
[storageKey]
|
|
2870
|
+
);
|
|
2871
|
+
const clear = useCallback(() => write(storageKey, []), [storageKey]);
|
|
2872
|
+
const has = useCallback((code) => containsItem(items, code), [items]);
|
|
2873
|
+
const submit = useCallback(
|
|
2874
|
+
async (comment) => {
|
|
2875
|
+
const current = getSnapshot(storageKey);
|
|
2876
|
+
if (!current.length) {
|
|
2877
|
+
setError("empty");
|
|
2878
|
+
return false;
|
|
2879
|
+
}
|
|
2880
|
+
if (!options.onSubmit) {
|
|
2881
|
+
setError("unsupported");
|
|
2882
|
+
return false;
|
|
2883
|
+
}
|
|
2884
|
+
setSubmitting(true);
|
|
2885
|
+
setError(null);
|
|
2886
|
+
try {
|
|
2887
|
+
await options.onSubmit(current, comment);
|
|
2888
|
+
write(storageKey, []);
|
|
2889
|
+
return true;
|
|
2890
|
+
} catch (e) {
|
|
2891
|
+
setError(e?.message || "failed");
|
|
2892
|
+
return false;
|
|
2893
|
+
} finally {
|
|
2894
|
+
setSubmitting(false);
|
|
2895
|
+
}
|
|
2896
|
+
},
|
|
2897
|
+
[options, storageKey]
|
|
2898
|
+
);
|
|
2899
|
+
return {
|
|
2900
|
+
items,
|
|
2901
|
+
ready,
|
|
2902
|
+
count: items.length,
|
|
2903
|
+
add,
|
|
2904
|
+
remove,
|
|
2905
|
+
setQuantity,
|
|
2906
|
+
clear,
|
|
2907
|
+
has,
|
|
2908
|
+
submit,
|
|
2909
|
+
submitting,
|
|
2910
|
+
error
|
|
2911
|
+
};
|
|
2912
|
+
}
|
|
2913
|
+
|
|
2766
2914
|
// src/composables/shared/utils/machineLanguage.ts
|
|
2767
2915
|
var MACHINE_NOT_FOUND = "SPARE_PARTS_MACHINE_NOT_FOUND_ERROR";
|
|
2768
2916
|
function isMachineNotFound(error) {
|
|
@@ -4603,7 +4751,7 @@ function mergeGrouped(p) {
|
|
|
4603
4751
|
}
|
|
4604
4752
|
function AddToCart(rawProps) {
|
|
4605
4753
|
const props = mergeGrouped(useInfraProps(rawProps));
|
|
4606
|
-
const { cart, loading, checkoutAllowed, addItem, getMinQuantity, getStep } = useCart({
|
|
4754
|
+
const { cart, loading, checkoutAllowed, addItem: addItem2, getMinQuantity, getStep } = useCart({
|
|
4607
4755
|
graphqlClient: props.graphqlClient,
|
|
4608
4756
|
user: props.user ?? null,
|
|
4609
4757
|
companyId: props.companyId,
|
|
@@ -4710,7 +4858,7 @@ function AddToCart(rawProps) {
|
|
|
4710
4858
|
if (!props.graphqlClient) return;
|
|
4711
4859
|
if (props.beforeAddToCart && !props.beforeAddToCart()) return;
|
|
4712
4860
|
const cartBeforeAdd = activeFullCart ?? cart ?? null;
|
|
4713
|
-
const result = await
|
|
4861
|
+
const result = await addItem2({
|
|
4714
4862
|
product: props.product,
|
|
4715
4863
|
cluster: props.cluster,
|
|
4716
4864
|
childItems: props.childItems,
|
|
@@ -6721,7 +6869,7 @@ function useCartItemContext() {
|
|
|
6721
6869
|
}
|
|
6722
6870
|
function CartItem(rawProps) {
|
|
6723
6871
|
const props = useResolvedProps(rawProps, CART_ITEM_RESOLVE_SPEC);
|
|
6724
|
-
const { updateItemQuantity, updateItemNotes, deleteItem, getCrossupsells, addItem, getMinQuantity, getStep } = useCart({
|
|
6872
|
+
const { updateItemQuantity, updateItemNotes, deleteItem, getCrossupsells, addItem: addItem2, getMinQuantity, getStep } = useCart({
|
|
6725
6873
|
graphqlClient: props.graphqlClient,
|
|
6726
6874
|
user: props.user ?? null,
|
|
6727
6875
|
cartId: props.cartId,
|
|
@@ -6911,7 +7059,7 @@ function CartItem(rawProps) {
|
|
|
6911
7059
|
const productId = getCrossupsellProductId(item);
|
|
6912
7060
|
if (!productId) return;
|
|
6913
7061
|
setAddingCrossupsellId(productId);
|
|
6914
|
-
const result = await
|
|
7062
|
+
const result = await addItem2({ product: { productId }, quantity: 1, cartId: props.cartId });
|
|
6915
7063
|
setAddingCrossupsellId(null);
|
|
6916
7064
|
if (result.ok && props.afterCartUpdate) {
|
|
6917
7065
|
props.afterCartUpdate(result.data.cart);
|
|
@@ -7334,6 +7482,8 @@ function CartItemDelete(props = {}) {
|
|
|
7334
7482
|
className: props.className ?? "propeller-cart-item__delete h-8 w-8 p-0 ml-auto inline-flex items-center justify-center rounded-control text-foreground-subtle hover:text-destructive hover:bg-destructive/10 transition-colors disabled:opacity-50",
|
|
7335
7483
|
onClick: () => handlers.onDelete(),
|
|
7336
7484
|
disabled: state.deleting,
|
|
7485
|
+
"aria-label": getLabel(resolved.labels, "deleteLabel", "Remove item"),
|
|
7486
|
+
title: getLabel(resolved.labels, "deleteLabel", "Remove item"),
|
|
7337
7487
|
children: [
|
|
7338
7488
|
state.deleting ? /* @__PURE__ */ jsx("div", { className: "w-4 h-4 border-2 border-foreground-subtle border-t-transparent rounded-full animate-spin" }) : null,
|
|
7339
7489
|
!state.deleting ? /* @__PURE__ */ jsxs(
|
|
@@ -7714,7 +7864,8 @@ function CartOverview(rawProps) {
|
|
|
7714
7864
|
const invoiceAddress = props.cart?.invoiceAddress;
|
|
7715
7865
|
const deliveryAddress = props.cart?.deliveryAddress;
|
|
7716
7866
|
const getCountryName$1 = (code) => getCountryName(code, props.countries);
|
|
7717
|
-
const
|
|
7867
|
+
const rawPaymentMethod = props.cart?.paymentData?.method || "";
|
|
7868
|
+
const paymentMethod = rawPaymentMethod ? props.paymethodLabels?.[rawPaymentMethod.toLowerCase()] || rawPaymentMethod : "";
|
|
7718
7869
|
const carrierName = props.cart?.postageData?.carrier || "";
|
|
7719
7870
|
function requestDate() {
|
|
7720
7871
|
const date = props.cart?.postageData?.requestDate;
|
|
@@ -8277,6 +8428,7 @@ function ClusterCard(rawProps) {
|
|
|
8277
8428
|
const contentHidden = isContentHidden(props.portalMode, props.user, props.isAuthenticated);
|
|
8278
8429
|
const defaultProductInventory = contentHidden ? void 0 : cluster?.defaultProduct?.inventory;
|
|
8279
8430
|
const useTax = props.includeTax !== void 0 ? !!props.includeTax : false;
|
|
8431
|
+
const priceOnRequest = isPriceOnRequest(cluster);
|
|
8280
8432
|
const priceObj = contentHidden ? void 0 : cluster?.defaultProduct?.price;
|
|
8281
8433
|
const priceValue = useTax ? priceObj?.net : priceObj?.gross;
|
|
8282
8434
|
const clusterPrice = props.showPrice === false ? "" : formatPrice(priceValue, { symbol: props.currency ?? "\u20AC", locale: localeForLanguage(props.language) });
|
|
@@ -8311,6 +8463,7 @@ function ClusterCard(rawProps) {
|
|
|
8311
8463
|
defaultProductInventory,
|
|
8312
8464
|
clusterPrice,
|
|
8313
8465
|
priceObj,
|
|
8466
|
+
priceOnRequest,
|
|
8314
8467
|
useTax,
|
|
8315
8468
|
isRow,
|
|
8316
8469
|
language,
|
|
@@ -8349,7 +8502,7 @@ function ClusterCard(rawProps) {
|
|
|
8349
8502
|
/* @__PURE__ */ jsxs("div", { className: "propeller-cluster-card__footer w-full md:w-auto flex flex-col gap-2 md:flex-row md:items-center md:gap-3 px-4 py-2 md:py-0 border-t md:border-t-0 border-border-subtle", children: [
|
|
8350
8503
|
/* @__PURE__ */ jsxs("div", { className: "propeller-cluster-card__footer-meta flex items-center justify-between gap-3 md:contents", children: [
|
|
8351
8504
|
props.showStock && defaultProductInventory ? /* @__PURE__ */ jsx(ClusterCardStock, {}) : null,
|
|
8352
|
-
props.showPrice !== false && priceObj ? /* @__PURE__ */ jsx(ClusterCardPrice, {}) : null
|
|
8505
|
+
props.showPrice !== false && (priceObj || priceOnRequest) ? /* @__PURE__ */ jsx(ClusterCardPrice, {}) : null
|
|
8353
8506
|
] }),
|
|
8354
8507
|
/* @__PURE__ */ jsx("div", { className: "propeller-cluster-card__cta w-full md:w-auto md:flex-shrink-0 md:ml-auto", children: /* @__PURE__ */ jsx(ClusterCardViewClusterLink, {}) })
|
|
8355
8508
|
] })
|
|
@@ -8361,11 +8514,11 @@ function ClusterCard(rawProps) {
|
|
|
8361
8514
|
textLabelValues.length > 0 ? /* @__PURE__ */ jsx(ClusterCardTextLabels, {}) : null,
|
|
8362
8515
|
props.showManufacturer && manufacturer ? /* @__PURE__ */ jsx(ClusterCardManufacturer, {}) : null,
|
|
8363
8516
|
props.showShortDescription && shortDescription ? /* @__PURE__ */ jsx(ClusterCardShortDescription, {}) : null,
|
|
8364
|
-
props.showPrice !== false && priceObj ? /* @__PURE__ */ jsx("div", { className: "mt-auto hidden md:block", children: /* @__PURE__ */ jsx(ClusterCardPrice, {}) }) : null
|
|
8517
|
+
props.showPrice !== false && (priceObj || priceOnRequest) ? /* @__PURE__ */ jsx("div", { className: "mt-auto hidden md:block", children: /* @__PURE__ */ jsx(ClusterCardPrice, {}) }) : null
|
|
8365
8518
|
] }),
|
|
8366
|
-
props.showStock && defaultProductInventory || props.showPrice !== false && priceObj ? /* @__PURE__ */ jsxs("div", { className: "propeller-cluster-card__footer-meta flex flex-wrap items-center justify-between gap-x-2 gap-y-1 px-3 pt-1 sm:px-4 md:hidden", children: [
|
|
8519
|
+
props.showStock && defaultProductInventory || props.showPrice !== false && (priceObj || priceOnRequest) ? /* @__PURE__ */ jsxs("div", { className: "propeller-cluster-card__footer-meta flex flex-wrap items-center justify-between gap-x-2 gap-y-1 px-3 pt-1 sm:px-4 md:hidden", children: [
|
|
8367
8520
|
props.showStock && defaultProductInventory ? /* @__PURE__ */ jsx(ClusterCardStock, {}) : null,
|
|
8368
|
-
props.showPrice !== false && priceObj ? /* @__PURE__ */ jsx(ClusterCardPrice, {}) : null
|
|
8521
|
+
props.showPrice !== false && (priceObj || priceOnRequest) ? /* @__PURE__ */ jsx(ClusterCardPrice, {}) : null
|
|
8369
8522
|
] }) : null,
|
|
8370
8523
|
/* @__PURE__ */ jsx("div", { className: "propeller-cluster-card__cta px-3 pb-3 pt-2 sm:px-4 sm:pb-4", children: /* @__PURE__ */ jsx(ClusterCardViewClusterLink, {}) })
|
|
8371
8524
|
] })
|
|
@@ -8571,6 +8724,9 @@ function ClusterCardStock(props) {
|
|
|
8571
8724
|
}
|
|
8572
8725
|
function ClusterCardPrice(props) {
|
|
8573
8726
|
const { derived, resolved } = useClusterCard();
|
|
8727
|
+
if (derived.priceOnRequest) {
|
|
8728
|
+
return /* @__PURE__ */ jsx("div", { className: props.className ?? "propeller-cluster-card__price", children: /* @__PURE__ */ jsx("span", { className: "propeller-cluster-card__price-on-request text-sm text-foreground", children: getLabel(resolved.labels, "priceOnRequest", "Price on request") }) });
|
|
8729
|
+
}
|
|
8574
8730
|
if (!derived.priceObj) return null;
|
|
8575
8731
|
const InjectedPrice = resolved.priceComponent;
|
|
8576
8732
|
if (InjectedPrice) {
|
|
@@ -8750,7 +8906,8 @@ function ProductPriceDisplay(props) {
|
|
|
8750
8906
|
}
|
|
8751
8907
|
return /* @__PURE__ */ jsxs("div", { className: cn(`propeller-product-price ${props.className || ""}`), "data-hidden": isHidden2() ? "true" : "false", children: [
|
|
8752
8908
|
isHidden2() && props.showLoginPrompt !== false ? /* @__PURE__ */ jsx("p", { className: "propeller-product-price__login-prompt text-sm text-muted-foreground italic", children: getLabel(props.labels, "loginToSeePrices", "Log in to see prices") }) : null,
|
|
8753
|
-
!isHidden2() &&
|
|
8909
|
+
!isHidden2() && props.priceOnRequest ? /* @__PURE__ */ jsx("p", { className: "propeller-product-price__on-request text-sm text-foreground", children: getLabel(props.labels, "priceOnRequest", "Price on request") }) : null,
|
|
8910
|
+
!isHidden2() && !props.priceOnRequest && !!getLeadingPrice() ? /* @__PURE__ */ jsxs("div", { className: "propeller-product-price__content flex flex-col gap-0.5", children: [
|
|
8754
8911
|
/* @__PURE__ */ jsxs("div", { className: "propeller-product-price__primary flex items-baseline gap-2", children: [
|
|
8755
8912
|
/* @__PURE__ */ jsx(
|
|
8756
8913
|
"span",
|
|
@@ -9126,6 +9283,20 @@ function ProductCardBelowName() {
|
|
|
9126
9283
|
}
|
|
9127
9284
|
function ProductCardPrice(props) {
|
|
9128
9285
|
const { product, derived, resolved } = useProductCard();
|
|
9286
|
+
const onRequest = isPriceOnRequest(product);
|
|
9287
|
+
if (onRequest) {
|
|
9288
|
+
return /* @__PURE__ */ jsx("div", { className: props.className ?? "propeller-product-card__price", children: /* @__PURE__ */ jsx(
|
|
9289
|
+
ProductPrice_default,
|
|
9290
|
+
{
|
|
9291
|
+
priceOnRequest: true,
|
|
9292
|
+
labels: resolved.priceLabels,
|
|
9293
|
+
portalMode: resolved.portalMode,
|
|
9294
|
+
isAuthenticated: resolved.isAuthenticated,
|
|
9295
|
+
user: resolved.user,
|
|
9296
|
+
showLoginPrompt: false
|
|
9297
|
+
}
|
|
9298
|
+
) });
|
|
9299
|
+
}
|
|
9129
9300
|
if (!product?.price) return null;
|
|
9130
9301
|
const InjectedPrice = resolved.priceComponent;
|
|
9131
9302
|
if (InjectedPrice) {
|
|
@@ -10106,7 +10277,7 @@ function GridToolbar(rawProps) {
|
|
|
10106
10277
|
const [currentSortOrder, setCurrentSortOrder] = useState(SortOrder.DESC);
|
|
10107
10278
|
const [currentOffset, setCurrentOffset] = useState(12);
|
|
10108
10279
|
const [currentViewMode, setCurrentViewMode] = useState("grid");
|
|
10109
|
-
function
|
|
10280
|
+
function getLabel61(key) {
|
|
10110
10281
|
const labels = props.labels || {};
|
|
10111
10282
|
return labels[key] !== void 0 ? labels[key] : DEFAULT_LABELS[key] || key;
|
|
10112
10283
|
}
|
|
@@ -10144,8 +10315,8 @@ function GridToolbar(rawProps) {
|
|
|
10144
10315
|
}
|
|
10145
10316
|
function getAvailabilityLabel() {
|
|
10146
10317
|
const qty = props.minStock;
|
|
10147
|
-
if (qty !== void 0 && qty > MIN_STOCK_THRESHOLD) return `${
|
|
10148
|
-
return
|
|
10318
|
+
if (qty !== void 0 && qty > MIN_STOCK_THRESHOLD) return `${getLabel61("inStock")}: ${qty}+`;
|
|
10319
|
+
return getLabel61("inStock");
|
|
10149
10320
|
}
|
|
10150
10321
|
function handleSortFieldChange(field) {
|
|
10151
10322
|
setCurrentSortField(field);
|
|
@@ -10191,7 +10362,7 @@ function GridToolbar(rawProps) {
|
|
|
10191
10362
|
/* @__PURE__ */ jsx("div", { className: "propeller-grid-toolbar__count text-sm text-muted-foreground font-medium", children: props.itemsFound > 0 ? /* @__PURE__ */ jsxs("span", { children: [
|
|
10192
10363
|
props.itemsFound,
|
|
10193
10364
|
"\xA0",
|
|
10194
|
-
props.itemsFound === 1 ?
|
|
10365
|
+
props.itemsFound === 1 ? getLabel61("productSingular") : getLabel61("productPlural")
|
|
10195
10366
|
] }) : null }),
|
|
10196
10367
|
/* @__PURE__ */ jsxs("div", { className: "propeller-grid-toolbar__controls flex flex-wrap items-center gap-3", children: [
|
|
10197
10368
|
/* @__PURE__ */ jsx(
|
|
@@ -10202,7 +10373,7 @@ function GridToolbar(rawProps) {
|
|
|
10202
10373
|
onChange: (e) => handleOffsetChange(parseInt(e.target.value)),
|
|
10203
10374
|
children: getOffsetOptions()?.map((n) => /* @__PURE__ */ jsxs("option", { value: n, children: [
|
|
10204
10375
|
n,
|
|
10205
|
-
|
|
10376
|
+
getLabel61("perPage")
|
|
10206
10377
|
] }, n))
|
|
10207
10378
|
}
|
|
10208
10379
|
),
|
|
@@ -10218,7 +10389,7 @@ function GridToolbar(rawProps) {
|
|
|
10218
10389
|
{
|
|
10219
10390
|
value: field,
|
|
10220
10391
|
disabled: field === "PRICE" && isPriceSortDisabled(),
|
|
10221
|
-
children:
|
|
10392
|
+
children: getLabel61(field)
|
|
10222
10393
|
},
|
|
10223
10394
|
field
|
|
10224
10395
|
))
|
|
@@ -10231,8 +10402,8 @@ function GridToolbar(rawProps) {
|
|
|
10231
10402
|
value: currentSortOrder,
|
|
10232
10403
|
onChange: (e) => handleSortOrderChange(e.target.value),
|
|
10233
10404
|
children: [
|
|
10234
|
-
/* @__PURE__ */ jsx("option", { value: SortOrder.ASC, children:
|
|
10235
|
-
/* @__PURE__ */ jsx("option", { value: SortOrder.DESC, children:
|
|
10405
|
+
/* @__PURE__ */ jsx("option", { value: SortOrder.ASC, children: getLabel61("ASC") }),
|
|
10406
|
+
/* @__PURE__ */ jsx("option", { value: SortOrder.DESC, children: getLabel61("DESC") })
|
|
10236
10407
|
]
|
|
10237
10408
|
}
|
|
10238
10409
|
),
|
|
@@ -10242,7 +10413,7 @@ function GridToolbar(rawProps) {
|
|
|
10242
10413
|
type: "button",
|
|
10243
10414
|
className: "propeller-grid-toolbar__view-toggle h-9 w-9 flex items-center justify-center rounded-control border border-input bg-transparent hover:bg-accent hover:text-accent-foreground transition-colors",
|
|
10244
10415
|
onClick: (event) => handleViewChange(),
|
|
10245
|
-
title: currentViewMode === "grid" ?
|
|
10416
|
+
title: currentViewMode === "grid" ? getLabel61("switchToList") : getLabel61("switchToGrid"),
|
|
10246
10417
|
children: [
|
|
10247
10418
|
currentViewMode === "grid" ? /* @__PURE__ */ jsxs(
|
|
10248
10419
|
"svg",
|
|
@@ -10300,7 +10471,7 @@ function GridToolbar(rawProps) {
|
|
|
10300
10471
|
onClick: (event) => {
|
|
10301
10472
|
if (props.onClearFilters) props.onClearFilters();
|
|
10302
10473
|
},
|
|
10303
|
-
children:
|
|
10474
|
+
children: getLabel61("clearAll")
|
|
10304
10475
|
}
|
|
10305
10476
|
),
|
|
10306
10477
|
props.priceFilterMin !== void 0 || props.priceFilterMax !== void 0 ? /* @__PURE__ */ jsxs(
|
|
@@ -10311,7 +10482,7 @@ function GridToolbar(rawProps) {
|
|
|
10311
10482
|
if (props.onPriceFilterRemove) props.onPriceFilterRemove();
|
|
10312
10483
|
},
|
|
10313
10484
|
children: [
|
|
10314
|
-
|
|
10485
|
+
getLabel61("price"),
|
|
10315
10486
|
": ",
|
|
10316
10487
|
currencySymbol,
|
|
10317
10488
|
props.priceFilterMin ?? 0,
|
|
@@ -10363,7 +10534,7 @@ var DEFAULT_LABELS2 = {
|
|
|
10363
10534
|
of: "of"
|
|
10364
10535
|
};
|
|
10365
10536
|
function GridPagination(props) {
|
|
10366
|
-
function
|
|
10537
|
+
function getLabel61(key) {
|
|
10367
10538
|
const labels = props.labels || {};
|
|
10368
10539
|
return labels[key] !== void 0 ? labels[key] : DEFAULT_LABELS2[key] || key;
|
|
10369
10540
|
}
|
|
@@ -10436,15 +10607,15 @@ function GridPagination(props) {
|
|
|
10436
10607
|
className: "propeller-grid-pagination__btn propeller-grid-pagination__btn--prev inline-flex items-center rounded-control border border-input bg-card px-4 py-2 text-sm font-medium text-foreground shadow-sm hover:bg-surface-hover disabled:opacity-40 disabled:cursor-not-allowed",
|
|
10437
10608
|
disabled: currentPage === 1,
|
|
10438
10609
|
onClick: () => handlePageChange(currentPage - 1),
|
|
10439
|
-
children:
|
|
10610
|
+
children: getLabel61("previous")
|
|
10440
10611
|
}
|
|
10441
10612
|
),
|
|
10442
10613
|
/* @__PURE__ */ jsxs("span", { className: "propeller-grid-pagination__info px-2 text-sm font-medium text-muted-foreground", children: [
|
|
10443
|
-
|
|
10614
|
+
getLabel61("page"),
|
|
10444
10615
|
"\xA0",
|
|
10445
10616
|
currentPage,
|
|
10446
10617
|
"\xA0",
|
|
10447
|
-
|
|
10618
|
+
getLabel61("of"),
|
|
10448
10619
|
"\xA0",
|
|
10449
10620
|
totalPages
|
|
10450
10621
|
] }),
|
|
@@ -10455,7 +10626,7 @@ function GridPagination(props) {
|
|
|
10455
10626
|
className: "propeller-grid-pagination__btn propeller-grid-pagination__btn--next inline-flex items-center rounded-control border border-input bg-card px-4 py-2 text-sm font-medium text-foreground shadow-sm hover:bg-surface-hover disabled:opacity-40 disabled:cursor-not-allowed",
|
|
10456
10627
|
disabled: currentPage === totalPages,
|
|
10457
10628
|
onClick: () => handlePageChange(currentPage + 1),
|
|
10458
|
-
children:
|
|
10629
|
+
children: getLabel61("next")
|
|
10459
10630
|
}
|
|
10460
10631
|
)
|
|
10461
10632
|
] }) : null,
|
|
@@ -10467,7 +10638,7 @@ function GridPagination(props) {
|
|
|
10467
10638
|
className: "propeller-grid-pagination__btn propeller-grid-pagination__btn--prev inline-flex items-center rounded-control border border-input bg-card px-3 py-2 text-sm font-medium text-foreground shadow-sm hover:bg-surface-hover disabled:opacity-40 disabled:cursor-not-allowed",
|
|
10468
10639
|
disabled: currentPage === 1,
|
|
10469
10640
|
onClick: () => handlePageChange(currentPage - 1),
|
|
10470
|
-
children:
|
|
10641
|
+
children: getLabel61("previous")
|
|
10471
10642
|
}
|
|
10472
10643
|
),
|
|
10473
10644
|
getFullPages().map((item, idx) => /* @__PURE__ */ jsx(
|
|
@@ -10494,7 +10665,7 @@ function GridPagination(props) {
|
|
|
10494
10665
|
className: "propeller-grid-pagination__btn propeller-grid-pagination__btn--next inline-flex items-center rounded-control border border-input bg-card px-3 py-2 text-sm font-medium text-foreground shadow-sm hover:bg-surface-hover disabled:opacity-40 disabled:cursor-not-allowed",
|
|
10495
10666
|
disabled: currentPage === totalPages,
|
|
10496
10667
|
onClick: () => handlePageChange(currentPage + 1),
|
|
10497
|
-
children:
|
|
10668
|
+
children: getLabel61("next")
|
|
10498
10669
|
}
|
|
10499
10670
|
)
|
|
10500
10671
|
] }) : null
|
|
@@ -11797,7 +11968,7 @@ function FavoriteListDetails(rawProps) {
|
|
|
11797
11968
|
graphqlClient: props.graphqlClient,
|
|
11798
11969
|
user: props.user ?? null
|
|
11799
11970
|
});
|
|
11800
|
-
const { addItem } = useCart({
|
|
11971
|
+
const { addItem: addItem2 } = useCart({
|
|
11801
11972
|
graphqlClient: props.graphqlClient,
|
|
11802
11973
|
user: props.user ?? null,
|
|
11803
11974
|
cartId: props.cartId,
|
|
@@ -11902,7 +12073,7 @@ function FavoriteListDetails(rawProps) {
|
|
|
11902
12073
|
setBulkBusy(true);
|
|
11903
12074
|
try {
|
|
11904
12075
|
for (const product of products) {
|
|
11905
|
-
await
|
|
12076
|
+
await addItem2({
|
|
11906
12077
|
product,
|
|
11907
12078
|
quantity: product.minimumQuantity && product.minimumQuantity > 0 ? product.minimumQuantity : 1,
|
|
11908
12079
|
cartId: props.cartId,
|
|
@@ -14368,6 +14539,130 @@ function OrderList(rawProps) {
|
|
|
14368
14539
|
] });
|
|
14369
14540
|
}
|
|
14370
14541
|
var OrderList_default = OrderList;
|
|
14542
|
+
function PriceRequestList(props) {
|
|
14543
|
+
const [comment, setComment] = useState("");
|
|
14544
|
+
const [sent, setSent] = useState(false);
|
|
14545
|
+
const L = (key, fallback) => getLabel(props.labels, key, fallback);
|
|
14546
|
+
async function handleSubmit(e) {
|
|
14547
|
+
e.preventDefault();
|
|
14548
|
+
if (!props.onSubmit) return;
|
|
14549
|
+
const ok4 = await props.onSubmit(comment);
|
|
14550
|
+
if (ok4) {
|
|
14551
|
+
setComment("");
|
|
14552
|
+
setSent(true);
|
|
14553
|
+
}
|
|
14554
|
+
}
|
|
14555
|
+
if (sent) {
|
|
14556
|
+
return /* @__PURE__ */ jsx("div", { className: cn(`propeller-price-request ${props.className || ""}`), children: /* @__PURE__ */ jsx("p", { className: "propeller-price-request__sent py-8 text-center text-foreground", children: L("sent", "Price request sent. We will contact you.") }) });
|
|
14557
|
+
}
|
|
14558
|
+
if (!props.items.length) {
|
|
14559
|
+
return /* @__PURE__ */ jsx("div", { className: cn(`propeller-price-request ${props.className || ""}`), children: /* @__PURE__ */ jsx("p", { className: "propeller-price-request__empty py-8 text-center text-foreground-subtle", children: L("empty", "Your price request list is empty.") }) });
|
|
14560
|
+
}
|
|
14561
|
+
return /* @__PURE__ */ jsxs(
|
|
14562
|
+
"form",
|
|
14563
|
+
{
|
|
14564
|
+
className: cn(`propeller-price-request ${props.className || ""}`),
|
|
14565
|
+
onSubmit: handleSubmit,
|
|
14566
|
+
children: [
|
|
14567
|
+
/* @__PURE__ */ jsx("h2", { className: "propeller-price-request__title mb-4 text-xl font-semibold text-foreground", children: L("title", "Price request") }),
|
|
14568
|
+
/* @__PURE__ */ jsxs("table", { className: "propeller-price-request__table w-full text-sm", children: [
|
|
14569
|
+
/* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { className: "border-b border-border text-left text-foreground-subtle", children: [
|
|
14570
|
+
/* @__PURE__ */ jsx("th", { scope: "col", className: "py-2 pr-4 font-medium", children: L("colCode", "Article no. / SKU") }),
|
|
14571
|
+
/* @__PURE__ */ jsx("th", { scope: "col", className: "py-2 pr-4 font-medium", children: L("colName", "Product name") }),
|
|
14572
|
+
/* @__PURE__ */ jsx("th", { scope: "col", className: "py-2 pr-4 font-medium", children: L("colQuantity", "Quantity") }),
|
|
14573
|
+
/* @__PURE__ */ jsx("th", { scope: "col", className: "py-2 w-10", children: /* @__PURE__ */ jsx("span", { className: "sr-only", children: L("remove", "Remove") }) })
|
|
14574
|
+
] }) }),
|
|
14575
|
+
/* @__PURE__ */ jsx("tbody", { children: props.items.map((item) => /* @__PURE__ */ jsxs("tr", { className: "border-b border-border-subtle", children: [
|
|
14576
|
+
/* @__PURE__ */ jsx("td", { className: "py-2 pr-4 font-mono text-xs text-foreground", children: item.code }),
|
|
14577
|
+
/* @__PURE__ */ jsx("td", { className: "py-2 pr-4 text-foreground", children: item.name }),
|
|
14578
|
+
/* @__PURE__ */ jsxs("td", { className: "py-2 pr-4", children: [
|
|
14579
|
+
/* @__PURE__ */ jsx("label", { className: "sr-only", htmlFor: `pr-qty-${item.code}`, children: L("colQuantity", "Quantity") }),
|
|
14580
|
+
/* @__PURE__ */ jsx(
|
|
14581
|
+
"input",
|
|
14582
|
+
{
|
|
14583
|
+
id: `pr-qty-${item.code}`,
|
|
14584
|
+
type: "number",
|
|
14585
|
+
min: item.minQuantity,
|
|
14586
|
+
step: item.unit || 1,
|
|
14587
|
+
value: item.quantity,
|
|
14588
|
+
onChange: (e) => props.onQuantityChange?.(item.code, parseInt(e.target.value, 10) || item.minQuantity),
|
|
14589
|
+
className: "w-20 rounded border border-border bg-background px-2 py-1"
|
|
14590
|
+
}
|
|
14591
|
+
)
|
|
14592
|
+
] }),
|
|
14593
|
+
/* @__PURE__ */ jsx("td", { className: "py-2", children: /* @__PURE__ */ jsx(
|
|
14594
|
+
"button",
|
|
14595
|
+
{
|
|
14596
|
+
type: "button",
|
|
14597
|
+
onClick: () => props.onRemove?.(item.code),
|
|
14598
|
+
"aria-label": L("remove", "Remove"),
|
|
14599
|
+
title: L("remove", "Remove"),
|
|
14600
|
+
className: "text-foreground-subtle transition-colors hover:text-destructive",
|
|
14601
|
+
children: /* @__PURE__ */ jsx(Trash2, { className: "h-4 w-4", "aria-hidden": "true" })
|
|
14602
|
+
}
|
|
14603
|
+
) })
|
|
14604
|
+
] }, item.code)) })
|
|
14605
|
+
] }),
|
|
14606
|
+
/* @__PURE__ */ jsxs("div", { className: "propeller-price-request__comment mt-6", children: [
|
|
14607
|
+
/* @__PURE__ */ jsx(
|
|
14608
|
+
"label",
|
|
14609
|
+
{
|
|
14610
|
+
htmlFor: "propeller-price-request-comment",
|
|
14611
|
+
className: "mb-2 block font-medium text-foreground",
|
|
14612
|
+
children: L("comments", "Comments")
|
|
14613
|
+
}
|
|
14614
|
+
),
|
|
14615
|
+
/* @__PURE__ */ jsx(
|
|
14616
|
+
"textarea",
|
|
14617
|
+
{
|
|
14618
|
+
id: "propeller-price-request-comment",
|
|
14619
|
+
value: comment,
|
|
14620
|
+
onChange: (e) => setComment(e.target.value),
|
|
14621
|
+
rows: 4,
|
|
14622
|
+
className: "w-full rounded border border-border bg-background px-3 py-2"
|
|
14623
|
+
}
|
|
14624
|
+
)
|
|
14625
|
+
] }),
|
|
14626
|
+
/* @__PURE__ */ jsx(
|
|
14627
|
+
"button",
|
|
14628
|
+
{
|
|
14629
|
+
type: "submit",
|
|
14630
|
+
disabled: props.submitting,
|
|
14631
|
+
className: "propeller-price-request__submit mt-4 rounded-control bg-primary px-4 py-2 text-sm font-medium text-primary-foreground transition-opacity hover:opacity-90 disabled:opacity-50",
|
|
14632
|
+
children: props.submitting ? L("sending", "Sending\u2026") : L("send", "Send request")
|
|
14633
|
+
}
|
|
14634
|
+
)
|
|
14635
|
+
]
|
|
14636
|
+
}
|
|
14637
|
+
);
|
|
14638
|
+
}
|
|
14639
|
+
var PriceRequestList_default = PriceRequestList;
|
|
14640
|
+
function RequestPriceButton(props) {
|
|
14641
|
+
const anonymous = !props.isAuthenticated;
|
|
14642
|
+
const label = anonymous ? getLabel(props.labels, "requestPrice", "Request a price") : props.added ? getLabel(props.labels, "priceRequested", "On your request list") : getLabel(props.labels, "requestPrice", "Request a price");
|
|
14643
|
+
return /* @__PURE__ */ jsxs(
|
|
14644
|
+
"button",
|
|
14645
|
+
{
|
|
14646
|
+
type: "button",
|
|
14647
|
+
"data-added": props.added ? "true" : "false",
|
|
14648
|
+
className: cn(
|
|
14649
|
+
`propeller-request-price inline-flex items-center justify-center gap-2 h-10 px-4 w-full rounded-control text-sm font-medium transition-opacity hover:opacity-90 ${props.added && !anonymous ? "bg-surface-hover text-foreground border border-border" : "bg-primary text-primary-foreground"} ${props.className || ""}`
|
|
14650
|
+
),
|
|
14651
|
+
onClick: () => {
|
|
14652
|
+
if (anonymous) {
|
|
14653
|
+
if (props.onLoginClick) props.onLoginClick();
|
|
14654
|
+
return;
|
|
14655
|
+
}
|
|
14656
|
+
if (props.onRequestPrice) props.onRequestPrice();
|
|
14657
|
+
},
|
|
14658
|
+
children: [
|
|
14659
|
+
/* @__PURE__ */ jsx(MessageSquareQuote, { className: "propeller-request-price__icon w-4 h-4", "aria-hidden": "true" }),
|
|
14660
|
+
label
|
|
14661
|
+
]
|
|
14662
|
+
}
|
|
14663
|
+
);
|
|
14664
|
+
}
|
|
14665
|
+
var RequestPriceButton_default = RequestPriceButton;
|
|
14371
14666
|
var ROW_SEQ = 0;
|
|
14372
14667
|
function blankRow() {
|
|
14373
14668
|
ROW_SEQ += 1;
|
|
@@ -14459,6 +14754,11 @@ function QuickOrderInner(props) {
|
|
|
14459
14754
|
patchRow(key, { code: "", matches: [], productId: null, name: "", netPrice: 0, grossPrice: 0, searched: false });
|
|
14460
14755
|
return;
|
|
14461
14756
|
}
|
|
14757
|
+
if (match.priceOnRequest) {
|
|
14758
|
+
setNotice(L("priceOnRequest", "Price on request \u2014 order this product from its page"));
|
|
14759
|
+
patchRow(key, { code: "", matches: [], productId: null, name: "", netPrice: 0, grossPrice: 0, searched: false });
|
|
14760
|
+
return;
|
|
14761
|
+
}
|
|
14462
14762
|
patchRow(key, {
|
|
14463
14763
|
code: match.sku,
|
|
14464
14764
|
productId: match.productId,
|
|
@@ -14519,6 +14819,10 @@ function QuickOrderInner(props) {
|
|
|
14519
14819
|
continue;
|
|
14520
14820
|
}
|
|
14521
14821
|
if (resolved.some((r) => r.productId === exact.productId)) continue;
|
|
14822
|
+
if (exact.priceOnRequest) {
|
|
14823
|
+
notFound.push(line.code);
|
|
14824
|
+
continue;
|
|
14825
|
+
}
|
|
14522
14826
|
const row = blankRow();
|
|
14523
14827
|
resolved.push({
|
|
14524
14828
|
...row,
|
|
@@ -16308,6 +16612,20 @@ function ProductInfoAddToCart(props = {}) {
|
|
|
16308
16612
|
}
|
|
16309
16613
|
);
|
|
16310
16614
|
}
|
|
16615
|
+
if (product?.orderable === YesNo.N) return null;
|
|
16616
|
+
if (isPriceOnRequest(product)) {
|
|
16617
|
+
return /* @__PURE__ */ jsx(
|
|
16618
|
+
RequestPriceButton_default,
|
|
16619
|
+
{
|
|
16620
|
+
className: props.className,
|
|
16621
|
+
labels: derived.labels,
|
|
16622
|
+
isAuthenticated: resolved.isAuthenticated,
|
|
16623
|
+
onLoginClick: resolved.onLoginClick,
|
|
16624
|
+
added: resolved.priceRequestAdded,
|
|
16625
|
+
onRequestPrice: resolved.onRequestPrice ? () => resolved.onRequestPrice(product) : void 0
|
|
16626
|
+
}
|
|
16627
|
+
);
|
|
16628
|
+
}
|
|
16311
16629
|
const Injected = resolved.addToCartComponent;
|
|
16312
16630
|
if (Injected) {
|
|
16313
16631
|
return /* @__PURE__ */ jsx(
|
|
@@ -18872,7 +19190,8 @@ function mapToSearchBarResult(item, language, urls) {
|
|
|
18872
19190
|
priceGross,
|
|
18873
19191
|
imageUrl: displayItem?.media?.images?.items?.[0]?.imageVariants?.[0]?.url || "",
|
|
18874
19192
|
url,
|
|
18875
|
-
isCluster
|
|
19193
|
+
isCluster,
|
|
19194
|
+
priceOnRequest: isPriceOnRequest(item)
|
|
18876
19195
|
};
|
|
18877
19196
|
}
|
|
18878
19197
|
function SearchBar(rawProps) {
|
|
@@ -19056,7 +19375,7 @@ function SearchBar(rawProps) {
|
|
|
19056
19375
|
result.sku
|
|
19057
19376
|
] }) : null
|
|
19058
19377
|
] }),
|
|
19059
|
-
props.renderPrice ? props.renderPrice(result) : props.showPrice !== false && result.price !== void 0 && result.price !== null ? /* @__PURE__ */ jsxs("div", { className: "propeller-search-bar__result-price text-sm font-semibold text-foreground flex-shrink-0 text-right", children: [
|
|
19378
|
+
props.renderPrice ? props.renderPrice(result) : props.showPrice !== false && result.priceOnRequest ? /* @__PURE__ */ jsx("div", { className: "propeller-search-bar__result-price text-sm text-foreground flex-shrink-0 text-right", children: getLabel(props.priceLabels, "priceOnRequest", "Price on request") }) : props.showPrice !== false && result.price !== void 0 && result.price !== null ? /* @__PURE__ */ jsxs("div", { className: "propeller-search-bar__result-price text-sm font-semibold text-foreground flex-shrink-0 text-right", children: [
|
|
19060
19379
|
/* @__PURE__ */ jsx("span", { className: "propeller-search-bar__result-price-value", children: formatItemPrice(leadingPrice(result)) }),
|
|
19061
19380
|
/* @__PURE__ */ jsx("span", { className: "propeller-search-bar__result-price-label block text-xs font-normal text-muted-foreground", children: priceTaxLabel() })
|
|
19062
19381
|
] }) : null
|
|
@@ -19210,6 +19529,6 @@ function UserDetails(rawProps) {
|
|
|
19210
19529
|
}
|
|
19211
19530
|
var UserDetails_default = UserDetails;
|
|
19212
19531
|
|
|
19213
|
-
export { AccountIconAndMenu_default as AccountIconAndMenu, ActionCode_default as ActionCode, AddToCart_default as AddToCart, AddToFavorite_default as AddToFavorite, AddressCard_default as AddressCard, AddressSelector_default as AddressSelector, BreadcrumbsWithProvider_default as Breadcrumbs, CartBonusItems_default as CartBonusItems, CartCarriers_default as CartCarriers, CartIconAndSidebar_default as CartIconAndSidebar, CartItem_default as CartItem, CartOverview_default as CartOverview, CartPaymethods_default as CartPaymethods, CartSummary_default as CartSummary, CategoryDescription_default as CategoryDescription, CategoryShortDescriptionWithProvider_default as CategoryShortDescription, ClusterCard_default as ClusterCard, ClusterConfigurator_default as ClusterConfigurator, ClusterInfo_default as ClusterInfo, ClusterOptions_default as ClusterOptions, CompanySwitcher_default as CompanySwitcher, AddToCart_default as DefaultAddToCart, AddToFavorite_default as DefaultAddToFavorite, ItemStock_default as DefaultItemStock, DefaultProductBadges, ProductBulkPrices_default as DefaultProductBulkPrices, ProductBundles_default as DefaultProductBundles, DefaultProductImage, ProductPrice_default as DefaultProductPrice, DefaultProductSurcharges, DeliveryDate_default as DeliveryDate, FavoriteListDetails_default as FavoriteListDetails, FavoriteListItem_default as FavoriteListItem, FavoriteLists_default as FavoriteLists, ForgotPassword_default as ForgotPassword, GridFilters_default as GridFilters, GridFiltersPanel, GridPagination_default as GridPagination, GridTitleWithProvider_default as GridTitle, GridToolbar_default as GridToolbar, ItemStock_default as ItemStock, ItemsOverview_default as ItemsOverview, LoginForm_default as LoginForm, LoginToOrderButton_default as LoginToOrderButton, MachineCard, MachineGrid, Menu_default as Menu, OrderActions_default as OrderActions, OrderBonusItems_default as OrderBonusItems, OrderItemCard_default as OrderItemCard, OrderList_default as OrderList, OrderShipments_default as OrderShipments, OrderSummaryWithProvider_default as OrderSummary, OrderTotalsWithProvider_default as OrderTotals, PriceToggle_default as PriceToggle, ProductBulkPricesWithProvider_default as ProductBulkPrices, ProductBundles_default as ProductBundles, ProductCard_default as ProductCard, ProductDescription_default as ProductDescription, ProductDownloads_default as ProductDownloads, ProductGallery_default as ProductGallery, ProductGrid_default as ProductGrid, ProductGridConfigProvider, ProductInfo_default as ProductInfo, ProductPriceWithProvider_default as ProductPrice, ProductShortDescriptionWithProvider_default as ProductShortDescription, ProductSlider_default as ProductSlider, ProductSpecifications_default as ProductSpecifications, ProductTabs_default as ProductTabs, ProductVideos_default as ProductVideos, PropellerDepsProvider, PropellerProvider, PurchaseAuthorizationConfigurator_default as PurchaseAuthorizationConfigurator, PurchaseAuthorizationRequests_default as PurchaseAuthorizationRequests, QuickOrder, QuoteActions_default as QuoteActions, RegisterForm_default as RegisterForm, SearchBar_default as SearchBar, UserDetails_default as UserDetails, buildRootMachinesQuery, fetchActiveCart, initCart, mergeAnonymousCart, useAddress, useAuth, useCart, useCheckout, useClusterConfigurator, useCompany, useFavorites, useInfraProps, useMachines, useMenu, useOrders, useProductBundles, useProductGridConfig, useProductInfo, useProductSearch, useProductSlider, useProductSpecs, usePropellerContext, usePropellerDeps, usePropellerScope, usePurchaseAuthorizationConfigurator, usePurchaseAuthorizationRequests, useQuickOrder, useRequiredPropellerDeps, useResolvedProps, useServices, useSpareParts, useUserMode };
|
|
19532
|
+
export { AccountIconAndMenu_default as AccountIconAndMenu, ActionCode_default as ActionCode, AddToCart_default as AddToCart, AddToFavorite_default as AddToFavorite, AddressCard_default as AddressCard, AddressSelector_default as AddressSelector, BreadcrumbsWithProvider_default as Breadcrumbs, CartBonusItems_default as CartBonusItems, CartCarriers_default as CartCarriers, CartIconAndSidebar_default as CartIconAndSidebar, CartItem_default as CartItem, CartOverview_default as CartOverview, CartPaymethods_default as CartPaymethods, CartSummary_default as CartSummary, CategoryDescription_default as CategoryDescription, CategoryShortDescriptionWithProvider_default as CategoryShortDescription, ClusterCard_default as ClusterCard, ClusterConfigurator_default as ClusterConfigurator, ClusterInfo_default as ClusterInfo, ClusterOptions_default as ClusterOptions, CompanySwitcher_default as CompanySwitcher, AddToCart_default as DefaultAddToCart, AddToFavorite_default as DefaultAddToFavorite, ItemStock_default as DefaultItemStock, DefaultProductBadges, ProductBulkPrices_default as DefaultProductBulkPrices, ProductBundles_default as DefaultProductBundles, DefaultProductImage, ProductPrice_default as DefaultProductPrice, DefaultProductSurcharges, DeliveryDate_default as DeliveryDate, FavoriteListDetails_default as FavoriteListDetails, FavoriteListItem_default as FavoriteListItem, FavoriteLists_default as FavoriteLists, ForgotPassword_default as ForgotPassword, GridFilters_default as GridFilters, GridFiltersPanel, GridPagination_default as GridPagination, GridTitleWithProvider_default as GridTitle, GridToolbar_default as GridToolbar, ItemStock_default as ItemStock, ItemsOverview_default as ItemsOverview, LoginForm_default as LoginForm, LoginToOrderButton_default as LoginToOrderButton, MachineCard, MachineGrid, Menu_default as Menu, OrderActions_default as OrderActions, OrderBonusItems_default as OrderBonusItems, OrderItemCard_default as OrderItemCard, OrderList_default as OrderList, OrderShipments_default as OrderShipments, OrderSummaryWithProvider_default as OrderSummary, OrderTotalsWithProvider_default as OrderTotals, PRICE_REQUEST_STORAGE_KEY, PriceRequestList_default as PriceRequestList, PriceToggle_default as PriceToggle, ProductBulkPricesWithProvider_default as ProductBulkPrices, ProductBundles_default as ProductBundles, ProductCard_default as ProductCard, ProductDescription_default as ProductDescription, ProductDownloads_default as ProductDownloads, ProductGallery_default as ProductGallery, ProductGrid_default as ProductGrid, ProductGridConfigProvider, ProductInfo_default as ProductInfo, ProductPriceWithProvider_default as ProductPrice, ProductShortDescriptionWithProvider_default as ProductShortDescription, ProductSlider_default as ProductSlider, ProductSpecifications_default as ProductSpecifications, ProductTabs_default as ProductTabs, ProductVideos_default as ProductVideos, PropellerDepsProvider, PropellerProvider, PurchaseAuthorizationConfigurator_default as PurchaseAuthorizationConfigurator, PurchaseAuthorizationRequests_default as PurchaseAuthorizationRequests, QuickOrder, QuoteActions_default as QuoteActions, RegisterForm_default as RegisterForm, RequestPriceButton_default as RequestPriceButton, SearchBar_default as SearchBar, UserDetails_default as UserDetails, addItem as addPriceRequestItem, buildRootMachinesQuery, fetchActiveCart, initCart, isPriceOnRequest, mergeAnonymousCart, containsItem as priceRequestContains, removeItem as removePriceRequestItem, setItemQuantity as setPriceRequestItemQuantity, useAddress, useAuth, useCart, useCheckout, useClusterConfigurator, useCompany, useFavorites, useInfraProps, useMachines, useMenu, useOrders, usePriceRequest, useProductBundles, useProductGridConfig, useProductInfo, useProductSearch, useProductSlider, useProductSpecs, usePropellerContext, usePropellerDeps, usePropellerScope, usePurchaseAuthorizationConfigurator, usePurchaseAuthorizationRequests, useQuickOrder, useRequiredPropellerDeps, useResolvedProps, useServices, useSpareParts, useUserMode };
|
|
19214
19533
|
//# sourceMappingURL=index.js.map
|
|
19215
19534
|
//# sourceMappingURL=index.js.map
|