Spa Luxetique Spa Gift Baskets for Women, 9 Pcs Vanilla Scent Bath and Body Sets, Beauty Birthday Gifts for Her
Spa Luxetique Spa Gift Baskets for Women, 9 Pcs Vanilla Scent Bath and Body Sets, Beauty Birthday Gifts for Her
${function() {
const variantData = data.variant || {"id":"827edf32-205c-4199-b603-8cc539be977b","product_id":"2d5a1513-4e18-4e78-b5f1-8164d2c51160","title":"","weight_unit":"lb","inventory_quantity":0,"sku":"spa-18-01-van-new-M","barcode":"","position":1,"option1":"","option2":"","option3":"","note":"","image":null,"wholesale_price":[{"price":25.99,"min_quantity":1}],"weight":"0","compare_at_price":"45.99","price":"25.99","retail_price":"45.99","available":true,"url":"\/products\/spa-luxetique-spa-gift-baskets-for-women-9-pcs-vanilla-scent-bath-and-body-sets-beauty-birthday-gifts-for-her?variant=827edf32-205c-4199-b603-8cc539be977b","available_quantity":999999999,"options":[],"off_ratio":"43","flashsale_info":{"variant_id":"827edf32-205c-4199-b603-8cc539be977b","product_id":"","quantity":0,"discount_id":"","limit_time":0,"limit_buy":0,"user_limit_buy":0,"discount_sales":0,"discount_sales_rate":"","discount_stock":0,"ends_at":0,"starts_at":0,"allow_oversold":"","allocation_method":"","price":"25.99","compare_at_price":"","discount_price":"25.99","customary_saved_price":"","customary_off_ratio":"","discount_saved_price":"","discount_off_ratio":"43","use_before_price":false,"before_price":"","title":"","properties":"","color_setting_promotional_copy":"","discount_quantity":0,"is_need_split":false},"sales":0};
const saveType = null;
const productSaveLabel = null;
return `
-
${ variantData.off_ratio }%
`; }()}
${function(){
return `
${data.starNum}/${data.starTotal}
`;
}()}
${function(){
return `
${data.showStarText === 'true' ? `
${data.starNum}/${data.starTotal}
` : ''}
`;
}()}
const TAG = 'spz-custom-revue-star';
class SPZCustomRevueStar extends SPZ.BaseElement {
constructor(element) {
super(element);
}
static deferredMount() {
return false;
}
buildCallback = () => {
this.action_ = SPZServices.actionServiceForDoc(this.element);
this.templates_ = SPZServices.templatesForDoc(this.element);
this.xhr_ = SPZServices.xhrFor(this.win);
this.starNum = this.element.getAttribute('starNum');
this.starTotal = this.element.getAttribute('starTotal');
this.showStarText = this.element.getAttribute('showStarText');
this.starColor = this.element.getAttribute('color');
this.interact = this.element.getAttribute('interact');
this.starSize = this.element.getAttribute('starSize') || 14;
}
mountCallback = () => {
this.doRender_({
starTotal: this.starTotal,
totalArray: Array.from({ length: Number(this.starTotal) }, (v, k) => k + 1),
starNum: this.starNum,
showStarText: this.showStarText,
starColor: this.starColor,
starSize: this.starSize
}).then(() => {
if (this.interact) {
this.addEventListeners_();
}
});
}
addEventListeners_ = () => {
const stars = document.querySelectorAll('.revue-star__star');
stars.forEach(star => {
star.addEventListener('click', event => {
const starEl = star.closest('.revue-star__star');
const starIndex = Number(starEl.dataset.index);
let isHalf = event.offsetX < star.offsetWidth / 2;
// rtl
if (document.documentElement.getAttribute('dir') === 'rtl') {
isHalf = event.offsetX > star.offsetWidth / 2;
}
const starValue = isHalf ? starIndex - 0.5 : starIndex;
this.starClickHandler_({ value: starValue });
});
});
}
renderStar = () => {
const isRtl = document.documentElement.getAttribute('dir') === 'rtl';
const stars = this.element.querySelectorAll('.revue-star__star');
stars.forEach((star, i) => {
const starIndex = i + 1;
const starEl = star.querySelector('svg:nth-child(2)');
const isHalf = this.starNum % 1 > 0 && Math.ceil(this.starNum) === starIndex;
const isSolid = starIndex <= Math.ceil(this.starNum);
starEl.style.display = isSolid ? 'block' : 'none';
if (isHalf) {
if (isRtl) {
// RTL布局下,如果是半星,显示星星的右半边
starEl.style.clipPath = `polygon(50% 0, 100% 0, 100% 100%, 50% 100%)`;
} else {
// LTR布局下,如果是半星,显示星星的左半边
starEl.style.clipPath = `polygon(0 0, 50% 0, 50% 100%, 0 100%)`;
}
} else {
starEl.style.clipPath = `polygon(0 0, 100% 0, 100% 100%, 0 100%)`
}
});
const showCountEle = this.element.querySelector('#revue-star-show-count');
showCountEle && SPZ.whenApiDefined(showCountEle).then((api) => {
api.render({ starNum: this.starNum, starTotal: this.starTotal });
});
}
doRender_ = (data) => {
return this.templates_
.findAndRenderTemplate(this.element, { starSize: this.starSize, ...data }, null)
.then((el) => {
const children = this.element.querySelector('*:not(template)');
children && SPZCore.Dom.removeElement(children);
this.element.appendChild(el);
})
.then(() => {
this.starNum = data.starNum;
this.renderStar();
});
}
starClickHandler_ = (event) => {
this.starNum = event.value;
this.renderStar();
this.triggerEvent_('change', { value: event.value });
}
triggerEvent_(name, data) {
const event = SPZUtils.Event.create(this.win, `${ TAG }.${ name }`, data || {});
this.action_.trigger(this.element, name, event);
}
isLayoutSupported(layout) {
return layout == SPZCore.Layout.CONTAINER;
}
}
SPZ.defineElement(TAG, SPZCustomRevueStar)
()
try {
const productId = window.SHOPLAZZA.meta.page.resource_id;
const productType = `default`;
const getProductReviews = (star_least) =>
fetch('/api/comment/count-star-multi',
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
product_id: [productId],
star_least: star_least || 1,
}),
}).then(res => res.json());
try {
const section = document.querySelector('#revue-product-star');
if(productType === "gift_card" && section) {
section.style.display = 'none';
}
} catch(e) {
console.log(e);
window.addEventListener('load', () => {
try {
const section = document.querySelector('#revue-product-star');
if(productType=== "gift_card" && section) {
section.style.display = 'none';
}
} catch(e) {
console.log(e)
}
})
}
const getReviewsConfig = async () => {
let data = {};
const url = new URL(window.location.href);
const preview_theme_id = url.searchParams.get('preview_theme_id');
const commentConfig = await fetch('/api/comment-config', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
}
}).then(res => res.json());
data = commentConfig.data;
const themeConfig = await fetch(`/api/comment-config?theme_id=${preview_theme_id || ''}`, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
}
}).then(res => res.json());
if (themeConfig?.data && themeConfig.data.star_color) {
data.star_color = themeConfig.data.star_color;
}
if (preview_theme_id) {
data.star_least = window.apps_global && apps_global.reviews && apps_global.reviews.preview_star_least;
} else if (themeConfig?.data && themeConfig.data.product_settings) {
data.star_least = themeConfig.data.product_settings.star_least;
}
return data;
};
if (productId && window.SHOPLAZZA.meta.page.template_type == 1) {
getReviewsConfig().then(async res => {
const config = res;
let review = await getProductReviews(config.star_least);
review = review.data[productId];
if (!config.open_status || (!review.comment_avg_star && !config.show_no_comment_star)) {
const section = document.querySelector('#revue-product-star');
if (section) section.remove();
return;
}
const render = async () => {
const section = document.querySelector('#revue-product-star');
const starComponent = document.querySelector('#revue-product-star-component');
const count = document.querySelector('#revue-product-star-count');
count.innerText = review.published_count;
const api = await SPZ.whenApiDefined(starComponent);
api.doRender_({
starNum: review.comment_avg_star,
starTotal: 5,
showStarText: false,
starColor: config.star_color,
totalArray: Array.from({ length: 5 }, (v, k) => k + 1)
});
section.style.opacity = 1;
}
render();
document.addEventListener('dj.editor.update', render);
});
}
} catch (e) {console.warn(e)};
${function() {
const minInventory = parseInt('7');
const maxInventory = parseInt('10');
const randomInventory = Math.round(Math.random() * (maxInventory - minInventory)) + minInventory;
const customText = "Only {stock} item(s) left in stock!".replace(/\{stock\}/g, '' + randomInventory + '');
const barWidth = (randomInventory / maxInventory) * 100 + '%';
return `
`;
}()}
Product was out of stock.
Product is unavailable.
Enjoy free shipping on every order, delivered to your doorstep no matter where you are in the world.
Shop with confidence with our hassle-free returns policy, ensuring you love what you buy.
Designed with the planet in mind, all our products are committed to sustainable practices.
Your payment information is always protected with our advanced, encrypted checkout security.
Pampering Vanilla Skin Care Body Wash Set
Our spa gift basket is formulated with nourishing ingredients, such as Sunflower Seed Oil, Vitamin E and Vanilla Essential Oils, that helps to nourish the skin and lock in moisture. A soak in the bath can boost mood and soothe the skin. Crucially, taking a bath gives us an increasingly rare opportunity to take a break from our busy lives. Crumble our bubble bath under a running tap, then lie back and relax under a blanket of bubbles.
Perfect Spa Kit for a Bath Routine
Tackle exhaustion with the help of our rose bath bombs, which has a soothing rose fragrance and has been formulated to enlighten moods. The bath salt inside is ideal for exfoliation and Relaxation. After you have rinsed off and patted yourself dry, your skin will be softer, brighter and glossier. A blend of Vanilla essential oil, shea butter&sunflower seed oil is ideal to heal dry skin and provide lasting moisturizing effects.
9 Pcs Vanilla Body Care Spa Set Includes:
7.9 oz Shower Gel, 7.9 oz Bubble Bath, 3.4 oz Body Lotion
2*1 oz Bath Bombs, 3.6 oz Body Butter, 3.5 oz Bath Salt
1* Bath Puff, 1* Cute Bath Tub
- Our spa gift basket is formulated with natural ingredients, that moisturize and refresh the body, and revitalize the mind and spirit.
- The item Includes: 2 Bath Bombs, Shower Gel, Bubble Bath, Body Lotion, Body Butter, Bath Salt, Bath Puff & Cute Bath Tub.
- Sweet with vanilla and sheer floral aroma that create a warm feeling to comfort the mind, body and spirit.
- Premium vanilla essential oils is known for relaxing and calming mind and body.
- This cute reusable bath tub can be used in many different ways such as storing a variety of items in a powder room, bathroom or bedroom.
- Our upscale and beautiful packaging wrapped in a beautiful bath tub is perfect as a gift or for your own indulgent pleasure.
- Fragrant and delightful assortment of luxury spa products will be sure to please you or a loved one.
- Replenishes skin and locks in moisture for naturally radiant skin.
- Relaxes and rejuvenates yourself and calms the mind and body.
Vendor by :
spa luxetique
Sku :
spa-18-01-van-new-M
Inventory :
999999999
${function(){
const variantData = data.variant || {"id":"827edf32-205c-4199-b603-8cc539be977b","product_id":"2d5a1513-4e18-4e78-b5f1-8164d2c51160","title":"","weight_unit":"lb","inventory_quantity":0,"sku":"spa-18-01-van-new-M","barcode":"","position":1,"option1":"","option2":"","option3":"","note":"","image":null,"wholesale_price":[{"price":25.99,"min_quantity":1}],"weight":"0","compare_at_price":"45.99","price":"25.99","retail_price":"45.99","available":true,"url":"\/products\/spa-luxetique-spa-gift-baskets-for-women-9-pcs-vanilla-scent-bath-and-body-sets-beauty-birthday-gifts-for-her?variant=827edf32-205c-4199-b603-8cc539be977b","available_quantity":999999999,"options":[],"off_ratio":"43","flashsale_info":{"variant_id":"827edf32-205c-4199-b603-8cc539be977b","product_id":"","quantity":0,"discount_id":"","limit_time":0,"limit_buy":0,"user_limit_buy":0,"discount_sales":0,"discount_sales_rate":"","discount_stock":0,"ends_at":0,"starts_at":0,"allow_oversold":"","allocation_method":"","price":"25.99","compare_at_price":"","discount_price":"25.99","customary_saved_price":"","customary_off_ratio":"","discount_saved_price":"","discount_off_ratio":"43","use_before_price":false,"before_price":"","title":"","properties":"","color_setting_promotional_copy":"","discount_quantity":0,"is_need_split":false},"sales":0};
return `
Vendor by :
${data.product && data.product.vendor}
Weight :
${variantData && variantData.weight}${variantData && variantData.weight_unit}
Barcode :
${variantData && variantData.barcode}
Sku :
${variantData && variantData.sku}
Inventory :
${variantData && variantData.available_quantity}
` }()}