@nocobase/plugin-flow-engine 2.1.0-beta.2 → 2.1.0-beta.20

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.
Files changed (244) hide show
  1. package/LICENSE +201 -661
  2. package/README.md +79 -9
  3. package/dist/ai/ai-employees/nathan/index.d.ts +10 -0
  4. package/dist/ai/ai-employees/nathan/index.js +41 -0
  5. package/dist/ai/ai-employees/nathan/prompt.md +132 -0
  6. package/dist/ai/ai-employees/nathan/skills/frontend-developer/SKILLS.md +69 -0
  7. package/dist/ai/{tools → ai-employees/nathan/skills/frontend-developer/tools}/getContextApis.js +2 -2
  8. package/dist/ai/{tools → ai-employees/nathan/skills/frontend-developer/tools}/getContextEnvs.js +2 -2
  9. package/dist/ai/{tools → ai-employees/nathan/skills/frontend-developer/tools}/getContextVars.js +2 -2
  10. package/dist/ai/{tools → ai-employees/nathan/skills/frontend-developer/tools}/lintAndTestJS.js +2 -2
  11. package/dist/ai/docs/runjs/context/block-model.md +35 -35
  12. package/dist/ai/docs/runjs/context/collection-field.md +53 -51
  13. package/dist/ai/docs/runjs/context/collection.md +39 -39
  14. package/dist/ai/docs/runjs/context/data-source-manager.md +40 -30
  15. package/dist/ai/docs/runjs/context/data-source.md +52 -44
  16. package/dist/ai/docs/runjs/context/element.md +44 -38
  17. package/dist/ai/docs/runjs/context/exit-all.md +37 -35
  18. package/dist/ai/docs/runjs/context/exit.md +38 -35
  19. package/dist/ai/docs/runjs/context/filter-manager.md +36 -30
  20. package/dist/ai/docs/runjs/context/form.md +57 -57
  21. package/dist/ai/docs/runjs/context/get-model.md +22 -21
  22. package/dist/ai/docs/runjs/context/get-value.md +20 -19
  23. package/dist/ai/docs/runjs/context/get-var.md +61 -55
  24. package/dist/ai/docs/runjs/context/i18n.md +17 -14
  25. package/dist/ai/docs/runjs/context/import-async.md +333 -45
  26. package/dist/ai/docs/runjs/context/init-resource.md +20 -20
  27. package/dist/ai/docs/runjs/context/libs.md +31 -31
  28. package/dist/ai/docs/runjs/context/location.md +34 -31
  29. package/dist/ai/docs/runjs/context/logger.md +41 -40
  30. package/dist/ai/docs/runjs/context/make-resource.md +27 -26
  31. package/dist/ai/docs/runjs/context/message.md +42 -41
  32. package/dist/ai/docs/runjs/context/modal.md +44 -44
  33. package/dist/ai/docs/runjs/context/model.md +36 -33
  34. package/dist/ai/docs/runjs/context/notification.md +41 -40
  35. package/dist/ai/docs/runjs/context/off.md +14 -14
  36. package/dist/ai/docs/runjs/context/on.md +30 -29
  37. package/dist/ai/docs/runjs/context/open-view.md +40 -40
  38. package/dist/ai/docs/runjs/context/render.md +37 -32
  39. package/dist/ai/docs/runjs/context/request.md +46 -45
  40. package/dist/ai/docs/runjs/context/require-async.md +28 -25
  41. package/dist/ai/docs/runjs/context/resource.md +34 -34
  42. package/dist/ai/docs/runjs/context/route.md +36 -34
  43. package/dist/ai/docs/runjs/context/router.md +43 -31
  44. package/dist/ai/docs/runjs/context/set-value.md +18 -17
  45. package/dist/ai/docs/runjs/context/sql.md +7 -15
  46. package/dist/ai/docs/runjs/context/t.md +20 -17
  47. package/dist/ai/docs/runjs/context/view.md +49 -46
  48. package/dist/ai/docs/runjs/document.md +1 -0
  49. package/dist/ai/docs/runjs/import-modules.md +32 -32
  50. package/dist/ai/docs/runjs/index.md +13 -13
  51. package/dist/ai/docs/runjs/jsx.md +19 -19
  52. package/dist/ai/docs/runjs/model/form-block-model.md +1 -3
  53. package/dist/ai/docs/runjs/render.md +15 -15
  54. package/dist/ai/docs/runjs/resource/api-resource.md +53 -53
  55. package/dist/ai/docs/runjs/resource/multi-record-resource.md +64 -64
  56. package/dist/ai/docs/runjs/resource/single-record-resource.md +55 -55
  57. package/dist/ai/docs/runjs/resource/sql-resource.md +57 -57
  58. package/dist/ai/docs/runjs/window.md +5 -5
  59. package/dist/client/index.js +1 -1
  60. package/dist/externalVersion.js +12 -11
  61. package/dist/locale/en-US.json +1 -0
  62. package/dist/locale/index.d.ts +2 -0
  63. package/dist/locale/zh-CN.json +1 -0
  64. package/dist/node_modules/ses/dist/ses.cjs +1 -1
  65. package/dist/node_modules/ses/package.json +1 -1
  66. package/dist/node_modules/zod/index.cjs +1 -1
  67. package/dist/node_modules/zod/package.json +1 -1
  68. package/dist/server/collections/flowsql.js +1 -0
  69. package/dist/server/flow-surfaces/action-scope.d.ts +39 -0
  70. package/dist/server/flow-surfaces/action-scope.js +156 -0
  71. package/dist/server/flow-surfaces/apply/compiler.d.ts +13 -0
  72. package/dist/server/flow-surfaces/apply/compiler.js +969 -0
  73. package/dist/server/flow-surfaces/apply/layout.d.ts +34 -0
  74. package/dist/server/flow-surfaces/apply/layout.js +175 -0
  75. package/dist/server/flow-surfaces/apply/matching.d.ts +16 -0
  76. package/dist/server/flow-surfaces/apply/matching.js +181 -0
  77. package/dist/server/flow-surfaces/approval/blueprint-service.d.ts +84 -0
  78. package/dist/server/flow-surfaces/approval/blueprint-service.js +589 -0
  79. package/dist/server/flow-surfaces/approval/blueprint.d.ts +21 -0
  80. package/dist/server/flow-surfaces/approval/blueprint.js +187 -0
  81. package/dist/server/flow-surfaces/approval/builder.d.ts +225 -0
  82. package/dist/server/flow-surfaces/approval/builder.js +384 -0
  83. package/dist/server/flow-surfaces/approval/catalog-specs.d.ts +33 -0
  84. package/dist/server/flow-surfaces/approval/catalog-specs.js +156 -0
  85. package/dist/server/flow-surfaces/approval/index.d.ts +14 -0
  86. package/dist/server/flow-surfaces/approval/index.js +40 -0
  87. package/dist/server/flow-surfaces/approval/runtime-config.d.ts +44 -0
  88. package/dist/server/flow-surfaces/approval/runtime-config.js +299 -0
  89. package/dist/server/flow-surfaces/approval/semantic-use.d.ts +23 -0
  90. package/dist/server/flow-surfaces/approval/semantic-use.js +155 -0
  91. package/dist/server/flow-surfaces/association-title-field.d.ts +20 -0
  92. package/dist/server/flow-surfaces/association-title-field.js +192 -0
  93. package/dist/server/flow-surfaces/blueprint/compile-blocks.d.ts +14 -0
  94. package/dist/server/flow-surfaces/blueprint/compile-blocks.js +1029 -0
  95. package/dist/server/flow-surfaces/blueprint/compile-plan.d.ts +13 -0
  96. package/dist/server/flow-surfaces/blueprint/compile-plan.js +308 -0
  97. package/dist/server/flow-surfaces/blueprint/compile-reaction.d.ts +11 -0
  98. package/dist/server/flow-surfaces/blueprint/compile-reaction.js +72 -0
  99. package/dist/server/flow-surfaces/blueprint/defaults.d.ts +26 -0
  100. package/dist/server/flow-surfaces/blueprint/defaults.js +133 -0
  101. package/dist/server/flow-surfaces/blueprint/index.d.ts +12 -0
  102. package/dist/server/flow-surfaces/blueprint/index.js +44 -0
  103. package/dist/server/flow-surfaces/blueprint/normalize-document.d.ts +10 -0
  104. package/dist/server/flow-surfaces/blueprint/normalize-document.js +416 -0
  105. package/dist/server/flow-surfaces/blueprint/private-utils.d.ts +26 -0
  106. package/dist/server/flow-surfaces/blueprint/private-utils.js +182 -0
  107. package/dist/server/flow-surfaces/blueprint/public-types.d.ts +193 -0
  108. package/dist/server/flow-surfaces/blueprint/public-types.js +24 -0
  109. package/dist/server/flow-surfaces/builder.d.ts +211 -0
  110. package/dist/server/flow-surfaces/builder.js +1097 -0
  111. package/dist/server/flow-surfaces/catalog-smart.d.ts +18 -0
  112. package/dist/server/flow-surfaces/catalog-smart.js +239 -0
  113. package/dist/server/flow-surfaces/catalog-smart.projector.d.ts +15 -0
  114. package/dist/server/flow-surfaces/catalog-smart.projector.js +157 -0
  115. package/dist/server/flow-surfaces/catalog-smart.types.d.ts +99 -0
  116. package/dist/server/flow-surfaces/catalog-smart.types.js +24 -0
  117. package/dist/server/flow-surfaces/catalog.d.ts +78 -0
  118. package/dist/server/flow-surfaces/catalog.js +3577 -0
  119. package/dist/server/flow-surfaces/chart-config.d.ts +121 -0
  120. package/dist/server/flow-surfaces/chart-config.js +1394 -0
  121. package/dist/server/flow-surfaces/compose-compiler.d.ts +108 -0
  122. package/dist/server/flow-surfaces/compose-compiler.js +167 -0
  123. package/dist/server/flow-surfaces/compose-runtime.d.ts +93 -0
  124. package/dist/server/flow-surfaces/compose-runtime.js +375 -0
  125. package/dist/server/flow-surfaces/configure-options.d.ts +23 -0
  126. package/dist/server/flow-surfaces/configure-options.js +860 -0
  127. package/dist/server/flow-surfaces/constants.d.ts +351 -0
  128. package/dist/server/flow-surfaces/constants.js +104 -0
  129. package/dist/server/flow-surfaces/context.d.ts +72 -0
  130. package/dist/server/flow-surfaces/context.js +556 -0
  131. package/dist/server/flow-surfaces/contract-guard.d.ts +19 -0
  132. package/dist/server/flow-surfaces/contract-guard.js +402 -0
  133. package/dist/server/flow-surfaces/core-field-default-bindings.d.ts +12 -0
  134. package/dist/server/flow-surfaces/core-field-default-bindings.js +157 -0
  135. package/dist/server/flow-surfaces/default-action-popup.d.ts +63 -0
  136. package/dist/server/flow-surfaces/default-action-popup.js +322 -0
  137. package/dist/server/flow-surfaces/default-block-actions.d.ts +32 -0
  138. package/dist/server/flow-surfaces/default-block-actions.js +209 -0
  139. package/dist/server/flow-surfaces/errors.d.ts +47 -0
  140. package/dist/server/flow-surfaces/errors.js +145 -0
  141. package/dist/server/flow-surfaces/executor.d.ts +23 -0
  142. package/dist/server/flow-surfaces/executor.js +132 -0
  143. package/dist/server/flow-surfaces/field-binding-registry.d.ts +23 -0
  144. package/dist/server/flow-surfaces/field-binding-registry.js +391 -0
  145. package/dist/server/flow-surfaces/field-semantics.d.ts +15 -0
  146. package/dist/server/flow-surfaces/field-semantics.js +83 -0
  147. package/dist/server/flow-surfaces/filter-group.d.ts +15 -0
  148. package/dist/server/flow-surfaces/filter-group.js +94 -0
  149. package/dist/server/flow-surfaces/index.d.ts +11 -0
  150. package/dist/server/flow-surfaces/index.js +302 -0
  151. package/dist/server/flow-surfaces/locator.d.ts +28 -0
  152. package/dist/server/flow-surfaces/locator.js +240 -0
  153. package/dist/server/flow-surfaces/node-use-sets.d.ts +15 -0
  154. package/dist/server/flow-surfaces/node-use-sets.js +134 -0
  155. package/dist/server/flow-surfaces/payload-shape.d.ts +9 -0
  156. package/dist/server/flow-surfaces/payload-shape.js +61 -0
  157. package/dist/server/flow-surfaces/placement.d.ts +33 -0
  158. package/dist/server/flow-surfaces/placement.js +198 -0
  159. package/dist/server/flow-surfaces/planning/action-specs.d.ts +179 -0
  160. package/dist/server/flow-surfaces/planning/action-specs.js +190 -0
  161. package/dist/server/flow-surfaces/planning/compiler.d.ts +37 -0
  162. package/dist/server/flow-surfaces/planning/compiler.js +376 -0
  163. package/dist/server/flow-surfaces/planning/context.d.ts +30 -0
  164. package/dist/server/flow-surfaces/planning/context.js +139 -0
  165. package/dist/server/flow-surfaces/planning/created-keys.d.ts +34 -0
  166. package/dist/server/flow-surfaces/planning/created-keys.js +375 -0
  167. package/dist/server/flow-surfaces/planning/key-kind.d.ts +11 -0
  168. package/dist/server/flow-surfaces/planning/key-kind.js +88 -0
  169. package/dist/server/flow-surfaces/planning/key-persistence.d.ts +34 -0
  170. package/dist/server/flow-surfaces/planning/key-persistence.js +148 -0
  171. package/dist/server/flow-surfaces/planning/key-registry.d.ts +40 -0
  172. package/dist/server/flow-surfaces/planning/key-registry.js +206 -0
  173. package/dist/server/flow-surfaces/planning/runtime.d.ts +37 -0
  174. package/dist/server/flow-surfaces/planning/runtime.js +259 -0
  175. package/dist/server/flow-surfaces/planning/step-link.d.ts +14 -0
  176. package/dist/server/flow-surfaces/planning/step-link.js +104 -0
  177. package/dist/server/flow-surfaces/planning/types.d.ts +55 -0
  178. package/dist/server/flow-surfaces/planning/types.js +24 -0
  179. package/dist/server/flow-surfaces/public-data-surface-default-filter.d.ts +24 -0
  180. package/dist/server/flow-surfaces/public-data-surface-default-filter.js +152 -0
  181. package/dist/server/flow-surfaces/reaction/errors.d.ts +20 -0
  182. package/dist/server/flow-surfaces/reaction/errors.js +69 -0
  183. package/dist/server/flow-surfaces/reaction/field-value.d.ts +34 -0
  184. package/dist/server/flow-surfaces/reaction/field-value.js +181 -0
  185. package/dist/server/flow-surfaces/reaction/fingerprint.d.ts +16 -0
  186. package/dist/server/flow-surfaces/reaction/fingerprint.js +71 -0
  187. package/dist/server/flow-surfaces/reaction/linkage.d.ts +136 -0
  188. package/dist/server/flow-surfaces/reaction/linkage.js +882 -0
  189. package/dist/server/flow-surfaces/reaction/meta.d.ts +11 -0
  190. package/dist/server/flow-surfaces/reaction/meta.js +451 -0
  191. package/dist/server/flow-surfaces/reaction/registry.d.ts +156 -0
  192. package/dist/server/flow-surfaces/reaction/registry.js +206 -0
  193. package/dist/server/flow-surfaces/reaction/resolver.d.ts +22 -0
  194. package/dist/server/flow-surfaces/reaction/resolver.js +202 -0
  195. package/dist/server/flow-surfaces/reaction/types.d.ts +241 -0
  196. package/dist/server/flow-surfaces/reaction/types.js +24 -0
  197. package/dist/server/flow-surfaces/reaction/utils.d.ts +17 -0
  198. package/dist/server/flow-surfaces/reaction/utils.js +67 -0
  199. package/dist/server/flow-surfaces/reaction/value-expr.d.ts +15 -0
  200. package/dist/server/flow-surfaces/reaction/value-expr.js +209 -0
  201. package/dist/server/flow-surfaces/reference-guards.d.ts +19 -0
  202. package/dist/server/flow-surfaces/reference-guards.js +103 -0
  203. package/dist/server/flow-surfaces/route-sync.d.ts +47 -0
  204. package/dist/server/flow-surfaces/route-sync.js +392 -0
  205. package/dist/server/flow-surfaces/service-helpers.d.ts +42 -0
  206. package/dist/server/flow-surfaces/service-helpers.js +310 -0
  207. package/dist/server/flow-surfaces/service-utils.d.ts +108 -0
  208. package/dist/server/flow-surfaces/service-utils.js +811 -0
  209. package/dist/server/flow-surfaces/service.d.ts +814 -0
  210. package/dist/server/flow-surfaces/service.js +14276 -0
  211. package/dist/server/flow-surfaces/support-matrix.d.ts +31 -0
  212. package/dist/server/flow-surfaces/support-matrix.js +271 -0
  213. package/dist/server/flow-surfaces/surface-context.d.ts +52 -0
  214. package/dist/server/flow-surfaces/surface-context.js +440 -0
  215. package/dist/server/flow-surfaces/template-compatibility.d.ts +42 -0
  216. package/dist/server/flow-surfaces/template-compatibility.js +189 -0
  217. package/dist/server/flow-surfaces/template-display.d.ts +20 -0
  218. package/dist/server/flow-surfaces/template-display.js +289 -0
  219. package/dist/server/flow-surfaces/template-service-utils.d.ts +62 -0
  220. package/dist/server/flow-surfaces/template-service-utils.js +281 -0
  221. package/dist/server/flow-surfaces/types.d.ts +288 -0
  222. package/dist/server/flow-surfaces/types.js +24 -0
  223. package/dist/server/index.d.ts +1 -0
  224. package/dist/server/index.js +7 -2
  225. package/dist/server/plugin.d.ts +0 -1
  226. package/dist/server/plugin.js +9 -34
  227. package/dist/server/repository.js +0 -5
  228. package/dist/server/variables/resolve.d.ts +21 -0
  229. package/dist/server/variables/resolve.js +79 -0
  230. package/dist/swagger/flow-surfaces.d.ts +5964 -0
  231. package/dist/swagger/flow-surfaces.examples.d.ts +1572 -0
  232. package/dist/swagger/flow-surfaces.examples.js +1805 -0
  233. package/dist/swagger/flow-surfaces.js +5322 -0
  234. package/dist/swagger/flow-surfaces.template-action-docs.d.ts +62 -0
  235. package/dist/swagger/flow-surfaces.template-action-docs.js +121 -0
  236. package/dist/swagger/flow-surfaces.template-schemas.d.ts +239 -0
  237. package/dist/swagger/flow-surfaces.template-schemas.js +255 -0
  238. package/dist/swagger/index.d.ts +5969 -0
  239. package/dist/swagger/index.js +50 -0
  240. package/package.json +3 -3
  241. /package/dist/ai/{tools → ai-employees/nathan/skills/frontend-developer/tools}/getContextApis.d.ts +0 -0
  242. /package/dist/ai/{tools → ai-employees/nathan/skills/frontend-developer/tools}/getContextEnvs.d.ts +0 -0
  243. /package/dist/ai/{tools → ai-employees/nathan/skills/frontend-developer/tools}/getContextVars.d.ts +0 -0
  244. /package/dist/ai/{tools → ai-employees/nathan/skills/frontend-developer/tools}/lintAndTestJS.d.ts +0 -0
