feat: dashboard favourites#9631
Conversation
…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).
…-dashboard-organization
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>
7b8c92f to
10fe792
Compare
dc9abcb to
3b3a842
Compare
3b3a842 to
57ead88
Compare
|
@codex: review |
There was a problem hiding this comment.
💡 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".
| <Tag color="gray">{tag}</Tag> | ||
| {/each} | ||
| <div class="grow"></div> | ||
| {#if dashboardFavourites && (hovered || isFavourite)} |
There was a problem hiding this comment.
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 👍 / 👎.
There was a problem hiding this comment.
This is a problem across the app (eg: bookmarks), will do a follow up to fix.
| </Tooltip.Content> | ||
| </Tooltip.Root> | ||
|
|
||
| {#if hovered || isFavourite} |
There was a problem hiding this comment.
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 👍 / 👎.
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-migrateto easilty migrate hardcoded text to paraglide i18n framework.Checklist: