Skip to content

<ObjectChart> aggregate result-column naming is undefined, so its axis bindings cannot be validated #3701

Description

@os-zhuang

#3583 Phase 2(#3684)分出来的已知缺口。

现状

#3684 把 ADR-0021 的图表轴校验扩到了报表图表、列表视图图表和数据集绑定的页面图表组件。react <ObjectChart> 块被刻意排除在外,原因是一个真实的未决问题,不是工作量问题。

<ObjectChart>(packages/spec/src/ui/react-blocks.ts:103-115)是对象绑定而非数据集绑定:

<ObjectChart
  objectName="showcase_invoice"
  aggregate={{ field: 'total', function: 'sum', groupBy: 'status' }}
  title="Invoice value by status"
/>

它的 dataPropsxAxis / yAxis / series,这些绑定的是聚合结果行的列名。但 aggregate 在 spec 里只是一个描述字符串 '{ field, function, groupBy }' —— 从来没有 zod schema,仓库里也没有任何地方规定聚合后的输出列叫什么。

数据集侧不存在这个问题:measure 有显式的 name,结果行按 measure 名索引(这正是 #3684 那条规则能判定的基础)。对象绑定这条路径没有等价物。

所以「yAxis.field 应该解析成什么」目前没有可辩护的答案。猜一个约定就是在制造误报,而误报正是让作者不再信任 linter 的东西(ADR-0072 D1)。

可做的部分

即便不解决命名问题,aggregate.fieldaggregate.groupBy可以objectName 的字段校验的 —— 它们确实是原始字段名。缺的是读取 JSX 属性的能力:validate-react-page-props 目前只检查必需绑定是否存在和属性名拼写(packages/lint/src/validate-react-page-props.ts:110-176),从不读值。

建议顺序

  1. 先定下(或明确记录)aggregate 的结果列命名约定 —— 这本身也该是 spec 决策,因为渲染器和作者都需要它。
  2. 有了约定,再给 validate-react-page-props 加属性值提取,校验 aggregate.field / groupBy,以及轴。

关联

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions