Skip to content

RelatedList 的 Add 按钮不判 dataSource,而 picker 对话框判 —— 无 dataSource 的宿主(Studio designer / 无 RecordContext 的嵌入)里是个点了没反应的死按钮 #3895

Description

@yinlianghui

观察类发现,顺手记录,发现于 #3838 的实施(PR #3894)。不在那一单的范围内,该 PR 未改这个行为。

机制

packages/plugin-detail/src/RelatedList.tsx 里 Add 这条链上的三个消费点对 dataSource 的要求不一致(行号按 PR #3894 之后的树):

  • :1147 Add 按钮:{add && pickerObject && ( —— 不判 dataSource,点击只做 setPickerOpen(true);
  • :1325 picker 对话框:{add && pickerObject && dataSource && ( —— dataSource;
  • :723 handleAddRecords:if (!add || !dataSource || …) return —— 判。

于是当宿主没有 dataSource 时,按钮照常渲染,点下去 pickerOpen 变 true 而对话框根本不存在:没有任何可见反应,也没有任何提示

可达性

renderers/record-related-list.tsx:185 传的是 dataSource={ctx?.dataSource},所以 undefined 的宿主是真实存在的一类:Studio designer 预览、无 RecordContext 的独立嵌入(apps/console/src/__tests__/public-block-binding-reach.test.tsx 正是这样挂载的,且它的 fixture 带一个 spec 合法的 add)。正常应用运行时 dataSource 有值,所以终端用户日常不会碰到 —— 这也是标 finding 而不是 bug/pm:queue 的原因,严重性交 triage 判。

可能的方向(未做取舍)

  1. 按钮门补上 dataSource(与对话框/回调对齐)—— 最小、与 record:related_list 写了 add 但漏了 add.picker,整个相关列表被换成「Component failed to render」错误卡 —— RelatedList.tsx:1299 裸取 add.picker.object,同一文件 :378/:390 是可选链 #3838 收紧门的思路同向:能力不具备就不呈现 affordance;
  2. dataSource 时按钮 disabled 并给出原因(designer 里"这里会有一个 Add 按钮"的可见性比直接消失更有用);
  3. 不动,认为 designer 预览下的死按钮可接受。

(1) 与 (2) 的取舍取决于 designer 预览想不想看见这个按钮 —— 那是产品判断,不是实现细节,所以只记录不动手。

关联:#3838(同一条 Add 链上的门,已修渲染期崩溃)、#3831(add.picker.filter 未接线)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions