fix(pending): respect active filters when clearing pending devices
Trash button in PendingDevicesModal now removes only filtered devices instead of wiping the whole pending list. Falls back to clearPending when no filters are active.
This commit is contained in:
@@ -224,11 +224,26 @@ export function PendingDevicesModal({ open, onClose, highlightId, initialStatus
|
|||||||
}
|
}
|
||||||
|
|
||||||
const handleClearAll = async () => {
|
const handleClearAll = async () => {
|
||||||
|
const targets = filtered
|
||||||
|
if (targets.length === 0) return
|
||||||
|
const filtersActive = targets.length !== devices.length
|
||||||
try {
|
try {
|
||||||
await scanApi.clearPending()
|
if (filtersActive) {
|
||||||
setDevices([])
|
const results = await Promise.allSettled(targets.map((d) => scanApi.ignore(d.id)))
|
||||||
setSelectedIds(new Set())
|
const failed = results.filter((r) => r.status === 'rejected').length
|
||||||
toast.success('Pending devices cleared')
|
const removedIds = new Set(
|
||||||
|
targets.filter((_, i) => results[i].status === 'fulfilled').map((d) => d.id)
|
||||||
|
)
|
||||||
|
setDevices((prev) => prev.filter((d) => !removedIds.has(d.id)))
|
||||||
|
setSelectedIds(new Set())
|
||||||
|
if (failed > 0) toast.error(`Removed ${removedIds.size}, ${failed} failed`)
|
||||||
|
else toast.success(`Removed ${removedIds.size} device${removedIds.size !== 1 ? 's' : ''}`)
|
||||||
|
} else {
|
||||||
|
await scanApi.clearPending()
|
||||||
|
setDevices([])
|
||||||
|
setSelectedIds(new Set())
|
||||||
|
toast.success('Pending devices cleared')
|
||||||
|
}
|
||||||
} catch {
|
} catch {
|
||||||
toast.error('Failed to clear pending devices')
|
toast.error('Failed to clear pending devices')
|
||||||
}
|
}
|
||||||
@@ -374,7 +389,11 @@ export function PendingDevicesModal({ open, onClose, highlightId, initialStatus
|
|||||||
<RefreshCw size={14} />
|
<RefreshCw size={14} />
|
||||||
</button>
|
</button>
|
||||||
{statusFilter === 'pending' && devices.length > 0 && (
|
{statusFilter === 'pending' && devices.length > 0 && (
|
||||||
<button onClick={handleClearAll} className="text-muted-foreground hover:text-[#f85149] p-1.5 rounded transition-colors" title="Clear all pending">
|
<button
|
||||||
|
onClick={handleClearAll}
|
||||||
|
className="text-muted-foreground hover:text-[#f85149] p-1.5 rounded transition-colors"
|
||||||
|
title={filtered.length !== devices.length ? `Remove ${filtered.length} filtered` : 'Clear all pending'}
|
||||||
|
>
|
||||||
<Trash2 size={14} />
|
<Trash2 size={14} />
|
||||||
</button>
|
</button>
|
||||||
)}
|
)}
|
||||||
|
|||||||
Reference in New Issue
Block a user