const startTimeStoreKey = 'calamus-start-time-2226825'; const typeStoreKey = 'calamus-discount-type-2226825'; const DISCOUNT_TYPE = { AMOUNT: 'amount', DISCOUNT: 'discount', }; const RESTART_TYPE = { AFTER_12_HOUR: 'after_12_hour', NOW: 'now', }; const SITE = (window.C_SETTINGS && window.C_SETTINGS.routes && window.C_SETTINGS.routes.root) || ''; let callingType = 'init'; const request = (url) => { return fetch(SITE + url) .then((res) => res.json()) .then((data) => data); }; const getItem = (key) => localStorage.getItem(key); const setItem = (key, value) => localStorage.setItem(key, value); const setStartTime = (startTime) => setItem(startTimeStoreKey, startTime); const getStartTime = () => { let startTime = Number(getItem(startTimeStoreKey)); if (!startTime) { startTime = Date.now(); setStartTime(startTime); } return startTime; }; const getDiffTime = (duration, startTime) => { if (startTime) { setStartTime(startTime); } else { startTime = getStartTime(); } const durationMs = duration * 60 * 1000; const diffTime = startTime + durationMs - Date.now(); return diffTime; }; const getType = () => getItem(typeStoreKey); const setType = (type) => setItem(typeStoreKey, type); const cartRequestFunc = () => request('/api/cart'); const countdownRequest = request('/api/cart_countdown_settings/detail'); const getAllRequest = () => { return Promise.all([ cartRequestFunc(), countdownRequest ]).then(([cartResult, countdownResult]) => { const cartData = cartResult && cartResult.cart; const countdownData = countdownResult && countdownResult.data; if (!cartData || !countdownData || !countdownData.enabled) { return [null, null]; } return [cartData, countdownData]; }); }; const handleRestartTime = ( duration, diffTime, type) => { if (diffTime > 0) { return diffTime; } if (type == RESTART_TYPE.NOW) { return getDiffTime(duration, Date.now()); } else if (type == RESTART_TYPE.AFTER_12_HOUR) { const TWELVE_HOUR_MILLISECONDS = 12 * 60 * 60 * 1000; const restartTimeCondition = TWELVE_HOUR_MILLISECONDS + diffTime < 0; if (restartTimeCondition) { return getDiffTime(duration, Date.now()); } } return diffTime; }; const getRenderData = (cartData, countdownData, callingType = 'init') => { const linePrice = Number(cartData.line_price) || 0; const totalDiscount = Number(cartData.total_discount) || 0; const discountAmount = totalDiscount; const discountPercent = parseInt(totalDiscount / linePrice * 100 * 10) / 10; const commonSetting = countdownData.common_setting || {}; const discountSetting = countdownData.discount_setting || {}; const discountCondition = (discountSetting && discountSetting.condition) || {}; const discountType = discountCondition.type; const discountValue = discountCondition.value; let hasDiscount = false; if ( countdownData.discount_enabled && ( (discountType === DISCOUNT_TYPE.AMOUNT && discountAmount > discountValue) || (discountType === DISCOUNT_TYPE.DISCOUNT && discountPercent > discountValue) ) ) { hasDiscount = true; } const currentType = hasDiscount ? DISCOUNT_TYPE.DISCOUNT : DISCOUNT_TYPE.AMOUNT; const type = getType(); setType(currentType); if (currentType !== type) { setStartTime(Date.now()); } const duration = countdownData.duration; const restartType = countdownData.restart_type; let diffTime = getDiffTime(/* Seconds */ duration); if (diffTime <= 0 && callingType === 'init') { diffTime = handleRestartTime(duration, diffTime, restartType); } const isOnGoing = diffTime > 0; const renderData = hasDiscount ? discountSetting : commonSetting; return Object.assign( renderData, { isOnGoing, hasDiscount, diffTime, discountType, discountAmount, discountPercent, } ); }; function getData() { return getAllRequest().then(([cartData, countdownData]) => { const itemCount = cartData && cartData.item_count; if (!cartData || !countdownData || itemCount <= 0) { return Promise.resolve({ result: null }); } return Promise.resolve({ result: getRenderData(cartData, countdownData, callingType) }).then((data) => { callingType = 'rerender'; return data; }); }); } exportFunction('getData', getData);

Тележка

const TAG = 'spz-custom-cart-coupon-code-utils'; class SpzCustomCartCouponCodeUtils extends SPZ.BaseElement { constructor(element) { super(element); } static deferredMount() { return false; } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } buildCallback() { this.action_ = SPZServices.actionServiceForDoc(this.element); this.registerAction('setSideBarHeight', this.setSideBarHeight_.bind(this)); window.addEventListener('resize', this.setSideBarHeight_.bind(this)); } setSideBarHeight_() { const $sideBar = document.querySelector('#cart-coupon-code-modal-md'); if (!$sideBar) return; const windowHeight = window.innerHeight; $sideBar.style.setProperty('max-height', windowHeight * 0.9 + 'px', 'important'); } } SPZ.defineElement(TAG, SpzCustomCartCouponCodeUtils);
Ваша корзина пуста
Продолжить покупки