From aa2aea555dfd2a5a281142163dfc75f585d028d8 Mon Sep 17 00:00:00 2001 From: Christian Date: Tue, 5 May 2026 00:10:42 +0200 Subject: [PATCH] hotfix: ignore restored telephony filters on first load --- RELEASE_NOTES_v2.2.87.md | 14 +++++++ VERSION | 2 +- app/modules/telefoni/templates/log.html | 56 +++++++++++++++++++++---- 3 files changed, 62 insertions(+), 10 deletions(-) create mode 100644 RELEASE_NOTES_v2.2.87.md diff --git a/RELEASE_NOTES_v2.2.87.md b/RELEASE_NOTES_v2.2.87.md new file mode 100644 index 0000000..84d9bdd --- /dev/null +++ b/RELEASE_NOTES_v2.2.87.md @@ -0,0 +1,14 @@ +# Release Notes v2.2.87 + +Dato: 2026-05-05 + +## Hotfix + +- Telefoni: Foerste auto-load ignorerer nu browser-restored filterfelter (dato/user/uden sag). +- Dette forhindrer at opkald vises ved load og derefter forsvinder efter ca. 1 sekund. +- Filtre aktiveres stadig normalt ved brugerens egen interaktion. + +## Berorte filer + +- `app/modules/telefoni/templates/log.html` +- `VERSION` diff --git a/VERSION b/VERSION index 4ccffcd..c4c475d 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.2.86 +2.2.87 diff --git a/app/modules/telefoni/templates/log.html b/app/modules/telefoni/templates/log.html index 40c0115..d5a020c 100644 --- a/app/modules/telefoni/templates/log.html +++ b/app/modules/telefoni/templates/log.html @@ -214,6 +214,7 @@ function escapeHtml(str) { let telefoniCurrentUserId = null; let telefoniAutoResetTried = false; let telefoniFirstApiLoadDone = false; +let telefoniFiltersArmed = false; const telefoniCallMap = new Map(); const linkSagState = { callId: null, @@ -862,10 +863,28 @@ async function loadCalls() { const hadServerRows = Number.isFinite(initialCount) && initialCount > 0; tbody.innerHTML = 'Indlæser...'; - const userId = document.getElementById('filterUser').value; - const from = document.getElementById('filterFrom').value; - const to = document.getElementById('filterTo').value; - const withoutCase = document.getElementById('filterWithoutCase').checked; + const userEl = document.getElementById('filterUser'); + const fromEl = document.getElementById('filterFrom'); + const toEl = document.getElementById('filterTo'); + const withoutCaseEl = document.getElementById('filterWithoutCase'); + + let userId = userEl.value; + let from = fromEl.value; + let to = toEl.value; + let withoutCase = withoutCaseEl.checked; + + // On first automatic load, ignore browser-restored filter values. + // Filters are only applied after explicit user interaction. + if (!telefoniFiltersArmed) { + userId = ''; + from = ''; + to = ''; + withoutCase = false; + userEl.value = ''; + fromEl.value = ''; + toEl.value = ''; + withoutCaseEl.checked = false; + } const qs = new URLSearchParams(); if (userId) qs.set('user_id', userId); @@ -908,6 +927,9 @@ async function loadCalls() { telefoniAutoResetTried = false; telefoniFirstApiLoadDone = true; + if (!telefoniFiltersArmed) { + telefoniFiltersArmed = true; + } tbody.innerHTML = rows.map(r => { const started = r.started_at ? new Date(r.started_at) : null; @@ -1034,13 +1056,29 @@ document.addEventListener('DOMContentLoaded', async () => { if (toFilter) toFilter.value = ''; if (withoutCaseFilter) withoutCaseFilter.checked = false; telefoniAutoResetTried = false; + telefoniFiltersArmed = false; await loadUsers(); - document.getElementById('btnRefresh').addEventListener('click', loadCalls); - document.getElementById('filterUser').addEventListener('change', loadCalls); - document.getElementById('filterFrom').addEventListener('change', loadCalls); - document.getElementById('filterTo').addEventListener('change', loadCalls); - document.getElementById('filterWithoutCase').addEventListener('change', loadCalls); + document.getElementById('btnRefresh').addEventListener('click', () => { + telefoniFiltersArmed = true; + loadCalls(); + }); + document.getElementById('filterUser').addEventListener('change', () => { + telefoniFiltersArmed = true; + loadCalls(); + }); + document.getElementById('filterFrom').addEventListener('change', () => { + telefoniFiltersArmed = true; + loadCalls(); + }); + document.getElementById('filterTo').addEventListener('change', () => { + telefoniFiltersArmed = true; + loadCalls(); + }); + document.getElementById('filterWithoutCase').addEventListener('change', () => { + telefoniFiltersArmed = true; + loadCalls(); + }); await loadCalls(); });