Skip to content

[finding] preview-samples 的 page 样例没声明 type,按 spec 默认落成 record 页——但 app 样例把它当 home 用 #3454

Description

@yinlianghui

在做 #3446(PR #3453)时顺带发现,不在该 PR 范围内,单独记录。

事实

apps/console/src/preview-samples.tspage 样例只声明了 name / label / regions,没有 type:

page: {
  name: 'crm_welcome',
  label: 'CRM Welcome',
  regions: [ ... ],
},

PageSchematypePageTypeSchema.default('record')(@objectstack/spec@17.0.0-rc.2src/ui/page.zod.ts:412),所以这个样例一旦被 parse,就会落成一个 type: 'record' 且没有 object 绑定的记录页。实测(PR #3453 里让 page 进 SPEC_CLEAN 时跑的):

=== proposed VALID
  parsed page type = "record" template = "default"

而同一个文件里的 app 样例是把它当首页用的:

navigation: [
  { id: 'home', type: 'page', label: 'Home', pageName: 'crm_welcome' },
  ...
]

PageTypeSchema 里有 'home' 这一档(record | home | app | utility | list),home 也确实注册了渲染器(packages/components/src/renderers/layout/page.tsx:607,与 page 共用 PageRenderer)。所以正确的声明大概率就是 type: 'home' 一行。

为什么归为 observation 类

今天没有用户会踩到:

也就是说这是素材语义上的问题,不是运行时缺陷:样例作为"照抄这个就能用"的范本,把自己的页面种类说错了——抄的人(越来越多是生成元数据的模型)会得到一个没有绑定对象的记录页。

没有顺手改的原因

#3446 的范围是"组件类型能否在注册表里解析",而页面级 type 会改变运行时对这张页的分类(usePageAssignmenttype: 'record' 认记录页),影响面超出那个 issue;PR #3453 的 fence 也明确只允许改组件类型那一处。留给 PM 定夺。

可能的修法

page 样例加 type: 'home' 一行,并在 preview-samples-spec-valid.test.ts 复跑确认仍在 SPEC_CLEAN(风险很低:home 有渲染器,PagePreview 会把它透给 SchemaRenderer,拿到的是同一个 PageRenderer)。

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions