feat(lists): wire dead list controls (VAPP-15) #13
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/wire-list-controls"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Resolves VAPP-15.
Wires every dead list control on
/devices,/events, and the topbar so each does what it says or is removed. All filtering is client-side over the already-fetched rows, so no server work was added.Changes
StatusFiltersignal; their counts stay computed from the full row set so they hold steady across filters. A name/id substring filter reads the shared topbar search. "Export CSV" builds an RFC 4180 CSV (name, id, mesh, status, platform, address, agent, last seen) from exactly the filtered rows and downloads it via aBlob+ transient anchor click on web (no-op on desktop, which has no DOM). The dead "Bulk action" button is removed.DeviceSearchcontext signal provided at the app root; typing navigates to/deviceson the first keystroke and narrows the list from any page. Placeholder shrinks to "Search devices". The dead "Invite" button is removed.SeverityFiltersignal; the filter-expression input implements its own placeholder,source:<text>narrows by source and any other text is a substring match on the message.wasm-bindgen/js-sys/web-systo the wasm32 target for the CSV download. All three were already resolved transitively, so no new crate is pulled in (lock only gains them as direct deps).Acceptance criteria
Verification
cargo check(server + wasm32),cargo clippy -D warnings(server + wasm32),cargo fmt --check, andcargo test --features serverall pass locally.Resolved the merge conflicts with main (PR #14's enrollment dialog landed in the same topbar and devices-page regions). Topbar: kept this PR's Invite removal and main's wired + New Device (opens the enrollment dialog). Devices page: kept main's empty-state/else structure with this PR's filtered rows feeding the table; the empty state keys off the full set so filters cannot fake an empty fleet. Verified against a live server with an enrolled agent: devices page shows the device, Export CSV and the chip buttons, search input bound, Bulk action and Invite gone, + New Device present; events page renders the filter expression input with live events. just check clean (7 tests).