@@ -1,18 +1,18 @@
1
1
  # ctx.collectionField
2
2
 
3
- The collection field (CollectionField) instance for the current RunJS context; used to access field metadata, type, validation rules, and association info. Only present when the field is bound to a collection definition; custom/virtual fields may have `null`.
3
+ The `CollectionField` instance associated with the current RunJS execution context, used to access field metadata, types, validation rules, and association information. It only exists when the field is bound to a collection definition; custom/virtual fields may be `null`.
4
4
 
5
5
  ## Use Cases
6
6
 
7
7
  | Scenario | Description |
8
- |----------|-------------|
9
- | **JSField** | Use `interface`, `enum`, `targetCollection`, etc. for linkage or validation |
10
- | **JSItem** | Access metadata of the column’s field in sub-table items |
11
- | **JSColumn** | Choose render by `collectionField.interface`, or use `targetCollection` |
8
+ |------|------|
9
+ | **JSField** | Perform linkage or validation in form fields based on `interface`, `enum`, `targetCollection`, etc. |
10
+ | **JSItem** | Access metadata of the field corresponding to the current column in sub-table items. |
11
+ | **JSColumn** | Select rendering methods based on `collectionField.interface` or access `targetCollection` in table columns. |
12
12
 
13
- > Note: `ctx.collectionField` is only available when the field is bound to a collection; in standalone JSBlock or actions with no field binding it is usually `undefined`—check before use.
13
+ > Note: `ctx.collectionField` is only available when the field is bound to a Collection definition; it is usually `undefined` in scenarios like JSBlock independent blocks or action events without field binding. It is recommended to check for null values before use.
14
14
 
