hotfix: ignore restored telephony filters on first load

This commit is contained in:
Christian 2026-05-05 00:10:42 +02:00
parent 415abb058a
commit aa2aea555d
3 changed files with 62 additions and 10 deletions

14
RELEASE_NOTES_v2.2.87.md Normal file
View File

@ -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`

View File

@ -1 +1 @@
2.2.86
2.2.87

View File

@ -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 = '<tr><td colspan="7" class="text-muted small"><span class="spinner-border spinner-border-sm me-2"></span>Indlæser...</td></tr>';
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();
});
</script>