@propeller-commerce/propeller-v2-react-ui 0.15.11 → 0.16.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 +46 -0
- package/dist/index.cjs +48 -40
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +16 -1
- package/dist/index.d.ts +16 -1
- package/dist/index.js +48 -40
- package/dist/index.js.map +1 -1
- package/dist/pure.cjs +10 -10
- package/dist/pure.cjs.map +1 -1
- package/dist/pure.d.cts +10 -0
- package/dist/pure.d.ts +10 -0
- package/dist/pure.js +11 -11
- package/dist/pure.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -8,6 +8,52 @@ once it reaches 1.0. Until then (the `0.x` line) the public API may change
|
|
|
8
8
|
between minor versions; breaking changes are called out below and in
|
|
9
9
|
[MIGRATION.md](./MIGRATION.md).
|
|
10
10
|
|
|
11
|
+
## [0.16.0] - 2026-08-12
|
|
12
|
+
|
|
13
|
+
### Fixed
|
|
14
|
+
|
|
15
|
+
- **Localized names and slugs ignored the storefront language (PWP-936 /
|
|
16
|
+
PWP-940).** A localized array carries one entry per authored language in
|
|
17
|
+
catalog order, so `names[0]` / `slugs[0]` is the catalog's DEFAULT language,
|
|
18
|
+
not the storefront's. Thirteen sites read index 0 unconditionally while
|
|
19
|
+
eleven others resolved by language correctly. Now all of them go through
|
|
20
|
+
`getLocalizedValue`, which prefers the active language and falls back to any
|
|
21
|
+
translation that has a value:
|
|
22
|
+
- `ClusterOptions` — option group and option product names (PWP-936)
|
|
23
|
+
- `FavoriteListItem`, `FavoriteListDetails` — product and cluster names
|
|
24
|
+
- `ItemsOverview` — item, bundle-leader, bundle-item and child-option names
|
|
25
|
+
- `ProductBundles` — bundle item names
|
|
26
|
+
- `OrderItemCard` — item name, child-item names, and **the cluster/product
|
|
27
|
+
slugs used to build the item's link**
|
|
28
|
+
- `SearchBar` — **the slug used to build each autosuggest result's link**
|
|
29
|
+
|
|
30
|
+
The three slug sites are the ones that actually broke: they emitted
|
|
31
|
+
default-language URLs on every non-default locale.
|
|
32
|
+
- **`useCart` never adopted a cart id that arrived after mount (PWP-938 /
|
|
33
|
+
PWP-937).** The id was seeded once with `useState(options.cartId || '')` and
|
|
34
|
+
only reassigned from the hook's own cart-creation path, so a component that
|
|
35
|
+
mounted before the cart resolved held `''` permanently. `CartIconAndSidebar`
|
|
36
|
+
renders in the header on the first paint of every page, so its "Request
|
|
37
|
+
authorization" button rendered enabled, fired, and returned `err('No cart')`
|
|
38
|
+
with nothing sent — the reported "cannot submit purchase request". The id is
|
|
39
|
+
now derived from the prop on every render. `processCart` was affected the
|
|
40
|
+
same way.
|
|
41
|
+
|
|
42
|
+
### Changed
|
|
43
|
+
|
|
44
|
+
- **BREAKING (behavioural, hosts should act):** `OrderItemCard` gains a
|
|
45
|
+
`language` prop. The component is exported from the RSC-safe `/pure` entry
|
|
46
|
+
and reads no context by design, so a host that renders it directly must pass
|
|
47
|
+
`language` or it keeps resolving in the catalog's default language.
|
|
48
|
+
`OrderBonusItems` forwards its own resolved language automatically.
|
|
49
|
+
- `ClusterOptions` resolves `language` from `<PropellerProvider>` via
|
|
50
|
+
`useInfraProps`, like the other catalog components. Passing it explicitly
|
|
51
|
+
still wins.
|
|
52
|
+
- The favorites list's add-product button default now reads "Add product to
|
|
53
|
+
favorite list" instead of "Add product directly to this wishlist" (PWP-939).
|
|
54
|
+
Hosts that translate `FavoriteListDetails.addProductDirectly` should update
|
|
55
|
+
their own copy — "favorite list" is the agreed term, not "wishlist".
|
|
56
|
+
|
|
11
57
|
## [0.15.11] - 2026-08-11
|
|
12
58
|
|
|
13
59
|
### Fixed
|
package/dist/index.cjs
CHANGED
|
@@ -738,7 +738,8 @@ function useCart(options) {
|
|
|
738
738
|
const { graphqlClient, user, companyId, configuration, onCartCreated } = options;
|
|
739
739
|
const language = options.language || configuration?.language || "NL";
|
|
740
740
|
const [cart, setCart] = React6.useState(null);
|
|
741
|
-
const [
|
|
741
|
+
const [createdCartId, setCreatedCartId] = React6.useState("");
|
|
742
|
+
const cartId = options.cartId || createdCartId;
|
|
742
743
|
const [loading, setLoading] = React6.useState(false);
|
|
743
744
|
const [error, setError] = React6.useState(null);
|
|
744
745
|
const notesTimers = React6.useRef({});
|
|
@@ -774,13 +775,13 @@ function useCart(options) {
|
|
|
774
775
|
imageVariantFilters: configuration?.imageVariantFiltersSmall,
|
|
775
776
|
onCartCreated: (c) => {
|
|
776
777
|
setCart(c);
|
|
777
|
-
|
|
778
|
+
setCreatedCartId(c.cartId);
|
|
778
779
|
onCartCreated?.(c);
|
|
779
780
|
}
|
|
780
781
|
};
|
|
781
782
|
const resolved = await initCart(config);
|
|
782
783
|
setCart(resolved);
|
|
783
|
-
|
|
784
|
+
setCreatedCartId(resolved.cartId);
|
|
784
785
|
return resolved;
|
|
785
786
|
}, [graphqlClient, user, companyId, language, configuration, onCartCreated]);
|
|
786
787
|
const addItem = React6.useCallback(async (opts) => {
|
|
@@ -795,7 +796,7 @@ function useCart(options) {
|
|
|
795
796
|
if (opts.onAddToCart) {
|
|
796
797
|
const resultCart2 = opts.onAddToCart(opts.product, opts.cluster?.clusterId, opts.quantity, childItemInputs, opts.notes, opts.price);
|
|
797
798
|
setCart(resultCart2);
|
|
798
|
-
|
|
799
|
+
setCreatedCartId(resultCart2.cartId);
|
|
799
800
|
const addedItem2 = resultCart2.items?.find((i) => i.productId === opts.product.productId) ?? null;
|
|
800
801
|
opts.afterAddToCart?.(resultCart2, addedItem2);
|
|
801
802
|
return propellerV2CoreUi.ok({ cart: resultCart2, item: addedItem2 });
|
|
@@ -816,7 +817,7 @@ function useCart(options) {
|
|
|
816
817
|
imageVariantFilters: configuration?.imageVariantFiltersSmall
|
|
817
818
|
});
|
|
818
819
|
setCart(resultCart);
|
|
819
|
-
|
|
820
|
+
setCreatedCartId(resultCart.cartId);
|
|
820
821
|
const addedItem = resultCart.items?.find((i) => i.productId === opts.product.productId) ?? null;
|
|
821
822
|
opts.afterAddToCart?.(resultCart, addedItem);
|
|
822
823
|
return propellerV2CoreUi.ok({ cart: resultCart, item: addedItem });
|
|
@@ -10815,8 +10816,8 @@ var ClusterInfo_default = ClusterInfo;
|
|
|
10815
10816
|
function formatPrice9(price, currency) {
|
|
10816
10817
|
return propellerV2CoreUi.formatPrice(price, { symbol: currency });
|
|
10817
10818
|
}
|
|
10818
|
-
function getProductName2(product) {
|
|
10819
|
-
return product.names
|
|
10819
|
+
function getProductName2(product, language) {
|
|
10820
|
+
return propellerV2CoreUi.getLocalizedValue(product.names, language, `Product ${product.productId}`);
|
|
10820
10821
|
}
|
|
10821
10822
|
function getProductImageUrl4(product) {
|
|
10822
10823
|
const media = product.media;
|
|
@@ -10826,9 +10827,11 @@ function getProductImageUrl4(product) {
|
|
|
10826
10827
|
}
|
|
10827
10828
|
return "";
|
|
10828
10829
|
}
|
|
10829
|
-
function ClusterOptions(
|
|
10830
|
+
function ClusterOptions(rawProps) {
|
|
10831
|
+
const props = useInfraProps(rawProps);
|
|
10830
10832
|
const [selectedProductIds, setSelectedProductIds] = React6.useState({});
|
|
10831
10833
|
function getOptionsForRender() {
|
|
10834
|
+
const language = props.language;
|
|
10832
10835
|
const options = props.options || [];
|
|
10833
10836
|
const sel = selectedProductIds;
|
|
10834
10837
|
const hidePrices = propellerV2CoreUi.isContentHidden(props.portalMode, props.user);
|
|
@@ -10838,7 +10841,7 @@ function ClusterOptions(props) {
|
|
|
10838
10841
|
const products = (option.products || []).map((p) => ({
|
|
10839
10842
|
productId: p.productId,
|
|
10840
10843
|
productIdStr: p.productId.toString(),
|
|
10841
|
-
label: hidePrices ? getProductName2(p) : `${getProductName2(p)} \u2014 ${formatPrice9(p.price?.gross || 0, props.currency ?? "\u20AC")}`
|
|
10844
|
+
label: hidePrices ? getProductName2(p, language) : `${getProductName2(p, language)} \u2014 ${formatPrice9(p.price?.gross || 0, props.currency ?? "\u20AC")}`
|
|
10842
10845
|
}));
|
|
10843
10846
|
let previewImageUrl = "";
|
|
10844
10847
|
let previewName = "";
|
|
@@ -10849,7 +10852,7 @@ function ClusterOptions(props) {
|
|
|
10849
10852
|
);
|
|
10850
10853
|
if (selectedProduct) {
|
|
10851
10854
|
previewImageUrl = getProductImageUrl4(selectedProduct);
|
|
10852
|
-
previewName = getProductName2(selectedProduct);
|
|
10855
|
+
previewName = getProductName2(selectedProduct, language);
|
|
10853
10856
|
previewPrice = hidePrices ? "" : formatPrice9(selectedProduct.price?.gross || 0, props.currency ?? "\u20AC");
|
|
10854
10857
|
}
|
|
10855
10858
|
}
|
|
@@ -10857,7 +10860,7 @@ function ClusterOptions(props) {
|
|
|
10857
10860
|
return {
|
|
10858
10861
|
id: option.id,
|
|
10859
10862
|
idStr,
|
|
10860
|
-
name: option.names
|
|
10863
|
+
name: propellerV2CoreUi.getLocalizedValue(option.names, language, `Option ${option.id}`),
|
|
10861
10864
|
isRequired,
|
|
10862
10865
|
selectedProductId,
|
|
10863
10866
|
hasSelection: !!selectedProductId,
|
|
@@ -11325,7 +11328,8 @@ function FavoriteListItem(rawProps) {
|
|
|
11325
11328
|
const isProduct = "productId" in props.item;
|
|
11326
11329
|
const product = props.item;
|
|
11327
11330
|
const cluster = props.item;
|
|
11328
|
-
const
|
|
11331
|
+
const nameLanguage = props.language;
|
|
11332
|
+
const name = isProduct ? propellerV2CoreUi.getLocalizedValue(product?.names, nameLanguage, "Product") : propellerV2CoreUi.getLocalizedValue(cluster?.names, nameLanguage, "") || propellerV2CoreUi.getLocalizedValue(cluster?.defaultProduct?.names, nameLanguage, "Cluster");
|
|
11329
11333
|
const sku = isProduct ? product?.sku || "" : cluster?.sku || cluster?.defaultProduct?.sku || "";
|
|
11330
11334
|
const imageUrl = isProduct ? product?.media?.images?.items?.[0]?.imageVariants?.[0]?.url || "" : cluster?.defaultProduct?.media?.images?.items?.[0]?.imageVariants?.[0]?.url || "";
|
|
11331
11335
|
const itemUrl = isProduct ? props.configuration?.urls?.getProductUrl?.(props.item) || "" : props.configuration?.urls?.getClusterUrl?.(props.item) || "";
|
|
@@ -11759,9 +11763,10 @@ function FavoriteListDetails(rawProps) {
|
|
|
11759
11763
|
}
|
|
11760
11764
|
}
|
|
11761
11765
|
function getSearchItemName(item) {
|
|
11762
|
-
|
|
11766
|
+
const language = props.language;
|
|
11767
|
+
if ("productId" in item) return propellerV2CoreUi.getLocalizedValue(item.names, language, "Product");
|
|
11763
11768
|
const cluster = item;
|
|
11764
|
-
return cluster.names
|
|
11769
|
+
return propellerV2CoreUi.getLocalizedValue(cluster.names, language, "") || propellerV2CoreUi.getLocalizedValue(cluster.defaultProduct?.names, language, "Cluster");
|
|
11765
11770
|
}
|
|
11766
11771
|
function getSearchItemSku(item) {
|
|
11767
11772
|
if ("productId" in item) return item.sku || "";
|
|
@@ -12004,7 +12009,7 @@ function FavoriteListDetails(rawProps) {
|
|
|
12004
12009
|
type: "button",
|
|
12005
12010
|
className: "propeller-favorite-list-details__add-btn inline-flex items-center justify-center rounded-control bg-secondary px-4 py-2 text-sm font-medium text-secondary-foreground transition-colors hover:bg-secondary/90",
|
|
12006
12011
|
onClick: () => setShowAddModal(true),
|
|
12007
|
-
children: propellerV2CoreUi.getLabel(props.labels, "addProductDirectly", "Add product
|
|
12012
|
+
children: propellerV2CoreUi.getLabel(props.labels, "addProductDirectly", "Add product to favorite list")
|
|
12008
12013
|
}
|
|
12009
12014
|
) }),
|
|
12010
12015
|
allItems.length === 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "propeller-favorite-list-details__empty border border-border rounded-container p-12 text-center space-y-4", children: [
|
|
@@ -12880,8 +12885,8 @@ function GridTitleWithProvider(rawProps) {
|
|
|
12880
12885
|
return /* @__PURE__ */ jsxRuntime.jsx(GridTitle_default, { ...props });
|
|
12881
12886
|
}
|
|
12882
12887
|
var GridTitleWithProvider_default = GridTitleWithProvider;
|
|
12883
|
-
function getItemName(item) {
|
|
12884
|
-
return item.product?.names
|
|
12888
|
+
function getItemName(item, language) {
|
|
12889
|
+
return propellerV2CoreUi.getLocalizedValue(item.product?.names, language, "Product");
|
|
12885
12890
|
}
|
|
12886
12891
|
function getItemImageUrl(item) {
|
|
12887
12892
|
const url = item.product?.media?.images?.items?.[0]?.imageVariants?.[0]?.url;
|
|
@@ -12902,6 +12907,7 @@ function getBundleNonLeaders(item) {
|
|
|
12902
12907
|
}
|
|
12903
12908
|
function ItemsOverview(rawProps) {
|
|
12904
12909
|
const props = useInfraProps(rawProps);
|
|
12910
|
+
const language = props.language;
|
|
12905
12911
|
const useTax = !!props.includeTax;
|
|
12906
12912
|
const containerClass = props.itemsOverviewContainerClass || "cart-items-overview";
|
|
12907
12913
|
const itemNameClickable = props.itemNameClickable !== void 0 ? props.itemNameClickable : true;
|
|
@@ -12963,7 +12969,7 @@ function ItemsOverview(rawProps) {
|
|
|
12963
12969
|
{
|
|
12964
12970
|
className: "propeller-items-overview__item-image w-full h-full object-contain p-1.5",
|
|
12965
12971
|
src: getItemImageUrl(item),
|
|
12966
|
-
alt: getItemName(item)
|
|
12972
|
+
alt: getItemName(item, language)
|
|
12967
12973
|
}
|
|
12968
12974
|
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
12969
12975
|
"svg",
|
|
@@ -12991,7 +12997,7 @@ function ItemsOverview(rawProps) {
|
|
|
12991
12997
|
] }),
|
|
12992
12998
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "propeller-items-overview__item-bundle mt-1.5 space-y-1 border-l-2 border-secondary/10 pl-2", children: [
|
|
12993
12999
|
leader ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "propeller-items-overview__item-bundle-leader flex justify-between items-center text-xs", children: [
|
|
12994
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium text-foreground", children: leader.product.names
|
|
13000
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium text-foreground", children: propellerV2CoreUi.getLocalizedValue(leader.product.names, language, "Product") }),
|
|
12995
13001
|
money(bundlePrice(leader.price)) ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground whitespace-nowrap ml-2", children: money(bundlePrice(leader.price)) }) : null
|
|
12996
13002
|
] }) : null,
|
|
12997
13003
|
getBundleNonLeaders(item).map((bundleItem, idx) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -12999,7 +13005,7 @@ function ItemsOverview(rawProps) {
|
|
|
12999
13005
|
{
|
|
13000
13006
|
className: "propeller-items-overview__item-bundle-item flex justify-between items-center text-xs text-muted-foreground",
|
|
13001
13007
|
children: [
|
|
13002
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "line-clamp-1", children: bundleItem.product?.names
|
|
13008
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "line-clamp-1", children: propellerV2CoreUi.getLocalizedValue(bundleItem.product?.names, language, "Product") }),
|
|
13003
13009
|
money(bundlePrice(bundleItem.price)) ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-foreground-subtle whitespace-nowrap ml-2", children: money(bundlePrice(bundleItem.price)) }) : null
|
|
13004
13010
|
]
|
|
13005
13011
|
},
|
|
@@ -13020,9 +13026,9 @@ function ItemsOverview(rawProps) {
|
|
|
13020
13026
|
{
|
|
13021
13027
|
className: "propeller-items-overview__item-title font-medium text-sm leading-tight cursor-pointer hover:text-secondary transition-colors line-clamp-2",
|
|
13022
13028
|
onClick: () => handleItemNameClick(item),
|
|
13023
|
-
children: getItemName(item)
|
|
13029
|
+
children: getItemName(item, language)
|
|
13024
13030
|
}
|
|
13025
|
-
) : /* @__PURE__ */ jsxRuntime.jsx("p", { className: "propeller-items-overview__item-title font-medium text-sm leading-tight line-clamp-2", children: getItemName(item) }),
|
|
13031
|
+
) : /* @__PURE__ */ jsxRuntime.jsx("p", { className: "propeller-items-overview__item-title font-medium text-sm leading-tight line-clamp-2", children: getItemName(item, language) }),
|
|
13026
13032
|
showPrice ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "propeller-items-overview__item-price font-semibold text-sm text-foreground whitespace-nowrap", children: formatItemPrice(lineTotal(item)) }) : null
|
|
13027
13033
|
] }),
|
|
13028
13034
|
showSku && itemSku ? /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "propeller-items-overview__item-sku text-xs text-muted-foreground mt-0.5", children: [
|
|
@@ -13038,7 +13044,7 @@ function ItemsOverview(rawProps) {
|
|
|
13038
13044
|
{
|
|
13039
13045
|
className: "propeller-items-overview__item-option flex justify-between items-center text-xs text-muted-foreground",
|
|
13040
13046
|
children: [
|
|
13041
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "line-clamp-1", children: child.product?.names
|
|
13047
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "line-clamp-1", children: propellerV2CoreUi.getLocalizedValue(child.product?.names, language, "Option") }),
|
|
13042
13048
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-foreground-subtle whitespace-nowrap ml-2", children: formatItemPrice(lineTotal(child)) })
|
|
13043
13049
|
]
|
|
13044
13050
|
},
|
|
@@ -13516,22 +13522,22 @@ function OrderActions(rawProps) {
|
|
|
13516
13522
|
);
|
|
13517
13523
|
}
|
|
13518
13524
|
var OrderActions_default = OrderActions;
|
|
13519
|
-
function getProductName3(orderItem) {
|
|
13520
|
-
return orderItem?.product?.names
|
|
13525
|
+
function getProductName3(orderItem, language) {
|
|
13526
|
+
return propellerV2CoreUi.getLocalizedValue(orderItem?.product?.names, language, "") || orderItem?.name || "Unknown Product";
|
|
13521
13527
|
}
|
|
13522
|
-
function getClusterUrl(orderItem) {
|
|
13528
|
+
function getClusterUrl(orderItem, language) {
|
|
13523
13529
|
const cluster = orderItem?.product?.cluster;
|
|
13524
13530
|
if (!cluster) return "";
|
|
13525
13531
|
const id = cluster.clusterId;
|
|
13526
|
-
const slug = cluster.slugs
|
|
13532
|
+
const slug = propellerV2CoreUi.getLocalizedValue(cluster.slugs, language, "");
|
|
13527
13533
|
if (!id || !slug) return "";
|
|
13528
13534
|
return `/cluster/${id}/${slug}`;
|
|
13529
13535
|
}
|
|
13530
|
-
function getProductUrl(orderItem) {
|
|
13531
|
-
const cu = getClusterUrl(orderItem);
|
|
13536
|
+
function getProductUrl(orderItem, language) {
|
|
13537
|
+
const cu = getClusterUrl(orderItem, language);
|
|
13532
13538
|
if (cu) return cu;
|
|
13533
13539
|
const id = orderItem?.product?.productId;
|
|
13534
|
-
const slug = orderItem?.product?.slugs
|
|
13540
|
+
const slug = propellerV2CoreUi.getLocalizedValue(orderItem?.product?.slugs, language, "");
|
|
13535
13541
|
if (id && slug) return `/product/${id}/${slug}`;
|
|
13536
13542
|
return "";
|
|
13537
13543
|
}
|
|
@@ -13546,10 +13552,10 @@ function OrderItemCard(props) {
|
|
|
13546
13552
|
const showDiscount = props.showDiscount !== void 0 ? props.showDiscount : false;
|
|
13547
13553
|
const showStockComponent = props.showStockComponent !== void 0 ? props.showStockComponent : false;
|
|
13548
13554
|
const showItemNotes = props.showItemNotes !== void 0 ? props.showItemNotes : false;
|
|
13549
|
-
const productName = getProductName3(item);
|
|
13555
|
+
const productName = getProductName3(item, props.language);
|
|
13550
13556
|
const productSku = item?.product?.sku || item?.sku || "";
|
|
13551
13557
|
const productImage = item?.product?.media?.images?.items?.[0]?.imageVariants?.[0]?.url || "";
|
|
13552
|
-
const productUrl = getProductUrl(item);
|
|
13558
|
+
const productUrl = getProductUrl(item, props.language);
|
|
13553
13559
|
const quantity = item?.quantity || 0;
|
|
13554
13560
|
const priceTotal = item?.priceTotal || 0;
|
|
13555
13561
|
const discount = item?.discount || 0;
|
|
@@ -13664,7 +13670,7 @@ function OrderItemCard(props) {
|
|
|
13664
13670
|
className: "propeller-order-item-card__child-row border-0",
|
|
13665
13671
|
"data-child": "true",
|
|
13666
13672
|
children: [
|
|
13667
|
-
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "propeller-order-item-card__cell propeller-order-item-card__cell--product px-6 py-2 pl-28", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "propeller-order-item-card__child-title text-sm text-muted-foreground", children: child.product?.names
|
|
13673
|
+
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "propeller-order-item-card__cell propeller-order-item-card__cell--product px-6 py-2 pl-28", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "propeller-order-item-card__child-title text-sm text-muted-foreground", children: propellerV2CoreUi.getLocalizedValue(child.product?.names, props.language, "") || child.name || "Unknown" }) }),
|
|
13668
13674
|
showQuantity ? /* @__PURE__ */ jsxRuntime.jsx("td", { className: "propeller-order-item-card__cell propeller-order-item-card__cell--quantity px-6 py-2 text-center text-sm text-muted-foreground", children: child.quantity || 0 }) : null,
|
|
13669
13675
|
showDiscount ? /* @__PURE__ */ jsxRuntime.jsx("td", { className: "propeller-order-item-card__cell propeller-order-item-card__cell--discount px-6 py-2 text-right text-sm text-muted-foreground" }) : null,
|
|
13670
13676
|
showPrice ? /* @__PURE__ */ jsxRuntime.jsx("td", { className: "propeller-order-item-card__cell propeller-order-item-card__cell--price px-6 py-2 text-right whitespace-nowrap text-sm text-muted-foreground", children: formatItemPrice(child.priceTotal || 0) }) : null
|
|
@@ -13688,7 +13694,8 @@ function OrderBonusItems(rawProps) {
|
|
|
13688
13694
|
{
|
|
13689
13695
|
orderItem: item,
|
|
13690
13696
|
titleLinkable: false,
|
|
13691
|
-
currency: props.currency
|
|
13697
|
+
currency: props.currency,
|
|
13698
|
+
language: props.language
|
|
13692
13699
|
},
|
|
13693
13700
|
item.id
|
|
13694
13701
|
)) }) })
|
|
@@ -15059,11 +15066,12 @@ function getItemPrice(item, includeTax) {
|
|
|
15059
15066
|
function getProductImage(product) {
|
|
15060
15067
|
return product?.media?.images?.items?.[0]?.imageVariants?.[0]?.url || "";
|
|
15061
15068
|
}
|
|
15062
|
-
function getProductName4(product) {
|
|
15063
|
-
return product?.names
|
|
15069
|
+
function getProductName4(product, language) {
|
|
15070
|
+
return propellerV2CoreUi.getLocalizedValue(product?.names, language, "");
|
|
15064
15071
|
}
|
|
15065
15072
|
function ProductBundles(rawProps) {
|
|
15066
15073
|
const props = useInfraProps(rawProps);
|
|
15074
|
+
const language = props.language;
|
|
15067
15075
|
const currencySymbol = props.currency ?? "\u20AC";
|
|
15068
15076
|
const money = (value) => propellerV2CoreUi.formatPrice(value, { symbol: currencySymbol });
|
|
15069
15077
|
const [isMounted, setIsMounted] = React6.useState(false);
|
|
@@ -15202,10 +15210,10 @@ function ProductBundles(rawProps) {
|
|
|
15202
15210
|
{
|
|
15203
15211
|
className: "propeller-product-bundles__item-image w-full h-full object-contain p-2",
|
|
15204
15212
|
src: getProductImage(item.product),
|
|
15205
|
-
alt: getProductName4(item.product)
|
|
15213
|
+
alt: getProductName4(item.product, language)
|
|
15206
15214
|
}
|
|
15207
15215
|
) : null }),
|
|
15208
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "propeller-product-bundles__item-name text-sm font-medium text-muted-foreground leading-tight mb-1", children: getProductName4(item.product) || "Product " + item.productId }),
|
|
15216
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "propeller-product-bundles__item-name text-sm font-medium text-muted-foreground leading-tight mb-1", children: getProductName4(item.product, language) || "Product " + item.productId }),
|
|
15209
15217
|
!hidePrices && item.price ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "propeller-product-bundles__item-price text-sm font-semibold text-foreground", children: [
|
|
15210
15218
|
money(getItemPrice(item, includeTax)),
|
|
15211
15219
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-normal text-muted-foreground ml-1", children: includeTax ? propellerV2CoreUi.getLabel(props.labels, "inclTax", "incl. VAT") : propellerV2CoreUi.getLabel(props.labels, "exclTax", "excl. VAT") })
|
|
@@ -15405,7 +15413,7 @@ function ProductBundles(rawProps) {
|
|
|
15405
15413
|
{
|
|
15406
15414
|
className: "propeller-product-bundles__modal-child flex justify-between items-center text-xs text-muted-foreground",
|
|
15407
15415
|
children: [
|
|
15408
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "line-clamp-1", children: getProductName4(item.product) || "Product" }),
|
|
15416
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "line-clamp-1", children: getProductName4(item.product, language) || "Product" }),
|
|
15409
15417
|
!hidePrices && item.price ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-foreground-subtle whitespace-nowrap ml-2", children: money(getItemPrice(item, includeTax)) }) : null
|
|
15410
15418
|
]
|
|
15411
15419
|
},
|
|
@@ -18620,7 +18628,7 @@ function mapToSearchBarResult(item, language) {
|
|
|
18620
18628
|
const isCluster = "clusterId" in item;
|
|
18621
18629
|
const displayItem = isCluster ? item.defaultProduct : item;
|
|
18622
18630
|
const id = isCluster ? item.clusterId : item.productId;
|
|
18623
|
-
const slug = item.slugs
|
|
18631
|
+
const slug = propellerV2CoreUi.getLocalizedValue(item.slugs, language, "");
|
|
18624
18632
|
const url = isCluster ? "/cluster/" + id + "/" + slug : "/product/" + id + "/" + slug;
|
|
18625
18633
|
const priceNet = displayItem?.price?.net || 0;
|
|
18626
18634
|
const priceGross = displayItem?.price?.gross || 0;
|