🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
27 / 27
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage
50% OFF
countdiss

🔥Achetez 1 obtenez 1 Gratuitement🔥-Stylo à Sourcils Microblading 3D étanche à 4 Pointes de fourche pour tatouage

€19.99 €39.98
127 ventes
Achetez plus, économisez plus.
Quantité

Le microblading sur vos sourcils sans douleur !

Avec le nouveau Microblading Eyebrow, vous obtiendrez les beaux sourcils que vous désirez tant sans avoir à passer par ces aiguilles douloureuses.

Dessinez des poils précis confortablement. Le design de la fourchette 3D à 4 dents donne un effet super naturel à vos sourcils en peu de temps.

Qu'est-ce qui différencie le Microblading Eyebrow des autres crayons ?

  • Embout à 4 pointes
    L'extrémité à pointes multiples crée 4 lignes microfines, semblables à des poils, d'un seul coup, comblant ainsi vos zones dépourvues de poils en quelques coups de pinceau. Cet applicateur à pointe crée l'illusion de vrais poils de sourcils poussant naturellement. L'embout souple imite la texture plumeuse des sourcils pour éviter que les sourcils ne paraissent trop épais. Fini le remplissage des sourcils à l'ancienne !

  • Effet indolore du microblading 4D
  • Une alternative de maquillage indolore et plus durable à la chirurgie de microblading, tout en offrant un aspect naturellement microbladé. Les traits créés, semblables à des cheveux, se fondent parfaitement avec vos propres sourcils.  Il suffit de dessiner pour obtenir des sourcils broussailleux et frais comme au salon, sans passer par une chirurgie douloureuse ou une broderie des sourcils.

  • Longue durée, imperméable, résistant aux bavures, avec une forte tenue. Maintient l'effet de microblading qui reste fidèle aux couleurs jusqu'à 24 heures sans que les pigments ne s'estompent.

  • Maquillage sans maquillage
  • Les sourcils sont INDISPENSABLES lorsqu'on opte pour un look sans maquillage ! L'ajout d'un effet de microblading à vos sourcils définit complètement votre visage à l'intérieur de leur cadre.

  • Convient à toutes les carnations
  • Nous proposons 5 teintes polyvalentes qui flattent les tons chauds, froids et neutres pour s'adapter parfaitement à votre teint ou à votre style de maquillage.

Il est très facile à porter et à enlever !

Il ne nécessite pas les compétences d'un maquilleur professionnel. Il peut être utilisé par les débutantes et les professionnelles. Il s'enlève facilement à l'aide d'une lotion démaquillante ou d'une huile nettoyante.



Sourcils : 3D Waterproof Microblading Eyebrow Pen 4 Fork Tip Tattoo Pencil

Poids : 20g

Taille du produit : 12.8*1.3*1.3cm

Garantie : 3 ans

Résistant à l'eau : Oui

Ingrédients : eau, copolymère acrylique, butylène glycol, hexylène glycol, éthylglycérine, vitamine E.

Durée de vie : 36 heures

Application : Convient à tous les types de peau

Le paquet comprend : 2* Stylo à sourcils 3D Waterproof Microblading 4 Crayon de tatouage à pointe fourchue

Nos qualifications

Conception brevetée, conforme à la FDA.

undefined

A propos du mode de paiement :

Nous acceptons PAYPAL et les cartes de crédit.



Notre service après-vente
Nous offrons un service clientèle 24 heures sur 24 : vis@saviving.com. Si vous rencontrez des problèmes s'il vous plaît ne vous inquiétez pas, laissez un message au service à la clientèle, nos produits sont en vente et il y a beaucoup de messages, s'il vous plaît être patient et attendre une réponse.

Ajoutez à votre panier d'achat maintenant ! Bon magasinage !

▶Attention :

# Pour usage externe uniquement. Éviter le contact direct avec les yeux.

# En cas de contact, rincer abondamment à l'eau.

# En cas d'irritation, cesser l'utilisation. Tenir hors de portée des enfants et des animaux domestiques.

# Conserver dans un endroit frais, à l'abri de la lumière directe du soleil.

▶Advice

Cher client, en raison de l'effet d'éclairage, de la luminosité du moniteur, de la mesure manuelle, etc, il pourrait y avoir de légères différences de couleur et de taille entre la photo et l'article réel. Nous espérons sincèrement que vous pouvez comprendre ! Merci de votre compréhension !

 

87.3% des clients ont également acheté Je n'aime pas ça?

❤️ASTUCE : Tous nos produits sont authentiques, avec de vrais brevets, les contrefaçons doivent être examinées ! Veuillez marquer nos produits !!!

😊Si vous n'êtes pas satisfait des articles reçus, veuillez nous contacter dans les 15 jours suivant la réception et nous vous apporterons la meilleure assistance possible !

🚢Livraison >> Livraison express efficace disponible dans toute la France.

🔥98,9 % de nos clients achètent 2 articles ou plus. Obtenez le vôtre dès maintenant !

Si vous avez encore des questions, veuillez nous contacter directement à l'adresse e-mail 👉 service@bonusvogue.com

