(function() { $(document).on('click', '.attribute-option', function() { const form = $(this).closest('form.add-to-cart'); const attributeId = $(this).data('attribute-id'); const optionId = $(this).data('option-id'); const attributeInput = $('input[name="attributes[' + attributeId +']"]'); attributeInput.val(optionId); validateAttributeOptions(form); handleActiveInputSwitch($(this), attributeId); function handleColorInput(parent, attributeId) { $('li.color.' + attributeId).removeClass('color-active'); parent.addClass('color-active'); } function handleSizeInput(parent, attributeId) { $('li.size.' + attributeId).removeClass('size-active'); parent.addClass('size-active'); } function handleActiveInputSwitch(elem, attributeId) { const parent = elem.parent('li'); if (parent.hasClass('size')) { return handleSizeInput(parent, attributeId); } if (parent.hasClass('color')) { return handleColorInput(parent, attributeId); } } function handleProductNotFound() { form.find('.negative-stock').removeClass('d-flex').addClass('d-none'); form.find('.allow-negative-stock').addClass('d-none'); $('.limited-stock-description').addClass('d-none'); form.find('.message-stock-error').removeClass('d-none'); $('#calculate-shipping').addClass('d-none'); } function handleElementsOnAjax(form, response){ let productValue = form.parent().find('.children-sale-value'); let quantityBox = form.find('.limited-stock-description'); let calculateShipping = form.parent().find('.form-calculate-shipping #calculate-shipping'); let shippingMethods = form.find('#checkout-shoppingcart-wrappe'); let childrenId = form.find('.childrenId'); let childrenIdToCalculateShipping = form.parent().find('.form-calculate-shipping').find('.childrenId'); let productCode = form.find('.product-code').find('.code'); productCode = productCode.length > 0 ? productCode : $('.product-code').find('.code'); let elementsToRemoveOnProductDontHaveStock = form.find('.negative-stock'); let elementToShowOnProductDontHaveStock = form.parent().find('.message-stock-error'); if(response.disableAttributes){ $('li.size-active').removeClass('size-active'); $('li.color-active').removeClass('color-active'); } if (response.status === 200){ productValue.html(response.priceForSale); quantityBox.removeClass('d-none'); elementsToRemoveOnProductDontHaveStock.removeClass('d-none'); calculateShipping.removeClass('d-none'); shippingMethods.addClass('d-none'); childrenId.val(response.id); childrenIdToCalculateShipping.val(response.id); elementToShowOnProductDontHaveStock.addClass('d-none'); if (response.code === null){ form.find('.product-code').addClass('d-none'); $('.product-code').addClass('d-none'); }else{ form.find('.product-code').removeClass('d-none'); $('.product-code').removeClass('d-none'); productCode.html(response.code); } }else{ productValue.html(response.priceForSale); quantityBox.addClass('d-none'); elementsToRemoveOnProductDontHaveStock.addClass('d-none'); calculateShipping.addClass('d-none'); shippingMethods.addClass('d-none'); childrenId.val(response.id); childrenIdToCalculateShipping.val(response.id); if (response.code === null){ form.find('.product-code').addClass('d-none'); $('.product-code').addClass('d-none'); }else{ form.find('.product-code').removeClass('d-none'); $('.product-code').removeClass('d-none'); productCode.html(response.code); } elementToShowOnProductDontHaveStock.removeClass('d-none'); elementToShowOnProductDontHaveStock.find('#product_id').val(response.id); } addMaskInFields(); } function validateAttributeOptions(form){ const data = form.serializeArray(); for (let input of data) { if (input.name.startsWith('attributes') && !(input.value)) { return; } } const URL = form.data('children-product-route'); const METHOD = form.attr('method'); $.ajax({ url: URL, method: METHOD, data: data, success: function(response) { if (typeof response.toRedirect !== 'undefined' && !form.hasClass('add-to-cart-modal')){ window.location.href = response.toRedirect; }else{ if(response.status === 200){ handleElementsOnAjax(form, response); }else{ if(response.status === 404){ handleProductNotFound(); }else{ handleElementsOnAjax(form, response); } } } } }); } }); })();