cabloy 5.1.61 → 5.1.63
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/skills/cabloy-backend-scaffold/SKILL.md +2 -0
- package/.claude/skills/cabloy-backend-scaffold/references/follow-up-checklist.md +1 -1
- package/.claude/skills/cabloy-domain-planning/SKILL.md +212 -0
- package/.claude/skills/cabloy-frontend-scaffold/SKILL.md +2 -0
- package/CHANGELOG.md +55 -0
- package/CLAUDE.md +1 -0
- package/cabloy-docs/.vitepress/config.mjs +158 -12
- package/cabloy-docs/ai/docs-skills-rules-mapping.md +8 -0
- package/cabloy-docs/ai/future-skill-roadmap.md +2 -0
- package/cabloy-docs/ai/skills.md +1 -0
- package/cabloy-docs/backend/backend-contract-emission-output-inspection.md +189 -0
- package/cabloy-docs/backend/backend-contract-emission-source-reading-map.md +160 -0
- package/cabloy-docs/backend/backend-contract-emission-specimen.md +170 -0
- package/cabloy-docs/backend/backend-resource-module-contract-chain.md +323 -0
- package/cabloy-docs/backend/backend-source-reading-debug-checklist.md +173 -0
- package/cabloy-docs/backend/backend-source-reading-roadmap.md +129 -0
- package/cabloy-docs/backend/backend-source-reading-verify-playbook.md +166 -0
- package/cabloy-docs/backend/bean-scene-authoring.md +4 -4
- package/cabloy-docs/backend/broadcast-guide.md +3 -3
- package/cabloy-docs/backend/cli.md +20 -11
- package/cabloy-docs/backend/config-guide.md +4 -4
- package/cabloy-docs/backend/controller-aop-guide.md +10 -10
- package/cabloy-docs/backend/controller-guide.md +12 -2
- package/cabloy-docs/backend/crud-workflow.md +7 -3
- package/cabloy-docs/backend/dto-guide.md +12 -2
- package/cabloy-docs/backend/dto-infer-generation.md +201 -25
- package/cabloy-docs/backend/election-guide.md +2 -2
- package/cabloy-docs/backend/entity-guide.md +12 -3
- package/cabloy-docs/backend/error-guide.md +3 -3
- package/cabloy-docs/backend/event-guide.md +4 -4
- package/cabloy-docs/backend/external-aop-guide.md +2 -2
- package/cabloy-docs/backend/field-indexes.md +9 -3
- package/cabloy-docs/backend/foundation.md +8 -8
- package/cabloy-docs/backend/i18n-guide.md +6 -6
- package/cabloy-docs/backend/internal-aop-guide.md +2 -2
- package/cabloy-docs/backend/introduction.md +13 -0
- package/cabloy-docs/backend/migration-and-changes.md +3 -3
- package/cabloy-docs/backend/model-guide.md +16 -6
- package/cabloy-docs/backend/openapi-guide.md +3 -0
- package/cabloy-docs/backend/queue-guide.md +3 -3
- package/cabloy-docs/backend/redlock-guide.md +2 -2
- package/cabloy-docs/backend/schedule-guide.md +2 -2
- package/cabloy-docs/backend/scripts.md +8 -0
- package/cabloy-docs/backend/serialization-guide.md +2 -2
- package/cabloy-docs/backend/service-guide.md +18 -9
- package/cabloy-docs/backend/startup-guide.md +5 -5
- package/cabloy-docs/backend/status-guide.md +7 -7
- package/cabloy-docs/backend/unit-testing.md +3 -3
- package/cabloy-docs/backend/vona-source-reading-map.md +157 -0
- package/cabloy-docs/backend/websocket-protocol-guide.md +5 -5
- package/cabloy-docs/backend/websocket-usage-guide.md +15 -8
- package/cabloy-docs/frontend/a-model-under-the-hood.md +281 -0
- package/cabloy-docs/frontend/a-openapi-under-the-hood.md +248 -0
- package/cabloy-docs/frontend/a-router-guide.md +307 -0
- package/cabloy-docs/frontend/api-guide.md +4 -4
- package/cabloy-docs/frontend/api-schema-guide.md +1 -0
- package/cabloy-docs/frontend/app-startup-guide.md +7 -4
- package/cabloy-docs/frontend/bean-scene-authoring.md +1 -1
- package/cabloy-docs/frontend/behavior-guide.md +16 -16
- package/cabloy-docs/frontend/cli.md +5 -5
- package/cabloy-docs/frontend/command-scene-authoring.md +17 -8
- package/cabloy-docs/frontend/component-guide.md +5 -5
- package/cabloy-docs/frontend/component-props-guide.md +1 -1
- package/cabloy-docs/frontend/component-v-model-guide.md +2 -2
- package/cabloy-docs/frontend/filter-query-select-data-flow-guide.md +260 -0
- package/cabloy-docs/frontend/form-guide.md +27 -30
- package/cabloy-docs/frontend/form-scene-to-page-meta-guide.md +303 -0
- package/cabloy-docs/frontend/foundation.md +10 -6
- package/cabloy-docs/frontend/frontend-source-reading-roadmap.md +249 -0
- package/cabloy-docs/frontend/generated-contract-consumption-debug-checklist.md +190 -0
- package/cabloy-docs/frontend/generated-contract-consumption-entry-branch.md +205 -0
- package/cabloy-docs/frontend/generated-contract-consumption-list-branch.md +157 -0
- package/cabloy-docs/frontend/generated-contract-consumption-specimen.md +203 -0
- package/cabloy-docs/frontend/generated-contract-consumption-verify-playbook.md +189 -0
- package/cabloy-docs/frontend/generic-component-guide.md +1 -1
- package/cabloy-docs/frontend/introduction.md +29 -7
- package/cabloy-docs/frontend/model-architecture.md +38 -2
- package/cabloy-docs/frontend/model-resource-cookbook.md +11 -8
- package/cabloy-docs/frontend/model-resource-internals-deep-dive.md +238 -0
- package/cabloy-docs/frontend/model-resource-owner-pattern.md +22 -2
- package/cabloy-docs/frontend/model-resource-usage-guide.md +22 -6
- package/cabloy-docs/frontend/model-state-guide.md +12 -9
- package/cabloy-docs/frontend/module-scope.md +8 -8
- package/cabloy-docs/frontend/modules-and-suites.md +2 -1
- package/cabloy-docs/frontend/navigation-guards-guide.md +7 -0
- package/cabloy-docs/frontend/openapi-sdk-guide.md +12 -4
- package/cabloy-docs/frontend/page-guide.md +9 -9
- package/cabloy-docs/frontend/page-meta-guide.md +466 -0
- package/cabloy-docs/frontend/page-params-guide.md +3 -3
- package/cabloy-docs/frontend/page-query-guide.md +2 -2
- package/cabloy-docs/frontend/page-route-guide.md +6 -0
- package/cabloy-docs/frontend/permission-formscene-action-visibility-guide.md +263 -0
- package/cabloy-docs/frontend/quickstart.md +14 -2
- package/cabloy-docs/frontend/resource-entry-page-deep-dive.md +271 -0
- package/cabloy-docs/frontend/resource-list-page-deep-dive.md +279 -0
- package/cabloy-docs/frontend/rest-resource-source-reading-map.md +522 -0
- package/cabloy-docs/frontend/rest-resource-under-the-hood.md +622 -0
- package/cabloy-docs/frontend/root-behaviors-guide.md +282 -0
- package/cabloy-docs/frontend/route-alias-guide.md +6 -0
- package/cabloy-docs/frontend/router-stack-guide.md +229 -0
- package/cabloy-docs/frontend/router-tabs-introduction.md +26 -3
- package/cabloy-docs/frontend/router-tabs-layout-integration.md +367 -0
- package/cabloy-docs/frontend/router-tabs-mechanism.md +6 -0
- package/cabloy-docs/frontend/router-tabs-route-meta-cookbook.md +7 -0
- package/cabloy-docs/frontend/router-tabs-vs-stack.md +167 -0
- package/cabloy-docs/frontend/router-view-hosts-guide.md +450 -0
- package/cabloy-docs/frontend/server-data.md +2 -1
- package/cabloy-docs/frontend/system-startup-guide.md +2 -2
- package/cabloy-docs/frontend/table-action-visibility-permission-flow-guide.md +263 -0
- package/cabloy-docs/frontend/table-cell-cookbook.md +571 -0
- package/cabloy-docs/frontend/table-guide.md +373 -0
- package/cabloy-docs/frontend/table-resource-crud-cookbook.md +496 -0
- package/cabloy-docs/frontend/zova-app-guide.md +251 -0
- package/cabloy-docs/frontend/zova-form-source-reading-map.md +7 -9
- package/cabloy-docs/frontend/zova-form-under-the-hood.md +5 -0
- package/cabloy-docs/frontend/zova-router-under-the-hood.md +561 -0
- package/cabloy-docs/frontend/zova-source-reading-map.md +101 -7
- package/cabloy-docs/frontend/zova-table-controller-render-supplement.md +225 -0
- package/cabloy-docs/frontend/zova-table-source-reading-map.md +317 -0
- package/cabloy-docs/frontend/zova-table-under-the-hood.md +532 -0
- package/cabloy-docs/fullstack/backend-metadata-to-frontend-table-actions-debug-checklist.md +245 -0
- package/cabloy-docs/fullstack/backend-metadata-to-frontend-table-actions-source-reading-map.md +139 -0
- package/cabloy-docs/fullstack/backend-metadata-to-frontend-table-actions-verify-playbook.md +248 -0
- package/cabloy-docs/fullstack/backend-metadata-to-frontend-table-actions.md +511 -0
- package/cabloy-docs/fullstack/contract-loop-playbook.md +8 -2
- package/cabloy-docs/fullstack/edition-collaboration-differences.md +6 -0
- package/cabloy-docs/fullstack/frontend-metadata-to-backend.md +181 -48
- package/cabloy-docs/fullstack/introduction.md +3 -0
- package/cabloy-docs/fullstack/openapi-to-sdk.md +116 -2
- package/cabloy-docs/fullstack/suites-and-modules.md +333 -0
- package/cabloy-docs/fullstack/tutorial-1-first-module.md +3 -0
- package/cabloy-docs/fullstack/tutorial-2-first-crud.md +4 -0
- package/cabloy-docs/fullstack/tutorial-3-frontend-metadata-sharing.md +4 -0
- package/cabloy-docs/fullstack/tutorial-4-custom-level-renderers.md +31 -19
- package/cabloy-docs/fullstack/tutorial-5-backend-contract-sharing.md +5 -0
- package/cabloy-docs/fullstack/tutorial-6-one-contract-four-uses.md +4 -0
- package/cabloy-docs/fullstack/tutorials-overview.md +1 -1
- package/cabloy-docs/reference/bean-scene-boilerplates.md +13 -13
- package/cabloy-docs/reference/package-map.md +4 -3
- package/package.json +1 -1
- package/vona/pnpm-lock.yaml +22 -258
- package/vona/src/suite/a-training/modules/training-student/package.json +53 -0
- package/vona/src/suite/a-training/modules/training-student/src/.metadata/index.ts +400 -0
- package/vona/src/suite/a-training/modules/training-student/src/.metadata/locales.ts +18 -0
- package/vona/src/suite/a-training/modules/training-student/src/.metadata/this.ts +2 -0
- package/vona/src/suite/a-training/modules/training-student/src/bean/meta.index.ts +12 -0
- package/vona/src/suite/a-training/modules/training-student/src/bean/meta.version.ts +21 -0
- package/vona/src/suite/a-training/modules/training-student/src/bean/ssrMenu.student.ts +29 -0
- package/vona/src/suite/a-training/modules/training-student/src/config/locale/en-us.ts +15 -0
- package/vona/src/suite/a-training/modules/training-student/src/config/locale/zh-cn.ts +15 -0
- package/vona/src/suite/a-training/modules/training-student/src/controller/student.ts +74 -0
- package/vona/src/suite/a-training/modules/training-student/src/dto/studentCreate.tsx +28 -0
- package/vona/src/suite/a-training/modules/training-student/src/dto/studentSelectReq.tsx +44 -0
- package/vona/src/suite/a-training/modules/training-student/src/dto/studentSelectRes.tsx +11 -0
- package/vona/src/suite/a-training/modules/training-student/src/dto/studentSelectResItem.tsx +45 -0
- package/vona/src/suite/a-training/modules/training-student/src/dto/studentSummary.tsx +42 -0
- package/vona/src/suite/a-training/modules/training-student/src/dto/studentUpdate.tsx +28 -0
- package/vona/src/suite/a-training/modules/training-student/src/dto/studentView.tsx +25 -0
- package/vona/src/suite/a-training/modules/training-student/src/entity/student.tsx +84 -0
- package/vona/src/suite/a-training/modules/training-student/src/index.ts +2 -0
- package/vona/src/suite/a-training/modules/training-student/src/model/student.ts +10 -0
- package/vona/src/suite/a-training/modules/training-student/src/service/student.ts +57 -0
- package/vona/src/suite/a-training/modules/training-student/test/student.test.ts +173 -0
- package/vona/src/suite/a-training/modules/training-student/tsconfig.build.json +11 -0
- package/vona/src/suite/a-training/modules/training-student/tsconfig.json +7 -0
- package/vona/src/suite/a-training/package.json +12 -0
- package/vona/src/suite/a-training/tsconfig.base.json +4 -0
- package/vona/src/suite/a-training/tsconfig.json +10 -0
- package/zova/packages-zova/zova/package.json +2 -2
- package/zova/pnpm-lock.yaml +423 -682
- package/zova/src/suite/a-demo/modules/demo-basic/src/page/toolOne/render.tsx +5 -3
- package/zova/src/suite/a-home/modules/home-login/src/page/login/render.tsx +5 -3
- package/zova/src/suite/a-training/modules/training-student/cli/openapi.config.ts +9 -0
- package/zova/src/suite/a-training/modules/training-student/package.json +57 -0
- package/zova/src/suite/a-training/modules/training-student/src/.metadata/component/formFieldLevel.ts +31 -0
- package/zova/src/suite/a-training/modules/training-student/src/.metadata/index.ts +258 -0
- package/zova/src/suite/a-training/modules/training-student/src/.metadata/locales.ts +7 -0
- package/zova/src/suite/a-training/modules/training-student/src/.metadata/this.ts +2 -0
- package/zova/src/suite/a-training/modules/training-student/src/api/openapi/baseURL.ts +5 -0
- package/zova/src/suite/a-training/modules/training-student/src/api/openapi/index.ts +3 -0
- package/zova/src/suite/a-training/modules/training-student/src/api/openapi/schemas.ts +196 -0
- package/zova/src/suite/a-training/modules/training-student/src/api/openapi/types.ts +4146 -0
- package/zova/src/suite/a-training/modules/training-student/src/api/trainingStudent.ts +151 -0
- package/zova/src/suite/a-training/modules/training-student/src/apiSchema/trainingStudent.ts +43 -0
- package/zova/src/suite/a-training/modules/training-student/src/bean/tableCell.actionDeleteForce.tsx +53 -0
- package/zova/src/suite/a-training/modules/training-student/src/bean/tableCell.actionSummary.tsx +56 -0
- package/zova/src/suite/a-training/modules/training-student/src/bean/tableCell.level.tsx +63 -0
- package/zova/src/suite/a-training/modules/training-student/src/component/formFieldLevel/controller.tsx +117 -0
- package/zova/src/suite/a-training/modules/training-student/src/config/locale/en-us.ts +9 -0
- package/zova/src/suite/a-training/modules/training-student/src/config/locale/zh-cn.ts +9 -0
- package/zova/src/suite/a-training/modules/training-student/src/index.ts +2 -0
- package/zova/src/suite/a-training/modules/training-student/src/model/student.ts +42 -0
- package/zova/src/suite/a-training/modules/training-student/tsconfig.build.json +13 -0
- package/zova/src/suite/a-training/modules/training-student/tsconfig.json +5 -0
- package/zova/src/suite/a-training/package.json +12 -0
- package/zova/src/suite/a-training/tsconfig.base.json +4 -0
- package/zova/src/suite/a-training/tsconfig.json +4 -0
- package/zova/src/suite/cabloy-basic/modules/basic-app/package.json +60 -0
- package/zova/src/suite/cabloy-basic/modules/basic-app/src/.metadata/index.ts +137 -0
- package/zova/src/suite/cabloy-basic/modules/basic-app/src/.metadata/locales.ts +7 -0
- package/zova/src/suite/cabloy-basic/modules/basic-app/src/.metadata/this.ts +2 -0
- package/zova/src/suite/cabloy-basic/modules/basic-app/src/bean/behavior.appModal.tsx +260 -0
- package/zova/src/suite/cabloy-basic/modules/basic-app/src/config/config.ts +39 -0
- package/zova/src/suite/cabloy-basic/modules/basic-app/src/config/locale/en-us.ts +7 -0
- package/zova/src/suite/cabloy-basic/modules/basic-app/src/config/locale/zh-cn.ts +7 -0
- package/zova/src/suite/cabloy-basic/modules/basic-app/src/index.ts +4 -0
- package/zova/src/suite/cabloy-basic/modules/basic-app/src/lib/appModalItem.ts +16 -0
- package/zova/src/suite/cabloy-basic/modules/basic-app/src/lib/index.ts +1 -0
- package/zova/src/suite/cabloy-basic/modules/basic-app/src/monkey.ts +38 -0
- package/zova/src/suite/cabloy-basic/modules/basic-app/src/monkeySys.ts +14 -0
- package/zova/src/suite/cabloy-basic/modules/basic-app/src/service/appModal.ts +89 -0
- package/zova/src/suite/cabloy-basic/modules/basic-app/src/types/appModal.ts +52 -0
- package/zova/src/suite/cabloy-basic/modules/basic-app/src/types/index.ts +1 -0
- package/zova/src/suite/cabloy-basic/modules/basic-app/tsconfig.build.json +13 -0
- package/zova/src/suite/cabloy-basic/modules/basic-app/tsconfig.json +5 -0
- package/zova/src/suite/cabloy-basic/modules/basic-commands/package.json +6 -1
- package/zova/src/suite/cabloy-basic/modules/basic-commands/src/.metadata/index.ts +16 -0
- package/zova/src/suite/cabloy-basic/modules/basic-commands/src/bean/command.alert.tsx +8 -14
- package/zova/src/suite/cabloy-basic/modules/basic-commands/src/bean/command.confirm.tsx +10 -7
- package/zova/src/suite/cabloy-basic/modules/basic-commands/src/bean/command.prompt.tsx +30 -0
- package/zova/src/suite/cabloy-basic/modules/basic-pageentry/src/component/blockForm/controller.tsx +5 -3
- package/zova/src/suite/cabloy-basic/modules/basic-select/src/component/formFieldSelect/controller.tsx +29 -7
- package/zova/src/suite/cabloy-basic/modules/basic-select/src/component/select/controller.tsx +34 -11
- package/zova/src/suite/cabloy-basic/modules/basic-table/package.json +6 -1
- package/zova/src/suite/cabloy-basic/modules/basic-table/src/bean/tableCell.actionDelete.tsx +4 -2
- package/zova/src/suite/cabloy-basic/package.json +1 -0
- package/zova/src/suite-vendor/a-zova/modules/a-table/package.json +1 -1
- package/zova/src/suite-vendor/a-zova/modules/a-table/src/component/table/controller.tsx +3 -3
- package/zova/src/suite-vendor/a-zova/modules/a-table/src/lib/tableCell.ts +1 -1
- package/zova/src/suite-vendor/a-zova/package.json +2 -2
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
# Resource List Page Deep Dive
|
|
2
|
+
|
|
3
|
+
This guide explains the runtime path of a resource list page in Zova through the current public Cabloy Basic source.
|
|
4
|
+
|
|
5
|
+
Use this page when you want to understand:
|
|
6
|
+
|
|
7
|
+
- how a `/rest/resource/:resource` route becomes a working list page
|
|
8
|
+
- where the thin `rest-resource` list shell stops
|
|
9
|
+
- how `basic-page:blockPage` takes over the deeper list runtime
|
|
10
|
+
- where `blockFilter`, `blockTable`, and `blockPager` fit into that runtime
|
|
11
|
+
- how `ZTable` and `ModelResource` cooperate under the list-page shell
|
|
12
|
+
|
|
13
|
+
## Why this page exists
|
|
14
|
+
|
|
15
|
+
Several existing docs already explain important parts of the story:
|
|
16
|
+
|
|
17
|
+
- [Generated Contract Consumption: List Branch](/frontend/generated-contract-consumption-list-branch) explains the consumer-side handoff before the deeper runtime begins
|
|
18
|
+
- [Rest Resource Under the Hood](/frontend/rest-resource-under-the-hood) explains the module-level runtime bridge
|
|
19
|
+
- [Rest Resource Source Reading Map](/frontend/rest-resource-source-reading-map) explains the shortest file path into the module
|
|
20
|
+
- [Table Guide](/frontend/table-guide) and [Zova Table Under the Hood](/frontend/zova-table-under-the-hood) explain the table runtime
|
|
21
|
+
- [Table + Resource CRUD Cookbook](/frontend/table-resource-crud-cookbook) explains authoring-oriented CRUD assembly
|
|
22
|
+
|
|
23
|
+
What those pages do not isolate directly is the one cohesive list-page runtime path from route entry into the deeper Basic page and table runtime.
|
|
24
|
+
|
|
25
|
+
That is the gap this page fills.
|
|
26
|
+
|
|
27
|
+
## The shortest accurate mental model
|
|
28
|
+
|
|
29
|
+
A practical mental model is:
|
|
30
|
+
|
|
31
|
+
1. `rest-resource` declares the generic resource list route
|
|
32
|
+
2. a generated page wrapper binds that route to `ControllerPageResource`
|
|
33
|
+
3. `ControllerPageResource` is a thin shell that resolves the current `resource`, loads top-level schema state, and renders `schemaRow.rest.blocks`
|
|
34
|
+
4. those blocks usually enter `basic-page:blockPage`
|
|
35
|
+
5. `blockPage` becomes the deeper list runtime owner for filter state, paging state, query state, and resource-backed list data
|
|
36
|
+
6. `blockFilter`, `blockTable`, and `blockPager` are specialized consumers of that shared page runtime/context
|
|
37
|
+
7. `ZTable` is the final schema-driven table runtime endpoint under that list-page runtime
|
|
38
|
+
|
|
39
|
+
That means the resource list page is not one controller doing everything. It is a route shell plus downstream reusable list/runtime blocks.
|
|
40
|
+
|
|
41
|
+
This page focuses only on the list-page branch. For the broader module-level shell-to-runtime map shared by both list and entry pages, keep [Rest Resource Source Reading Map](/frontend/rest-resource-source-reading-map) as the general reference.
|
|
42
|
+
|
|
43
|
+
## Source-confirmed reading path
|
|
44
|
+
|
|
45
|
+
When reading this topic, use this order:
|
|
46
|
+
|
|
47
|
+
1. `zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/routes.ts`
|
|
48
|
+
2. `zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/.metadata/page/resource.ts`
|
|
49
|
+
3. `zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/page/resource/controller.tsx`
|
|
50
|
+
4. `zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/model/resource.ts`
|
|
51
|
+
5. `zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockPage/controller.tsx`
|
|
52
|
+
6. `zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockFilter/controller.tsx`
|
|
53
|
+
7. `zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockTable/controller.tsx`
|
|
54
|
+
8. `zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockPager/controller.tsx`
|
|
55
|
+
9. `zova/src/suite-vendor/a-zova/modules/a-table/src/component/table/controller.tsx`
|
|
56
|
+
10. `zova/src/suite-vendor/a-zova/modules/a-table/src/component/table/render.tsx`
|
|
57
|
+
|
|
58
|
+
That order moves from public route surface, to route wrapper, to list shell, to resource owner, to deeper list runtime, and finally to the schema-driven table runtime endpoint.
|
|
59
|
+
|
|
60
|
+
## Runtime path by layer
|
|
61
|
+
|
|
62
|
+
### 1. Route list entry
|
|
63
|
+
|
|
64
|
+
The public route surface lives in:
|
|
65
|
+
|
|
66
|
+
```text
|
|
67
|
+
zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/routes.ts
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
The list route is:
|
|
71
|
+
|
|
72
|
+
- `:resource`
|
|
73
|
+
|
|
74
|
+
That already shows the public list-page contract:
|
|
75
|
+
|
|
76
|
+
- the route is generic
|
|
77
|
+
- runtime identity comes from `route.params.resource`
|
|
78
|
+
- the shared `tabKey(route)` keeps list and entry pages grouped under one resource-oriented workspace
|
|
79
|
+
|
|
80
|
+
### 2. Generated page wrapper
|
|
81
|
+
|
|
82
|
+
The list-page wrapper lives in:
|
|
83
|
+
|
|
84
|
+
```text
|
|
85
|
+
zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/.metadata/page/resource.ts
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
This file shows that the route enters runtime through the standard Zova page-controller path:
|
|
89
|
+
|
|
90
|
+
- `createZovaComponentPage(ControllerPageResource, ...)`
|
|
91
|
+
|
|
92
|
+
That means the list page still begins as a controller-oriented page surface, not as ad hoc local route code.
|
|
93
|
+
|
|
94
|
+
### 3. Thin `rest-resource` list shell
|
|
95
|
+
|
|
96
|
+
The list shell lives in:
|
|
97
|
+
|
|
98
|
+
```text
|
|
99
|
+
zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/page/resource/controller.tsx
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Its main jobs are:
|
|
103
|
+
|
|
104
|
+
- resolve the current selector-backed `ModelResource`
|
|
105
|
+
- autoload select API schemas
|
|
106
|
+
- read `schemaRow?.rest?.blocks`
|
|
107
|
+
- render those blocks through `ZovaJsx`
|
|
108
|
+
|
|
109
|
+
This is the first key architectural boundary:
|
|
110
|
+
|
|
111
|
+
- `ControllerPageResource` is a **thin list shell**
|
|
112
|
+
- it does not own the whole list runtime by itself
|
|
113
|
+
|
|
114
|
+
Its role is to interpret resource context, load top-level schema state, and let schema-defined blocks take over the deeper behavior.
|
|
115
|
+
|
|
116
|
+
### 4. `ModelResource` as the stable owner boundary
|
|
117
|
+
|
|
118
|
+
The owner model lives in:
|
|
119
|
+
|
|
120
|
+
```text
|
|
121
|
+
zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/model/resource.ts
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Its main jobs are:
|
|
125
|
+
|
|
126
|
+
- bootstrap the resource API path
|
|
127
|
+
- expose `permissions`
|
|
128
|
+
- expose schema surfaces such as `schemaFilter` and `schemaRow`
|
|
129
|
+
- expose `select(query)` for list data
|
|
130
|
+
- expose item/view/create/update/delete mutation/query helpers
|
|
131
|
+
|
|
132
|
+
This is the core owner boundary for the list page.
|
|
133
|
+
|
|
134
|
+
It is the stable resource-level runtime, even though the deeper list behavior is later assembled through Basic blocks.
|
|
135
|
+
|
|
136
|
+
### 5. `basic-page:blockPage` becomes the deeper list runtime owner
|
|
137
|
+
|
|
138
|
+
The most important current Basic list-runtime file is:
|
|
139
|
+
|
|
140
|
+
```text
|
|
141
|
+
zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockPage/controller.tsx
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
This controller becomes the deeper owner for:
|
|
145
|
+
|
|
146
|
+
- selector-backed `ModelResource`
|
|
147
|
+
- `queryFilterData`
|
|
148
|
+
- `queryPaged`
|
|
149
|
+
- computed `query`
|
|
150
|
+
- `select(this.query)` list data
|
|
151
|
+
- `schemaFilter`, `schemaRow`, and `permissions`
|
|
152
|
+
- the shared page JSX/render context (`$$page`)
|
|
153
|
+
- permission-driven table-meta refresh through `tableRef.refreshMeta()`
|
|
154
|
+
|
|
155
|
+
This is the second key architectural boundary:
|
|
156
|
+
|
|
157
|
+
- the route shell chooses the resource context
|
|
158
|
+
- `blockPage` owns the real list/runtime state after blocks are rendered
|
|
159
|
+
|
|
160
|
+
### 6. `blockFilter` consumes the shared list-page context
|
|
161
|
+
|
|
162
|
+
The filter block lives in:
|
|
163
|
+
|
|
164
|
+
```text
|
|
165
|
+
zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockFilter/controller.tsx
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
This block is a specialized consumer of the shared `$$page` runtime context.
|
|
169
|
+
|
|
170
|
+
Its role is to turn schema-driven filter UI into filter-state updates that flow back into the list-page query path.
|
|
171
|
+
|
|
172
|
+
That means filter state is not a separate unrelated subsystem. It is part of the shared list-page runtime owned by `blockPage`.
|
|
173
|
+
|
|
174
|
+
### 7. `blockTable` bridges the page runtime into `ZTable`
|
|
175
|
+
|
|
176
|
+
The table bridge lives in:
|
|
177
|
+
|
|
178
|
+
```text
|
|
179
|
+
zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockTable/controller.tsx
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
This controller consumes `$$page` and passes the canonical page-owned values into `ZTable`, including:
|
|
183
|
+
|
|
184
|
+
- `data`
|
|
185
|
+
- `schemaRow`
|
|
186
|
+
- `tableScope`
|
|
187
|
+
|
|
188
|
+
It also captures the table controller ref back onto `$$page.tableRef`.
|
|
189
|
+
|
|
190
|
+
This is the clearest proof that `blockTable` is a bridge into table runtime, not the main owner of list state.
|
|
191
|
+
|
|
192
|
+
### 8. `blockPager` consumes paged state
|
|
193
|
+
|
|
194
|
+
The pager block lives in:
|
|
195
|
+
|
|
196
|
+
```text
|
|
197
|
+
zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockPager/controller.tsx
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
Its role is to read paged state and delegate page changes back into the shared list-page runtime.
|
|
201
|
+
|
|
202
|
+
Like the filter and table blocks, it is another specialized consumer of the page runtime owned by `blockPage`.
|
|
203
|
+
|
|
204
|
+
### 9. `ZTable` is the schema-driven runtime endpoint
|
|
205
|
+
|
|
206
|
+
The deeper table endpoint lives in:
|
|
207
|
+
|
|
208
|
+
```text
|
|
209
|
+
zova/src/suite-vendor/a-zova/modules/a-table/src/component/table/controller.tsx
|
|
210
|
+
zova/src/suite-vendor/a-zova/modules/a-table/src/component/table/render.tsx
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
This table runtime:
|
|
214
|
+
|
|
215
|
+
- loads schema properties for table rendering
|
|
216
|
+
- computes table metadata and columns
|
|
217
|
+
- creates column renderers
|
|
218
|
+
- turns schema-driven row metadata into visible table output
|
|
219
|
+
|
|
220
|
+
This is the final endpoint under the list-page runtime chain.
|
|
221
|
+
|
|
222
|
+
## The shared handoff model
|
|
223
|
+
|
|
224
|
+
A useful rule is:
|
|
225
|
+
|
|
226
|
+
- the route shell resolves resource context
|
|
227
|
+
- schema-defined blocks choose which deeper list runtime pieces should appear
|
|
228
|
+
- `blockPage` becomes the shared host runtime owner
|
|
229
|
+
- `blockFilter`, `blockTable`, and `blockPager` are specialized consumers of that host-owned context
|
|
230
|
+
- `ZTable` is the final schema-driven render endpoint for rows and cells
|
|
231
|
+
|
|
232
|
+
That means the shared handoff is through `$$page`, not through scattered local page state.
|
|
233
|
+
|
|
234
|
+
## What this guide does not re-explain
|
|
235
|
+
|
|
236
|
+
This page does **not** fully re-explain:
|
|
237
|
+
|
|
238
|
+
- the internals of `ModelResource` ownership -> see [Model Resource Owner Pattern](/frontend/model-resource-owner-pattern)
|
|
239
|
+
- the internals of `ZTable` itself -> see [Zova Table Under the Hood](/frontend/zova-table-under-the-hood)
|
|
240
|
+
- table authoring recipes -> see [Table + Resource CRUD Cookbook](/frontend/table-resource-crud-cookbook)
|
|
241
|
+
|
|
242
|
+
Its job is only to explain how the list-page runtime is assembled across route shell, resource owner, Basic blocks, and table runtime.
|
|
243
|
+
|
|
244
|
+
## Debugging checklist
|
|
245
|
+
|
|
246
|
+
If a resource list page behaves unexpectedly, ask:
|
|
247
|
+
|
|
248
|
+
1. is the route resolving the expected `resource`?
|
|
249
|
+
2. is `ControllerPageResource` loading the expected `schemaRow.rest.blocks`?
|
|
250
|
+
3. is the expected `basic-page:*` block actually present in the schema?
|
|
251
|
+
4. is `blockPage` resolving the expected `ModelResource` selector state?
|
|
252
|
+
5. is filter state flowing into `queryFilterData` as expected?
|
|
253
|
+
6. is pager state flowing into `queryPaged` as expected?
|
|
254
|
+
7. is `blockTable` receiving the expected `schemaRow`, `data`, and `permissions` scope?
|
|
255
|
+
8. is table meta stale because the permission-driven refresh path is not firing where expected?
|
|
256
|
+
|
|
257
|
+
## Where to read next
|
|
258
|
+
|
|
259
|
+
Use these next steps depending on your question:
|
|
260
|
+
|
|
261
|
+
- if you want the resource module bridge: [Rest Resource Under the Hood](/frontend/rest-resource-under-the-hood)
|
|
262
|
+
- if you want the shortest source map: [Rest Resource Source Reading Map](/frontend/rest-resource-source-reading-map)
|
|
263
|
+
- if you want the owner internals behind this runtime: [ModelResource Internals Deep Dive](/frontend/model-resource-internals-deep-dive)
|
|
264
|
+
- if you want the narrower filter/query/select data path: [Filter to Query to Select Data Flow Guide](/frontend/filter-query-select-data-flow-guide)
|
|
265
|
+
- if you want the table runtime branch: [Zova Table Under the Hood](/frontend/zova-table-under-the-hood)
|
|
266
|
+
- if you want row/bulk action visibility and permission gating: [Table Action Visibility and Permission Flow Guide](/frontend/table-action-visibility-permission-flow-guide)
|
|
267
|
+
- if you want the entry-page counterpart: [Resource Entry Page Deep Dive](/frontend/resource-entry-page-deep-dive)
|
|
268
|
+
|
|
269
|
+
## Final takeaway
|
|
270
|
+
|
|
271
|
+
The most accurate way to read a resource list page in the current Basic frontend is:
|
|
272
|
+
|
|
273
|
+
- `rest-resource` list page is the thin route shell
|
|
274
|
+
- `ModelResource` is the stable owner boundary
|
|
275
|
+
- `basic-page:blockPage` owns the real list runtime
|
|
276
|
+
- `blockFilter`, `blockTable`, and `blockPager` consume the same shared page runtime context
|
|
277
|
+
- `ZTable` is the schema-driven runtime endpoint under that list-page chain
|
|
278
|
+
|
|
279
|
+
That is the source-confirmed list-page runtime path in the current Cabloy Basic frontend architecture.
|