Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend
Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend

Inspirational Friendship Bracelets Ocean Wave Engraved Personalized Gift for Women,Sister Best Friend

Price

$23.58 $18.99
Save $4.59
28 sold
Free shipping on orders over 69.9

color

Please select a color

Quantity

Free returns
Sustainably made
Secure payments

Affordable Price with exquisite quality, High polished cuff bracelet, shinne surface, very smooth with rounded edges to avoid scratch your wrist, clear engraved easily reading. 

This is a great inspirational gift for your daughter, son and granddaughter. Help her see her innate worth and strength in difficult times. Find the one that suits her best! To my daughter, son and granddaughter, despite the hardships, you persevered, you endured, you never gave up, you persevered, you moved on, you never gave up, you persevered, you prevailed. I am so proud of you.

The cuff bracelet is made of 316L stainless steel silver plated, which is more durable and will not fade, tarnish, corrode, stain or cause allergic reactions. Nickel-free, 100% harmonious with the wrist. Dimensions: Diameter 2.5", L/6.2", Width: 3/8".

Adjustable opening design fits most wrists. The size is adjustable, it's an open bracelet that will fit most people, and it's engraved with ocean waves for a textured feel.

  • our guarantee

    📦 Worldwide Shipping Insurance: Every order includes real-time tracking details and insurance coverage in case the package is lost or stolen in transit.

    💰 Money Back Guarantee: If your item arrives damaged or defective within 30 days of normal use, we are happy to replace or refund.

    ✉️ 24/7 Customer Support: If your question is not answered here, please only contact us: support@home747.com

    🔒 Safe & Secure Checkout: We use state-of-the-art SSL secure encryption to ensure your personal and financial information is 100% protected.

