feat: secrets filter menu#940
Open
rohan-chaturvedi wants to merge 2 commits into
Open
Conversation
6 tasks
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.
🔍 Overview
The single-env and cross-env secret editors only offered sort + plain-text search, so there was no way to narrow a long list down to a particular kind of secret (e.g. only sealed secrets, only rotating ones, or everything tagged
api). This PR adds a Filter menu and search-box qualifiers to both editors.💡 Proposed Changes
FilterMenu.tsx(Headless UIPopover, multi-select) next to the existing Sort menu, with three sections:config/secret/sealedrotating/dynamic/overridden(active personal override)Each section shows its qualifier hint (
type:/is:/tag:), and there's an active-count badge + Clear button.redis type:config,is:rotating,tag:"db creds". Unknown keys/values fall back to free text so a typo never empties the list.frontend/utils/secrets.tsand is injected into the singlefilteredSecretsmemo each editor already had, so rotating/dynamic grouping derives from it automatically. Dynamic secrets and folders (which have none of a regular secret's attributes) are gated as whole "kinds".h-fullso a short (filtered) table no longer clips the open menu; single-env sticky toolbar is raised above row hover-menus while the menu is open.🖼️ Screenshots or Demo
Screencast.From.2026-07-02.19-02-06.mp4
📝 Release Notes
You can now filter secrets in both the environment and cross-environment editors by type (secret/sealed/config), rotating, dynamic, overridden (active personal override), and tag — via a Filter menu or by typing qualifiers like
type:config,is:rotating, ortag:apidirectly in the search box.🧪 Testing
frontend/tests/utils/secrets.test.tscovering the search parser and both matcher families (faceted AND, OR-within-facet, tag substring, dynamic/folder gating, quoted values, unknown-qualifier fallback, cross-env any-env matching). 115 tests pass.npx tsc --noEmitis clean.🎯 Reviewer Focus
Start with the predicates in
frontend/utils/secrets.ts(secretMatchesFilter/parseSecretSearch/secretMatchesSearchand the dynamic-secret gating), thenFilterMenu.tsx, then how each editor wires them into itsfilteredSecrets/filteredDynamicSecrets/filteredFoldersmemos.➕ Additional Context
Consistent with the existing E2EE model, all filtering/search happens client-side — the server never sees the query.
✨ How to Test the Changes Locally
docker compose -f dev-docker-compose.yml up -d, openhttps://localhost.redis,redis type:config,is:rotating,is:dynamic,tag:api, and a quotedtag:"...".💚 Did You...