Spa Luxetique Bath Gift Sets for Women, 15 Pcs Lavender Spa Baskets for Her, Relaxing Birthday Holiday Gifts for Her
Spa Luxetique Bath Gift Sets for Women, 15 Pcs Lavender Spa Baskets for Her, Relaxing Birthday Holiday Gifts for Her
${function() {
const variantData = data.variant || {"id":"4d7adbac-080c-4397-8e5c-b19d82ba5bc7","product_id":"e270fbfd-f70b-4c06-99f9-96fad8bc737c","title":"","weight_unit":"lb","inventory_quantity":0,"sku":"2019-SPA-1(LAV)-M","barcode":"","position":1,"option1":"","option2":"","option3":"","note":"","image":null,"wholesale_price":[{"price":40.99,"min_quantity":1}],"weight":"0","compare_at_price":"65.99","price":"40.99","retail_price":"65.99","available":true,"url":"\/products\/spa-luxetique-bath-gift-sets-for-women-15-pcs-lavender-spa-baskets-for-her-relaxing-birthday-holiday-gifts-for-her?variant=4d7adbac-080c-4397-8e5c-b19d82ba5bc7","available_quantity":999999999,"options":[],"off_ratio":"38","flashsale_info":{"variant_id":"4d7adbac-080c-4397-8e5c-b19d82ba5bc7","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":"40.99","compare_at_price":"","discount_price":"40.99","customary_saved_price":"","customary_off_ratio":"","discount_saved_price":"","discount_off_ratio":"38","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)) 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.
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.
SPA LUXETIQUE, Love at First Scent
Each spa product designed with the concept of highest quality gift giving! Our exquisite packaging and premium products are perfect as a gift for yourself or women you loved. Gift for Birthdays, Holidays, Anniversaries, Christmas, Mother’s Day and Valentine’s Day.
A combination of Luxury & Relaxation
Add a few drops to your bath, or pour sparingly into warm water; Dip a hand towel into the mixture; Keep the towel folded over your eyes for 10 to 15 Minutes; Add some fun to your bath time: Pop one bath bomb in your bath for a relaxing soak with an explosion of fragrance leaving your skin feeling soft and hydrate.
Pampering 15pc Lavender Bath & Body Set:
Shower Gel(235ml); Bubble Bath(235ml); Bath Salt(200g)
Body Scrub(105ml); Body Lotion(105ml); Hand Cream(100ml)
Massage Oil(30ml); Shampoo Bar(50g); Soap(100g)
2*Bath Bombs(150g); Bath Loofah; Body Brush
Hair Drying Towel; Handmade Tote Bag
-
Natural Body Care Spa Gift Set: Our bath gift basket is formulated with natural ingredients, Sunflower Seed Oil, Vitamin E and Lavender Essential Oils, which moisturize and refresh the body, and revitalize the mind and spirit
-
Relaxing Lavender Massage Oil: Our lavender massage oil blended to the natural oils enriched with lavender oils to create a calming romantic aroma for relaxation & stress relief, great for body massage
-
Beautiful Handmade Gift Bag: Our beautiful decorative bag of bath products is perfect as a gift for women you loved or for your own pleasure. The bag can be used in many different ways: at the beach, running errands, going shopping, or just a day out
-
Deep Breath in Lavender Sea: The sleep enhancing fragrance lavender contained in spa set can improve mood. Try surrounding yourself with the lavender scent and sink deep into dream time
-
Soak off Pressure: A soak in the bath can boost mood and soothe the skin. So just have a daily soak using our lavender spa sets will lie back and relax, get lost in thought
-
Shampoo Bar: While soothes stressed-out skin, a heady fusion of fragrances allows your mind to wander. The effect is a feeling of serenity that lingers long after you leave the shower
-
Portable Hand Cream: The Shea butter and sunflower seed oil contain a high quantity of saturated fats, Vitamin E helps heal dry skin and provides lasting moisturizing effects
Vendor by :
spa luxetique
Sku :
2019-SPA-1(LAV)-M
Inventory :
999999999
${function(){
const variantData = data.variant || {"id":"4d7adbac-080c-4397-8e5c-b19d82ba5bc7","product_id":"e270fbfd-f70b-4c06-99f9-96fad8bc737c","title":"","weight_unit":"lb","inventory_quantity":0,"sku":"2019-SPA-1(LAV)-M","barcode":"","position":1,"option1":"","option2":"","option3":"","note":"","image":null,"wholesale_price":[{"price":40.99,"min_quantity":1}],"weight":"0","compare_at_price":"65.99","price":"40.99","retail_price":"65.99","available":true,"url":"\/products\/spa-luxetique-bath-gift-sets-for-women-15-pcs-lavender-spa-baskets-for-her-relaxing-birthday-holiday-gifts-for-her?variant=4d7adbac-080c-4397-8e5c-b19d82ba5bc7","available_quantity":999999999,"options":[],"off_ratio":"38","flashsale_info":{"variant_id":"4d7adbac-080c-4397-8e5c-b19d82ba5bc7","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":"40.99","compare_at_price":"","discount_price":"40.99","customary_saved_price":"","customary_off_ratio":"","discount_saved_price":"","discount_off_ratio":"38","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}
` }()}