๐Ÿ”ฅ๐…๐ข๐ง๐š๐ฅ ๐ƒ๐š๐ฒ ๐’๐š๐ฏ๐ข๐ง๐ ๐ฌ: 75% ๐Ž๐…๐…๐ŸŒ๐Ÿ‹๐Ÿ‘ฉ‍โš•๏ธ Ultra Firming & Revitalizing Cream: Renew Skin Firmness๐Ÿ”ฅ
๐Ÿ”ฅ๐…๐ข๐ง๐š๐ฅ ๐ƒ๐š๐ฒ ๐’๐š๐ฏ๐ข๐ง๐ ๐ฌ: 75% ๐Ž๐…๐…๐ŸŒ๐Ÿ‹๐Ÿ‘ฉ‍โš•๏ธ Ultra Firming & Revitalizing Cream: Renew Skin Firmness๐Ÿ”ฅ
๐Ÿ”ฅ๐…๐ข๐ง๐š๐ฅ ๐ƒ๐š๐ฒ ๐’๐š๐ฏ๐ข๐ง๐ ๐ฌ: 75% ๐Ž๐…๐…๐ŸŒ๐Ÿ‹๐Ÿ‘ฉ‍โš•๏ธ Ultra Firming & Revitalizing Cream: Renew Skin Firmness๐Ÿ”ฅ
๐Ÿ”ฅ๐…๐ข๐ง๐š๐ฅ ๐ƒ๐š๐ฒ ๐’๐š๐ฏ๐ข๐ง๐ ๐ฌ: 75% ๐Ž๐…๐…๐ŸŒ๐Ÿ‹๐Ÿ‘ฉ‍โš•๏ธ Ultra Firming & Revitalizing Cream: Renew Skin Firmness๐Ÿ”ฅ
๐Ÿ”ฅ๐…๐ข๐ง๐š๐ฅ ๐ƒ๐š๐ฒ ๐’๐š๐ฏ๐ข๐ง๐ ๐ฌ: 75% ๐Ž๐…๐…๐ŸŒ๐Ÿ‹๐Ÿ‘ฉ‍โš•๏ธ Ultra Firming & Revitalizing Cream: Renew Skin Firmness๐Ÿ”ฅ
๐Ÿ”ฅ๐…๐ข๐ง๐š๐ฅ ๐ƒ๐š๐ฒ ๐’๐š๐ฏ๐ข๐ง๐ ๐ฌ: 75% ๐Ž๐…๐…๐ŸŒ๐Ÿ‹๐Ÿ‘ฉ‍โš•๏ธ Ultra Firming & Revitalizing Cream: Renew Skin Firmness๐Ÿ”ฅ
๐Ÿ”ฅ๐…๐ข๐ง๐š๐ฅ ๐ƒ๐š๐ฒ ๐’๐š๐ฏ๐ข๐ง๐ ๐ฌ: 75% ๐Ž๐…๐…๐ŸŒ๐Ÿ‹๐Ÿ‘ฉ‍โš•๏ธ Ultra Firming & Revitalizing Cream: Renew Skin Firmness๐Ÿ”ฅ
๐Ÿ”ฅ๐…๐ข๐ง๐š๐ฅ ๐ƒ๐š๐ฒ ๐’๐š๐ฏ๐ข๐ง๐ ๐ฌ: 75% ๐Ž๐…๐…๐ŸŒ๐Ÿ‹๐Ÿ‘ฉ‍โš•๏ธ Ultra Firming & Revitalizing Cream: Renew Skin Firmness๐Ÿ”ฅ
๐Ÿ”ฅ๐…๐ข๐ง๐š๐ฅ ๐ƒ๐š๐ฒ ๐’๐š๐ฏ๐ข๐ง๐ ๐ฌ: 75% ๐Ž๐…๐…๐ŸŒ๐Ÿ‹๐Ÿ‘ฉ‍โš•๏ธ Ultra Firming & Revitalizing Cream: Renew Skin Firmness๐Ÿ”ฅ
๐Ÿ”ฅ๐…๐ข๐ง๐š๐ฅ ๐ƒ๐š๐ฒ ๐’๐š๐ฏ๐ข๐ง๐ ๐ฌ: 75% ๐Ž๐…๐…๐ŸŒ๐Ÿ‹๐Ÿ‘ฉ‍โš•๏ธ Ultra Firming & Revitalizing Cream: Renew Skin Firmness๐Ÿ”ฅ
๐Ÿ”ฅ๐…๐ข๐ง๐š๐ฅ ๐ƒ๐š๐ฒ ๐’๐š๐ฏ๐ข๐ง๐ ๐ฌ: 75% ๐Ž๐…๐…๐ŸŒ๐Ÿ‹๐Ÿ‘ฉ‍โš•๏ธ Ultra Firming & Revitalizing Cream: Renew Skin Firmness๐Ÿ”ฅ
๐Ÿ”ฅ๐…๐ข๐ง๐š๐ฅ ๐ƒ๐š๐ฒ ๐’๐š๐ฏ๐ข๐ง๐ ๐ฌ: 75% ๐Ž๐…๐…๐ŸŒ๐Ÿ‹๐Ÿ‘ฉ‍โš•๏ธ Ultra Firming & Revitalizing Cream: Renew Skin Firmness๐Ÿ”ฅ
๐Ÿ”ฅ๐…๐ข๐ง๐š๐ฅ ๐ƒ๐š๐ฒ ๐’๐š๐ฏ๐ข๐ง๐ ๐ฌ: 75% ๐Ž๐…๐…๐ŸŒ๐Ÿ‹๐Ÿ‘ฉ‍โš•๏ธ Ultra Firming & Revitalizing Cream: Renew Skin Firmness๐Ÿ”ฅ
๐Ÿ”ฅ๐…๐ข๐ง๐š๐ฅ ๐ƒ๐š๐ฒ ๐’๐š๐ฏ๐ข๐ง๐ ๐ฌ: 75% ๐Ž๐…๐…๐ŸŒ๐Ÿ‹๐Ÿ‘ฉ‍โš•๏ธ Ultra Firming & Revitalizing Cream: Renew Skin Firmness๐Ÿ”ฅ
1/14
๐Ÿ”ฅ๐…๐ข๐ง๐š๐ฅ ๐ƒ๐š๐ฒ ๐’๐š๐ฏ๐ข๐ง๐ ๐ฌ: 75% ๐Ž๐…๐…๐ŸŒ๐Ÿ‹๐Ÿ‘ฉ‍โš•๏ธ Ultra Firming & Revitalizing Cream: Renew Skin Firmness๐Ÿ”ฅ
๐Ÿ”ฅ๐…๐ข๐ง๐š๐ฅ ๐ƒ๐š๐ฒ ๐’๐š๐ฏ๐ข๐ง๐ ๐ฌ: 75% ๐Ž๐…๐…๐ŸŒ๐Ÿ‹๐Ÿ‘ฉ‍โš•๏ธ Ultra Firming & Revitalizing Cream: Renew Skin Firmness๐Ÿ”ฅ
๐Ÿ”ฅ๐…๐ข๐ง๐š๐ฅ ๐ƒ๐š๐ฒ ๐’๐š๐ฏ๐ข๐ง๐ ๐ฌ: 75% ๐Ž๐…๐…๐ŸŒ๐Ÿ‹๐Ÿ‘ฉ‍โš•๏ธ Ultra Firming & Revitalizing Cream: Renew Skin Firmness๐Ÿ”ฅ
๐Ÿ”ฅ๐…๐ข๐ง๐š๐ฅ ๐ƒ๐š๐ฒ ๐’๐š๐ฏ๐ข๐ง๐ ๐ฌ: 75% ๐Ž๐…๐…๐ŸŒ๐Ÿ‹๐Ÿ‘ฉ‍โš•๏ธ Ultra Firming & Revitalizing Cream: Renew Skin Firmness๐Ÿ”ฅ
๐Ÿ”ฅ๐…๐ข๐ง๐š๐ฅ ๐ƒ๐š๐ฒ ๐’๐š๐ฏ๐ข๐ง๐ ๐ฌ: 75% ๐Ž๐…๐…๐ŸŒ๐Ÿ‹๐Ÿ‘ฉ‍โš•๏ธ Ultra Firming & Revitalizing Cream: Renew Skin Firmness๐Ÿ”ฅ
๐Ÿ”ฅ๐…๐ข๐ง๐š๐ฅ ๐ƒ๐š๐ฒ ๐’๐š๐ฏ๐ข๐ง๐ ๐ฌ: 75% ๐Ž๐…๐…๐ŸŒ๐Ÿ‹๐Ÿ‘ฉ‍โš•๏ธ Ultra Firming & Revitalizing Cream: Renew Skin Firmness๐Ÿ”ฅ
๐Ÿ”ฅ๐…๐ข๐ง๐š๐ฅ ๐ƒ๐š๐ฒ ๐’๐š๐ฏ๐ข๐ง๐ ๐ฌ: 75% ๐Ž๐…๐…๐ŸŒ๐Ÿ‹๐Ÿ‘ฉ‍โš•๏ธ Ultra Firming & Revitalizing Cream: Renew Skin Firmness๐Ÿ”ฅ
๐Ÿ”ฅ๐…๐ข๐ง๐š๐ฅ ๐ƒ๐š๐ฒ ๐’๐š๐ฏ๐ข๐ง๐ ๐ฌ: 75% ๐Ž๐…๐…๐ŸŒ๐Ÿ‹๐Ÿ‘ฉ‍โš•๏ธ Ultra Firming & Revitalizing Cream: Renew Skin Firmness๐Ÿ”ฅ
๐Ÿ”ฅ๐…๐ข๐ง๐š๐ฅ ๐ƒ๐š๐ฒ ๐’๐š๐ฏ๐ข๐ง๐ ๐ฌ: 75% ๐Ž๐…๐…๐ŸŒ๐Ÿ‹๐Ÿ‘ฉ‍โš•๏ธ Ultra Firming & Revitalizing Cream: Renew Skin Firmness๐Ÿ”ฅ
๐Ÿ”ฅ๐…๐ข๐ง๐š๐ฅ ๐ƒ๐š๐ฒ ๐’๐š๐ฏ๐ข๐ง๐ ๐ฌ: 75% ๐Ž๐…๐…๐ŸŒ๐Ÿ‹๐Ÿ‘ฉ‍โš•๏ธ Ultra Firming & Revitalizing Cream: Renew Skin Firmness๐Ÿ”ฅ
๐Ÿ”ฅ๐…๐ข๐ง๐š๐ฅ ๐ƒ๐š๐ฒ ๐’๐š๐ฏ๐ข๐ง๐ ๐ฌ: 75% ๐Ž๐…๐…๐ŸŒ๐Ÿ‹๐Ÿ‘ฉ‍โš•๏ธ Ultra Firming & Revitalizing Cream: Renew Skin Firmness๐Ÿ”ฅ
๐Ÿ”ฅ๐…๐ข๐ง๐š๐ฅ ๐ƒ๐š๐ฒ ๐’๐š๐ฏ๐ข๐ง๐ ๐ฌ: 75% ๐Ž๐…๐…๐ŸŒ๐Ÿ‹๐Ÿ‘ฉ‍โš•๏ธ Ultra Firming & Revitalizing Cream: Renew Skin Firmness๐Ÿ”ฅ
๐Ÿ”ฅ๐…๐ข๐ง๐š๐ฅ ๐ƒ๐š๐ฒ ๐’๐š๐ฏ๐ข๐ง๐ ๐ฌ: 75% ๐Ž๐…๐…๐ŸŒ๐Ÿ‹๐Ÿ‘ฉ‍โš•๏ธ Ultra Firming & Revitalizing Cream: Renew Skin Firmness๐Ÿ”ฅ
๐Ÿ”ฅ๐…๐ข๐ง๐š๐ฅ ๐ƒ๐š๐ฒ ๐’๐š๐ฏ๐ข๐ง๐ ๐ฌ: 75% ๐Ž๐…๐…๐ŸŒ๐Ÿ‹๐Ÿ‘ฉ‍โš•๏ธ Ultra Firming & Revitalizing Cream: Renew Skin Firmness๐Ÿ”ฅ
1/14

