(async function () {
window.sfbtuData = {"url":"https:\/\/smart-bundles.theextensions.com\/storefront\/uxqg6s","script":"https:\/\/smart-bundles.theextensions.com\/js\/smart-fbt-upsells.js","settings":{"temp_product_id":null,"default_bundle_name":"Frequently Bought Together","placement":"before_product_description","max_bundles_slider":3,"created_at":"2026-04-15T09:53:17.000000Z"},"place":{"id":"before_product_description","label":"Before \"Product Description\"","selectors":[{"selector":".productView-description","position":"before"}]},"currency":{"symbol":"$","decimal_separator":".","thousands_separator":",","decimal_places":2,"currency_symbol_location":"left"}};
window.sfbtuApplicationBaseApiUrl = sfbtuData.url;
const addScript = async src => new Promise((resolve, reject) => {
const el = document.createElement('script');
el.src = src;
el.addEventListener('load', resolve);
el.addEventListener('error', reject);
document.body.append(el);
});
const insertPlaceHolders = () => {
let place = window.sfbtuData.place;
place.selectors.map((sel, index) => {
let element = document.querySelector(sel.selector);
let id = `product-sfbtu-placeholder-${place.id}-${index}`;
if (element && !document.getElementById(id)) {
let placeHolder = document.createElement(sel.tag ?? 'div');
placeHolder.className = place.id;
placeHolder.id = id;
placeHolder.dataset.productSfbtu = place.id;
Object.assign(placeHolder.style, {
width: '100%',
float: 'left',
paddingLeft: '1rem',
paddingRight: '1rem',
position: 'relative',
zIndex: '1',
});
placeHolder.innerHTML = ["
"
, "Loading..."
, "
"].join('');
if (sel.position === 'before') {
element.parentNode.insertBefore(placeHolder, element)
} else if (sel.position === 'inside') {
element.append(placeHolder);
} else if (sel.position === 'afterend') {
element.insertAdjacentElement('afterend', placeHolder);
console.log(element.nextSibling);
} else if (sel.position === 'instead') {
if (element.parentNode) {
element.parentNode.replaceChild(placeHolder, element);
}
} else {
element.parentNode.insertBefore(placeHolder, element.nextSibling);
}
}
});
}
insertPlaceHolders();
const productId = (
document.querySelector('.productView[data-entity-id]')?.getAttribute('data-entity-id') ||
document.querySelector('.productView-options input[name="product_id"]')?.value ||
window.__bc__?.productId
)?.toString().trim();
if(productId) {
setTimeout(() => {
fetch('/api/storefront/carts', {
method: "GET",
credentials: "same-origin"
})
.then(response => response.json())
.then(result => {
window.bigcommerceCartId = result.length ? result[0].id : null;
})
.catch(error => console.error(error));
}, 300)
// --- Try to detect breadcrumb categories ---
let categories = [];
const breadcrumbLinks = document.querySelectorAll('.breadcrumbs .breadcrumb-label');
if (breadcrumbLinks.length > 2) {
categories = Array.from(breadcrumbLinks)
.slice(1, -1)
.map(link => new URL(link.href).pathname);
}
const params = new URLSearchParams({
product_id: productId,
categories: JSON.stringify(categories)
});
fetch(window.sfbtuApplicationBaseApiUrl + '/bundles?' + params.toString(), {
method: "GET",
credentials: "same-origin"
})
.then(response => response.json())
.then(result => {
window.sfbtuProductData = result;
console.log('tesssstttttt')
addScript(sfbtuData.script + "?v=1").then();
})
.catch(error => console.error(error));
}
})();