multiselecao.js 2.02 KB
Protocolo = Protocolo || {};

Protocolo.MultiSelecao = (function () {

    function MultiSelecao() {
        this.statusBtn = $('.js-status-btn');
        this.selecaoCheckbox = $('.js-selecao');
        this.selecaoTodosCheckbox = $('.js-selecao-todos');
    }

    MultiSelecao.prototype.iniciar = function () {
        this.statusBtn.on('click', onStatusBtnClicado.bind(this));
        this.selecaoTodosCheckbox.on('click', onSelecaoTodosClicado.bind(this));
        this.selecaoCheckbox.on('click', onSelecaoClicado.bind(this));
    };

    function onStatusBtnClicado(event) {
        var botaoClicado = $(event.currentTarget);
        var status = botaoClicado.data('status');
        var url = botaoClicado.data('url');

        var checkBoxSelecionados = this.selecaoCheckbox.filter(':checked');
        var codigos = $.map(checkBoxSelecionados, function (c) {
            return $(c).data('codigo');
        });

        if (codigos.length > 0) {
            $.ajax({
                url: url,
                method: 'PUT',
                data: {
                    codigos: codigos,
                    status: status
                },
                success: function () {
                    window.location.reload();
                }
            });

        }
    }

    function onSelecaoTodosClicado() {
        var status = this.selecaoTodosCheckbox.prop('checked');
        this.selecaoCheckbox.prop('checked', status);
        statusBotaoAcao.call(this, status);
    }

    function onSelecaoClicado() {
        var selecaoCheckboxChecados = this.selecaoCheckbox.filter(':checked');
        this.selecaoTodosCheckbox.prop('checked', selecaoCheckboxChecados.length >= this.selecaoCheckbox.length);
        statusBotaoAcao.call(this, selecaoCheckboxChecados.length);
    }

    function statusBotaoAcao(ativar) {
        ativar ? this.statusBtn.removeClass('disabled') : this.statusBtn.addClass('disabled');
    }

    return MultiSelecao;

}());

$(function () {
    var multiSelecao = new Protocolo.MultiSelecao();
    multiSelecao.iniciar();
});