Skip to content

refactor(ui): compose dashboard pages with shared layouts - #44306

Merged
yujonglee-berri merged 4 commits into
mainfrom
litellm_logs_page_composition
Oct 3, 2026
Merged

yujonglee-berri merged 4 commits into
mainfrom
litellm_logs_page_composition

Conversation

@devin-ai-integration

@devin-ai-integration devin-ai-integration Bot commented Oct 3, 2026 •

Copy link
Copy Markdown
Contributor

TLDR

Problem this solves:

  • Dashboard pages duplicate padding and tab layout rules
  • Logs mixes page composition into a misleading table component
  • Empty log tables leave pagination halfway down the screen

How it solves it:

  • Compose Logs tabs directly in the route
  • Share page, content, and tab primitives across ten pages
  • Share full-height tables and centered empty states across Logs

Intentional product change: standardize page spacing, remove duplicate Logs headings, and move refresh status into the toolbar. Full-height tables keep pagination at the bottom instead of immediately below the last row

User Flow

Before: Logs panels use inconsistent spacing and leave unused space below short tables

  1. Open http://127.0.0.1:3001/logs/
  2. View Request Logs with no requests and see a large refresh banner
  3. Switch to Deleted Keys or Deleted Teams and see a short table

After: Logs panels share spacing and fill the available screen height

  1. Open http://127.0.0.1:3001/logs/
  2. View Request Logs with no requests and see refresh status in the toolbar
  3. Switch to Deleted Keys and Deleted Teams and see centered empty states with pagination at the bottom

Validation

Focused Logs and table tests: 219 passed across 11 files. Shared tab tests: 98 passed across 3 files; these runs overlap

Changed-file Prettier and ESLint pass with no errors, the ESLint budget gate passes (complexity back at 140 after moving DataTable layout classes to cva variants), and knip passes. Shared, Logs and view_logs tests: 1029 passed across 90 files. Full TypeScript check: no diagnostics in changed files

Manually checked Request Logs and Deleted Teams against the local proxy on port 4000 using the dashboard dev server on port 3001

Pre-Submission checklist

  • I have added meaningful tests
  • Focused test files pass locally
  • Required CI checks pass
  • Scope is limited to dashboard page composition and layout
  • Greptile confidence is at least 4/5

Type

Refactoring

Caveats

Low

  • Before/after screenshot attachments are pending
  • CI, coverage, Greptile, Veria, and Bugbot results are pending
  • Remaining dashboard pages still need shared layout adoption

QA runbook

Prerequisites: an authenticated proxy admin session, a live proxy on port 4000, and the dashboard dev server on port 3001

  • tests/e2e/ui/tests/logs/logs.spec.ts / log tables fill the available height and empty requests stay centered after resizing
    • Open http://127.0.0.1:3001/logs/
    • Search for a unique nonexistent request ID
    • Set the viewport to 1440x900, then 1024x720
    • Expect pagination 24px above the viewport bottom
    • Expect the empty state centered in the visible table body
    • Switch to Deleted Keys and Deleted Teams; expect the same pagination placement
    • Return to Request Logs; expect the search to remain
    • Sanity check: restoring short tables must fail the height assertion

Link to Devin session: https://app.devin.ai/sessions/d4d393c22eda4c3cabea94ab85532ed3
Open in Devin Desktop: https://app.devin.ai/desktop/session/d4d393c22eda4c3cabea94ab85532ed3?variant=devin
Requested by: @yujonglee-berri

@devin-ai-integration

Copy link
Copy Markdown
Contributor Author

I'll fix CI failures and address comments from users with write access. I'll skip comments containing "(aside)".

  • Disable automatic comment, CI, and merge conflict monitoring

yujonglee-berri and others added 4 commits October 3, 2026 01:29
PageHeader drops its icon/title/subtitle/primaryAction/tabs/utilities props and the
leadingControls render prop in favor of PageHeaderTitle, PageHeaderDescription and
PageHeaderControls that each wrap one element and forward native props.

LogsTableToolbar's 15 props collapse into one LogsTimeRange value plus composable
LogsToolbar, LogsTimeRangePicker and LogsToolbarSwitch parts assembled in the panel.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Replaces the hand-rolled class-pair constants with boolean cva variants,
which also brings DataTable back under the complexity budget.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@devin-ai-integration
devin-ai-integration Bot force-pushed the litellm_logs_page_composition branch from 2e502bd to cefc1f1 Compare October 3, 2026 01:29
@yujonglee-berri
yujonglee-berri enabled auto-merge (squash) October 3, 2026 01:31
@yujonglee-berri
yujonglee-berri merged commit 4b9f990 into main Oct 3, 2026
94 of 97 checks passed
@yujonglee-berri
yujonglee-berri deleted the litellm_logs_page_composition branch October 3, 2026 01:35
@codspeed

codspeed Bot commented Oct 3, 2026

Copy link
Copy Markdown
Contributor

Merging this PR will not alter performance

✅ 31 untouched benchmarks


Comparing litellm_logs_page_composition (2e502bd) with main (b877a38)

Open in CodSpeed

@greptile-apps

greptile-apps Bot commented Oct 3, 2026 •

Copy link
Copy Markdown
Contributor

RetriggerConfidence Score: 4/5

[Medium risk] Dashboard pages refactored to use shared layout components.

The PR appears safe to merge, with a non-blocking improvement needed in the empty-state centering test

Findings

  1. P2 Centering check misses visible bounds ▶

Summary

This PR moves Logs composition into the route and adds shared page, header, and tab components across dashboard pages

  • Logs tables fill the available height, with refresh status in the toolbar
  • Role checks, active-panel props, and date-filter resets remain unchanged
  • The new browser test should measure centering within the visible table body
  • devin-ai-integration[bot] explicitly identifies standardized spacing, removed duplicate Logs headings, toolbar refresh status, and bottom-aligned pagination as intentional product changes. Those changes were not treated as regressions

Reviews (1) · Last reviewed commit: "refactor(ui): express DataTable layout c..."

Math.abs(
message.x + message.width / 2 - scroller.x - scroller.width / 2,
),
Math.abs(message.y + message.height / 2 - body.y - body.height / 2),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Centering check misses visible bounds

The vertical check compares the message with the whole tbody, not the area users can see. An overflowing body can pass even when the message is off-center on screen. Compare against the intersection of the body and scroller bounds instead

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant