Choniccra standishii-Love Fruit Seeds Choniccra standishii-Love Fruit Seeds

$9.99
/** * ไผ˜ๆƒ ็ ็ป„ไปถๆจกๅž‹็ฑป * ๅค„็†ไผ˜ๆƒ ็ ็š„ๆ˜พ็คบๅ’Œไบคไบ’้€ป่พ‘ */ class SpzCustomDiscountCodeModel extends SPZ.BaseElement { constructor(element) { super(element); // ๅคๅˆถๆŒ‰้’ฎๅ’Œๅ†…ๅฎน็š„็ฑปๅ this.copyBtnClass = "discount_code_btn" this.copyClass = "discount_code_value" } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } buildCallback() { // ๅˆๅง‹ๅŒ–ๆœๅŠก this.action_ = SPZServices.actionServiceForDoc(this.element); this.templates_ = SPZServices.templatesForDoc(this.element); this.xhr_ = SPZServices.xhrFor(this.win); } /** * ๆธฒๆŸ“ไผ˜ๆƒ ็ ็ป„ไปถ * @param {Object} data - ๆธฒๆŸ“ๆ•ฐๆฎ */ doRender_(data) { return this.templates_ .findAndRenderTemplate(this.element, Object.assign(this.getDefaultData(), data) ) .then((el) => { this.clearDom(); this.element.appendChild(el); // ็ป‘ๅฎšๅคๅˆถไปฃ็ ๅŠŸ่ƒฝ this.copyCode(el, data); }); } /** * ่Žทๅ–ๆธฒๆŸ“ๆจกๆฟ * @param {Object} data - ๆธฒๆŸ“ๆ•ฐๆฎ */ getRenderTemplate(data) { const renderData = Object.assign(this.getDefaultData(), data); return this.templates_ .findAndRenderTemplate(this.element, renderData) .then((el) => { this.clearDom(); return el; }); } /** * ๆธ…้™คDOMๅ†…ๅฎน */ clearDom() { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); } /** * ่Žทๅ–้ป˜่ฎคๆ•ฐๆฎ * @returns {Object} ้ป˜่ฎคๆ•ฐๆฎๅฏน่ฑก */ getDefaultData() { return { isMobile: appDiscountUtils.judgeMobile(), isRTL: appDiscountUtils.judgeRTL(), image_domain: this.win.SHOPLAZZA.image_domain, copyBtnClass: this.copyBtnClass, copyClass: this.copyClass } } /** * ๅคๅˆถไผ˜ๆƒ ็ ๅŠŸ่ƒฝ * @param {Element} el - ๅฝ“ๅ‰ๅ…ƒ็ด  */ copyCode(el) { const copyBtnList = el.querySelectorAll(`.${this.copyBtnClass}`); if (copyBtnList.length > 0) { copyBtnList.forEach(item => { item.onclick = async () => { // ็กฎไฟ่Žทๅ–ๆญฃ็กฎ็š„ๅ…ƒ็ด ๅ’Œๅ†…ๅฎน const codeElement = item.querySelector(`.${this.copyClass}`); if (!codeElement) return; // ่Žทๅ–็บฏๆ–‡ๆœฌๅ†…ๅฎน const textToCopy = codeElement.innerText.trim(); // ๅฐ่ฏ•ไฝฟ็”จ็ŽฐไปฃAPI๏ผŒๅฆ‚ๆžœๅคฑ่ดฅๅˆ™ไฝฟ็”จๅค‡็”จๆ–นๆกˆ try { if (navigator.clipboard && navigator.clipboard.writeText) { await navigator.clipboard.writeText(textToCopy); } else { throw new Error('Clipboard API not available'); } // ๆ˜พ็คบๅคๅˆถๆˆๅŠŸๆ็คบ this.showCopySuccessToast(textToCopy, el); } catch (err) { console.error('Modern clipboard API failed, trying fallback...', err); // ไฝฟ็”จๅค‡็”จๅคๅˆถๆ–นๆกˆ this.fallbackCopy(textToCopy, el); } const discountId = item.dataset["discountId"]; // ่ทณ่ฝฌๅ†ณ็ญ–: is_redirection + link(ๅฏ้€‰่ฆ†็›–) const setting = { is_redirection: item.dataset["redirection"] === "true", link: item.dataset["link"], }; const landingUrl = `/promotions/discount-default/${discountId}`; const finalUrl = appDiscountUtils.resolveDiscountHref(setting, landingUrl); if (finalUrl && appDiscountUtils.inProductBody(this.element)) { this.win.open(finalUrl, '_blank', 'noopener'); } } }) } } /** * ไฝฟ็”จ execCommand ็š„ๅคๅˆถๆ–นๆกˆ * @param {string} codeText - ่ฆๅคๅˆถ็š„ๆ–‡ๆœฌ * @param {Element} el - ๅฝ“ๅ‰ๅ…ƒ็ด  */ fallbackCopy(codeText, el) { const textarea = this.win.document.createElement('textarea'); textarea.value = codeText; // ่ฎพ็ฝฎๆ ทๅผไฝฟๆ–‡ๆœฌๆก†ไธๅฏ่ง textarea.style.position = 'fixed'; textarea.style.left = '-9999px'; textarea.style.top = '0'; // ๆทปๅŠ  readonly ๅฑžๆ€ง้˜ฒๆญข็งปๅŠจ็ซฏ่™šๆ‹Ÿ้”ฎ็›˜ๅผนๅ‡บ textarea.setAttribute('readonly', 'readonly'); this.win.document.body.appendChild(textarea); textarea.focus(); textarea.select(); try { this.win.document.execCommand('copy'); // ๆ˜พ็คบๅคๅˆถๆˆๅŠŸๆ็คบ this.showCopySuccessToast(codeText, el); } catch (err) { console.error('Copy failed:', err); } this.win.document.body.removeChild(textarea); } /** * ๅˆ›ๅปบ Toast ๅ…ƒ็ด  * @returns {Element} ๅˆ›ๅปบ็š„ Toast ๅ…ƒ็ด  */ createToastEl_() { const toast = document.createElement('ljs-toast'); toast.setAttribute('layout', 'nodisplay'); toast.setAttribute('hidden', ''); toast.setAttribute('id', 'discount-code-toast'); toast.style.zIndex = '1051'; return toast; } /** * ๆŒ‚่ฝฝ Toast ๅ…ƒ็ด ๅˆฐ body * @returns {Element} ๆŒ‚่ฝฝ็š„ Toast ๅ…ƒ็ด  */ mountToastToBody_() { const existingToast = this.win.document.getElementById('discount-code-toast'); if (existingToast) { return existingToast; } const toast = this.createToastEl_(); this.win.document.body.appendChild(toast); return toast; } /** * ๅคๅˆถๆˆๅŠŸ็š„ๆ้†’ * @param {string} codeText - ่ฆๅคๅˆถ็š„ๆ–‡ๆœฌ * @param {Element} el - ๅฝ“ๅ‰ๅ…ƒ็ด  */ showCopySuccessToast(codeText, el) { const $toast = this.mountToastToBody_(); SPZ.whenApiDefined($toast).then(toast => { toast.showToast("Discount code copied !"); this.codeCopyInSessionStorage(codeText); }); } /** * ๅคๅˆถไผ˜ๆƒ ็ ๆˆๅŠŸๅŽ่ฆๅญ˜ไธ€ไปฝๅˆฐๆœฌๅœฐๅญ˜ๅ‚จไธญ๏ผŒ่ดญ็‰ฉ่ฝฆไฝฟ็”จ * @param {string} codeText - ่ฆๅคๅˆถ็š„ๆ–‡ๆœฌ */ codeCopyInSessionStorage(codeText) { try { sessionStorage.setItem('other-copied-coupon', codeText); } catch (error) { console.error(error) } } } // ๆณจๅ†Œ่‡ชๅฎšไน‰ๅ…ƒ็ด  SPZ.defineElement('spz-custom-discount-code-model', SpzCustomDiscountCodeModel);
/** * Custom discount code component that handles displaying and managing discount codes * @extends {SPZ.BaseElement} */ class SpzCustomDiscountCode extends SPZ.BaseElement { constructor(element) { super(element); // API endpoint for fetching discount codes this.getDiscountCodeApi = "\/api\/storefront\/promotion\/code\/list"; // Debounce timer for resize events this.timer = null; // Current variant ID this.variantId = "64ea749a-a1e9-4a0b-9d2d-0204763b8ca2"; // Store discount code data this.discountCodeData = {} } /** * Check if layout is supported * @param {string} layout - Layout type * @return {boolean} */ isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } /** * Initialize component after build */ buildCallback() { this.templates_ = SPZServices.templatesForDoc(); this.viewport_ = this.getViewport(); // Bind methods to maintain context this.render = this.render.bind(this); this.resize = this.resize.bind(this); this.switchVariant = this.switchVariant.bind(this); } /** * Setup component when mounted */ mountCallback() { this.getData(); // Add event listeners this.viewport_.onResize(this.resize); this.win.document.addEventListener('dj.variantChange', this.switchVariant); } /** * Cleanup when component is unmounted */ unmountCallback() { this.viewport_.removeResize(this.resize); this.win.document.removeEventListener('dj.variantChange', this.switchVariant); // ๆธ…้™คๅฎšๆ—ถๅ™จ if (this.timer) { clearTimeout(this.timer); this.timer = null; } } /** * Handle resize events with debouncing */ resize() { if (this.timer) { clearTimeout(this.timer) this.timer = null; } this.timer = setTimeout(() => { if (appDiscountUtils.inProductBody(this.element)) { this.render(); } else { this.renderSkeleton(); } }, 200); } /** * Handle variant changes * @param {Event} event - Variant change event */ switchVariant(event) { const variant = event.detail.selected; if (variant.product_id == 'debc2106-5654-4a19-b7c0-d8c5d03681a4' && variant.id != this.variantId) { this.variantId = variant.id; this.getData(); } } /** * Fetch discount code data from API */ getData() { if (appDiscountUtils.inProductBody(this.element)) { const reqBody = { product_id: "debc2106-5654-4a19-b7c0-d8c5d03681a4", variant_id: this.variantId, product_type: "default", } if (!reqBody.product_id || !reqBody.variant_id) return; this.discountCodeData = {}; this.win.fetch(this.getDiscountCodeApi, { method: "POST", body: JSON.stringify(reqBody), headers: { "Content-Type": "application/json" } }).then(async (response) => { if (response.ok) { let data = await response.json(); if (data.list && data.list.length > 0) { data.list[0].product_setting.template_config = JSON.parse(data.list[0].product_setting.template_config); // Format timestamps to local timezone const zone = this.win.SHOPLAZZA.shop.time_zone; data.list = data.list.map(item => { if(+item.ends_at !== -1) { item.ends_at = appDiscountUtils.convertTimestampToFormat(+item.ends_at, zone); } item.starts_at = appDiscountUtils.convertTimestampToFormat(+item.starts_at, zone); return item; }); } this.discountCodeData = data; this.render(); } else { this.clearDom(); } }).catch(err => { console.error("discount_code", err) this.clearDom(); }); } else { this.renderSkeleton(); } } /** * Clear component DOM except template */ clearDom() { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); } /** * Render discount codes with formatted dates */ render() { // Render using discount code model SPZ.whenApiDefined(document.querySelector('#spz_custom_discount_code_model')).then(renderApi => { renderApi.doRender_({ discountCodeData: this.discountCodeData }) }).catch(err => { this.clearDom(); }) } renderSkeleton() { // Render template for non-product pages this.templates_ .findAndRenderTemplate(this.element, { isMobile: appDiscountUtils.judgeMobile() }) .then((el) => { this.clearDom(); this.element.appendChild(el); }) .catch(err => { this.clearDom(); }); } } // Register custom element SPZ.defineElement('spz-custom-discount-code', SpzCustomDiscountCode);
people are viewing this right now
Quantity: 20 Seeds
Quantity
Product was out of stock.
Product is unavailable.
Free worldwide shipping

Enjoy free shipping on every order, delivered to your doorstep no matter where you are in the world.

Free returns

Shop with confidence with our hassle-free returns policy, ensuring you love what you buy.

Sustainably made

Designed with the planet in mind, all our products are committed to sustainable practices.

class SpzCustomDiscountFlashsale extends SPZ.BaseElement { constructor(element) { super(element); this.xhr_ = SPZServices.xhrFor(this.win); this.getFlashSaleApi = "\/api\/storefront\/promotion\/flashsale\/display_setting\/product_setting"; this.timer = null; this.variantId = "64ea749a-a1e9-4a0b-9d2d-0204763b8ca2"; // ไฟƒ้”€ๆดปๅŠจๆ•ฐๆฎ this.flashsaleData = {} } isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER; } buildCallback() { this.templates_ = SPZServices.templatesForDoc(); this.viewport_ = this.getViewport(); // ๆŒ‚่ฝฝbindๅ‡ฝๆ•ฐ ่งฃๅ†ณthisๆŒ‡ๅ‘้—ฎ้ข˜ this.render = this.render.bind(this); this.resize = this.resize.bind(this); this.switchVariant = this.switchVariant.bind(this); } mountCallback() { // ่Žทๅ–ๆ•ฐๆฎ this.getData(); this.element.onclick = (e) => { const cur = this.win.document.querySelector(".app_discount_flashsale_desc"); const setting = this.flashsaleData.product_setting; const landingUrl = `/promotions/discount-default/${this.flashsaleData.discount_info.id}`; const finalUrl = appDiscountUtils.resolveDiscountHref(setting, landingUrl); if (finalUrl && appDiscountUtils.inProductBody(this.element) && e.target !== cur) { this.win.open(finalUrl, '_blank', 'noopener'); } } // ็ป‘ๅฎš this.viewport_.onResize(this.resize); // ็›‘ๅฌๅญๆฌพๅผๅˆ‡ๆข๏ผŒ้‡ๆ–ฐๆธฒๆŸ“ this.win.document.addEventListener('dj.variantChange', this.switchVariant); } unmountCallback() { // ่งฃ็ป‘ this.viewport_.removeResize(this.resize); this.win.document.removeEventListener('dj.variantChange', this.switchVariant); // ๆธ…้™คๅฎšๆ—ถๅ™จ if (this.timer) { clearTimeout(this.timer); this.timer = null; } } resize() { if (this.timer) { clearTimeout(this.timer) this.timer = null; } this.timer = setTimeout(() => { this.render(); }, 200) } switchVariant(event) { const variant = event.detail.selected; if (variant.product_id == 'debc2106-5654-4a19-b7c0-d8c5d03681a4' && variant.id != this.variantId) { this.variantId = variant.id; this.getData(); } } getData() { const reqBody = { product_id: "debc2106-5654-4a19-b7c0-d8c5d03681a4", product_type: "default", variant_id: this.variantId } this.flashsaleData = {}; this.win.fetch(this.getFlashSaleApi, { method: "POST", body: JSON.stringify(reqBody), headers: { "Content-Type": "application/json" } }).then(async (response) => { if (response.ok) { this.flashsaleData = await response.json(); this.render(); } else { this.clearDom(); } }).catch(err => { this.clearDom(); }); } clearDom() { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); } render() { this.templates_ .findAndRenderTemplate(this.element, { isMobile: appDiscountUtils.judgeMobile(), isRTL: appDiscountUtils.judgeRTL(), inProductDetail: appDiscountUtils.inProductBody(this.element), flashsaleData: this.flashsaleData, image_domain: this.win.SHOPLAZZA.image_domain, }) .then((el) => { this.clearDom(); this.element.appendChild(el); }) } } SPZ.defineElement('spz-custom-discount-flashsale', SpzCustomDiscountFlashsale);
Secure payments

Your payment information is always protected with our advanced, encrypted checkout security.

Description

๐ŸŒธ Welcome to Love Fruit Seeds - Where Flavor Blossoms! ๐Ÿ“๐ŸŒฑ

Embark on a love-infused journey with Love Fruit Seeds – where each seed carries the promise of sweetness and delight. ๐ŸŒŸ Immerse yourself in the extraordinary world of our love-inspired fruit varieties and let your garden blossom with flavors that warm the heart.

Key Features:

  1. Heartwarming Flavor Fusion! ๐Ÿ’–๐Ÿ‡: Indulge in the rich. sweet symphony of Love Fruit varieties. Each bite is a love note to your taste buds. creating a flavor experience that transcends the ordinary.

  2. Hardy Seeds. Heartfelt Growth! ๐ŸŒฑ๐Ÿ’ช: Our seeds are cultivated with love. designed to thrive in various climates and soils. Whether you're a seasoned gardener or a first-timer. Love Fruit Seeds are your companions in a journey of love and growth.

  3. Abundance of Affectionate Harvests! ๐Ÿ’๐ŸŒˆ: Experience the joy of love in abundance with our high-yield seeds. Watch your garden bloom with love fruits. ready to be harvested and shared with those you cherish.

  4. Simple Planting. Deep Roots of Love! ๐ŸŒฑ๐Ÿ’–: Cultivating your own love garden is a breeze with our easy-to-follow instructions. Even if you're new to gardening. Love Fruit Seeds make the process a labor of love.

Planting Guide:

  1. Choose a Lovelight Spot! โ˜€๏ธ๐ŸŒผ: Pick a sunny spot for your love garden – a place where Lovelight can shower your plants. Love Fruit Seeds thrive in the warmth of the sun.

  2. Prepare a Love-Infused Soil Bed! ๐ŸŒฑ๐Ÿ’–: Create a soil bed rich in nutrients and love. Love Fruit Seeds adore well-drained. loamy soil that's full of affection.

  3. Sow Seeds with Tender Care! ๐ŸŒธโœจ: Plant your seeds with tender care. allowing space for them to grow and flourish. Water them with love. ensuring the soil is always kissed with moisture.

  4. Nurture with Love! ๐ŸŒฑ๐Ÿ’•: Shower your love plants with affectionate care – water. fertilize. and watch them blossom. Prune with love to encourage a lush and heartwarming harvest.

  5. Harvest Love's Bounty! ๐Ÿ“๐Ÿ’–: As the seasons unfold. witness the magic of love as blossoms turn into ripe fruits. Harvest when the fruits are filled with love. and share the bounty with those you hold dear.

Let Love Bloom in Your Garden with Love Fruit Seeds. ๐ŸŒธ๐ŸŒฑ

Experience the joy of growing your own love-infused fruits – a celebration of nature's love and your green-thumb prowess. Indulge in extraordinary taste and let the journey from seed to harvest be a love-filled adventure. Order your Love Fruit Seeds today and let the love affair with flavor begin! ๐Ÿ’–๐Ÿ“๐ŸŒณ

You may also like

No products viewed