Skip to content

feat: convert NuVs export scope selector to a tabs widget#1085

Merged
igboyes merged 2 commits into
mainfrom
igboyes/vir-2543-convert-nuvs-export-scope-selector-to-a-tabs-widget
Jun 29, 2026
Merged

feat: convert NuVs export scope selector to a tabs widget#1085
igboyes merged 2 commits into
mainfrom
igboyes/vir-2543-convert-nuvs-export-scope-selector-to-a-tabs-widget

Conversation

@igboyes

@igboyes igboyes commented Jun 29, 2026

Copy link
Copy Markdown
Member

Summary

  • Convert the Contigs/ORFs scope selector in the NuVs export dialog from a toggle group to an accessible tabs widget (WAI-ARIA tabs pattern), with each option's preview shown in its tab panel.
  • Add a Radix-backed Tabs primitive to src/base (Tabs/TabsList/TabsTrigger/TabsContent) with segmented and vertical variants, and adopt it in NuvsExport, CreateAnalysis, QuickAnalyze, and Groups — removing the previously duplicated inline Radix styling. The existing route-navigation Tabs/TabsLink are renamed to NavTabs/NavTab to free the Tabs name.
  • Correct the contig export filename suffix (was configs) and add tests covering tab switching and both export download paths.

The Contigs/ORFs scope selector in the NuVs export dialog is now an
accessible tabs widget (WAI-ARIA tabs pattern) instead of a toggle
group, with each option's preview shown in its tab panel.

Add a Radix-backed Tabs primitive to src/base (Tabs/TabsList/
TabsTrigger/TabsContent) with segmented and vertical variants, and
adopt it in NuvsExport, CreateAnalysis, QuickAnalyze, and Groups,
removing the duplicated inline Radix styling. The existing
route-navigation Tabs/TabsLink components are renamed to NavTabs/NavTab
to free the Tabs name.

Also correct the contig export filename suffix (was "configs").
@linear-code

linear-code Bot commented Jun 29, 2026

Copy link
Copy Markdown

VIR-2543

@coderabbitai

coderabbitai Bot commented Jun 29, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@igboyes, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 40 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 737a36f1-868a-4a3a-9e1e-d9688a2ee664

📥 Commits

Reviewing files that changed from the base of the PR and between 6c9c663 and 3befe90.

📒 Files selected for processing (14)
  • apps/web/src/administration/components/AdministrationTabs.tsx
  • apps/web/src/analyses/components/Create/CreateAnalysis.tsx
  • apps/web/src/analyses/components/Create/QuickAnalyze.tsx
  • apps/web/src/analyses/components/Nuvs/NuvsExport.tsx
  • apps/web/src/analyses/components/Nuvs/__tests__/NuvsExport.test.tsx
  • apps/web/src/base/NavTab.tsx
  • apps/web/src/base/NavTabs.tsx
  • apps/web/src/base/Tabs.tsx
  • apps/web/src/groups/components/Groups.tsx
  • apps/web/src/references/components/CreateReference.tsx
  • apps/web/src/references/components/Detail/ReferenceDetailTabs.tsx
  • apps/web/src/routes/_authenticated/account.tsx
  • apps/web/src/routes/_authenticated/refs/$refId/otus/$otuId/route.tsx
  • apps/web/src/routes/_authenticated/samples/$sampleId.tsx

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@sourcery-ai sourcery-ai 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.

Hey - I've found 1 issue, and left some high level feedback:

  • In AdministrationTabs, the children are passed to NavTabs as {...tabs}, which will spread the array as props instead of rendering the elements; this should be {tabs} to correctly render the tab list.
  • The vertical variant in Tabs hardcodes a grid-cols-4 layout on the root, which may be inflexible for future layouts (e.g., different column ratios or additional panels); consider making the grid configuration customizable via props or class overrides.
Prompt for AI Agents
Please address the comments from this code review:

## Overall Comments
- In `AdministrationTabs`, the children are passed to `NavTabs` as `{...tabs}`, which will spread the array as props instead of rendering the elements; this should be `{tabs}` to correctly render the tab list.
- The `vertical` variant in `Tabs` hardcodes a `grid-cols-4` layout on the root, which may be inflexible for future layouts (e.g., different column ratios or additional panels); consider making the grid configuration customizable via props or class overrides.

## Individual Comments

### Comment 1
<location path="apps/web/src/administration/components/AdministrationTabs.tsx" line_range="25" />
<code_context>
 	}

-	return <Tabs>{...tabs}</Tabs>;
+	return <NavTabs>{...tabs}</NavTabs>;
 }
</code_context>
<issue_to_address>
**issue (bug_risk):** Using `{...tabs}` here spreads the array as props instead of rendering the tab elements as children.

`{...tabs}` spreads each array entry as a separate prop on `NavTabs`, which is incorrect and likely to cause a runtime error. To render the tab elements, you should pass them as children:

```tsx
return <NavTabs>{tabs}</NavTabs>;
```
</issue_to_address>

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

Comment thread apps/web/src/administration/components/AdministrationTabs.tsx Outdated
@igboyes igboyes merged commit 74b7cb3 into main Jun 29, 2026
11 checks passed
@igboyes igboyes deleted the igboyes/vir-2543-convert-nuvs-export-scope-selector-to-a-tabs-widget branch June 29, 2026 23:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant