updateVariant(e) - gmontero/bsale-market-design-doc GitHub Wiki
Descripción
Esta función se ejecuta para actualizar la variante, en primer lugar se obtiene la variante del producto, y almacena el precio y el stock. Además evalua si el producto tiene atributos y si tiene mas de una variante para mostrar el selector. Luego se recorren las variantes para obtener el sku y mostrarlo en la vista. Finalmente se llama una serie de funciones que van mostrando diferentes elementos en la vista de producto. Redefine la variante y la retorna.
function updateVariant(e) {
let variant = productVariant;
if (this.tagName === "INPUT") {
// si es un input
variantId = parseInt(this.dataset.info) || bsale.products[0].variantId;
variant = bsale.products[0].variants.filter(function (v) { return v.id === variantId })[0];
for (let i = 0; i < variantSelectOption.length; i++) {
option = Array.from(variantSelectOption[i]);
for (let j = 0; j < option.length; j++) {
if (option[j].dataset.info == this.dataset.info) {
option[j].selected = true;
} else {
option[j].selected = false;
}
}
}
} else if (this.tagName === "SELECT") {
// si es un select
option = this.options[this.selectedIndex];
variantId = parseInt(option.dataset.info) || bsale.products[0].variantId;
variant = bsale.products[0].variants.filter(function (v) { return v.id === variantId })[0];
for (let i = 0; i < variantSelectCheck.length; i++) {
if (variantSelectCheck[i].dataset.info == option.dataset.info) {
variantSelectCheck[i].checked = true;
}
}
for (let i = 0; i < variantSelectOption.length; i++) {
variantSelectOption[i].selectedIndex = this.selectedIndex;
}
}
//precio antiguo
oldPrice = formatPrice(variant.price + variant.price * variant.taxes);
// si permite stock negativo o permite unlimited su stock es infino, si no retorno stock
stock = fullStock(variant);
if (attrSelect.length <= 1 && bsale.products[0].variants.length > 1) {
showVariantSelect();
}
//insert sku
for (let i = 0; i < skuHTML.length; i++) {
skuHTML[i].innerHTML = `SKU: ${variant.sku}`;
}
//funciones extra
defineButton(stock);
sliderGoTo(variant);
defineStock(variant);
definePrice(variant);
updateQuantity();
//redefine variantes
return productVariant = variant;
}