Spa Luxetique Gift Sets for Women Relaxing - 5 Pcs Vanilla Luxury Bath Set, Beauty Birthday Gifts for Her
Spa Luxetique Gift Sets for Women Relaxing - 5 Pcs Vanilla Luxury Bath Set, Beauty Birthday Gifts for Her
${function() {
const variantData = data.variant || {"id":"0f570546-ff88-4130-b95b-024408364e50","product_id":"9723898d-fdf3-4baf-a605-32a359f6d457","title":"","weight_unit":"lb","inventory_quantity":0,"sku":"2019-SPA-6-VAN-M","barcode":"","position":1,"option1":"","option2":"","option3":"","note":"","image":null,"wholesale_price":[{"price":20.99,"min_quantity":1}],"weight":"0","compare_at_price":"35.99","price":"20.99","retail_price":"35.99","available":true,"url":"\/products\/spa-luxetique-gift-sets-for-women-relaxing-5-pcs-vanilla-luxury-bath-set-beauty-birthday-gifts-for-her?variant=0f570546-ff88-4130-b95b-024408364e50","available_quantity":999999999,"options":[],"off_ratio":"42","flashsale_info":{"variant_id":"0f570546-ff88-4130-b95b-024408364e50","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":"20.99","compare_at_price":"","discount_price":"20.99","customary_saved_price":"","customary_off_ratio":"","discount_saved_price":"","discount_off_ratio":"42","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.
Welcome to SPA LUXETIQUE!
Spa Luxetique set is the perfect spa gift set, dedicated to helping people enjoy the relaxation brought by bathing in a comfortable home, providing an immersive experience, allowing users to easily access a comprehensive spa experience in just a few steps.
Perfect Gift Set for Her:
SPA LUXETIQUE encouraging the art of gifting, each product of Spa Luxetique is designed with the concept of gift giving in mind, whether it is for loved ones or for oneself, it's a perfect gift for birthdays, holidays, anniversaries, Christmas, Mother’s Day and Valentine’s Day.
Home Bath Spa Gift Set Includes:
Shower Gel& Bubble Bath(95ml), Hand Cream(30ml)
Body Butter(3.2oz), Bar Soap(1.76oz)
Reusable Burlap Linen Bag with Drawstring X1
-
Vanilla Bath Kit for Women: Our luxury spa kit formulated with enriching shea butter and vitamin E which soften your skin, revitalize your mind and spirit, leave you feeling delightful all day
-
Shower Gel & Bubble Bath: The natural ingredients inside is perfect for nourishing skin. Easy to Carry for travel and outdoors. Perfect to carry everywhere and for on-the-go cleansing and moisturizing needs
-
bar Soap: 3-in-1 Soaps are formulated to be used as a hand wash, shower gel, shampoo, bubble bath, or a shave gel. nutrient-rich vitamins E leave your skin clean and happy
-
Body Butter: Body butter is very sticky which is suitable for people with dry skin. Your skin pores open after a hot bath, making it the best time to moist your body by using the body butter
-
Reusable Drawstring Burlap Bag: This natural burlap gift bag made of high quality burlap material, Can be applied to store gifts, jewelries, snacks, cream jars, makeup bottle, coins, candy, wedding favors, chains, sachets
-
Exquisite Spa Gift Set for Your Loved: Spa Luxetique Spa Gift Box is a unique gifts for women, A Relaxing Bath Combination revitalize your mind and spirit, leave you feeling delightful all day,the Bath Gift Set makes a wonderful gift for your loved ones on Valentine's Day, Christmas, Mother's Day, Birthday, Party, Wedding, Anniversaries
Vendor by :
spa luxetique
Sku :
2019-SPA-6-VAN-M
Inventory :
999999999
${function(){
const variantData = data.variant || {"id":"0f570546-ff88-4130-b95b-024408364e50","product_id":"9723898d-fdf3-4baf-a605-32a359f6d457","title":"","weight_unit":"lb","inventory_quantity":0,"sku":"2019-SPA-6-VAN-M","barcode":"","position":1,"option1":"","option2":"","option3":"","note":"","image":null,"wholesale_price":[{"price":20.99,"min_quantity":1}],"weight":"0","compare_at_price":"35.99","price":"20.99","retail_price":"35.99","available":true,"url":"\/products\/spa-luxetique-gift-sets-for-women-relaxing-5-pcs-vanilla-luxury-bath-set-beauty-birthday-gifts-for-her?variant=0f570546-ff88-4130-b95b-024408364e50","available_quantity":999999999,"options":[],"off_ratio":"42","flashsale_info":{"variant_id":"0f570546-ff88-4130-b95b-024408364e50","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":"20.99","compare_at_price":"","discount_price":"20.99","customary_saved_price":"","customary_off_ratio":"","discount_saved_price":"","discount_off_ratio":"42","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}
` }()}