%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/components/bitrix/sale.basket.basket/templates/.default/js/ |
Current File : //home/bitrix/www/bitrix/components/bitrix/sale.basket.basket/templates/.default/js/action-pool.js |
;(function(){ 'use strict'; BX.namespace('BX.Sale.BasketActionPool'); BX.Sale.BasketActionPool = function(component) { this.component = component; this.requestProcessing = false; this.updateTimer = null; this.isBasketRefreshed = this.component.params.DEFERRED_REFRESH !== 'Y'; this.needFullRecalculation = this.component.params.DEFERRED_REFRESH === 'Y'; this.pool = {}; this.lastActualPool = {}; this.approvedAction = ['QUANTITY', 'DELETE', 'RESTORE', 'DELAY', 'OFFER', 'MERGE_OFFER']; this.switchTimer(); }; BX.Sale.BasketActionPool.prototype.setRefreshStatus = function(status) { this.isBasketRefreshed = !!status; }; BX.Sale.BasketActionPool.prototype.getRefreshStatus = function() { return this.isBasketRefreshed; }; BX.Sale.BasketActionPool.prototype.isItemInPool = function(itemId) { return !!this.pool[itemId]; }; BX.Sale.BasketActionPool.prototype.clearLastActualQuantityPool = function(itemId) { this.lastActualPool[itemId] && delete this.lastActualPool[itemId].QUANTITY; }; BX.Sale.BasketActionPool.prototype.checkItemPoolBefore = function(itemId) { if (!itemId) return; this.pool[itemId] = this.pool[itemId] || {}; }; BX.Sale.BasketActionPool.prototype.checkItemPoolAfter = function(itemId) { if (!itemId || !this.pool[itemId]) return; if (Object.keys(this.pool[itemId]).length === 0) { delete this.pool[itemId]; } }; BX.Sale.BasketActionPool.prototype.addCoupon = function(coupon) { this.pool.COUPON = coupon; this.switchTimer(); }; BX.Sale.BasketActionPool.prototype.removeCoupon = function(coupon) { this.checkItemPoolBefore('REMOVE_COUPON'); this.pool.REMOVE_COUPON[coupon] = coupon; this.switchTimer(); }; BX.Sale.BasketActionPool.prototype.changeQuantity = function(itemId, quantity, oldQuantity) { this.checkItemPoolBefore(itemId); if ( (this.lastActualPool[itemId] && this.lastActualPool[itemId].QUANTITY !== quantity) || (!this.lastActualPool[itemId] && quantity !== oldQuantity) ) { this.pool[itemId].QUANTITY = quantity; } else { this.pool[itemId] && delete this.pool[itemId].QUANTITY; } this.checkItemPoolAfter(itemId); this.switchTimer(); }; BX.Sale.BasketActionPool.prototype.deleteItem = function(itemId) { this.checkItemPoolBefore(itemId); if (this.pool[itemId].RESTORE) { delete this.pool[itemId].RESTORE; } else { this.pool[itemId].DELETE = 'Y'; } this.checkItemPoolAfter(itemId); this.switchTimer(); }; BX.Sale.BasketActionPool.prototype.restoreItem = function(itemId, itemData) { this.checkItemPoolBefore(itemId); if (this.pool[itemId].DELETE === 'Y') { delete this.pool[itemId].DELETE; } else { this.pool[itemId].RESTORE = itemData; } this.checkItemPoolAfter(itemId); this.switchTimer(); }; BX.Sale.BasketActionPool.prototype.addDelayed = function(itemId) { this.checkItemPoolBefore(itemId); this.pool[itemId].DELAY = 'Y'; this.checkItemPoolAfter(itemId); this.switchTimer(); }; BX.Sale.BasketActionPool.prototype.removeDelayed = function(itemId) { this.checkItemPoolBefore(itemId); this.pool[itemId].DELAY = 'N'; this.checkItemPoolAfter(itemId); this.switchTimer(); }; BX.Sale.BasketActionPool.prototype.changeSku = function(itemId, props, oldProps) { if (JSON.stringify(props) !== JSON.stringify(oldProps)) { this.checkItemPoolBefore(itemId); this.pool[itemId].OFFER = props; } else { this.pool[itemId] && delete this.pool[itemId].OFFER; this.checkItemPoolAfter(itemId); } this.switchTimer(); }; BX.Sale.BasketActionPool.prototype.mergeSku = function(itemId) { this.checkItemPoolBefore(itemId); this.pool[itemId].MERGE_OFFER = 'Y'; this.switchTimer(); }; BX.Sale.BasketActionPool.prototype.switchTimer = function() { clearTimeout(this.updateTimer); if (this.isProcessing()) { return; } if (this.isPoolEmpty()) { this.component.editPostponedBasketItems(); this.component.fireCustomEvents(); } if (!this.isPoolEmpty()) { this.updateTimer = setTimeout(BX.proxy(this.trySendPool, this), 300); } else if (!this.getRefreshStatus()) { this.trySendPool(); } }; BX.Sale.BasketActionPool.prototype.trySendPool = function() { if (this.isPoolEmpty() && this.getRefreshStatus()) { return; } this.doProcessing(true); if (!this.isPoolEmpty()) { this.component.sendRequest('recalculateAjax', { basket: this.getPoolData() }); this.lastActualPool = this.pool; this.pool = {}; } else if (!this.getRefreshStatus()) { this.component.sendRequest('refreshAjax', { fullRecalculation: this.needFullRecalculation ? 'Y' : 'N' }); this.needFullRecalculation = false; } }; BX.Sale.BasketActionPool.prototype.getPoolData = function() { var poolData = {}, currentPool = this.pool; if (currentPool.COUPON) { poolData.coupon = currentPool.COUPON; delete currentPool.COUPON; } if (currentPool.REMOVE_COUPON) { poolData.delete_coupon = currentPool.REMOVE_COUPON; delete currentPool.REMOVE_COUPON; } for (var id in currentPool) { if (currentPool.hasOwnProperty(id)) { for (var action in currentPool[id]) { if (currentPool[id].hasOwnProperty(action) && BX.util.in_array(action, this.approvedAction)) { poolData[action + '_' + id] = currentPool[id][action]; } } } } return poolData; }; BX.Sale.BasketActionPool.prototype.isPoolEmpty = function() { return Object.keys(this.pool).length === 0; }; BX.Sale.BasketActionPool.prototype.doProcessing = function(state) { this.requestProcessing = state === true; if (this.requestProcessing) { this.component.startLoader(); } else { this.component.endLoader(); } }; BX.Sale.BasketActionPool.prototype.isProcessing = function() { return this.requestProcessing === true; }; })();