From a5043a96ac6ca37c3c8713de16b6ce17a7b3092e Mon Sep 17 00:00:00 2001 From: bc-yevhenii-buliuk Date: Fri, 3 Apr 2026 15:24:02 +0300 Subject: [PATCH] fix(storefront): TRAC-366 audit and fix Stencil theme remote API calls for multi-language subfolder support --- CHANGELOG.md | 1 + assets/js/theme/cart.js | 7 ++++--- assets/js/theme/cart/shipping-estimator.js | 7 +++++-- assets/js/theme/common/cart-item-details.js | 2 +- assets/js/theme/common/product-details.js | 2 +- 5 files changed, 12 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 00529a4888..6b11ed0211 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Draft - Fix incorrect request URL for adding items to cart on multi-lang storefronts [#2634](https://github.com/bigcommerce/cornerstone/pull/2634) +- Audit and fix Stencil theme remote API calls for multi-language subfolder support [#2635](https://github.com/bigcommerce/cornerstone/pull/2635) - Fix desktop header selectors layout for Language, Currency, and Channel [#2633](https://github.com/bigcommerce/cornerstone/pull/2633) - Fix incorrect request URL for getting states [#2630](https://github.com/bigcommerce/cornerstone/pull/2630) - Make cart preview work with multi-lang by passing baseUrl to cart API calls [#2627](https://github.com/bigcommerce/cornerstone/pull/2627) diff --git a/assets/js/theme/cart.js b/assets/js/theme/cart.js index 18ec8164ea..06d7cff6ab 100644 --- a/assets/js/theme/cart.js +++ b/assets/js/theme/cart.js @@ -167,7 +167,7 @@ export default class Cart extends PageManager { this.productDetails = new CartItemDetails(this.$modal, context); this.bindGiftWrappingForm(); - }); + }, { baseUrl: this.context.secureBaseUrl }); utils.hooks.on('product-option-change', (event, currentTarget) => { const $form = $(currentTarget).find('form'); @@ -196,7 +196,7 @@ export default class Cart extends PageManager { } else { $submit.prop('disabled', false); } - }); + }, { baseUrl: this.context.secureBaseUrl }); }); } @@ -405,6 +405,7 @@ export default class Cart extends PageManager { const itemId = $(event.currentTarget).data('itemGiftwrap'); const options = { template: 'cart/modals/gift-wrapping-form', + baseUrl: this.context.secureBaseUrl, }; event.preventDefault(); @@ -478,7 +479,7 @@ export default class Cart extends PageManager { country: this.context.shippingCountryErrorMessage, province: this.context.shippingProvinceErrorMessage, }; - this.shippingEstimator = new ShippingEstimator($('[data-shipping-estimator]'), shippingErrorMessages); + this.shippingEstimator = new ShippingEstimator($('[data-shipping-estimator]'), shippingErrorMessages, this.context.secureBaseUrl); } bindDiscountToggle() { diff --git a/assets/js/theme/cart/shipping-estimator.js b/assets/js/theme/cart/shipping-estimator.js index 96006fbd75..57d3d29dd6 100644 --- a/assets/js/theme/cart/shipping-estimator.js +++ b/assets/js/theme/cart/shipping-estimator.js @@ -6,12 +6,13 @@ import collapsibleFactory from '../common/collapsible'; import { showAlertModal } from '../global/modal'; export default class ShippingEstimator { - constructor($element, shippingErrorMessages) { + constructor($element, shippingErrorMessages, secureBaseUrl) { this.$element = $element; this.$state = $('[data-field-type="State"]', this.$element); this.isEstimatorFormOpened = false; this.shippingErrorMessages = shippingErrorMessages; + this.secureBaseUrl = secureBaseUrl; this.initFormValidation(); this.bindStateCountryChange(); this.bindEstimatorEvents(); @@ -176,6 +177,8 @@ export default class ShippingEstimator { event.preventDefault(); + const requestOptions = this.secureBaseUrl ? { baseUrl: this.secureBaseUrl } : {}; + utils.api.cart.getShippingQuotes(params, 'cart/shipping-quotes', (err, response) => { $('.shipping-quotes').html(response.content); @@ -189,7 +192,7 @@ export default class ShippingEstimator { window.location.reload(); }); }); - }); + }, requestOptions); }); $('.shipping-estimate-show').on('click', event => { diff --git a/assets/js/theme/common/cart-item-details.js b/assets/js/theme/common/cart-item-details.js index 2270ebb8fa..40adc660de 100644 --- a/assets/js/theme/common/cart-item-details.js +++ b/assets/js/theme/common/cart-item-details.js @@ -23,7 +23,7 @@ export default class CartItemDetails extends ProductDetailsBase { if ((isEmpty(productAttributesData) || hasDefaultOptions) && hasOptions) { const productId = this.context.productForChangeId; - utils.api.productAttributes.optionChange(productId, $form.serialize(), 'products/bulk-discount-rates', optionChangeCallback); + utils.api.productAttributes.optionChange(productId, $form.serialize(), 'products/bulk-discount-rates', optionChangeCallback, { baseUrl: this.context.secureBaseUrl }); } else { this.updateProductAttributes(productAttributesData); } diff --git a/assets/js/theme/common/product-details.js b/assets/js/theme/common/product-details.js index b48fd1303a..feaa1cf4f3 100644 --- a/assets/js/theme/common/product-details.js +++ b/assets/js/theme/common/product-details.js @@ -293,7 +293,7 @@ export default class ProductDetails extends ProductDetailsBase { data: productAttributesContent, }, })); - }); + }, { baseUrl: this.context.secureBaseUrl }); } /**