`;
function toggleWidget() {
loadAppstleLoyaltyWidget();
if (_ALConfig?.widget_setting?.widgetType?.toUpperCase() === 'LAUNCHER' && _ALConfig?.widget_setting?.forceRedirectDedicatedPage === true) {
window.open(`/${_ALConfig?.proxy_path_prefix}`);
} else {
document.querySelector('#appstle_loyalty_iframe')?.classList?.toggle('open');
showAppstleLoyaltyWidget();
setTimeout(function() {
document.querySelector('#appstle_loyalty_iframe')?.classList?.toggle('show-close-icon');
}, 900);
}
}
const loadAppstleLoyaltyWidget = () => {
var iframe = document.querySelectorAll('#appstle_loyalty_iframe');
iframe.forEach(function(item) {
item.contentWindow._ALConfig = _ALConfig;
item.contentWindow.document.open('text/html', 'replace');
item.contentWindow.document.write(alIframeSrc);
item.contentWindow.document.close();
});
};
const launcherDataType = _ALConfig?.widget_setting?.launcherDataType || 'POINTS';
const loyaltyButtonTitle = document.getElementById('loyalty-widget-title');
if (_ALConfig?.shop_labels?.widgetTitle) {
loyaltyButtonTitle.innerHTML = parseHtmlStringContent(_ALConfig?.shop_labels?.widgetTitle);
}
(function() {
const { customerLoyalty, widget_setting } = _ALConfig || {};
if (!customerLoyalty) return;
const showTier = widget_setting?.showTierName;
const launcherButtonElement = document.querySelector('#appstle-loyalty-button');
const pointsEl = document.querySelector('.loyalty_widget_available_points');
if (!pointsEl) return;
const fmt = new Intl.NumberFormat();
const { storeCreditBalance = 0, availablePoints = 0, currentVipTier = '' } = customerLoyalty;
let displayValue;
if (launcherDataType === 'STORE_CREDITS') {
const n = Number(storeCreditBalance) || 0;
displayValue = fmt.format(formatNumberByPointRoundType(n));
} else if ((launcherDataType === 'VIP_TIER') && currentVipTier) {
displayValue = String(currentVipTier);
} else {
const n = Number(availablePoints) || 0;
displayValue = fmt.format(formatNumberByPointRoundType(n));
}
pointsEl.textContent = displayValue;
launcherButtonElement?.classList.add('appstle_show_points');
})();
function handleDeepLink() {
const loyaltyDeepLinks = [
'#appstle-loyalty',
'#appstle-refer',
'#appstle-loyalty-earn-rewards',
'#appstle-loyalty-redeem-rewards',
'#appstle-loyalty-referrals',
'#appstle-loyalty-vip-program'
];
if (!_ALConfig?.widget_setting?.showWidget || !loyaltyDeepLinks.some(hash => location?.hash?.includes(hash))) {
return;
}
loadAppstleLoyaltyWidget();
enableWidget();
setTimeout(() => {
document.querySelector('#appstle_loyalty_iframe')?.classList?.add('show-close-icon');
}, 900);
}
handleDeepLink();
const widgetReferralUrl = new URL(window.location.href);
if (_ALConfig?.referralEnabled && widgetReferralUrl?.searchParams.get('appstle_referral') && _ALConfig?.widget_setting?.widgetType === 'LAUNCHER') {
let referralRedirectUrl = _ALConfig?.widget_setting?.referralRedirectUrl;
let redirectURL = referralRedirectUrl + window.location.search;
if (referralRedirectUrl) {
let referralUrlObj;
try {
referralUrlObj = new URL(referralRedirectUrl, window.location.origin);
} catch {
referralUrlObj = null;
}
let referralPath = referralUrlObj ? referralUrlObj.pathname.replace(/\/+$/, '') : referralRedirectUrl.replace(/\/+$/, '');
let currentPath = window.location.pathname.replace(/\/+$/, '');
if (referralPath && currentPath !== referralPath) {
window.open(redirectURL, '_self');
}
}
setTimeout(() => {
loadAppstleLoyaltyWidget();
enableWidget();
}, 200);
}
(function observeURLChanges() {
let lastUrl = location.href;
const handleUrlChange = () => {
if (location.href !== lastUrl) {
handleDeepLink();
lastUrl = location.href;
}
};
new MutationObserver(handleUrlChange).observe(document.body, { subtree: true, childList: true });
window.addEventListener('popstate', handleUrlChange);
window.addEventListener('hashchange', handleUrlChange);
})();
const alDOMObserver = new MutationObserver(function(mutations_list) {
mutations_list.forEach(function(mutation) {
mutation.addedNodes.forEach(function(added_node) {
if (added_node.id === 'appstle_loyalty_iframe') {
var iframe = document.querySelectorAll('#appstle_loyalty_iframe');
iframe.forEach(function(item) {
item.contentWindow._ALConfig = _ALConfig;
item.contentWindow.document.open('text/html', 'replace');
item.contentWindow.document.write(alIframeSrc);
item.contentWindow.document.close();
});
alDOMObserver.disconnect();
}
});
});
});
alDOMObserver.observe(document.querySelector('body'), { subtree: true, childList: true });
}
try {
const versionUrl = `${location.origin}/${_ALConfig?.proxy_path_prefix || 'apps/loyalty'}/app-loyalty-version`;
fetch(versionUrl)
.then(res => res.json())
.then(data => {
if (data) {
const widgetJsUrl = new URL(_ALConfig.widgetJsPath);
const widgetCssUrl = new URL(_ALConfig.widgetCssPath);
widgetJsUrl.searchParams.set('v', data);
widgetCssUrl.searchParams.set('v', data);
_ALConfig.widgetJsPath = widgetJsUrl.toString();
_ALConfig.widgetCssPath = widgetCssUrl.toString();
}
})
.catch(() => {
})
.finally(() => {
executeLoyaltyWidget();
});
} catch (err) {
executeLoyaltyWidget();
}
const storeCreditMismatch = _ALConfig?.customerId && _ALConfig?.customerStoreCreditBalance >= 0 && _ALConfig?.customerLoyalty?.storeCreditBalance >= 0 && _ALConfig?.customerLoyalty?.storeCreditBalance !== _ALConfig?.customerStoreCreditBalance;
if (storeCreditMismatch && _ALConfig.shop === 'olineloyalty27.myshopify.com') {
const updateCustomerUrl = `/${_ALConfig?.proxy_path_prefix || 'apps/loyalty'}/cp/api/update-customer`;
try {
fetch(updateCustomerUrl, { method: 'POST' })
.then((response) => {
if(response.ok) {}
})
.catch(() => {});
} catch (err) {}
}
const dedicatedPageURL = new URL(window.location.href);
const decodeUrl = (content) => {
if (typeof content !== 'string') return content;
try {
const htmlDecoded = content?.replace(/\\\//g, '/');
return JSON.parse(`"${htmlDecoded}"`);
} catch (error) {
console.error('Error parsing content:', error);
return content;
}
};
if (dedicatedPageURL?.searchParams?.get('appstle_referral') && _ALConfig?.widget_setting?.widgetType === 'DEDICATED_PAGE') {
const customUrl = decodeUrl(_ALConfig?.widget_setting?.referralCustomRedirectUrl);
if (customUrl) {
const normalizedCustomPath = customUrl.startsWith('/') ? customUrl : `/${customUrl}`;
if (window.location.pathname !== normalizedCustomPath) {
const redirectUrl = new URL(window.location.href);
redirectUrl.pathname = normalizedCustomPath;
window.open(redirectUrl.toString(), '_self');
}
}
else if (dedicatedPageURL?.searchParams?.get('appstle_referral') && _ALConfig?.widget_setting?.widgetType === 'DEDICATED_PAGE' && !window.location.href.includes(_ALConfig?.proxy_path_prefix)) {
window.open(`/${_ALConfig?.proxy_path_prefix}${window.location.search}`, '_self');
}
}
const dedicatedPageEventListener = (event) => {
if (event?.data && typeof event?.data.indexOf === 'function' && event?.data?.indexOf('refresh_appstle_loyalty_page') !== -1) {
initiateAppstleLoyaltyPage();
console.log('REFRESH PAGE');
}
};
window.addEventListener('message', dedicatedPageEventListener, false);
function initiateAppstleLoyaltyPage() {
if (document.querySelector('#appstleLoyaltyPage')) {
const appstleLoyaltyPageElement = document.getElementById('appstleLoyaltyPage');
while (appstleLoyaltyPageElement.firstChild) {
appstleLoyaltyPageElement.firstChild.remove();
}
document.title = "";
setTimeout(() => {
let metaDescription = document.querySelector('meta[name="description"]');
if (metaDescription) {
metaDescription.content = "";
} else {
metaDescription = document.createElement('meta');
metaDescription.name = 'description';
metaDescription.content = "";
document.head.appendChild(metaDescription);
}
}, 500);
if (appstleLoyaltyPageElement) {
const executeDedicatedPageScript = () => {
const s = document.createElement('script');
s.setAttribute('src', _ALConfig?.widgetJsPath);
s.setAttribute('defer', 'defer');
document.body.appendChild(s);
const head = document.head;
const link = document.createElement('link');
link.type = 'text/css';
link.rel = 'stylesheet';
link.href = _ALConfig?.widgetCssPath;
head.appendChild(link);
}
try {
const versionUrl = `${location.origin}/${_ALConfig?.proxy_path_prefix || 'apps/loyalty'}/app-loyalty-version`;
fetch(versionUrl).then(res => res.json()).then(data => {
if (data) {
const widgetJsUrl = new URL(_ALConfig.widgetJsPath);
const widgetCssUrl = new URL(_ALConfig.widgetCssPath);
widgetJsUrl.searchParams.set('v', data);
widgetCssUrl.searchParams.set('v', data);
_ALConfig.widgetJsPath = widgetJsUrl.toString();
_ALConfig.widgetCssPath = widgetCssUrl.toString();
}
}).catch(() => {}).finally(() => {
executeDedicatedPageScript();
});
} catch (err) {
executeDedicatedPageScript();
}
}
} else {
setTimeout(() => {
initiateAppstleLoyaltyPage();
}, 2000);
}
}
const dedicatedPageReferralUrl = new URL(window.location.href)?.searchParams.get('appstle_referral');
if (_ALConfig?.widget_setting?.showWidget === true) {
initiateAppstleLoyaltyPage();
}
(async function() {
const isAvailableVisitShop = _ALConfig?.pointEarnRules?.length > 0 && _ALConfig?.pointEarnRules?.find((rule) => rule?.type === 'VISIT_SHOP' && rule?.status === 'ACTIVE');
if (_ALConfig?.customerId && isAvailableVisitShop) {
if (!sessionStorage.getItem('syncVisitStore') && ((_ALConfig?.customerId && isAvailableVisitShop && isAvailableVisitShop?.id) || (_ALConfig?.referralEnabled && _ALConfig?.referralLoyalty?.referralType === 'VISIT_SHOP'))) {
try {
const response = await fetch(`/${_ALConfig?.proxy_path_prefix || 'apps/loyalty'}/cp/api/customer-visit-store`, { method: 'POST', headers: {'Content-Type': 'application/json'}, });
if (response?.ok) {
sessionStorage.setItem('syncVisitStore', 'true');
}
} catch (error) {
console.error('Error:', error);
}
}
}
})();
const loyaltyCustomStyles = ``;
document.querySelector('body').insertAdjacentHTML('beforeend', loyaltyCustomStyles);
