šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
1/25
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System
1/25

šŸ”„šŸ”„šŸ”„šŸŽ2024 New Year Hot SalešŸŽ- 49% OFFšŸ”„šŸ”„šŸ”„Disposable Toilet Cleaning System

$34.99
$69.99
Save $35.00
fragrance
Please select a fragrance
choose
Please select a choose
Quantity
/** @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-1539149753700').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);

FEATURES

  • 怐Toilet Cleaner Kit怑: This toilet brush kit includes 1 cleaning wand, 1 storage caddy, and 6 disposable sponge brush heads.

  • 怐Disposable Sponges Heads怑: The toilet refill heads are preloaded with toilet cleaner which will be released after soaking the brush head in water, helping you thoroughly clean the upper toilet area, around the bowl, and far into the U-bend of the toilet.

  • 怐Easy to replace怑: Pressing the button on the toilet handle can discard the disposable sponge head after cleaning the toilet, convenient and hygienic in use. No more worry about breeding bacteria and stink!

  • 怐Toilet Bowl Brush Holder怑: The storage caddy can hold the brush handle and store the refill heads. The widened base design allows easy access to items.

  • 怐Convenient Bathroom Cleaner Kit怑: This disposable toilet brush with holder can not only be used to clean the toilet but also can be used to clean the sink, bathroom glass, and floor stains, is a great helper for home cleaning.

SPECIFICATIONS

  • Item Type: Cleaning Tool

  • Material: Plastic

  • Color: White

  • Size: As Shown

PACKAGE

  • 1 * Disposable Toilet Cleaning System(1*Toilet brush+18PCS Brush head)

NOTE

  • Please allow slight measurement deviations due to manual measurement.

  • Due to the different monitor and light effect, the actual color of the item might be slightly different from the color showed in the pictures.

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('appzebu 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);