From 19992e6199bc9d3ec23e051bd81cdf1362755253 Mon Sep 17 00:00:00 2001 From: dadaloop82 Date: Tue, 10 Mar 2026 16:15:01 +0000 Subject: [PATCH] Auto-refresh UI after every data mutation - Added refreshCurrentPage() to reload active page data - deleteInventoryItem/submitEditInventory now refresh current page (works from dashboard or inventory) - removeBringItem/addSelectedSuggestions update dashboard shopping count - Track current page ID for context-aware refresh --- assets/js/app.js | 24 ++++++++++++++++++++++-- data/dispensa.db | Bin 73728 -> 73728 bytes 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/assets/js/app.js b/assets/js/app.js index b62a199..719352f 100644 --- a/assets/js/app.js +++ b/assets/js/app.js @@ -324,7 +324,23 @@ async function api(action, params = {}, method = 'GET', body = null) { } // ===== PAGE NAVIGATION ===== +// Track current page for auto-refresh +let _currentPageId = 'dashboard'; +let _currentPageParam = null; + +// Refresh current page data without full navigation +function refreshCurrentPage() { + switch(_currentPageId) { + case 'dashboard': loadDashboard(); break; + case 'inventory': loadInventory(); break; + case 'shopping': loadShoppingList(); break; + case 'products': loadAllProducts(); break; + } +} + function showPage(pageId, param = null) { + _currentPageId = pageId; + _currentPageParam = param; // Hide all pages document.querySelectorAll('.page').forEach(p => p.classList.remove('active')); // Show target page @@ -729,7 +745,7 @@ async function deleteInventoryItem(id) { await api('inventory_delete', {}, 'POST', { id }); closeModal(); showToast('Prodotto rimosso', 'success'); - loadInventory(); + refreshCurrentPage(); } } @@ -785,7 +801,7 @@ async function submitEditInventory(e, id) { await api('inventory_update', {}, 'POST', { id, quantity: qty, location: loc, expiry_date: expiry }); closeModal(); showToast('Aggiornato!', 'success'); - loadInventory(); + refreshCurrentPage(); } // ===== BARCODE SCANNER ===== @@ -2285,6 +2301,8 @@ async function removeBringItem(idx) { shoppingItems.splice(idx, 1); renderShoppingItems(); showToast('Rimosso dalla lista', 'success'); + // Update dashboard shopping count + loadShoppingCount(); } } catch (err) { showToast('Errore nella rimozione', 'error'); @@ -2408,6 +2426,8 @@ async function addSelectedSuggestions() { showToast(`${data.added} prodott${data.added === 1 ? 'o aggiunto' : 'i aggiunti'} a Bring!`, 'success'); // Refresh list await loadShoppingList(); + // Update dashboard shopping count + loadShoppingCount(); // Clear suggestions document.getElementById('shopping-suggestions').style.display = 'none'; suggestionItems = []; diff --git a/data/dispensa.db b/data/dispensa.db index 14e3bd5a02b4ef782c900afc370d45fb2d03cc2c..d335093344bdf51e33a0f0d9db17a103496b388f 100644 GIT binary patch delta 815 zcmbu7PiPZS5XSTJw%sOi)5KUJh_KPdLhSxeHYNy0w6_>Gh(*?eEXg)mjoGmK;!(4n zD;gi-L8S^x34%1PkfX&OJyk4T1gVF5@!&0S1_Gh)p%>w9=#ZPI-vy_ma0aCLjGR7^lO-{m=F3ARD~qBi@UoDRGQ8q4$Dbcy zOFo~E^8WUVK$rx`(weqbL5A71)qMaS1})31wkyakzbX(BsDeHw71s~?UFXNKX?4N} zq99I5iqT{iETd+MyeKog#0Wes$ax{17qafhG86v4X|H}D2ye=Bc&zo%Kbdk9k$V(Q z-}pH`1_4k?n7_GBQ0v2Z=Mi}3h3|y0uxJMZFb+mzmE4z$^AM`k7AEhyern6hNm1M7 zs{8HnK|fT;^FI|MO;O2c2B>llnuhcS2z7Q}53lGQ$I7$#aEcBiIFzZ|^Q@)wp)EOre4U{Em$2k?t zv@1p%A(O6H?W##Pj9MKPjcNmT-WT!G*8nL?-0<-D>FXF?`5XpwxX@2r7`YMUJ%fny zEmjHpW`tzI$xZ^tkffco)QyH#)f=t4q0z-*Gv%*>-)x-ZymZc^i}Uc}hJ0}gmf1v? z4a5prR^)m1N~>056x}xSw2MG2><{9 delta 272 zcmZoTz|wGlWdn->vp=`)WOfBT)(_mP`6h0*Q#j2vae~HXUG1eJdcF({47@-L0Rqg- zs*EK?iFw6|$t9WjdBu@DjLfo(1x5KOrO745{+k?F1ehZkuTN$V*u1e(mT~j-KwUmu z#%Et)Vd2+e@R`h7Fq?_bWV52cB;Ls;b>G;4b^-BZgZhgsJWD|G4RaXtfztillMQ={ zxp*%!a6z22d0kH!Gjk;Go5}1GHUkwH@os)ISAvN-l6~c5_60x}yl30Ia(Q$Fvk