Babeside Sleeping Reborn Baby Twinnie 17" African American Little Infant Boy Healing of the Heart
Babeside Sleeping Reborn Baby Twinnie 17" African American Little Infant Boy Healing of the Heart
Babeside Sleeping Reborn Baby Twinnie 17" African American Little Infant Boy Healing of the Heart
Babeside Sleeping Reborn Baby Twinnie 17" African American Little Infant Boy Healing of the Heart
Babeside Sleeping Reborn Baby Twinnie 17" African American Little Infant Boy Healing of the Heart
Babeside Sleeping Reborn Baby Twinnie 17" African American Little Infant Boy Healing of the Heart
Babeside Sleeping Reborn Baby Twinnie 17" African American Little Infant Boy Healing of the Heart
Babeside Sleeping Reborn Baby Twinnie 17" African American Little Infant Boy Healing of the Heart
Babeside Sleeping Reborn Baby Twinnie 17" African American Little Infant Boy Healing of the Heart
Babeside Sleeping Reborn Baby Twinnie 17" African American Little Infant Boy Healing of the Heart
Babeside Sleeping Reborn Baby Twinnie 17" African American Little Infant Boy Healing of the Heart
Babeside Sleeping Reborn Baby Twinnie 17" African American Little Infant Boy Healing of the Heart
Babeside Sleeping Reborn Baby Twinnie 17" African American Little Infant Boy Healing of the Heart
Babeside Sleeping Reborn Baby Twinnie 17" African American Little Infant Boy Healing of the Heart
Babeside Sleeping Reborn Baby Twinnie 17" African American Little Infant Boy Healing of the Heart
Babeside Sleeping Reborn Baby Twinnie 17" African American Little Infant Boy Healing of the Heart
Babeside Sleeping Reborn Baby Twinnie 17" African American Little Infant Boy Healing of the Heart
Babeside Sleeping Reborn Baby Twinnie 17" African American Little Infant Boy Healing of the Heart
Babeside Sleeping Reborn Baby Twinnie 17" African American Little Infant Boy Healing of the Heart
Babeside Sleeping Reborn Baby Twinnie 17" African American Little Infant Boy Healing of the Heart
Babeside Sleeping Reborn Baby Twinnie 17" African American Little Infant Boy Healing of the Heart
Babeside Sleeping Reborn Baby Twinnie 17" African American Little Infant Boy Healing of the Heart

Babeside Sleeping Reborn Baby Twinnie 17" African American Little Infant Boy Healing of the Heart

$69.99
$0.00
BUY NOW, PAY LATER
  • How it works?
  • Select one of the following as your payment method at checkout to pay in interest-free installments:

You must be over 18, a resident of the US, and meet the additional criteria to qualify. Late fees may apply. Loans to California residents made or arranged are pursuant to a California Finance Lenders Law license.

(function () { try { const getProduct = () => { const productJson = document.querySelector('#product-json'); if (productJson?.textContent) { return JSON.parse(productJson.textContent); } if (window.jQuery) { const $product = window.jQuery?.(document)?.data('djproduct'); const productData = JSON.parse(JSON.stringify($product || {})); return productData || {}; } return {}; }; const blockDomId = 'pm-block-afterpay-message-1539149753700-3' const placeholderDomId = 'pm-block-afterpay-message-placeholder-1539149753700-3' const badgeTheme = "black-on-mint"; const size = "md"; const shopCurrencyCode = "USD"; const productDetail = getProduct(); let productPrice = productDetail?.selected?.price || 69.99; let settingConfig; const req = { ROOT_URL: (C_SETTINGS && C_SETTINGS.routes && C_SETTINGS.routes.root) || '', post: async (url, data = {}) => { try { const response = await fetch(req.ROOT_URL + url, { method: 'POST', headers: { 'Content-Type': 'application/json', }, ...data, body: JSON.stringify(data.body), }); const result = await response.json(); return result } catch (error) { throw new Error('post request error' + error); } }, get: async (url, data = {}) => { try { const response = await fetch(req.ROOT_URL + url); const result = await response.json(); return result } catch (error) { throw new Error('get request error' + error); } } } const supportLocaleMap = { AU: 'en-AU', NZ: 'en-NZ', US: 'en-US', CA: 'en-CA', GB: 'en-GB', FR: 'fr-FR', IT: 'it-IT', ES: 'es-ES', DE: 'de-DE', } const getPayLaterSetting = () => { return req.post('/api/payment/pay-later-setting', {body: {payment_channel: 'afterpay'}}).then(res => { const result = { ...res, afterpay_currency_locale: supportLocaleMap?.[res?.afterpay_support_country?.[0]] || supportLocaleMap?.US || 'en-US' } return result; }); } const getBlockDom = () => { const blockDOM = document.getElementById(blockDomId); if (!blockDOM) { return; } return blockDOM } function errorHandler() { const blockDOM = getBlockDom(); if (blockDOM) { blockDOM.style.display = 'none'; } } function hasAfterpayMessage() { // 获取目标元素 const targetElement = document.getElementById(placeholderDomId); // 判断目标元素是否有兄弟元素节点 const siblings = Array.from(targetElement.parentNode.children).filter(function (node) { return node.nodeType === Node.ELEMENT_NODE; }); return siblings.length > 1 } function renderAfterpay(data = {}) { const blockDOM = getBlockDom(); if (!blockDOM) { return; } blockDOM.innerHTML = null; const placeholderDOM = document.createElement('div'); placeholderDOM.id = placeholderDomId; placeholderDOM.className = 'pm-display-none' blockDOM.appendChild(placeholderDOM); blockDOM.style.display = 'block'; if (window.Afterpay && typeof Afterpay?.createPlacements === 'function' && !hasAfterpayMessage()) { try { Afterpay.createPlacements({ targetSelector: `#${placeholderDomId}`, attributes: { locale: data.afterpay_currency_locale, currency: data.afterpay_currency, amount: data.productPrice, size: size, badgeTheme: badgeTheme, } }); } catch (e) { console.error('payment-sdk:', e); } } } async function init(data = {}) { const blockDOM = getBlockDom(); if (!blockDOM) { return; } if (!settingConfig) { settingConfig = await getPayLaterSetting(); } if(data?.detail?.selected?.price){ productPrice = data?.detail?.selected?.price; } if ( !settingConfig || !settingConfig.afterpay_promo_msg_enabled || !settingConfig.afterpay_max_amount || !settingConfig.afterpay_min_amount || !settingConfig.afterpay_support_country || shopCurrencyCode !== settingConfig.afterpay_currency || Number(productPrice) <= Number(settingConfig.afterpay_min_amount) || Number(productPrice) > Number(settingConfig.afterpay_max_amount) ) { errorHandler(); return; } const scriptDOM = document.getElementById('pm-afterpay-sdk'); if (!scriptDOM) { window.addEventListener('Afterpay.ready', () => renderAfterpay({ ...settingConfig, productPrice })); const afterpaySDK = document.createElement('script'); afterpaySDK.id = 'pm-afterpay-sdk' afterpaySDK.src = 'https://js.afterpay.com/afterpay-1.x.js'; afterpaySDK.setAttribute('data-analytics-enabled', ''); afterpaySDK.setAttribute('data-min', settingConfig.afterpay_min_amount); afterpaySDK.setAttribute('data-max', settingConfig.afterpay_max_amount); afterpaySDK.async = true; afterpaySDK.onerror = errorHandler; document.body.appendChild(afterpaySDK); } else { renderAfterpay({...settingConfig, productPrice}); } } document.addEventListener('dj.variantChange', init); init(); } catch (e) { console.error('payment-sdk-afterpaymessage:', e) } })()
Material-Cloth Body(Soft to Snuggle)
Please select a material
Quantity

All sculptures, and photographs are owned by Babeside brand and protected by Federal copyrights, and we vigorously defend them!

Fast Shipping
30 Day Returns Warranty
Artist Made
Secure Payments
About Twinnie

Name: Twinnie
Gender: Boy
Age: Toddler
Length: 17" (43 cm)
Doll Weight: 0.7kg/1.54lbs
Head/Neck Material: Vinyl,
Torso Material: Cloth
Arms/Legs Material: Vinyl
Eyes: Always open,cannot close
Lashes: Hand-Rooted
Hair: Hand-Rooted, Short Black Curls
Paint: Hand-Painted
Poseable: Can be posed in many cute ways!

How do I pay?

You can place an order on our web site and pay with a major credit card*, debit card, or PayPal.

Notice:we do not accept checks or money orders. 

How do I track my package?

You will be emailed a shipment confirmation email along with a tracking number to track the shipment of your package. Click Here to enter tracking number to track your package. The online update of logistics information may be delayed for 1-2 days, please wait patiently Thanks.

When Will My Order Arrive?

For shipping options and delivery times, please check here to know more information.

How do I care for my doll?

We have a complete guide to assist you in caring for your doll. You can find Doll Care Tips

Do you have dolls that are perfect for kids under 14?

Yes, All babeside reborn dolls have been safely tested for kids 3+.  

Are your dolls posable?

All babies can pose, they have flexible limbs.

Do you have dolls with rooted hair?

Each baby's shape is one of a kind.Some dolls are hair rooted hair, some are hand painted, you can easily get this information in the product description.

Are Customs and Duties Fees included in the price of my order?

No. Customs and duties fees are beyond Babeside’s control. These fees are the sole responsibility of the customer and must be paid upon receiving the package. The exact amount varies depending on the country and the items included in the order.

Have more questions? Contact us

E-mail: support@babeside.com

1. Shipping Area: 

 The countries we currently ship to: United States,Australia,Canada,United Kingdom, New Zealand & Countries in Europe.

2. Shipping Fee: For All Product, Silicone Baby Excluded.

Country Shipping Method Commodity Price Shipping Fee shipping time
US Standard Shipping 0-98.99 16.99 8-10 Businees Day
Free Standard Shipping 99+ Free Shipping 8-10 Businees Day
Priority Shipping $24.99+$10*(Order Weight-1.5)/0.5kg 5-7 Businees Day
UK Standard Shipping 0-98.99 16.99 8-10 Businees Day
Free Standard Shipping 99+ Free Shipping 8-10 Businees Day
Priority Shipping $24.99+$6*(Order Weight-1.5)/0.5kg 5-7 Businees Day
CA Standard Shipping 22.99 8-10 Businees Day
Priority Shipping $24.99+$15*(Order Weight-1.5)/0.5kg 5-7 Businees Day
AU Standard Shipping 0-98.99 18.99 8-10 Businees Day
Free Standard Shipping 99+ Free Shipping 8-10 Businees Day
Priority Shipping $24.99+$12*(Order Weight-1.5)/0.5kg 5-7 Businees Day
EU Standard Shipping 0-98.99 18.99 8-10 Businees Day
Free Standard Shipping 99+ Free Shipping 5-7 Businees Day

United States

(Puerto Rico, Alaska, Hawaii, Guam)

Standard Shipping 0-98.99 16.99 8-10 Businees Day
Free Standard Shipping 99+ Free Shipping 8-10 Businees Day

Shipping Fee: For Full Silicone Baby

Country Shipping Method Commodity Price Shipping Fee shipping time
US/UK/CA/AU/EU Standard Shipping 0-178.99 18.99 8-10 Businees Day
Free Standard Shipping 179.99 Free Shipping 8-10 Businees Day

United States

(Puerto Rico, Alaska, Hawaii, Guam)

Standard Shipping $39.99+$10*(Order Weight-1.5)/0.5kg 8-10 Businees Day

Shipping Fee: For Mini Silicone Baby

Country Shipping Method Commodity Price Shipping Fee shipping time
US+EU Standard Shipping 0-98.99 9.99 8-10 Businees Day
Free Standard Shipping 99+ Free Shipping 8-10 Businees Day
CA+AU Standard Shipping 0-98.99 9.99 8-10 Businees Day
Free Standard Shipping 99+ Free Shipping 8-10 Businees Day

United States

(Puerto Rico, Alaska, Hawaii, Guam)

Standard Shipping 49.99 8-10 Businees Day

ABOUT FULL SILICONE BABIES
Attention: The actual weight of the full silicone baby dolls is more approximate to that of the real baby, thus the freight cost will rise within a reasonable range.The actual freight will be charged according to the price and weight of the full silicone baby you purchase, sorry for any inconvenience caused.

3. Delivery time =processing time + shipping time

Processing Time:

It might take 1-2 business days to ship out your order, excluding holidays, to process your order. You will receive a notification email with tracking information once your order has been shipped.

Note: If you purchase multiple items, your order may be split into multiple packages. If you only receive one of the packages, please don't worry and wait patiently.

Tips: If you are interested in pre-order items, please check the estimated date provided on the product's description page. Also, we kindly advise against choosing express shipping for pre-order items.
 

4. Taxes

When applicable, you are responsible for paying import taxes and duties. For further details please get in touch with your local customs office.

5. Cancellation or Change the Address

A confirmation email will be sent to you once you complete the order and we will prepare your order immediately. If you need to change or cancel your order, please reach us at support@babeside.com as soon as possible and we will do our best to help.

 

6. How to track my order?

Once your package is shipped, we will send you the package's tracking number via email. You can enter your tracking number here Or you may get in touch with our customer service via email: support@babeside.com and our customer service staff will respond within 24 hours!

 

7. Shipping Partners

shipping carrier

Babeside creates premium reborn dolls, ensuring each baby is unique and adorable. At Babeside, If you're not happy with your purchase for any reason, Please contact our support team at support@babeside.com promptly, and we will offer you solutions according to your case.

30 days money back guarantee

We offer a 30-day money back guarantee on all orders. Customers may contact our support team within 30 days of receiving the items to initiate the refund process. Babeside is committed to upholding the legal rights of every customer as much as possible and properly handles all requests for returns and exchanges.
In case you need to return or exchange items after the 30-day period, please contact our customer service, and we will work with you to find a feasible solution based on your current situation.

How do I return an item?

  1. Please submit your return request to support@babeside.com, ensuring to provide a reason for the return.
  2. Our support team will follow up with you on your return request.
  3. Prepare your items in the original packaging and return them to the return address we provided.
  4. Provide us with the tracking number after the package is returned.

How to get a refund or exchange?

Upon receipt of returned goods for processing, refund or exchange will commence.
Refund:
All refunds will be issued using the original payment method that was used at checkout. The timeframe for receiving the refund will vary depending on the payment method you used for the order. Please find below payment methods and approximate processing times for your reference. Your patience is appreciated.
PayPal account refunds: 3-5 business days
Credit card refunds: 5-10 business days
Exchange:
An exchange will be processed within 48 hours of receiving and processing your return. The logistics time typically takes 7-10 business days, depending on your delivery location. The exchange will be shipped to either your original address or the new address you provided, and a tracking number will be provided to you once it is available.

Special Notice: Returns must comply with the following terms

-Any return or refund requests not authorized by customer service will not be honored.
-Please do not use the sender's address on your package as the return address, as this is NOT the return address and may impact the processing of your return.
-To qualify for returns or refunds, items must be in their original condition and include all accessories, giveaways, and packaging.
-We are not liable for returns that are lost in transit, damaged during delivery, or not delivered to our return address.

Still need help?

If you have any additional questions, please don't hesitate to contact us via email at support@babeside.com. We will respond within 24 hours.

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

Here are what our customers say.

Write a Review
Customer Reviews
Wow you reached the bottom
Newest
Most liked
Highest ratings
Lowest ratings
×
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.