ENG-2184 Add search to the settings panel - #1378
Open
trangdoan982 wants to merge 5 commits into
Open
Conversation
Contributor
PR size/scope checkThis PR is over our review-size guideline.
Please split this into smaller PRs unless there is a clear reason the changes need to land together. If keeping it as one PR, please add a brief justification covering:
|
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
|
This pull request has been ignored for the connected project Preview Branches by Supabase. |
Contributor
There was a problem hiding this comment.
Devin Review found 2 potential issues.
1 flag not posted on this PR by your GitHub settings — view it in Devin Review. (Configure)
trangdoan982
force-pushed
the
eng-2184-add-search-to-the-settings-panel
branch
from
August 31, 2026 19:48
1fc68db to
ed7bf4e
Compare
trangdoan982
force-pushed
the
eng-2184-add-search-to-the-settings-panel
branch
from
August 31, 2026 19:55
ed7bf4e to
cb0fb8e
Compare
trangdoan982
force-pushed
the
eng-2184-add-search-to-the-settings-panel
branch
from
August 31, 2026 19:58
cb0fb8e to
8e001d5
Compare
trangdoan982
force-pushed
the
eng-2184-add-search-to-the-settings-panel
branch
from
August 31, 2026 21:02
8e001d5 to
468f2d2
Compare
trangdoan982
changed the base branch from
eng-2183-build-the-new-setting-item-row-component
to
eng-2213-settings-catalog-address-every-setting-by-key-and-location
August 31, 2026 21:02
2 tasks
trangdoan982
force-pushed
the
eng-2213-settings-catalog-address-every-setting-by-key-and-location
branch
from
August 31, 2026 23:08
bc865f3 to
81f750e
Compare
trangdoan982
force-pushed
the
eng-2184-add-search-to-the-settings-panel
branch
from
August 31, 2026 23:09
468f2d2 to
107e7b1
Compare
trangdoan982
force-pushed
the
eng-2213-settings-catalog-address-every-setting-by-key-and-location
branch
from
September 3, 2026 20:30
81f750e to
fd2b364
Compare
trangdoan982
force-pushed
the
eng-2184-add-search-to-the-settings-panel
branch
from
September 3, 2026 20:30
107e7b1 to
8cecb56
Compare
trangdoan982
force-pushed
the
eng-2213-settings-catalog-address-every-setting-by-key-and-location
branch
from
September 4, 2026 21:57
fd2b364 to
8f6c3bd
Compare
trangdoan982
force-pushed
the
eng-2184-add-search-to-the-settings-panel
branch
from
September 4, 2026 21:57
8cecb56 to
5b8fa54
Compare
trangdoan982
force-pushed
the
eng-2213-settings-catalog-address-every-setting-by-key-and-location
branch
from
September 4, 2026 22:46
8f6c3bd to
0a82e0e
Compare
trangdoan982
force-pushed
the
eng-2184-add-search-to-the-settings-panel
branch
from
September 4, 2026 22:46
07f219a to
edad556
Compare
trangdoan982
force-pushed
the
eng-2184-add-search-to-the-settings-panel
branch
from
September 5, 2026 22:55
edad556 to
efd92c7
Compare
trangdoan982
force-pushed
the
eng-2213-settings-catalog-address-every-setting-by-key-and-location
branch
from
September 5, 2026 22:55
0a82e0e to
2867339
Compare
trangdoan982
force-pushed
the
eng-2184-add-search-to-the-settings-panel
branch
from
September 5, 2026 22:59
efd92c7 to
ef6ab91
Compare
trangdoan982
force-pushed
the
eng-2213-settings-catalog-address-every-setting-by-key-and-location
branch
from
September 5, 2026 22:59
2867339 to
369c7f8
Compare
Adds the search field at the top of the settings rail: type a setting's name, section or description and jump to it wherever it currently lives. Matching is a plain substring pass over the entries ENG-2213 records, ranked so that an exact label always beats a section or description that merely mentions the word. Tabs are offered as their own result kind, so "export" reaches the Export page even though no setting is named that. The catalog is rebuilt per query rather than cached for the dialog's lifetime, because node types and feature gates can both change while Settings is open. The results are a portalled Popover, not an in-flow dropdown: the field lives inside Blueprint's tab list, which Settings styles `overflow-y: auto; overflow-x: hidden`, so an in-flow panel is clipped on both axes. It also paints its own surface, because Roam ships its own Blueprint build and themes `.bp3-popover` — inheriting the library default leaves the panel transparent with the rail showing through it. Jumping needs a new `navigate` action: the reducer could only push one segment at a time, and a setting can be several segments deep. The row is not in the DOM when the jump is dispatched, since only the active tab's panel renders, so the scroll retries by frame until the row appears or a budget runs out — at which point the user is at least on the right page. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Finding the row settled the jump, which cleared anchorId and so re-ran the effect; its cleanup then stripped the flash class on the very next render. The row scrolled into view with no indication of which one had matched. The flash now owns its own lifetime instead of the effect's, and re-flashing a row already flashing restarts the animation rather than riding out the first. Only the frame-by-frame lookup stays cancellable. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The tier order is the behaviour worth pinning: an exact label must not be buried under a description that happens to mention the same word, and a multi-word query must match across fields without diluting single-word precision. Both are easy to regress while tuning and neither is visible without a query that exercises the boundary. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Review feedback: the box sat flush with the rail while every tab title under it was indented. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…cast The selector only escaped double quotes; a backslash in an anchor id could still break out of the attribute string. Keys are authored today, so this is belt-and-braces rather than a live bug. The test helper's `as SearchableEntry` was already the expression's type, which the changed-files lint flags as a warning and fails on. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
trangdoan982
force-pushed
the
eng-2213-settings-catalog-address-every-setting-by-key-and-location
branch
from
September 5, 2026 23:12
369c7f8 to
c3c5884
Compare
trangdoan982
force-pushed
the
eng-2184-add-search-to-the-settings-panel
branch
from
September 5, 2026 23:12
ef6ab91 to
9be3ff8
Compare
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.
Reviewer brief
Result: A search field at the top of the settings rail matches settings by name, section/group and description, and jumps to the matching row wherever it currently lives — including per-node-type settings behind the Grammar › Nodes drill-down. Tabs are offered as their own result kind, so "export" reaches the Export page even though no setting is named that.
Stacked on ENG-2213 Settings catalog: address every setting by key and location #1379 (ENG-2213), which records what every setting is called and where it lives. This PR is only the search layer that reads it: ranking, the field, and the jump.
Review focus — two Blueprint behaviours the code works around, both load-bearing.
Settings.tsxstylesoverflow-y: auto; overflow-x: hidden— an in-flow panel is clipped on both axes..bp3-popover; inheriting the default renders the panel fully transparent with the rail showing through it. This was only visible in Roam itself, not in isolation.flipandpreventOverfloware disabled deliberately: the rail sits at the window edge, so Blueprint's overflow handling pushed the panel off the left of the dialog.Review focus — the jump retries by frame. The target row is not in the DOM when the jump is dispatched:
renderActiveTabPanelOnlymeans the destination panel mounts on a later commit, and a row inside aCollapsemounts later still.useSettingAnchorScrolltherefore polls by animation frame until the row appears or a ~500ms budget runs out, then degrades to leaving the user on the right page. A single lookup would silently miss.Risk or follow-up:
Verification
Manual and local only.
pnpm ci:validate(check-types + 142 unit tests) and eslint on the changed files — 0 errors, no new warnings on added lines.…eng-2184-add-search-to-the-settings-panel): the field renders in the rail and returns correct labels and breadcrumbs. That run is what caught the transparent popover.Tabscarrying the same overflow rules asSettings.tsx. Measured: opaque 340px surface; opens rightward from the field's left edge; active-row breadcrumb at 4.53:1 on Blueprint's#137CBD(80% opacity measured 3.49:1, below AA — hence full white); ArrowDown scrolls the active row into view. The harness was not kept.Scope check
$scope-checkagainst the ENG ticket and final diff.Done When:settingAnchorIdexport removed — added earlier in this branch's history, never used.Local delegated full review