'use strict';
(function (LS) {
var appUrl = 'https://www.stocknube.app';
var widgetCss = '#stock-notification-container{display:none;border:1px solid #6c757d;border-radius:7px;clear:both;margin-top:1rem}#stock-notification-container #stock-notification-modal-dialog{background-color:#fefefe;margin:15% auto;padding:30px 30px 20px 30px;border:1px solid #888;border-radius:4px;width:40%;max-width:500px;min-width:312px;font-size:16px}@media only screen and (max-width: 480px){#stock-notification-container #stock-notification-modal-dialog{margin:35% auto;padding:30px 20px 10px 20px;width:95%}}#stock-notification-container #stock-notification-modal-dialog div,#stock-notification-container #stock-notification-modal-dialog input{margin-bottom:20px;margin-top:0}#stock-notification-container #stock-notification-modal-dialog::backdrop{background-color:rgba(0,0,0,0.4)}#stock-notification-container #stock-notification-close-button{color:#aaa;font-size:28px;position:absolute;top:10px;right:15px}#stock-notification-container #stock-notification-close-button:hover,#stock-notification-container #stock-notification-close-button:focus{color:black;text-decoration:none;cursor:pointer}#stock-notification-container #stock-notification-product-name{text-transform:uppercase;font-size:larger;font-weight:bold}#stock-notification-container #stock-notification-request-message{padding:8px 20px;cursor:pointer;text-align:center}#stock-notification-container #stock-notification-success-message{display:none;text-align:center}#stock-notification-container #stock-notification-form{display:flex;flex-direction:column;width:100%}#stock-notification-container #stock-notification-form span{display:block;overflow:hidden;flex-grow:1}#stock-notification-container #stock-notification-form div,#stock-notification-container #stock-notification-form input{height:initial}#stock-notification-container #stock-notification-form #stock-notification-email,#stock-notification-container #stock-notification-form #stock-notification-phone,#stock-notification-container #stock-notification-form #stock-notification-quantity{width:100%;padding:8px 20px;border:1px solid #ced4da;box-sizing:border-box}#stock-notification-container #stock-notification-form #stock-notification-email::placeholder,#stock-notification-container #stock-notification-form #stock-notification-phone::placeholder,#stock-notification-container #stock-notification-form #stock-notification-quantity::placeholder{color:#757575}#stock-notification-container #stock-notification-form #stock-notification-quantity::-webkit-inner-spin-button,#stock-notification-container #stock-notification-form #stock-notification-quantity::-webkit-outer-spin-button{-webkit-appearance:auto}#stock-notification-container #stock-notification-form #stock-notification-submit{white-space:nowrap;padding:8px 15px;border:1px solid #6c757d;background-color:#efefef;margin-bottom:0}#stock-notification-container div.stock-notification-powered-by{text-align:right;padding-top:10px;font-size:.6em;margin-bottom:0}#stock-notification-container.zen,#stock-notification-container.recife,#stock-notification-container.toluca,#stock-notification-container.morelia,#stock-notification-container.uyuni,#stock-notification-container.new_linkedman,#stock-notification-container.baires,#stock-notification-container.cubo,#stock-notification-container.luxury{border-radius:0}#stock-notification-container.new_linkedman{font-size:1rem}#stock-notification-container.new_linkedman #stock-notification-email,#stock-notification-container.new_linkedman #stock-notification-phone,#stock-notification-container.new_linkedman #stock-notification-quantity{font-size:1rem}#stock-notification-container.new_linkedman #stock-notification-submit{font-size:1rem;line-height:1.1rem}@media only screen and (max-width: 480px){#stock-notification-container.new_linkedman #stock-notification-modal-dialog{width:88%}}#stock-notification-container.zen input{height:100%;line-height:1.1rem}@media only screen and (max-width: 480px){#stock-notification-container.zen #stock-notification-modal-dialog{width:88%}}#stock-notification-container.style{margin-top:0}#stock-notification-container.style #stock-notification-close-button{top:3px}#stock-notification-container.idea{border-radius:50px;margin-bottom:1rem;padding:5px 10px}#stock-notification-container.idea #stock-notification-modal-dialog{width:initial}@media only screen and (max-width: 480px){#stock-notification-container.idea #stock-notification-modal-dialog{width:93%}}@media only screen and (max-width: 480px){#stock-notification-container.material #stock-notification-modal-dialog,#stock-notification-container.recife #stock-notification-modal-dialog{margin:48% auto;padding:30px 10px 10px 10px}}#stock-notification-container.luxury input{font-size:14px}@media only screen and (max-width: 480px){#stock-notification-container.luxury #stock-notification-modal-dialog{width:88%}}#stock-notification-container.bahia{margin-bottom:1rem}#stock-notification-container.bahia input{font-size:14px}#stock-notification-container.cancun{width:100%}#stock-notification-container.habitus{margin-right:0;margin-left:auto;width:270px;text-align:center}#stock-notification-container.morelia{width:100%;margin-left:15px;margin-right:15px}#stock-notification-container.atlantico #stock-notification-close-button{font-size:20px}#stock-notification-container.recife #stock-notification-close-button{top:0px}#stock-notification-container.lima{border-radius:40px}#stock-notification-container.lima #stock-notification-close-button{top:0px}#stock-notification-container.uyuni{border-left:0;border-right:0}#stock-notification-container.cubo #stock-notification-close-button{top:3px}#stock-notification-container.amazonas{border-radius:40px}#stock-notification-container.rio{border-radius:4px}.notification-list-button{margin-top:1rem;border:1px solid #6c757d;color:#6c757d;padding:3px;text-align:center}.notification-list-button.idea{margin-top:0;border-radius:6px}.notification-list-button.material{padding-top:5px;padding-bottom:5px}.notification-list-button.new_linkedman{margin-top:0;color:#434343;border:1px solid rgba(67,67,67,0.3)}.notification-list-button.bahia{clear:both}.notification-list-button.style,.notification-list-button.atlantico,.notification-list-button.rio,.notification-list-button.brasilia{border-radius:6px}.notification-list-button.lima{border-radius:50px;padding:10px 15px}.notification-list-button.toluca{border-radius:4px}.notification-list-button.brasilia{border-radius:8px}.notification-list-button.zen{color:#000;opacity:1 !important}.notification-list-button.uyuni{border-right:0;border-left:0}';
var storeConfig;
var selectedVariant;
var getNotificationRequestElement = function getNotificationRequestElement() {
return "\n \n
\n
").concat(storeConfig.notificationRequestMessage, "
\n
\n
\n ");
};
var getSelectedVariantName = function getSelectedVariantName() {
var variants = selectedVariant ? [selectedVariant.option0, selectedVariant.option1, selectedVariant.option2] : [];
return variants.filter(Boolean).join(' - ');
};
var getButtonInlineStyle = function getButtonInlineStyle() {
var style = '';
if (storeConfig.buttonFontColor) {
style += "color: ".concat(storeConfig.buttonFontColor, "; ");
}
if (storeConfig.buttonBackgroundColor) {
style += "background-color: ".concat(storeConfig.buttonBackgroundColor, "; border: none; ");
}
if (LS.product && storeConfig.buttonInProductPageCSS) {
style += storeConfig.buttonInProductPageCSS;
} else if (storeConfig.buttonInProductListCSS) {
style += storeConfig.buttonInProductListCSS;
}
return style.trim();
};
var getLegend = function getLegend() {
if (LS.langCode === 'es') {
return 'Usando Notificaciones de Stock';
} else if (LS.langCode === 'pt') {
return 'Usando Avise-me Quando Chegar';
}
return '';
};
var getSelectedVariant = function getSelectedVariant() {
var currentVariant = {};
var selects = $('[data-store^="product-form"] select[name^=variation]');
if (selects.length == 0) {
selects = $('[data-store^="product-form"] input[name^=variation]');
}
if (selects.is(':radio')) {
selects = selects.filter(':checked');
}
selects.each(function (index, select) {
var key = 'option' + /variation\[(\d+)\]/.exec($(select).attr('name'))[1];
currentVariant[key] = $(select).val();
});
var theVariant = null;
$.each(LS.variants, function (_index, variant) {
var matches = true;
$.each(currentVariant, function (key) {
if (variant[key] != currentVariant[key]) {
matches = false;
}
});
if (matches) {
theVariant = variant;
}
});
return theVariant;
};
var onVariantSelected = function onVariantSelected(variant) {
if (!variant) {
variant = LS.variants.find(function (i) {
return i.available;
}) || LS.variants[0];
}
if (variant.stock === 0) {
$('#stock-notification-container').css('display', 'block');
} else {
$('#stock-notification-container').hide();
}
selectedVariant = variant;
};
var getWidgetContainer = function getWidgetContainer() {
var selectorsByPriority = ['#stocknube-app-container', LS.theme.code === 'morelia' ? '[data-store^="product-form"] .buy-button-container' : null, '[data-store^="product-buy-button"]', 'input[type=submit].js-prod-submit-form'];
for (var selector of selectorsByPriority) {
var element = $(selector).first();
if (element.length > 0) {
return element;
}
}
return null;
};
var injectNotificationRequestElement = function injectNotificationRequestElement() {
if (LS.product.tags.includes('no-stock-notif')) {
return console.log('Notificaciones de Stock: El producto tiene el tag no-stock-notif, no se va a mostrar el boton');
}
var widgetContainer = getWidgetContainer();
if (!widgetContainer) {
throw new Error('Notificaciones de Stock: No se pudo encontrar una posición en la página donde insertar el widget');
}
widgetContainer.after(getNotificationRequestElement());
$('#stock-notification-form').on('submit', onNotificationRequestSubmitted);
var modal = document.getElementById('stock-notification-modal-dialog');
$('#stock-notification-request-message').click(function () {
var emailInput = document.getElementById('stock-notification-email');
var phoneInput = document.getElementById('stock-notification-phone');
if (emailInput) {
emailInput.value = localStorage.getItem('stock-notification-app-email');
}
if (phoneInput) {
phoneInput.value = localStorage.getItem('stock-notification-app-phone');
}
var productName = document.getElementById('stock-notification-product-name');
var variantName = getSelectedVariantName();
productName.innerHTML = "".concat(LS.product.name, " ").concat(variantName ? " - ".concat(variantName) : '');
modal.showModal();
});
var closeButton = document.getElementById('stock-notification-close-button');
closeButton.onclick = function () {
modal.close();
};
LS.registerOnChangeVariant(onVariantSelected);
if (LS.theme.code === 'cancun') {
$('input.js-theme-change-variant').change(function () {
onVariantSelected(getSelectedVariant());
});
}
var variant = getSelectedVariant();
if (variant && variant.option0 !== 'muestra') {
onVariantSelected(variant);
}
};
var onNotificationRequestSubmitted = function onNotificationRequestSubmitted(event) {
event.preventDefault();
var emailInput = document.getElementById('stock-notification-email');
var phoneInput = document.getElementById('stock-notification-phone');
var quantityInput = document.getElementById('stock-notification-quantity');
var submitButton = document.getElementById('stock-notification-submit');
var email = emailInput === null || emailInput === void 0 ? void 0 : emailInput.value;
var phoneNumber = phoneInput === null || phoneInput === void 0 ? void 0 : phoneInput.value;
var quantity = quantityInput === null || quantityInput === void 0 ? void 0 : quantityInput.value;
if (email || phoneNumber) {
emailInput === null || emailInput === void 0 ? void 0 : emailInput.removeAttribute('required');
phoneInput === null || phoneInput === void 0 ? void 0 : phoneInput.removeAttribute('required');
} else {
emailInput === null || emailInput === void 0 ? void 0 : emailInput.setAttribute('required', 'required');
phoneInput === null || phoneInput === void 0 ? void 0 : phoneInput.setAttribute('required', 'required');
if (emailInput && phoneInput) {
emailInput === null || emailInput === void 0 ? void 0 : emailInput.reportValidity();
} else {
phoneInput === null || phoneInput === void 0 ? void 0 : phoneInput.reportValidity();
emailInput === null || emailInput === void 0 ? void 0 : emailInput.reportValidity();
}
return;
}
submitButton.value = '...';
var notificationRequest = {
productId: LS.product.id,
productName: LS.product.name,
productVariantSKU: selectedVariant && selectedVariant.sku,
productVariantId: selectedVariant && selectedVariant.id,
productVariantName: selectedVariant && getSelectedVariantName(),
productLink: window.location.href,
storeId: LS.store.id,
lang: LS.langCode,
email: email,
phoneNumber: phoneNumber,
quantity: quantity
};
fetch("".concat(appUrl, "/api/notifications"), {
method: 'POST',
body: JSON.stringify(notificationRequest),
headers: {
'Content-Type': 'application/json'
}
}).then(function (response) {
if (response.ok) {
$('#stock-notification-form').hide();
$('#stock-notification-success-message').show();
} else {
$('#stock-notification-submit').val(storeConfig.notificationRequestMessage);
throw new Error('Notificaciones de Stock: No se pudo enviar la notificación');
}
})["catch"](function () {
$('#stock-notification-submit').val(storeConfig.notificationRequestMessage);
throw new Error('Notificaciones de Stock: No se pudo enviar la notificación');
});
if (email) {
localStorage.setItem('stock-notification-app-email', email);
}
if (phoneNumber) {
localStorage.setItem('stock-notification-app-phone', phoneNumber);
}
};
var initialButtonInProductListRender = function initialButtonInProductListRender() {
document.head.insertAdjacentHTML('beforeend', ""));
$('div[data-product-type$="list"]').each(injectButtonInProductFromProductList);
masonryGridRerender();
renderButtonInProductListWhenMoreProductsAreAdded();
};
var masonryGridRerender = function masonryGridRerender() {
if (typeof $masonry_grid !== 'undefined' && typeof $masonry_grid.layout === 'function') {
$masonry_grid.layout();
}
};
var renderButtonInProductListWhenMoreProductsAreAdded = function renderButtonInProductListWhenMoreProductsAreAdded() {
var callback = function callback(mutationsList, _observer) {
var injectedSomething = false;
for (var mutation of mutationsList) {
if (mutation.type === 'childList') {
for (var node of mutation.addedNodes) {
injectedSomething = true;
if ($(node).is('div[data-product-type$="list"]')) {
injectButtonInProductFromProductList.call($(node));
} else {
var results = $(node).find('div[data-product-type$="list"]');
results.each(injectButtonInProductFromProductList);
}
}
}
}
if (injectedSomething) {
masonryGridRerender();
}
};
var observer = new MutationObserver(callback);
var table = document.getElementsByClassName('js-product-table')[0];
if (!table) {
return console.log('Notificaciones de Stock: No se pudo agregar Observer para monitorear el agregado dínamico de nuevos productos');
}
observer.observe(table, {
childList: true
});
};
function injectButtonInProductFromProductList() {
var container = $(this);
var buttonContainers = {
'generic': '[data-store^="product-item-info"] a',
'bahia': '.item-description a',
'idea': '[data-store^="product-item-info"] > a'
};
var button = "").concat(storeConfig.buttonInProductListMessage, "
");
if (container.find('.notification-list-button').length > 0) {
return;
}
var stockAttribute = container.find('[data-store|="stock-product"][data-store$="-0"]');
if (stockAttribute.length > 0) {
if (LS.theme.code === 'amazonas') {
container.find('.item-actions a').first().html(storeConfig.buttonInProductListMessage);
container.find('.item-actions > div').first().attr('class', '');
} else if (LS.theme.code === 'new_linkedman') {
var productLink = container.find('[data-store^="product-item-info"] a').first();
var stockLabel = container.find('.js-stock-label').first();
stockLabel.html("").concat(storeConfig.buttonInProductListMessage, ""));
} else if (LS.theme.code === 'cubo') {
container.find('.item-actions span').first().html(storeConfig.buttonInProductListMessage);
} else {
var buttonContainer = container.find(buttonContainers[LS.theme.code] || buttonContainers['generic']).last();
buttonContainer.append(button);
}
}
}
var init = function init() {
if (typeof $ === 'undefined' || !$.fn || !$.fn.jquery) {
throw new Error('Notificaciones de Stock: No se pudo encontrar jQuery');
}
$.get("".concat(appUrl, "/api/stores/").concat(LS.store.id, "/?lang=").concat(LS.langCode)).done(function (response) {
storeConfig = response;
if (LS.product) {
injectNotificationRequestElement();
} else if (storeConfig.showButtonInProductList) {
initialButtonInProductListRender();
}
});
};
useJquery().then(function () {
return init();
});
})(LS);