发现于 objectstack#5576 的实现过程(objectui PR,把 dataSource 接到 list-view)。#5576 的完成范围只到 list-view + resolveElementDataSource,本单是同一条绑定在其余 page component 上仍然无人消费,单独立单;实现要用 #5576 落地的公共 helper,故 Blocked-by: objectstack#5576。
事实(objectui origin/main + #5576 分支实测)
PageComponentSchema.dataSource(ElementDataSourceSchema)声明在每一个 page component 上 —— 它不是 list-view 专属键。但整仓只有两处读它:
packages/components/src/renderers/basic/record-picker.tsx:71 const ds = (schema?.dataSource ?? {}) as { object?; filter?; sort?; limit? }
packages/plugin-list/src/ListViewBlock.tsx (#5576 新增)
由此两个仍然存在的缺口:
1. element:record_picker 读了 4 个键、丢掉 view
record-picker.tsx:71-80 显式取 object / filter / sort / limit,没有 view。作者写 dataSource: { object: 'account', view: 'hot' } 得到的是未过滤的全量选择器,而不是 saved view 选出的行 —— 与 #5576 在 list-view 上修掉的是同一个「声明了但丢弃」形状,只是换了个 block,且症状更隐蔽(它不报错,只是答案更宽)。
2. 其余 object-bound public block 整条绑定都不读
object-grid / object-form / object-kanban / object-calendar / object-chart / object-metric / record:related_list 等都没有把 dataSource.object 映射到自己读的 objectName。一张页面上给 object-grid 按 spec 写 dataSource: { object, view } 而不写 objectName,渲染出来是空的(objectName 未设 → 不发查询)。
补充一条容易误读的:在 #5576 之前这些 block 写 dataSource 会直接坏掉(SchemaRenderer 把 schema 的 dataSource spread 成 prop,遮蔽了宿主注入的适配器 → dataSource.find is not a function)。#5576 已在 SchemaRenderer 侧把该键移出 prop spread,所以崩溃面已经消除;剩下的是本单的「读不到 = 静默空」。
建议范围
复用 #5576 落地的公共件,不要各 block 再写一遍:
@object-ui/core:isElementDataSourceConfig / collectSavedViews / resolveSavedView / composeElementDataSource
@object-ui/react:useElementDataSource(schema, dataSource?)(已含 saved view 抓取 + 「view 名解析不到就报错、不回退全量」的语义)
逐 block 接线 + 每个 block 两方向各钉一条(带/不带 dataSource),并沿用 #5576 定下的合成语义(filter 为 additional 走 and 合成;sort/limit 显式键覆盖 view;view 提供基线、组件自身显式键覆盖 view)。
#5576 的验收线是 list-view 的两方向复现 + resolveElementDataSource 不再丢 view;把 7 个以上 block 的接线并进去会让那个 PR 的回归面无法逐块论证。分开做,每个 block 有自己的钉子。
发现于 objectstack#5576 的实现过程(objectui PR,把
dataSource接到list-view)。#5576 的完成范围只到list-view+resolveElementDataSource,本单是同一条绑定在其余 page component 上仍然无人消费,单独立单;实现要用 #5576 落地的公共 helper,故Blocked-by: objectstack#5576。事实(objectui origin/main + #5576 分支实测)
PageComponentSchema.dataSource(ElementDataSourceSchema)声明在每一个 page component 上 —— 它不是 list-view 专属键。但整仓只有两处读它:由此两个仍然存在的缺口:
1.
element:record_picker读了 4 个键、丢掉viewrecord-picker.tsx:71-80显式取object/filter/sort/limit,没有view。作者写dataSource: { object: 'account', view: 'hot' }得到的是未过滤的全量选择器,而不是 saved view 选出的行 —— 与 #5576 在 list-view 上修掉的是同一个「声明了但丢弃」形状,只是换了个 block,且症状更隐蔽(它不报错,只是答案更宽)。2. 其余 object-bound public block 整条绑定都不读
object-grid/object-form/object-kanban/object-calendar/object-chart/object-metric/record:related_list等都没有把dataSource.object映射到自己读的objectName。一张页面上给object-grid按 spec 写dataSource: { object, view }而不写objectName,渲染出来是空的(objectName未设 → 不发查询)。补充一条容易误读的:在 #5576 之前这些 block 写
dataSource会直接坏掉(SchemaRenderer把 schema 的dataSourcespread 成 prop,遮蔽了宿主注入的适配器 →dataSource.find is not a function)。#5576 已在SchemaRenderer侧把该键移出 prop spread,所以崩溃面已经消除;剩下的是本单的「读不到 = 静默空」。建议范围
复用 #5576 落地的公共件,不要各 block 再写一遍:
@object-ui/core:isElementDataSourceConfig/collectSavedViews/resolveSavedView/composeElementDataSource@object-ui/react:useElementDataSource(schema, dataSource?)(已含 saved view 抓取 + 「view 名解析不到就报错、不回退全量」的语义)逐 block 接线 + 每个 block 两方向各钉一条(带/不带
dataSource),并沿用 #5576 定下的合成语义(filter为 additional 走and合成;sort/limit显式键覆盖 view;view 提供基线、组件自身显式键覆盖 view)。为什么不并进 #5576
#5576 的验收线是 list-view 的两方向复现 +
resolveElementDataSource不再丢view;把 7 个以上 block 的接线并进去会让那个 PR 的回归面无法逐块论证。分开做,每个 block 有自己的钉子。