SKU: BL230801935
Category: Suit
Thickness:conventional
Elasticity: non stretchy
Scenes:Daily Holiday Going Out
Material: Polyester
Style:Casual/RetroSize Chart:
Size Chest Top Length Pants Length Waist cm inch cm inch
Here are what our customers say.
Newest
Most liked
Highest ratings
Lowest ratings
Wow you reached the bottom
Most liked
Highest ratings
Lowest ratings
${function(){ const limit = typeof data === 'number' ? data : 0; return `
Pictures/Videos (${limit || 0}/5 )
` }()}
${(function(){ const closeIcon = '
'; if (item.type === 'image') { return `
${closeIcon}
` } return `
${closeIcon}
` })()}
Submit Comments Anonymously
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 { resultkey = decodeURIComponent(value); } catch (e) { resultkey = 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.
${function(){ const productData = data.product; let product_change_event = ''. mouse_over_event = ' '; mouse_out_event = ''; const product_options = productData.options.filter(Boolean) || ; for (let opt of product_options) { product_change_event = product_change_event + `quick-shop-selected-variant-${opt.name}.rerender(data=event.selectedValues.${opt.name});`; mouse_out_event = mouse_out_event + `quick-shop-selected-variant-${opt.name}.rerender(data=event.selectData.${opt.name});`; mouse_over_event = mouse_over_event + `@${opt.name}Mouseover="quick-shop-selected-variant-${opt.name}.rerender(data=event);"`; } const selectedVariant = productData.variants.find(v => v.available) || productData.variants0; const statusLan = ((selectedVariant && !selectedVariant.available) || (!selectedVariant && !productData.available)) ? "Sold out" : "Add to cart"; return ` ` }()} ${function(){ const currentSelectVariant = data.variant; const defaultVariant = (data.product && data.product.variants && data.product.variants0); const variantData = currentSelectVariant || defaultVariant || data; const retail_price = variantData.retail_price || 0; return ` ` }()} ${function(){ const wholesale_enabled = false; const qty = data.quantity || 1; const currentSelectVariant = data.variant; const defaultVariant = (data.product && data.product.variants && data.product.variants0); const productVariant = {"id":"dd3f4781-1b04-467b-b666-93363cb47e72"."product_id":"641f5ca5-e975-4db8-ada1-6f47f60a1e5f"."title":"Beige-S"."weight_unit":"kg"."inventory_quantity":0."sku":"BL230801935-Beige-S"."barcode":""."position":1."option1":"Beige"."option2":"S"."option3":""."note":""."image":{"src":"\/\/img.staticdj.com\/13b197bd6148dc6e140d50a15b3b1c58.png"."path":"13b197bd6148dc6e140d50a15b3b1c58.png"."width":800."height":900."alt":""."aspect_ratio":0.8888888888888888}."wholesale_price":{"price":48.75."min_quantity":1}."weight":"0.5"."compare_at_price":"0"."price":"48.75"."retail_price":"0"."available":true."url":"\/products\/abstract-geometric-line-printing-2-pieces-set?variant=dd3f4781-1b04-467b-b666-93363cb47e72"."available_quantity":999999999."options":{"name":"Color"."value":"Beige"}.{"name":"Size"."value":"S"}."off_ratio":0."flashsale_info":."sales":947}; const variantData = currentSelectVariant || defaultVariant || productVariant; const wholesale_price = variantData.wholesale_price || ; if(wholesale_enabled && wholesale_price.length > 0) { let wholesaleIndex = wholesale_price.findIndex(item => { return item.min_quantity > qty; }); if(wholesaleIndex < 0){ wholesaleIndex = wholesale_price.length - 1; }else if(wholesaleIndex > 0){ wholesaleIndex = wholesaleIndex - 1; } const wholesalePrice = wholesale_pricewholesaleIndex || ''; return `
` }else { const price = variantData && variantData.price; return price != undefined ? `
` : ' '; } }()} ${function() { let variantImageShowed = false; const currentProduct = data.product; return (currentProduct.options || ).map((option. index) => { const optionName = option.name || ''; const position = `option${index + 1}`; let isThumbImage = false; if (currentProduct.need_variant_image && !variantImageShowed) { const variantNames = "color" || ; for (let i = 0. len = variantNames.length; i < len; i++) { const name = variantNamesi.toLowerCase(); if (name === optionName.toLowerCase()) { isThumbImage = true; variantImageShowed = true; } } } const variantType = "button"; const thumbStyle = "image_with_text"; return `
${optionName}: ${option.values.map((value. idx) => { const selected = data.selectedValuesoptionName == value ? 'checked' : ''; let thumbImage = null; if (isThumbImage) { const variants = currentProduct.variants; for (let i = 0. len = variants.length; i < len; i++) { const variant = variantsi; if (variantposition == value && thumbImage == null) { thumbImage = variant.image; break; } } } return `
${value}
` }).join('')}
${optionName}
${option.values.map(value => { const selected = data.selectedValuesoptionName == value ? 'selected' : ''; return `${value} ` }).join('')} ` }).join(''); }()}
${data.originData && data.originData.value || data.value} ${function(){ const productData = data.product; let product_change_event = ''. mouse_over_event = ' '; mouse_out_event = ''; const product_options = productData.options.filter(Boolean) || ; for (let opt of product_options) { product_change_event = product_change_event + `quick-shop-selected-variant-${opt.name}.rerender(data=event.selectedValues.${opt.name});`; mouse_out_event = mouse_out_event + `quick-shop-selected-variant-${opt.name}.rerender(data=event.selectData.${opt.name});`; mouse_over_event = mouse_over_event + `@${opt.name}Mouseover="quick-shop-selected-variant-${opt.name}.rerender(data=event);"`; } const selectedVariant = productData.variants.find(v => v.available) || productData.variants0; const statusLan = ((selectedVariant && !selectedVariant.available) || (!selectedVariant && !productData.available)) ? "Sold out" : "Add to cart"; return ` ` }()} ${function(){ const currentSelectVariant = data.variant; const defaultVariant = (data.product && data.product.variants && data.product.variants0); const variantData = currentSelectVariant || defaultVariant || data; const retail_price = variantData.retail_price || 0; return ` ` }()} ${function(){ const wholesale_enabled = false; const qty = data.quantity || 1; const currentSelectVariant = data.variant; const defaultVariant = (data.product && data.product.variants && data.product.variants0); const productVariant = {"id":"dd3f4781-1b04-467b-b666-93363cb47e72"."product_id":"641f5ca5-e975-4db8-ada1-6f47f60a1e5f"."title":"Beige-S"."weight_unit":"kg"."inventory_quantity":0."sku":"BL230801935-Beige-S"."barcode":""."position":1."option1":"Beige"."option2":"S"."option3":""."note":""."image":{"src":"\/\/img.staticdj.com\/13b197bd6148dc6e140d50a15b3b1c58.png"."path":"13b197bd6148dc6e140d50a15b3b1c58.png"."width":800."height":900."alt":""."aspect_ratio":0.8888888888888888}."wholesale_price":{"price":48.75."min_quantity":1}."weight":"0.5"."compare_at_price":"0"."price":"48.75"."retail_price":"0"."available":true."url":"\/products\/abstract-geometric-line-printing-2-pieces-set?variant=dd3f4781-1b04-467b-b666-93363cb47e72"."available_quantity":999999999."options":{"name":"Color"."value":"Beige"}.{"name":"Size"."value":"S"}."off_ratio":0."flashsale_info":."sales":947}; const variantData = currentSelectVariant || defaultVariant || productVariant; const wholesale_price = variantData.wholesale_price || ; if(wholesale_enabled && wholesale_price.length > 0) { let wholesaleIndex = wholesale_price.findIndex(item => { return item.min_quantity > qty; }); if(wholesaleIndex < 0){ wholesaleIndex = wholesale_price.length - 1; }else if(wholesaleIndex > 0){ wholesaleIndex = wholesaleIndex - 1; } const wholesalePrice = wholesale_pricewholesaleIndex || ''; return `
` }else { const price = variantData && variantData.price; return price != undefined ? `
` : ' '; } }()} ${function() { let variantImageShowed = false; const currentProduct = data.product; return (currentProduct.options || ).map((option. index) => { const optionName = option.name || ''; const position = `option${index + 1}`; let isThumbImage = false; if (currentProduct.need_variant_image && !variantImageShowed) { const variantNames = "color" || ; for (let i = 0. len = variantNames.length; i < len; i++) { const name = variantNamesi.toLowerCase(); if (name === optionName.toLowerCase()) { isThumbImage = true; variantImageShowed = true; } } } const variantType = "button"; const thumbStyle = "image_with_text"; return `
${optionName}: ${option.values.map((value. idx) => { const selected = data.selectedValuesoptionName == value ? 'checked' : ''; let thumbImage = null; if (isThumbImage) { const variants = currentProduct.variants; for (let i = 0. len = variants.length; i < len; i++) { const variant = variantsi; if (variantposition == value && thumbImage == null) { thumbImage = variant.image; break; } } } return `
${value}
` }).join('')}
${optionName}
${option.values.map(value => { const selected = data.selectedValuesoptionName == value ? 'selected' : ''; return `${value} ` }).join('')} ` }).join(''); }()}
${data.originData && data.originData.value || data.value}
const TAG = 'spz-custom-painter-button-animation'; const MAX_ITERATION_COUNT = 99999999; const SITE = (window.C_SETTINGS && window.C_SETTINGS.routes && window.C_SETTINGS.routes.root) || ''; const ADD_TO_CART_ANIMATION_SETTING = `${SITE}/api/marketing_atmosphere_app/add_to_cart_btn_animation/setting`; class SpzCustomPainterButtonAnimation extends SPZ.BaseElement { /**@override */ static deferredMount() { return false; } /** @param {!SpzElement} element */ constructor(element) { super(element); /** @private {!../../src/service/xhr-impl.Xhr} */ this.xhr_ = SPZServices.xhrFor(this.win); /** @private {Object} */ this.data_ = null; /** @private {Element} */ this.addToCartButton_ = null; /** @private {boolean} */ this.productAvailable_ = true; /** @private {number} */ this.timerId_ = null; /** @private {number} */ this.animationExecutionCount_ = 0; /** @private {boolean} */ this.selectedVariantAvailable_ = true; /** @private {number} */ this.delay_ = 5000; /** @private {number} */ this.iterationCount_ = 5; /** @private {string} */ this.animationClass_ = ''; } /** @override */ isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } /** @override */ buildCallback() { this.productAvailable_ = this.element.hasAttribute('product-available'); this.selectedVariantAvailable_ = this.element.hasAttribute('selected-variant-available'); } /** @override */ mountCallback() { this.render_(); } /** @private */ render_() { if (!this.productAvailable_) { return; } this.fetch_().then((data) => { if (!data) { return; } this.data_ = data; this.animationClass_ = `painter-${data.animation_name}-animation`; this.iterationCount_ = data.animation_iteration_count === 'infinite' ? MAX_ITERATION_COUNT : data.animation_iteration_count; const animationDuration = 1; const animationDelay = data.animation_delay || 5; this.delay_ = (animationDuration + animationDelay) * 1000; this.handleButtonEffect_(); }); } /** * @param {JsonObject} data * @return {(null|Object)} * @private */ parseJson_(data) { try { return JSON.parse(data); } catch (e) { return null; } } /** * @return {Promise} * @private */ fetch_() { return this.xhr_.fetchJson(ADD_TO_CART_ANIMATION_SETTING).then((data) => { if (!data || !data.enabled) { return null; } return this.parseJson_(data.detail); }); } /** @private */ getAddToCartButton_() { this.addToCartButton_ = SPZCore.Dom.scopedQuerySelector( document.body. 'data-section-type="product" role="addToCart". data-section-type="product_detail" role="addToCart". data-section-type="product_detail" data-click="addToCart". data-section-type="product" data-click="addToCart"' ); } /** @private */ restartAnimation_() { this.addToCartButton_.classList.remove(this.animationClass_); this.addToCartButton_./* OK */ offsetWidth; this.addToCartButton_.classList.add(this.animationClass_); this.animationExecutionCount_++; } /** @private */ clearTimer_() { this.win.clearInterval(this.timerId_); this.timerId_ = null; } /** @private */ setupTimer_() { this.timerId_ = this.win.setInterval(() => { this.restartAnimation_(); if (this.animationExecutionCount_ >= this.iterationCount_) { this.removeAnimationClass_(); this.clearTimer_(); } }. this.delay_); } /** @private */ restartTimer_() { if (this.animationExecutionCount_ >= this.iterationCount_) { this.removeAnimationClass_(); return; } this.setupTimer_(); } /** @private */ listenVariantChange_() { SPZUtils.Event.listen(self.document. 'dj.variantChange'. (e) => { const selectedVariant = e.detail && e.detail.selected; if (!selectedVariant) { return; } const {available} = selectedVariant; if (this.selectedVariantAvailable_ !== available) { this.selectedVariantAvailable_ = available; this.clearTimer_(); if (available) { this.restartTimer_(); } } }); } /** @private */ removeAnimationClass_() { this.win.setTimeout(() => { this.addToCartButton_.classList.remove(this.animationClass_); }. 1000); } /** @private */ handleButtonEffect_() { this.getAddToCartButton_(); if (!this.addToCartButton_) { return; } if (this.selectedVariantAvailable_) { ++this.animationExecutionCount_; this.addToCartButton_.classList.add(this.animationClass_); if (this.iterationCount_ === 1) { this.removeAnimationClass_(); return; } this.setupTimer_(); } this.listenVariantChange_(); } } SPZ.defineElement(TAG. SpzCustomPainterButtonAnimation);