Geräte-Tab: serverseitige Suche via Graph API
Suche ruft bei jeder Eingabe die API auf statt lokal zu filtern. Seriennummer wird per exaktem eq-Filter parallel gesucht und mit Namens-Treffern zusammengeführt (Graph unterstützt kein startswith auf serialNumber). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+24
-27
@@ -5239,18 +5239,7 @@ const DevState = {
|
||||
};
|
||||
|
||||
async function devLoadAll() {
|
||||
if (DevState.loaded) return;
|
||||
devShowLoading(true);
|
||||
try {
|
||||
const data = await api('/api/devices');
|
||||
DevState.items = data.items || [];
|
||||
DevState.loaded = true;
|
||||
devApplyFilters();
|
||||
} catch (e) {
|
||||
toast('Geräte konnten nicht geladen werden: ' + e, 'error');
|
||||
} finally {
|
||||
devShowLoading(false);
|
||||
}
|
||||
await devFetch();
|
||||
}
|
||||
|
||||
function devShowLoading(on) {
|
||||
@@ -5258,22 +5247,30 @@ function devShowLoading(on) {
|
||||
document.getElementById('devEmpty').classList.add('hidden');
|
||||
}
|
||||
|
||||
function devApplyFilters() {
|
||||
const q = document.getElementById('devSearch').value.toLowerCase();
|
||||
async function devFetch() {
|
||||
const q = document.getElementById('devSearch').value.trim();
|
||||
const os = document.getElementById('devOsFilter').value;
|
||||
const cmp = document.getElementById('devComplianceFilter').value;
|
||||
|
||||
DevState.filtered = DevState.items.filter(d => {
|
||||
if (os && d.OS !== os) return false;
|
||||
if (cmp && d.ComplianceState !== cmp) return false;
|
||||
if (q) {
|
||||
const hay = `${d.DeviceName} ${d.UserDisplayName} ${d.UserPrincipalName} ${d.SerialNumber}`.toLowerCase();
|
||||
if (!hay.includes(q)) return false;
|
||||
}
|
||||
return true;
|
||||
});
|
||||
devShowLoading(true);
|
||||
try {
|
||||
const params = new URLSearchParams();
|
||||
if (q) params.set('q', q);
|
||||
if (os) params.set('os', os);
|
||||
if (cmp) params.set('compliance', cmp);
|
||||
const data = await api('/api/devices?' + params.toString());
|
||||
DevState.items = data.items || [];
|
||||
DevState.filtered = DevState.items;
|
||||
devSort();
|
||||
} catch (e) {
|
||||
toast('Geräte konnten nicht geladen werden: ' + e, 'error');
|
||||
} finally {
|
||||
devShowLoading(false);
|
||||
}
|
||||
}
|
||||
|
||||
devSort();
|
||||
function devApplyFilters() {
|
||||
devFetch();
|
||||
}
|
||||
|
||||
function devSort() {
|
||||
@@ -5495,10 +5492,10 @@ document.getElementById('devActions')?.addEventListener('click', async (e) => {
|
||||
let devSearchDebounce = null;
|
||||
document.getElementById('devSearch').addEventListener('input', () => {
|
||||
clearTimeout(devSearchDebounce);
|
||||
devSearchDebounce = setTimeout(devApplyFilters, 250);
|
||||
devSearchDebounce = setTimeout(devFetch, 400);
|
||||
});
|
||||
document.getElementById('devOsFilter').addEventListener('change', devApplyFilters);
|
||||
document.getElementById('devComplianceFilter').addEventListener('change', devApplyFilters);
|
||||
document.getElementById('devOsFilter').addEventListener('change', devFetch);
|
||||
document.getElementById('devComplianceFilter').addEventListener('change', devFetch);
|
||||
|
||||
// Sortierung
|
||||
document.querySelectorAll('#devTable th.sortable').forEach(th => {
|
||||
|
||||
Reference in New Issue
Block a user