Files
luci/modules
Paul Donald db91dbcdf7 luci-static: fix race condition when probing features
follow-up to a2fce95248

hasSystemFeature() inspects the cached result of
probeSystemFeatures() which needs to have completed.

Once all of the legacy (Lua) stuff is ready, this block
runs:

initDOM() {
	...
	L.loaded = true;
	document.dispatchEvent(new CustomEvent('luci-loaded'));
},

This commit now calls View.load() once system feature
probing has completed, and LuCI itself has loaded. This
ensures that the following load paradigm succeeds:

return view.extend({
	load() {
		return Promise.all([
			...,
			L.hasSystemFeature('x'),
		]);
	}, ...

The luci-loaded check prevents waiting when LuCI is already
loaded (the common case after initial page load), but the
listener handles the race condition where a View is
instantiated before initDOM() completes.

The flow:

If L.loaded is true: initDOM() already ran --> skip waiting,
proceed immediately.

If L.loaded is false: initDOM() hasn't run yet --> add
listener --> wait for it to complete.

Signed-off-by: Paul Donald <newtwen+github@gmail.com>
2025-12-24 17:34:16 +01:00
..