15
- ## Type
15
+ ## Type Definition
16
16
 
17
17
  ```ts
18
18
  collectionField: CollectionField | null | undefined;
@@ -21,46 +21,47 @@ collectionField: CollectionField | null | undefined;
21
21
  ## Common Properties
22
22
 
23
23
  | Property | Type | Description |
24
- |----------|------|-------------|
25
- | `name` | `string` | Field name (e.g. `status`, `userId`) |
26
- | `title` | `string` | Field title (i18n) |
27
- | `type` | `string` | Data type (`string`, `integer`, `belongsTo`, etc.) |
28
- | `interface` | `string` | UI type (`input`, `select`, `m2o`, `o2m`, `m2m`, etc.) |
29
- | `collection` | `Collection` | Field’s collection |
30
- | `targetCollection` | `Collection` | Target collection for association fields only |
31
- | `target` | `string` | Target collection name (association) |
32
- | `enum` | `array` | Enum options (select, radio, etc.) |
24
+ |------|------|------|
25
+ | `name` | `string` | Field name (e.g., `status`, `userId`) |
26
+ | `title` | `string` | Field title (including internationalization) |
27
+ | `type` | `string` | Field data type (`string`, `integer`, `belongsTo`, etc.) |
28
+ | `interface` | `string` | Field interface type (`input`, `select`, `m2o`, `o2m`, `m2m`, etc.) |
29
+ | `collection` | `Collection` | The collection the field belongs to |
30
+ | `targetCollection` | `Collection` | The target collection of the association field (only for association types) |
31
+ | `target` | `string` | Target collection name (for association fields) |
32
+ | `enum` | `array` | Enumeration options (select, radio, etc.) |
33
33
  | `defaultValue` | `any` | Default value |
34
- | `collectionName` | `string` | Collection name |
35
- | `foreignKey` | `string` | Foreign key (e.g. belongsTo) |
36
- | `sourceKey` | `string` | Source key (e.g. hasMany) |
37
- | `targetKey` | `string` | Target key |
38
- | `fullpath` | `string` | Full path (e.g. `main.users.status`) for API/variables |
39
- | `resourceName` | `string` | Resource name (e.g. `users.status`) |
40
- | `readonly` | `boolean` | Read-only |
41
- | `titleable` | `boolean` | Can be used as title |
42
- | `validation` | `object` | Validation config |
43
- | `uiSchema` | `object` | UI config |
44
- | `targetCollectionTitleField` | `CollectionField` | Title field of target collection (association) |
34
+ | `collectionName` | `string` | Name of the collection it belongs to |
35
+ | `foreignKey` | `string` | Foreign key field name (belongsTo, etc.) |
36
+ | `sourceKey` | `string` | Association source key (hasMany, etc.) |
37
+ | `targetKey` | `string` | Association target key |
38
+ | `fullpath` | `string` | Full path (e.g., `main.users.status`), used for API or variable references |
39
+ | `resourceName` | `string` | Resource name (e.g., `users.status`) |
40
+ | `readonly` | `boolean` | Whether it is read-only |
41
+ | `titleable` | `boolean` | Whether it can be displayed as a title |
42
+ | `validation` | `object` | Validation rule configuration |
43
+ | `uiSchema` | `object` | UI configuration |
44
+ | `targetCollectionTitleField` | `CollectionField` | The title field of the target collection (for association fields) |
45
45
 
46
46
  ## Common Methods
47
47
 
48
48
  | Method | Description |
49
- |--------|-------------|
50
- | `isAssociationField(): boolean` | Whether it is an association (belongsTo, hasMany, hasOne, belongsToMany, etc.) |
51
- | `isRelationshipField(): boolean` | Whether it is a relationship (o2o, m2o, o2m, m2m, etc.) |
52
- | `getComponentProps(): object` | Default props for the field component |
53
- | `getFields(): CollectionField[]` | Fields of target collection (association only) |
54
- | `getFilterOperators(): object[]` | Filter operators (e.g. `$eq`, `$ne`) |
49
+ |------|------|
50
+ | `isAssociationField(): boolean` | Whether it is an association field (belongsTo, hasMany, hasOne, belongsToMany, etc.) |
51
+ | `isRelationshipField(): boolean` | Whether it is a relationship field (including o2o, m2o, o2m, m2m, etc.) |
52
+ | `getComponentProps(): object` | Get the default props of the field component |
53
+ | `getFields(): CollectionField[]` | Get the field list of the target collection (association fields only) |
54
+ | `getFilterOperators(): object[]` | Get the filter operators supported by this field (e.g., `$eq`, `$ne`, etc.) |
55
55
 
56
56
  ## Examples
57
57
 
58
- ### Branch by field type
58
+ ### Branch rendering based on field type
59
59
 
60
60
  ```ts
61
61
  if (!ctx.collectionField) return null;
62
62
  const { interface: iface } = ctx.collectionField;
63
63
  if (['m2o', 'o2m', 'm2m'].includes(iface)) {
64
+ // Association field: display associated records
64
65
  const target = ctx.collectionField.targetCollection;
65
66
  // ...
66
67
  } else if (iface === 'select' || iface === 'radioGroup') {
@@ -69,24 +70,24 @@ if (['m2o', 'o2m', 'm2m'].includes(iface)) {
69
70
  }
70
71
  ```
71
72
 
72
- ### Check association and use target collection
73
+ ### Determine if it is an association field and access the target collection
73
74
 
74
75
  ```ts
75
76
  if (ctx.collectionField?.isAssociationField()) {
76
77
  const targetCol = ctx.collectionField.targetCollection;
77
78
  const titleField = targetCol?.titleCollectionField?.name;
78
- // ...
79
+ // Process according to the target collection structure
79
80
  }
80
81
  ```
81
82
 
82
- ### Get enum options
83
+ ### Get enumeration options
83
84
 
84
85
  ```ts
85
86
  const options = ctx.collectionField?.enum ?? [];
86
87
  const labels = options.map((o) => (typeof o === 'object' ? o.label : o));
87
88
  ```
88
89
 
89
- ### Conditional render by readonly
90
+ ### Conditional rendering based on read-only/view mode
90
91
 
91
92
  ```ts
92
93
  const { Input } = ctx.libs.antd;
@@ -97,34 +98,35 @@ if (ctx.collectionField?.readonly) {
97
98
  }
98
99
  ```
99
100
 
100
- ### Title field of target collection
101
+ ### Get the title field of the target collection
101
102
 
102
103
  ```ts
104
+ // When displaying an association field, use targetCollectionTitleField to get the title field name
103
105
  const titleField = ctx.collectionField?.targetCollectionTitleField;
104
106
  const titleKey = titleField?.name ?? 'title';
105
107
  const assocValue = ctx.getValue?.() ?? ctx.record?.[ctx.collectionField?.name];
106
108
  const label = assocValue?.[titleKey];
107
109
  ```
108
110
 
109
- ## Relation to ctx.collection
111
+ ## Relationship with ctx.collection
110
112
 
111
- | Need | Recommended |
112
- |------|-------------|
113
- | **Collection of current field** | `ctx.collectionField?.collection` or `ctx.collection` |
113
+ | Requirement | Recommended Usage |
114
+ |------|----------|
115
+ | **Current field's collection** | `ctx.collectionField?.collection` or `ctx.collection` |
114
116
  | **Field metadata (name, type, interface, enum, etc.)** | `ctx.collectionField` |
115
117
  | **Target collection** | `ctx.collectionField?.targetCollection` |
116
118
 
117
- `ctx.collection` is usually the block’s collection; `ctx.collectionField` is the field definition; they can differ in sub-tables and associations.
119
+ `ctx.collection` usually represents the collection bound to the current block; `ctx.collectionField` represents the definition of the current field in the collection. In scenarios like sub-tables or association fields, the two may differ.
118
120
 
119
121
  ## Notes
120
122
 
121
- - In **JSBlock**, **JSAction (no field binding)**, `ctx.collectionField` is usually `undefined`; use optional chaining.
122
- - Custom JS fields not bound to a collection field may have `ctx.collectionField` as `null`.
123
- - `targetCollection` exists only for association fields (m2o, o2m, m2m); `enum` only for select, radioGroup, etc.
123
+ - In scenarios such as **JSBlock** or **JSAction (without field binding)**, `ctx.collectionField` is usually `undefined`. It is recommended to use optional chaining before access.
124
+ - If a custom JS field is not bound to a collection field, `ctx.collectionField` may be `null`.
125
+ - `targetCollection` only exists for association type fields (e.g., m2o, o2m, m2m); `enum` only exists for fields with options like select or radioGroup.
124
126
 
125
127
  ## Related
126
128
 
127
- - [ctx.collection](./collection.md): collection for current context
128
- - [ctx.model](./model.md): model for current execution context
129
- - [ctx.blockModel](./block-model.md): parent block
130
- - [ctx.getValue()](./get-value.md), [ctx.setValue()](./set-value.md): read/write current field value
129
+ - [ctx.collection](./collection.md): Collection associated with the current context
130
+ - [ctx.model](./model.md): Model where the current execution context is located
131
+ - [ctx.blockModel](./block-model.md): Parent block carrying the current JS
132
+ - [ctx.getValue()](./get-value.md), [ctx.setValue()](./set-value.md): Read and write the current field value
@@ -1,18 +1,18 @@
1
1
  # ctx.collection
2
2
 
3
- The collection (data table) instance associated with the current RunJS execution context; used to access collection metadata, field definitions, primary key, etc. Usually from `ctx.blockModel.collection` or `ctx.collectionField?.collection`.
3
+ The Collection instance associated with the current RunJS execution context, used to access collection metadata, field definitions, primary keys, and other configurations. It usually originates from `ctx.blockModel.collection` or `ctx.collectionField?.collection`.
4
4
 
5
5
  ## Use Cases
6
6
 
7
7
  | Scenario | Description |
8
- |----------|-------------|
9
- | **JSBlock** | Block-bound collection; access `name`, `getFields`, `filterTargetKey`, etc. |
10
- | **JSField / JSItem / JSColumn** | Collection of current field or parent block; get field list, primary key, etc. |
11
- | **Table column / detail block** | Render by collection structure, pass `filterByTk` when opening popup, etc. |
8
+ |------|------|
9
+ | **JSBlock** | The collection bound to the block; can access `name`, `getFields`, `filterTargetKey`, etc. |
10
+ | **JSField / JSItem / JSColumn** | The collection the current field belongs to (or the parent block's collection), used to retrieve field lists, primary keys, etc. |
11
+ | **Table Column / Detail Block** | Used for rendering based on collection structure or passing `filterByTk` when opening popups. |
12
12
 
13
- > Note: `ctx.collection` is available when the context is bound to a data block, form block, or table block; a standalone JSBlock with no bound collection may have `null`—check before use.
13
+ > Note: `ctx.collection` is available in scenarios where a data block, form block, or table block is bound to a collection. In an independent JSBlock that is not bound to a collection, it may be `null`. It is recommended to perform a null check before use.
14
14
 
15
- ## Type
15
+ ## Type Definition
16
16
 
17
17
  ```ts
18
18
  collection: Collection | null | undefined;
@@ -21,39 +21,39 @@ collection: Collection | null | undefined;
21
21
  ## Common Properties
22
22
 
23
23
  | Property | Type | Description |
24
- |----------|------|-------------|
25
- | `name` | `string` | Collection name (e.g. `users`, `orders`) |
26
- | `title` | `string` | Collection title (i18n) |
27
- | `filterTargetKey` | `string \| string[]` | Primary key field name(s); used for `filterByTk`, `getFilterByTK` |
28
- | `dataSourceKey` | `string` | Data source key (e.g. `main`) |
29
- | `dataSource` | `DataSource` | Data source instance |
30
- | `template` | `string` | Collection template (e.g. `general`, `file`, `tree`) |
31
- | `titleableFields` | `CollectionField[]` | Fields that can be used as title |
32
- | `titleCollectionField` | `CollectionField` | Title field instance |
24
+ |------|------|------|
25
+ | `name` | `string` | Collection name (e.g., `users`, `orders`) |
26
+ | `title` | `string` | Collection title (includes internationalization) |
27
+ | `filterTargetKey` | `string \| string[]` | Primary key field name, used for `filterByTk` and `getFilterByTK` |
28
+ | `dataSourceKey` | `string` | Data source key (e.g., `main`) |
29
+ | `dataSource` | `DataSource` | The data source instance it belongs to |
30
+ | `template` | `string` | Collection template (e.g., `general`, `file`, `tree`) |
31
+ | `titleableFields` | `CollectionField[]` | List of fields that can be displayed as titles |
32
+ | `titleCollectionField` | `CollectionField` | The title field instance |
33
33
 
34
34
  ## Common Methods
35
35
 
36
36
  | Method | Description |
37
- |--------|-------------|
38
- | `getFields(): CollectionField[]` | All fields (including inherited) |
39
- | `getField(name: string): CollectionField \| undefined` | Single field by name |
40
- | `getFieldByPath(path: string): CollectionField \| undefined` | Field by path (supports association, e.g. `user.name`) |
41
- | `getAssociationFields(types?): CollectionField[]` | Association fields; `types` e.g. `['one']`, `['many']` |
42
- | `getFilterByTK(record): any` | Primary key value from record for API `filterByTk` |
37
+ |------|------|
38
+ | `getFields(): CollectionField[]` | Get all fields (including inherited ones) |
39
+ | `getField(name: string): CollectionField \| undefined` | Get a single field by field name |
40
+ | `getFieldByPath(path: string): CollectionField \| undefined` | Get a field by path (supports associations, e.g., `user.name`) |
41
+ | `getAssociationFields(types?): CollectionField[]` | Get association fields; `types` can be `['one']`, `['many']`, etc. |
42
+ | `getFilterByTK(record): any` | Extract the primary key value from a record, used for the API's `filterByTk` |
43
43
 
44
- ## Relation to ctx.collectionField, ctx.blockModel
44
+ ## Relationship with ctx.collectionField and ctx.blockModel
45
45
 
46
- | Need | Recommended |
47
- |------|-------------|
48
- | **Collection for current context** | `ctx.collection` (same as `ctx.blockModel?.collection` or `ctx.collectionField?.collection`) |
49
- | **Collection of current field** | `ctx.collectionField?.collection` |
50
- | **Target collection of association** | `ctx.collectionField?.targetCollection` |
46
+ | Requirement | Recommended Usage |
47
+ |------|----------|
48
+ | **Collection associated with current context** | `ctx.collection` (equivalent to `ctx.blockModel?.collection` or `ctx.collectionField?.collection`) |
49
+ | **Collection definition of the current field** | `ctx.collectionField?.collection` (the collection the field belongs to) |
50
+ | **Association target collection** | `ctx.collectionField?.targetCollection` (the target collection of an association field) |
51
51
 
52
- In sub-tables etc., `ctx.collection` may be the association target; in normal form/table it is usually the block’s collection.
52
+ In scenarios like sub-tables, `ctx.collection` might be the association target collection; in standard forms/tables, it is usually the collection bound to the block.
53
53
 
54
54
  ## Examples
55
55
 
56
- ### Get primary key and open popup
56
+ ### Get Primary Key and Open Popup
57
57
 
58
58
  ```ts
59
59
  const primaryKey = ctx.collection?.filterTargetKey ?? 'id';
@@ -66,7 +66,7 @@ await ctx.openView(popupUid, {
66
66
  });
67
67
  ```
68
68
 
69
- ### Iterate fields for validation or linkage
69
+ ### Iterate Through Fields for Validation or Linkage
70
70
 
71
71
  ```ts
72
72
  const fields = ctx.collection?.getFields() ?? [];
@@ -80,21 +80,21 @@ for (const f of requiredFields) {
80
80
  }
81
81
  ```
82
82
 
83
- ### Get association fields
83
+ ### Get Association Fields
84
84
 
85
85
  ```ts
86
86
  const oneToMany = ctx.collection?.getAssociationFields(['many']) ?? [];
87
- // For sub-tables, association resources, etc.
87
+ // Used for building sub-tables, associated resources, etc.
88
88
  ```
89
89
 
90
90
  ## Notes
91
91
 
92
- - `filterTargetKey` is the collection’s primary key field name; some collections use `string[]` composite keys; fallback is often `'id'`.
93
- - In **sub-tables, association fields**, `ctx.collection` may point to the association target, different from `ctx.blockModel.collection`.
94
- - `getFields()` merges inherited collection fields; local fields override inherited ones with the same name.
92
+ - `filterTargetKey` is the primary key field name of the collection. Some collections may use a `string[]` for composite primary keys. If not configured, `'id'` is commonly used as a fallback.
93
+ - In scenarios like **sub-tables or association fields**, `ctx.collection` may point to the association target collection, which differs from `ctx.blockModel.collection`.
94
+ - `getFields()` merges fields from inherited collections; local fields override inherited fields with the same name.
95
95
 
96
96
  ## Related
97
97
 
98
- - [ctx.collectionField](./collection-field.md): current field’s collection field definition
99
- - [ctx.blockModel](./block-model.md): parent block that hosts current JS; has `collection`
100
- - [ctx.model](./model.md): current model; may have `collection`
98
+ - [ctx.collectionField](./collection-field.md): The collection field definition of the current field
99
+ - [ctx.blockModel](./block-model.md): The parent block hosting the current JS, containing `collection`
100
+ - [ctx.model](./model.md): The current model, which may contain `collection`
@@ -1,18 +1,18 @@
1
1
  # ctx.dataSourceManager
2
2
 
3
- The data source manager (`DataSourceManager` instance) for managing and accessing multiple data sources (e.g. main `main`, logging `logging`). Use when you have multiple data sources or need crossdata-source metadata access.
3
+ The Data Source Manager (`DataSourceManager` instance) is used to manage and access multiple data sources (e.g., the main database `main`, logging database `logging`, etc.). It is used when multiple data sources exist or when cross-data source metadata access is required.
4
4
 
5
5
  ## Use Cases
6
6
 
7
7
  | Scenario | Description |
8
- |----------|-------------|
9
- | **Multiple data sources** | Enumerate all data sources, get one by key |
10
- | **Crossdata-source access** | When context doesn’t know the data source, access by data source key + collection name” |
11
- | **Field by full path** | Get field definition with path format `dataSourceKey.collectionName.fieldPath` |
8
+ |------|------|
9
+ | **Multi-data source** | Enumerate all data sources, or get a specific data source by key. |
10
+ | **Cross-data source access** | Access metadata using the "data source key + collection name" format when the data source of the current context is unknown. |
11
+ | **Get fields by full path** | Use the `dataSourceKey.collectionName.fieldPath` format to retrieve field definitions across different data sources. |
12
12
 
13
- > Note: If you only work with the current data source, use `ctx.dataSource`; use `ctx.dataSourceManager` when you need to enumerate or switch data sources.
13
+ > Note: If you are only operating on the current data source, prioritize using `ctx.dataSource`. Use `ctx.dataSourceManager` only when you need to enumerate or switch between data sources.
14
14
 
15
- ## Type
15
+ ## Type Definition
16
16
 
17
17
  ```ts
18
18
  dataSourceManager: DataSourceManager;
@@ -20,64 +20,74 @@ dataSourceManager: DataSourceManager;
20
20
  class DataSourceManager {
21
21
  constructor();
22
22
 
23
+ // Data source management
23
24
  addDataSource(ds: DataSource | DataSourceOptions): void;
24
25
  upsertDataSource(ds: DataSource | DataSourceOptions): void;
25
26
  removeDataSource(key: string): void;
26
27
  clearDataSources(): void;
27
28
 
28
- getDataSources(): DataSource[];
29
- getDataSource(key: string): DataSource | undefined;
29
+ // Read data sources
30
+ getDataSources(): DataSource[]; // Get all data sources
31
+ getDataSource(key: string): DataSource | undefined; // Get data source by key
30
32
 
33
+ // Access metadata directly by data source + collection
31
34
  getCollection(dataSourceKey: string, collectionName: string): Collection | undefined;
32
35
  getCollectionField(fieldPathWithDataSource: string): CollectionField | undefined;
33
36
  }
34
37
  ```
35
38
 
36
- ## Relation to ctx.dataSource
39
+ ## Relationship with ctx.dataSource
37
40
 
38
- | Need | Recommended |
39
- |------|-------------|
40
- | **Single data source for context** | `ctx.dataSource` |
41
- | **Entry to all data sources** | `ctx.dataSourceManager` |
41
+ | Requirement | Recommended Usage |
42
+ |------|----------|
43
+ | **Single data source bound to the current context** | `ctx.dataSource` (e.g., the data source of the current page/block) |
44
+ | **Entry point for all data sources** | `ctx.dataSourceManager` |
42
45
  | **List or switch data sources** | `ctx.dataSourceManager.getDataSources()` / `getDataSource(key)` |
43
- | **Collection in current data source** | `ctx.dataSource.getCollection(name)` |
44
- | **Collection in another data source** | `ctx.dataSourceManager.getCollection(dataSourceKey, collectionName)` |
45
- | **Field in current data source** | `ctx.dataSource.getCollectionField('users.profile.avatar')` |
46
- | **Field across data sources** | `ctx.dataSourceManager.getCollectionField('main.users.profile.avatar')` |
46
+ | **Get collection within the current data source** | `ctx.dataSource.getCollection(name)` |
47
+ | **Get collection across data sources** | `ctx.dataSourceManager.getCollection(dataSourceKey, collectionName)` |
48
+ | **Get field within the current data source** | `ctx.dataSource.getCollectionField('users.profile.avatar')` |
49
+ | **Get field across data sources** | `ctx.dataSourceManager.getCollectionField('main.users.profile.avatar')` |
47
50
 
48
51
  ## Examples
49
52
 
50
- ### Get a data source
53
+ ### Get a Specific Data Source
51
54
 
52
55
  ```ts
56
+ // Get the data source named 'main'
53
57
  const mainDS = ctx.dataSourceManager.getDataSource('main');
58
+
59
+ // Get all collections under this data source
54
60
  const collections = mainDS?.getCollections();
55
61
  ```
56
62
 
57
- ### Cross–data-source collection metadata
63
+ ### Access Collection Metadata Across Data Sources
58
64
 
59
65
  ```ts
66
+ // Get collection by dataSourceKey + collectionName
60
67
  const users = ctx.dataSourceManager.getCollection('main', 'users');
61
68
  const orders = ctx.dataSourceManager.getCollection('main', 'orders');
62
69
 
70
+ // Get the primary key of the collection
63
71
  const primaryKey = users?.filterTargetKey ?? 'id';
64
72
  ```
65
73
 
66
- ### Field by full path
74
+ ### Get Field Definition by Full Path
67
75
 
68
76
  ```ts
69
77
  // Format: dataSourceKey.collectionName.fieldPath
78
+ // Get field definition by "data source key.collection name.field path"
70
79
  const field = ctx.dataSourceManager.getCollectionField('main.users.profile.avatar');
71
80
 
81
+ // Supports association field paths
72
82
  const userNameField = ctx.dataSourceManager.getCollectionField('main.orders.createdBy.name');
73
83
  ```
74
84
 
75
- ### Iterate all data sources
85
+ ### Iterate Through All Data Sources
76
86
 
77
87
  ```ts
78
88
  const dataSources = ctx.dataSourceManager.getDataSources();
79
89
  for (const ds of dataSources) {
80
- ctx.logger.info(`Data source: ${ds.key}, display: ${ds.displayName}`);
90
+ ctx.logger.info(`Data Source: ${ds.key}, Display Name: ${ds.displayName}`);
81
91
  const collections = ds.getCollections();
82
92
  for (const col of collections) {
83
93
  ctx.logger.info(` - Collection: ${col.name}`);
@@ -85,7 +95,7 @@ for (const ds of dataSources) {
85
95
  }
86
96
  ```
87
97
 
88
- ### Dynamic data source from variable
98
+ ### Dynamically Select Data Source Based on Variables
89
99
 
90
100
  ```ts
91
101
  const dsKey = ctx.getVar('dataSourceKey') ?? 'main';
@@ -99,12 +109,12 @@ if (col) {
99
109
 
100
110
  ## Notes
101
111
 
102
- - `getCollectionField` path format is `dataSourceKey.collectionName.fieldPath`; first segment is data source key, then collection name and field path.
103
- - `getDataSource(key)` returns `undefined` if the data source doesn’t existcheck before use.
104
- - `addDataSource` throws if key already exists; `upsertDataSource` overwrites or adds.
112
+ - The path format for `getCollectionField` is `dataSourceKey.collectionName.fieldPath`, where the first segment is the data source key, followed by the collection name and the field path.
113
+ - `getDataSource(key)` returns `undefined` if the data source does not exist; it is recommended to perform a null check before use.
114
+ - `addDataSource` will throw an exception if the key already exists; `upsertDataSource` will either overwrite the existing one or add a new one.
105
115
 
106
116
  ## Related
107
117
 
108
- - [ctx.dataSource](./data-source.md): current data source instance
109
- - [ctx.collection](./collection.md): collection for current context
110
- - [ctx.collectionField](./collection-field.md): current field’s collection field definition
118
+ - [ctx.dataSource](./data-source.md): Current data source instance
119
+ - [ctx.collection](./collection.md): Collection associated with the current context
120
+ - [ctx.collectionField](./collection-field.md): Collection field definition for the current field
@@ -1,18 +1,18 @@
1
1
  # ctx.dataSource
2
2
 
3
- The data source instance (`DataSource`) bound to the current RunJS context; used to access collections, field metadata, and collection config **within that data source**. Usually the current page/block’s data source (e.g. main `main`).
3
+ The `DataSource` instance bound to the current RunJS execution context, used to access collections, field metadata, and manage collection configurations **within the current data source**. It usually corresponds to the data source selected for the current page or block (e.g., the main database `main`).
4
4
 
5
5
  ## Use Cases
6
6
 
7
7
  | Scenario | Description |
8
- |----------|-------------|
9
- | **Single data source** | Get collections, field metadata when the current data source is known |
10
- | **Collection management** | Get/add/update/remove collections in the current data source |
11
- | **Field by path** | Get field definition by `collectionName.fieldPath` (supports association path) |
8
+ |------|------|
9
+ | **Single Data Source Operations** | Get collection and field metadata when the current data source is known. |
10
+ | **Collection Management** | Get, add, update, or delete collections under the current data source. |
11
+ | **Get Fields by Path** | Use the `collectionName.fieldPath` format to get field definitions (supports association paths). |
12
12
 
13
- > Note: `ctx.dataSource` is the single data source for the current context; to enumerate or access other data sources use [ctx.dataSourceManager](./data-source-manager.md).
13
+ > Note: `ctx.dataSource` represents a single data source for the current context. To enumerate or access other data sources, please use [ctx.dataSourceManager](./data-source-manager.md).
14
14
 
15
- ## Type
15
+ ## Type Definition
16
16
 
17
17
  ```ts
18
18
  dataSource: DataSource;
@@ -20,15 +20,18 @@ dataSource: DataSource;
20
20
  class DataSource {
21
21
  constructor(options?: Record<string, any>);
22
22
 
23
- get flowEngine(): FlowEngine;
24
- get displayName(): string;
25
- get key(): string;
26
- get name(): string;
23
+ // Read-only properties
24
+ get flowEngine(): FlowEngine; // Current FlowEngine instance
25
+ get displayName(): string; // Display name (supports i18n)
26
+ get key(): string; // Data source key, e.g., 'main'
27
+ get name(): string; // Same as key
27
28
 
28
- getCollections(): Collection[];
29
- getCollection(name: string): Collection | undefined;
30
- getAssociation(associationName: string): CollectionField | undefined;
29
+ // Collection reading
30
+ getCollections(): Collection[]; // Get all collections
31
+ getCollection(name: string): Collection | undefined; // Get collection by name
32
+ getAssociation(associationName: string): CollectionField | undefined; // Get association field (e.g., users.roles)
31
33
 
34
+ // Collection management
32
35
  addCollection(collection: Collection | CollectionOptions): void;
33
36
  updateCollection(newOptions: CollectionOptions): void;
34
37
  upsertCollection(options: CollectionOptions): Collection | undefined;
@@ -36,6 +39,7 @@ class DataSource {
36
39
  removeCollection(name: string): void;
37
40
  clearCollections(): void;
38
41
 
42
+ // Field metadata
39
43
  getCollectionField(fieldPath: string): CollectionField | undefined;
40
44
  }
41
45
  ```
@@ -43,57 +47,61 @@ class DataSource {
43
47
  ## Common Properties
44
48
 
45
49
  | Property | Type | Description |
46
- |----------|------|-------------|
47
- | `key` | `string` | Data source key (e.g. `main`) |
50
+ |------|------|------|
51
+ | `key` | `string` | Data source key, e.g., `'main'` |
48
52
  | `name` | `string` | Same as key |
49
- | `displayName` | `string` | Display name (i18n) |
53
+ | `displayName` | `string` | Display name (supports i18n) |
50
54
  | `flowEngine` | `FlowEngine` | Current FlowEngine instance |
51
55
 
52
56
  ## Common Methods
53
57
 
54
58
  | Method | Description |
55
- |--------|-------------|
56
- | `getCollections()` | All collections in this data source (sorted, hidden filtered) |
57
- | `getCollection(name)` | Collection by name; `name` can be `collectionName.fieldName` for association target |
58
- | `getAssociation(associationName)` | Association field by `collectionName.fieldName` |
59
- | `getCollectionField(fieldPath)` | Field by `collectionName.fieldPath`; supports paths like `users.profile.avatar` |
59
+ |------|------|
60
+ | `getCollections()` | Gets all collections under the current data source (sorted, with hidden ones filtered). |
61
+ | `getCollection(name)` | Gets a collection by name; `name` can be `collectionName.fieldName` to get the target collection of an association. |
62
+ | `getAssociation(associationName)` | Gets an association field definition by `collectionName.fieldName`. |
63
+ | `getCollectionField(fieldPath)` | Gets a field definition by `collectionName.fieldPath`, supporting association paths like `users.profile.avatar`. |
60
64
 
61
- ## Relation to ctx.dataSourceManager
65
+ ## Relationship with ctx.dataSourceManager
62
66
 
63
- | Need | Recommended |
64
- |------|-------------|
65
- | **Single data source for context** | `ctx.dataSource` |
66
- | **Entry to all data sources** | `ctx.dataSourceManager` |
67
- | **Collection in current data source** | `ctx.dataSource.getCollection(name)` |
68
- | **Collection in another data source** | `ctx.dataSourceManager.getCollection(dataSourceKey, collectionName)` |
69
- | **Field in current data source** | `ctx.dataSource.getCollectionField('users.profile.avatar')` |
70
- | **Field across data sources** | `ctx.dataSourceManager.getCollectionField('main.users.profile.avatar')` |
67
+ | Requirement | Recommended Usage |
68
+ |------|----------|
69
+ | **Single data source bound to current context** | `ctx.dataSource` |
70
+ | **Entry point for all data sources** | `ctx.dataSourceManager` |
71
+ | **Get collection within current data source** | `ctx.dataSource.getCollection(name)` |
72
+ | **Get collection across data sources** | `ctx.dataSourceManager.getCollection(dataSourceKey, collectionName)` |
73
+ | **Get field within current data source** | `ctx.dataSource.getCollectionField('users.profile.avatar')` |
74
+ | **Get field across data sources** | `ctx.dataSourceManager.getCollectionField('main.users.profile.avatar')` |
71
75
 
72
- ## Examples
76
+ ## Example
73
77
 
74
- ### Get collections and fields
78
+ ### Get Collections and Fields
75
79
 
76
80
  ```ts
81
+ // Get all collections
77
82
  const collections = ctx.dataSource.getCollections();
78
83
 
84
+ // Get collection by name
79
85
  const users = ctx.dataSource.getCollection('users');
80
86
  const primaryKey = users?.filterTargetKey ?? 'id';
81
87
 
88
+ // Get field definition by "collectionName.fieldPath" (supports associations)
82
89
  const field = ctx.dataSource.getCollectionField('users.profile.avatar');
83
90
  const userNameField = ctx.dataSource.getCollectionField('orders.createdBy.name');
84
91
  ```
85
92
 
86
- ### Get association field
93
+ ### Get Association Fields
87
94
 
88
95
  ```ts
96
+ // Get association field definition by collectionName.fieldName
89
97
  const rolesField = ctx.dataSource.getAssociation('users.roles');
90
98
  if (rolesField?.isAssociationField()) {
91
99
  const targetCol = rolesField.targetCollection;
92
- // ...
100
+ // Process based on target collection structure
93
101
  }
94
102
  ```
95
103
 
96
- ### Iterate collections
104
+ ### Iterate Through Collections for Dynamic Processing
97
105
 
98
106
  ```ts
99
107
  const collections = ctx.dataSource.getCollections();
@@ -104,25 +112,25 @@ for (const col of collections) {
104
112
  }
105
113
  ```
106
114
 
107
- ### Validation or dynamic UI from field metadata
115
+ ### Perform Validation or Dynamic UI Based on Field Metadata
108
116
 
109
117
  ```ts
110
118
  const field = ctx.dataSource.getCollectionField('users.status');
111
119
  if (field) {
112
120
  const options = field.enum ?? [];
113
121
  const operators = field.getFilterOperators();
114
- // ...
122
+ // Perform UI logic or validation based on interface, enum, validation, etc.
115
123
  }
116
124
  ```
117
125
 
118
126
  ## Notes
119
127
 
120
- - `getCollectionField(fieldPath)` uses path format `collectionName.fieldPath`; first segment is collection name, rest is field path (supports association, e.g. `user.name`).
121
- - `getCollection(name)` supports `collectionName.fieldName` and returns the association target collection.
122
- - In RunJS, `ctx.dataSource` is usually determined by the current block/page; if there is no bound data source it may be `undefined`—check before use.
128
+ - The path format for `getCollectionField(fieldPath)` is `collectionName.fieldPath`, where the first segment is the collection name and the subsequent segments are the field path (supports associations, e.g., `user.name`).
129
+ - `getCollection(name)` supports the `collectionName.fieldName` format, returning the target collection of the association field.
130
+ - In the RunJS context, `ctx.dataSource` is usually determined by the data source of the current block or page. If no data source is bound to the context, it may be `undefined`; it is recommended to perform a null check before use.
123
131
 
124
132
  ## Related
125
133
 
126
- - [ctx.dataSourceManager](./data-source-manager.md): manager for all data sources
127
- - [ctx.collection](./collection.md): collection for current context
128
- - [ctx.collectionField](./collection-field.md): current field’s collection field definition
134
+ - [ctx.dataSourceManager](./data-source-manager.md): Data source manager, manages all data sources.
135
+ - [ctx.collection](./collection.md): The collection associated with the current context.
136
+ - [ctx.collectionField](./collection-field.md): The collection field definition for the current field.