From 3789747729158ae607dd986b7567665e82e80403 Mon Sep 17 00:00:00 2001 From: 4aiman Date: Fri, 29 May 2026 22:01:52 +0300 Subject: [PATCH] Edit product from search card, fix Ayutinskiy bread kcal MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Product editing: - "Ред." button on expanded product card - showEditProductModal: edit name, KBJU, all micronutrients - Updates product in DB directly, refreshes search Bread fix: - "Хлеб Тостовый пшеничный Аютинский 280г" was 268 in Magnit data - Package says 243 kcal/100g — corrected in seed DB - Seed version 7 Users can now fix any wrong KBJU directly from the product card without re-importing or editing the seed DB manually. --- frontend/data/products_seed.db | Bin 8249344 -> 8249344 bytes frontend/js/main.js | 77 ++++++++++++++++++++++++++++++++- 2 files changed, 76 insertions(+), 1 deletion(-) diff --git a/frontend/data/products_seed.db b/frontend/data/products_seed.db index 032b3ffcbd5afb295c0de9232906d88fec480393..f93970bd0f0a7f09fb11e2aeb974a000dc879cfe 100644 GIT binary patch delta 762 zcmbW#xlfaE9LMqB(-xl63T-I}SfD@df}oUgSGiOK#d3ObSPr>Q#S1YM5}vY<$Rddj z4h{?s!~}d+X2SZcI`$7>aOJ%b6Bqp?ujIRa^7%%New!os;BlP@q5c%-aqpA{l#}n_ zFJ496keXC9Y0{)wlNL?JX)^wYRO2Jo7Gc}6epLey1W0`{Y_s>4Ta;P#-0i*5@3TJ7m$b~IN*c}$#5eDskn$Vq$2~D z;6Wy`kPR;+a*&HWCT^h>x6y`n+`(OR=tk_G-=}tnM4RoG<Sdhj@g?c!GWmU=TxiiZF&Tf>Dg&8OAYzNlalH jGnmC3=COc9Ea5p`U>Ps*3a{}7Z?S@RSmop1uOFWQ-Q6z$ delta 712 zcmajdIa5<{6vp9uv)vGgl1+^f@()S~8Z{vp*@U2g3nUr>D8wbo=8g-S+Zdej#)cVf z%#0Kk7O5zlVZ1GE=x-}@`3SW9IxEIA^UR#`J@cOY=B_c1uRcdvl9a#Fzj1yG$K>+w z+)ux3`6N^!tHPiPqbf|QFss7yM<|wjRa&xrvHntYx#);^6Ix`)Xpr5j(&u>XN=7m$ ziY$Hic?0alId^KZxW49E*FJhuIdefTDX^jnHdLbqb{xP#)WQKLTyVpKLpY2h@Zu_0;P&t3@@^hy&#XvRsLLKvrU24@jL6fKCM73UDg zd9 c@B%OK3a>Gb1uS9-%Xovgc!&3V(}$IOV 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 // ---------------------------------------------------------------------------