顺带发现,非任何在飞 PR 的范围内(发现于 objectui#3562 / PR #3761 的实现过程中,那一单的裁定明确只管「触发器是否渲染」,不管「某一项渲染在哪里」,故未在该 PR 修)。
现象
packages/plugin-grid/src/components/RowActionMenu.tsx:inline 槽位的分配跑在声明序上,在任何 visible 谓词求值之前。
const primaryDefs = gatedActionDefs.filter(d => d.variant === 'primary');
const inlineDefs = primaryDefs.slice(0, Math.max(0, maxInlineActions));
const menuDefs = [
...primaryDefs.slice(Math.max(0, maxInlineActions)),
...gatedActionDefs.filter(d => d.variant !== 'primary'),
];
于是当一行有 2 个以上 variant: 'primary' 动作、且排在前面的那个的 visible 对这一行不成立时:
- 被压掉的 primary 仍然占住那个 inline 槽(
RowActionInlineButton 对它 return null,槽位空转);
- 后面那个通过了谓词的 primary 因为已经被 slice 到
menuDefs 里,只能渲染进「⋮」溢出菜单。
结果:这一行明明只有一个可见的 primary,maxInlineActions 也允许 1 个 inline,但用户看到的是「没有 inline 按钮 + 一个要点开才看得到主操作的 ⋮」。行的主 CTA 被藏进了溢出菜单。
期望
槽位应当分配给存活的 primaries:inlineDefs 取存活 primaries 的前 maxInlineActions 个,其余(含存活的溢出部分)落进菜单。
可达性(诚实说明,未在真实元数据上复现)
代码层面的不对称是确定的(上面的 slice 顺序)。触发它需要一条元数据:同一 list_item 位置上 2 个以上 variant: 'primary' 动作,且靠前那个带 visible。
- 「2 个 primary」这个形态确实存在且是既有测试的原始动因:
RowActionMenu.test.tsx 的文件注释记录 cloud sys_environment 列表声明了两个 primary(Open + Upgrade Plan),maxInlineActions 默认 1 的行为就是为它加的。
- 但我没有核实
Open 是否带 visible 谓词,所以「今天是否有用户真的撞到」未经证实。严重度请分诊裁定;只是按「发现即如实立单」处理,不自行判小。
与相邻单的关系
建议范围
packages/plugin-grid/src/components/RowActionMenu.tsx + 该包测试。若采纳,planRowActionMenu 已经在算存活 primaries(plan.inline),槽位改按存活分配是这个函数内部的一处调整,无新增求值成本。
Generated by Claude Code
顺带发现,非任何在飞 PR 的范围内(发现于 objectui#3562 / PR #3761 的实现过程中,那一单的裁定明确只管「触发器是否渲染」,不管「某一项渲染在哪里」,故未在该 PR 修)。
现象
packages/plugin-grid/src/components/RowActionMenu.tsx:inline 槽位的分配跑在声明序上,在任何visible谓词求值之前。于是当一行有 2 个以上
variant: 'primary'动作、且排在前面的那个的visible对这一行不成立时:RowActionInlineButton对它return null,槽位空转);menuDefs里,只能渲染进「⋮」溢出菜单。结果:这一行明明只有一个可见的 primary,
maxInlineActions也允许 1 个 inline,但用户看到的是「没有 inline 按钮 + 一个要点开才看得到主操作的 ⋮」。行的主 CTA 被藏进了溢出菜单。期望
槽位应当分配给存活的 primaries:
inlineDefs取存活 primaries 的前maxInlineActions个,其余(含存活的溢出部分)落进菜单。可达性(诚实说明,未在真实元数据上复现)
代码层面的不对称是确定的(上面的 slice 顺序)。触发它需要一条元数据:同一
list_item位置上 2 个以上variant: 'primary'动作,且靠前那个带visible。RowActionMenu.test.tsx的文件注释记录 cloudsys_environment列表声明了两个 primary(Open+Upgrade Plan),maxInlineActions默认 1 的行为就是为它加的。Open是否带visible谓词,所以「今天是否有用户真的撞到」未经证实。严重度请分诊裁定;只是按「发现即如实立单」处理,不自行判小。与相邻单的关系
a suppressed primary does NOT promote the next primary into its inline slot)——修本单时需要替换那条测试的断言方向,而不是新增一条与它矛盾的。visible: false真值门):那一条是「哪些项算被设了门」,本条是「存活的项怎么排布」。两者独立,无依赖顺序。建议范围
packages/plugin-grid/src/components/RowActionMenu.tsx+ 该包测试。若采纳,planRowActionMenu已经在算存活 primaries(plan.inline),槽位改按存活分配是这个函数内部的一处调整,无新增求值成本。Generated by Claude Code