émettre un commentaire
Commentaire de clients
tu as atteint le fond
Le plus récent
Le plus aimé
Meilleures notes
Notes les plus basses
×
class SpzCustomFileUpload extends SPZ.BaseElement { constructor(element) { super(element); this.uploadCount_ = 0; this.fileList_ = []; } buildCallback() { this.action = SPZServices.actionServiceForDoc(this.element); this.registerAction('upload', (data) => { this.handleFileUpload_(data.event?.detail?.data || []); }); this.registerAction('delete', (data) => { this.handleFileDelete_(data?.args?.data); }); this.registerAction('preview', (data) => { this.handleFilePreview_(data?.args?.data); }); this.registerAction('limit', (data) => { this.handleFileLimit_(); }); this.registerAction('sizeLimit', (data) => { this.handleFileSizeLimit_(); }); } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } setData_(count, file) { this.uploadCount_ = count; this.fileList_ = file; } handleFileUpload_(data) { data.forEach(i => { if(this.fileList_.some(j => j.url === i.url)) return; this.fileList_.push(i); }) this.uploadCount_++; sessionStorage.setItem('fileList', JSON.stringify(this.fileList_)); this.triggerEvent_("handleFileUpload", { count: this.uploadCount_, files: this.fileList_}); if(this.fileList_.length >= 5){ document.querySelector('#review_upload').style.display = 'none'; } if(this.fileList_.length > 0){ document.querySelector('.apps-reviews-write-anonymous-box').style.marginTop = '8px'; } } handleFileDelete_(index) { this.fileList_.splice(index, 1); this.uploadCount_--; sessionStorage.setItem('fileList', JSON.stringify(this.fileList_)); this.triggerEvent_("handleFileDelete", { count: this.uploadCount_, files: this.fileList_}); document.querySelector('#review_upload').style.display = 'block'; if(this.fileList_?.length === 0){ document.querySelector('.apps-reviews-write-anonymous-box').style.marginTop = '132px'; } } handleFilePreview_(index) { const finalPreviewData = this.fileList_[index]; const filePreviewModal = document.getElementById('filePreviewModal'); const fullScreenVideo = document.getElementById('fullScreenVideo'); const fullScreenImage = document.getElementById('fullScreenImage'); const previewModalClose = document.getElementById('previewModalClose'); const previewLoading = document.getElementById('previewLoading'); filePreviewModal.style.display = 'block'; previewLoading.style.display = 'flex'; if(finalPreviewData?.type === 'video'){ const media = this.mediaParse_(this.fileList_[index]?.url); fullScreenVideo.addEventListener('canplaythrough', function() { previewLoading.style.display = 'none'; }); fullScreenImage.src = ''; fullScreenImage.style.display = 'none'; fullScreenVideo.style.display = 'block'; fullScreenVideo.src = media.mp4 || ''; } else { fullScreenImage.onload = function() { previewLoading.style.display = 'none'; }; fullScreenVideo.src = ''; fullScreenVideo.style.display = 'none'; fullScreenImage.style.display = 'block'; fullScreenImage.src = finalPreviewData.url; } previewModalClose.addEventListener('click', function() { filePreviewModal.style.display = 'none'; }); } handleFileLimit_() { alert(window.AppReviewsLocale.comment_file_limit || 'please do not upload files more than 5'); this.triggerEvent_("handleFileLimit"); } handleFileSizeLimit_() { alert(window.AppReviewsLocale.comment_file_size_limit || 'File size does not exceed 10M'); } clear(){ this.fileList_ = []; this.uploadCount_ = 0; sessionStorage.setItem('fileList', JSON.stringify(this.fileList_)); this.triggerEvent_("handleClear", { count: this.uploadCount_, files: this.fileList_}); document.querySelector('#review_upload').style.display = 'block'; } mediaParse_(url) { var result = {}; try { url.replace(/[?&]+([^=&]+)=([^&]*)/gi, function (str, key, value) { try { result[key] = decodeURIComponent(value); } catch (e) { result[key] = value; } }); result.preview_image = url.split('?')[0]; } catch (e) {}; return result; } triggerEvent_(name, data) { const event = SPZUtils.Event.create(this.win, name, data); this.action.trigger(this.element, name, event); } } SPZ.defineElement('spz-custom-file-upload', SpzCustomFileUpload);
The review would not show in product details on storefront since it does not support to.
class SpzSmartBlockComponent extends SPZ.BaseElement { constructor(element) { super(element); this.templates_ = null; this.container_ = null; this.i18n_ = {}; this.config_ = {}; this.show_type_ = 3; this.product_resource_id_ = ''; this.collection_resource_id_ = ''; this.cart_items_ = []; this.customer_id_ = ''; this.order_id_ = ''; } static deferredMount() { return false; } isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER; } buildCallback() { const template_type = window.SHOPLAZZA.meta.page.template_type; if (template_type === 1) { this.show_type_ = 3; this.product_resource_id_ = window.SHOPLAZZA.meta.page.resource_id; } else if (template_type === 2) { this.show_type_ = 4; this.collection_resource_id_ = window.SHOPLAZZA.meta.page.resource_id; } else if (template_type === 15){ this.show_type_ = 5; } else if (template_type === 13){ this.show_type_ = 6; } else if (template_type === 20){ this.show_type_ = 7; this.customer_id_ = window.SHOPLAZZA.customer.customer_id; } else if (template_type === 35){ this.show_type_ = 8; this.order_id_ = window.location.pathname.split('/').pop(); } this.templates_ = SPZServices.templatesForDoc(this.element); this.setAction_(); } mountCallback() { console.log('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);