Untitled

 avatar
unknown
javascript
a year ago
4.7 kB
13
Indexable
async function handleSelectedDonation(radio) {
    // Caso o tipo da doação seja valor fixo ou porcentagem fixa
    // As informações dos produtos informados pelo parceiro, podem ser para valor fixo ou percentagem
    // Bastando ele informar o tipo de doação
    if (['fixed_donation', 'fixed_percentage'].includes(params.donationType)) {
        const donationOptions = document.getElementsByName(radio.name);
        const hasData = !['null', 'false', 'undefined', 'true'].includes(localStorage.getItem('hasDonationValue')) ? localStorage.getItem('hasDonationValue').split(',') : [];
        // Verifica qual dos valores foi selecionado
        // Adiciona ou remove produto do carrinho
        donationOptions.forEach(checkbox => {
            // Caso exista um valor salvo no localStorage e esse valor seja diferente do valor selecionado
            // Remove o item do carrinho antes de atualizar o localStorage com o novo valor
            if (hasData.length > 0) {
                vtexjs.checkout.getOrderForm().then(function(orderForm) {
                    const donationIndex = orderForm.items.findIndex(item => item.id === hasData[0]);
                    // Verifica se o produto existe no carrinho antes de remove-lo
                    if (donationIndex !== -1) {
                        const donationObject = [
                            {
                                index: donationIndex,
                                quantity: 0,
                            }
                        ];
                        return vtexjs.checkout.removeItems(donationObject);
                    }
                });
            }

            // Caso o checkbox selecionado seja o mesmo do informado para a função
            // Acrescenta o produto no carrinho e adiciona o valor no localStorage
            if ((checkbox === radio && checkbox.checked)) {
                // Objeto de doação que será adicionado ao carrinho
                const donationObject = {
                    id: checkbox.value,
                    quantity: 1,
                    seller: '1',
                }

                // Verifica se o novo produto selecionado existe no carrinho
                // Caso não exista, adiciona no carrinho
                vtexjs.checkout.getOrderForm().then(function(orderForm) {
                    const productsInCart = orderForm.items || [];
                    if (productsInCart.find(product => product.id !== checkbox.value)) {
                        vtexjs.checkout.addToCart([donationObject], null, 1).done(function(){
                            _setDonation(`${checkbox.value},${checkbox.getAttribute('data-attr')}`);
                        });
                    }
                    
                });
            } else {
                checkbox.checked = false;
            }

            // Caso o checkbox tenha sido desselecionado
            // Remove o produto do carrinho e seta o localStorage como null
            if (!checkbox.checked && checkbox === radio) {
                // Remove item do carrinho
                vtexjs.checkout.getOrderForm().then(function(orderForm) {
                    _setDonation('null');
                    const donationIndex = orderForm.items.findIndex(item => item.id === checkbox.value);
                    if (donationIndex !== -1) {
                        const donationObject = [
                            {
                                index: donationIndex,
                                quantity: 0,
                            }
                        ];
                        return vtexjs.checkout.removeItems(donationObject)
                    }
                });
            }
        });
    }

    // Caso o tipo de doação seja por arredondamento
    // Pega o valor total do carrinho e faz o arredondamento para o próximo valor cheio
    if (params.donationType === 'round_donation') {
        const containerElement = _getContainerElement();
        const inputElement = _getInputElement();

        if (check) {
            containerElement.classList.add('active');
            vtexjs.checkout.getOrderForm().then(function(orderForm) {
                // Realiza o cálculo para o valor cheio
                // Acrescenta no carrinho o 'produto' passando o novo valor
            });
            inputElement.checked = true;
            _setDonation('true');
        } else {
            containerElement.classList.remove('active');
            inputElement.checked = false;
            _setDonation('false');
        }
    }
}
Editor is loading...
Leave a Comment