@nocobase/plugin-flow-engine 2.1.0-beta.15 → 2.1.0-beta.17

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 (229) hide show
  1. package/dist/ai/ai-employees/nathan/index.d.ts +10 -0
  2. package/dist/ai/ai-employees/nathan/index.js +41 -0
  3. package/dist/ai/ai-employees/nathan/prompt.md +132 -0
  4. package/dist/ai/ai-employees/nathan/skills/frontend-developer/SKILLS.md +69 -0
  5. package/dist/ai/{tools → ai-employees/nathan/skills/frontend-developer/tools}/getContextApis.js +2 -2
  6. package/dist/ai/{tools → ai-employees/nathan/skills/frontend-developer/tools}/getContextEnvs.js +2 -2
  7. package/dist/ai/{tools → ai-employees/nathan/skills/frontend-developer/tools}/getContextVars.js +2 -2
  8. package/dist/ai/{tools → ai-employees/nathan/skills/frontend-developer/tools}/lintAndTestJS.js +2 -2
  9. package/dist/ai/docs/runjs/context/block-model.md +35 -35
  10. package/dist/ai/docs/runjs/context/collection-field.md +53 -51
  11. package/dist/ai/docs/runjs/context/collection.md +39 -39
  12. package/dist/ai/docs/runjs/context/data-source-manager.md +40 -30
  13. package/dist/ai/docs/runjs/context/data-source.md +52 -44
  14. package/dist/ai/docs/runjs/context/element.md +44 -38
  15. package/dist/ai/docs/runjs/context/exit-all.md +37 -35
  16. package/dist/ai/docs/runjs/context/exit.md +38 -35
  17. package/dist/ai/docs/runjs/context/filter-manager.md +36 -30
  18. package/dist/ai/docs/runjs/context/form.md +57 -57
  19. package/dist/ai/docs/runjs/context/get-model.md +22 -21
  20. package/dist/ai/docs/runjs/context/get-value.md +20 -19
  21. package/dist/ai/docs/runjs/context/get-var.md +61 -55
  22. package/dist/ai/docs/runjs/context/i18n.md +17 -14
  23. package/dist/ai/docs/runjs/context/import-async.md +333 -45
  24. package/dist/ai/docs/runjs/context/init-resource.md +20 -20
  25. package/dist/ai/docs/runjs/context/libs.md +31 -31
  26. package/dist/ai/docs/runjs/context/location.md +34 -31
  27. package/dist/ai/docs/runjs/context/logger.md +41 -40
  28. package/dist/ai/docs/runjs/context/make-resource.md +27 -26
  29. package/dist/ai/docs/runjs/context/message.md +42 -41
  30. package/dist/ai/docs/runjs/context/modal.md +44 -44
  31. package/dist/ai/docs/runjs/context/model.md +36 -33
  32. package/dist/ai/docs/runjs/context/notification.md +41 -40
  33. package/dist/ai/docs/runjs/context/off.md +14 -14
  34. package/dist/ai/docs/runjs/context/on.md +30 -29
  35. package/dist/ai/docs/runjs/context/open-view.md +40 -40
  36. package/dist/ai/docs/runjs/context/render.md +37 -32
  37. package/dist/ai/docs/runjs/context/request.md +46 -45
  38. package/dist/ai/docs/runjs/context/require-async.md +28 -25
  39. package/dist/ai/docs/runjs/context/resource.md +34 -34
  40. package/dist/ai/docs/runjs/context/route.md +36 -34
  41. package/dist/ai/docs/runjs/context/router.md +43 -31
  42. package/dist/ai/docs/runjs/context/set-value.md +18 -17
  43. package/dist/ai/docs/runjs/context/t.md +20 -17
  44. package/dist/ai/docs/runjs/context/view.md +49 -46
  45. package/dist/ai/docs/runjs/document.md +1 -0
  46. package/dist/ai/docs/runjs/import-modules.md +32 -32
  47. package/dist/ai/docs/runjs/index.md +13 -13
  48. package/dist/ai/docs/runjs/jsx.md +19 -19
  49. package/dist/ai/docs/runjs/model/form-block-model.md +1 -3
  50. package/dist/ai/docs/runjs/render.md +15 -15
  51. package/dist/ai/docs/runjs/resource/api-resource.md +53 -53
  52. package/dist/ai/docs/runjs/resource/multi-record-resource.md +64 -64
  53. package/dist/ai/docs/runjs/resource/single-record-resource.md +55 -55
  54. package/dist/ai/docs/runjs/resource/sql-resource.md +57 -57
  55. package/dist/ai/docs/runjs/window.md +5 -5
  56. package/dist/client/index.js +1 -1
  57. package/dist/externalVersion.js +11 -10
  58. package/dist/node_modules/ses/dist/ses.cjs +1 -1
  59. package/dist/node_modules/ses/package.json +1 -1
  60. package/dist/node_modules/zod/index.cjs +1 -1
  61. package/dist/node_modules/zod/package.json +1 -1
  62. package/dist/server/flow-surfaces/action-scope.d.ts +38 -0
  63. package/dist/server/flow-surfaces/action-scope.js +152 -0
  64. package/dist/server/flow-surfaces/apply/compiler.d.ts +13 -0
  65. package/dist/server/flow-surfaces/apply/compiler.js +969 -0
  66. package/dist/server/flow-surfaces/apply/layout.d.ts +34 -0
  67. package/dist/server/flow-surfaces/apply/layout.js +175 -0
  68. package/dist/server/flow-surfaces/apply/matching.d.ts +16 -0
  69. package/dist/server/flow-surfaces/apply/matching.js +181 -0
  70. package/dist/server/flow-surfaces/approval/blueprint-service.d.ts +84 -0
  71. package/dist/server/flow-surfaces/approval/blueprint-service.js +589 -0
  72. package/dist/server/flow-surfaces/approval/blueprint.d.ts +21 -0
  73. package/dist/server/flow-surfaces/approval/blueprint.js +187 -0
  74. package/dist/server/flow-surfaces/approval/builder.d.ts +225 -0
  75. package/dist/server/flow-surfaces/approval/builder.js +384 -0
  76. package/dist/server/flow-surfaces/approval/catalog-specs.d.ts +33 -0
  77. package/dist/server/flow-surfaces/approval/catalog-specs.js +156 -0
  78. package/dist/server/flow-surfaces/approval/index.d.ts +14 -0
  79. package/dist/server/flow-surfaces/approval/index.js +40 -0
  80. package/dist/server/flow-surfaces/approval/runtime-config.d.ts +44 -0
  81. package/dist/server/flow-surfaces/approval/runtime-config.js +299 -0
  82. package/dist/server/flow-surfaces/approval/semantic-use.d.ts +23 -0
  83. package/dist/server/flow-surfaces/approval/semantic-use.js +155 -0
  84. package/dist/server/flow-surfaces/association-title-field.d.ts +20 -0
  85. package/dist/server/flow-surfaces/association-title-field.js +158 -0
  86. package/dist/server/flow-surfaces/blueprint/compile-blocks.d.ts +14 -0
  87. package/dist/server/flow-surfaces/blueprint/compile-blocks.js +1007 -0
  88. package/dist/server/flow-surfaces/blueprint/compile-plan.d.ts +13 -0
  89. package/dist/server/flow-surfaces/blueprint/compile-plan.js +308 -0
  90. package/dist/server/flow-surfaces/blueprint/compile-reaction.d.ts +11 -0
  91. package/dist/server/flow-surfaces/blueprint/compile-reaction.js +72 -0
  92. package/dist/server/flow-surfaces/blueprint/defaults.d.ts +26 -0
  93. package/dist/server/flow-surfaces/blueprint/defaults.js +133 -0
  94. package/dist/server/flow-surfaces/blueprint/index.d.ts +12 -0
  95. package/dist/server/flow-surfaces/blueprint/index.js +44 -0
  96. package/dist/server/flow-surfaces/blueprint/normalize-document.d.ts +10 -0
  97. package/dist/server/flow-surfaces/blueprint/normalize-document.js +416 -0
  98. package/dist/server/flow-surfaces/blueprint/private-utils.d.ts +26 -0
  99. package/dist/server/flow-surfaces/blueprint/private-utils.js +182 -0
  100. package/dist/server/flow-surfaces/blueprint/public-types.d.ts +193 -0
  101. package/dist/server/flow-surfaces/blueprint/public-types.js +24 -0
  102. package/dist/server/flow-surfaces/builder.d.ts +211 -0
  103. package/dist/server/flow-surfaces/builder.js +1029 -0
  104. package/dist/server/flow-surfaces/catalog-smart.d.ts +18 -0
  105. package/dist/server/flow-surfaces/catalog-smart.js +239 -0
  106. package/dist/server/flow-surfaces/catalog-smart.projector.d.ts +15 -0
  107. package/dist/server/flow-surfaces/catalog-smart.projector.js +157 -0
  108. package/dist/server/flow-surfaces/catalog-smart.types.d.ts +99 -0
  109. package/dist/server/flow-surfaces/catalog-smart.types.js +24 -0
  110. package/dist/server/flow-surfaces/catalog.d.ts +78 -0
  111. package/dist/server/flow-surfaces/catalog.js +3496 -0
  112. package/dist/server/flow-surfaces/chart-config.d.ts +121 -0
  113. package/dist/server/flow-surfaces/chart-config.js +1394 -0
  114. package/dist/server/flow-surfaces/compose-compiler.d.ts +108 -0
  115. package/dist/server/flow-surfaces/compose-compiler.js +167 -0
  116. package/dist/server/flow-surfaces/compose-runtime.d.ts +93 -0
  117. package/dist/server/flow-surfaces/compose-runtime.js +375 -0
  118. package/dist/server/flow-surfaces/configure-options.d.ts +23 -0
  119. package/dist/server/flow-surfaces/configure-options.js +827 -0
  120. package/dist/server/flow-surfaces/constants.d.ts +351 -0
  121. package/dist/server/flow-surfaces/constants.js +104 -0
  122. package/dist/server/flow-surfaces/context.d.ts +72 -0
  123. package/dist/server/flow-surfaces/context.js +556 -0
  124. package/dist/server/flow-surfaces/contract-guard.d.ts +19 -0
  125. package/dist/server/flow-surfaces/contract-guard.js +402 -0
  126. package/dist/server/flow-surfaces/default-action-popup.d.ts +63 -0
  127. package/dist/server/flow-surfaces/default-action-popup.js +322 -0
  128. package/dist/server/flow-surfaces/default-block-actions.d.ts +32 -0
  129. package/dist/server/flow-surfaces/default-block-actions.js +185 -0
  130. package/dist/server/flow-surfaces/errors.d.ts +47 -0
  131. package/dist/server/flow-surfaces/errors.js +145 -0
  132. package/dist/server/flow-surfaces/executor.d.ts +23 -0
  133. package/dist/server/flow-surfaces/executor.js +132 -0
  134. package/dist/server/flow-surfaces/field-binding-registry.d.ts +23 -0
  135. package/dist/server/flow-surfaces/field-binding-registry.js +391 -0
  136. package/dist/server/flow-surfaces/field-semantics.d.ts +15 -0
  137. package/dist/server/flow-surfaces/field-semantics.js +81 -0
  138. package/dist/server/flow-surfaces/filter-group.d.ts +15 -0
  139. package/dist/server/flow-surfaces/filter-group.js +94 -0
  140. package/dist/server/flow-surfaces/index.d.ts +11 -0
  141. package/dist/server/flow-surfaces/index.js +243 -0
  142. package/dist/server/flow-surfaces/locator.d.ts +28 -0
  143. package/dist/server/flow-surfaces/locator.js +240 -0
  144. package/dist/server/flow-surfaces/node-use-sets.d.ts +15 -0
  145. package/dist/server/flow-surfaces/node-use-sets.js +131 -0
  146. package/dist/server/flow-surfaces/payload-shape.d.ts +9 -0
  147. package/dist/server/flow-surfaces/payload-shape.js +61 -0
  148. package/dist/server/flow-surfaces/placement.d.ts +33 -0
  149. package/dist/server/flow-surfaces/placement.js +195 -0
  150. package/dist/server/flow-surfaces/planning/action-specs.d.ts +179 -0
  151. package/dist/server/flow-surfaces/planning/action-specs.js +190 -0
  152. package/dist/server/flow-surfaces/planning/compiler.d.ts +37 -0
  153. package/dist/server/flow-surfaces/planning/compiler.js +376 -0
  154. package/dist/server/flow-surfaces/planning/context.d.ts +30 -0
  155. package/dist/server/flow-surfaces/planning/context.js +139 -0
  156. package/dist/server/flow-surfaces/planning/created-keys.d.ts +34 -0
  157. package/dist/server/flow-surfaces/planning/created-keys.js +375 -0
  158. package/dist/server/flow-surfaces/planning/key-kind.d.ts +11 -0
  159. package/dist/server/flow-surfaces/planning/key-kind.js +88 -0
  160. package/dist/server/flow-surfaces/planning/key-persistence.d.ts +34 -0
  161. package/dist/server/flow-surfaces/planning/key-persistence.js +148 -0
  162. package/dist/server/flow-surfaces/planning/key-registry.d.ts +40 -0
  163. package/dist/server/flow-surfaces/planning/key-registry.js +206 -0
  164. package/dist/server/flow-surfaces/planning/runtime.d.ts +37 -0
  165. package/dist/server/flow-surfaces/planning/runtime.js +259 -0
  166. package/dist/server/flow-surfaces/planning/step-link.d.ts +14 -0
  167. package/dist/server/flow-surfaces/planning/step-link.js +104 -0
  168. package/dist/server/flow-surfaces/planning/types.d.ts +55 -0
  169. package/dist/server/flow-surfaces/planning/types.js +24 -0
  170. package/dist/server/flow-surfaces/public-data-surface-default-filter.d.ts +20 -0
  171. package/dist/server/flow-surfaces/public-data-surface-default-filter.js +111 -0
  172. package/dist/server/flow-surfaces/reaction/errors.d.ts +20 -0
  173. package/dist/server/flow-surfaces/reaction/errors.js +69 -0
  174. package/dist/server/flow-surfaces/reaction/field-value.d.ts +34 -0
  175. package/dist/server/flow-surfaces/reaction/field-value.js +181 -0
  176. package/dist/server/flow-surfaces/reaction/fingerprint.d.ts +16 -0
  177. package/dist/server/flow-surfaces/reaction/fingerprint.js +71 -0
  178. package/dist/server/flow-surfaces/reaction/linkage.d.ts +136 -0
  179. package/dist/server/flow-surfaces/reaction/linkage.js +882 -0
  180. package/dist/server/flow-surfaces/reaction/meta.d.ts +11 -0
  181. package/dist/server/flow-surfaces/reaction/meta.js +451 -0
  182. package/dist/server/flow-surfaces/reaction/registry.d.ts +156 -0
  183. package/dist/server/flow-surfaces/reaction/registry.js +206 -0
  184. package/dist/server/flow-surfaces/reaction/resolver.d.ts +22 -0
  185. package/dist/server/flow-surfaces/reaction/resolver.js +202 -0
  186. package/dist/server/flow-surfaces/reaction/types.d.ts +241 -0
  187. package/dist/server/flow-surfaces/reaction/types.js +24 -0
  188. package/dist/server/flow-surfaces/reaction/utils.d.ts +17 -0
  189. package/dist/server/flow-surfaces/reaction/utils.js +67 -0
  190. package/dist/server/flow-surfaces/reaction/value-expr.d.ts +15 -0
  191. package/dist/server/flow-surfaces/reaction/value-expr.js +209 -0
  192. package/dist/server/flow-surfaces/reference-guards.d.ts +19 -0
  193. package/dist/server/flow-surfaces/reference-guards.js +103 -0
  194. package/dist/server/flow-surfaces/route-sync.d.ts +47 -0
  195. package/dist/server/flow-surfaces/route-sync.js +392 -0
  196. package/dist/server/flow-surfaces/service-helpers.d.ts +42 -0
  197. package/dist/server/flow-surfaces/service-helpers.js +377 -0
  198. package/dist/server/flow-surfaces/service-utils.d.ts +108 -0
  199. package/dist/server/flow-surfaces/service-utils.js +811 -0
  200. package/dist/server/flow-surfaces/service.d.ts +773 -0
  201. package/dist/server/flow-surfaces/service.js +13008 -0
  202. package/dist/server/flow-surfaces/support-matrix.d.ts +31 -0
  203. package/dist/server/flow-surfaces/support-matrix.js +259 -0
  204. package/dist/server/flow-surfaces/surface-context.d.ts +52 -0
  205. package/dist/server/flow-surfaces/surface-context.js +437 -0
  206. package/dist/server/flow-surfaces/template-compatibility.d.ts +42 -0
  207. package/dist/server/flow-surfaces/template-compatibility.js +189 -0
  208. package/dist/server/flow-surfaces/template-display.d.ts +20 -0
  209. package/dist/server/flow-surfaces/template-display.js +289 -0
  210. package/dist/server/flow-surfaces/template-service-utils.d.ts +62 -0
  211. package/dist/server/flow-surfaces/template-service-utils.js +281 -0
  212. package/dist/server/flow-surfaces/types.d.ts +288 -0
  213. package/dist/server/flow-surfaces/types.js +24 -0
  214. package/dist/server/plugin.js +2 -0
  215. package/dist/swagger/flow-surfaces.d.ts +5964 -0
  216. package/dist/swagger/flow-surfaces.examples.d.ts +1533 -0
  217. package/dist/swagger/flow-surfaces.examples.js +1758 -0
  218. package/dist/swagger/flow-surfaces.js +5315 -0
  219. package/dist/swagger/flow-surfaces.template-action-docs.d.ts +62 -0
  220. package/dist/swagger/flow-surfaces.template-action-docs.js +121 -0
  221. package/dist/swagger/flow-surfaces.template-schemas.d.ts +239 -0
  222. package/dist/swagger/flow-surfaces.template-schemas.js +255 -0
  223. package/dist/swagger/index.d.ts +5969 -0
  224. package/dist/swagger/index.js +50 -0
  225. package/package.json +2 -2
  226. /package/dist/ai/{tools → ai-employees/nathan/skills/frontend-developer/tools}/getContextApis.d.ts +0 -0
  227. /package/dist/ai/{tools → ai-employees/nathan/skills/frontend-developer/tools}/getContextEnvs.d.ts +0 -0
  228. /package/dist/ai/{tools → ai-employees/nathan/skills/frontend-developer/tools}/getContextVars.d.ts +0 -0
  229. /package/dist/ai/{tools → ai-employees/nathan/skills/frontend-developer/tools}/lintAndTestJS.d.ts +0 -0
