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);