- Shipped
- August 9, 2026 at 9:01 PM UTC
- Author
- kamo
- Commit
- 20bbcc0
The tab bar already says "System Access Logs", so the h4 above the stats was the page's name twice. Dropping it also lets the pane use the shell every other Security tab uses: the grid takes whatever height the stats and filters leave and scrolls its own rows, instead of a 480px-tall virtualised list sitting in a card that the pane then scrolled around a second time. The hand-rolled react-window table is now a DataGrid, matching PhiAccessGrid next door. Pagination was already server-side; what was missing is that the filters feeding it could not reach the server: - the date inputs sent "YYYY-MM-DD", which LocalDateTime.parse rejects — every date filter was a 500. Each end is now widened to the day it means. - memberId binds to a Long upstream, so a half-typed or non-numeric value was a 400 rather than an empty result; it is only sent once it is numeric. - IP and member id are debounced, so a search is one request rather than one per keystroke, and a sequence guard drops a slow answer that lands after a newer one. - export no longer sends page/size, which the export endpoint does not honour. Columns are deliberately unsortable: the controller always orders createdAt DESC and takes no sort parameter, so a clickable header could only reorder the 25 rows in hand while reading as though it had sorted the whole log.