๐Ÿ”ฅ๐…๐ข๐ง๐š๐ฅ ๐ƒ๐š๐ฒ ๐’๐š๐ฏ๐ข๐ง๐ ๐ฌ: 75% ๐Ž๐…๐…๐ŸŒ๐Ÿ‹๐Ÿ‘ฉ‍โš•๏ธ Ultra Firming & Revitalizing Cream: Renew Skin Firmness๐Ÿ”ฅ

$38.99
$80.00
Save $41.01
๐Ÿ”ฅ97.8% of Customers Buy 2 or More
Please select a ๐Ÿ”ฅ97.8% of customers buy 2 or more
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);


๐Ÿ’99.2% of Reviewers Recommends This Product.
๐ŸŒŽ Over $59.99 for free delivery worldwide
๐Ÿ›’ Tracking number for every order
๐Ÿ’ฏ Payments Via PayPal® and Credit Card
โญ Returns>>100% Money Back Guarantee

Our goods are authentic, with genuine patents, counterfeit must be investigated! Customers, please identify our products

It will sell out fast, Enjoy a discount now!!โšกPlease make sure to buy enough quantity before we increase the price!!!๐Ÿ”ฅ

๐Ÿ’ Last Day Discount - ๐Ÿ•5%๐Ž๐…๐… ๐Ÿ’

