diff --git a/frontend/src/components/modals/PendingDevicesModal.tsx b/frontend/src/components/modals/PendingDevicesModal.tsx
index 39aa1fb..2cf8ffb 100644
--- a/frontend/src/components/modals/PendingDevicesModal.tsx
+++ b/frontend/src/components/modals/PendingDevicesModal.tsx
@@ -373,7 +373,13 @@ export function PendingDevicesModal({ open, onClose, highlightId, initialStatus
if (e.key === '/') { e.preventDefault(); searchRef.current?.focus() }
else if (e.key.toLowerCase() === 's') { e.preventDefault(); if (selectMode) exitSelectMode(); else enterSelectMode() }
else if (e.key.toLowerCase() === 'a' && selectMode) { e.preventDefault(); selectAllVisible() }
- else if (e.key === 'Enter' && selectMode && selectedIds.size > 0) { e.preventDefault(); handleBulkApprove() }
+ else if (e.key === 'Enter' && selectMode && selectedIds.size > 0) {
+ // Enter confirms the bulk action for the current view: approving
+ // hidden devices would be wrong — they restore.
+ e.preventDefault()
+ if (statusFilter === 'hidden') handleBulkRestore()
+ else handleBulkApprove()
+ }
}
window.addEventListener('keydown', handler)
return () => window.removeEventListener('keydown', handler)
diff --git a/frontend/src/components/modals/__tests__/PendingDevicesModal.test.tsx b/frontend/src/components/modals/__tests__/PendingDevicesModal.test.tsx
index 8e99fd4..6470420 100644
--- a/frontend/src/components/modals/__tests__/PendingDevicesModal.test.tsx
+++ b/frontend/src/components/modals/__tests__/PendingDevicesModal.test.tsx
@@ -250,4 +250,25 @@ describe('PendingDevicesModal', () => {
fireEvent.click(screen.getByRole('button', { name: /Restore \(1\)/ }))
await waitFor(() => expect(mockBulkRestore).toHaveBeenCalledWith(['dev-a']))
})
+
+ it('Enter confirms approve in pending select mode', async () => {
+ render()
+ await waitFor(() => expect(screen.getByTestId('pending-card-dev-a')).toBeInTheDocument())
+ fireEvent.click(screen.getByRole('button', { name: 'Select mode' }))
+ fireEvent.click(screen.getByTestId('pending-card-dev-a'))
+ fireEvent.keyDown(window, { key: 'Enter' })
+ await waitFor(() => expect(mockBulkApprove).toHaveBeenCalledWith(['dev-a']))
+ expect(mockBulkRestore).not.toHaveBeenCalled()
+ })
+
+ it('Enter restores (not approves) in hidden select mode', async () => {
+ mockHidden.mockResolvedValue({ data: [{ ...DEVICE_IP, status: 'hidden' }] })
+ render()
+ await waitFor(() => expect(screen.getByTestId('pending-card-dev-a')).toBeInTheDocument())
+ fireEvent.click(screen.getByRole('button', { name: 'Select mode' }))
+ fireEvent.click(screen.getByTestId('pending-card-dev-a'))
+ fireEvent.keyDown(window, { key: 'Enter' })
+ await waitFor(() => expect(mockBulkRestore).toHaveBeenCalledWith(['dev-a']))
+ expect(mockBulkApprove).not.toHaveBeenCalled()
+ })
})