Skip to content

Support opening list items in a new browser tab #266

@Dexterity104

Description

@Dexterity104

Is your feature request related to a problem?

When browsing miners, repositories, PRs, or bounties, there's no way to pop a detail page into a new tab. Middle-click, Ctrl/Cmd-click, and the right-click context menu all do nothing on list rows and cards, because they're wired up with onClick + useNavigate() instead of real anchor elements. Comparing two miners or two PRs side by side means repeatedly navigating back and losing scroll and filter state.

Describe the solution

Make every clickable list item behave like a normal web link, a real <a href> under the hood, so the browser can handle new-tab behaviors natively:

  • Middle-click opens the detail page in a new tab
  • Ctrl-click (Cmd-click on macOS) opens in a new tab
  • Right-click shows "Open link in new tab" in the context menu
  • Plain left-click still navigates in the current tab as before

This applies to rows and cards across:

  • Dashboard Live Activity and Repositories table
  • Leaderboard (top miners, top repositories), Discoveries sidebar
  • Repositories page (trending, most collateral, recent PRs, main table)
  • Repository detail (PRs, bounties, GitHub issues, contributors)
  • Miner detail (PRs, repositories, score breakdown)
  • PR detail header (repo avatar, repo name, author)
  • Bounties tabs (available, pending, history) and issue submissions
  • Search tabs (miners, repositories, PRs, issues)

Describe alternatives considered

Adding a custom onAuxClick plus modifier key handler on every row was considered, but it only covers middle-click and Ctrl/Cmd-click. The right-click context menu still would not show "Open in new tab" because the browser only surfaces that entry for real anchor elements. Using real <Link> components covers all three behaviors with no custom event handling.

Additional context

The shift also tightens internal navigation. URL construction moves into the leaf components (via getMinerHref, backLabel, linkState props), so parent pages no longer need bespoke handleSelectX callbacks just to call navigate.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions