🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺
🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺

🌵🌹 Dive into Desert Beauty: Desert Rose Seeds for Your Tranquil Haven!-Various Colors🌱Long Flowering Period 🏜️🌺

Price

$16.99 $14.99
7018 sold
It's been recommended by 12.3K people on Facebook, Twitter and instagram

color - Mixed Color

Please select a color

quality

Please select a quality

Quantity

🎁💐Don't forget to get some for your family and friends as it's a unique gift idea.
✅ Guaranteed! GoogleTrusted Store!
🛒 Payments Via PayPal® and CreditCard
🚢 Shipping>>Worldwide Express Shipping Available.
💵The merchant deposit of USD 100,000 has been paid to PayPal.

Characteristics:
The Desert Rose, scientifically known as Adenium obesum, is a striking and resilient succulent known for its unique, sculptural appearance. Native to the arid regions of Africa and the Middle East, this plant is prized for its thick, swollen trunk (caudex), which stores water, and its vibrant, trumpet-shaped flowers.

Product Highlights:

Exotic desert blooms in vibrant hues. 🌺🌵 Thrives in arid, sunny conditions, perfect for desert-themed gardens. ☀️🏜️ Easy to grow, suitable for gardeners of all levels. 👩‍🌾🌱

Planting Instructions:

Select a sunny spot with well-draining soil. Plant seeds in a container or directly in the soil, covering them lightly with soil. Water sparingly to replicate desert conditions, avoiding overwatering. Watch your Desert Rose bloom in all its desert glory! 🌹✨

Transform your garden into an oasis of tranquility with our Desert Rose Seeds and embrace the beauty of arid landscapes! 🌵🌸

Legend has it that in a desolate desert, there lies a miraculous stone with a pair of seeds inside. After millions of years of wind and sun exposure, the seeds absorbed the essence of the sun and the moon, finally sprouting from the stone and blooming into magnificent flowers resembling roses. The two plants are intertwined, mutually dependent; if one dies, the other won't survive alone. Even today, the desert rose is regarded as a symbol of love, often given as a gift on Valentine's Day to express enduring affection and unwavering commitment.💕


Package Includes 

 Seeds Quantity of 20pcs-200pcs (your choice).


💐WHY US

We work directly with manufacturers all over the world to ensure the best quality of our products. We have a Quality Control department which helps us to keep our promise!
  • 🔥Price is always competitive.
  • 😊Awesome Customer Service.
  • 🏆Amazing products along with High Quality.
  • 🍭Read reviews from our lovely customers.

💰 PAYMENT METHOD

Payments Via PayPal®Debit and Credit Card.

If you want to checkout with a Debit or Credit Card, just enter your Card number, Expires and CSC.

🌎WORLDWIDE SHIPPING✈  

Please note that shipping is insured. However, you may receive your items earlier. Tracking Numbers will ALWAYS be sent so you can track it every step of the way! Cool things are worth waiting for! 😉

📦OUR WAREHOUSE

Please consider any holidays that might impact delivery times. Please consider the transportation methods and unexpected situations that may affect the delivery time.

Customer Reviews
Write a Review
Customer Reviews
Wow you reached the bottom
Newest
Most liked
Highest ratings
Lowest ratings
×
class SpzCustomFileUpload extends SPZ.BaseElement { constructor(element) { super(element); this.uploadCount_ = 0; this.fileList_ = []; } buildCallback() { this.action = SPZServices.actionServiceForDoc(this.element); this.registerAction('upload', (data) => { this.handleFileUpload_(data.event?.detail?.data || []); }); this.registerAction('delete', (data) => { this.handleFileDelete_(data?.args?.data); }); this.registerAction('preview', (data) => { this.handleFilePreview_(data?.args?.data); }); this.registerAction('limit', (data) => { this.handleFileLimit_(); }); this.registerAction('sizeLimit', (data) => { this.handleFileSizeLimit_(); }); } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } setData_(count, file) { this.uploadCount_ = count; this.fileList_ = file; } handleFileUpload_(data) { data.forEach(i => { if(this.fileList_.some(j => j.url === i.url)) return; this.fileList_.push(i); }) this.uploadCount_++; sessionStorage.setItem('fileList', JSON.stringify(this.fileList_)); this.triggerEvent_("handleFileUpload", { count: this.uploadCount_, files: this.fileList_}); if(this.fileList_.length >= 5){ document.querySelector('#review_upload').style.display = 'none'; } if(this.fileList_.length > 0){ document.querySelector('.apps-reviews-write-anonymous-box').style.marginTop = '8px'; } } handleFileDelete_(index) { this.fileList_.splice(index, 1); this.uploadCount_--; sessionStorage.setItem('fileList', JSON.stringify(this.fileList_)); this.triggerEvent_("handleFileDelete", { count: this.uploadCount_, files: this.fileList_}); document.querySelector('#review_upload').style.display = 'block'; if(this.fileList_?.length === 0){ document.querySelector('.apps-reviews-write-anonymous-box').style.marginTop = '132px'; } } handleFilePreview_(index) { const finalPreviewData = this.fileList_[index]; const filePreviewModal = document.getElementById('filePreviewModal'); const fullScreenVideo = document.getElementById('fullScreenVideo'); const fullScreenImage = document.getElementById('fullScreenImage'); const previewModalClose = document.getElementById('previewModalClose'); const previewLoading = document.getElementById('previewLoading'); filePreviewModal.style.display = 'block'; previewLoading.style.display = 'flex'; if(finalPreviewData?.type === 'video'){ const media = this.mediaParse_(this.fileList_[index]?.url); fullScreenVideo.addEventListener('canplaythrough', function() { previewLoading.style.display = 'none'; }); fullScreenImage.src = ''; fullScreenImage.style.display = 'none'; fullScreenVideo.style.display = 'block'; fullScreenVideo.src = media.mp4 || ''; } else { fullScreenImage.onload = function() { previewLoading.style.display = 'none'; }; fullScreenVideo.src = ''; fullScreenVideo.style.display = 'none'; fullScreenImage.style.display = 'block'; fullScreenImage.src = finalPreviewData.url; } previewModalClose.addEventListener('click', function() { filePreviewModal.style.display = 'none'; }); } handleFileLimit_() { alert(window.AppReviewsLocale.comment_file_limit || 'please do not upload files more than 5'); this.triggerEvent_("handleFileLimit"); } handleFileSizeLimit_() { alert(window.AppReviewsLocale.comment_file_size_limit || 'File size does not exceed 10M'); } clear(){ this.fileList_ = []; this.uploadCount_ = 0; sessionStorage.setItem('fileList', JSON.stringify(this.fileList_)); this.triggerEvent_("handleClear", { count: this.uploadCount_, files: this.fileList_}); document.querySelector('#review_upload').style.display = 'block'; } mediaParse_(url) { var result = {}; try { url.replace(/[?&]+([^=&]+)=([^&]*)/gi, function (str, key, value) { try { result[key] = decodeURIComponent(value); } catch (e) { result[key] = value; } }); result.preview_image = url.split('?')[0]; } catch (e) {}; return result; } triggerEvent_(name, data) { const event = SPZUtils.Event.create(this.win, name, data); this.action.trigger(this.element, name, event); } } SPZ.defineElement('spz-custom-file-upload', SpzCustomFileUpload);
The review would not show in product details on storefront since it does not support to.
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 }); }); }); 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);