@nocobase/plugin-flow-engine 2.1.0-alpha.7 → 2.1.0-alpha.8

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 (53) hide show
  1. package/dist/ai/docs/runjs/context/block-model.md +35 -35
  2. package/dist/ai/docs/runjs/context/collection-field.md +53 -51
  3. package/dist/ai/docs/runjs/context/collection.md +39 -39
  4. package/dist/ai/docs/runjs/context/data-source-manager.md +40 -30
  5. package/dist/ai/docs/runjs/context/data-source.md +52 -44
  6. package/dist/ai/docs/runjs/context/element.md +44 -38
  7. package/dist/ai/docs/runjs/context/exit-all.md +37 -35
  8. package/dist/ai/docs/runjs/context/exit.md +38 -35
  9. package/dist/ai/docs/runjs/context/filter-manager.md +36 -30
  10. package/dist/ai/docs/runjs/context/form.md +57 -57
  11. package/dist/ai/docs/runjs/context/get-model.md +22 -21
  12. package/dist/ai/docs/runjs/context/get-value.md +20 -19
  13. package/dist/ai/docs/runjs/context/get-var.md +61 -55
  14. package/dist/ai/docs/runjs/context/i18n.md +17 -14
  15. package/dist/ai/docs/runjs/context/import-async.md +333 -45
  16. package/dist/ai/docs/runjs/context/init-resource.md +20 -20
  17. package/dist/ai/docs/runjs/context/libs.md +31 -31
  18. package/dist/ai/docs/runjs/context/location.md +34 -31
  19. package/dist/ai/docs/runjs/context/logger.md +41 -40
  20. package/dist/ai/docs/runjs/context/make-resource.md +27 -26
  21. package/dist/ai/docs/runjs/context/message.md +42 -41
  22. package/dist/ai/docs/runjs/context/modal.md +44 -44
  23. package/dist/ai/docs/runjs/context/model.md +36 -33
  24. package/dist/ai/docs/runjs/context/notification.md +41 -40
  25. package/dist/ai/docs/runjs/context/off.md +14 -14
  26. package/dist/ai/docs/runjs/context/on.md +30 -29
  27. package/dist/ai/docs/runjs/context/open-view.md +40 -40
  28. package/dist/ai/docs/runjs/context/render.md +37 -32
  29. package/dist/ai/docs/runjs/context/request.md +46 -45
  30. package/dist/ai/docs/runjs/context/require-async.md +28 -25
  31. package/dist/ai/docs/runjs/context/resource.md +34 -34
  32. package/dist/ai/docs/runjs/context/route.md +36 -34
  33. package/dist/ai/docs/runjs/context/router.md +43 -31
  34. package/dist/ai/docs/runjs/context/set-value.md +18 -17
  35. package/dist/ai/docs/runjs/context/sql.md +7 -15
  36. package/dist/ai/docs/runjs/context/t.md +20 -17
  37. package/dist/ai/docs/runjs/context/view.md +49 -46
  38. package/dist/ai/docs/runjs/document.md +1 -0
  39. package/dist/ai/docs/runjs/import-modules.md +32 -32
  40. package/dist/ai/docs/runjs/index.md +13 -13
  41. package/dist/ai/docs/runjs/jsx.md +19 -19
  42. package/dist/ai/docs/runjs/model/form-block-model.md +1 -3
  43. package/dist/ai/docs/runjs/render.md +15 -15
  44. package/dist/ai/docs/runjs/resource/api-resource.md +53 -53
  45. package/dist/ai/docs/runjs/resource/multi-record-resource.md +64 -64
  46. package/dist/ai/docs/runjs/resource/single-record-resource.md +55 -55
  47. package/dist/ai/docs/runjs/resource/sql-resource.md +57 -57
  48. package/dist/ai/docs/runjs/window.md +5 -5
  49. package/dist/externalVersion.js +10 -10
  50. package/dist/node_modules/ses/package.json +1 -1
  51. package/dist/node_modules/zod/package.json +1 -1
  52. package/dist/server/collections/flowsql.js +1 -0
  53. package/package.json +2 -2
@@ -1,28 +1,28 @@
1
1
  # ctx.filterManager
2
2
 
3
- The filter connection manager that links filter forms (FilterForm) to data blocks (tables, lists, charts, etc.). Provided by `BlockGridModel`; only available in that context (e.g. pages with a filter form block).
3
+ The Filter Connection Manager is used to manage the filter associations between filter forms (FilterForm) and data blocks (tables, lists, charts, etc.). It is provided by `BlockGridModel` and is only available within its context (e.g., filter form blocks, data blocks).
4
4
 
5
5
  ## Use Cases
6
6
 
7
7
  | Scenario | Description |
8
- |----------|-------------|
9
- | **Filter form block** | Manage connections between filter items and target blocks; refresh targets when filters change |
10
- | **Data block (table/list)** | Act as filter target; bind filter conditions via `bindToTarget` |
11
- | **Linkage / custom FilterModel** | In `doFilter`, `doReset`, call `refreshTargetsByFilter` to refresh targets |
12
- | **Connection field config** | Use `getConnectFieldsConfig`, `saveConnectFieldsConfig` for filter–target field mapping |
8
+ |------|------|
9
+ | **Filter Form Block** | Manages connection configurations between filter items and target blocks; refreshes target data when filters change. |
10
+ | **Data Block (Table/List)** | Acts as a filter target, binding filter conditions via `bindToTarget`. |
11
+ | **Linkage Rules / Custom FilterModel** | Calls `refreshTargetsByFilter` within `doFilter` or `doReset` to trigger target refreshes. |
12
+ | **Connection Field Configuration** | Uses `getConnectFieldsConfig` and `saveConnectFieldsConfig` to maintain field mappings between filters and targets. |
13
13
 
14
- > Note: `ctx.filterManager` is only available in RunJS contexts that have a `BlockGridModel` (e.g. pages with a filter form); in a plain JSBlock or standalone page it is `undefined`—check before use.
14
+ > Note: `ctx.filterManager` is only available in RunJS contexts that have a `BlockGridModel` (e.g., within a page containing a filter form); it is `undefined` in regular JSBlocks or independent pages. It is recommended to use optional chaining before access.
15
15
 
16
- ## Type
16
+ ## Type Definitions
17
17
 
