Skip to content

feat: Add dashboard listing page#1971

Merged
kodiakhq[bot] merged 4 commits intomainfrom
drew/dashboard-listing-page
Mar 26, 2026
Merged

feat: Add dashboard listing page#1971
kodiakhq[bot] merged 4 commits intomainfrom
drew/dashboard-listing-page

Conversation

@pulpdrew
Copy link
Copy Markdown
Contributor

@pulpdrew pulpdrew commented Mar 23, 2026

Summary

This PR introduces a new dashboards listing page, which lists the available dashboards. Each individual dashboard is no longer listed in the sidebar. The new listing page supports searching by name and filtering by tag. This PR is a continuation of @elizabetdev's #1805, with some changes, additional tests, and refactorings.

This page does client-side sort and filter. There is no server-side pagination, filtering, or sorting. That is left as a future improvement, should it become necessary.

Screenshots or video

Screenshot 2026-03-24 at 7 45 54 AM Screenshot 2026-03-24 at 7 45 43 AM Screenshot 2026-03-24 at 7 45 34 AM

How to test locally or on Vercel

The listing page can be tested in vercel preview.

References

  • Linear Issue: Closes HDX-3565
  • Related PRs:

@vercel
Copy link
Copy Markdown

vercel bot commented Mar 23, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
hyperdx-oss Ready Ready Preview, Comment Mar 26, 2026 2:30am

Request Review

@changeset-bot
Copy link
Copy Markdown

changeset-bot bot commented Mar 23, 2026

🦋 Changeset detected

Latest commit: c6b071a

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 3 packages
Name Type
@hyperdx/app Patch
@hyperdx/api Patch
@hyperdx/otel-collector Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Mar 23, 2026

Knip - Unused Code Analysis

⚪ No changes detected (182 issues on both main and PR)

What is this?

Knip finds unused files, dependencies, and exports in your codebase.
This comment compares the PR branch against main to detect regressions.

Run yarn knip locally to see full details.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Mar 23, 2026

PR Review

  • ⚠️ DashboardCard: <button> nested inside <a>Card component={Link} renders an <a>, and Menu.Target > ActionIcon renders a <button> inside it. This is invalid HTML5 and can break keyboard navigation/screen readers. Consider using a CSS overlay (position: absolute) for the card link and keeping the ActionIcon outside the anchor, similar to how DashboardListRow separates the row click from the menu.

  • ⚠️ URL ?tag= param not reflected in Select UI — If a user navigates to /dashboards/list?tag=sometag (e.g., via shared link) and that tag no longer exists, filteredDashboards silently returns empty but the Select shows no active filter (since the value isn't in allTags). The empty state says "No matching dashboards yet" with no visible indication of the active tag filter. Consider showing the tagFilter value even if it's not in allTags, or clearing a stale tag from the URL.

  • ⚠️ Permanent transitional sidebar message — The "Saved dashboards have moved! Try the Dashboards page." text in AppNav.tsx is permanent code with no removal mechanism. If this is meant to be temporary, add a comment or ticket reference; if it's permanent, it'll read oddly once users are accustomed to the new location.

  • ℹ️ DashboardListRow: imperative Router.push vs. Link — Table rows can't wrap anchor tags for full-row clickability, so the middle-click/cmd+click handling with window.open is a reasonable workaround. No fix required, just noting the intentional pattern divergence from DashboardCard.

@pulpdrew pulpdrew changed the title Drew/dashboard listing page feat: Add dashboard listing page Mar 23, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Mar 23, 2026

E2E Test Results

All tests passed • 103 passed • 3 skipped • 1032s

Status Count
✅ Passed 103
❌ Failed 0
⚠️ Flaky 1
⏭️ Skipped 3

Tests ran across 4 shards in parallel.

View full report →

@pulpdrew pulpdrew force-pushed the drew/dashboard-listing-page branch from e39e4b7 to 93059ca Compare March 23, 2026 21:07
@pulpdrew pulpdrew requested a review from elizabetdev March 23, 2026 21:24
@pulpdrew pulpdrew requested review from a team and removed request for a team March 23, 2026 21:25
@pulpdrew pulpdrew force-pushed the drew/dashboard-listing-page branch from fc203a3 to b170c22 Compare March 23, 2026 21:41
@pulpdrew pulpdrew marked this pull request as draft March 23, 2026 21:53
@pulpdrew pulpdrew removed request for a team and elizabetdev March 23, 2026 21:59
@pulpdrew pulpdrew force-pushed the drew/dashboard-listing-page branch from b170c22 to 5422d25 Compare March 24, 2026 11:44
@pulpdrew pulpdrew force-pushed the drew/dashboard-listing-page branch from 5422d25 to 5a41a1b Compare March 24, 2026 11:50
@pulpdrew pulpdrew marked this pull request as ready for review March 24, 2026 11:51
@pulpdrew pulpdrew force-pushed the drew/dashboard-listing-page branch from 5a41a1b to c8fe7a7 Compare March 24, 2026 12:18
@pulpdrew pulpdrew force-pushed the drew/dashboard-listing-page branch from c8fe7a7 to 35b517e Compare March 24, 2026 12:31
@pulpdrew pulpdrew requested review from a team and teeohhem and removed request for a team March 24, 2026 12:39
Comment thread packages/app/src/components/AppNav/AppNav.tsx Outdated
variant="secondary"
data-testid="temp-dashboard-button"
>
Temporary
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.

Hmm this feels a little odd.

Image

Part of me feels like people will use the "New Dashboard" button without making the decision up front whether it needs to be persisted or not. Maybe the "New Dashboard" button could spawn a dropdown with a few options:
New Dashboard ▾
├── Saved Dashboard Persisted to your team and visible to all members
└── Temporary Dashboard → Lives in your browser only, not saved to your team

Thoughts?

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.

@teeohhem @pulpdrew, should we consider having all dashboards saved as “draft” by default, and let users publish them when they’re ready?

This is a common pattern across many products that involve saved states and collaboration. It removes the need for users to decide upfront whether something is temporary or meant for the team.

In this approach, everything is automatically saved as a draft. When the user is ready, they can explicitly publish it to make it available to others.

That said, I understand this might be tricky to implement at this stage.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

@teeohhem Updated, with slightly different wording to avoid having to change the wording in EE where RBAC will mean dashboards are not always visible to all team members.

@elizabetdev I think that's a good idea! Do you picture a "draft" dashboard being persisted but not shared with the team prior to publishing, or not persisted at all prior to publishing? The latter would be pretty straightforward to implement, the former is more similar to Shared/Private notebooks. I think though that either way, we should handle that as a separate issue/PR, if we're OK with that.

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.

I picture it as:

a "draft" dashboard being persisted but not shared with the team prior to publishing

Yes, it seems similar to shared/private notebooks. Handling this in a separate PR seems fine.

Comment thread packages/app/src/ClickhousePage.tsx
Copy link
Copy Markdown
Contributor

@teeohhem teeohhem left a comment

Choose a reason for hiding this comment

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

Just a few small comments. The design and implementation is very clean.

@kodiakhq kodiakhq bot merged commit e21811c into main Mar 26, 2026
14 of 15 checks passed
@kodiakhq kodiakhq bot deleted the drew/dashboard-listing-page branch March 26, 2026 02:30
knudtty pushed a commit that referenced this pull request Apr 16, 2026
## Summary

This PR introduces a new dashboards listing page, which lists the available dashboards. Each individual dashboard is no longer listed in the sidebar. The new listing page supports searching by name and filtering by tag. This PR is a continuation of @elizabetdev's #1805, with some changes, additional tests, and refactorings.

This page does client-side sort and filter. There is no server-side pagination, filtering, or sorting. That is left as a future improvement, should it become necessary.

### Screenshots or video

<img width="2556" height="794" alt="Screenshot 2026-03-24 at 7 45 54 AM" src="https://github.com/user-attachments/assets/e4c5dba0-6cdf-4f2a-a5f3-2e4e00979729" />
<img width="2553" height="842" alt="Screenshot 2026-03-24 at 7 45 43 AM" src="https://github.com/user-attachments/assets/fc0f5270-d6d3-47ff-be03-762abd82a7d1" />
<img width="2544" height="862" alt="Screenshot 2026-03-24 at 7 45 34 AM" src="https://github.com/user-attachments/assets/4b1957c3-0e6e-4910-ac66-830734604759" />

### How to test locally or on Vercel

The listing page can be tested in vercel preview.

### References



- Linear Issue: Closes HDX-3565
- Related PRs:
Copilot AI pushed a commit that referenced this pull request Apr 20, 2026
## Summary

This PR introduces a new dashboards listing page, which lists the available dashboards. Each individual dashboard is no longer listed in the sidebar. The new listing page supports searching by name and filtering by tag. This PR is a continuation of @elizabetdev's #1805, with some changes, additional tests, and refactorings.

This page does client-side sort and filter. There is no server-side pagination, filtering, or sorting. That is left as a future improvement, should it become necessary.

### Screenshots or video

<img width="2556" height="794" alt="Screenshot 2026-03-24 at 7 45 54 AM" src="https://github.com/user-attachments/assets/e4c5dba0-6cdf-4f2a-a5f3-2e4e00979729" />
<img width="2553" height="842" alt="Screenshot 2026-03-24 at 7 45 43 AM" src="https://github.com/user-attachments/assets/fc0f5270-d6d3-47ff-be03-762abd82a7d1" />
<img width="2544" height="862" alt="Screenshot 2026-03-24 at 7 45 34 AM" src="https://github.com/user-attachments/assets/4b1957c3-0e6e-4910-ac66-830734604759" />

### How to test locally or on Vercel

The listing page can be tested in vercel preview.

### References



- Linear Issue: Closes HDX-3565
- Related PRs:
Co-authored-by: peter-leonov-ch <209667683+peter-leonov-ch@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants