From 97ebdcbddb9cad76dc551086fcb887e55886a069 Mon Sep 17 00:00:00 2001 From: James Haggerty Date: Thu, 8 Jun 2023 11:59:39 +1000 Subject: [PATCH] luci-base: force menu to regenerate after uci change Because the menu JSON can have 'depends' in them, uci changes should force the menu to regenerate. Closes #6423 Signed-off-by: James Haggerty Signed-off-by: Paul Donald --- modules/luci-base/htdocs/luci-static/resources/uci.js | 2 ++ modules/luci-base/htdocs/luci-static/resources/ui.js | 4 ++++ modules/luci-base/ucode/dispatcher.uc | 2 +- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/modules/luci-base/htdocs/luci-static/resources/uci.js b/modules/luci-base/htdocs/luci-static/resources/uci.js index 76b274470b..c56ce4016a 100644 --- a/modules/luci-base/htdocs/luci-static/resources/uci.js +++ b/modules/luci-base/htdocs/luci-static/resources/uci.js @@ -919,6 +919,8 @@ return baseclass.extend(/** @lends LuCI.uci.prototype */ { window.setTimeout(try_confirm, 250); else return Promise.reject(rv); + } else { + document.dispatchEvent(new CustomEvent('uci-applied')); } return rv; diff --git a/modules/luci-base/htdocs/luci-static/resources/ui.js b/modules/luci-base/htdocs/luci-static/resources/ui.js index afb590d8f8..b17fdc45fe 100644 --- a/modules/luci-base/htdocs/luci-static/resources/ui.js +++ b/modules/luci-base/htdocs/luci-static/resources/ui.js @@ -3478,6 +3478,10 @@ var UITable = baseclass.extend(/** @lends LuCI.ui.table.prototype */ { } }); +// Because the menu can depend on uci values, we need to flush the cache +// after uci mutations. +document.addEventListener('uci-applied', () => UIMenu.flushCache()); + /** * @class ui * @memberof LuCI diff --git a/modules/luci-base/ucode/dispatcher.uc b/modules/luci-base/ucode/dispatcher.uc index 8717385be2..694891a90e 100644 --- a/modules/luci-base/ucode/dispatcher.uc +++ b/modules/luci-base/ucode/dispatcher.uc @@ -358,7 +358,7 @@ function build_pagetree() { firstchild_ineligible: 'bool' }; - let files = glob('/usr/share/luci/menu.d/*.json', '/usr/lib/lua/luci/controller/*.lua', '/usr/lib/lua/luci/controller/*/*.lua'); + let files = glob('/usr/share/luci/menu.d/*.json', '/etc/config/*', '/usr/lib/lua/luci/controller/*.lua', '/usr/lib/lua/luci/controller/*/*.lua'); let cachefile; if (indexcache) { -- 2.30.2