Skip to content

owner widget 拿不到表单下发的 dataSource,而 plugin-grid 认为它需要 —— 且 owner 根本不在 spec 的 FieldType 里(enforce-or-remove 待判) #4814

Description

@yinlianghui

发现于 #4790 的实施(表单 data-source 允许表收敛)。测量副产物,不在该卡范围内,单独立此单。

事实(实读 origin/main @ f2dc8fa)

  1. packages/fields/src/field-type-alias.ts:105 把字段类型 owner 映射到 field:owner;packages/fields/src/index.tsx:2435field:owner 注册到 UserField(与 user 同一个 widget);index.tsx:2190 另有 registerFieldRenderer('owner', UserCellRenderer) 管单元格展示。即 owner 在本仓是一个活的 widget 键

  2. owner 不在 @objectstack/specFieldType 枚举里(17.0.0-rc.6,dist/percent-scale-DQMCB4dC.d.tsdeclare const FieldType:… lookup / master_detail / tree / user / image … 全表 48 个成员,无 owner)。所以没有任何对象 schema 能声明 type: 'owner' —— 它只能经 widget: 'field:owner' 这条手写 SDUI 路径到达。

  3. 两个消费面对它的判断相反:

  4. 同一 probe 还读到 field:grid 三项皆 false。而 packages/fields/src/widgets/types.ts:166dataSource TSDoc 写的是「DataSource for widgets that query records (lookup / user / object-ref / recipient-picker / grid). Injected by the form renderer for the field types that need it」—— grid 从来不在任何 data-source 表里,GridField.tsx 也 grep 不到 dataSource。这句契约文档的 grid 是零消费者的声明。(user 那半已由 DATA_SOURCE_FIELD_TYPES(form 层)与 core 的 EXPANDABLE_FIELD_TYPES 已知不同集且零 gate —— 同 #4770 的第二张允许表待收敛 #4790 / PR 补齐。)

影响

  • owner:手写 widget: 'field:owner' 的字段落到 UserFieldLookupFielddataSource / dependentValues 各有 SchemaRendererContext 兜底,所以有 provider 时能瘸着跑;dependsOnLabels 没有任何兜底,于是带 depends_on 的 owner 选择器把裸 API 名插进「先选 … 」提示句 —— objectstack#5407 给 lookup 关掉、这里仍开着的同一个洞。
  • grid:纯文档失真,今天没有用户碰得到。

需要裁决的是「接线还是退役」,不是补一个 string

owner 既然不是 spec 声明得出来的类型,把它加进表单的 DATA_SOURCE_ONLY_WIDGET_TYPES 等于新造一条 declared-but-unexercised 条目 —— 正是 ADR-0049 enforce-or-remove 要消灭的东西,也正是 #4790 这一族在关的失效模式。所以 #4790 的实施故意没有顺手加,留给分诊:

  • A. 退役 owner 别名:删 field-type-alias.tsowner 映射、index.tsxfield:owner 注册与 plugin-grid 的 USER_WIDGET_TYPES 成员,cell renderer 另议。前提是确认没有产品在用 widget: 'field:owner'
  • B. 承认它是一个 widget-hint-only 名(与 object-ref / filter-condition / recipient-picker同类),补进表单规则并在 paramValueShape.ts 之类的地方登记 widgetHintOnly: true,让「声明即强制」。
  • grid 那句 TSDoc 无论 A/B 都应改掉或补消费者。

参考

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