Skip to content

feat: dashboard favourites#9631

Merged
AdityaHegde merged 57 commits into
mainfrom
feat/dashboard-faviourites
Jul 23, 2026
Merged

feat: dashboard favourites#9631
AdityaHegde merged 57 commits into
mainfrom
feat/dashboard-faviourites

Conversation

@AdityaHegde

@AdityaHegde AdityaHegde commented Jun 30, 2026

Copy link
Copy Markdown
Collaborator

Adds basic faviourites feature so that users can pin dashboards. Also adds a recently used dashboard system, defaults to sorting of list by this.

https://www.loom.com/share/800b0c72fc46464eb9b9b95e82771514

Also adds a skill i18n-migrate to easilty migrate hardcoded text to paraglide i18n framework.

Checklist:

  • Covered by tests
  • Ran it and it works as intended
  • Reviewed the diff before requesting a review
  • Checked for unhandled edge cases
  • Linked the issues it closes
  • Checked if the docs need to be updated. If so, create a separate Linear DOCS issue
  • Intend to cherry-pick into the release branch
  • I'm proud of this work!

royendo and others added 30 commits April 22, 2026 14:32
…anization

- Add `tags` field to ExploreSpec and CanvasSpec protos and parsers
- Render tag chips on each dashboard row in the project dashboards list
- Add a tags filter dropdown to the left of search (OR semantics) on the project home page

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Tag filter is now stored in the `tags` query param (comma-separated), so the selection is shareable and survives navigating into a dashboard and back.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…zation

When `tagAsFolders` is enabled in rill.yaml:
- Dashboard list groups into collapsible tag folders; dashboards with
  multiple tags appear under each folder; untagged dashboards get an
  "Untagged" section
- Navigating into a dashboard from a folder carries ?tags=<tag> so back-
  navigation returns to the same folder context
- Breadcrumb gains a tag segment (> Tag > Dashboard) derived from the
  active ?tags= URL param; clicking it returns to the filtered list

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…order

- Tags dropdown is hidden when tagAsFolders is on (folders replace it)
- All tag folders share a single parent border+rounded container with
  divide-y separators instead of each folder having its own border

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The folder header already shows the tag, so the chips on each row are redundant.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…s is on

- Add depth:2 to visualization PathOptions so the tag segment in the breadcrumb
  does not leak into the dashboard URL path
- Hide tag pills in the composite cell whenever tagAsFolders is enabled, covering
  both the flat/home preview list and the folder grouped view

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…te syncs

The explore URL state system was replacing redirectUrl.search entirely when syncing
state, which stripped any non-explore params like ?tags= used for folder breadcrumb
context. Now unknown params are carried over when the URL is replaced.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Derive active tag from URL param, else the dashboard's primary tag, else "not-tagged" so the folder breadcrumb is always present on dashboard pages
- Render tag-level dropdown with per-tag submenus of dashboards ("^" lists tags, ">" expands to its dashboards)
- Sort dashboard-level dropdown by tag with group headers
- Use "not-tagged" as the untagged folder/URL key and handle it as a virtual tag in the list filter

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
When a tag folder is active, the dashboard-level dropdown now lists only dashboards in that tag (instead of all dashboards grouped by every tag).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…-dashboard-organization

# Conflicts:
#	web-admin/src/features/projects/status/resource-table/ProjectResources.svelte
#	web-admin/src/features/projects/status/tables/ProjectTables.svelte
Svelte couldn't resolve the dependency through the conditional spread,
so `filterGroups` ran with `availableTags` undefined and threw on
`.length`, crashing the component during hydration (SSR is disabled on
this page, so the crash produced a blank render).
The merge of main left two `onFilterChange` definitions in the file —
the existing one (line 147, handles `type` and `tags`) and a partial
new one main introduced (line 191, only `type`). Drop the partial
duplicate; the existing handler already covers both keys.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Display the untagged virtual group as "Not Tagged" in the dashboard
  folder header and the breadcrumb dropdown. Add a sibling
  `UNTAGGED_LABEL` constant alongside `UNTAGGED_KEY`; the kebab-case
  key still flows through URLs / state / map keys, while the
  human-readable label only surfaces at the two display sites
  (`DashboardsTagFolder`, `ProjectHeader`).
- Add the `tags?: string[]` field to `V1ResourceMeta` in the
  Orval-generated `index.schemas.ts`. The proto and swagger already
  declare the field, but `index.schemas.ts` is not part of
  `make proto.generate` so it had not picked up this branch's new
  field, breaking svelte-check on `DashboardsTable.svelte`.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Base automatically changed from worktree-feat-project-dashboard-organization to main July 7, 2026 15:01
@AdityaHegde
AdityaHegde force-pushed the feat/dashboard-faviourites branch from 7b8c92f to 10fe792 Compare July 8, 2026 11:50
@AdityaHegde
AdityaHegde marked this pull request as ready for review July 22, 2026 04:42
@AdityaHegde
AdityaHegde force-pushed the feat/dashboard-faviourites branch from dc9abcb to 3b3a842 Compare July 22, 2026 05:08
@AdityaHegde
AdityaHegde force-pushed the feat/dashboard-faviourites branch from 3b3a842 to 57ead88 Compare July 22, 2026 05:41
@nishantmonu51

Copy link
Copy Markdown
Collaborator

@codex: review

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 57ead88d29

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread web-admin/src/features/dashboards/listing/DashboardsTable.svelte
<Tag color="gray">{tag}</Tag>
{/each}
<div class="grow"></div>
{#if dashboardFavourites && (hovered || isFavourite)}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Keep dashboard favourites keyboard-reachable

For dashboards that are not already favourited, the star is only rendered while hovered is true. Keyboard and touch users never create that hover state before the control exists, so they can navigate/open dashboards but cannot add a favourite from this list. Keep the control in the DOM, or reveal it on focus/touch, while hiding it visually as needed.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

This is a problem across the app (eg: bookmarks), will do a follow up to fix.

</Tooltip.Content>
</Tooltip.Root>

{#if hovered || isFavourite}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Keep tag favourites keyboard-reachable

For tags that are not already favourited, the favourite button is created only on mouse hover. A keyboard or touch user can focus or tap the tag row, but cannot reach a non-rendered star, so tag favouriting is mouse-only. Keep the button focus-reachable, or reveal it on focus/touch, rather than gating it solely on hover.

Useful? React with 👍 / 👎.

@nishantmonu51 nishantmonu51 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

👍 , LGTM.

@AdityaHegde
AdityaHegde merged commit f4ee385 into main Jul 23, 2026
13 checks passed
@AdityaHegde
AdityaHegde deleted the feat/dashboard-faviourites branch July 23, 2026 10:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Area:Dashboard Size:M Medium change: 100-499 lines Type:Feature New feature request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants