[fix](trx-frontend-http): populate scheduler bookmark picker after async load
The TimeSpan bookmark <select> was populated in wireSchedulerEvents() which runs before the apiGetBookmarks() fetch completes, leaving it empty. Moved population to populateTsBookmarkSelect() called from loadScheduler()'s .then() callback so bookmarkList is already filled. Also pre-fill grayline lat/lon from serverLat/serverLon when the field has no saved value. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: Stan Grams <sjg@haxx.space>
This commit is contained in:
@@ -117,6 +117,7 @@
|
|||||||
.then(function ([config, bms]) {
|
.then(function ([config, bms]) {
|
||||||
currentConfig = config;
|
currentConfig = config;
|
||||||
bookmarkList = Array.isArray(bms) ? bms : [];
|
bookmarkList = Array.isArray(bms) ? bms : [];
|
||||||
|
populateTsBookmarkSelect();
|
||||||
renderScheduler();
|
renderScheduler();
|
||||||
})
|
})
|
||||||
.catch(function (e) {
|
.catch(function (e) {
|
||||||
@@ -181,13 +182,27 @@
|
|||||||
// Grayline inputs
|
// Grayline inputs
|
||||||
if (mode === "grayline" && currentConfig && currentConfig.grayline) {
|
if (mode === "grayline" && currentConfig && currentConfig.grayline) {
|
||||||
const gl = currentConfig.grayline;
|
const gl = currentConfig.grayline;
|
||||||
setInputValue("scheduler-gl-lat", gl.lat != null ? gl.lat : "");
|
// Prefer saved value; fall back to server coordinates from app.js globals.
|
||||||
setInputValue("scheduler-gl-lon", gl.lon != null ? gl.lon : "");
|
const lat = gl.lat != null ? gl.lat : (typeof serverLat !== "undefined" ? serverLat : "");
|
||||||
|
const lon = gl.lon != null ? gl.lon : (typeof serverLon !== "undefined" ? serverLon : "");
|
||||||
|
setInputValue("scheduler-gl-lat", lat != null ? lat : "");
|
||||||
|
setInputValue("scheduler-gl-lon", lon != null ? lon : "");
|
||||||
setInputValue("scheduler-gl-window", gl.transition_window_min != null ? gl.transition_window_min : 20);
|
setInputValue("scheduler-gl-window", gl.transition_window_min != null ? gl.transition_window_min : 20);
|
||||||
renderBookmarkSelect("scheduler-gl-dawn", gl.dawn_bookmark_id);
|
renderBookmarkSelect("scheduler-gl-dawn", gl.dawn_bookmark_id);
|
||||||
renderBookmarkSelect("scheduler-gl-day", gl.day_bookmark_id);
|
renderBookmarkSelect("scheduler-gl-day", gl.day_bookmark_id);
|
||||||
renderBookmarkSelect("scheduler-gl-dusk", gl.dusk_bookmark_id);
|
renderBookmarkSelect("scheduler-gl-dusk", gl.dusk_bookmark_id);
|
||||||
renderBookmarkSelect("scheduler-gl-night", gl.night_bookmark_id);
|
renderBookmarkSelect("scheduler-gl-night", gl.night_bookmark_id);
|
||||||
|
} else if (mode === "grayline") {
|
||||||
|
// No saved grayline config yet — pre-fill coords from server if available.
|
||||||
|
const lat = typeof serverLat !== "undefined" ? serverLat : "";
|
||||||
|
const lon = typeof serverLon !== "undefined" ? serverLon : "";
|
||||||
|
setInputValue("scheduler-gl-lat", lat != null ? lat : "");
|
||||||
|
setInputValue("scheduler-gl-lon", lon != null ? lon : "");
|
||||||
|
setInputValue("scheduler-gl-window", 20);
|
||||||
|
renderBookmarkSelect("scheduler-gl-dawn", null);
|
||||||
|
renderBookmarkSelect("scheduler-gl-day", null);
|
||||||
|
renderBookmarkSelect("scheduler-gl-dusk", null);
|
||||||
|
renderBookmarkSelect("scheduler-gl-night", null);
|
||||||
} else {
|
} else {
|
||||||
renderBookmarkSelect("scheduler-gl-dawn", null);
|
renderBookmarkSelect("scheduler-gl-dawn", null);
|
||||||
renderBookmarkSelect("scheduler-gl-day", null);
|
renderBookmarkSelect("scheduler-gl-day", null);
|
||||||
@@ -343,6 +358,7 @@
|
|||||||
|
|
||||||
startEl.value = "";
|
startEl.value = "";
|
||||||
endEl.value = "";
|
endEl.value = "";
|
||||||
|
bmEl.value = ""; // reset select to first option
|
||||||
if (labelEl) labelEl.value = "";
|
if (labelEl) labelEl.value = "";
|
||||||
|
|
||||||
renderTimespanEntries();
|
renderTimespanEntries();
|
||||||
@@ -473,17 +489,21 @@
|
|||||||
const addBtn = document.getElementById("scheduler-ts-add-btn");
|
const addBtn = document.getElementById("scheduler-ts-add-btn");
|
||||||
if (addBtn) addBtn.addEventListener("click", addEntry);
|
if (addBtn) addBtn.addEventListener("click", addEntry);
|
||||||
|
|
||||||
// Populate add-entry bookmark selector
|
}
|
||||||
const tsBookmarkEl = document.getElementById("scheduler-ts-bookmark");
|
|
||||||
if (tsBookmarkEl) {
|
function populateTsBookmarkSelect() {
|
||||||
tsBookmarkEl.innerHTML = '<option value="">— select bookmark —</option>';
|
const sel = document.getElementById("scheduler-ts-bookmark");
|
||||||
bookmarkList.forEach(function (bm) {
|
if (!sel) return;
|
||||||
const opt = document.createElement("option");
|
const prev = sel.value;
|
||||||
opt.value = bm.id;
|
sel.innerHTML = '<option value="">— select bookmark —</option>';
|
||||||
opt.textContent = bm.name + " (" + formatFreq(bm.freq_hz) + " " + bm.mode + ")";
|
bookmarkList.forEach(function (bm) {
|
||||||
tsBookmarkEl.appendChild(opt);
|
const opt = document.createElement("option");
|
||||||
});
|
opt.value = bm.id;
|
||||||
}
|
opt.textContent = bm.name + " (" + formatFreq(bm.freq_hz) + " " + bm.mode + ")";
|
||||||
|
sel.appendChild(opt);
|
||||||
|
});
|
||||||
|
// Restore previous selection if still valid.
|
||||||
|
if (prev) sel.value = prev;
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------------------------------------
|
// -------------------------------------------------------------------------
|
||||||
|
|||||||
Reference in New Issue
Block a user