Skip to content

FilterBuilder 值落在选项集之外时值控件显示空 —— 文本值切到 picklist 列后行仍带着该值 #4874

Description

@yinlianghui

发现于 #4781 的实施,回传立单。又一处 #4768 / #4781 家族的「控件显示空、行却带着看不见的值」,这次成因是值域而不是类型。

事实

packages/components/src/custom/filter-builder.tsx(origin/main 65e88e6):带 options 的 select/lookup 列,其值控件是一个受控的 Select,value={String(condition.value || "")}。Radix 的 SelectValue 只认已挂载的 SelectItem,值不在 options 里就什么都不渲染 —— 与 #4768 里 operator trigger 显示空是同一个机制。

复现:筛选面板加一行 → 字段选文本列 → 值输入 acme → 字段改成一个 picklist 列(选项 won / lost)→ 值控件显示空,行里仍是 value: "acme",照样持久化、照样下发查询。

实测(jsdom):切换后 onChange 最后一次给出的行 value"acme",值 trigger 的文本为空串。

#4781 的边界

#4781 已落的类型重整刻意不覆盖这一条:select/lookup 属于文本族,"acme"类型上是装得下的,被清掉的只有类型装不下的值。这里要答的是「值在不在该列的选项集里」,是值域问题。

定语义前要先答的

lookup 类字段的候选值可能是远程/异步的(LookupValuePicker 走远程搜索,options 常常为空或未到位)。照本地 options 一律清空,会把一个完全合法的 lookup id 清掉 —— 这个风险决定了不能照抄 #4781 的做法:

倾向 A + C 的组合(静态选项列清空,远程列显示为临时项),但这是公共行为,建议按 #4781 的路子交维护者裁定。

参考

Metadata

Metadata

Assignees

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions