Automatic Fish Feeder
               
            
        
          
              
              
            
        
          
              
  
  
    ${function(){
      const variant = data.variant;
      const price = "36.99";
      const priceMax = "36.99";
      const saveType = "amount";
      const saveText = "Save {off_ratio}";
    return `
    
      
        
      
        
            ${saveText.replace('{off_ratio}', saveType == 'percent' ? variant.off_ratio + '%' : `
        
        
       
      
     
    ` }()}
   
 
              
            
        
          
              
                
              
          
        
          
              
                
  
    The current produc does not participate any Rebate. Switch the participating product to check the design.
    
 
 
  
  ${function() {
    const show = rebate.format_rules.length > data.maxShowCount;
    
    return `
    
      
      
      
      
        
          ${rule}
         
        
       
      ${function() {
        if(!show) return "";
        return `
        
          
 
        `;
      }()}
    
 
    `;
  }()}
  
     
   
  
      
      ${originData.rebate.format_rules.join(", ")} 
       
   
 
  var theme = window.C_SETTINGS && C_SETTINGS.theme && C_SETTINGS.theme.merchant_theme_name;
  var isFlash = /Flash/gi.test(theme);
  var isGeek = /Geek/gi.test(theme);
  var isNova23 = /Nova 2023/gi.test(theme);
  var isWind = /Wind/gi.test(theme);
  var isOnePage = /OnePage/gi.test(theme);
  var isHero = /Hero/gi.test(theme);
  var isBoost = /Boost/gi.test(theme);
  var isEva = /Eva/gi.test(theme);
  var isFarida = /Farida/gi.test(theme);
  var isPluto = /Pluto/gi.test(theme);
  var isLifeStyle = /Life Style/gi.test(theme);
  
  if(window.self === window.top) {
    (window.disabled_exts ||=[]).push('product_detail_rebate');
  }
  class SpzRebateComponent extends SPZ.BaseElement {
    constructor(element) {
      super(element);
    }
    xhr_ = SPZServices.xhrFor(this.win);
  
    viewport_ = this.getViewport();
  
    action_ = null;
    
    lang = document.documentElement.lang || 'en-US';
  
    landPage = "\/promotions\/rebate\/";
  
    pageType = 1;
  
    cart = [];
  
    initData = null;
  
    rebateInfo = null;
  
    renderData = null;
  
    footerImage = `${this.win.SHOPLAZZA["image_domain"]}oss/operation/e8ebb03dbb710457ca3b4b6a70898ab2.svg`;
  
    isLayoutSupported(layout) {
      return layout == SPZCore.Layout.LOGIC;
    }
  
    buildCallback() {
      this.initData = this.getProduct();
      this.action_ = SPZServices.actionServiceForDoc(this.element);
  
      this.registerAction("triggerGetRenderData", () => {
        
        const event = SPZUtils.Event.create(this.win, "triggerGetRenderData", this.renderData);
        this.action_.trigger(this.element, "getRenderData", event);
      });
  
      this.registerAction("bindPropagation", () => {
        document.querySelector(".product_detail_rebate_list").addEventListener("click", e => {
          e.stopPropagation();
  
          
          this.win.sa &&
            this.win.sa.track("plugin_rebate_promotion_click", {
              plugin_timestamp: Date.now(),
              plugin_location: "info",
              product_id: this.initData.product.id,
              discount_id: this.rebateInfo.discount_list.map((item) => item.discount_id)[0],
            });
        });
      });
    }
  
    async mountCallback() {
      document.addEventListener("dj.variantChange", e => {
        const data = e.detail;
        if (document.querySelector("#product-select-modal.show")) return;
  
        if (this.initData && this.initData.product && data.product && this.initData.product.id === data.product.id) {
          this.initData = data;
          this.initRebate(this.initData, true);
        } else {
          this.initData = data;
          this.getRebateInfo();
        }
      });
  
      document.addEventListener("dj.addToCart", e => {
        const v = e.detail;
        this.rebateInfo &&
          this.win.sa &&
          this.win.sa.track("plugin_rebate_atc", {
            variant_discount_id: this.getVariantDiscountId(v.variant_id).map(item => item.discount_id),
            discount_ids: this.rebateInfo.discount_list.map(item => item.discount_id),
            variant_id: v.variant_id,
            product_id: v.product_id,
            price: v.item_price,
            number: v.number,
          });
      });
  
      
      await this.getRebateInfo();
  
      
      if (document.querySelector(".plugin-container__bottom-fixed")) {
        this.showDiscountPopupsInfoBar();
      } else {
        this.win.addEventListener("extloaded", () => {
          this.showDiscountPopupsInfoBar();
        });
      }
    }
  
    getProduct = (() => {
      
      document.addEventListener("dj.variantChange", e => {
        if (!e.detail || !e.detail.product) return;
  
        const productJson = document.querySelector("#product-json");
        if (productJson && productJson.textContent && JSON.parse(productJson.textContent)) {
          productJson.textContent = JSON.stringify(e.detail);
        }
  
        if (this.win.jQuery && this.win.jQuery.fn && this.win.jQuery(document).data("djproduct")) {
          this.win.jQuery(document).data("djproduct", e.detail);
        }
      });
  
      return () => {
        let productData = null;
        if (this.win.jQuery && this.win.jQuery.fn) {
          
          try {
            let product = this.win.jQuery(document).data("djproduct");
            if (product) {
              productData = JSON.parse(JSON.stringify(product));
            } else {
              productData = null;
            }
          } catch (error) {
            productData = null;
          }
        }
        
        if (!productData) {
          const productJson = document.querySelector("#product-json");
          productData = (productJson && productJson.textContent && JSON.parse(productJson.textContent)) || null;
        }
  
        return productData;
      };
    })();
  
    
    initRebate = this.win.SPZCore.Types.debounce(
      this.win,
      (async (data, variantChange) => {
        let discount_list = Object.assign([], this.rebateInfo.discount_list);
        /* 按子商品的多少对优惠信息进行排序 */
        discount_list &&
          discount_list.sort((a, b) => {
            return b.variant_ids.length - a.variant_ids.length;
          });
  
        /* 选中子商品时 筛选子商品的优惠信息 */
        if (data.selected && data.selected.id) {
          discount_list = this.getVariantDiscountId(data.selected.id);
        }
  
        /* 无满减信息 */
        if (!(discount_list && discount_list.length)) {
          return;
        }
  
        const isSection = !!document.querySelector(
          `div[data-section-type^="shoplazza://apps/publicapp/blocks/rebate"] #rebate_custom_component`
        );
  
        if (
          (this.rebateInfo.rebate_type == "sku" && data && data.selected && data.selected.id) ||
          this.rebateInfo.rebate_type == "spu"
        ) {
          let nowLandpage = this.landPage;
          if (discount_list[0]) {
            nowLandpage = this.landPage + discount_list[0].discount_id || "";
          }
  
          const info = {
            rebate: discount_list[0],
            maxShowCount: this.win.innerWidth > 768 ? 3 : 1,
            landPage: nowLandpage,
            modalFooterImg: `url(${`${this.win.SHOPLAZZA["image_domain"]}oss/operation/e8ebb03dbb710457ca3b4b6a70898ab2.svg`})`,
          };
          this.renderData = info;
          if(isSection) {
            SPZ.whenApiDefined(
              document.getElementById("app_rebate_section")
            ).then(apis => {
              apis.render(info, true);
            });
          } else {
            // 重新渲染 抖动问题处理
            this.templates_ = SPZServices.templatesForDoc();
            const newTplDom = await this.templates_.renderTemplate(document.querySelector('#appRebateBlockTpl'), info)
            const parentDiv = document.querySelector('#app_rebate_block');
            const oldDom = parentDiv.querySelector('.app_rebate_list');
            if(oldDom){
              parentDiv.replaceChild(newTplDom, oldDom);
            } else {
              parentDiv.appendChild(newTplDom);
            }
          }
          
        }
  
        this.insertProductDetailRebateTag(this.rebateInfo.tag, variantChange);
  
        var pluginCurrencyEvent = new CustomEvent("plugin_currency_update");
        document.dispatchEvent(pluginCurrencyEvent);
      }).bind(this),
      10
    );
  
    getRebateInfo = async () => {
      
      if (this.initData && this.initData.product && this.initData.product.id) {
        var variant_ids = this.initData.product.variants.map(variant => variant.id);
        const res = await this.xhr_.fetchJson(
          "\/api\/discount-rebate\/product-discount",
          {
            method: "POST",
            body: {
              product_id: this.initData.product.id,
              product_type: this.initData.product.product_type,
              variant_ids: variant_ids,
            },
          }
        );
  
        if (!SPZCore.Types.isEmptyObject(res.rebate_info)) {
          res.rebate_info.tag = res.tag;
          res.rebate_info.rebate_type = res.rebate_type;
          this.rebateInfo = res.rebate_info;
          this.initRebate(this.initData);
        } else {
          
          if (this.win.top !== this.win.self) {
            const noActivity = document.getElementById("no-rebate-activity");
            noActivity && (noActivity["style"].display = "block");
          }
        }
      }
    };
  
    getVariantDiscountId = (variant_id) => {
      if (!variant_id || !this.rebateInfo) return [];
      var rebateId = this.rebateInfo.variant_discount_map[variant_id];
      return this.rebateInfo.discount_list.filter(item => item.discount_id == rebateId) || [];
    };
  
    insertProductDetailRebateTag = (tag, variantChange) => {
      if (!tag) return 
      // 旧判断逻辑
      const productSelectModal = document.querySelector('#product-select-modal');
      if (productSelectModal && productSelectModal.classList.contains('show')) {
        return;
      }
      setTimeout(() => {
        var $tag_container = [];
        if (isNova23) {
          $tag_container = document.querySelectorAll('.product-details .product-images-container');
        } else if (isFlash) {
          $tag_container = document.querySelectorAll('.product-detail .product-images .product-main-images-container');
        } else if (isGeek) {
          $tag_container = document.querySelectorAll('.product-images #product-images-inner-container spz-carousel .i-spzhtml-slide-item');
        } else if (isWind) {
          $tag_container = document.querySelectorAll('.product-detail .product-images-container .i-spzhtml-slides-container'); 
        } else if (isOnePage) {
          $tag_container = document.querySelectorAll('.product-details .product-main-images');
        } else if (isHero) {
          $tag_container = document.querySelectorAll('.product-detail #product-images-container #product-images-carousel .spz-carousel-slide'); 
        } else if (isBoost) {
          $tag_container = document.querySelectorAll('.boost-product-detail .product-image__layout-list .slides .slides-item .product-info__slide .slider-zoom');
        } else if (isEva) {
          $tag_container = document.querySelectorAll('.page_container [data-section-type="product"] .support-slick');
        } else if (isFarida) {
          $tag_container = document.querySelectorAll('.product-details .product-images-container');
        } else if (isLifeStyle) {
          $tag_container = document.querySelectorAll('.page_container [data-section-type="product_detail"] .sep-slider,.support-slick');
        } else if (isPluto) {
          $tag_container = document.querySelectorAll('.page_container [data-section-type="product_detail"] .sep-slider,.support-slick');
        }
        if($tag_container.length === 0) return;
        // 给商祥页添加满送插件的标识属性
        const $product_container = document.querySelector('.product-details, .product-details, .page_container, .product-images, [data-section-type="product"]')
        if($product_container) {
          $product_container.setAttribute('data-rebate-tag', 'true');
        }
        // 部分主题需要调整样式
        if (isWind) {
          Array.from($tag_container).forEach(container => {
            container.style.position = 'relative';
          });
        }
        document.querySelectorAll('.slider-discount-tag.dj_skin_product_title.rebate-tag').forEach(tag => tag.remove());
        // 遍历所有容器并插入标签
        Array.from($tag_container).forEach(container => {
          container.insertAdjacentHTML('beforeend', `<div class="slider-discount-tag dj_skin_product_title rebate-tag">${tag}</div>`);
        });
      }, 1000)
    };
  
    fetchInfoBar = () => {
      let discount_ids = [];
      if (this.pageType === 1) {
        discount_ids = this.rebateInfo && this.rebateInfo.discount_list.map(item => item.discount_id);
      } else if (this.pageType === 38) {
        
        discount_ids = [this.win.rebateObj.rebateCollection_id] || [];
      }
      const productObj = this.getProduct();
  
      return this.xhr_.fetchJson("\/api\/discount-rebate\/global-text", {
        method: "POST",
        body: {
          product_type: productObj && productObj.product && productObj.product.product_type,
          line_items: (this.cart.line_items || []).map(item => ({
            variant_id: item.variant_id,
            product_id: item.product_id,
            quantity: item.quantity,
            price: item.price,
            selected: !item.unchecked,
          })),
          
          discount_ids: discount_ids,
        },
      });
    };
  
    renderBottomBanner = res => {
      if (!res.tips) return;
      if (document.querySelector(".discount__info-bar")) return;
      var bar_style = `background:linear-gradient(90deg,${res.config.background_color_start},${res.config.background_color_end}); color:${res.config.color};`;
  
      
      let data = { tips: res.tips, landPage: this.landPage + res.id, bar_style };
  
      const html = SPZCore.Dom.htmlFor(this.element);
      const banner = html([
        `<a impr="1" imprevt="1" id="rebate_bottom_bar" href=${data.landPage} class="discount__info-bar text-truncate" data-activity-type="rebate" style="${data.bar_style}">${data.tips}</a>`,
      ]);
  
      document.querySelector(".plugin-container__bottom-fixed").appendChild(banner);
  
      const pluginCurrencyEvent = new CustomEvent("plugin_currency_update");
      document.dispatchEvent(pluginCurrencyEvent);
  
      if (res.id) {
        var trackParams = {
          page: this.pageType,
          discount_id: res.id,
          product_id: this.getProduct()?.product.id,
        };
  
        banner.addEventListener("click", () => {
          this.win.sa &&
            this.win.sa.track("plugin_rebate_promotion_click", {
              plugin_timestamp: Date.now(),
              plugin_location: "bottom_bar",
              product_id: trackParams.product_id,
              discount_id: trackParams.discount_id,
            });
        });
  
        
        this.win.sa && this.win.sa.track("plugin_rebate_banner_pv", trackParams);
      }
    };
  
    
    showDiscountPopupsInfoBar = () => {
      
      if ([13, 14, 19, 30, 31].includes(this.pageType)) return;
      if (document.querySelector(".plugin-container__bottom-fixed .discount__info-bar")) return;
  
      this.fetchInfoBar().then(this.renderBottomBanner);
  
      document.addEventListener("dj.cartChange", () => {
        this.fetchInfoBar().then(this.renderBottomBanner);
      });
    };
  }
  
  SPZ.defineElement("spz-custom-rebate", SpzRebateComponent);
 
              
          
        
          
              
            
        
          
              
            
        
          
              
  
  
    
      
    
  
  
    
      
        Add to cart 
        
          
             - $36.99 
            
              
                 - 
             
           
        
        
       
    
    
      
        Buy now 
        
       
    
    
       
            
        
          
              
  
            
        
          
              
  
    
      
         
    
       
  
          
        Free Shipping Over $69.99