@@ -1,18 +1,18 @@
1
1
  # ctx.getModel()
2
2
 
3
- Returns a model instance (e.g. BlockModel, PageModel, ActionModel) from the current engine or view stack by its `uid`. Use in RunJS to access other models across blocks, pages, or popups.
3
+ Retrieves a model instance (such as `BlockModel`, `PageModel`, `ActionModel`, etc.) from the current engine or view stack based on the model `uid`. This is used in RunJS to access other models across blocks, pages, or popups.
4
4
 
5
- If you only need the model or block for the current execution context, use `ctx.model` or `ctx.blockModel` instead of `ctx.getModel`.
5
+ If you only need the model or block where the current execution context is located, prioritize using `ctx.model` or `ctx.blockModel` instead of `ctx.getModel`.
6
6
 
7
7
  ## Use Cases
8
8
 
9
9
  | Scenario | Description |
10
- |----------|-------------|
11
- | **JSBlock / JSAction** | Get another block’s model by known `uid`; read/write its `resource`, `form`, `setProps`, etc. |
12
- | **RunJS inside popup** | Access a model on the page that opened the popup; pass `searchInPreviousEngines: true` |
13
- | **Custom actions** | Find a form or sub-model in the settings panel across the view stack by `uid` |
10
+ |------|------|
11
+ | **JSBlock / JSAction** | Get models of other blocks based on a known `uid` to read or write their `resource`, `form`, `setProps`, etc. |
12
+ | **RunJS in Popups** | When needing to access a model on the page that opened the popup, pass `searchInPreviousEngines: true`. |
13
+ | **Custom Actions** | Locate forms or sub-models in the configuration panel by `uid` across view stacks to read their configuration or state. |
14
14
 
