Spa Luxetique Gift Sets for Women - 15 Pcs Vanilla Scent Birthday Gifts Bath Baskets for Her
Spa Luxetique Gift Sets for Women - 15 Pcs Vanilla Scent Birthday Gifts Bath Baskets for Her
${function() {
const variantData = data.variant || {"id":"c5fa3a40-2bfe-4bba-8201-89c71a33d172","product_id":"a0a79ae0-560e-466f-b1b2-4c44ca081b8f","title":"","weight_unit":"lb","inventory_quantity":0,"sku":"2019-SPA-1(VAN)","barcode":"","position":1,"option1":"","option2":"","option3":"","note":"","image":null,"wholesale_price":[{"price":39.99,"min_quantity":1}],"weight":"0","compare_at_price":"65.99","price":"39.99","retail_price":"65.99","available":true,"url":"\/products\/spa-luxetique-gift-sets-for-women-15-pcs-vanilla-scent-birthday-gifts-bath-baskets-for-her?variant=c5fa3a40-2bfe-4bba-8201-89c71a33d172","available_quantity":999999999,"options":[],"off_ratio":"39","flashsale_info":{"variant_id":"c5fa3a40-2bfe-4bba-8201-89c71a33d172","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":"39.99","compare_at_price":"","discount_price":"39.99","customary_saved_price":"","customary_off_ratio":"","discount_saved_price":"","discount_off_ratio":"39","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.
The Spa Luxetique Gift Set for Women is a luxurious collection, perfect for pampering and relaxation. This exquisite 15-piece set features a harmonious blend of vanilla-scented products, creating a soothing and warm aromatic experience. Ideal for indulging in a spa-like bath at home, the set includes an array of items such as bubble bath, shower gel, bath salts, body lotion, body butter, hand cream, and more, all infused with the comforting scent of vanilla. Each product is crafted with high-quality ingredients that nourish and rejuvenate the skin, leaving it feeling soft, smooth, and delicately fragranced. Beautifully packaged, this bath basket is an elegant gift choice for birthdays, holidays, or special occasions, offering a touch of luxury and relaxation to any woman's daily routine. Spa Luxetique Spa Gift Basket, Vanilla Gift Baskets for Women, Luxury 15 Pcs Bath Gift Set, Relaxing at Home Bath Set with Massage Oil, Bath Salt, Bubble Bath, Beauty Gift Set for Women. Product
-
[Natural Bath & Body Spa Gift Baskets Set] - Our spa gift basket for women is formulated with natural ingredients, that moisturize and refresh the body, and revitalize the mind and spirit. Nourishing ingredients such as Sunflower Seed Oil, Vitamin E and Vanilla Essential Oils that helps to nourish the dry skin and lock in moisture
-
[Comforting Vanilla Essential Oils] - Premium vanilla essential oils is known for relaxing, calming, memory boost, mental clarity. Sweet with vanilla and sheer floral aroma that create a warm feeling to comfort the mind, body and spirit
-
[Great for Your Skin] - Pure essential oils give these awesome soaps their natural scent and plant extracts like essential oil, Shea butter, and nutrient-rich vitamins E leave your skin clean and happy
-
[Beautiful Handmade Gift Bag] - Our beautiful decorative bag of bath products is perfect as a gift or for your pleasure. Our fragrant and delightful assortment of luxury spa products will be sure to please you or a loved one. The cloth box can be used in many different ways such as storing a variety of items in a powder room, bathroom or bedroom
-
[A Special Gift Set] - Our exquisite packaging and premium products are perfect as a gift for yourself or a loved one. It makes a wonderful present for Birthdays, Holidays, Anniversaries, Christmas, Mother’s Day and Valentine’s Day
Vendor by :
spa luxetique
Sku :
2019-SPA-1(VAN)
Inventory :
999999999
${function(){
const variantData = data.variant || {"id":"c5fa3a40-2bfe-4bba-8201-89c71a33d172","product_id":"a0a79ae0-560e-466f-b1b2-4c44ca081b8f","title":"","weight_unit":"lb","inventory_quantity":0,"sku":"2019-SPA-1(VAN)","barcode":"","position":1,"option1":"","option2":"","option3":"","note":"","image":null,"wholesale_price":[{"price":39.99,"min_quantity":1}],"weight":"0","compare_at_price":"65.99","price":"39.99","retail_price":"65.99","available":true,"url":"\/products\/spa-luxetique-gift-sets-for-women-15-pcs-vanilla-scent-birthday-gifts-bath-baskets-for-her?variant=c5fa3a40-2bfe-4bba-8201-89c71a33d172","available_quantity":999999999,"options":[],"off_ratio":"39","flashsale_info":{"variant_id":"c5fa3a40-2bfe-4bba-8201-89c71a33d172","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":"39.99","compare_at_price":"","discount_price":"39.99","customary_saved_price":"","customary_off_ratio":"","discount_saved_price":"","discount_off_ratio":"39","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}
` }()}