Unify regular and virtual device table behavior - #6
Conversation
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_7cec7b3d-4c26-406b-aa0b-b907ffa58ea4) |
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_c1b658e3-f771-4f89-b4ca-108d1dfdcc86) |
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_77b51d6f-7567-42f3-bccc-b7436969908c) |
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_0fdc7d89-78b5-4781-91b1-af7bb4ae94e3) |
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_08e09244-ddb9-4de5-8c34-d3828d3dea0e) |
Unifies the regular and virtual Dashboard device-table behavior and incorporates the follow-up review fixes for PR #5/#6.
Shared regular/virtual behavior
Review fixes
Async batch-config note
The existing persistent job runner stores job parameters as JSON. Moving password changes into it directly would persist the new device password in plaintext. This PR therefore keeps batch config synchronous but cancellation-aware. A safe async config job should first add encrypted/ephemeral secret parameters.
Validation
CI run 35411207216 is green on head a508325:
Note
Overview
Dashboard device tables now share one filtered/sorted/hierarchical list, one row-cell renderer, and shared row-state classes. Live WebSocket updates rebuild rows from the store (including parent AP rows when STAs change) instead of hand-patching cells; the virtual table gains horizontal scroll with a synced header, an empty state, stable Dir column sizing, and throttled side effects (warnings panel, antenna modal) after batched updates.
Batch configuration is consolidated behind a single modal/submit path with matching client checks: SSID capped at 32 bytes and channel as a positive integer. The API enforces the same rules and calls
ApplyConfigContextso login and PATCH honor request cancellation; after a password change is accepted on-device, credential persistence uses a boundedWithoutCanceltimeout so a disconnect does not skip saving the new password.Smaller UX fixes include capture-phase scroll listeners so scope/column menus close in both table modes, debounced discovery re-renders that preserve scroll across regular/virtual mode switches, and cache-bust bumps for static assets.
Reviewed by Cursor Bugbot for commit a508325. Bugbot is set up for automated code reviews on this repo. Configure here.