artbox_basket.ts 1.75 KB
class ArtboxBasket {
    private _items;
    get items() {
        return this._items;
    }
    constructor() {
        $.get('/basket/main', function (data) {
            this._items = data.basket;
            this.updateModal(data.modal, data.cart);
        }.bind(this), 'json').fail(function() {
            console.error('Basket cannot be init');
        });
    }
    public add(product_variant_id, count) {
        $.post('/basket/add?product_variant_id='+product_variant_id+'&count='+count, function (data) {
            this._items = data.basket;
            this.updateModal(data.modal, data.cart, true);
        }.bind(this), 'json').fail(function (xhr, status, error) {
            console.error(error);
        });
    }
    public set(product_variant_id, count) {
        $.post('/basket/set?product_variant_id='+product_variant_id+'&count='+count, function (data) {
            this._items = data.basket;
            this.updateModal(data.modal, data.cart);
        }.bind(this), 'json').fail(function (xhr, status, error) {
            console.error(error);
        });
    }
    public updateModal(modal, cart_html, show = false)
    {
        var modalBox = $('#buyForm');
        modalBox.html(modal);
        if(this.count < 1) {
            modalBox.modal('hide');
        } else if(show) {
            modalBox.modal('show');
        }
        this.updateCart(cart_html);
    }
    public updateCart(cart_html) {
        var cart = $('#top-cart-content');
        cart.html(cart_html);
    }
    get count(): number {
        return Object.keys(this._items).length;
    }
    get sum(): number {
        var sum = 0;
        $.each(this._items, function(index, value) {
            sum += value.price * value.count;
        });
        return sum.toFixed(2);
    }
}