Skip to content

chore(frontend): sync frontend changes from enterprise - #5792

Merged
jog1t merged 1 commit into
mainfrom
chore/sync-frontend-from-enterprise
Sep 24, 2026
Merged

jog1t merged 1 commit into
mainfrom
chore/sync-frontend-from-enterprise

Conversation

@jog1t

@jog1t jog1t commented Sep 24, 2026

Copy link
Copy Markdown
Contributor
  • Multi-select comboboxes show a checkbox on every option and clip long selections in the trigger instead of overflowing.
  • Datacenters picker copy and placeholder ask for one or more regions, and the trigger shows two regions plus a +N badge.
  • Billing panel shows compute as usage-based on paid plans and shows the compute row for projects running managed services.
  • Declare the @fontsource/ibm-plex-* fonts that the component theme already imports.

@railway-app
railway-app Bot temporarily deployed to rivet-frontend / rivet-pr-5792 September 24, 2026 21:29 Destroyed
@railway-app

railway-app Bot commented Sep 24, 2026 •

Copy link
Copy Markdown

🚅 Deployed to the rivet-pr-5792 environment in rivet-frontend

Service Status Web Updated
kitchen-sink 🕗 Deploying (View Logs) Web Sep 24, 2026 at 9:34 pm UTC
frontend-cloud ✅ Success (View Logs) Web Sep 24, 2026 at 9:33 pm UTC
ladle ✅ Success (View Logs) Web Sep 24, 2026 at 9:31 pm UTC
mcp-hub ✅ Success (View Logs) Web Sep 24, 2026 at 9:30 pm UTC
website ❌ Build Failed (View Logs) Web Sep 24, 2026 at 9:29 pm UTC
frontend-inspector 🕒 Building (View Logs) Web Sep 24, 2026 at 9:29 pm UTC

@claude

claude Bot commented Sep 24, 2026

Copy link
Copy Markdown
Contributor

Review

Mostly a clean sync of small, self-contained frontend fixes (multi-select combobox UX, datacenters copy, billing compute row, missing font deps). Nothing structurally concerning. One item worth a second look before merge:

billedCompute is computed but never used (frontend/src/app/settings-pages/billing-panel.tsx:117)

const billedCompute = computeAllowanceUsd != null ? 0 : computeDollars;

This variable isn't referenced anywhere else in the file (or the repo, confirmed via grep). Previously it fed into CurrentBillCard's total prop:

total={Number(totalOverageCents) / 100 + (showCompute ? billedCompute : 0)}

That line was simplified to total={Number(totalOverageCents) / 100} in this PR, so billedCompute at line 117 is now dead code. ComputeUsageRow independently recomputes the identical expression internally (line 394) for its own "billed" column, so nothing is lost functionally today, but it's worth confirming the intent:

  • If the backend's usage.totalCents now genuinely includes compute cost for all paid plans (as the new comment states), then billedCompute at line 117 should just be deleted as leftover from the refactor.
  • If that assumption is wrong for any plan or edge case, the current bill total would silently under-report compute cost for that plan, since the only remaining consumer of the equivalent expression is the per-row display, not the total. Given this is money shown to customers, it's worth double-checking against the backend behavior rather than treating it as a straightforward drop.

Nits / smaller notes

  • defaultRenderCurrentOptions truncating region labels to plain text (dropping the ActorRegion icon and label rendering in connect-manual-serverless-form.tsx) is a reasonable tradeoff for fixing overflow, per the PR description. Worth a quick visual check in a browser per the frontend visual-change guidance, since it's a layout and overflow fix that's easy to eyeball wrong on narrow triggers.
  • The new useHasActiveManagedServices hook issues one pool-status query per namespace via useQueries, mirroring the existing pattern in actors-grid.tsx, so it's consistent with established conventions even though it's an N+1-per-namespace fetch. Fine for typical namespace counts.
  • Good use of safe: true on the managed-pool query to treat a 404 as no managed services rather than throwing, and gating the namespaces query on features.compute so nothing fires in flavors where compute is disabled.
  • No test coverage added, which is consistent with the rest of this file, but given the billing total math changed, manual verification against a real paid-plan account would give more confidence.

🤖 Generated with Claude Code

@jog1t
jog1t merged commit 7264fd8 into main Sep 24, 2026
9 of 16 checks passed
@jog1t
jog1t deleted the chore/sync-frontend-from-enterprise branch September 24, 2026 21:34

@the-company-company the-company-company Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🟠 2 medium-severity findings

Reviewed commit fbaa9cc.

*/
export function useHasActiveManagedServices(): boolean {
const dataProvider = useCloudProjectDataProvider();
const { data: namespaces } = useInfiniteQuery({

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🟠 Medium · Managed-service detection stops after the first namespace page

currentProjectNamespacesQueryOptions() fetches namespaces 100 at a time, but this hook never calls fetchNextPage, so the pool queries cover only the first page. A project whose services pool is in a later namespace returns false; when compute metrics are empty/404, the billing panel then hides the compute row despite managed services being active. Derive this project-wide predicate from a backend/project-level field, or exhaust namespace pagination before checking pools.

@@ -209,11 +209,12 @@ export const Combobox = <Option extends ComboboxOption>({
onValueChange={setSearch}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🟠 Medium · Multi-select semantics report keyboard focus as selection

cmdk assigns each CommandItem's aria-selected from its keyboard-active item, not from this combobox's isCurrent value, while the new checkbox is aria-hidden. Adding aria-multiselectable therefore tells assistive technology this is a multi-select listbox but reports whichever option has focus as the sole selected option; moving through the list changes the announced selection without toggling anything. Remove this listbox annotation or adapt the option primitive so every item exposes its actual selected state independently of cmdk's active-item state.

This branch was successfully deployed

No deployments
rivet-frontend / rivet-pr-5792 — fbaa9cc0 Deployed Sep 24, 2026 by railway-app[bot]
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