🐛 问题描述
PR #716 合并后,右侧 ViewConfigPanel 的"启用搜索/启用筛选/启用排序"开关已经关闭(OFF 状态),但左侧列表的 toolbar(Hide fields、Filter、Group、Sort、Color、Comfortable、Search 等控件)仍然全部显示,开关完全无效。
🔍 根本原因
数据流存在 两处断裂:
断裂点 1:PluginObjectView → renderListView schema 未传递 toolbar 开关
packages/plugin-view/src/ObjectView.tsx 中 renderListView 回调传给 Console 的 schema 缺少 showSearch/showFilters/showSort:
// 当前代码(缺失 ❌)
if (renderListView) {
return renderListView({
schema: {
type: 'list-view',
objectName: schema.objectName,
viewType: currentViewType,
fields: ...,
filters: mergedFilters,
sort: mergedSort,
rowHeight: activeView?.rowHeight,
densityMode: activeView?.densityMode,
groupBy: activeView?.groupBy,
options: ...,
// ❌ showSearch/showFilters/showSort 未传递!
},
...
});
}
断裂点 2:ListView toolbar 控件未根据 schema.showSearch/showFilters/showSort 条件渲染
packages/plugin-list/src/ListView.tsx 的 toolbar 渲染区域,Filter/Sort/Search/HideFields/Group/Color/Density 等按钮全部是无条件渲染的,完全没有检查 schema.showSearch、schema.showFilters、schema.showSort 等字段来决定是否显示。
即使上游正确传递了 showSearch: false,ListView 自身也不会响应。
✅ 修复清单(逐项对照修改)
1. PluginObjectView — renderListView schema 补齐 toolbar 开关字段
2. ListView — toolbar 控件条件渲染
3. Console ObjectView — renderListView 回调消费验证
4. 数据流全链路校验
5. generateViewSchema(非 grid 视图直渲路径)
6. useMemo 依赖项审查
7. 测试覆盖
📂 涉及文件
| 文件 |
改动类型 |
packages/plugin-view/src/ObjectView.tsx |
renderListView schema 补齐 showSearch/showFilters/showSort |
packages/plugin-list/src/ListView.tsx |
toolbar 控件条件渲染(Search/Filter/Sort/HideFields/Group/Color/Density) |
apps/console/src/components/ObjectView.tsx |
验证 fullSchema 传递正确性 + useMemo deps 审查 |
packages/plugin-list/src/__tests__/ListView.test.tsx |
新增 toolbar 开关测试 |
packages/plugin-view/src/__tests__/ObjectView.test.tsx |
新增 renderListView schema 传递测试 |
关联
🐛 问题描述
PR #716 合并后,右侧 ViewConfigPanel 的"启用搜索/启用筛选/启用排序"开关已经关闭(OFF 状态),但左侧列表的 toolbar(Hide fields、Filter、Group、Sort、Color、Comfortable、Search 等控件)仍然全部显示,开关完全无效。
🔍 根本原因
数据流存在 两处断裂:
断裂点 1:PluginObjectView → renderListView schema 未传递 toolbar 开关
packages/plugin-view/src/ObjectView.tsx中renderListView回调传给 Console 的 schema 缺少 showSearch/showFilters/showSort:断裂点 2:ListView toolbar 控件未根据 schema.showSearch/showFilters/showSort 条件渲染
packages/plugin-list/src/ListView.tsx的 toolbar 渲染区域,Filter/Sort/Search/HideFields/Group/Color/Density 等按钮全部是无条件渲染的,完全没有检查schema.showSearch、schema.showFilters、schema.showSort等字段来决定是否显示。即使上游正确传递了
showSearch: false,ListView 自身也不会响应。✅ 修复清单(逐项对照修改)
1. PluginObjectView — renderListView schema 补齐 toolbar 开关字段
renderListView({ schema })中添加:showSearch: activeView?.showSearch ?? schema.showSearchrenderListView({ schema })中添加:showFilters: activeView?.showFilters ?? schema.showFiltersrenderListView({ schema })中添加:showSort: activeView?.showSort ?? schema.showSortstriped、bordered、color到 renderListView schema(已部分在 Console fullSchema 补过,但 PluginObjectView 层也要传)2. ListView — toolbar 控件条件渲染
schema.showSearch === false时隐藏schema.showFilters === false时隐藏schema.showSort === false时隐藏schema.showHideFields),如不需要则保持显示schema.showGroup控制schema.showColor控制schema.showDensity控制schema.exportOptions或schema.allowExport控制逻辑正确3. Console ObjectView — renderListView 回调消费验证
renderListView构建fullSchema时,已有showSearch: viewDef.showSearch ?? listSchema.showSearch——确认listSchema参数确实包含了 PluginObjectView 传来的值fullSchema最终传给<ListView schema={fullSchema} />时,ListView 能正确消费4. 数据流全链路校验
ViewConfigPanel onViewUpdate('showSearch', false)→setViewDraft→activeView更新activeView→objectViewSchema.showSearch→PluginObjectView schema.showSearchPluginObjectView→renderListView({ schema: { showSearch } })→ ConsolefullSchema.showSearchfullSchema→<ListView schema={fullSchema} />→ toolbar Search 按钮隐藏showFilters和showSort全链路5. generateViewSchema(非 grid 视图直渲路径)
generateViewSchema中baseProps已包含showSearch/showSort/showFilters——确认这些值能传递到各子插件组件的 toolbar6. useMemo 依赖项审查
objectViewSchemauseMemo 的依赖数组包含activeView?.showSearch、activeView?.showFilters、activeView?.showSortgridSchemauseMemo 的依赖数组包含activeViewrenderContent函数的key是否包含足够的 deps 以触发 re-render7. 测试覆盖
showSearch: false时 Search 按钮不渲染showFilters: false时 Filter 按钮不渲染showSort: false时 Sort 按钮不渲染renderListView回调的 schema 包含showSearch/showFilters/showSort📂 涉及文件
packages/plugin-view/src/ObjectView.tsxpackages/plugin-list/src/ListView.tsxapps/console/src/components/ObjectView.tsxpackages/plugin-list/src/__tests__/ListView.test.tsxpackages/plugin-view/src/__tests__/ObjectView.test.tsx关联