🌸2024 HOT SALE🌱GREEN GRASS & PEST CONTROL LAWN SPRAY

$89.99
$242.87
Save 63%
Package Contains : 🔥🔥🔥1 SPRAY POT-A + 12 LIQUID (BEST PRICE)
Quantity
The current produc does not participate any Rebate. Switch the participating product to check the design.
(This prompt will not be displayed on the client-side.)
people are viewing this right now
/** @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);
Description

Each kit can reseed a 100-foot square area / 10 square meters.

At some point in life, every one of us has seen foamy, green liquid being sprayed on areas and pavements around highways to plant grass seeds by professionals. 

If you are a traditional lawn owner you may have never seen spray-on grass seed, or perhaps you thought it was only done by professionals. That’s not the case.

Safe and Harmless

One week after the grass is completely covered, pets and children can freely play on the lawn. This product has been tested, please rest assured that your pet will like their new synthetic grass🐶

New upgrade: after research, it can quickly kill insects such as crickets, carpenter ants, harvester ants, ladybugs and ear borers while ensuring your pet's health and provides up to 12 weeks of control.

Spray-on grass seed, often known as “hydroseeding” is the process of spreading grass seed using a pre-mixture liquid. It’s like spray painting your lawn but instead of paint it’s a mixture of (mostly) water, grass seed, mulch, bonding agent,  so the water pressure available through a garden hose is enough to spread the mixture.

The pressure of the hose can give the grass seed some penetration into the soil, giving the grass a better chance early in life. Most of us have had expensive grass seed fail enough times that we want an edge we can get. Birds also don’t like the mulch component of the spray-on seed so this helps give your baby grass a chance.

The product does not contain seeds.

Say goodbye to those dry spots, dog spots, high traffic areas, and shade. Green Grass Lawn Spray lets you easily plant and grow new grass exactly where you want it. 

Attach to any garden hose and you can clearly show where you are planting as you spray. 

Just spray the green mousse and seed formula onto the problem lawn areas and the eco-friendly solution attaches the seed to the soil - then watch it grow! (Seeds are not included, you need to buy them yourself)

The Ultimate Solution For A Luscious Green Lawn!

【HOT SALE】   Buy more save move

BUY 10 LIQUID GET 10 FREE - 20 Liquid & FREE SHIPPING (Special Offer)

2 Fl Ounce(59 ml) in a bottle of LIQUID. (Dilute with water before use)

PROS:

  1. Easy to use
  2. Demonstrate results within two weeks at maximum
  3. Suitable for filling in bare patches from dog potty spots
  4. The special formula contains patented seed grass technology that promotes the growth of any variety of grass. Within just a few weeks, your patchy lawn will grow with thick, green, and luscious blades of grass!

SPECIFICATIONS:

Material: PP+ABS

Size: 24 x 23 x 13cm/ 9.44 x 9.06 x 5.12in

Place: Garden/Patio/Lawn

PACKAGE INCLUDES:

1 x Sprayer/LIQUID/Sprayer+LIQUID(73g)

 

FAQs

1、Will rain wash spray-on grass seeds away?

No, a typical rain storm my wash away some of the green coloring that comes with your hydroseed but it shouldn't displace the grass seeds. If you get an exceptionally heavy storm right after hydroseeding and you have an erosion-prone lawn there may be some issues, but this is typically not a concern.

2、Do birds eat spray-on grass seed?

While it's always difficult to keep birds away from seeds, generally birds will keep away from hydroseed because the mulch component of the spray-on seed is not something they want to eat. Hydroseed, especially when professionally applied, is driven into the soil as opposed to sitting on top of it, which also discourages birds.

3、Can you use spray-on grass seed on a hill?

Spray-on grass seed will work on a hill but you should avoid putting it on extremely steep slopes as it can cause run-off and clumping of your seeds lower down the hill than you'd like.

PLANTING TIME: Pour the entire bag of grass seed and liquid into the canister.

With the dial in the off position, connect the hose and turn on the water.

Rotate the dial to "light seed ill the canister 34 full of water, then turn the water off for at least 1 minute.

This allows for the proper coating of the seeds. Once you've waited 1 minute, turn the water on to start seeding!

 📦 Insured Worldwide Shipping: Each order includes real-time tracking details and insurance coverage in the unlikely event that a package gets lost or stolen in transit.

✉️ 24/7 Customer Support: We have a team of live reps ready to help and answer any questions you have within a 24-hour time frame, 7 days a week.

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

👉 OUR GUARANTEE:
We take pride in our products as we believe they are amazing. However, we understand that buying things online can be daunting, especially for the first time, so we offer a 100% satisfaction guarantee.
If you don't have a positive experience for any reason, we will do whatever it takes to make sure you are 100% satisfied with your purchase.


🔒Paypal and credit card secure payment.🏪PalPay certified reputable merchant.💵Has paid 100k USD in PayPal as store guarantee

📦If the product does not meet your expectations or the size is wrong, we will contact our partner logistics provider to pick it up and refund or replace the product to ensure you have a pleasant shopping experience

Shipping & Delivery

🌏We offer Worldwide Tracked Shipping on all orders.🌎

Our goal is to offer you the best shipping options no matter where you live. Every day we deliver to hundreds of customers across the world, ensuring that we provide the very highest levels of responsiveness at all times.

Shipping and Delivery:

  • Standard Delivery--Free Shipping : Over 69.99 dollars 
  • Deliveries are typically made Monday to Friday between 8:00am - 6:00pm
  • Working days are: Monday to Friday (and do not include public holidays or weekends)
  • We do not ship orders on weekends or holidays. 
  • Shipping: U.S. orders fulfill and ship within 1-3 business days followed by 7-10 business days transit time for most products in the store. With delays in shipping worldwide, some products may take 1-2 weeks transit time.  We strive to get our customers their items in a timely manner with the current worldwide supply chain delays. Feel free to inquire about shipping times for specific products at hezizi0215@gmail.com
  • Shipping methods:4PX、YunExpress、Wanb Express、UBI

    Our Guarantee:

    • All your orders have a 14-day money-back guarantee!
    • Sometimes your orders can get lost/damaged on their journey to you. If this occurs, we will send you a replacement free of charge! Just contact our support team at hezizi0215@gmail.com and we will get in touch with you as soon as possible!

    Please Note: We may ask you to send us a picture of the damaged product before shipping the replacement.

    Important Remarks

    • Refunds are not given on free items. However, replacements are given for items lost while shipping.
    • Replacements are sent up to 7 days after receiving your item.
    • For more information about refunds, please read our Refund Policy.

    Tracking your order:

    To track your order, we will send you all the tracking information to your e-mail.

    Please note that your tracking number is the one we send automatically when we ship your order (it can take up to 2 days). 

    If you cannot find your tracking number, please get in touch with us at hezizi0215@gmail.com



    CONTACT US

    hezizi0215@gmail.com

    Refund Policy

    We are committed to providing customers with the best online shopping experience and satisfaction. We welcome your feedback and strive to improve the customer’s shopping experience. At the same time, we work hard to deal with your feedback. We are ready to provide customers with services that surpass everything.

    If you are not completely satisfied with your purchase, you may return or exchange your item within 14 days. Please note that the return period starts from the day you receive your order.

    HOW DO I RETURN AN ITEM?

    If you check that there is a fault with an item or wrong item you have received, please contact us within 14 days from receiving your order.

    Please provide your order number as well as the reason for your return. Our customer service team will review the return request and will send further instructions if the return is approved.

    Returned items must be in original packaging, including any accessories, manuals, and documentation. If the condition of the product shipped back to us is not in an acceptable condition we reserve the right to not refund or exchange.

    ·Non-returnable items include damaged products through customer mishandling.

    ·Returns made without a receipt may be refused.

    ·The return address will be obtained after contacting customer service to obtain the returned consent.

    WHAT IF THE ITEM(S) I RECEIVED ARE DEFECTIVE/INCORRECT/DAMAGED?

    Did you receive a faulty unit or the wrong product? Simply not satisfied with your order?

    Please contact our Customer Support team to start the return process. Please include the following information:

    ·Order number

    ·Proof of purchase(Order Summary)

    ·Video or photo of the faulty product

    In some cases, you may be required to include a video or photo of the defective product for proof in order to refund or replace the product. If a return or refund is required, for this reason, the original freight and return freight shall be borne by us.

    WHEN I CAN RECEIVE MY REFUND?

    Once your return is received and inspected, we will send you an email to notify you that we have received your returned item. We will also notify you of the approval or rejection of your refund within 3-5 business days. If you are approved, then your refund will be processed, and a credit will automatically be applied to your credit card or original method of payment, within a certain amount of days.

    Your refund will deduct the original shipping cost. At the same time, you need to bear the return shipping cost, except for damaged packages.

    WHO IS RESPONSIBLE FOR THE SHIPPING COSTS?

    If the product is not usable, due to our fault (such as size, improper damage, or quality problems), we will bear the freight for replacement and rescheduling of the returned product and the return, but if you purchase the product by mistake or error, you will have to bear the freight for the original shipping and return.

    FAQ

    FAQ

    How Do I Cancel An Order?

    We are only able to cancel orders within the first 12 hours after the order is placed. After that the order has most likely been processed and is preparing for shipment or has been shipped. Once this takes effect, it's out of our hands. We apologize for any inconvenience this may cause, but we pride ourselves on prompt service and this includes getting your orders out as fast as possible.

    When Will My Order Ship?

    Orders are usually processed and shipped within 3 working days of purchase.

    How Long Does Shipping Take?

    Shipping times vary as we do ship worldwide from different fulfillment centers based on your location. Average shipping time is about 7 to 15 working days. Your tracking number will be updated 3-7 days after your order has been shipped. 

    IS MY INFORMATION SECURE USING THIS SITE?

    Yes, we use the latest technology to ensure your information is secure. To get more information, please read our privacy policy

    Orders & Payments

    Q: What payment methods do you accept?
     
    PayPal Express
    PayPal Credit
    All major Credit/Debit Cards
    A: PayPal Express is a secure and fast way to purchase our products online. PayPal already has your details, so just provide your email address and password to safely complete your online purchase.
     
    Q: How can I know if my order has been placed successfully?
     
    A: When your order is placed successfully, you will receive an order confirmation email. The status of your order can be check by visiting the Track My Order. If you have not received the order confirmation email, it may be that your email is full and cannot be successfully accepted, or it may be a system problem. Anyway, when it happens, please contact us in time.
     

    Shipping & Delivery

    Q: Where can I find the tracking information for my orders?
     
    A: All tracking numbers can be found in the shipping notification emails we send out. Tracking information can be found in the shipping notification emails we send out.
     
    Note that international shipment tracking may take up to a few days to display any updates but that doesn't necessarily mean the shipment is lost.
     
    Q: Is tracking available for my order? 
     
    A:We depend on the international network of logistics services such as DHL, FedEx, and UPS. Along with these, we also rely on local postal service providers like USPS so that your order could be delivered to you in the shortest time possible. That’s the reason why tracking may not be available sometime.
     
    Note: All orders delivered within the United States by USPS have full tracking available! For international orders, full tracking will only be available when sent via International Priority - which costs a bit more. 
     
    Q: Where do my orders ship from? 
     
    A:We have our third-party factories located in different parts of the world. Each one of them manufactures particular products and caters to different geographical locations. We make sure your orders are producted in the most suitable location catering to the delivery address you provided for fast and affordable shipping!
     
    Q: What if the recipient’s address was wrong?
     
    A:If the recipient’s address was wrong, please contact us in time. Once the order is shipped, then you are held responsible. You would have to bear the reshipment charges. 
     
    Q: What happens if a package wasn’t delivered to me, but the tracking states that it was?
     
    A:If the package was marked as delivered, but you have yet to receive it, please contact us in time.
     
    There may be cases where the delivery was made, but the package was left in an unexpected location at the your address. You should reach out to the carrier and inquire if any additional details were left by the delivery person. For example: “Left under the table on the back porch.”
     

    Returns & Exchanges

    Q: What is your return policy?
     
    A: We offer a 14-day return & exchange policy, because we would like to make you feel comfortable when shopping at Leemtybd.. Please refer to Returns & Exchanges for details.
     
    If you have any questions, please contact us, we will deal with it as soon as possible.

    Thank you for visiting

    Leemtybd focuses on discovering unique and personalized products for European and American consumers, we stick to our service and strive for 100% customer satisfaction. You can click on our classified collection album to find your favorite products
    SAFE PAYMENT
    Pay securely with your favorite Credit Card provider or PayPal!
    FREE SHIPPING
    Free Premium Shipping with Track and Trace, every order, every day!
    100% MONEY BACK
    14 day money back guaranteed. No questions asked!
    SUPPORT 24/7
    We're happy to help! We reply within 24 hours/7 days a week.
    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);