Transform your skin with Advanced Skin Tightening Rejuvenating Cream

About this item

Experience the transformative power of our clinically proven skincare solution, designed to target and repair crepey, sagging skin with cream-infused ingredients. Witness visible results in as little as three days.

  • Think of it as your favorite high-powered facial night cream, now reimagined for your entire body!
  • Our full-body treatment revitalizes and tones your skin, infusing it with brightening agents like Niacinamide to effectively address age spots and dark spots.
  • Harnessing the strength of a potent peptide formulation, our product decelerates the aging process. It lifts your skin from neck to toe, reducing lines and wrinkles, resulting in smoother, firmer skin.
  • Not stopping at just revitalizing, our luxurious cream moisturizes and plumps your skin, leaving it with a deep hydration barrier.

Step into a world of advanced skincare, where every application brings you closer to the youthful and radiant skin you desire. 

Scientific ingredient

Dive into the science behind Advanced Firming & Wrinkle-Reducing Cream, a meticulously crafted formula that blends cutting-edge ingredients for unparalleled skin transformation.

  • Sapphire-Infused Triple Peptide: Celebrated as the pinnacle of peptide technology, this complex penetrates the skin layers more deeply for accelerated results, effectively addressing the concerns of crepey and lax skin.
  • Niacinamide: A powerhouse of Vitamin B-3, this indispensable nutrient and skincare champion improves skin tone, diminishes dark spots, enhances luminosity, augments hydration, and mitigates irritation.
  • Tri-Hyaluronic Acid: An innovative amalgamation of hyaluronic acid molecules of varying molecular weights ensures optimal moisture retention, fortifying the skin's hydration fortress and maintaining its youthful vigor.
  • Micro Algae: Sourced from the pristine volcanic islands of Iceland, this pure form of red algae refines skin texture, promoting repair and rejuvenation at the cellular level.
  • Caffeine: Rich in antioxidants, caffeine revitalizes and volumizes skin, mitigating the aging effects of environmental aggressors and UV exposure while soothing inflammation and discomfort.
  • Plant-Derived Squalane: This botanical moisturizer reduces the appearance of fine lines and wrinkles while fostering cellular renewal, enhancing skin's resilience and texture.
  • Shea Butter: Known as the zenith of natural hydration, this crystallized hydrator wraps the skin in immediate and enduring moisture, ensuring a supple and revitalized complexion.

