Skip to content

feat(directory-picker): filter subdirectories by typing a suffix - #461

Open
JingkaiTang wants to merge 3 commits into
agegr:mainfrom
JingkaiTang:feat/directory-picker-filter
Open

feat(directory-picker): filter subdirectories by typing a suffix#461
JingkaiTang wants to merge 3 commits into
agegr:mainfrom
JingkaiTang:feat/directory-picker-filter

Conversation

@JingkaiTang

Copy link
Copy Markdown

背景

DirectoryPicker 弹窗在「添加自定义路径 / 选择项目目录」时,当前目录下子目录较多需滚动查找,缺少快速定位手段。

改动

复用现有路径输入框,输入 currentPath + "/" + 后缀 时实时筛选当前目录的子目录:

  • 新增纯函数 lib/directory-picker-filter.tsderiveDirectoryFilter(currentPath, pathInput) 推导筛选词、filterDirectoryEntries(entries, filter) 过滤条目;配 lib/directory-picker-filter.test.mjs 单元测试。
  • components/DirectoryPicker.tsx 接入派生值 filteredDirectories,列表数据源改用之;空状态区分「无匹配的子目录 / 没有子目录」。
  • 新增 i18n key directoryPicker.noMatchingDirectories(中 / 英)。

不新增输入框;不改 hasUncommittedPath / canSelect / navigateTo;不改后端 /api/cwd/browse

交互

currentPath = /a/b 为例:

  • 输入框 /a/b → 显示全部子目录,「选择」可用。
  • 输入框 /a/b/foo → 列表仅显示名字含 foo(不区分大小写)的子目录,「选择」禁用;点击筛出的子目录进入下一层后,输入框同步为新路径,「选择」恢复可用。
  • 输入框为其他内容(如 /c/d)→ 不筛选,跳转语义不变,点「转到目录」可跳转。

筛选词取 currentPath 后、首个分隔符之后的部分;两侧路径经 normalizeFilePathSlashes 归一,兼容 Windows \/

测试

  • node --experimental-strip-types --test lib/directory-picker-filter.test.mjs:9/9 通过(含 Windows 斜杠归一、大小写不敏感包含、跳词语义返回 null)。
  • tsc --noEmit:0 error。
  • npm run lint:0 error。

注:本地工作流配置(.gitignore 忽略 superpowers scratch 目录)属无关改动,未纳入本 PR。

@JingkaiTang
JingkaiTang force-pushed the feat/directory-picker-filter branch from 83181a7 to 17df744 Compare August 12, 2026 03:49
@JingkaiTang JingkaiTang reopened this Aug 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant