diff --git a/frontend/data/products_seed.db b/frontend/data/products_seed.db index 032b3ff..f93970b 100644 Binary files a/frontend/data/products_seed.db and b/frontend/data/products_seed.db differ diff --git a/frontend/js/main.js b/frontend/js/main.js index 34a5328..093b7c7 100644 --- a/frontend/js/main.js +++ b/frontend/js/main.js @@ -1290,7 +1290,10 @@ async function renderProducts(container) { ${microChips.length ? `
${microChips.map(c => c.html).join("")}
` : ""} ${p.composition ? `
${esc(p.composition)}
` : ""} - +
+ + +
`; } @@ -1309,6 +1312,13 @@ async function renderProducts(container) { showAddFoodFromProduct(parseInt(btn.dataset.pid)); }; }); + el.querySelectorAll(".prod-edit-btn").forEach(btn => { + btn.onclick = async e => { + e.stopPropagation(); + const p = await DB.getProduct(parseInt(btn.dataset.pid)); + if (p) showEditProductModal(p, () => doSearch(false)); + }; + }); } function showAddFoodFromProduct(productId) { @@ -1403,6 +1413,71 @@ function showAddProductModal(onSaved) { }); } +function showEditProductModal(p, onSaved) { + const microHtml = MICRO_FIELDS.map(f => { + let val = p[f.key] ?? ""; + if (val && f.mult) val = Math.round(val / f.mult * 1000) / 1000; + return `
+ + +
`; + }).join(""); + + showModal(` +

Редактирование продукта

+
+ + +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+

Нутриенты на 100г:

+
${microHtml}
`, + async overlay => { + const name = overlay.querySelector("#ep-name").value.trim(); + if (!name) return false; + const sets = ["name=?1", "kcal_per_100g=?2", "protein_per_100g=?3", "fat_per_100g=?4", "carbs_per_100g=?5"]; + const vals = [ + name, + parseFloat(overlay.querySelector("#ep-kcal").value) || null, + parseFloat(overlay.querySelector("#ep-protein").value) || null, + parseFloat(overlay.querySelector("#ep-fat").value) || null, + parseFloat(overlay.querySelector("#ep-carbs").value) || null, + ]; + let idx = 6; + for (const f of MICRO_FIELDS) { + let val = parseFloat(overlay.querySelector(`#ep-${f.key}`).value) || null; + if (val && f.mult) val *= f.mult; + sets.push(`${f.key}=?${idx}`); + vals.push(val); + idx++; + } + vals.push(p.id); + await window.__TAURI__.core.invoke("plugin:sql|execute", { + db: "sqlite:baldav.db", + query: `UPDATE products SET ${sets.join(", ")} WHERE id=?${idx}`, + values: vals, + }); + if (onSaved) onSaved(); + }); +} + // --------------------------------------------------------------------------- // RECIPES screen // ---------------------------------------------------------------------------