Customer Endorsement

Discover real results with our skincare. Users reported notable improvements in just a week.

  • โœ”An astounding 100% agreed that their skin felt deeply moisturized.
  • โœ”A significant 96% confirmed a visible reduction in skin dryness.
  • โœ”Over 93% witnessed an improvement in the appearance of lines and wrinkles.
  • โœ”Approximately 97% observed their skin appearing visibly firmer.
  • โœ”An impressive 96% also noticed an improvement in skin texture.

  • โœ”More than 84% felt their skin looked more youthful.
  • โœ”And a remarkable 90% agreed it improved their overall skin appearance.

Discover the transformative experiences of our happy customers

"After weeks of use, my fine lines and wrinkles have visibly diminished. My skin feels tighter, especially around the neck, making me look younger. It's the first product that's truly made a difference for me."--Sofia Walker


"This neck and leg firming cream is phenomenal. In just a few weeks, the changes were significant. My skin is firmer and the cream has worked miracles."--Ellie Evans

For radiant, lifted skin, follow these simple steps

  1. Morning and night, smooth a thin layer over your neck, legs, abdomen, arms, or any desired area for an enhanced lift and glow.
  2. Use gentle circular motions to massage, creating warmth for better absorption.

Specification

  • Net content: 60ml
  • Shelf life: 3 years
  • Applicable skin type: all

OUR GUARANTEE

  • We truly believe that we offer some of the most innovative and inspirational products in the world, and we want to make sure we back it up with a risk-free ironclad 90-day guarantee.
  • If you don't have a positive experience for ANY reason, contact us and we will make sure that ALL your concerns are addressed and you leave 100% satisfied and smiling.

undefined

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);