18
18
  ```ts
19
19
  filterManager: FilterManager;
20
20
 
21
21
  type FilterConfig = {
22
- filterId: string;
23
- targetId: string;
24
- filterPaths?: string[];
25
- operator?: string;
22
+ filterId: string; // Filter model UID
23
+ targetId: string; // Target data block model UID
24
+ filterPaths?: string[]; // Field paths of the target block
25
+ operator?: string; // Filter operator
26
26
  };
27
27
 
28
28
  type ConnectFieldsConfig = {
@@ -33,24 +33,24 @@ type ConnectFieldsConfig = {
33
33
  ## Common Methods
34
34
 
35
35
  | Method | Description |
36
- |--------|-------------|
37
- | `getFilterConfigs()` | All filter connection configs |
38
- | `getConnectFieldsConfig(filterId)` | Connection field config for a filter |
39
- | `saveConnectFieldsConfig(filterId, config)` | Save connection field config for a filter |
40
- | `addFilterConfig(config)` | Add filter config (filterId + targetId + filterPaths) |
41
- | `removeFilterConfig({ filterId?, targetId?, persist? })` | Remove config by filterId and/or targetId |
42
- | `bindToTarget(targetId)` | Bind filter to target block; its resource applies the filter |
43
- | `unbindFromTarget(targetId)` | Unbind filter from target |
44
- | `refreshTargetsByFilter(filterId or filterId[])` | Refresh target block(s) by filter |
36
+ |------|------|
37
+ | `getFilterConfigs()` | Gets all current filter connection configurations. |
38
+ | `getConnectFieldsConfig(filterId)` | Gets the connection field configuration for a specific filter. |
39
+ | `saveConnectFieldsConfig(filterId, config)` | Saves the connection field configuration for a filter. |
40
+ | `addFilterConfig(config)` | Adds a filter configuration (filterId + targetId + filterPaths). |
41
+ | `removeFilterConfig({ filterId?, targetId?, persist? })` | Removes filter configurations by filterId, targetId, or both. |
42
+ | `bindToTarget(targetId)` | Binds the filter configuration to a target block, triggering its resource to apply the filter. |
43
+ | `unbindFromTarget(targetId)` | Unbinds the filter from the target block. |
44
+ | `refreshTargetsByFilter(filterId | filterId[])` | Refreshes associated target block data based on the filter(s). |
45
45
 
46
- ## Concepts
46
+ ## Core Concepts
47
47
 
48
- - **FilterModel**: Provides filter values (e.g. FilterFormItemModel); must implement `getFilterValue()`.
49
- - **TargetModel**: Data block being filtered; its `resource` must support `addFilterGroup`, `removeFilterGroup`, `refresh`.
48
+ - **FilterModel**: A model providing filter conditions (e.g., FilterFormItemModel), which must implement `getFilterValue()` to return the current filter value.
49
+ - **TargetModel**: The data block being filtered; its `resource` must support `addFilterGroup`, `removeFilterGroup`, and `refresh`.
50
50
 
51
51
  ## Examples
52
52
 
53
- ### Add filter config
53
+ ### Add Filter Configuration
54
54
 
55
55
  ```ts
56
56
  await ctx.filterManager?.addFilterConfig({
@@ -61,19 +61,23 @@ await ctx.filterManager?.addFilterConfig({
61
61
  });
62
62
  ```
63
63
 
64
- ### Refresh target blocks
64
+ ### Refresh Target Blocks
65
65
 
66
66
  ```ts
67
+ // In doFilter / doReset of a filter form
67
68
  ctx.filterManager?.refreshTargetsByFilter(ctx.model.uid);
68
69
 
70
+ // Refresh targets associated with multiple filters
69
71
  ctx.filterManager?.refreshTargetsByFilter(['filter-1', 'filter-2']);
70
72
  ```
71
73
 
72
- ### Connection field config
74
+ ### Connection Field Configuration
73
75
 
74
76
  ```ts
77
+ // Get connection configuration
75
78
  const config = ctx.filterManager?.getConnectFieldsConfig(ctx.model.uid);
76
79
 
80
+ // Save connection configuration
77
81
  await ctx.filterManager?.saveConnectFieldsConfig(ctx.model.uid, {
78
82
  targets: [
79
83
  { targetId: 'table-uid', filterPaths: ['status'] },
@@ -82,15 +86,17 @@ await ctx.filterManager?.saveConnectFieldsConfig(ctx.model.uid, {
82
86
  });
83
87
  ```
84
88
 
85
- ### Remove config
89
+ ### Remove Configuration
86
90
 
87
91
  ```ts
92
+ // Delete all configurations for a specific filter
88
93
  await ctx.filterManager?.removeFilterConfig({ filterId: 'filter-uid' });
89
94
 
95
+ // Delete all filter configurations for a specific target
90
96
  await ctx.filterManager?.removeFilterConfig({ targetId: 'table-uid' });
91
97
  ```
92
98
 
93
99
  ## Related
94
100
 
95
- - [ctx.resource](./resource.md): target blocks resource must support filter APIs
96
- - [ctx.model](./model.md): current model uid for filterId / targetId
101
+ - [ctx.resource](./resource.md): The target block's resource must support the filter interface.
102
+ - [ctx.model](./model.md): Used to get the current model's UID for filterId / targetId.
@@ -1,109 +1,109 @@
1
1
  # ctx.form
2
2
 
3
- The Ant Design Form instance for the current block; used to read/write form fields, trigger validation, and submit. Same as `ctx.blockModel?.form`; in form blocks (Form, EditForm, sub-forms, etc.) you can use it directly.
3
+ The Ant Design Form instance within the current block, used to read/write form fields, trigger validation, and submission. It is equivalent to `ctx.blockModel?.form` and can be used directly in form-related blocks (Form, Edit Form, Sub-form, etc.).
4
4
 
5
5
  ## Use Cases
6
6
 
7
7
  | Scenario | Description |
8
- |----------|-------------|
9
- | **JSField** | Read/write other fields for linkage, compute or validate from other field values |
10
- | **JSItem** | Read/write same row or other fields in sub-table items |
11
- | **JSColumn** | Read row or related field values for column rendering |
12
- | **Form actions / event flow** | Pre-submit validation, batch field updates, reset form, etc. |
8
+ |------|------|
9
+ | **JSField** | Read/write other form fields to implement linkage, or perform calculations and validation based on other field values. |
10
+ | **JSItem** | Read/write same-row or other fields within sub-table items to achieve in-table linkage. |
11
+ | **JSColumn** | Read the current row or association field values in a table column for rendering. |
12
+ | **Form Actions / Workflow** | Pre-submission validation, batch updating fields, resetting forms, etc. |
13
13
 
14
- > Note: `ctx.form` is only available in RunJS contexts tied to a form block (Form, EditForm, sub-forms, etc.); in non-form contexts (e.g. standalone JSBlock, table block) it may be absent—check before use: `ctx.form?.getFieldsValue()`.
14
+ > Note: `ctx.form` is only available in RunJS contexts related to form blocks (Form, Edit Form, Sub-form, etc.). It may not exist in non-form scenarios (such as independent JSBlocks or Table blocks). It is recommended to perform a null check before use: `ctx.form?.getFieldsValue()`.
15
15
 
16
- ## Type
16
+ ## Type Definition
17
17
 
18
18
  ```ts
19
19
  form: FormInstance<any>;
20
20
  ```
21
21
 
22
- `FormInstance` is the Ant Design Form instance type.
22
+ `FormInstance` is the instance type of Ant Design Form. Common methods are as follows.
23
23
 
24
24
  ## Common Methods
25
25
 
26
- ### Read form values
26
+ ### Reading Form Values
27
27
 
28
28
  ```ts
29
- // Current registered field values (default: only rendered fields)
29
+ // Read values of currently registered fields (defaults to rendered fields only)
30
30
  const values = ctx.form.getFieldsValue();
31
31
 
32
- // All field values (including unrendered, e.g. hidden, collapsed)
32
+ // Read values of all fields (including registered but unrendered fields, e.g., hidden or inside collapsed sections)
33
33
  const allValues = ctx.form.getFieldsValue(true);
34
34
 
35
- // Single field
35
+ // Read a single field
36
36
  const email = ctx.form.getFieldValue('email');
37
37
 
38
- // Nested (e.g. sub-table)
38
+ // Read nested fields (e.g., in a sub-table)
39
39
  const amount = ctx.form.getFieldValue(['orders', 0, 'amount']);
40
40
  ```
41
41
 
42
- ### Write form values
42
+ ### Writing Form Values
43
43
 
44
44
  ```ts
45
- // Batch update (e.g. linkage)
45
+ // Batch update (commonly used for linkage)
46
46
  ctx.form.setFieldsValue({
47
47
  status: 'active',
48
48
  updatedAt: new Date(),
49
49
  });
50
50
 
51
- // Single field
52
- ctx.form.setFieldValue('remark', 'Noted');
51
+ // Update a single field
52
+ ctx.form.setFieldValue('remark', 'Updated remark');
53
53
  ```
54
54
 
55
- ### Validation and submit
55
+ ### Validation and Submission
56
56
 
57
57
  ```ts
58
- // Trigger validation
58
+ // Trigger form validation
59
59
  await ctx.form.validateFields();
60
60
 
61
- // Trigger submit
61
+ // Trigger form submission
62
62
  ctx.form.submit();
63
63
  ```
64
64
 
65
- ### Reset
65
+ ### Resetting
66
66
 
67
67
  ```ts
68
- // All fields
68
+ // Reset all fields
69
69
  ctx.form.resetFields();
70
70
 
71
- // Specific fields
71
+ // Reset only specific fields
72
72
  ctx.form.resetFields(['status', 'remark']);
73
73
  ```
74
74
 
75
- ## Relation to Other Context
75
+ ## Relationship with Related Contexts
76
76
 
77
77
  ### ctx.getValue / ctx.setValue
78
78
 
79
- | Scenario | Recommended |
80
- |----------|-------------|
81
- | **Current field** | `ctx.getValue()` / `ctx.setValue(v)` |
82
- | **Other fields** | `ctx.form.getFieldValue(name)` / `ctx.form.setFieldValue(name, v)` |
79
+ | Scenario | Recommended Usage |
80
+ |------|----------|
81
+ | **Read/Write current field** | `ctx.getValue()` / `ctx.setValue(v)` |
82
+ | **Read/Write other fields** | `ctx.form.getFieldValue(name)` / `ctx.form.setFieldValue(name, v)` |
83
83
 
84
- In the current JS field, use `getValue`/`setValue` for that field; use `ctx.form` for other fields.
84
+ Within the current JS field, prioritize using `getValue`/`setValue` to read/write the field itself; use `ctx.form` when you need to access other fields.
85
85
 
86
86
  ### ctx.blockModel
87
87
 
88
- | Need | Recommended |
89
- |------|-------------|
90
- | **Read/write form fields** | `ctx.form` (same as `ctx.blockModel?.form`) |
91
- | **Parent block** | `ctx.blockModel` (includes `collection`, `resource`, etc.) |
88
+ | Requirement | Recommended Usage |
89
+ |------|----------|
90
+ | **Read/Write form fields** | `ctx.form` (Equivalent to `ctx.blockModel?.form`, more convenient) |
91
+ | **Access parent block** | `ctx.blockModel` (Contains `collection`, `resource`, etc.) |
92
92
 
93
93
  ### ctx.getVar('ctx.formValues')
94
94
 
95
- Form values are obtained via `await ctx.getVar('ctx.formValues')`, not as `ctx.formValues`. In form contexts, prefer `ctx.form.getFieldsValue()` for up-to-date values.
95
+ Form values must be obtained via `await ctx.getVar('ctx.formValues')` and are not directly exposed as `ctx.formValues`. In a form context, it is preferred to use `ctx.form.getFieldsValue()` to read the latest values in real-time.
96
96
 
97
97
  ## Notes
98
98
 
99
- - `getFieldsValue()` by default returns only rendered fields; for unrendered (e.g. collapsed) use `getFieldsValue(true)`.
100
- - Nested paths use arrays, e.g. `['orders', 0, 'amount']`; you can use `ctx.namePath` to build paths for other columns in the same row.
101
- - `validateFields()` throws with `errorFields` etc. on failure; use `ctx.exit()` to stop further steps when validation fails.
102
- - In event flow or linkage, `ctx.form` may not be ready yet; use optional chaining or null checks.
99
+ - `getFieldsValue()` returns only rendered fields by default. To include unrendered fields (e.g., in collapsed sections or hidden by conditional rules), pass `true`: `getFieldsValue(true)`.
100
+ - Paths for nested fields like sub-tables are arrays, e.g., `['orders', 0, 'amount']`. You can use `ctx.namePath` to get the current field's path and construct paths for other columns in the same row.
101
+ - `validateFields()` throws an error object containing `errorFields` and other information. If validation fails before submission, you can use `ctx.exit()` to terminate subsequent steps.
102
+ - In asynchronous scenarios like workflows or linkage rules, `ctx.form` might not be ready yet. It is recommended to use optional chaining or null checks.
103
103
 
104
104
  ## Examples
105
105
 
106
- ### Field linkage by type
106
+ ### Field Linkage: Display different content based on type
107
107
 
108
108
  ```ts
109
109
  const type = ctx.form.getFieldValue('type');
@@ -114,7 +114,7 @@ if (type === 'vip') {
114
114
  }
115
115
  ```
116
116
 
117
- ### Compute current field from others
117
+ ### Calculate current field based on other fields
118
118
 
119
119
  ```ts
120
120
  const quantity = ctx.form.getFieldValue('quantity') ?? 0;
@@ -122,48 +122,48 @@ const price = ctx.form.getFieldValue('price') ?? 0;
122
122
  ctx.setValue(quantity * price);
123
123
  ```
124
124
 
125
- ### Same row in sub-table
125
+ ### Read/Write other columns in the same row within a sub-table
126
126
 
127
127
  ```ts
128
- // ctx.namePath is current field path, e.g. ['orders', 0, 'amount']
129
- // Same row status: ['orders', 0, 'status']
128
+ // ctx.namePath is the path of the current field in the form, e.g., ['orders', 0, 'amount']
129
+ // Read 'status' in the same row: ['orders', 0, 'status']
130
130
  const rowIndex = ctx.namePath?.[1];
131
131
  const status = ctx.form.getFieldValue(['orders', rowIndex, 'status']);
132
132
  ```
133
133
 
134
- ### Pre-submit validation
134
+ ### Pre-submission Validation
135
135
 
136
136
  ```ts
137
137
  try {
138
138
  await ctx.form.validateFields();
139
- // Continue submit logic
139
+ // Validation passed, continue with submission logic
140
140
  } catch (e) {
141
- ctx.message.error('Please fix form errors');
141
+ ctx.message.error('Please check the form fields');
142
142
  ctx.exit();
143
143
  }
144
144
  ```
145
145
 
146
- ### Confirm then submit
146
+ ### Submit after Confirmation
147
147
 
148
148
  ```ts
149
149
  const confirmed = await ctx.modal.confirm({
150
- title: 'Confirm submit',
151
- content: 'Cannot be changed after submit. Continue?',
152
- okText: 'OK',
150
+ title: 'Confirm Submission',
151
+ content: 'You will not be able to modify this after submission. Continue?',
152
+ okText: 'Confirm',
153
153
  cancelText: 'Cancel',
154
154
  });
155
155
  if (confirmed) {
156
156
  await ctx.form.validateFields();
157
157
  ctx.form.submit();
158
158
  } else {
159
- ctx.exit();
159
+ ctx.exit(); // Terminate if user cancels
160
160
  }
161
161
  ```
162
162
 
163
163
  ## Related
164
164
 
165
- - [ctx.getValue()](./get-value.md) / [ctx.setValue()](./set-value.md): read/write current field
166
- - [ctx.blockModel](./block-model.md): parent block; `ctx.form` is `ctx.blockModel?.form`
167
- - [ctx.modal](./modal.md): confirm dialog, often with `ctx.form.validateFields()` / `ctx.form.submit()`
168
- - [ctx.exit()](./exit.md): stop flow on validation failure or cancel
169
- - `ctx.namePath`: current field path in the form (array); use for nested `getFieldValue` / `setFieldValue` names
165
+ - [ctx.getValue()](./get-value.md) / [ctx.setValue()](./set-value.md): Read and write the current field value.
166
+ - [ctx.blockModel](./block-model.md): Parent block model; `ctx.form` is equivalent to `ctx.blockModel?.form`.
167
+ - [ctx.modal](./modal.md): Confirmation dialogs, often used with `ctx.form.validateFields()` and `ctx.form.submit()`.
168
+ - [ctx.exit()](./exit.md): Terminate the process upon validation failure or user cancellation.
169
+ - `ctx.namePath`: The path (array) of the current field in the form, used to construct names for `getFieldValue` / `setFieldValue` in nested fields.
@@ -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.