feat: #213 conveniences — logs column sorting + page-size persistence, trash see-all paging #228

Closed
timothy wants to merge 0 commits from fix/213-logs-trash into main
Owner

Part of #213 (with PR #227 this completes the remaining scope; close #213 on merge of both).

  • Logs API: sortField (timestamp|level) + sortDirection query params (allow-listed, normalize-not-reject, wired to existing GetRecentLogEntries.SortExpression); SPA sortable column headers.
  • Logs page-size persisted client-locally (ctv-logs-page-size), pattern documented in spa-conventions §5d + decisions.md entry (client-local vs Blazor ConfigElement).
  • Trash: per-kind "See all N" paging via the existing /api/library/browse pageNum support — no new API; 100/kind cap decision superseded (noted in decisions.md).
  • OpenAPI regenerated; api-conventions sort-param note.

ErsatzTV.Tests 978/978; web tsc + lint + 483/483 green.

🤖 Generated with Claude Code

Part of #213 (with PR #227 this completes the remaining scope; close #213 on merge of both). - Logs API: `sortField` (timestamp|level) + `sortDirection` query params (allow-listed, normalize-not-reject, wired to existing `GetRecentLogEntries.SortExpression`); SPA sortable column headers. - Logs page-size persisted client-locally (`ctv-logs-page-size`), pattern documented in spa-conventions §5d + decisions.md entry (client-local vs Blazor ConfigElement). - Trash: per-kind "See all N" paging via the existing `/api/library/browse` pageNum support — no new API; 100/kind cap decision superseded (noted in decisions.md). - OpenAPI regenerated; api-conventions sort-param note. ErsatzTV.Tests 978/978; web tsc + lint + 483/483 green. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
timothy added 1 commit 2026-07-11 00:11:13 +02:00
feat(spa): logs sort + page-size persistence, trash see-all paging (#213)
Build ErsatzTV Image / Build & test (.NET) (pull_request) Successful in 7m23s
Build ErsatzTV Image / Docs update reminder (pull_request) Successful in 28s
Build ErsatzTV Image / EF migration integrity (SQLite + MySql) (pull_request) Successful in 10m14s
Build ErsatzTV Image / Build & push image (amd64) (pull_request) Has been skipped
0a8c7b691b
Blazor parity for the remaining #213 conveniences:

- GET /api/logs gains sortField (timestamp|level) and sortDirection
  (asc|desc) query params, allow-listed and normalized (unrecognized
  values fall back to the pre-existing timestamp-desc default) rather
  than rejected with a 422. LogsScreen.tsx renders clickable, sortable
  column headers with a chevron direction indicator.
- LogsScreen.tsx now persists the chosen page size to localStorage
  (ctv-logs-page-size) and restores it on mount, following the
  existing designSystem.ts localStorage-preference pattern. This is a
  client-local UI preference, not the Blazor ConfigElement-backed
  server setting — see docs/decisions.md.
- TrashScreen.tsx adds a per-kind "See all N ..." affordance that
  pages past the 100/kind /api/search cap using the already-paginated
  GET /api/library/browse (mediaType + pageNum), appending results
  client-side. No new API surface was needed since that endpoint
  already supports the paging the trash screen needed.

docs/decisions.md, docs/blazor-route-parity.md, docs/spa-conventions.md
and docs/api-conventions.md updated in this same commit. OpenAPI spec
regenerated (v1.d.ts unchanged: query params aren't part of the
generated components/schemas surface).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
timothy added 1 commit 2026-07-11 00:31:14 +02:00
Merge main: CI MySQL host-port unpin (collision fix)
Build ErsatzTV Image / Docs update reminder (pull_request) Successful in 18s
Build ErsatzTV Image / Build & test (.NET) (pull_request) Successful in 7m38s
Build ErsatzTV Image / EF migration integrity (SQLite + MySql) (pull_request) Successful in 10m15s
Build ErsatzTV Image / Build & push image (amd64) (pull_request) Has been skipped
086319f200
Author
Owner

Merged to main via integration PR #239 (all six gate-batch branches integrated in one CI round after pairwise doc conflicts; this PR's commits are reachable from main — see the merge commits there). Closing manually since Gitea did not auto-detect the branch merge.

Merged to main via integration PR #239 (all six gate-batch branches integrated in one CI round after pairwise doc conflicts; this PR's commits are reachable from main — see the merge commits there). Closing manually since Gitea did not auto-detect the branch merge.
timothy closed this pull request 2026-07-11 11:37:52 +02:00

Pull request closed

This pull request cannot be reopened because the branch was deleted.
Sign in to join this conversation.