15
- ## Type
15
+ ## Type Definition
16
16
 
17
17
  ```ts
18
18
  getModel<T extends FlowModel = FlowModel>(
@@ -24,19 +24,19 @@ getModel<T extends FlowModel = FlowModel>(
24
24
  ## Parameters
25
25
 
26
26
  | Parameter | Type | Description |
27
- |-----------|------|-------------|
28
- | `uid` | `string` | Unique id of the target model (e.g. from config or creation) |
29
- | `searchInPreviousEngines` | `boolean` | Optional, default `false`. When `true`, search up the view stack from the current engine to find models in parent views (e.g. the page that opened the popup) |
27
+ |------|------|------|
28
+ | `uid` | `string` | The unique identifier of the target model instance, specified during configuration or creation (e.g., `ctx.model.uid`). |
29
+ | `searchInPreviousEngines` | `boolean` | Optional, defaults to `false`. When `true`, searches from the current engine up to the root in the "view stack," allowing access to models in upper-level engines (e.g., the page that opened a popup). |
30
30
 
31
- ## Return value
31
+ ## Return Value
32
32
 
33
- - Returns the corresponding `FlowModel` subclass (e.g. `BlockModel`, `FormBlockModel`, `ActionModel`) if found.
33
+ - Returns the corresponding `FlowModel` subclass instance (e.g., `BlockModel`, `FormBlockModel`, `ActionModel`) if found.
34
34
  - Returns `undefined` if not found.
35
35
 
36
- ## Search scope
36
+ ## Search Scope
37
37
 
38
- - **Default (`searchInPreviousEngines: false`)**: Search only in the **current engine** by `uid`. In popups or nested views, each view has its own engine; by default only the current view is searched.
39
- - **`searchInPreviousEngines: true`**: Search from the current engine along the `previousEngine` chain; returns the first match. Use when RunJS in a popup needs to access a model on the page that opened it.
38
+ - **Default (`searchInPreviousEngines: false`)**: Searches only within the **current engine** by `uid`. In popups or multi-level views, each view has an independent engine; by default, it only searches for models within the current view.
39
+ - **`searchInPreviousEngines: true`**: Searches upwards along the `previousEngine` chain starting from the current engine, returning the first match. This is useful for accessing a model on the page that opened the current popup.
40
40
 
41
41
  ## Examples
42
42
 
@@ -49,16 +49,17 @@ if (block?.resource) {
49
49
  }
50
50
  ```
51
51
 
52
- ### Access page model from inside popup
52
+ ### Access a model on the page from a popup
53
53
 
54
54
  ```ts
55
+ // Access a block on the page that opened the current popup
55
56
  const pageBlock = ctx.getModel('page-block-uid', true);
56
57
  if (pageBlock) {
57
58
  pageBlock.rerender?.();
58
59
  }
59
60
  ```
60
61
 
61
- ### Cross-model update and rerender
62
+ ### Cross-model read/write and trigger rerender
62
63
 
63
64
  ```ts
64
65
  const target = ctx.getModel('other-block-uid');
@@ -68,17 +69,17 @@ if (target) {
68
69
  }
69
70
  ```
70
71
 
71
- ### Null check
72
+ ### Safety check
72
73
 
73
74
  ```ts
74
75
  const model = ctx.getModel(someUid);
75
76
  if (!model) {
76
- ctx.message.warning('Target model not found');
77
+ ctx.message.warning('Target model does not exist');
77
78
  return;
78
79
  }
79
80
  ```
80
81
 
81
82
  ## Related
82
83
 
83
- - [ctx.model](./model.md): model for current execution context
84
- - [ctx.blockModel](./block-model.md): parent block of current JS; often no need for `getModel`
84
+ - [ctx.model](./model.md): The model where the current execution context is located.
85
+ - [ctx.blockModel](./block-model.md): The parent block model where the current JS is located; usually accessible without needing `getModel`.
@@ -1,33 +1,33 @@
1
1
  # ctx.getValue()
