๐ŸŒˆ๐ŸŒˆIon Lifting Correction Lymphvity Detoxification Bra(๐Ÿ†๐Ÿ†Last 30 minutes of limited-time discount)
๐ŸŒˆ๐ŸŒˆIon Lifting Correction Lymphvity Detoxification Bra(๐Ÿ†๐Ÿ†Last 30 minutes of limited-time discount)
๐ŸŒˆ๐ŸŒˆIon Lifting Correction Lymphvity Detoxification Bra(๐Ÿ†๐Ÿ†Last 30 minutes of limited-time discount)
๐ŸŒˆ๐ŸŒˆIon Lifting Correction Lymphvity Detoxification Bra(๐Ÿ†๐Ÿ†Last 30 minutes of limited-time discount)
๐ŸŒˆ๐ŸŒˆIon Lifting Correction Lymphvity Detoxification Bra(๐Ÿ†๐Ÿ†Last 30 minutes of limited-time discount)
๐ŸŒˆ๐ŸŒˆIon Lifting Correction Lymphvity Detoxification Bra(๐Ÿ†๐Ÿ†Last 30 minutes of limited-time discount)
๐ŸŒˆ๐ŸŒˆIon Lifting Correction Lymphvity Detoxification Bra(๐Ÿ†๐Ÿ†Last 30 minutes of limited-time discount)
๐ŸŒˆ๐ŸŒˆIon Lifting Correction Lymphvity Detoxification Bra(๐Ÿ†๐Ÿ†Last 30 minutes of limited-time discount)
๐ŸŒˆ๐ŸŒˆIon Lifting Correction Lymphvity Detoxification Bra(๐Ÿ†๐Ÿ†Last 30 minutes of limited-time discount)
๐ŸŒˆ๐ŸŒˆIon Lifting Correction Lymphvity Detoxification Bra(๐Ÿ†๐Ÿ†Last 30 minutes of limited-time discount)
๐ŸŒˆ๐ŸŒˆIon Lifting Correction Lymphvity Detoxification Bra(๐Ÿ†๐Ÿ†Last 30 minutes of limited-time discount)
๐ŸŒˆ๐ŸŒˆIon Lifting Correction Lymphvity Detoxification Bra(๐Ÿ†๐Ÿ†Last 30 minutes of limited-time discount)
๐ŸŒˆ๐ŸŒˆIon Lifting Correction Lymphvity Detoxification Bra(๐Ÿ†๐Ÿ†Last 30 minutes of limited-time discount)
๐ŸŒˆ๐ŸŒˆIon Lifting Correction Lymphvity Detoxification Bra(๐Ÿ†๐Ÿ†Last 30 minutes of limited-time discount)
๐ŸŒˆ๐ŸŒˆIon Lifting Correction Lymphvity Detoxification Bra(๐Ÿ†๐Ÿ†Last 30 minutes of limited-time discount)
๐ŸŒˆ๐ŸŒˆIon Lifting Correction Lymphvity Detoxification Bra(๐Ÿ†๐Ÿ†Last 30 minutes of limited-time discount)
๐ŸŒˆ๐ŸŒˆIon Lifting Correction Lymphvity Detoxification Bra(๐Ÿ†๐Ÿ†Last 30 minutes of limited-time discount)
๐ŸŒˆ๐ŸŒˆIon Lifting Correction Lymphvity Detoxification Bra(๐Ÿ†๐Ÿ†Last 30 minutes of limited-time discount)
๐ŸŒˆ๐ŸŒˆIon Lifting Correction Lymphvity Detoxification Bra(๐Ÿ†๐Ÿ†Last 30 minutes of limited-time discount)
๐ŸŒˆ๐ŸŒˆIon Lifting Correction Lymphvity Detoxification Bra(๐Ÿ†๐Ÿ†Last 30 minutes of limited-time discount)
๐ŸŒˆ๐ŸŒˆIon Lifting Correction Lymphvity Detoxification Bra(๐Ÿ†๐Ÿ†Last 30 minutes of limited-time discount)
๐ŸŒˆ๐ŸŒˆIon Lifting Correction Lymphvity Detoxification Bra(๐Ÿ†๐Ÿ†Last 30 minutes of limited-time discount)
๐ŸŒˆ๐ŸŒˆIon Lifting Correction Lymphvity Detoxification Bra(๐Ÿ†๐Ÿ†Last 30 minutes of limited-time discount)
๐ŸŒˆ๐ŸŒˆIon Lifting Correction Lymphvity Detoxification Bra(๐Ÿ†๐Ÿ†Last 30 minutes of limited-time discount)
๐ŸŒˆ๐ŸŒˆIon Lifting Correction Lymphvity Detoxification Bra(๐Ÿ†๐Ÿ†Last 30 minutes of limited-time discount)
๐ŸŒˆ๐ŸŒˆIon Lifting Correction Lymphvity Detoxification Bra(๐Ÿ†๐Ÿ†Last 30 minutes of limited-time discount)
๐ŸŒˆ๐ŸŒˆIon Lifting Correction Lymphvity Detoxification Bra(๐Ÿ†๐Ÿ†Last 30 minutes of limited-time discount)
๐ŸŒˆ๐ŸŒˆIon Lifting Correction Lymphvity Detoxification Bra(๐Ÿ†๐Ÿ†Last 30 minutes of limited-time discount)
๐ŸŒˆ๐ŸŒˆIon Lifting Correction Lymphvity Detoxification Bra(๐Ÿ†๐Ÿ†Last 30 minutes of limited-time discount)
๐ŸŒˆ๐ŸŒˆIon Lifting Correction Lymphvity Detoxification Bra(๐Ÿ†๐Ÿ†Last 30 minutes of limited-time discount)
๐ŸŒˆ๐ŸŒˆIon Lifting Correction Lymphvity Detoxification Bra(๐Ÿ†๐Ÿ†Last 30 minutes of limited-time discount)
๐ŸŒˆ๐ŸŒˆIon Lifting Correction Lymphvity Detoxification Bra(๐Ÿ†๐Ÿ†Last 30 minutes of limited-time discount)
๐ŸŒˆ๐ŸŒˆIon Lifting Correction Lymphvity Detoxification Bra(๐Ÿ†๐Ÿ†Last 30 minutes of limited-time discount)
๐ŸŒˆ๐ŸŒˆIon Lifting Correction Lymphvity Detoxification Bra(๐Ÿ†๐Ÿ†Last 30 minutes of limited-time discount)
๐ŸŒˆ๐ŸŒˆIon Lifting Correction Lymphvity Detoxification Bra(๐Ÿ†๐Ÿ†Last 30 minutes of limited-time discount)
๐ŸŒˆ๐ŸŒˆIon Lifting Correction Lymphvity Detoxification Bra(๐Ÿ†๐Ÿ†Last 30 minutes of limited-time discount)
๐ŸŒˆ๐ŸŒˆIon Lifting Correction Lymphvity Detoxification Bra(๐Ÿ†๐Ÿ†Last 30 minutes of limited-time discount)
๐ŸŒˆ๐ŸŒˆIon Lifting Correction Lymphvity Detoxification Bra(๐Ÿ†๐Ÿ†Last 30 minutes of limited-time discount)

๐ŸŒˆ๐ŸŒˆIon Lifting Correction Lymphvity Detoxification Bra(๐Ÿ†๐Ÿ†Last 30 minutes of limited-time discount)

Price

$49.97 $24.97
Save $25.00
Free shipping on orders over 69.9

โฌ‡๏ธ packages โฌ‡๏ธ (๐Ÿ”ฅbuy more save more)-one-time purchase

Please select a โฌ‡๏ธ packages โฌ‡๏ธ (๐Ÿ”ฅbuy more save more)-one-time purchase

color

Please select a color

size

Please select a size

Quantity

Free returns
Sustainably made
Secure payments

๐Ÿ†After-sales service >>If you are not satisfied with the goods you received or it doesn't work for you,ย we offer 90 days unconditional refund.
๐Ÿš†We support worldwide shipping,ย usually 3-5 days delivery.
๐ŸŽ‰ Overย 99.97%ย of our customers recommend this product.
โœ‰๏ธย 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.

(Almost sold out, today is the last 30 minutes of the promotion. We will give away an ionย detoxification bra to the first 100 customers who place an order today.)


See what our happy and satisfied customers have to say:

"I'm 48 years old this year, and as I've gotten older, I've noticed a decline in my body's metabolism. Combined with my tendency to indulge in excessive eating, as well as joint issues that limit my ability to exercise, I've been gaining weight and becoming increasingly overweight. I often feel tired and suffer from painful breasts. To make matters worse, I frequently experience difficulty breathing and a lack of oxygen supply. I realized that my body was facing serious issues, so I underwent medical examinations, which revealed that my heart was working overtime and not receiving sufficient oxygen, resulting in fatigue. This meant that I had to start losing weight. I consulted many doctors and tried various products, but nothing seemed to work.

It wasn't until a friend introduced me to the Parowuโ„ข Ion Lift and Lymphatic Drainage Bra that I decided to give it a try. In just five weeks, it helped me shed approximately 59 pounds, alleviated my breast pain, and eliminated the accumulation of fat in my abdomen, as well as my stretch marks. I am now a loyal fan of this product.

This bra has truly transformed my life. What's even more amazing is that it helps eliminate toxins from my body. My hormone balance has been restored, and I no longer feel tired throughout my body. I wake up every day full of energy and a sense of ease. I am sincerely grateful for the help this bra has provided me!"

- Sophia Davis, 48, Los Angeles - โญโญโญโญโญ

"In the past, I had a hunchback at the back of my neck that looked terrible. It caused me constant swelling and pain in my neck. I had tried visiting a chiropractor, using painkillers, muscle relaxants, stretching exercises, workouts, hot/cold therapy, inversion tables, pillows, and more. Some things provided temporary relief, but nothing ultimately helped.
I saw someone online mentioning that wearing this detox bra relieved their neck pain from the first day. I have to say, it exceeded my expectations.ย Just after 4 weeks of use, I noticed a significant improvement in my neck pain and swelling.ย It has now become an essential part of my daily life, allowing me to go through each day comfortably and pain-free.
If my experience resonates with you in any way, I highly recommend giving this product a try! It will improve your sleep and overall well-being. It is a truly effective solution for pain and swelling."

Sophia Keller,36 Alhambra
"After entering menopause and experiencing hormonal changes, I started to notice that my breasts were losing their firmness and becoming saggy. Additionally, I frequently experienced pain and lumps in my right breast. Fortunately, my doctor friend recommended this detoxification bra to me. With FDA certification and after comparing it with many other products, I confidently chose this one! After using it consistently for 3 weeks, I was pleasantly surprised to see that my breasts became firm and revitalized, and the lumps and pain disappeared! Moreover, I absolutely love the fabric and design of this bra. It has a front closure that is easy to wear and provides additional support for my recovery and overall health. The material is incredibly soft and comfortable, without any discomfort. My husband has also noticed the changes, and our relationship has become even closer. I am truly grateful for this amazing product that has transformed my body and life, allowing me to regain confidence and beauty."
Scarlettย Keller, 65,ย Fort Worth, Texas

Why does fat accumulate more quickly in the abdominal region?

As women age, many may notice an increase in abdominal fat even without weight gain. This could be due to poor blood circulation and a slowing metabolism that comes with aging.

Both poor digestion and impaired blood circulation can contribute to accelerated fat storage in the abdominal area. Impaired digestion and circulation slow down the body's metabolism and organ function. When your organs are not functioning optimally, it reduces the rate of calorie burning and weight loss, leading to more fat deposition in your abdomen.

How does the Ion Lifting & Lymphvity Detoxification Bra work?

It stimulates over 800 reflex points in the abdomen. The Ion Lifting & Lymphvity Detoxification Braย generates energy without the need for any other power source, such as electricity. These ionic shapingย brasย are based on ion therapy, far-infrared therapy, and mugwort therapy, providing users with multidimensional massage and stimulation. It helps effectively stimulate blood and lymph circulation, alleviate lymphedema and inflammation, and reduce fluid retention and cellulite.

Far-infrared therapy

Far-infrared therapy Far-infrared radiation is part of the electromagnetic spectrum of infrared light. Far-infrared radiation can penetrate the subcutaneous tissue of the human body up to 16mm, which means it can penetrate deep muscle tissue, tendons, nerves, blood vessels, and ligaments. It helps repair damaged cells, dilate microvessels, promote blood circulation, activate enzymes, improve blood circulation, and accelerate the metabolism of blood and cellular tissues. It achieves this by encouraging heart rate and activity, even when you are not exercising.
Research has shown that Ion Lifting & Lymphvity Detoxification Braย is an excellent choice for weight loss. Infrared therapy can stimulate the release of fatty acids and glycerol from fat cells in the body, which are then consumed by the body, resulting in weight loss.

According to the National Institutes of Health (NIH) in the United States, far infrared therapy is an advanced treatment used for burning fat, removing stretch marks, and reducing cellulite. By harnessing the effects of far infrared radiation, high-frequency vibrations are generated, which can promote blood circulation and metabolism, stimulate the production of collagen in tissues, and break down subcutaneous fat. Overall, this therapy is a highly advanced method for burning fat, removing stretch marks, and reducing cellulite, helping women achieve a beautiful and perfect physique.

Absinthe Therapy


The ion detoxification bra is immersed in wormwood liquor and utilizes a special process to secure the tourmaline, thereby releasing thujone and negative ions. It combines far-infrared therapy and wormwood liquor therapy, providing relief for pain in different parts of the body, muscle relaxation, and anti-inflammatory effects. Long-term observations have shown that it can also prevent and treat health issues such as cellulite, swollen lymph nodes, edema, fibroadenomas, cysts, and even contribute to breast cancer prevention.

Fat Burning and Detoxification for Rapid Body Shapingย 

Our Ion Lifting & Lymphvity Detoxification Braย can help you achieve your weight loss goals, even if you don't exercise regularly and have a balanced diet. The 80% far-infrared therapy can assist you in reaching your ideal weight. Thisย braย helps increase metabolism, stimulates the lymphatic system, detoxifies the body, and eliminates accumulated cellulite and edema. The fat-burning fabric containing electric stone efficiently metabolizes fat, allowing you to burn fat while sleeping, working, or exercising, shaping your perfect body curves overnight!

Relieve fatigue and correct posture


The Ion Lifting & Lymphvity Detoxification Braย utilizes innovative technology with embedded graphene fibers. These fibers promote cell regeneration and improve nerve function, aiding in enhancing back health and posture. Additionally, theย braย incorporates millions of magnetic nanoparticles that generate a static magnetic field, further enhancing blood circulation and muscle relaxation. The use of wormwood also enhances the effectiveness of this static magnetic field. By combining these two technologies, the Parowuโ„ข Braย provides comprehensive back health and posture improvement effects.

What makes the Ion Lifting & Lymphvity Detoxification Bra the best choice for you?

โœ… Treatment methods verified by authoritative organizations

โœ…Reduce internal waste, eliminate excess fat, burn fat and lose weight quickly

โœ… Promote collagen regeneration, tighten loose skin

โœ… Correct hunchback, correct scoliosis, and straighten your posture

โœ…Remove stretch marks, eliminate lymphedema, lipoma

โœ… Accelerate blood circulation and promote metabolism

โœ… Release stress, reduce fatigue and chronic inflammation

โœ… Prevent cancer cells and strengthen the immune system

โœ…ย Improveย Digestive Function

Let's take a look atย Mia's transformative journey with the Ion Detoxification Bra:

"I am a health conscious person, but my body has changed a lot since contracting the COVID-19 virus. The COVID-19 virus has been devastating to an elderly woman like me. First of all, I obviously felt that my immunity was obviously weakened, I often felt tired and weak, and my right breast was often swollen and painful. Second, my metabolism slowed down significantly, and despite my consistent diet and exercise routine, my weight was completely out of control. I've tried various supplements and lifestyle adjustments with no apparent effect.

It wasn't until I started wearing the Parowu Detox Bra for 5 weeks that I was pleasantly surprised that my immune system started to recover and I felt more energetic and energetic. At the same time, my metabolism also improved, and I started to lose weight, successfully lost 29lbs! I regained my former health. If you are experiencing weakened immunity and sluggish metabolism, I highly recommend you try these products!"

-Mia Anderson,ย 55,ย Chicago- โญโญโญโญโญ

"After having my baby, I didn't gain weight, but I had a lot of stretch marks, tried many ways to get rid of them, but they didn't work well, which made me very depressed. When I heard about theย Ion Lifting & Lymphvity Detoxification Bra. I decided to give it a try and the results blew my mind! After just two weeks, my stretch marks were completely gone! I feel like I'm a different person! I feel like I've become a whole new, healthy, sexy woman. I am so impressed with this product that I recommend it to all my friends. It was a life changing experience for me and I am so happy to have found this Bra!"

-Charlotte Taylor, 25,ย San Jose- โญโญโญโญโญ

"I have been dealing with obesity and type 2 diabetes at the same time. I have tried many different products, but only this ion detoxification bra has truly worked for me! What surprised me was that in the first week of using it, I felt a noticeable improvement. I no longer experience leg pain, and long hours of standing no longer lead to lower back pain.
After two weeks of use, I have seen a significant weight loss, and my blood sugar and lipid levels have also decreased. This bra provides a moderate compression effect without any feeling of restriction, and it wraps around my belly perfectly. It is the most comfortable product I have ever purchased.
A month has passed, and my abdominal fat has completely disappeared! This month of use has shown me clear changes in my appearance, and I really love thisย braย ! It is a truly effective solution that has restored my confidence and health!"

Diana Weddle, 34, Montgomery

Specifications:

โ—Material:ย Tourmaline fiber, Graphene fibres
โ—Color:ย Purple/Pink/Beige/Red
โ—Size:ย S/ M/ L/ XL/ 2XL/ 3XL/ 4XL/ 5XL๏ผˆHigh elasticity, suitable forย 80-320ย pounds)
โ—Seamless integrated compression structure

ย ๐Ÿ‘‘ About usย 

๐Ÿ‘‘Delivery

โ— We ship worldwide
โ— If you have any questions, please contact our customer service for assistance!

๐Ÿ‘‘ Our guarantee

โ— ๐Ÿ“ฆ Insured Global Shipping: Every order includes real-time tracking details and insurance coverage in the unlikely event that your package is lost or stolen in transit.
โ— ๐Ÿ’ฐ Money back guarantee: If your item arrives damaged or defective within 15 days of normal use, we will happily replace or refund your money.
โ— โ˜‰๏ธ 24/7 customer support: We have a team of live representatives ready to help and answer any questions you may have, 24 hours a day, 7 days a week

/** @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-1718252090972').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);
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);