/** @private {string} */ class SpzCustomAnchorScroll extends SPZ.BaseElement { static deferredMount() { return false; } constructor(element) { super(element); /** @private {Element} */ this.scrollableContainer_ = null; } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } buildCallback() { this.viewport_ = this.getViewport(); this.initActions_(); } setTarget(containerId, targetId) { this.containerId = '#' + containerId; this.targetId = '#' + targetId; } scrollToTarget() { const container = document.querySelector(this.containerId); const target = container.querySelector(this.targetId); const {scrollTop} = container; const eleOffsetTop = this.getOffsetTop_(target, container); this.viewport_ .interpolateScrollIntoView_( container, scrollTop, scrollTop + eleOffsetTop ); } initActions_() { this.registerAction( 'scrollToTarget', (invocation) => this.scrollToTarget(invocation?.caller) ); this.registerAction( 'setTarget', (invocation) => this.setTarget(invocation?.args?.containerId, invocation?.args?.targetId) ); } /** * @param {Element} element * @param {Element} container * @return {number} * @private */ getOffsetTop_(element, container) { if (!element./*OK*/ getClientRects().length) { return 0; } const rect = element./*OK*/ getBoundingClientRect(); if (rect.width || rect.height) { return rect.top - container./*OK*/ getBoundingClientRect().top; } return rect.top; } } SPZ.defineElement('spz-custom-anchor-scroll', SpzCustomAnchorScroll); const STRENGTHEN_TRUST_URL = "/api/strengthen_trust/settings"; class SpzCustomStrengthenTrust extends SPZ.BaseElement { constructor(element) { super(element); this.renderElement_ = null; } isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER; } buildCallback() { this.xhr_ = SPZServices.xhrFor(this.win); const renderId = this.element.getAttribute('render-id'); SPZCore.Dom.waitForChild( document.body, () => !!document.getElementById(renderId), () => { this.renderElement_ = SPZCore.Dom.scopedQuerySelector( document.body, `#${renderId}` ); if (this.renderElement_) { this.render_(); } this.registerAction('track', (invocation) => { this.track_(invocation.args); }); } ); } render_() { this.fetchData_().then((data) => { if (!data) { return; } SPZ.whenApiDefined(this.renderElement_).then((apis) => { apis?.render(data); document.querySelector('#strengthen-trust-render-1718252090972').addEventListener('click',(event)=>{ if(event.target.nodeName == 'A'){ this.track_({type: 'trust_content_click'}); } }) }); }); } track_(data = {}) { const track = window.sa && window.sa.track; if (!track) { return; } track('trust_enhancement_event', data); } parseJSON_(string) { let result = {}; try { result = JSON.parse(string); } catch (e) {} return result; } fetchData_() { return this.xhr_ .fetchJson(STRENGTHEN_TRUST_URL) .then((responseData) => { if (!responseData || !responseData.data) { return null; } const data = responseData.data; const moduleSettings = (data.module_settings || []).reduce((result, moduleSetting) => { return result.concat(Object.assign(moduleSetting, { logos: (moduleSetting.logos || []).map((item) => { return moduleSetting.logos_type == 'custom' ? this.parseJSON_(item) : item; }) })); }, []); return Object.assign(data, { module_settings: moduleSettings, isEditor: window.self !== window.top, }); }); } } SPZ.defineElement('spz-custom-strengthen-trust', SpzCustomStrengthenTrust);
class SpzSmartBlockComponent extends SPZ.BaseElement { constructor(element) { super(element); this.templates_ = null; this.container_ = null; this.i18n_ = {}; this.config_ = {}; this.show_type_ = 3; this.product_resource_id_ = ''; this.collection_resource_id_ = ''; this.cart_items_ = []; this.customer_id_ = ''; this.order_id_ = ''; } static deferredMount() { return false; } isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER; } buildCallback() { const template_type = window.SHOPLAZZA.meta.page.template_type; if (template_type === 1) { this.show_type_ = 3; this.product_resource_id_ = window.SHOPLAZZA.meta.page.resource_id; } else if (template_type === 2) { this.show_type_ = 4; this.collection_resource_id_ = window.SHOPLAZZA.meta.page.resource_id; } else if (template_type === 15){ this.show_type_ = 5; } else if (template_type === 13){ this.show_type_ = 6; } else if (template_type === 20){ this.show_type_ = 7; this.customer_id_ = window.SHOPLAZZA.customer.customer_id; } else if (template_type === 35){ this.show_type_ = 8; this.order_id_ = window.location.pathname.split('/').pop(); } this.templates_ = SPZServices.templatesForDoc(this.element); this.setAction_(); } mountCallback() { console.log('smart mounted'); const that = this; const themeName = window.SHOPLAZZA.theme.merchant_theme_name; const isGeek = /Geek/.test(themeName); this.fetchRules().then((res) => { if (res && res.rules && res.rules.length) { const blockEl = document.getElementById('smart_recommend_block'); SPZ.whenApiDefined(blockEl).then((api) => { api.render({data: res}, true).then(() => { if (isGeek && that.show_type_ === 6) { blockEl.querySelector('.plugin_container_wrpper').style.padding = '30px 0'; } const recommendStyle = document.createElement('style'); recommendStyle.innerHTML = ` .plugin__recommend_container,.app-recommend-card { display: none !important; } `; document.head.appendChild(recommendStyle); const fetchList = []; res.rules.forEach((rule) => { fetchList.push(this.fetchRuleProductList(rule.id)); }); const fetchAll = Promise.all(fetchList); fetchAll.then((p_res) => { res.rules.forEach((rule, index) => { rule.products = p_res[index] && p_res[index].products; const ruleEl = document.getElementById('smart_recommend_rule_' + rule.id); SPZ.whenApiDefined(ruleEl).then((api) => { api.render({data: rule}, true).then(() => { that.impressListen(`#smart_recommend_rule_ul_${rule.id}`, function(){ that.trackRuleImpress(rule); }); const btnElList = document.querySelectorAll(`#smart_recommend_rule_ul_${rule.id} button`); btnElList.forEach((btnEl) => { if (btnEl && rule.config && rule.config.quick_shop_button_bg_color && rule.config.quick_shop_button_text_color) { btnEl.style.backgroundColor = rule.config.quick_shop_button_bg_color; btnEl.style.color = rule.config.quick_shop_button_text_color; } }) }); }); }); }); }) }) } else { if (window.top !== window.self) { const template_type = window.SHOPLAZZA.meta.page.template_type; const holderEl = document.getElementById('smart_recommend_preview_no_data_placeholder'); SPZ.whenApiDefined(holderEl).then((api) => { api.render({data: { isCart: template_type === 13, isCollection: template_type === 2, isProduct: template_type === 1, isIndex: template_type === 15 }}, true); }); } } }); } setAction_() { this.registerAction('quickShop', (data) => { const that = this; const product_id = data.args.product_id; const productIndex = data.args.productIndex; const rule_id = data.args.rule_id; const ssp = data.args.ssp; const scm = data.args.scm; const cfb = data.args.cfb; const ifb = data.args.ifb; const modalRender = document.getElementById('smart_recommend_product_modal_render'); if (product_id) { this.fetchProductData(product_id).then((res) => { const product = res.products && res.products.length && res.products[0] || {}; product.cfb = cfb; product.ifb = ifb; SPZ.whenApiDefined(modalRender).then((api) => { api.render({product: product, productIndex: productIndex, rule_id: rule_id, ssp: ssp, scm: scm, show_type: that.show_type_}, true).then(() => { const modalEl = document.getElementById('smart_recommend_product_modal'); SPZ.whenApiDefined(modalEl).then((modal) => { that.impressListen('#smart_recommend_product_modal', function(){ that.trackQuickShop({ rule_id: rule_id, product_id: product_id }); }); modal.open(); }); const formEl = document.getElementById('smart_recommend_product_form'); SPZ.whenApiDefined(formEl).then((form) => { form.setProduct(product); }); const variantEl = document.getElementById('smart_recommend_product_variants'); SPZ.whenApiDefined(variantEl).then((variant) => { variant.handleRender(product); }); }); }) }); } }); this.registerAction('handleScroll', (data) => { this.directTo(data.args.rule_id, data.args.direction); }); this.registerAction('handleProductChange', (data) => { const variant = data.args.data.variant; const product = data.args.data.product; const imageRenderEl = document.getElementById('smart_recommend_product_image'); SPZ.whenApiDefined(imageRenderEl).then((api) => { api.render({ variant: variant, product: product }, true); }); }); this.registerAction('handleAtcSuccess', (detail) => { const data = detail.args; data.data.product = data.data.product || {}; data.data.variant = data.data.variant || {}; const product_id = data.data.product.id; const product_title = data.data.product.title; const variant_id = data.data.variant.id; const price = data.data.variant.price; const rule_id = data.rule_id; const aid = `smart_recommend.${this.show_type_}.${rule_id}`; const ifb = data.data.product.ifb; const cfb = data.data.product.cfb; const ssp = data.ssp; const scm = data.scm; const spm = `smart_recommend_${this.show_type_}.${data.spmIndex}`; const params = { id: product_id, product_id: product_id, number: 1, name: product_title, variant_id: variant_id, childrenId: variant_id, item_price: price, source: 'add_to_cart', _extra: { aid: aid, ifb: ifb, cfb: cfb, scm: scm, spm: `..${window.SHOPLAZZA.meta.page.template_name}.${spm}`, ssp: ssp, } }; this.tranckAddToCart(params); }); this.registerAction('addATCHook', (data) => { const params = data.args; const spm = `smart_recommend_${this.show_type_}.${params.spmIndex}`; this.myInterceptor_ = window.djInterceptors && window.djInterceptors.track.use({ event: 'dj.addToCart', params: { aid: `smart_recommend.${this.show_type_}.` + params.rule_id, ssp: params.ssp, scm: params.scm, cfb: params.cfb, spm: `..${window.SHOPLAZZA.meta.page.template_name}.${spm}`, }, once: true }); }); } tranckAddToCart(detail) { if (window.$) { window.$(document.body).trigger('dj.addToCart', detail); } } fetchRules() { const payload = { show_type: this.show_type_, }; let that = this; if (this.show_type_ === 6) { let line_items = []; return this.fetchCart().then((res) => { if (res && res.cart && res.cart.line_items) { line_items = res.cart.line_items.map((item) => { return { product_id: item.product_id, variant_id: item.variant_id, quantity: item.quantity, price: item.price } }); } payload.line_items = line_items; that.cart_items_ = line_items; return that.fetchRulesRequest(payload); }); } else { if (this.show_type_ === 3) { payload.line_items = [{ product_id: this.product_resource_id_ }]; } else if (this.show_type_ === 4) { payload.collection_id = this.collection_resource_id_; } else if (this.show_type_ === 7) { payload.customer_id = this.customer_id_; } else if (this.show_type_ === 8) { payload.order_id = this.order_id_; } return this.fetchRulesRequest(payload); } } fetchRulesRequest(payload) { return fetch(window.SHOPLAZZA.routes.root + "/api/possum/recommend_query", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload) }).then(function(res){ if(res.ok){ return res.json(); } }); } fetchCart() { return fetch(`/api/cart/cart-select?r=${Math.random().toString(36).slice(-4)}`) .then((res) => { if (res.ok) { return res.json(); } }); } fetchRuleProductList(rule_id) { const payload = { page: 1, limit: 100, fields: ["title", "url", "image", "min_price_variant.price", "min_price_variant.compare_at_price"], rule_id: rule_id, }; if (this.show_type_ === 3) { payload.line_items = [{ product_id: this.product_resource_id_ }]; } else if (this.show_type_ === 4) { payload.collection_id = this.collection_resource_id_; } else if (this.show_type_ === 6) { payload.line_items = this.cart_items_; } else if (this.show_type_ === 7) { payload.customer_id = this.customer_id_; } else if (this.show_type_ === 8) { payload.order_id = this.order_id_; } return fetch(window.SHOPLAZZA.routes.root + "/api/possum/recommend_products", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload) }).then(function(res){ if(res.ok){ return res.json(); } }).catch(function(err){ console.log(err); }); } fetchProductData(product_id) { return fetch(window.SHOPLAZZA.routes.root + "/api/possum/products", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ product_ids: [product_id], fields: [ "images", "options", "min_price_variant", "variants"] }) }).then(function(res){ if(res.ok){ return res.json(); } }).catch(function(err){ console.log(err); const loadingEl = document.getElementById('smart_recommend_loading'); if (loadingEl) { loadingEl.style.display = 'none'; } }); } getStyle(ele, style) { if (!ele) return; if (window.getComputedStyle) { return window.getComputedStyle(ele)[style]; } return ele.currentStyle[style]; } directTo(id, direction) { const scrollElement = document.getElementById(`smart_recommend_rule_ul_${id}`); const blockWidth = parseInt(this.getStyle(scrollElement, 'width')); const scrollLength = (blockWidth * 0.19 - 12) * 5; const scrollPoint = scrollElement.scrollWidth - scrollElement.clientWidth; if (!scrollElement) return; if (direction === 'left') { if (document.dir === 'rtl') { scrollElement.scrollTo({ left: Math.abs(scrollElement.scrollLeft) >= scrollPoint - 100 ? 0 : scrollElement.scrollLeft - scrollLength, behavior: 'smooth' }); return; } scrollElement.scrollTo({ left: Math.max(scrollElement.scrollLeft - scrollLength, 0), behavior: 'smooth' }); } else { if (document.dir === 'rtl') { scrollElement.scrollTo({ left: Math.abs(scrollElement.scrollLeft) >= scrollPoint + 100 ? 0 : scrollElement.scrollLeft + scrollLength, behavior: 'smooth' }); return; } scrollElement.scrollTo({ left: scrollElement.scrollLeft >= scrollPoint - 100 ? 0 : scrollElement.scrollLeft + scrollLength, behavior: 'smooth' }); } } trackRuleImpress(rule) { if (window.sa && window.sa.track) { window.sa.track("plugin_common", { plugin_name: "upsell", event_type: "impressions", rule_id: rule.id, ssp: rule.ssp, scm: rule.scm, show_type: this.show_type_, support_app_block: window.SHOPLAZZA.theme.support_app_block }); window.sa.track("module_impressions", { aid: `smart_recommend.${this.show_type_}.${rule.id}`, support_app_block: window.SHOPLAZZA.theme.support_app_block }); } } trackQuickShop(data) { window.sa && sa.track && sa.track("plugin_common", { plugin_name: "upsell", event_type: "quick_shop", rule_id: data.rule_id, product_id: data.product_id, show_type: this.show_type_, }); } impressListen(selector, cb) { const el = document.querySelector(selector); const onImpress = (e) => { if (e) { e.stopPropagation(); } cb(); }; if (el && !el.getAttribute('imprsd')) { el.addEventListener('impress', onImpress) } else if (el) { onImpress(); } } } SPZ.defineElement('spz-custom-smart-block', SpzSmartBlockComponent);