design: apply Filter redesign for env var and public URL#9173
Open
design: apply Filter redesign for env var and public URL#9173
Conversation
Replaces inconsistent toolbar UIs across alerts, reports, public URLs, and environment variables pages with a single reusable component. The toolbar provides: filter dropdown (left), search + sort + optional grid/list toggle (right). Filter options are page-specific via props. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- "Filter" is now plain clickable text opening a dropdown; applied filters show as removable chips with "Clear all" below the toolbar - "Newest" is a toggle button (not dropdown) that flips sort order - Search is a magnifying glass icon (h-9) that expands to an inline input; search text syncs to URL via ?q= param - Add `TableToolbarAppliedFilters`, `TableToolbarSearch`, `TableToolbarSort` sub-components - Remove old `TableToolbarSortDropdown` Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Use `untrack` and `get()` to break circular reactive dependencies: - `$table.setGlobalFilter()` was re-triggering its own effect via store subscription - URL sync effects were creating `searchText` <-> `$page` cycles Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Wrap DropdownMenu.Label inside DropdownMenu.Group to provide required Menu.Group context for GroupHeading - Use explicit oninput handler instead of bind:value for search to ensure reliable propagation through $bindable chain Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace $bindable chain (3-level deep binding wasn't propagating in TanStack pages) with onSearchChange callback. All consumers now use the callback to update search state. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove local `searchText = text` write in `handleSearchChange` which created a Svelte 5 prop shadow, disconnecting the input from parent state. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Revert alerts and reports tables to original `ResourceList` pattern - Replace filter icon with `ListFilter` from lucide-svelte - Filter pills: white bg, h-7, in h-9 container vertically centered - Reorder toolbar right side: Search, Newest, View toggle - Filter and Newest text use `text-fg-primary` - Env vars page: `+` button aligns top with `items-start` Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Filter pills: font-medium, border-t divider restored, h-7 in h-9 container - Add children snippet to TableToolbar for inline extras (e.g. + button) - Env vars: + button rendered inside toolbar so applied filters span full width - Reorder: Newest before Search Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add FilterOutlined.svelte from Rill design system SVG - Use it in TableToolbarFilterDropdown instead of lucide ListFilter - Wrap toolbar in section with gap-y-2 for spacing between rows Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add persistent <hr> between toolbar and applied filters - Replace complex mask-based SVG with clean stroked outline path - Reduce env vars page gap from gap-6 to gap-3 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…d white Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Remove trivial `handleSearchChange` wrapper, pass callback directly - Remove `$bindable` on `viewMode`, use callback pattern consistently - Sort: icon-only button (ArrowDownNarrowWide/ArrowUpNarrowWide), no text/border - Swap order: Search before Sort - Add `enableSorting` prop to BasicTable; env vars disables it - Fix disabled search button: proper `disabled` attr instead of CSS-only - Add `aria-label` to filter trigger and sort button - View toggle: `bg-gray-200` to `bg-surface-hover` for theme support - Trim barrel exports to `TableToolbar` + types only - Use optional chaining on `onSortToggle?.()` for consistency Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…arrow - Search icon: remove border/bg, match sort icon style - Revert sort to text "Newest"/"Oldest" + ArrowUpDown - Show hr/applied filters only when filterGroups exist - Revert BasicTable enableSorting prop (keep column sorting) - Remove sortDescFirst from Activity column so no arrow shows by default Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
When toolbar controls sort order, BasicTable clears its internal sorting state so column header arrows don't show. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace boolean `externalSort` with `externalSortKey` that reacts to value changes. Pass `sortDirection` through to BasicTable so clicking Newest/Oldest clears any active column header arrow. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.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.
toggle, applied filter chips, and view mode toggle
"Clear all"
Search bar can be removed if req'd
Components:
loom: https://www.loom.com/share/16b8de614c214305b385d966e7352b0a?from_recorder=1&focus_title=1
Will replace: #9156
Checklist: