riche, corsé et complexe, Belvedere Heritage 176 a été fabriqué en utilisant la méthode de maltage traditionnelle pour chauffer le seigle Dańkowskie à 176 degrés, permettant à son véritable esprit de briller. C P>
une vodka pour les amateurs de cocktails et ceux qui aiment les esprits sombres, Belvédere Heritage 176 est différent de Belvédere pure dans toutes les manières, et met en valeur le La riche profondeur de saveur du seigle.
`
document.querySelector('body').insertAdjacentHTML('beforeend', loyaltyGlobalStyles);
window.addEventListener('message', appstleLoyaltyIframeListener, false);
window.addEventListener('kp_user_logged_out', function() { window.location.reload(); });
const removeFirstSlashFromURL = (url) => url ? url?.replace(/\\\//g, "/")?.replace(/^\/+/, "") : url;
function applyDiscount(discountCode, shouldReload = false) {
const encodedDiscountCode = encodeURIComponent(discountCode?.trim());
const discountURL = `${location?.origin}/discount/${encodedDiscountCode}`;
fetch(discountURL).then(res => {
if (res.ok) {
console.log('Discount Code Applied');
const discountDetails = window?._ALConfig?.customerLoyalty?.rewards?.find((item) => item?.discountCode === discountCode) || null;
if (discountCode && discountDetails) {
const discountData = {discountCode: discountCode || discountDetails?.discountCode, description: discountDetails?.description, customerId: discountDetails?.customerId}
document.dispatchEvent(new CustomEvent('AppstleLoyalty:AppliedDiscountCode', { detail: discountData }));
window.dispatchEvent(new CustomEvent('AppstleLoyalty:AppliedDiscountCode', { detail: discountData }));
}
if (shouldReload) {
window.location.reload();
}
} else {
console.log('Discount Code NOT Applied');
}
});
}
const applyDiscountAutomatically = (discountCode, shouldReload = false) => {
(async () => {
const encodedDiscountCode = encodeURIComponent(discountCode?.trim());
const discountURL = `${location.origin}/checkout?discount=${encodedDiscountCode}`;
const cartURL = `${location.origin}/cart.js`;
try {
const discountRes = await fetch(discountURL);
if(discountRes) {
const cartRes = await fetch(cartURL);
if (!cartRes.ok) return;
const cart = await cartRes.json();
const discount_codes = cart && Array.isArray(cart?.['discount_codes']) ? cart?.['discount_codes'] : [];
const hasDiscount = discount_codes.some(d => (d?.code || "").toLowerCase() === String(discountCode).toLowerCase());
if (hasDiscount && shouldReload) {
window.location.reload();
}
}
} catch (err) {
console.error("Error applying discount:", err);
}
})();
};
const unescapeWidgetString = (str) => {
if (!str || typeof str !== 'string') return '';
return str?.replace(/\\\//g, '/')?.replace(/\\\\/g, '\\');
};
// Resolves a market-aware account URL. Prefers the routes published above so the customer keeps
// their market/language prefix; the shop root fallback keeps that prefix too when a single route
// entry is blank. Safe to assign to location.href as-is - with new customer accounts Shopify
// returns an absolute URL here, so never prefix an origin.
const loyaltyAccountRoute = (key, fallbackPath) => {
const route = _ALConfig?.routes?.[key];
if (route) return route;
const shopRoot = _ALConfig?.routes?.root_url || window?.Shopify?.routes?.root || '/';
return (shopRoot?.replace(/\/+$/, '') ?? '') + fallbackPath;
};
const formatUrlByLoyalty = (link) => {
if (!link) return '';
const decodedLink = decodeURIComponent(link);
let l = decodedLink?.replace("{{proxy_path_prefix}}", "/")?.trim()?.replace(/\\\//g, '/')?.replace(/^\/+/, '') || '';
l = l?.replace(/([^:]\/)\/+/g, '$1') ?? '';
if (/^(https?:\/\/|\/\/|www\.)/i.test(l)) {
return /^www\./i.test(l) ? 'https://' + l : l;
}
const shopRoot = window?.Shopify?.routes?.root ?? '/';
return (shopRoot?.replace(/\/+$/, '') ?? '') + '/' + l;
};
function appstleLoyaltyIframeListener(event) {
const redirect = (link, fallback) => { window.location.href = link ? formatUrlByLoyalty(link) : fallback; };
if (event?.data && typeof event?.data.indexOf === 'function' && event?.data?.indexOf('appstle_loyalty_message_to_redirect_to_account') !== -1) {
if (!_ALConfig?.widget_setting?.customSignInLink && typeof kpHandleLogin === 'function') {
kpHandleLogin(window.location.href);
} else {
redirect(_ALConfig?.widget_setting?.customSignInLink, loyaltyAccountRoute('account_url', '/account'));
}
} else if (event?.data && typeof event?.data.indexOf === 'function' && event?.data?.indexOf('appstle_message_to_redirect_to_signup') !== -1) {
if (typeof kpHandleLogin === 'function') {
kpHandleLogin(window.location.href);
} else {
window.location.href = loyaltyAccountRoute('account_register_url', '/account/register');
}
} else if (event?.data && event?.data?.type === 'appstle_message_to_redirect_to_after_copied_discount_redirect_url' && typeof event?.data?.value === 'string') {
window.location.href = 'https://' + window.location.host + event?.data?.value;
} else if (event?.data && typeof event?.data.indexOf === 'function' && event?.data?.indexOf('appstle_message_to_apply_discount_and_reload') !== -1) {
const discountCode = (event?.data?.split('|'))[1];
applyDiscount(discountCode, true);
} else if (event?.data && typeof event?.data.indexOf === 'function' && event?.data?.indexOf('appstle_message_to_apply_discount') !== -1) {
const discountCode = (event?.data?.split('|'))[1];
applyDiscount(discountCode, false);
} else if (event?.data && typeof event?.data.indexOf === 'function' && event?.data?.indexOf('appstle_message_to_automatic_apply_discount_and_refresh') !== -1) {
const discountCode = (event?.data?.split('|'))[1];
applyDiscountAutomatically(discountCode, true);
} else if (event?.data && typeof event?.data.indexOf === 'function' && event?.data?.indexOf('appstle_message_to_automatic_apply_discount') !== -1) {
const discountCode = (event?.data?.split('|'))[1];
applyDiscountAutomatically(discountCode, false);
} else if (event?.data && typeof event?.data?.indexOf === 'function' && event?.data?.indexOf('appstle_message_to_redirect_to_custom_url') !== -1) {
redirect(_ALConfig?.widget_setting?.createAccountLink, loyaltyAccountRoute('account_register_url', '/account/register'));
}
}
const snackBarStyles = ``;
document.querySelector('body').insertAdjacentHTML('beforeend', snackBarStyles);
const snackBarHtml = `
`;
document.querySelector('body').insertAdjacentHTML('beforeend', snackBarHtml);
window.addEventListener('message', toasterEventListener, false);
function toasterEventListener(event) {
if (event?.data && typeof event?.data.indexOf === 'function' && event?.data?.indexOf('appstle_message_for_notification') !== -1) {
var message = event?.data?.split('|')[1];
showAppstleLoyaltyToaster(message);
}
}
let snackBarIndex = 0;
function showAppstleLoyaltyToaster(msg) {
var snackBar = document.getElementById('snackbar');
snackBar.classList.add('show');
snackBar.insertAdjacentHTML('beforeend', `
`);
const el = snackBarIndex;
setTimeout(function() {
if (document.getElementById(`elem${el}`))
document.getElementById(`elem${el}`).remove();
}, 5000);
snackBarIndex++;
}
const closeSnackBar = (el) => document.getElementById(el).remove();
document.addEventListener('DOMContentLoaded', () => {
});
const executeLoyaltyWidget = () => {
const parseHtmlStringContent = (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;
}
};
const formatNumberByPointRoundType = num => {
if (typeof num !== 'number') return num;
const roundType = _ALConfig?.pointRoundType || "NO_ROUND";
const rounded = roundType === 'ROUND_UP' ? Math.ceil(num) : roundType === 'ROUND_DOWN' ? Math.floor(num) : num;
return (Number.isInteger(rounded) || rounded % 1 === 0) ? rounded.toFixed(0) : rounded.toFixed(2);
};
const formatStoreCreditAmount = value => {
try {
const num = Number(value);
const safe = Number.isFinite(num) ? num : 0;
const format = (_ALConfig?.shopMoneyFormat || '')?.replace(/</g, '<')?.replace(/>/g, '>')?.replace(/<[^>]*>/g, '');
const tokenMatch = String(format)?.match?.(/\{\{\s*(amount[a-z_]*)\s*\}\}/i);
const token = (tokenMatch?.[1] || 'amount')?.toLowerCase?.() || 'amount';
const decimals = token?.includes?.('no_decimals') ? 0 : 2;
let thousands = ',', decimal = '.';
if (token?.includes?.('comma_separator')) { thousands = '.'; decimal = ','; }
else if (token?.includes?.('space_separator')) { thousands = ' '; }
else if (token?.includes?.('apostrophe_separator')) { thousands = "'"; }
const sign = safe < 0 ? '-' : '';
const parts = Math.abs(safe)?.toFixed?.(decimals)?.split?.('.') || [];
const intPart = (parts?.[0] || '0')?.replace?.(/\B(?=(\d{3})+(?!\d))/g, thousands) || '0';
const amount = decimals === 0 ? sign + intPart : sign + intPart + decimal + (parts?.[1] || '00');
return tokenMatch ? format?.replace(/\{\{\s*amount[a-z_]*\s*\}\}/gi, amount)?.trim() : amount;
} catch (e) {
return String(value ?? '0');
}
};
const loyaltyWidgetStyles = `
`;
const customStyles = document.getElementById('appstle-loyalty-custom-styles');
if (customStyles) {
customStyles.insertAdjacentHTML('beforebegin', loyaltyWidgetStyles);
} else {
document.querySelector('body').insertAdjacentHTML('beforeend', loyaltyWidgetStyles);
}
const mainHTMLString = `
`;
document.querySelector('body').insertAdjacentHTML('beforeend', mainHTMLString);
window.addEventListener('message', widgetEventListener, false);
function widgetEventListener(event) {
if (event?.data && typeof event?.data.indexOf === 'function' && event?.data?.indexOf('appstle_message_for_showWidget') !== -1) {
} else if (event?.data && typeof event?.data.indexOf === 'function' && event?.data?.indexOf('appstle_widget_showHide') !== -1) {
toggleWidget();
} else if (event?.data && typeof event?.data.indexOf === 'function' && event?.data?.indexOf('refresh_appstle_loyalty_widget') !== -1 && _ALConfig?.widget_setting?.widgetType === 'LAUNCHER') {
loadAppstleLoyaltyWidget();
console.log('REFRESH WIDGET');
} else if (event?.data && typeof event?.data.indexOf === 'function' && event?.data?.indexOf('show_appstle_loyalty_widget') !== -1) {
loadAppstleLoyaltyWidget();
enableWidget();
}
}
function removeAppstleLoyaltyWidget() {
document.querySelector('#appstle-loyalty-button')?.classList?.add('appstle-loyalty-hidden');
document.querySelector('#appstle_loyalty_iframe')?.classList?.add('appstle-loyalty-hidden');
}
(function checkForWidgetRestrictions() {
let isShowWidget = true;
if (_ALConfig?.customerLoyalty?.customerStatus === 'EXCLUDED') {
isShowWidget = false;
}
if (!_ALConfig?.customerId) {
isShowWidget = !(_ALConfig?.widget_setting?.restrictedCustomersTag || _ALConfig?.widget_setting?.allowedCustomersTag);
}
if (_ALConfig?.widget_setting?.allowedCustomersTag?.length && isShowWidget) {
let allowedTags = _ALConfig?.widget_setting?.allowedCustomersTag.split(',');
if (allowedTags?.length > 0 && !_ALConfig?.customerTags?.some((tag) => allowedTags?.some((allowedTag) => allowedTag?.trim()?.toLowerCase() === tag?.trim()?.toLowerCase()))) {
isShowWidget = false;
}
}
if (_ALConfig?.widget_setting?.restrictedCustomersTag?.length && isShowWidget) {
let restrictedTags = _ALConfig?.widget_setting?.restrictedCustomersTag?.split(',');
if (restrictedTags?.length > 0 && _ALConfig?.customerTags?.some((tag) => restrictedTags?.some((restrictedTag) => restrictedTag?.trim()?.toLowerCase() === tag?.trim()?.toLowerCase()))) {
isShowWidget = false;
}
}
if (_ALConfig?.widget_setting?.blockWidgetOnPages?.length && isShowWidget) {
let restrictedPages = _ALConfig?.widget_setting?.blockWidgetOnPages?.split(',');
const currentPage = window?.location?.pathname;
if (restrictedPages?.length > 0) {
if (restrictedPages?.includes('/homepage') && currentPage === '/') {
isShowWidget = false;
} else if (restrictedPages?.some((page) => currentPage?.includes(page))) {
isShowWidget = false;
}
}
}
if (_ALConfig?.widget_setting?.allowWidgetOnSpecificPages?.length && isShowWidget) {
let allowedPages = _ALConfig?.widget_setting?.allowWidgetOnSpecificPages?.split(',');
const currentPage = window?.location?.pathname;
if (allowedPages?.length > 0) {
if (allowedPages?.includes('/homepage') && currentPage === '/') {
isShowWidget = true;
} else if (allowedPages?.some((page) => currentPage?.includes(page))) {
isShowWidget = true;
} else {
isShowWidget = false;
}
}
}
if (!_ALConfig?.customerId && _ALConfig?.widget_setting?.showToLoggedInCustomerOnly) {
isShowWidget = false;
}
window.__APPSTLE_LOYALTY_LAUNCHER_ALLOWED = !!isShowWidget;
if (isShowWidget) {
showAppstleLoyaltyWidget();
} else {
removeAppstleLoyaltyWidget();
}
})();
function enableWidget() {
document.querySelector('#appstle_loyalty_iframe')?.classList?.add('open');
document.querySelector('#appstle_loyalty_iframe')?.classList?.remove('appstle-loyalty-hidden');
setTimeout(function() {
document.querySelector('#appstle_loyalty_iframe')?.classList?.toggle('show-close-icon');
}, 900);
}
function showAppstleLoyaltyWidget() {
const launcherAllowed = window?.['__APPSTLE_LOYALTY_LAUNCHER_ALLOWED'] !== false;
document.querySelector('#appstle_loyalty_iframe')?.classList?.remove('appstle-loyalty-hidden');
const btn = document.querySelector('#appstle-loyalty-button');
if (!btn) return;
if (launcherAllowed) {
btn.classList.remove('appstle-loyalty-hidden');
} else {
btn.classList.add('appstle-loyalty-hidden');
}
}
document.querySelector('.appstle-loyalty-button').addEventListener('click', toggleWidget);
if (_ALConfig?.widget_setting?.widgetPosition === 'LEFT') {
document.getElementById('appstle_loyalty_iframe')?.classList?.add('appstle-loyalty-left');
document.querySelector('.appstle-loyalty-button')?.classList?.add('appstle-loyalty-left');
document.getElementById('appstle_loyalty_iframe')?.classList?.add('appstle-loyalty-left');
document.getElementById('snackbar')?.classList?.add('left_snackbar');
} else {
document.getElementById('appstle_loyalty_iframe')?.classList?.add('appstle-loyalty-right');
document.querySelector('.appstle-loyalty-button')?.classList?.add('appstle-loyalty-right');
document.getElementById('snackbar')?.classList?.add('right_snackbar');
}
const alIframeSrc = `\x3chtml>
\x3chead>
\x3cscript>
window["Shopify"] = {};
window["__st"] = ${JSON.stringify(__st)};
window["Shopify"]["shop"] = "${location.host}";
window.appstle_public_domain = "${location.host}";
window["isAppstleLoyaltyCustomerPortal"] = true;
\x3c/script>
\x3cscript defer type="text/javascript" src="${_ALConfig.widgetJsPath}">\x3c/script>
\x3c/head>
\x3cbody>
\x3c/body>
\x3c/html>`;
function toggleWidget() {
loadAppstleLoyaltyWidget();
if (_ALConfig?.widget_setting?.widgetType?.toUpperCase() === 'LAUNCHER' && _ALConfig?.widget_setting?.forceRedirectDedicatedPage === true) {
window.open(`/${_ALConfig?.proxy_path_prefix}`);
} else {
const isWidgetOpen = document.querySelector('#appstle_loyalty_iframe')?.classList?.toggle('open');
if (isWidgetOpen === false) {
clearLoyaltyDeepLinkHash();
}
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 && !(launcherDataType === 'STORE_CREDITS' && _ALConfig?.customerId)) 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') {
displayValue = formatStoreCreditAmount(_ALConfig?.customerStoreCreditBalance || storeCreditBalance || 0);
} 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');
})();
const loyaltyDeepLinks = [
'#appstle-loyalty',
'#appstle-refer',
'#appstle-loyalty-earn-rewards',
'#appstle-loyalty-redeem-rewards',
'#appstle-loyalty-referrals',
'#appstle-loyalty-vip-program'
];
let lastLoyaltyWidgetUrl = location.href;
function hasLoyaltyDeepLink() {
return loyaltyDeepLinks.some(hash => location?.hash?.includes(hash));
}
function clearLoyaltyDeepLinkHash() {
if (!hasLoyaltyDeepLink()) {
return;
}
window.history.replaceState({}, document.title, window.location.pathname + window.location.search);
lastLoyaltyWidgetUrl = location.href;
}
function handleDeepLink() {
if (!_ALConfig?.widget_setting?.showWidget || !hasLoyaltyDeepLink()) {
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() {
const handleUrlChange = () => {
if (location.href !== lastLoyaltyWidgetUrl) {
lastLoyaltyWidgetUrl = location.href;
handleDeepLink();
}
};
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(`${window.location.origin}/${_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 loadDedicatedPageAsset = (createAsset, attempt, onSettle) => {
const asset = createAsset();
let settled = false;
const settle = () => {
if (settled) return;
settled = true;
if (typeof onSettle === 'function') {
onSettle();
}
};
asset.onload = settle;
asset.onerror = () => {
asset.remove();
if (attempt < 4) {
setTimeout(() => loadDedicatedPageAsset(createAsset, attempt + 1, onSettle), 1000 * Math.pow(2, attempt - 1));
} else {
settle();
}
};
}
const appendDedicatedPageWidgetScript = () => {
loadDedicatedPageAsset(() => {
const s = document.createElement('script');
s.setAttribute('src', _ALConfig?.widgetJsPath);
s.async = false;
document.body.appendChild(s);
return s;
}, 1);
}
const executeDedicatedPageScript = () => {
let widgetScriptAppended = false;
const appendWidgetScriptOnce = () => {
if (widgetScriptAppended) return;
widgetScriptAppended = true;
appendDedicatedPageWidgetScript();
};
try {
const preload = document.createElement('link');
preload.rel = 'preload';
preload.as = 'script';
preload.href = _ALConfig?.widgetJsPath;
document.head.appendChild(preload);
} catch (e) {}
loadDedicatedPageAsset(() => {
const link = document.createElement('link');
link.type = 'text/css';
link.rel = 'stylesheet';
link.href = _ALConfig?.widgetCssPath;
document.head.appendChild(link);
return link;
}, 1, appendWidgetScriptOnce);
setTimeout(appendWidgetScriptOnce, 8000);
}
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);