2
2
 
3
- In JSField, JSItem, and other editable field contexts, returns the current value of the field. Use with `ctx.setValue(v)` for two-way binding with the form.
3
+ In editable field scenarios such as JSField and JSItem, use this to get the latest value of the current field. Combined with `ctx.setValue(v)`, it enables two-way binding with the form.
4
4
 
5
- ## Use Cases
5
+ ## Scenarios
6
6
 
7
7
  | Scenario | Description |
8
- |----------|-------------|
9
- | **JSField** | Read user input or current form value in editable custom fields |
10
- | **JSItem** | Read current cell value in table/sub-table editable items |
11
- | **JSColumn** | Read row field value when rendering a column |
8
+ |------|------|
9
+ | **JSField** | Read user input or the current form value in editable custom fields. |
10
+ | **JSItem** | Read the current cell value in editable items of tables/sub-tables. |
11
+ | **JSColumn** | Read the field value of the corresponding row during table column rendering. |
12
12
 
13
- > Note: `ctx.getValue()` is only available in RunJS contexts with form binding; it does not exist in event flow, linkage, etc., where there is no field binding.
13
+ > **Note**: `ctx.getValue()` is only available in RunJS contexts with form binding; it does not exist in scenarios without field binding, such as workflows or linkage rules.
14
14
 
15
- ## Type
15
+ ## Type Definition
16
16
 
17
17
  ```ts
18
18
  getValue<T = any>(): T | undefined;
19
19
  ```
20
20
 
21
- - **Returns**: Current field value; type depends on the fields form item type. May be `undefined` if the field is not registered or not filled.
21
+ - **Return Value**: The current field value, whose type is determined by the field's form item type; it may be `undefined` if the field is not registered or not filled.
22
22
 
23
- ## Value resolution
23
+ ## Retrieval Order
24
24
 
25
- `ctx.getValue()` resolves in this order:
25
+ `ctx.getValue()` retrieves values in the following order:
26
26
 
27
- 1. **Form state**: Prefer current Ant Design Form state.
28
- 2. **Fallback**: If the field is not in the form, use the fields initial value or props.
27
+ 1. **Form State**: Prioritizes reading from the current state of the Ant Design Form.
28
+ 2. **Fallback Value**: If the field is not in the form, it falls back to the field's initial value or props.
29
29
 
30
- If the form is not yet rendered or the field is not registered, the result may be `undefined`.
30
+ > If the form has not finished rendering or the field is not registered, it may return `undefined`.
31
31
 
32
32
  ## Examples
33
33
 
@@ -36,9 +36,9 @@ If the form is not yet rendered or the field is not registered, the result may b
36
36
  ```ts
37
37
  const current = ctx.getValue();
38
38
  if (current == null || current === '') {
39
- ctx.render(<span>Please enter something</span>);
39
+ ctx.render(<span>Please enter content first</span>);
40
40
  } else {
41
- ctx.render(<span>Current: {current}</span>);
41
+ ctx.render(<span>Current value: {current}</span>);
42
42
  }
43
43
  ```
44
44
 
@@ -47,6 +47,7 @@ if (current == null || current === '') {
47
47
  ```tsx
48
48
  const { Input } = ctx.libs.antd;
49
49
 
50
+ // Read current value as default value
50
51
  const defaultValue = ctx.getValue() ?? '';
51
52
 
52
53
  ctx.render(
@@ -59,6 +60,6 @@ ctx.render(
59
60
 
60
61
  ## Related
61
62
 
62
- - [ctx.setValue()](./set-value.md): set current field value; use with getValue for two-way binding
63
- - [ctx.form](./form.md): Ant Design Form instance for other fields
64
- - `js-field:value-change`: container event when value changes from outside; use to update display
63
+ - [ctx.setValue()](./set-value.md) - Set the current field value, used with `getValue` for two-way binding.
64
+ - [ctx.form](./form.md) - Ant Design Form instance, for reading/writing other fields.
65
+ - `js-field:value-change` - Container event triggered when external values change, used to update the display.
@@ -1,94 +1,97 @@
1
1
  # ctx.getVar()
2
2
 
3
- **Asynchronously** reads a variable from the current runtime context. Variable sources are the same as for SQL and template `{{ctx.xxx}}`: current user, current record, view params, popup context, etc.
3
+ Asynchronously reads variable values from the current runtime context. Variable resolution is consistent with `{{ctx.xxx}}` in SQL and templates, typically originating from the current user, current record, view parameters, popup context, etc.
4
4
 
5
5
  ## Use Cases
6
6
 
7
7
  | Scenario | Description |
8
- |----------|-------------|
9
- | **JSBlock / JSField** | Get current record, user, resource, etc. for rendering or logic |
10
- | **Linkage / event flow** | Read `ctx.record`, `ctx.formValues`, etc. for conditions |
11
- | **Formulas / templates** | Same variable resolution as `{{ctx.xxx}}` |
8
+ |------|------|
9
+ | **JSBlock / JSField** | Get information about the current record, user, resource, etc., for rendering or logic. |
10
+ | **Linkage Rules / FlowEngine** | Read `ctx.record`, `ctx.formValues`, etc., for conditional logic. |
11
+ | **Formulas / Templates** | Uses the same variable resolution rules as `{{ctx.xxx}}`. |
12
12
 
13
- ## Type
13
+ ## Type Definition
14
14
 
15
15
  ```ts
16
16
  getVar(path: string): Promise<any>;
17
17
  ```
18
18
 
19
19
  | Parameter | Type | Description |
20
- |-----------|------|-------------|
21
- | `path` | `string` | Variable path; **must start with `ctx.`**; supports dot and array index |
20
+ |------|------|------|
21
+ | `path` | `string` | Variable path; **must start with `ctx.`**. Supports dot notation and array indices. |
22
22
 
23
- **Returns**: `Promise<any>`; use `await` to get the resolved value. Returns `undefined` if the variable does not exist.
23
+ **Return Value**: `Promise<any>`. Use `await` to get the resolved value; returns `undefined` if the variable does not exist.
24
24
 
25
- > If the path does not start with `ctx.`, an error is thrown: `ctx.getVar(path) expects an expression starting with "ctx.", got: "..."`.
25
+ > If a path that does not start with `ctx.` is passed, an error will be thrown: `ctx.getVar(path) expects an expression starting with "ctx.", got: "..."`.
26
26
 
27
- ## Common paths
27
+ ## Common Variable Paths
28
28
 
29
29
  | Path | Description |
30
- |------|-------------|
31
- | `ctx.record` | Current record (when form/detail is bound to a record) |
30
+ |------|------|
31
+ | `ctx.record` | Current record (available when a form/details block is bound to a record) |
32
32
  | `ctx.record.id` | Current record primary key |
33
- | `ctx.formValues` | Current form values (common in linkage/event flow; in form context prefer `ctx.form.getFieldsValue()` for live values) |
34
- | `ctx.user` | Current user |
35
- | `ctx.user.id` | Current user id |
33
+ | `ctx.formValues` | Current form values (commonly used in linkage rules and FlowEngine; in form scenarios, prefer `ctx.form.getFieldsValue()` for real-time reading) |
34
+ | `ctx.user` | Current logged-in user |
35
+ | `ctx.user.id` | Current user ID |
36
36
  | `ctx.user.nickname` | Current user nickname |
37
37
  | `ctx.user.roles.name` | Current user role names (array) |
38
- | `ctx.popup.record` | Record in popup |
39
- | `ctx.popup.record.id` | Popup record primary key |
40
- | `ctx.urlSearchParams` | URL query params (from `?key=value`) |
41
- | `ctx.token` | Current API token |
38
+ | `ctx.popup.record` | Record within a popup |
39
+ | `ctx.popup.record.id` | Primary key of the record within a popup |
40
+ | `ctx.urlSearchParams` | URL query parameters (parsed from `?key=value`) |
41
+ | `ctx.token` | Current API Token |
42
42
  | `ctx.role` | Current role |
43
43
 
44
44
  ## ctx.getVarInfos()
45
45
 
46
- Returns **structure info** (type, title, child properties, etc.) for variables that can be resolved in the current context. Useful to discover available paths. Values are static meta, not runtime values.
46
+ Gets the **structural information** (type, title, sub-properties, etc.) of resolvable variables in the current context, making it easier to explore available paths. The return value is a static description based on `meta` and does not include actual runtime values.
47
47
 
48
- ### Type
48
+ ### Type Definition
49
49
 
50
50
  ```ts
51
51
  getVarInfos(options?: { path?: string | string[]; maxDepth?: number }): Promise<Record<string, any>>;
52
52
  ```
53
53
 
54
- Each key in the result is a variable path; each value is that path’s structure (e.g. `type`, `title`, `properties`).
54
+ In the return value, each key is a variable path, and the value is the structural information for that path (including `type`, `title`, `properties`, etc.).
55
55
 
56
- ### Options
56
+ ### Parameters
57
57
 
58
- | Option | Type | Description |
59
- |--------|------|-------------|
60
- | `path` | `string \| string[]` | Limit to paths under this; e.g. `'record'`, `'record.id'`, `'ctx.record'`, `'{{ ctx.record }}'`; array = multiple paths merged |
61
- | `maxDepth` | `number` | Max depth to expand; default `3`. Without path, top-level depth=1; with path, that node depth=1 |
58
+ | Parameter | Type | Description |
59
+ |------|------|------|
60
+ | `path` | `string \| string[]` | Truncation path; only collects the variable structure under this path. Supports `'record'`, `'record.id'`, `'ctx.record'`, `'{{ ctx.record }}'`; an array represents the merging of multiple paths. |
61
+ | `maxDepth` | `number` | Maximum expansion depth, default is `3`. When `path` is not provided, top-level properties have `depth=1`. When `path` is provided, the node corresponding to the path has `depth=1`. |
62
62
 
63
63
  ### Example
64
64
 
65
65
  ```ts
66
+ // Get the variable structure under record (expanded up to 3 levels)
66
67
  const vars = await ctx.getVarInfos({ path: 'record', maxDepth: 3 });
67
68
 
69
+ // Get the structure of popup.record
68
70
  const vars = await ctx.getVarInfos({ path: 'popup.record', maxDepth: 3 });
69
71
 
72
+ // Get the complete top-level variable structure (default maxDepth=3)
70
73
  const vars = await ctx.getVarInfos();
71
74
  ```
72
75
 
73
- ## Relation to ctx.getValue
76
+ ## Difference from ctx.getValue
74
77
 
75
- | Method | Context | Description |
76
- |--------|---------|-------------|
77
- | `ctx.getValue()` | JSField, JSItem, etc. | Sync; **current field** value; requires form binding |
78
- | `ctx.getVar(path)` | Any RunJS | Async; **any ctx variable**; path must start with `ctx.` |
78
+ | Method | Scenario | Description |
79
+ |------|----------|------|
80
+ | `ctx.getValue()` | Editable fields like JSField or JSItem | Synchronously gets the value of the **current field**; requires form binding. |
81
+ | `ctx.getVar(path)` | Any RunJS context | Asynchronously gets **any ctx variable**; path must start with `ctx.`. |
79
82
 
80
- In JSField, use getValue/setValue for the field; use getVar for other context (record, user, formValues).
83
+ In a JSField, use `getValue`/`setValue` to read/write the current field; use `getVar` to access other context variables (such as `record`, `user`, `formValues`).
81
84
 
82
85
  ## Notes
83
86
 
84
- - **Path must start with `ctx.`**: e.g. `ctx.record.id`; otherwise an error is thrown.
85
- - **Async**: Use `await`, e.g. `const id = await ctx.getVar('ctx.record.id')`.
86
- - **Missing variable**: Returns `undefined`; use `??` for default: `(await ctx.getVar('ctx.user.nickname')) ?? 'Guest'`.
87
- - **Form values**: Get via `await ctx.getVar('ctx.formValues')`; not exposed as `ctx.formValues`. In form context prefer `ctx.form.getFieldsValue()` for latest values.
87
+ - **Path must start with `ctx.`**: e.g., `ctx.record.id`, otherwise an error will be thrown.
88
+ - **Asynchronous method**: You must use `await` to get the result, e.g., `const id = await ctx.getVar('ctx.record.id')`.
89
+ - **Variable does not exist**: Returns `undefined`. You can use `??` after the result to set a default value: `(await ctx.getVar('ctx.user.nickname')) ?? 'Guest'`.
90
+ - **Form values**: `ctx.formValues` must be retrieved via `await ctx.getVar('ctx.formValues')`; it is not directly exposed as `ctx.formValues`. In a form context, prefer using `ctx.form.getFieldsValue()` to read the latest values in real-time.
88
91
 
89
92
  ## Examples
90
93
 
91
- ### Current record id
94
+ ### Get Current Record ID
92
95
 
93
96
  ```ts
94
97
  const recordId = await ctx.getVar('ctx.record.id');
@@ -97,55 +100,58 @@ if (recordId) {
97
100
  }
98
101
  ```
99
102
 
100
- ### Popup record
103
+ ### Get Record Within a Popup
101
104
 
102
105
  ```ts
103
106
  const recordId = await ctx.getVar('ctx.popup.record.id');
104
107
  if (recordId) {
105
- ctx.message.info(`Popup record: ${recordId}`);
108
+ ctx.message.info(`Current popup record: ${recordId}`);
106
109
  }
107
110
  ```
108
111
 
109
- ### Array field items
112
+ ### Read Sub-items of an Array Field
110
113
 
111
114
  ```ts
112
115
  const roleNames = await ctx.getVar('ctx.user.roles.name');
113
- // e.g. ['admin', 'member']
116
+ // Returns an array of role names, e.g., ['admin', 'member']
114
117
  ```
115
118
 
116
- ### Default value
119
+ ### Set Default Value
117
120
 
118
121
  ```ts
122
+ // getVar does not have a defaultValue parameter; use ?? after the result
119
123
  const userName = (await ctx.getVar('ctx.user.nickname')) ?? 'Guest';
120
124
  ```
121
125
 
122
- ### Form field value
126
+ ### Read Form Field Values
123
127
 
124
128
  ```ts
129
+ // Both ctx.formValues and ctx.form are for form scenarios; use getVar to read nested fields
125
130
  const status = await ctx.getVar('ctx.formValues.status');
126
131
  if (status === 'draft') {
127
132
  // ...
128
133
  }
129
134
  ```
130
135
 
131
- ### URL query params
136
+ ### Read URL Query Parameters
132
137
 
133
138
  ```ts
134
- const id = await ctx.getVar('ctx.urlSearchParams.id'); // ?id=xxx
139
+ const id = await ctx.getVar('ctx.urlSearchParams.id'); // Corresponds to ?id=xxx
135
140
  ```
136
141
 
137
- ### Explore variables
142
+ ### Explore Available Variables
138
143
 
139
144
  ```ts
145
+ // Get the variable structure under record (expanded up to 3 levels)
140
146
  const vars = await ctx.getVarInfos({ path: 'record', maxDepth: 3 });
141
- // e.g. { 'record.id': { type: 'string', title: 'id' }, ... }
147
+ // vars looks like { 'record.id': { type: 'string', title: 'id' }, ... }
142
148
  ```
143
149
 
144
150
  ## Related
145
151
 
146
- - [ctx.getValue()](./get-value.md): sync current field value (JSField/JSItem only)
147
- - [ctx.form](./form.md): form instance; `ctx.form.getFieldsValue()` for live form values
148
- - [ctx.model](./model.md): current model
149
- - [ctx.blockModel](./block-model.md): parent block
150
- - [ctx.resource](./resource.md): resource in current context
151
- - SQL / template `{{ctx.xxx}}`: same resolution as `ctx.getVar('ctx.xxx')`
152
+ - [ctx.getValue()](./get-value.md) - Synchronously gets the current field value (JSField/JSItem only)
153
+ - [ctx.form](./form.md) - Form instance; `ctx.form.getFieldsValue()` can read form values in real-time
154
+ - [ctx.model](./model.md) - The model where the current execution context resides
155
+ - [ctx.blockModel](./block-model.md) - The parent block where the current JS is located
156
+ - [ctx.resource](./resource.md) - The resource instance in the current context
157
+ - `{{ctx.xxx}}` in SQL / Templates - Uses the same resolution rules as `ctx.getVar('ctx.xxx')`
@@ -1,12 +1,12 @@
1
1
  # ctx.i18n
2
2
 
3
- The i18n instance for the current context; used to read or change the language. **Use [ctx.t()](./t.md) for all translated text**; do not use `ctx.i18n.t`.
3
+ The i18n instance of the current context, used for reading or switching languages. **Use [ctx.t()](./t.md) for translating text**; do not use `ctx.i18n.t`.
4
4
 
5
- ## Use Cases
5
+ ## Scenarios
6
6
 
7
- Available in all RunJS environments (JSBlock, JSField, JSItem, JSColumn, event flow, linkage, etc.).
7
+ All RunJS execution environments can use `ctx.i18n` (e.g., JSBlock, JSField, JSItem, JSColumn, Workflow, Linkage Rules, etc.).
8
8
 
9
- ## Type
9
+ ## Type Definition
10
10
 
11
11
  ```typescript
12
12
  interface i18n: {
@@ -18,27 +18,28 @@ interface i18n: {
18
18
  ## Common Properties
19
19
 
20
20
  | Property | Type | Description |
21
- |----------|------|-------------|
22
- | `language` | `string` | Current language code (e.g. `zh-CN`, `en-US`) |
21
+ |------|------|------|
22
+ | `language` | `string` | The currently active language code (e.g., `en-US`, `zh-CN`) |
23
23
 
24
24
  ## Common Methods
25
25
 
26
26
  ### changeLanguage(lng)
27
27
 
28
- Change the current language.
28
+ Switches the current language.
29
29
 
30
30
  | Parameter | Type | Description |
31
- |-----------|------|-------------|
32
- | `lng` | `string` | Target language code (e.g. `en-US`, `zh-CN`) |
31
+ |------|------|------|
32
+ | `lng` | `string` | Target language code (e.g., `'en-US'`, `'zh-CN'`) |
33
33
 
34
- **Returns**: `Promise<any>`, resolves when the language has been changed.
34
+ **Returns**: `Promise<any>`, resolves after the language switch is complete.
35
35
 
36
36
  ## Examples
37
37
 
38
- ### Read current language
38
+ ### Reading the current language
39
39
 
40
40
  ```ts
41
41
  const lang = ctx.i18n.language;
42
+ // 'en-US' | 'zh-CN' | ...
42
43
  if (lang.startsWith('zh')) {
43
44
  ctx.render(ctx.t('Chinese UI'));
44
45
  } else {
@@ -46,11 +47,13 @@ if (lang.startsWith('zh')) {
46
47
  }
47
48
  ```
48
49
 
49
- ### Change language
50
+ ### Switching languages
50
51
 
51
52
  ```ts
53
+ // Switch to English
52
54
  await ctx.i18n.changeLanguage('en-US');
53
55
 
56
+ // Switch to Chinese
54
57
  await ctx.i18n.changeLanguage('zh-CN');
55
58
  ```
56
59
 
@@ -70,8 +73,8 @@ ctx.render(
70
73
 
71
74
  ## Notes
72
75
 
73
- - **Translated text**: Use `ctx.t()` only; do not use `ctx.i18n.t`.
76
+ - **Translation text**: Use `ctx.t()` consistently; do not use `ctx.i18n.t`.
74
77
 
75
78
  ## Related
76
79
 
77
- - [ctx.t()](./t.md): translation; use this for all copy
80
+ - [ctx.t()](./t.md): Translate text, use this method consistently.