Skip to content

字段 widget 的错误提示键:spec 声明 error,objectui 渲染 errorMessage(declared ≠ enforced) #3222

Description

@os-zhuang

在 objectui#3161(objectstack#4115 台账批次 7)对读 @object-ui/fields 与 spec 的 FieldWidgetProps 时发现,未在该 PR 修复(属行为变更)。

事实

@objectstack/spec/uiFieldWidgetPropsSchema字段 widget 插件的 props 契约,它声明:

spec 键 objectui FieldWidgetComponentProps
error?: string ——本地叫 errorMessage?: string
required: boolean(带 .default())
readonly: boolean(带 .default()) readonly?: boolean
field: { name?, label?, type: FieldType } field: FieldMetadata(更宽)

也就是说:一个照着 spec 声明的 props 契约写出来的第三方字段 widget,放进 objectui 后校验消息不会显示,因为 objectui 传的是 errorMessage,widget 读的是 error;而且没有任何东西会报错——[key: string]: any(objectui#3221)让 props.error 成为合法读取,恒为 undefined

需要拍板的是方向,不是修法

三种都成立,选哪个取决于 spec 的 FieldWidgetPropsSchema 是不是真的想当第三方 widget 的契约:

  1. objectui 改名跟随 spec(errorMessageerror):48 个 widget + 调用点,一次性对齐,spec 成为唯一契约;
  2. spec 改名跟随实现(errorerrorMessage):spec 侧改动小,但 error 这个名字在 spec 里已经发布;
  3. spec 退掉这份 props 契约:如果它从来不是给第三方 widget 用的(没有任何运行时读它),那它是一份"声明了但没人执行"的 schema,按 ADR-0049 enforce-or-remove 处理。

同类问题还有 required——spec 声明、objectui 的 widget 一律不接收(必填标记由外层 FieldContainer 画)。

关联:objectstack#4115、objectui#3161、objectui#3221。

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions