class LoyaltyQueryData extends SPZ.BaseElement { constructor(element) { super(element); } buildCallback() { this.action_ = SPZServices.actionServiceForDoc(this.element); const params = window.SPZUtils.Urls.parseQueryString(location.search); this.triggerEvent_("query", { params: params, }); } triggerEvent_(eventName, data) { const event = SPZUtils.Event.create( this.win, `spz-custom-loyalty-query-data.${eventName}`, data ); this.action_.trigger(this.element, eventName, event); } isLayoutSupported(layout) { return layout === SPZCore.Layout.LOGIC; } } SPZ.defineElement("spz-custom-loyalty-query-data", LoyaltyQueryData); class SpzCustomLoyaltyPoint extends SPZ.BaseElement { constructor(element) { super(element); this.value_ = element.getAttribute('value'); } buildCallback() { if (this.win.__loyalty_settings__) { this.win.__loyalty_settings__.then((settings) => { this.pointName_ = (settings.points_rule && settings.points_rule.points_name) || "Points"; this.render_(); }); } } mutatedAttributesCallback(mutations) { if (!SPZCore.Types.hasOwn(mutations, 'value')) { return; } this.value_ = mutations.value; this.render_(); } render_() { if (this.element.childElementCount > 0) { this.element.innerHTML = ''; } this.container_ = document.createElement("span"); this.container_.classList.add("loyalty-point"); this.container_.innerHTML = `${this.value_ !== null ? `${this.value_} ` : ''}${this.pointName_}`; this.element.appendChild(this.container_); } isLayoutSupported(layout) { return layout === SPZCore.Layout.CONTAINER; } } SPZ.defineElement("spz-custom-loyalty-point", SpzCustomLoyaltyPoint); let campaignData = null; let query = null; const getEarnCampaignData = (campaign_id) => { campaignData = fetch(`/api/loyalty-server/earn-points/campaigns/${campaign_id}`, { method: 'GET', }).then(response => { if (!response.ok) { throw new Error('get earn campaign data fail'); } return response.json(); }).catch(error => { console.error('get earn campaign data fail', error); }); } const getRedeemCampaignData = (campaign_id) => { campaignData = fetch(`/api/loyalty-server/points-redeem/campaigns/${campaign_id}?need_discount_code=true`, { method: 'GET', }).then(response => { if (!response.ok) { throw new Error('get redeem campaign data fail'); } return response.json(); }).catch(error => { console.error('get redeem campaign data fail', error); }); } const getPointDeductionCampaignData = () => { campaignData = fetch(`/api/loyalty-server/points-deduction/campaign`, { method: 'GET', }).then(response => { if (!response.ok) { throw new Error('get points deduction campaign data fail'); } return response.json(); }).catch(error => { console.error('get points deduction data fail', error); }); } const refreshCampaignData = (props) => { const {params} = props || {}; if (!query) { query = params; } const { campaign_id, campaign_type } = params || query; if( campaign_type === 'successful_order') { return getEarnCampaignData(campaign_id); } else if( campaign_type === 'points_deduction'){ return getPointDeductionCampaignData(); } else { return getRedeemCampaignData(campaign_id); } }; const getCampaignData = () => { return campaignData; }; exportFunction("getCampaignData", getCampaignData); exportFunction("refreshCampaignData", refreshCampaignData);
class LoyaltyJqueryHandler extends SPZ.BaseElement { constructor(element) { super(element); } buildCallback() { this.setupAction_(); } setupAction_() { this.registerAction("documentTrigger", (invocation) => { console.log('documentTrigger',invocation); this.documentTrigger(invocation.args); }); } documentTrigger({eventName, ...data}) { console.log('data',data); try{ $(window.document).trigger(eventName,data || {}) }catch(e){ console.log(e) } } isLayoutSupported(layout) { return layout === SPZCore.Layout.CONTAINER; } } SPZ.defineElement("spz-custom-loyalty-jquery-handler", LoyaltyJqueryHandler);

1. Welcome to join us

You need to log into your store account to enjoy member discounts and points redemption benefits. I don't have an account.

Create an account

2. Place your firet order

Redeem your points on your order, with 25 Points translating to a $1.00 discount!

Points can be used to orders over $100. You can redeem up to a maximum of 2500 Points, which is equivalent to a $100 discount!

3. Points never expires

Rest assured, your points will not expire. However, please note that if your order is refunded, the corresponding points will be deducted from your balance.

Happy shopping and enjoy your rewards!