feat: reset all queue filters together

Add one contextual reset action that clears the upload sidebar, filename search, host filter, and status filter in a single render while restoring selection and scroll state consistently.
This commit is contained in:
Sucukdeluxe
2026-08-21 00:55:26 +02:00
parent d3c6475321
commit 503cb26615
7 changed files with 82 additions and 0 deletions
+38
View File
@@ -3917,6 +3917,7 @@ function setUploadSidebarFilter(value) {
_lastVisibleRange = { start: -1, end: -1 };
const container = document.getElementById('queueContainer');
if (container) container.scrollTop = 0;
syncQueueFilterResetAction();
renderQueueTable();
}
@@ -3927,6 +3928,40 @@ function applyQueueDetailFilters() {
_queueFilterCache = { filter: '', source: null, result: [] };
_normalizeQueueSelectionToVisible();
_lastVisibleRange = { start: -1, end: -1 };
syncQueueFilterResetAction();
renderQueueTable();
}
function _hasActiveQueueFilters() {
return uploadSidebarFilter !== 'all' || Boolean(queueSearchQuery || queueHosterFilter || queueStatusFilter);
}
function syncQueueFilterResetAction() {
const button = document.getElementById('queueFilterResetBtn');
if (!button) return;
const active = _hasActiveQueueFilters();
button.hidden = !active;
button.disabled = !active;
}
function resetQueueFilters() {
uploadSidebarFilter = 'all';
queueSearchQuery = '';
queueHosterFilter = '';
queueStatusFilter = '';
const search = document.getElementById('queueSearchInput');
const hoster = document.getElementById('queueHosterFilter');
const status = document.getElementById('queueStatusFilter');
if (search) search.value = '';
if (hoster) hoster.value = '';
if (status) status.value = '';
_syncSidebarFilterButtons('[data-upload-sidebar-target]', 'uploadSidebarTarget', 'all');
_queueFilterCache = { filter: '', source: null, result: [] };
_normalizeQueueSelectionToVisible();
_lastVisibleRange = { start: -1, end: -1 };
const container = document.getElementById('queueContainer');
if (container) container.scrollTop = 0;
syncQueueFilterResetAction();
renderQueueTable();
}
@@ -3938,6 +3973,7 @@ function syncQueueHosterFilterOptions() {
select.innerHTML = `<option value="">Alle Hoster</option>${names.map(name => `<option value="${escapeAttr(name)}">${escapeHtml(getHosterLabel(name))}</option>`).join('')}`;
select.value = names.includes(current) ? current : '';
queueHosterFilter = select.value;
syncQueueFilterResetAction();
}
function updateUploadSidebarSummary(stats = _computeQueueStats()) {
@@ -7237,6 +7273,8 @@ function setupListeners() {
document.getElementById('queueSearchInput').addEventListener('input', applyQueueDetailFilters);
document.getElementById('queueHosterFilter').addEventListener('change', applyQueueDetailFilters);
document.getElementById('queueStatusFilter').addEventListener('change', applyQueueDetailFilters);
document.getElementById('queueFilterResetBtn').addEventListener('click', resetQueueFilters);
syncQueueFilterResetAction();
const historyRetentionPicker = document.getElementById('historyRetentionPicker');
const historyRetentionTrigger = document.getElementById('historyRetentionTrigger');
+1
View File
@@ -107,6 +107,7 @@
['Eine neue Version ist verfügbar!', 'A new version is available!'],
['Bereit zum Download', 'Ready to download'],
['Abbrechen', 'Cancel'],
['Filter zurücksetzen', 'Reset filters'],
['Jetzt installieren', 'Install now'],
['Jetzt updaten', 'Install now'],
['Alle Dateien', 'All files'],
+1
View File
@@ -297,6 +297,7 @@
<select class="hs-input" id="queueStatusFilter" aria-label="Nach Status filtern" style="width:auto;min-width:150px">
<option value="">Alle Status</option><option value="error">Nur Fehler</option><option value="active">Aktiv</option><option value="waiting">Wartend</option><option value="done">Erfolgreich</option>
</select>
<button class="btn btn-xs btn-secondary queue-filter-reset" id="queueFilterResetBtn" hidden>Filter zurücksetzen</button>
</div>
<div class="queue-container" id="queueContainer">
+7
View File
@@ -401,6 +401,13 @@ body {
background: var(--border);
margin: 0 4px;
}
.queue-filter-reset {
margin-left: auto;
white-space: nowrap;
}
.queue-filter-reset[hidden] {
display: none;
}
.queue-container {
flex: 1 1 0;
min-height: 0;