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
// ---------------------------------------------------------------------------