feat: add stacks dashboard page#2239
Merged
Merged
Conversation
- Add getStacksQuery function for listing stacks with filtering - Create /stacks route with basic stacks list page - Support filtering by status, tags, date ranges, and custom Lucene expressions - Display stack information: title, tags, event count, first/last occurrence, status Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Remove complex TanStack table setup that was causing build errors - Use semantic HTML table with Tailwind styling for simplicity - Implement row selection with checkboxes and bulk actions UI - Support filter input, limit selector, and pagination controls - Display stack properties: title, tags, event count, last occurrence, status - Add loading and empty state handling Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Create StacksBulkActionsButton component for simplified bulk operations - Support mark open/fixed/snoozed/ignored/discarded and delete actions - Integrate with RemoveStackDialog and status change dialogs - Wire bulk actions into stacks page with selection tracking - All dialogs and confirmations included Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Add stacks navigation item to Dashboards group - Use layers icon for visual consistency - Place between issues and event stream - Accessible from sidebar navigation Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Add filter query examples (status:discarded, tags:production, type:error) - Add bulk operation examples (change status, mark fixed, mark snoozed, delete) - Document filtering syntax for stacks dashboard feature - Help users understand query capabilities Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Rewrote stacks page using useFetchClient, createTable, getSharedTableOptions, and DataTable components matching the issues/sessions page patterns - Created proper table column definitions with NumberFormatter, TimeAgo, and badge components for status/tags - Created StacksDataTable component mirroring EventsDataTable - Uses existing TableStacksBulkActionsDropdownMenu (deleted the duplicate stacks-bulk-actions-button.svelte) - Moved navigation from Dashboards to Reports group - Removed broken getStacksQuery and list query key from api.svelte.ts - Uses FacetedFilter system for filtering (status, project, date, etc.) - WebSocket StackChanged event handling for real-time updates - Offset-based pagination with page size selector - Fixed organization abbreviation (never use org) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Clear persisted organization id when no organizations remain - Re-select first valid organization when persisted id is stale - Hide manage/billing links when current organization is invalid - Prevent organization settings layout from redirecting to undefined ids Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Keep impersonated organization selections from being overwritten by org sync - Refresh stacks table on non-removed StackChanged events with throttling - Correct stacks HTTP samples to match ids path-segment routes Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Add getStacksQuery function for listing stacks with filtering - Create /stacks route with basic stacks list page - Support filtering by status, tags, date ranges, and custom Lucene expressions - Display stack information: title, tags, event count, first/last occurrence, status Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Remove complex TanStack table setup that was causing build errors - Use semantic HTML table with Tailwind styling for simplicity - Implement row selection with checkboxes and bulk actions UI - Support filter input, limit selector, and pagination controls - Display stack properties: title, tags, event count, last occurrence, status - Add loading and empty state handling Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Create StacksBulkActionsButton component for simplified bulk operations - Support mark open/fixed/snoozed/ignored/discarded and delete actions - Integrate with RemoveStackDialog and status change dialogs - Wire bulk actions into stacks page with selection tracking - All dialogs and confirmations included Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Add stacks navigation item to Dashboards group - Use layers icon for visual consistency - Place between issues and event stream - Accessible from sidebar navigation Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Add filter query examples (status:discarded, tags:production, type:error) - Add bulk operation examples (change status, mark fixed, mark snoozed, delete) - Document filtering syntax for stacks dashboard feature - Help users understand query capabilities Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Rewrote stacks page using useFetchClient, createTable, getSharedTableOptions, and DataTable components matching the issues/sessions page patterns - Created proper table column definitions with NumberFormatter, TimeAgo, and badge components for status/tags - Created StacksDataTable component mirroring EventsDataTable - Uses existing TableStacksBulkActionsDropdownMenu (deleted the duplicate stacks-bulk-actions-button.svelte) - Moved navigation from Dashboards to Reports group - Removed broken getStacksQuery and list query key from api.svelte.ts - Uses FacetedFilter system for filtering (status, project, date, etc.) - WebSocket StackChanged event handling for real-time updates - Offset-based pagination with page size selector - Fixed organization abbreviation (never use org) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Clear persisted organization id when no organizations remain - Re-select first valid organization when persisted id is stale - Hide manage/billing links when current organization is invalid - Prevent organization settings layout from redirecting to undefined ids Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Keep impersonated organization selections from being overwritten by org sync - Refresh stacks table on non-removed StackChanged events with throttling - Correct stacks HTTP samples to match ids path-segment routes Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…cks-dashboard # Conflicts: # src/Exceptionless.Web/ClientApp/src/lib/features/events/components/events-overview.svelte # src/Exceptionless.Web/ClientApp/src/routes/(app)/organization/[organizationId]/+layout.svelte # src/Exceptionless.Web/ClientApp/src/routes/(app)/project/[projectId]/+layout.svelte
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…rd' into niemyjski/feature-stacks-dashboard # Conflicts: # src/Exceptionless.Web/ClientApp/src/lib/features/stacks/components/table/options.svelte.ts # src/Exceptionless.Web/ClientApp/src/lib/features/stacks/components/table/stack-status-cell.svelte # src/Exceptionless.Web/ClientApp/src/lib/features/stacks/components/table/stack-tags-cell.svelte # src/Exceptionless.Web/ClientApp/src/routes/(app)/stacks/+page.svelte
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
niemyjski
commented
May 18, 2026
Contributor
There was a problem hiding this comment.
Pull request overview
Adds a new Svelte-based Stacks dashboard (and project-scoped issue management views) to provide a unified way to browse/manage stacks across statuses (including discarded), while also reworking saved-views availability and several navigation/layout behaviors.
Changes:
- Introduces new
/(app)/stackspage (plus project-scoped issue management pages) using the shared faceted-filter + TanStack table patterns and StackChanged real-time refresh. - Expands saved views to support the new
stacksview type (including server-side validation updates) and updates saved view UI error handling. - Updates sidebar/navigation + table pagination/body behaviors, and adds stack-event paging support in event detail views.
Reviewed changes
Copilot reviewed 46 out of 46 changed files in this pull request and generated 8 comments.
Show a summary per file
| File | Description |
|---|---|
| tests/http/stacks.http | Adds more stack API examples (filters + bulk ops). |
| tests/Exceptionless.Tests/Controllers/SavedViewControllerTests.cs | Adds tests for stacks saved views + adjusts feature-disabled expectations. |
| tests/Exceptionless.Tests/Controllers/Data/openapi.json | Updates OpenAPI description for viewType values. |
| src/Exceptionless.Web/Startup.cs | Serves optional /next static build and normalizes fallback paths. |
| src/Exceptionless.Web/Models/SavedView/NewSavedView.cs | Allows stacks view type + validates stacks column IDs. |
| src/Exceptionless.Web/Controllers/SavedViewController.cs | Removes saved-views feature gating on write operations. |
| src/Exceptionless.Web/ClientApp/src/routes/(app)/stream/+page.svelte | Always renders SavedViewPicker in stream header. |
| src/Exceptionless.Web/ClientApp/src/routes/(app)/stacks/+page.svelte | New organization-scoped stacks dashboard page. |
| src/Exceptionless.Web/ClientApp/src/routes/(app)/routes.svelte.ts | Adjusts nav grouping (Sessions). |
| src/Exceptionless.Web/ClientApp/src/routes/(app)/project/[projectId]/routes.svelte.ts | Adds “Issue Management” project settings nav item. |
| src/Exceptionless.Web/ClientApp/src/routes/(app)/project/[projectId]/manage/+page.svelte | Updates “Go To Issues” to project issue management route. |
| src/Exceptionless.Web/ClientApp/src/routes/(app)/project/[projectId]/issues/+page.svelte | New project-scoped issue management list/table. |
| src/Exceptionless.Web/ClientApp/src/routes/(app)/project/[projectId]/issues/[stackId]/+page.svelte | New project-scoped issue detail page (event overview/stack card). |
| src/Exceptionless.Web/ClientApp/src/routes/(app)/organization/routes.svelte.ts | Updates Organizations nav icon. |
| src/Exceptionless.Web/ClientApp/src/routes/(app)/organization/[organizationId]/routes.svelte.ts | Reworks org routes + show conditions (and duplicates groups). |
| src/Exceptionless.Web/ClientApp/src/routes/(app)/organization/[organizationId]/features/+page.svelte | Uses centralized org feature definitions list; supports “none available”. |
| src/Exceptionless.Web/ClientApp/src/routes/(app)/organization/[organizationId]/+layout.svelte | Filters org settings routes based on show() and guards redirects. |
| src/Exceptionless.Web/ClientApp/src/routes/(app)/issues/+page.svelte | Updates issue list behavior + adds issue detail sheet linking. |
| src/Exceptionless.Web/ClientApp/src/routes/(app)/issues/[stackId]/+page.svelte | New issue detail route for org-wide issues list. |
| src/Exceptionless.Web/ClientApp/src/routes/(app)/event/[eventId]/+page.svelte | Enables stack pager and supports event-to-event navigation. |
| src/Exceptionless.Web/ClientApp/src/routes/(app)/account/routes.svelte.ts | Renames “Account” nav item to “General”. |
| src/Exceptionless.Web/ClientApp/src/routes/(app)/account/+layout.svelte | Simplifies account layout (removes SplitLayout wrapper). |
| src/Exceptionless.Web/ClientApp/src/routes/(app)/+page.svelte | Always renders SavedViewPicker in events dashboard header. |
| src/Exceptionless.Web/ClientApp/src/routes/(app)/+layout.svelte | Org selection reconciliation + saved-view nav children additions + stacks href mapping. |
| src/Exceptionless.Web/ClientApp/src/routes/(app)/(components)/layouts/sidebar.svelte | Major sidebar UX changes (collapsed flyouts, settings/project settings grouping). |
| src/Exceptionless.Web/ClientApp/src/routes/(app)/(components)/layouts/sidebar-user.svelte | Hides org-only links when current org is invalid. |
| src/Exceptionless.Web/ClientApp/src/lib/features/stacks/stack-filter-support.ts | New helper to enforce stacks-view supported filters. |
| src/Exceptionless.Web/ClientApp/src/lib/features/stacks/components/table/stacks-data-table.svelte | New stacks table wrapper component. |
| src/Exceptionless.Web/ClientApp/src/lib/features/stacks/components/table/stack-type-badge.svelte | New stack type badge rendering. |
| src/Exceptionless.Web/ClientApp/src/lib/features/stacks/components/table/stack-tags-cell.svelte | New tags cell (filter/copy interactions). |
| src/Exceptionless.Web/ClientApp/src/lib/features/stacks/components/table/stack-status-cell.svelte | New status badge rendering. |
| src/Exceptionless.Web/ClientApp/src/lib/features/stacks/components/table/stack-severity-cell.svelte | New “Critical” boolean/severity cell rendering. |
| src/Exceptionless.Web/ClientApp/src/lib/features/stacks/components/table/options.svelte.ts | New stacks TanStack column definitions. |
| src/Exceptionless.Web/ClientApp/src/lib/features/stacks/components/filters/stack-faceted-filter-builder.svelte | New stacks-oriented faceted filter builder. |
| src/Exceptionless.Web/ClientApp/src/lib/features/shared/table.svelte.ts | Adjusts pageCount calculation when total is missing. |
| src/Exceptionless.Web/ClientApp/src/lib/features/shared/components/data-table/data-table-pagination.svelte | Makes page derived from table pagination state. |
| src/Exceptionless.Web/ClientApp/src/lib/features/shared/components/data-table/data-table-body.svelte | Updates click handling + adds keyboard row activation. |
| src/Exceptionless.Web/ClientApp/src/lib/features/saved-views/use-saved-views.svelte.ts | Removes org feature-flag gating; exposes isLoading. |
| src/Exceptionless.Web/ClientApp/src/lib/features/saved-views/components/saved-view-picker.svelte | Adds 422 field/form error handling to save dialog. |
| src/Exceptionless.Web/ClientApp/src/lib/features/saved-views/components/save-view-dialog.svelte | Displays form/name error messages. |
| src/Exceptionless.Web/ClientApp/src/lib/features/organizations/organization-features.ts | Adds centralized org feature definitions list (currently empty). |
| src/Exceptionless.Web/ClientApp/src/lib/features/events/components/filters/models.svelte.ts | Changes TagFilter multi-value join operator. |
| src/Exceptionless.Web/ClientApp/src/lib/features/events/components/events-overview.svelte | Adds stack pager + stack events query for prev/next. |
| src/Exceptionless.Web/ClientApp/src/lib/features/events/components/event-detail-sheet.svelte | Allows overriding “open in new window” href. |
| src/Exceptionless.Web/ClientApp/src/lib/features/events/api.svelte.ts | Fixes stack-events query key to include params. |
| src/Exceptionless.Core/Models/SavedView.cs | Allows stacks ViewType via regex + doc update. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Reverted: Startup.cs (next build path), SavedView model/tests, organization-features extraction, events-overview pager, saved-view 422 error handling hack, issues page filter changes, project manage page link change.
The stacks dashboard was not ready for inclusion. Removed the route and its sidebar link from the layout.
- Renamed stack-severity-cell to stack-critical-cell (matches column name) - Added tooltip with Kbd for platform-agnostic shortcut hints on tags - Made overflow tags clickable in tooltip dropdown - Added getProjectStacksQuery tanstack wrapper in stacks API - Moved defaultColumnVisibility and getTableOptions to options file
Replaced manual useFetchClient calls with getProjectStacksQuery and getTableOptions from the options file. Removed unused showStackPager and onEventChange props from stack/event detail pages.
- Removed extra blank lines in events and stream pages - Simplified account layout margin from mx-6 my-6 to m-6 - Extracted detailsHref into a \ in event-detail-sheet
Contributor
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 46 out of 46 changed files in this pull request and generated 7 comments.
Comments suppressed due to low confidence (9)
src/Exceptionless.Web/ClientApp/src/routes/(app)/routes.svelte.ts:1
- PR description says the nav item was moved from "Dashboards" to "Reports" (alongside Sessions), but this change moves Sessions into "Dashboards". Either the description or this grouping appears incorrect—please align them so navigation matches the intended IA.
tests/Exceptionless.Tests/Controllers/SavedViewControllerTests.cs:1 - These test names still reference the saved-views feature being disabled, but they now assert success responses. Renaming them (and updating the related inline comments) would prevent confusion about the intended behavior now that feature gating has been removed.
tests/Exceptionless.Tests/Controllers/SavedViewControllerTests.cs:1 - These test names still reference the saved-views feature being disabled, but they now assert success responses. Renaming them (and updating the related inline comments) would prevent confusion about the intended behavior now that feature gating has been removed.
tests/Exceptionless.Tests/Controllers/SavedViewControllerTests.cs:1 - These test names still reference the saved-views feature being disabled, but they now assert success responses. Renaming them (and updating the related inline comments) would prevent confusion about the intended behavior now that feature gating has been removed.
src/Exceptionless.Web/Startup.cs:1 - The
/nextstatic-file registration is duplicated in two places, which makes future changes easy to miss and can lead to drift (e.g., differing options/headers). Consider extracting this into a small helper method (or shared configuration) invoked from both locations.
src/Exceptionless.Web/Startup.cs:1 - The
/nextstatic-file registration is duplicated in two places, which makes future changes easy to miss and can lead to drift (e.g., differing options/headers). Consider extracting this into a small helper method (or shared configuration) invoked from both locations.
tests/http/stacks.http:1 - These examples use the same
{{stackId}}placeholder twice, which doesn’t actually demonstrate a multi-id call. Consider using distinct placeholders (e.g.,{{stackId1}},{{stackId2}}) and, forsnoozeUntilUtc, use an unambiguous ISO-8601 UTC value to reduce confusion when copy/pasting.
tests/http/stacks.http:1 - These examples use the same
{{stackId}}placeholder twice, which doesn’t actually demonstrate a multi-id call. Consider using distinct placeholders (e.g.,{{stackId1}},{{stackId2}}) and, forsnoozeUntilUtc, use an unambiguous ISO-8601 UTC value to reduce confusion when copy/pasting.
tests/http/stacks.http:1 - These examples use the same
{{stackId}}placeholder twice, which doesn’t actually demonstrate a multi-id call. Consider using distinct placeholders (e.g.,{{stackId1}},{{stackId2}}) and, forsnoozeUntilUtc, use an unambiguous ISO-8601 UTC value to reduce confusion when copy/pasting.
niemyjski
commented
May 18, 2026
The stacks page was removed per review. These model changes adding 'stacks' as a valid ViewType are no longer needed.
- Don't intercept clicks on links/buttons in table cells (was breaking link navigation when rowHref not set) - Added keyboard accessibility (Enter/Space) to table cells - Fixed stacks.http filter: tags: → tag: (correct filter term)
- Settings group now has all the same entries as Organization Settings (General, Usage, Billing, Features) for navigation consistency - Removed stale 'stacks' from SavedViewController viewType doc comment to match the reverted model validation
Multi-tag filter should use OR (show events with any selected tag) not AND (require all tags). AND was an accidental breaking change.
- Move tabindex from individual cells to row level (reduces tab stops) - Remove per-cell keydown handler, use row-level Enter/Space instead - Fix snoozeUntilUtc to use ISO-8601 format (2030-12-31T00:00:00Z)
- Fix prettier formatting in data-table-body.svelte (multiline onkeydown) - Remove 3 WhenFeatureDisabled tests since feature gate was removed from SavedViewController (saved views are now available to all orgs)
…hActive, add isSettingsGroup
…es and clean up comments
niemyjski
added a commit
that referenced
this pull request
May 19, 2026
* feat: Add stacks dashboard page route and API query - Add getStacksQuery function for listing stacks with filtering - Create /stacks route with basic stacks list page - Support filtering by status, tags, date ranges, and custom Lucene expressions - Display stack information: title, tags, event count, first/last occurrence, status Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * build: Simplify stacks page to avoid table library issues - Remove complex TanStack table setup that was causing build errors - Use semantic HTML table with Tailwind styling for simplicity - Implement row selection with checkboxes and bulk actions UI - Support filter input, limit selector, and pagination controls - Display stack properties: title, tags, event count, last occurrence, status - Add loading and empty state handling Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat: Add stacks bulk actions button with all operations - Create StacksBulkActionsButton component for simplified bulk operations - Support mark open/fixed/snoozed/ignored/discarded and delete actions - Integrate with RemoveStackDialog and status change dialogs - Wire bulk actions into stacks page with selection tracking - All dialogs and confirmations included Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat: Add stacks dashboard to navigation menu - Add stacks navigation item to Dashboards group - Use layers icon for visual consistency - Place between issues and event stream - Accessible from sidebar navigation Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: Add stacks filter and bulk operation examples to HTTP tests - Add filter query examples (status:discarded, tags:production, type:error) - Add bulk operation examples (change status, mark fixed, mark snoozed, delete) - Document filtering syntax for stacks dashboard feature - Help users understand query capabilities Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat: rewrite stacks dashboard using proper patterns - Rewrote stacks page using useFetchClient, createTable, getSharedTableOptions, and DataTable components matching the issues/sessions page patterns - Created proper table column definitions with NumberFormatter, TimeAgo, and badge components for status/tags - Created StacksDataTable component mirroring EventsDataTable - Uses existing TableStacksBulkActionsDropdownMenu (deleted the duplicate stacks-bulk-actions-button.svelte) - Moved navigation from Dashboards to Reports group - Removed broken getStacksQuery and list query key from api.svelte.ts - Uses FacetedFilter system for filtering (status, project, date, etc.) - WebSocket StackChanged event handling for real-time updates - Offset-based pagination with page size selector - Fixed organization abbreviation (never use org) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: lint errors in stacks page Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: clear stale organization selection state - Clear persisted organization id when no organizations remain - Re-select first valid organization when persisted id is stale - Hide manage/billing links when current organization is invalid - Prevent organization settings layout from redirecting to undefined ids Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: preserve impersonation and stabilize stack refresh handling - Keep impersonated organization selections from being overwritten by org sync - Refresh stacks table on non-removed StackChanged events with throttling - Correct stacks HTTP samples to match ids path-segment routes Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat: Add stacks dashboard page route and API query - Add getStacksQuery function for listing stacks with filtering - Create /stacks route with basic stacks list page - Support filtering by status, tags, date ranges, and custom Lucene expressions - Display stack information: title, tags, event count, first/last occurrence, status Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * build: Simplify stacks page to avoid table library issues - Remove complex TanStack table setup that was causing build errors - Use semantic HTML table with Tailwind styling for simplicity - Implement row selection with checkboxes and bulk actions UI - Support filter input, limit selector, and pagination controls - Display stack properties: title, tags, event count, last occurrence, status - Add loading and empty state handling Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat: Add stacks bulk actions button with all operations - Create StacksBulkActionsButton component for simplified bulk operations - Support mark open/fixed/snoozed/ignored/discarded and delete actions - Integrate with RemoveStackDialog and status change dialogs - Wire bulk actions into stacks page with selection tracking - All dialogs and confirmations included Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat: Add stacks dashboard to navigation menu - Add stacks navigation item to Dashboards group - Use layers icon for visual consistency - Place between issues and event stream - Accessible from sidebar navigation Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: Add stacks filter and bulk operation examples to HTTP tests - Add filter query examples (status:discarded, tags:production, type:error) - Add bulk operation examples (change status, mark fixed, mark snoozed, delete) - Document filtering syntax for stacks dashboard feature - Help users understand query capabilities Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat: rewrite stacks dashboard using proper patterns - Rewrote stacks page using useFetchClient, createTable, getSharedTableOptions, and DataTable components matching the issues/sessions page patterns - Created proper table column definitions with NumberFormatter, TimeAgo, and badge components for status/tags - Created StacksDataTable component mirroring EventsDataTable - Uses existing TableStacksBulkActionsDropdownMenu (deleted the duplicate stacks-bulk-actions-button.svelte) - Moved navigation from Dashboards to Reports group - Removed broken getStacksQuery and list query key from api.svelte.ts - Uses FacetedFilter system for filtering (status, project, date, etc.) - WebSocket StackChanged event handling for real-time updates - Offset-based pagination with page size selector - Fixed organization abbreviation (never use org) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: lint errors in stacks page Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: clear stale organization selection state - Clear persisted organization id when no organizations remain - Re-select first valid organization when persisted id is stale - Hide manage/billing links when current organization is invalid - Prevent organization settings layout from redirecting to undefined ids Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: preserve impersonation and stabilize stack refresh handling - Keep impersonated organization selections from being overwritten by org sync - Refresh stacks table on non-removed StackChanged events with throttling - Correct stacks HTTP samples to match ids path-segment routes Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat: align issue management and settings navigation UX Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: polish row interactions and issue detail links Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: clean up settings sidebar context Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: nest project settings under projects nav Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: show project submenu hierarchy in settings Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: render project settings as nested sidebar tree Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: add settings separator after organizations Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Polish sidebar hierarchy and issue management framing Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Move sessions into dashboards navigation Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add collapsed sidebar hover flyouts for child nav Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Revert out-of-scope changes per PR review Reverted: Startup.cs (next build path), SavedView model/tests, organization-features extraction, events-overview pager, saved-view 422 error handling hack, issues page filter changes, project manage page link change. * Remove stacks page and navigation link per PR review The stacks dashboard was not ready for inclusion. Removed the route and its sidebar link from the layout. * Improve stacks table: rename severity to critical, fix tags cell UX - Renamed stack-severity-cell to stack-critical-cell (matches column name) - Added tooltip with Kbd for platform-agnostic shortcut hints on tags - Made overflow tags clickable in tooltip dropdown - Added getProjectStacksQuery tanstack wrapper in stacks API - Moved defaultColumnVisibility and getTableOptions to options file * Refactor project issues page to use TanStack Query Replaced manual useFetchClient calls with getProjectStacksQuery and getTableOptions from the options file. Removed unused showStackPager and onEventChange props from stack/event detail pages. * Cosmetic fixes: remove double newlines, simplify margin, extract \ - Removed extra blank lines in events and stream pages - Simplified account layout margin from mx-6 my-6 to m-6 - Extracted detailsHref into a \ in event-detail-sheet * Apply code formatting (npm run format) * Revert stacks view type additions from saved view models The stacks page was removed per review. These model changes adding 'stacks' as a valid ViewType are no longer needed. * Fix data-table click handling and stacks.http filter syntax - Don't intercept clicks on links/buttons in table cells (was breaking link navigation when rowHref not set) - Added keyboard accessibility (Enter/Space) to table cells - Fixed stacks.http filter: tags: → tag: (correct filter term) * Make org settings routes consistent, fix stacks viewType doc - Settings group now has all the same entries as Organization Settings (General, Usage, Billing, Features) for navigation consistency - Removed stale 'stacks' from SavedViewController viewType doc comment to match the reverted model validation * Revert tag filter from AND back to OR semantics Multi-tag filter should use OR (show events with any selected tag) not AND (require all tags). AND was an accidental breaking change. * Fix data-table keyboard a11y and stacks.http date format - Move tabindex from individual cells to row level (reduces tab stops) - Remove per-cell keydown handler, use row-level Enter/Space instead - Fix snoozeUntilUtc to use ISO-8601 format (2030-12-31T00:00:00Z) * Fix CI: prettier formatting and remove obsolete feature-gate tests - Fix prettier formatting in data-table-body.svelte (multiline onkeydown) - Remove 3 WhenFeatureDisabled tests since feature gate was removed from SavedViewController (saved views are now available to all orgs) * Fix ESLint curly rule: wrap if body in braces * Refactor feature flag documentation: remove specific feature references and clean up comments --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
The legacy Angular UI has separate views for different stack statuses (fixed, regressed, snoozed, ignored, discarded), but discarded stacks disappear after the retention period -- making them unrecoverable. Users need a unified view to manage all stacks regardless of retention.
Approach
Added a new
/stacksroute in the Svelte 5 app that follows the exact same patterns as the issues and sessions pages:useFetchClient()withclient.getJSON<Stack[]>()-- no custom query wrapperscreateTable(getSharedTableOptions<Stack>(...))with offset paginationStacksDataTablewrapper (mirrorsEventsDataTable), proper column definitions usingNumberFormatter,TimeAgo, and custom cell components for status badges and tagsFacetedFiltersystem withOrganizationDefaultsFacetedFilterBuilder-- supports status, project, date, and custom Lucene filtersTableStacksBulkActionsDropdownMenucomponent (not a duplicate)StackChangedWebSocket events to update/refresh the tableAdditional fixes included
/organization/undefinedKey files
src/.../routes/(app)/stacks/+page.svelte-- main page (rewritten from scratch)src/.../stacks/components/table/options.svelte.ts-- column definitionssrc/.../stacks/components/table/stacks-data-table.svelte-- table wrappersrc/.../stacks/components/table/stack-status-cell.svelte-- status badge cellsrc/.../stacks/components/table/stack-tags-cell.svelte-- tags cellsrc/.../routes/(app)/+layout.svelte-- organization selection reconciliationsrc/.../routes/(app)/(components)/layouts/sidebar-user.svelte-- hide org-only links when invalidsrc/.../routes/(app)/organization/[organizationId]/+layout.svelte-- guard invalid redirectCleanup
stacks-bulk-actions-button.svelte(was a broken duplicate of the existing dropdown menu)getStacksQuery()and the non-standardlistquery key fromapi.svelte.ts