GT5 Pro Max Blood Glucose Watch With BP+HRV+ECG(EKG)+SOS+Stress+Sleep Monitoring
GT5 Pro Max Blood Glucose Watch With BP+HRV+ECG(EKG)+SOS+Stress+Sleep Monitoring
GT5 Pro Max Blood Glucose Watch With BP+HRV+ECG(EKG)+SOS+Stress+Sleep Monitoring
GT5 Pro Max Blood Glucose Watch With BP+HRV+ECG(EKG)+SOS+Stress+Sleep Monitoring
GT5 Pro Max Blood Glucose Watch With BP+HRV+ECG(EKG)+SOS+Stress+Sleep Monitoring
GT5 Pro Max Blood Glucose Watch With BP+HRV+ECG(EKG)+SOS+Stress+Sleep Monitoring
GT5 Pro Max Blood Glucose Watch With BP+HRV+ECG(EKG)+SOS+Stress+Sleep Monitoring
GT5 Pro Max Blood Glucose Watch With BP+HRV+ECG(EKG)+SOS+Stress+Sleep Monitoring
GT5 Pro Max Blood Glucose Watch With BP+HRV+ECG(EKG)+SOS+Stress+Sleep Monitoring
GT5 Pro Max Blood Glucose Watch With BP+HRV+ECG(EKG)+SOS+Stress+Sleep Monitoring
GT5 Pro Max Blood Glucose Watch With BP+HRV+ECG(EKG)+SOS+Stress+Sleep Monitoring
GT5 Pro Max Blood Glucose Watch With BP+HRV+ECG(EKG)+SOS+Stress+Sleep Monitoring
GT5 Pro Max Blood Glucose Watch With BP+HRV+ECG(EKG)+SOS+Stress+Sleep Monitoring
GT5 Pro Max Blood Glucose Watch With BP+HRV+ECG(EKG)+SOS+Stress+Sleep Monitoring

GT5 Pro Max Blood Glucose Watch With BP+HRV+ECG(EKG)+SOS+Stress+Sleep Monitoring

Price

$0.00 $79.95
Save $-79.95
Sustainably Made
Secure Payments

color - Black

Please select a color

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);
Upgrade Newest Health and Fitness Tracker  innovates new functions such as non-invasive blood glucose dial, blood pressure, Sleep, blood oxygen, heart rate, EKG, body composition, blood composition, women’s health stress test, voice assistant, Ali payment, computer, etc. The bottom of the watch uses medical stainless steel material to prevent wrist allergies. It is a secondary medical device.
GT5 Pro Max Blood Glucose Watch With BP+HRV+ECG(EKG)+SOS+Stress+Sleep Monitoring

Why Recommend Upgrade Newest Health and Fitness Tracker 2025?

✅The biggest discount for this new products at the moment, Add to cart and buy it can get 20% off+Free health watch🎁+ free shipping.(Note: The color of the gift watch is random) If you are unable to place an order, it means the watch gift is out of stock.

✅99.9% accurate sleep monitoring. And sleep quality is assessed using a star rating.

✅The bottom of the watch uses medical stainless steel material to prevent wrist allergies. It is a secondary medical device.

✅Added blood sugar and body composition monitor.

GT5 Pro Max Blood Glucose Watch With BP+HRV+ECG(EKG)+SOS+Stress+Sleep Monitoring

✅Add Alipay function.

✅Intelligent voice assistance improves measurement accuracy.

✅Pulse alarm.

✅The best ECG monitor that can check atrial fibrillation (Afib) to prevent irregular heartbeats that may lead to stroke or heart failure.

GT5 Pro Max Blood Glucose Watch With BP+HRV+ECG(EKG)+SOS+Stress+Sleep Monitoring

✅No APP subscription fee required.

✅Simple and easy-to-use APP, health guidance.

✅Long battery life. (10 days)

✅24-hour customer service.

✅30-day refund, 360-day maintenance.

✅Bluetooth calls make life convenient.

✅The GT5 Pro Max is the watch with the most functions, especially in sleep and language fairy tales.

More details

Non-invasive blood glucose monitoring

Compared with traditional blood glucose meters that require blood glucose monitoring, GT5Pro Max Smartwatch uses high-performance optical sensors to detect blood glucose levels. It penetrates the skin to a depth of less than 5 mm and can detect your blood glucose level non-invasively.

GT5 Pro Max Blood Glucose Watch With BP+HRV+ECG(EKG)+SOS+Stress+Sleep Monitoring

Warm reminder: At present, the global non-invasive blood glucose technology cannot completely replace medical-grade blood sampling for blood glucose testing.

However, GT5Pro Max Smartwatch has industry-leading accuracy in blood glucose monitoring and can meet the needs of most users who need blood glucose monitoring.

GT5 Pro Max Blood Glucose Watch With BP+HRV+ECG(EKG)+SOS+Stress+Sleep Monitoring

If the user has sleep problems, the GT5Pro Max also adds a breathing training function to help users fall asleep. In just a few seconds, GT5Pro Max can immerse users in breathing exercises in the simplest way, improve users’ health and correct their breathing, allowing users to feel the pleasure of physical and mental health.

The GT5Pro Max smartwatch improves and optimizes sleep monitoring, which usually monitors the user’s sleep stages through built-in sensors such as accelerometers and heart rate sensors. These stages usually include light sleep, deep sleep, and rapid eye movement sleep. By analyzing this data, the smartwatch can provide users with a sleep structure analysis each night to help them understand how long they spend in each sleep stage.

GT5 Pro Max Blood Glucose Watch With BP+HRV+ECG(EKG)+SOS+Stress+Sleep Monitoring
It can not only monitor sleep stages, but also comprehensively evaluate sleep quality. Based on the user’s sleep efficiency, sleep duration, sleep efficiency, and the number of times you wake up at night, the GT5Pro Max will give an overall sleep score star. This data can help users identify potential sleep problems, such as insomnia or sleep apnea.

During sleep, the GT5Pro Max smartwatch monitors the user’s heart rate and breathing rate. By analyzing heart rate variability (HRV) and nighttime breathing patterns, it can detect abnormalities related to stress, anxiety, or other health problems. It can also provide warnings for irregular breathing at night.

GT5 Pro Max Blood Glucose Watch With BP+HRV+ECG(EKG)+SOS+Stress+Sleep Monitoring
Heart rate variability (HRV): HRV refers to the variation in the time interval between heartbeats. A higher HRV usually indicates that the body is relaxed and adaptable; a lower HRV may be associated with stress and fatigue.

In addition, stress is often one of the main factors affecting sleep quality. The GT5Pro Max smartwatch has added a stress test function. By comparing and analyzing the stress level, users can understand the specific impact of stress on their sleep and better manage stress.

GT5 Pro Max Blood Glucose Watch With BP+HRV+ECG(EKG)+SOS+Stress+Sleep Monitoring

 

Having healthy blood pressure is the key to maintaining normal cardiovascular function and preventing cardiovascular disease.

The GT5Pro Max Smartwatch uses nano-laser technology to accurately monitor blood pressure fluctuations, allowing you to check blood pressure (systolic/diastolic) anytime, anywhere.

It is very suitable for patients with hypertension, cardiovascular disease, and the elderly to monitor blood pressure status, and effectively helps early detection and early warning of diseases such as hypertension and cardiovascular disease.

GT5 Pro Max Blood Glucose Watch With BP+HRV+ECG(EKG)+SOS+Stress+Sleep Monitoring
If you are surrounded by high-intensity mental workers, the elderly, people who are hypoxic in alpine/plateau environments, and people who snore. It is recommended that you use GT5Promax with a blood oxygen saturation monitor to measure your blood oxygen saturation and understand your physical status. Such as tracking your awake, light, and deep sleep time and gauge blood oxygen saturation levels during the night.

GT5 Pro Max Blood Glucose Watch With BP+HRV+ECG(EKG)+SOS+Stress+Sleep Monitoring

The newly upgraded GT5 Pro Max smartwatch has added a breathing training function to help you sleep. In just a few seconds, GT5 GT5 Pro Max allows you to immerse yourself in breathing exercises in the simplest way. Through proper breathing training, you can improve breathing efficiency, increase the oxygen content in the blood, and promote oxygen delivery throughout the body. Here are some specific benefits of GT5 Pro Max breathing training on blood oxygen:

1. Increase lung efficiency.
2. Promote blood circulation.
3. Improve sleep quality.
4. Reduce stress and improve blood oxygen supply.
5. Improve breathing control and airway.

Protection in emergencies: life-saving SOS function

GT5 Pro Max Blood Glucose Watch With BP+HRV+ECG(EKG)+SOS+Stress+Sleep Monitoring

The SOS function of the GT5Pro Max Smartwatch allows the wearer to quickly and easily request help in an emergency. Pressing the dedicated emergency button automatically notifies predefined emergency contacts such as family, friends or professional service providers for immediate help.

After connecting to a mobile phone via Bluetooth, the watch allows you to make and receive voice calls, as well as receive text messages and social media notifications directly on your wrist, ensuring that you don’t miss important messages.

All-round protection of heart health!
Real-time heart rate monitoring

GT5 Pro Max Blood Glucose Watch With BP+HRV+ECG(EKG)+SOS+Stress+Sleep Monitoring

An unhealthy heart rate can lead to heart diseases such as myocarditis and cardiac arrest. The heart rate sensor of the GT5Pro Max Smartwatche smartwatch detects the human heart rate status at a frequency of 250 times per minute, displays real-time heart rate data, and has an alarm function for abnormal heart rate values ​​(such as arrhythmia and atrial fibrillation-AFib), which is very suitable for heart rate monitoring during daily activities.

GT5 Pro Max Blood Glucose Watch With BP+HRV+ECG(EKG)+SOS+Stress+Sleep Monitoring

More health features

50 exercise modes to help you lose weight.

GT5 Pro Max Blood Glucose Watch With BP+HRV+ECG(EKG)+SOS+Stress+Sleep Monitoring

GT5 Pro Max Blood Glucose Watch With BP+HRV+ECG(EKG)+SOS+Stress+Sleep Monitoring

Note: During the weight loss period, control your diet slightly and ensure 16 hours of fasting time every day.

Detect body composition and feel the joy of lower blood lipids after losing weight.

GT5 Pro Max Blood Glucose Watch With BP+HRV+ECG(EKG)+SOS+Stress+Sleep Monitoring

GT5 Pro Max Blood Glucose Watch With BP+HRV+ECG(EKG)+SOS+Stress+Sleep Monitoring
GT5 Pro Max Blood Glucose Watch With BP+HRV+ECG(EKG)+SOS+Stress+Sleep Monitoring
GT5 Pro Max Blood Glucose Watch With BP+HRV+ECG(EKG)+SOS+Stress+Sleep Monitoring
GT5 Pro Max Blood Glucose Watch With BP+HRV+ECG(EKG)+SOS+Stress+Sleep Monitoring

More life assistants

The GT5 PRO MAX are not limited to health and fitness, they also offer a host of convenient features. With built-in AAC audio technology, you can enjoy clear Bluetooth calls directly on your wrist. Receive text messages and app notifications, ensuring you don’t miss important information and locating a lost phone has never been easier.

GT5 Pro Max Blood Glucose Watch With BP+HRV+ECG(EKG)+SOS+Stress+Sleep Monitoring

GT5 Pro Max Blood Glucose Watch With BP+HRV+ECG(EKG)+SOS+Stress+Sleep Monitoring

GT5 Pro Max Blood Glucose Watch With BP+HRV+ECG(EKG)+SOS+Stress+Sleep Monitoring

GT5 Pro Max Blood Glucose Watch With BP+HRV+ECG(EKG)+SOS+Stress+Sleep Monitoring
GT5 Pro Max Blood Glucose Watch With BP+HRV+ECG(EKG)+SOS+Stress+Sleep Monitoring
GT5 Pro Max Blood Glucose Watch With BP+HRV+ECG(EKG)+SOS+Stress+Sleep Monitoring
GT5 Pro Max Blood Glucose Watch With BP+HRV+ECG(EKG)+SOS+Stress+Sleep Monitoring

All Features

  • Accurate sleep monitoring
  • Blood sugar monitoring
  • Blood pressure monitoring
  • ECG monitoring
  • Body temperature monitoring
  • Stress test
  • Bluetooth call
  • Voice assistant
  • Ali payment
  • 24-hour continuous heart rate monitoring; (24-hour continuous heart rate monitoring, analyze heart rate changes, and promptly remind when abnormalities are found)
  • Breathing training
  • Blood oxygen monitoring
  • Blood composition
  • Body composition
  • HRV monitoring and analysis
  • Activity tracking and exercise suggestions (pedometer, calories, mileage)
  • 50 exercise modes; (Enter exercise mode, press and hold for 3 seconds to activate, and when you start exercising, real-time monitoring of heart rate, steps, calorie consumption, and mileage from start to finish)
  • Alarm reminder (noiseless wake-up, 20 groups of event reminder icons)
  • Incoming call, SMS reminder function; (including Facebook, WhatsApp, Line, email, WeChat, QQ and other social software)
  • Remote control of taking pictures (by rotating the wrist and the bracelet touch screen)
  • Countdown, stopwatch function
  • Function switch (common switches: heart rate, blood pressure monitoring)
  • Incoming call reminder, mute, reject
  • RTC (12/24 hours)
  • Upgrade; music remote control
  • Computers; Games; Screen on duration and brightness adjustment

Package Lsit

  • 1* GT5 PRO MAX Watch
  • 1* GT5 PRO MAX Changer
  • 1* HM38 Watch
  • 1* HM38 Watch Changer
  • 1* HM38 User Guide
  • Free Fast Shipping Service

    Free shipping on orders over $59.99 & Fast delivery

  • 30-Day Free Return

    30 day guarantee to return or exchange your products.

  • 24/7 Support

    Email our devoted customer service team anytime.

  • Secure Payment

    Need to contact us?Just send us an e-mail at support@zoonfamily.com

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