fix: standardize page container layout with no-padding-parent and 100dvh sizing - #4046
Conversation
|
Warning Review limit reached
More reviews will be available in 6 minutes and 41 seconds. Learn how PR review limits work. Your organization has run out of usage credits. Purchase more in the billing tab. ⌛ How to resolve this issue?After more reviews become available, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available. Please see our Fair Usage Limits Policy for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Run ID: 📒 Files selected for processing (12)
📝 WalkthroughWalkthroughThis PR standardizes container layouts to full-width padded viewport-height wrappers across workspace/governance pages, removes an extra wrapper in TeamsView while adding one in GovernanceTeamsPage, adjusts sticky SheetHeader padding, and performs a broad refactor of the Virtual Key sheet (form defaults, submit normalization, provider UI, and MCP client UI). ChangesPage Layout Standardization
Teams Components Structure and Styling
Virtual Key Sheet Form and UI Refactoring
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes Possibly related PRs
Suggested reviewers
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
no-padding-parent and 100dvh sizing
81e5272 to
ba54745
Compare
4049406 to
681bba9
Compare
ba54745 to
a9dd86a
Compare
681bba9 to
c10a4a1
Compare
a9dd86a to
32760c5
Compare
c10a4a1 to
0f8ed8f
Compare
0f8ed8f to
1acbbe0
Compare
32760c5 to
0bcaf0c
Compare
1acbbe0 to
e1fcc50
Compare
0bcaf0c to
b8fd252
Compare
e1fcc50 to
a81be90
Compare
b8fd252 to
3905d3b
Compare
3905d3b to
d99a1d8
Compare
0de4bcf to
d1d422d
Compare
d99a1d8 to
c5c59b3
Compare
c5c59b3 to
ffefed9
Compare
There was a problem hiding this comment.
♻️ Duplicate comments (1)
ui/app/workspace/virtual-keys/views/virtualKeySheet.tsx (1)
1922-1937:⚠️ Potential issue | 🟡 Minor | ⚡ Quick win**
Replace index-based React keys in MCP dropdown/table (virtualKeySheet.tsx)
SelectItemand MCP tableTableRoware keyed withindex(key={index}andkey={`${config.mcp_client_name}-${index}`}), which can remount rows/options when ordering changes.Suggested fix
- .map((client, index) => { + .map((client) => { @@ - <SelectItem - key={index} - value={client.config.name} - > + <SelectItem + key={client.config.name} + value={client.config.name} + > @@ - <TableRow - key={`${config.mcp_client_name}-${index}`} - > + <TableRow key={config.mcp_client_name}>MCP
SelectTrigger/MultiSelectin this section also lackdata-testid(only the delete button has one), which matches the already-existing data-testid concern.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@ui/app/workspace/virtual-keys/views/virtualKeySheet.tsx` around lines 1922 - 1937, The SelectItem and MCP TableRow are using unstable index keys (key={index} / key={`${config.mcp_client_name}-${index}`}) which can cause remounts when order changes; update those components to use stable unique identifiers instead (e.g., use client.config.name or a unique client ID for SelectItem and use config.mcp_client_name or a unique row id for TableRow) and remove index-based keys; additionally add data-testid attributes to the SelectTrigger and MultiSelect elements (matching existing test-id patterns) so tests can reliably target the dropdown components.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Duplicate comments:
In `@ui/app/workspace/virtual-keys/views/virtualKeySheet.tsx`:
- Around line 1922-1937: The SelectItem and MCP TableRow are using unstable
index keys (key={index} / key={`${config.mcp_client_name}-${index}`}) which can
cause remounts when order changes; update those components to use stable unique
identifiers instead (e.g., use client.config.name or a unique client ID for
SelectItem and use config.mcp_client_name or a unique row id for TableRow) and
remove index-based keys; additionally add data-testid attributes to the
SelectTrigger and MultiSelect elements (matching existing test-id patterns) so
tests can reliably target the dropdown components.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro
Run ID: fcfc00c5-0371-4a79-b809-87233d256671
📒 Files selected for processing (12)
ui/app/_fallbacks/enterprise/components/user-groups/teamsView.tsxui/app/workspace/audit-logs/page.tsxui/app/workspace/governance/access-profiles/page.tsxui/app/workspace/governance/business-units/page.tsxui/app/workspace/governance/customers/page.tsxui/app/workspace/governance/rbac/page.tsxui/app/workspace/governance/teams/page.tsxui/app/workspace/governance/users/page.tsxui/app/workspace/governance/views/teamSheet.tsxui/app/workspace/scim/page.tsxui/app/workspace/virtual-keys/views/virtualKeyDetailsSheet.tsxui/app/workspace/virtual-keys/views/virtualKeySheet.tsx
Merge activity
|
…100dvh` sizing (#4046) ## Summary Standardizes the page-level container layout across multiple workspace pages to ensure consistent full-viewport height behavior and uniform padding. Previously, pages used a mix of `max-w-7xl`, `100vh`, and inconsistent padding approaches. This aligns them all to use `100dvh` with a `1rem` offset and the `no-padding-parent` class to properly handle the parent container's padding. ## Changes - Replaced `max-w-7xl` width constraints and `100vh`-based height calculations with a unified `h-[calc(100dvh-1rem)]` approach across audit logs, access profiles, business units, customers, RBAC, teams, and users pages - Added `no-padding-parent` class to suppress inherited padding from parent layout containers - Added explicit `p-4` padding at the page level so each view controls its own spacing - Wrapped the teams page view in a consistent container div (it previously had no wrapper) - Removed `overflow-y-auto` from the RBAC page container, deferring scroll behavior to the inner view - Removed unused `parseAsString` import from the customers page ## Type of change - [ ] Bug fix - [ ] Feature - [x] Refactor - [ ] Documentation - [ ] Chore/CI ## Affected areas - [ ] Core (Go) - [ ] Transports (HTTP) - [ ] Providers/Integrations - [ ] Plugins - [x] UI (React) - [ ] Docs ## How to test Navigate to each of the following pages and verify the layout fills the viewport correctly without overflow or unexpected scrollbars: - `/workspace/audit-logs` - `/workspace/governance/access-profiles` - `/workspace/governance/business-units` - `/workspace/governance/customers` - `/workspace/governance/rbac` - `/workspace/governance/teams` - `/workspace/governance/users` ```sh cd ui pnpm i || npm i pnpm build || npm run build ``` ## Screenshots/Recordings Before/after screenshots showing consistent full-height layout across pages recommended. ## Breaking changes - [ ] Yes - [x] No ## Related issues ## Security considerations None. ## Checklist - [ ] I read `docs/contributing/README.md` and followed the guidelines - [ ] I added/updated tests where appropriate - [ ] I updated documentation where needed - [ ] I verified builds succeed (Go and UI) - [ ] I verified the CI pipeline passes locally if applicable <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Style** * Updated layout and spacing across workspace and governance pages (audit logs, access profiles, business units, customers, RBAC, users, etc.) for improved responsiveness. * Adjusted header and container padding in team and virtual key sheets. * Refined SCIM page layout with improved scrolling behavior. * **New Features** * Enhanced virtual key sheet with improved form initialization, provider configuration handling, and MCP client selection UI. * Added a layout wrapper to the teams page. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
## ✨ Features - **OpenAI Compaction** — Added OpenAI conversation compaction support across core, framework, logging, and the API surface (#4053) - **Multi-Customer & Org Hierarchy** — Logs and usage tracking now support multiple customers, teams, and business units, including business unit CRUD, team assignment, and governance endpoints in the OpenAPI spec (#4066, #4041, #4082) - **Provider-Level Governance** — Budgets & limits are now scope-aware and can be applied at the virtual-key top level and per provider, wired from the model configs table, with UI filters for scope and providers (#3938, #3937, #3939, #3981, #3962) - **Customer Budgets** — Customers support multiple budgets and `calendar_aligned` budget windows (#3998, #3997) - **Virtual Key Attribution & Controls** — Added a `created_by` user attribution column and a `blacklisted_models` column for virtual key provider configs (#3672, #3653) - **Request Header Capture** — OTel and Maxim observability plugins capture `request_headers` by pattern, with wildcard support (e.g. `x-custom-*`); logging gained the same wildcard header capture (#4012, #3958) - **OTel Content Controls & Collectors** — New `disable_content_logging` option drops message/tool content from exported spans, plus support for multiple OTel collectors (#4064, #3894) - **xAI x_search** — Added xAI `x_search` tool support (#3976) - **URL Validation** — Added fetch URL validation with private-network configuration and link-local blocking (#3947, #3991) - **File Scheme Pricing URLs** — Pricing source URLs now accept the `file://` scheme for air-gapped and self-hosted deployments (#4045) - **Paginated Virtual Keys** — Virtual key fetching is paginated to handle deployments with very large numbers of keys (#3957) - **Client IP Resolution** — Resolve client IP from `X-Forwarded-For`/`X-Real-IP` headers - **SCIM Provisioning** — Added `attributeType`/`attributeValue` SCIM provisioning fields - **Helm/Config Schema** — Added `roles` RBAC governance config and `per_user_oauth` MCP auth to the Helm chart and config schema (#4004, #4009) - **Log Navigation UI** — Added a "View logs" menu item to customer, team, and virtual key tables, clickable links in log detail views, a customer detail sheet, and a reusable `BudgetDisplay` component (#4073, #4054, #4026, #4055) - **Faster First Paint** — Added an inline loading shell to `#root` before React mounts (#4063) - **Materialized View Alias** — Added an `alias` column to the materialized view with filter support (#4078) ## 🐞 Fixed - **Fetch URL IP Checks** — Hardened fetch URL IP checks against SSRF (#4092) - **Mantle Model Matching** — Broadened Mantle model matching to all `gpt` variants (#4091) - **Empty Thinking Blocks** — Strip thinking blocks when the signature is empty (#4079) - **OpenAI Stream Usage** — Removed usage from the `responses.created` event in the OpenAI stream (#4080) - **Prompt Cache Key** — Set the prompt cache key from the Anthropic integration (#4086) - **Upstream Failure Status** — Map upstream connection failures to 502 instead of 400 (#3929) (thanks [@chris-colinsky](https://github.com/chris-colinsky)!) - **Gemini Schema Constraints** — Accept numeric schema integer constraints for Gemini (#3994) (thanks [@yanhao98](https://github.com/yanhao98)!) - **Files Provider Param** — Accept the `?provider=` query param on `GET /v1/files` (#3971) (thanks [@alexef](https://github.com/alexef)!) - **Optional Batch Model** — Made the `model` field optional on `POST /v1/batches` (#3973) (thanks [@alexef](https://github.com/alexef)!) - **Helm Azure Config** — Added missing `azure_key_config` fields to the Helm schema (#3996) (thanks [@axelray-dev](https://github.com/axelray-dev)!) - **Text Completion Chunk Model** — Added the missing `Model` field to `TextCompletionChunkResponse` (#3970) (thanks [@kuishou68](https://github.com/kuishou68)!) - **MCP Inline stdio Env** — MCP stdio server configs accept inline environment variable assignments (#3861) (thanks [@Shushmitaaaa](https://github.com/Shushmitaaaa)!) - **Orphaned Tool Results** — Orphaned tool results in the OpenAI to Anthropic conversion flow are no longer rejected by the Anthropic API (#3919) - **Node Usage Reconciliation** — Added a monotonic `inc_number` log cursor so node usage reconciliation does not skip late async log writes (#3664) - **Bedrock Output Assessments** — Corrected the type of `outputAssessments` in Bedrock responses (#4028) - **Model Pool Pricing Reloads** — Preserve non-pricing model pool entries across pricing reloads (#3999) - **Ghost Node Reconciliation** — Replicate the VK hierarchy flow for ghost node reconciliation (#4088) - **VK Double Usage Counting** — Fixed double usage counting when creating a virtual key (#4070) - **Model Config Lifecycle** — Cascade deletes for model configs and removal of stale in-memory model configs (#4051, #4043) - **FTS Index Cap** — Reduced the FTS index `left()` cap from 800k to 250k chars to stay within the tsvector limit (#4057) - **Sync Worker Drift** — Reduced the sync worker ticker period to 5m to prevent threshold drift (#4023) - **Passthrough** — Fixed passthrough budgets, gated passthrough models per VK, model extraction for Azure passthrough, and restricted fallbacks/provider selection to the VK boundary (#3941, #3988, #3983, #3924) - **Provider Response Headers** — Strip provider response headers and add a content-type filter (#3955, #4024) - **Stream Handling** — Drain non-SSE stream readers and retry stale connections (#3956, #3967) - **Azure Claude** — Strip Azure diagnostic property for Claude models (#3925) - **Compat max_tokens** — Preserve chat `max_tokens` during param filtering (#3992) - **Raw Request Flag** — Removed the raw request flag from providers that don't support it (#4058) - **UI Fixes** — Standardized page container layout, virtual key model configs UI, and dashboard chart tooltips (#4046, #4052, #4044) ## 🔧 Maintenance - **Dependency Upgrades** — Bumped transitive `golang.org/x` dependencies (crypto, net, sys, text) for Docker Scout CVE remediation and `recharts` to 3.8.1; cascaded version bumps across all modules (#3900, #4003)

Summary
Standardizes the page-level container layout across multiple workspace pages to ensure consistent full-viewport height behavior and uniform padding. Previously, pages used a mix of
max-w-7xl,100vh, and inconsistent padding approaches. This aligns them all to use100dvhwith a1remoffset and theno-padding-parentclass to properly handle the parent container's padding.Changes
max-w-7xlwidth constraints and100vh-based height calculations with a unifiedh-[calc(100dvh-1rem)]approach across audit logs, access profiles, business units, customers, RBAC, teams, and users pagesno-padding-parentclass to suppress inherited padding from parent layout containersp-4padding at the page level so each view controls its own spacingoverflow-y-autofrom the RBAC page container, deferring scroll behavior to the inner viewparseAsStringimport from the customers pageType of change
Affected areas
How to test
Navigate to each of the following pages and verify the layout fills the viewport correctly without overflow or unexpected scrollbars:
/workspace/audit-logs/workspace/governance/access-profiles/workspace/governance/business-units/workspace/governance/customers/workspace/governance/rbac/workspace/governance/teams/workspace/governance/usersScreenshots/Recordings
Before/after screenshots showing consistent full-height layout across pages recommended.
Breaking changes
Related issues
Security considerations
None.
Checklist
docs/contributing/README.mdand followed the guidelinesSummary by CodeRabbit
Style
New Features