class ProductPage { /** * @param object[] units */ constructor(units) { this.units = units; this.initialize(); } initialize() { document.addEventListener("DOMContentLoaded", () => { document.addEventListener('click', this.onClick.bind(this)); document.addEventListener('change', this.onChange.bind(this)); }); } /** * @param {Event} event */ onChange(event) { if (event.target.closest('#measurement-unit')) { this.updateMeasurement(); } } /** * @param {MouseEvent} event */ onClick(event) { let target = event.target; let element; if (element = target.closest('[data-delete-product]')) { app.needConfirmationClickOnURL(element.dataset.url); return; } if (element = target.closest('[data-edit-product]')) { let url = element.dataset.url; app.toggleOverlay(); fetch(url) .then(response => response.text()) .then(data => { document.getElementById("product-modal-wrapper").innerHTML = data; const modal = Commons.showModal('product-modal'); document.getElementById('product-modal') .addEventListener('shown.bs.modal', event => { this.updateMeasurement(); }) }) .finally(() => app.toggleOverlay()) return; } } updateMeasurement() { let selectedMeasurement = document.getElementById('measurement-unit').value let selectedUnit = this.units[selectedMeasurement]; document.getElementById("default-qt").value = selectedUnit.defaultQuantity; document.getElementById("min-qt").value = selectedUnit.minQuantity; document.getElementById("max-qt").value = selectedUnit.maxQuantity; document.getElementById("default-step").value = selectedUnit.quantityStep; } }