Skip to content

finding(app-shell): ActionParamDialog's isLookupParam restates the picker family over RAW param spellings, so a degraded master_detail param loses the #3405 affordances #5654

Description

@os-sales

发现于 #5312 的实施(PR 见该卡)。不在 #5312 范围内 —— 该卡的文件面只有
packages/app-shell/src/utils/paramToField.ts,且这一条不是同一条规则:#5312 收敛的是
「哪些 widget 要带 reference 目标」,这里是「哪些 param 在降级后要拿到提示」。单独立此单。

事实(实读 origin/main @ aa3b81062,与 #5312 分支 7784e137e 同树)

packages/app-shell/src/views/ActionParamDialog.tsx:351:

// A lookup-typed param that fell back to text (no referenceTo)// keeps the "paste an ID" placeholder/help hints.constisLookupParam=param.type==='lookup'||param.type==='reference';

两个读者::355 的 placeholder(actionDialog.lookupPlaceholder)与 :447 的 help text
(actionDialog.lookupHelpText)。两处都还要求 field.type === 'text',即只在降级发生
才生效。

而真正执行降级的是 packages/app-shell/src/utils/paramToField.ts,它测的是解析后的
widget key
:

constLOOKUP_WIDGET_TYPES=newSet(['lookup','master_detail']);
...
if(LOOKUP_WIDGET_TYPES.has(type)&&!param.referenceTo){/* warn + type = 'text' */}

测得的分歧

两个集合在任一方向上都不是子集关系:

拼写paramToField 降级?对话框给提示?
lookup
reference是(PARAM_TYPE_ALIASES 先折成 lookup)
master_detail
  • master_detail 只在 paramToField 一侧:一个无 referenceTomaster_detail param
    确实降级成纯文本框、确实在 dev 下告警,但对话框既不给「粘贴 ID」的 placeholder
    也不给 help text —— 恰好是 fix(fields): 注册路径的全屏长文本对话框接上 i18n(#3404) #3405 为这个状态补上的两个可见提示。用户看到的是一个没有任何
    说明、要求裸 UUID 的空文本框。
  • reference 只在对话框一侧,因为它在 paramToField 里已被 alias 折走 —— 于是这行把
    alias 表的一条内容又手抄了一遍。

master_detail 是可达的:ActionParamDef['type']string
(packages/core/src/actions/ActionRunner.ts:584),且 paramToField.test.ts 的 drift guard
断言 FORM_FIELD_TYPES 的每个成员(含 master_detail)都解析到自己的 widget。

为什么不在 #5312 里顺手修

三条都不满足「有界就地修」:① 不是同一条规则(reference-bearing vs degraded-hint);
② 没有可派生的权威 —— 正确形态是
LOOKUP_WIDGET_TYPES.has(resolveParamWidgetType(param.type)),而 LOOKUP_WIDGET_TYPES
是 surface-local 的、目前还没有导出;③ 改了会改变行为(master_detail 从此开始拿到
placeholder 与 help text),那是修复,不是机械收敛,需要单独的证据与测试。

修法方向

把这行改成读解析后的 widget key,而不是原始拼写 —— 即从 paramToField 导出降级判据
(例如 paramDegradesWithoutTarget(param)),让「谁会降级」与「谁在降级后拿提示」由同一个
判据回答,而不是两处各自维护。⛔ 不要反过来把 master_detail 手加进对话框那行:那是把同
一个成员集抄成第三份。

参考

Metadata

Metadata

Assignees

No one assigned

    Labels

    domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatfinding

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions