[fix](trx-frontend-http): fix WEFAX toggle button and bookmark decoder wiring
Per-entry caching in _ensureDecoderToggles prevents stale guard from blocking re-scan. Direct syncWefaxToggle path ensures dataset.enabled stays current for bookmark prefill. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> Signed-off-by: Stan Grams <sjg@haxx.space>
This commit is contained in:
@@ -469,10 +469,11 @@ let decodeHistoryRetentionMin = 24 * 60;
|
|||||||
// field name (e.g. "ft8_decode_enabled"). Lazily populated on first SSE.
|
// field name (e.g. "ft8_decode_enabled"). Lazily populated on first SSE.
|
||||||
const _decoderToggles = {};
|
const _decoderToggles = {};
|
||||||
function _ensureDecoderToggles() {
|
function _ensureDecoderToggles() {
|
||||||
if (Object.keys(_decoderToggles).length > 0) return;
|
if (decoderRegistry.length === 0) return;
|
||||||
for (const d of decoderRegistry) {
|
for (const d of decoderRegistry) {
|
||||||
if (d.activation !== "toggle") continue;
|
if (d.activation !== "toggle") continue;
|
||||||
const key = d.id.replace(/-/g, "_") + "_decode_enabled";
|
const key = d.id.replace(/-/g, "_") + "_decode_enabled";
|
||||||
|
if (_decoderToggles[key]) continue;
|
||||||
const el = document.getElementById(d.id + "-decode-toggle-btn");
|
const el = document.getElementById(d.id + "-decode-toggle-btn");
|
||||||
if (el) _decoderToggles[key] = { el, last: null, label: d.label };
|
if (el) _decoderToggles[key] = { el, last: null, label: d.label };
|
||||||
}
|
}
|
||||||
@@ -3368,6 +3369,10 @@ function render(update) {
|
|||||||
for (const [key, entry] of Object.entries(_decoderToggles)) {
|
for (const [key, entry] of Object.entries(_decoderToggles)) {
|
||||||
syncDecoderToggle(entry, !!update[key], entry.label);
|
syncDecoderToggle(entry, !!update[key], entry.label);
|
||||||
}
|
}
|
||||||
|
// WEFAX toggle sync (plugin-owned, belt-and-suspenders alongside _decoderToggles).
|
||||||
|
if (typeof update.wefax_decode_enabled === "boolean" && window.syncWefaxToggle) {
|
||||||
|
window.syncWefaxToggle(update.wefax_decode_enabled);
|
||||||
|
}
|
||||||
// Recorder state sync.
|
// Recorder state sync.
|
||||||
if (typeof update.recorder_enabled === "boolean" && window._syncRecorderState) {
|
if (typeof update.recorder_enabled === "boolean" && window._syncRecorderState) {
|
||||||
window._syncRecorderState(update.recorder_enabled);
|
window._syncRecorderState(update.recorder_enabled);
|
||||||
|
|||||||
@@ -342,6 +342,18 @@ if (wefaxDom.sortSelect) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ── Toggle button sync ──────────────────────────────────────────────
|
||||||
|
// Sync the Enable/Disable button from the SSE state update. This is
|
||||||
|
// belt-and-suspenders alongside app.js _decoderToggles — guarantees the
|
||||||
|
// WEFAX button always reflects the server state.
|
||||||
|
window.syncWefaxToggle = function (enabled) {
|
||||||
|
if (!wefaxDom.toggleBtn) return;
|
||||||
|
wefaxDom.toggleBtn.dataset.enabled = enabled ? 'true' : 'false';
|
||||||
|
wefaxDom.toggleBtn.textContent = enabled ? 'Disable WEFAX' : 'Enable WEFAX';
|
||||||
|
wefaxDom.toggleBtn.style.borderColor = enabled ? '#00d17f' : '';
|
||||||
|
wefaxDom.toggleBtn.style.color = enabled ? '#00d17f' : '';
|
||||||
|
};
|
||||||
|
|
||||||
// ── Button handlers ─────────────────────────────────────────────────
|
// ── Button handlers ─────────────────────────────────────────────────
|
||||||
if (wefaxDom.toggleBtn) {
|
if (wefaxDom.toggleBtn) {
|
||||||
wefaxDom.toggleBtn.addEventListener('click', async function () {
|
wefaxDom.toggleBtn.addEventListener('click', async function () {
|
||||||
|
|||||||
Reference in New Issue
Block a user