feat: add tags to all resources; feature flag to view tags as folders - #9283
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>
begelundmuller
left a comment
There was a problem hiding this comment.
Do you think we will want to add tags to other resources in future? I'm wondering if we should make it a generic resource property (i.e. parse it generically for all YAML resources and store it in the ResourceMeta proto type)
There was a problem hiding this comment.
Handling is missing in the code for unified metrics and explores in parse_metrics_view.go
i would love that! this was more a poc than anything but if it looks good i can move forward with implementation of tags on all resources ;) |
…-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>
|
@codex: please review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 5932a3f0d1
ℹ️ 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".
|
@codex: review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 42af26873d
ℹ️ 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".
…#9283) * feat: add tags to explore and canvas dashboards for project-level organization - 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> * feat: persist dashboards tag filter in URL 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> * feat: add tagAsFolders feature flag for folder-style dashboard organization 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> * fix: hide tag filter in folder mode; unify folders under one parent border - 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> * fix: hide tag pills on dashboard rows in folder mode 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> * fix: restore dashboard breadcrumb and hide tag pills when tagAsFolders 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> * fix: preserve non-explore URL params (e.g. ?tags=) across explore state 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> * feat: always show tag folder breadcrumb on dashboard pages - 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> * fix: scope dashboard breadcrumb dropdown to the active tag folder 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> * Update DashboardStateSync.ts * tags to top level; * feat: tag filter for Resources and Tables pages * Update resource-filter-utils.spec.ts * fix: declare `availableTags` before `filterGroups` reads it 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). * fix * fix: drop duplicate `onFilterChange` declaration in `ProjectTables` 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> * fix: render "Not Tagged" label and add `tags` to `V1ResourceMeta` - 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> * nit: comment update * self review * Add tests for tag based grouping logic * Move from feature flags to presence of tags * Fix untagged dashboards * Add tag dropdown in home page * Improve tag to url persistance * Add sidebar for dashboards table * Revert tag based folders in breadcrumbs * Add tag selection and search to dashboard dropdown * Generate docs * Cleanup store management * Fix types file * Self review * UXQA * Throttle search text <=> url setting * Match resources for name or displayName or desc --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> Co-authored-by: Benjamin Egelund-Müller <b@egelund-muller.com> Co-authored-by: Aditya Hegde <adityahegderocks@gmail.com> Co-authored-by: Nishant Bangarwa <nishant.monu51@gmail.com> (cherry picked from commit ae09408)
https://rilldata.slack.com/archives/C01A9DYP013/p1776880953322839
https://www.loom.com/share/659cd4592c4b466b8c1f2be3cbbf34c6
tagsfield to all meta, for all resourcesAs designed here: https://www.figma.com/design/JtG3sbaopjO0xQlyeCjmho/RILL-WIP?node-id=6861-325995&m=dev
Needs:
#9173 (done)
Checklist: