@nocobase/flow-engine 2.1.0-alpha.1 → 2.1.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/BlockScopedFlowEngine.js +0 -1
- package/lib/FlowDefinition.d.ts +2 -0
- package/lib/JSRunner.d.ts +6 -0
- package/lib/JSRunner.js +32 -2
- package/lib/ViewScopedFlowEngine.js +3 -0
- package/lib/acl/Acl.js +13 -3
- package/lib/components/FlowContextSelector.js +155 -10
- package/lib/components/dnd/gridDragPlanner.d.ts +1 -0
- package/lib/components/dnd/gridDragPlanner.js +53 -1
- package/lib/components/settings/wrappers/component/SwitchWithTitle.js +2 -1
- package/lib/components/settings/wrappers/contextual/DefaultSettingsIcon.js +76 -15
- package/lib/components/settings/wrappers/contextual/FlowsContextMenu.js +24 -4
- package/lib/components/settings/wrappers/contextual/StepSettingsDialog.js +5 -1
- package/lib/components/variables/VariableInput.js +9 -4
- package/lib/components/variables/VariableTag.js +46 -39
- package/lib/components/variables/utils.d.ts +7 -0
- package/lib/components/variables/utils.js +42 -2
- package/lib/data-source/index.d.ts +7 -27
- package/lib/data-source/index.js +84 -51
- package/lib/executor/FlowExecutor.d.ts +2 -1
- package/lib/executor/FlowExecutor.js +163 -22
- package/lib/flowContext.d.ts +230 -7
- package/lib/flowContext.js +2267 -148
- package/lib/flowEngine.d.ts +21 -0
- package/lib/flowEngine.js +55 -13
- package/lib/flowI18n.js +6 -4
- package/lib/flowSettings.js +17 -11
- package/lib/index.d.ts +7 -1
- package/lib/index.js +21 -0
- package/lib/locale/en-US.json +9 -2
- package/lib/locale/index.d.ts +14 -0
- package/lib/locale/zh-CN.json +8 -1
- package/lib/models/CollectionFieldModel.d.ts +1 -0
- package/lib/models/CollectionFieldModel.js +3 -2
- package/lib/models/flowModel.d.ts +7 -0
- package/lib/models/flowModel.js +66 -1
- package/lib/provider.js +7 -6
- package/lib/resources/baseRecordResource.d.ts +5 -0
- package/lib/resources/baseRecordResource.js +24 -0
- package/lib/resources/multiRecordResource.d.ts +1 -0
- package/lib/resources/multiRecordResource.js +11 -4
- package/lib/resources/singleRecordResource.js +2 -0
- package/lib/resources/sqlResource.d.ts +4 -3
- package/lib/resources/sqlResource.js +8 -3
- package/lib/runjs-context/contexts/FormJSFieldItemRunJSContext.js +12 -2
- package/lib/runjs-context/contexts/JSBlockRunJSContext.js +2 -2
- package/lib/runjs-context/contexts/JSEditableFieldRunJSContext.d.ts +16 -0
- package/lib/runjs-context/contexts/JSEditableFieldRunJSContext.js +125 -0
- package/lib/runjs-context/contexts/JSItemRunJSContext.js +12 -2
- package/lib/runjs-context/contexts/base.js +706 -41
- package/lib/runjs-context/contributions.d.ts +33 -0
- package/lib/runjs-context/contributions.js +88 -0
- package/lib/runjs-context/helpers.js +12 -1
- package/lib/runjs-context/setup.js +6 -0
- package/lib/runjs-context/snippets/global/api-request.snippet.js +3 -3
- package/lib/runjs-context/snippets/global/import-esm.snippet.js +2 -3
- package/lib/runjs-context/snippets/global/query-selector.snippet.js +8 -3
- package/lib/runjs-context/snippets/global/require-amd.snippet.js +1 -1
- package/lib/runjs-context/snippets/index.d.ts +11 -1
- package/lib/runjs-context/snippets/index.js +61 -40
- package/lib/runjs-context/snippets/scene/block/add-event-listener.snippet.js +10 -7
- package/lib/runjs-context/snippets/scene/block/api-fetch-render-list.snippet.js +3 -3
- package/lib/runjs-context/snippets/scene/block/chartjs-bar.snippet.js +2 -2
- package/lib/runjs-context/snippets/scene/block/echarts-init.snippet.js +2 -2
- package/lib/runjs-context/snippets/scene/block/render-iframe.snippet.js +2 -2
- package/lib/runjs-context/snippets/scene/block/render-react.snippet.js +1 -1
- package/lib/runjs-context/snippets/scene/block/render-statistics.snippet.js +1 -1
- package/lib/runjs-context/snippets/scene/block/render-timeline.snippet.js +1 -1
- package/lib/runjs-context/snippets/scene/block/resource-example.snippet.js +5 -5
- package/lib/runjs-context/snippets/scene/block/three-users-orbit.snippet.js +6 -6
- package/lib/runjs-context/snippets/scene/block/vue-component.snippet.js +3 -4
- package/lib/runjs-context/snippets/scene/detail/color-by-value.snippet.js +1 -1
- package/lib/runjs-context/snippets/scene/detail/copy-to-clipboard.snippet.js +20 -3
- package/lib/runjs-context/snippets/scene/detail/format-number.snippet.js +1 -1
- package/lib/runjs-context/snippets/scene/detail/innerHTML-value.snippet.js +1 -1
- package/lib/runjs-context/snippets/scene/detail/percentage-bar.snippet.js +3 -3
- package/lib/runjs-context/snippets/scene/detail/relative-time.snippet.js +3 -3
- package/lib/runjs-context/snippets/scene/detail/status-tag.snippet.js +2 -2
- package/lib/runjs-context/snippets/scene/form/cascade-select.snippet.js +1 -1
- package/lib/runjs-context/snippets/scene/form/render-basic.snippet.js +2 -2
- package/lib/runjs-context/snippets/scene/table/cell-open-dialog.snippet.js +6 -3
- package/lib/runjs-context/snippets/scene/table/concat-fields.snippet.js +3 -1
- package/lib/runjsLibs.d.ts +28 -0
- package/lib/runjsLibs.js +532 -0
- package/lib/scheduler/ModelOperationScheduler.d.ts +2 -0
- package/lib/scheduler/ModelOperationScheduler.js +25 -21
- package/lib/types.d.ts +27 -0
- package/lib/utils/associationObjectVariable.d.ts +2 -2
- package/lib/utils/createCollectionContextMeta.js +1 -0
- package/lib/utils/createEphemeralContext.js +2 -2
- package/lib/utils/dateVariable.d.ts +16 -0
- package/lib/utils/dateVariable.js +380 -0
- package/lib/utils/exceptions.d.ts +7 -0
- package/lib/utils/exceptions.js +10 -0
- package/lib/utils/index.d.ts +8 -3
- package/lib/utils/index.js +45 -0
- package/lib/utils/params-resolvers.js +16 -9
- package/lib/utils/resolveModuleUrl.d.ts +58 -0
- package/lib/utils/resolveModuleUrl.js +65 -0
- package/lib/utils/resolveRunJSObjectValues.d.ts +16 -0
- package/lib/utils/resolveRunJSObjectValues.js +61 -0
- package/lib/utils/runjsModuleLoader.d.ts +58 -0
- package/lib/utils/runjsModuleLoader.js +422 -0
- package/lib/utils/runjsTemplateCompat.d.ts +35 -0
- package/lib/utils/runjsTemplateCompat.js +743 -0
- package/lib/utils/runjsValue.d.ts +29 -0
- package/lib/utils/runjsValue.js +275 -0
- package/lib/utils/safeGlobals.d.ts +18 -8
- package/lib/utils/safeGlobals.js +164 -17
- package/lib/utils/schema-utils.d.ts +10 -0
- package/lib/utils/schema-utils.js +61 -0
- package/lib/views/createViewMeta.d.ts +0 -7
- package/lib/views/createViewMeta.js +19 -70
- package/lib/views/index.d.ts +1 -2
- package/lib/views/index.js +4 -3
- package/lib/views/useDialog.js +8 -3
- package/lib/views/useDrawer.js +7 -2
- package/lib/views/usePage.d.ts +4 -0
- package/lib/views/usePage.js +43 -6
- package/lib/views/usePopover.js +4 -1
- package/lib/views/viewEvents.d.ts +17 -0
- package/lib/views/viewEvents.js +90 -0
- package/package.json +4 -4
- package/src/BlockScopedFlowEngine.ts +2 -5
- package/src/JSRunner.ts +44 -2
- package/src/ViewScopedFlowEngine.ts +4 -0
- package/src/__tests__/JSRunner.test.ts +64 -0
- package/src/__tests__/createViewMeta.popup.test.ts +62 -1
- package/src/__tests__/flowContext.test.ts +693 -1
- package/src/__tests__/flowEngine.dataSourceDirty.test.ts +63 -0
- package/src/__tests__/flowModel.openView.navigation.test.ts +28 -0
- package/src/__tests__/flowRunJSContextDefine.test.ts +63 -0
- package/src/__tests__/flowRuntimeContext.test.ts +2 -1
- package/src/__tests__/flowSettings.open.test.tsx +123 -19
- package/src/__tests__/provider.test.tsx +0 -5
- package/src/__tests__/runjsContext.test.ts +10 -7
- package/src/__tests__/runjsContextImplementations.test.ts +34 -3
- package/src/__tests__/runjsContextRuntime.test.ts +3 -3
- package/src/__tests__/runjsContributions.test.ts +89 -0
- package/src/__tests__/runjsExternalLibs.test.ts +242 -0
- package/src/__tests__/runjsLibsLazyLoading.test.ts +44 -0
- package/src/__tests__/runjsLocales.test.ts +4 -1
- package/src/__tests__/runjsPreprocessDefault.test.ts +49 -0
- package/src/__tests__/runjsRuntimeFeatures.test.ts +166 -0
- package/src/__tests__/runjsSnippets.test.ts +40 -3
- package/src/acl/Acl.tsx +3 -3
- package/src/components/FlowContextSelector.tsx +208 -12
- package/src/components/__tests__/gridDragPlanner.test.ts +141 -1
- package/src/components/dnd/gridDragPlanner.ts +60 -0
- package/src/components/settings/wrappers/component/SwitchWithTitle.tsx +2 -1
- package/src/components/settings/wrappers/component/__tests__/InlineControls.test.tsx +74 -0
- package/src/components/settings/wrappers/contextual/DefaultSettingsIcon.tsx +109 -16
- package/src/components/settings/wrappers/contextual/FlowsContextMenu.tsx +41 -7
- package/src/components/settings/wrappers/contextual/StepSettingsDialog.tsx +13 -2
- package/src/components/settings/wrappers/contextual/__tests__/DefaultSettingsIcon.test.tsx +157 -5
- package/src/components/variables/VariableInput.tsx +12 -4
- package/src/components/variables/VariableTag.tsx +54 -45
- package/src/components/variables/__tests__/FlowContextSelector.test.tsx +260 -3
- package/src/components/variables/__tests__/VariableTag.test.tsx +50 -0
- package/src/components/variables/__tests__/utils.test.ts +81 -3
- package/src/components/variables/utils.ts +67 -6
- package/src/data-source/index.ts +88 -110
- package/src/executor/FlowExecutor.ts +200 -23
- package/src/executor/__tests__/flowExecutor.test.ts +66 -0
- package/src/flowContext.ts +2986 -211
- package/src/flowEngine.ts +58 -13
- package/src/flowI18n.ts +7 -5
- package/src/flowSettings.ts +18 -12
- package/src/index.ts +14 -1
- package/src/locale/en-US.json +9 -2
- package/src/locale/zh-CN.json +8 -1
- package/src/models/CollectionFieldModel.tsx +3 -1
- package/src/models/__tests__/dispatchEvent.when.test.ts +554 -0
- package/src/models/__tests__/flowModel.clone.test.ts +416 -0
- package/src/models/__tests__/flowModel.test.ts +20 -4
- package/src/models/flowModel.tsx +94 -1
- package/src/provider.tsx +9 -7
- package/src/resources/__tests__/multiRecordResource.test.ts +44 -0
- package/src/resources/__tests__/sqlResource.test.ts +60 -0
- package/src/resources/baseRecordResource.ts +31 -0
- package/src/resources/multiRecordResource.ts +11 -4
- package/src/resources/singleRecordResource.ts +3 -0
- package/src/resources/sqlResource.ts +11 -6
- package/src/runjs-context/contexts/FormJSFieldItemRunJSContext.ts +10 -0
- package/src/runjs-context/contexts/JSBlockRunJSContext.ts +6 -2
- package/src/runjs-context/contexts/JSEditableFieldRunJSContext.ts +106 -0
- package/src/runjs-context/contexts/JSItemRunJSContext.ts +10 -0
- package/src/runjs-context/contexts/base.ts +715 -44
- package/src/runjs-context/contributions.ts +88 -0
- package/src/runjs-context/helpers.ts +11 -1
- package/src/runjs-context/setup.ts +6 -0
- package/src/runjs-context/snippets/global/api-request.snippet.ts +3 -3
- package/src/runjs-context/snippets/global/import-esm.snippet.ts +2 -3
- package/src/runjs-context/snippets/global/query-selector.snippet.ts +8 -3
- package/src/runjs-context/snippets/global/require-amd.snippet.ts +1 -1
- package/src/runjs-context/snippets/index.ts +75 -41
- package/src/runjs-context/snippets/scene/block/add-event-listener.snippet.ts +11 -13
- package/src/runjs-context/snippets/scene/block/api-fetch-render-list.snippet.ts +3 -3
- package/src/runjs-context/snippets/scene/block/chartjs-bar.snippet.ts +2 -2
- package/src/runjs-context/snippets/scene/block/echarts-init.snippet.ts +2 -2
- package/src/runjs-context/snippets/scene/block/render-iframe.snippet.ts +2 -2
- package/src/runjs-context/snippets/scene/block/render-react.snippet.ts +1 -1
- package/src/runjs-context/snippets/scene/block/render-statistics.snippet.ts +1 -1
- package/src/runjs-context/snippets/scene/block/render-timeline.snippet.ts +1 -1
- package/src/runjs-context/snippets/scene/block/resource-example.snippet.ts +6 -11
- package/src/runjs-context/snippets/scene/block/three-users-orbit.snippet.ts +6 -6
- package/src/runjs-context/snippets/scene/block/vue-component.snippet.ts +3 -4
- package/src/runjs-context/snippets/scene/detail/color-by-value.snippet.ts +1 -1
- package/src/runjs-context/snippets/scene/detail/copy-to-clipboard.snippet.ts +20 -3
- package/src/runjs-context/snippets/scene/detail/format-number.snippet.ts +1 -1
- package/src/runjs-context/snippets/scene/detail/innerHTML-value.snippet.ts +1 -1
- package/src/runjs-context/snippets/scene/detail/percentage-bar.snippet.ts +3 -3
- package/src/runjs-context/snippets/scene/detail/relative-time.snippet.ts +3 -3
- package/src/runjs-context/snippets/scene/detail/status-tag.snippet.ts +2 -2
- package/src/runjs-context/snippets/scene/form/cascade-select.snippet.ts +1 -1
- package/src/runjs-context/snippets/scene/form/render-basic.snippet.ts +3 -8
- package/src/runjs-context/snippets/scene/table/cell-open-dialog.snippet.ts +6 -3
- package/src/runjs-context/snippets/scene/table/concat-fields.snippet.ts +3 -1
- package/src/runjsLibs.ts +622 -0
- package/src/scheduler/ModelOperationScheduler.ts +27 -21
- package/src/types.ts +38 -1
- package/src/utils/__tests__/dateVariable.test.ts +101 -0
- package/src/utils/__tests__/params-resolvers.test.ts +40 -0
- package/src/utils/__tests__/runjsRequireAsyncAutoWhitelist.test.ts +38 -0
- package/src/utils/__tests__/runjsTemplateCompat.test.ts +159 -0
- package/src/utils/__tests__/runjsValue.test.ts +44 -0
- package/src/utils/__tests__/safeGlobals.test.ts +57 -2
- package/src/utils/__tests__/utils.test.ts +95 -0
- package/src/utils/associationObjectVariable.ts +2 -2
- package/src/utils/createCollectionContextMeta.ts +1 -0
- package/src/utils/createEphemeralContext.ts +5 -4
- package/src/utils/dateVariable.ts +397 -0
- package/src/utils/exceptions.ts +11 -0
- package/src/utils/index.ts +37 -3
- package/src/utils/params-resolvers.ts +23 -9
- package/src/utils/resolveModuleUrl.ts +91 -0
- package/src/utils/resolveRunJSObjectValues.ts +46 -0
- package/src/utils/runjsModuleLoader.ts +553 -0
- package/src/utils/runjsTemplateCompat.ts +828 -0
- package/src/utils/runjsValue.ts +287 -0
- package/src/utils/safeGlobals.ts +188 -17
- package/src/utils/schema-utils.ts +79 -0
- package/src/views/__tests__/FlowView.usePage.test.tsx +54 -1
- package/src/views/__tests__/useDialog.closeDestroy.test.tsx +35 -8
- package/src/views/__tests__/viewEvents.resolveOpenerEngine.test.ts +28 -0
- package/src/views/createViewMeta.ts +22 -75
- package/src/views/index.tsx +1 -2
- package/src/views/useDialog.tsx +9 -2
- package/src/views/useDrawer.tsx +8 -1
- package/src/views/usePage.tsx +51 -5
- package/src/views/usePopover.tsx +4 -1
- package/src/views/viewEvents.ts +55 -0
|
@@ -47,6 +47,7 @@ const _MultiRecordResource = class _MultiRecordResource extends import_baseRecor
|
|
|
47
47
|
_data = import_reactive.observable.ref([]);
|
|
48
48
|
_meta = import_reactive.observable.ref({});
|
|
49
49
|
refreshTimer = null;
|
|
50
|
+
refreshWaiters = [];
|
|
50
51
|
createActionOptions = {};
|
|
51
52
|
updateActionOptions = {};
|
|
52
53
|
_refreshActionName = "list";
|
|
@@ -130,6 +131,7 @@ const _MultiRecordResource = class _MultiRecordResource extends import_baseRecor
|
|
|
130
131
|
async create(data, options) {
|
|
131
132
|
const config = this.mergeRequestConfig({ data }, this.createActionOptions, options);
|
|
132
133
|
const res = await this.runAction("create", config);
|
|
134
|
+
this.markDataSourceDirty();
|
|
133
135
|
this.emit("saved", data);
|
|
134
136
|
if ((options == null ? void 0 : options.refresh) !== false) {
|
|
135
137
|
await this.refresh();
|
|
@@ -160,6 +162,7 @@ const _MultiRecordResource = class _MultiRecordResource extends import_baseRecor
|
|
|
160
162
|
options
|
|
161
163
|
);
|
|
162
164
|
await this.runAction("update", config);
|
|
165
|
+
this.markDataSourceDirty();
|
|
163
166
|
this.emit("saved", data);
|
|
164
167
|
await this.refresh();
|
|
165
168
|
}
|
|
@@ -180,6 +183,7 @@ const _MultiRecordResource = class _MultiRecordResource extends import_baseRecor
|
|
|
180
183
|
options
|
|
181
184
|
);
|
|
182
185
|
await this.runAction("destroy", config);
|
|
186
|
+
this.markDataSourceDirty();
|
|
183
187
|
const currentPage = this.getPage();
|
|
184
188
|
const lastPage = Math.ceil((this.getCount() - import_lodash.default.castArray(filterByTk).length) / this.getPageSize());
|
|
185
189
|
if (currentPage > lastPage) {
|
|
@@ -202,7 +206,11 @@ const _MultiRecordResource = class _MultiRecordResource extends import_baseRecor
|
|
|
202
206
|
clearTimeout(this.refreshTimer);
|
|
203
207
|
}
|
|
204
208
|
return new Promise((resolve, reject) => {
|
|
209
|
+
this.refreshWaiters.push({ resolve, reject });
|
|
205
210
|
this.refreshTimer = setTimeout(async () => {
|
|
211
|
+
const waiters = this.refreshWaiters;
|
|
212
|
+
this.refreshWaiters = [];
|
|
213
|
+
this.refreshTimer = null;
|
|
206
214
|
try {
|
|
207
215
|
this.clearError();
|
|
208
216
|
this.loading = true;
|
|
@@ -218,13 +226,12 @@ const _MultiRecordResource = class _MultiRecordResource extends import_baseRecor
|
|
|
218
226
|
this.setPageSize(meta.pageSize);
|
|
219
227
|
}
|
|
220
228
|
this.emit("refresh");
|
|
221
|
-
|
|
222
|
-
resolve();
|
|
229
|
+
waiters.forEach((w) => w.resolve());
|
|
223
230
|
} catch (error) {
|
|
224
231
|
this.setError(error);
|
|
225
|
-
|
|
232
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
233
|
+
waiters.forEach((w) => w.reject(err));
|
|
226
234
|
} finally {
|
|
227
|
-
this.refreshTimer = null;
|
|
228
235
|
this.loading = false;
|
|
229
236
|
}
|
|
230
237
|
});
|
|
@@ -70,6 +70,7 @@ const _SingleRecordResource = class _SingleRecordResource extends import_baseRec
|
|
|
70
70
|
...config,
|
|
71
71
|
data: result
|
|
72
72
|
});
|
|
73
|
+
this.markDataSourceDirty();
|
|
73
74
|
this.emit("saved", data);
|
|
74
75
|
if ((options == null ? void 0 : options.refresh) !== false) {
|
|
75
76
|
await this.refresh();
|
|
@@ -86,6 +87,7 @@ const _SingleRecordResource = class _SingleRecordResource extends import_baseRec
|
|
|
86
87
|
options
|
|
87
88
|
);
|
|
88
89
|
await this.runAction("destroy", config);
|
|
90
|
+
this.markDataSourceDirty();
|
|
89
91
|
this.setData(null);
|
|
90
92
|
}
|
|
91
93
|
async refresh() {
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
7
|
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
8
|
*/
|
|
9
|
-
import { FlowEngineContext } from '../flowContext';
|
|
9
|
+
import { FlowContext, FlowEngineContext } from '../flowContext';
|
|
10
10
|
import { BaseRecordResource } from './baseRecordResource';
|
|
11
11
|
type SQLRunOptions = {
|
|
12
12
|
bind?: Record<string, any>;
|
|
@@ -20,8 +20,8 @@ type SQLSaveOptions = {
|
|
|
20
20
|
dataSourceKey?: string;
|
|
21
21
|
};
|
|
22
22
|
export declare class FlowSQLRepository {
|
|
23
|
-
protected ctx:
|
|
24
|
-
constructor(ctx:
|
|
23
|
+
protected ctx: FlowContext;
|
|
24
|
+
constructor(ctx: FlowContext);
|
|
25
25
|
run(sql: string, options?: SQLRunOptions): Promise<any>;
|
|
26
26
|
save(data: SQLSaveOptions): Promise<void>;
|
|
27
27
|
runById(uid: string, options?: SQLRunOptions): Promise<any>;
|
|
@@ -35,6 +35,7 @@ export declare class SQLResource<TData = any> extends BaseRecordResource<TData>
|
|
|
35
35
|
value: Record<string, any>;
|
|
36
36
|
};
|
|
37
37
|
private refreshTimer;
|
|
38
|
+
private refreshWaiters;
|
|
38
39
|
private _debugEnabled;
|
|
39
40
|
private _sql;
|
|
40
41
|
protected request: {
|
|
@@ -126,6 +126,7 @@ const _SQLResource = class _SQLResource extends import_baseRecordResource.BaseRe
|
|
|
126
126
|
_data = import_reactive.observable.ref(null);
|
|
127
127
|
_meta = import_reactive.observable.ref({});
|
|
128
128
|
refreshTimer = null;
|
|
129
|
+
refreshWaiters = [];
|
|
129
130
|
_debugEnabled = false;
|
|
130
131
|
_sql;
|
|
131
132
|
// 请求配置 - 与 APIClient 接口保持一致
|
|
@@ -261,7 +262,11 @@ const _SQLResource = class _SQLResource extends import_baseRecordResource.BaseRe
|
|
|
261
262
|
clearTimeout(this.refreshTimer);
|
|
262
263
|
}
|
|
263
264
|
return new Promise((resolve, reject) => {
|
|
265
|
+
this.refreshWaiters.push({ resolve, reject });
|
|
264
266
|
this.refreshTimer = setTimeout(async () => {
|
|
267
|
+
const waiters = this.refreshWaiters;
|
|
268
|
+
this.refreshWaiters = [];
|
|
269
|
+
this.refreshTimer = null;
|
|
265
270
|
try {
|
|
266
271
|
this.clearError();
|
|
267
272
|
this.loading = true;
|
|
@@ -270,12 +275,12 @@ const _SQLResource = class _SQLResource extends import_baseRecordResource.BaseRe
|
|
|
270
275
|
this.setData(data).setMeta(meta);
|
|
271
276
|
this.loading = false;
|
|
272
277
|
this.emit("refresh");
|
|
273
|
-
resolve();
|
|
278
|
+
waiters.forEach((w) => w.resolve());
|
|
274
279
|
} catch (error) {
|
|
275
280
|
this.setError(error);
|
|
276
|
-
|
|
281
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
282
|
+
waiters.forEach((w) => w.reject(err));
|
|
277
283
|
} finally {
|
|
278
|
-
this.refreshTimer = null;
|
|
279
284
|
this.loading = false;
|
|
280
285
|
}
|
|
281
286
|
});
|
|
@@ -42,7 +42,12 @@ FormJSFieldItemRunJSContext.define({
|
|
|
42
42
|
Supports innerHTML, append, and other DOM manipulation methods.`,
|
|
43
43
|
value: `Current field value (read-only in display mode; in controlled scenarios, use setProps to modify).`,
|
|
44
44
|
record: `Current record data object (read-only).
|
|
45
|
-
Contains all field values of the parent record
|
|
45
|
+
Contains all field values of the parent record.`,
|
|
46
|
+
formValues: {
|
|
47
|
+
description: "Snapshot of current form values (object). Available in form contexts (CreateForm/EditForm).",
|
|
48
|
+
detail: "Record<string, any>",
|
|
49
|
+
examples: ["const { name, status } = ctx.formValues || {};"]
|
|
50
|
+
}
|
|
46
51
|
},
|
|
47
52
|
methods: {
|
|
48
53
|
onRefReady: `Wait for form field container DOM element to be ready before executing callback.
|
|
@@ -58,7 +63,12 @@ FormJSFieldItemRunJSContext.define(
|
|
|
58
63
|
properties: {
|
|
59
64
|
element: "ElementProxy\uFF0C\u8868\u5355\u5B57\u6BB5\u5BB9\u5668",
|
|
60
65
|
value: "\u5B57\u6BB5\u503C\uFF08\u5C55\u793A\u6A21\u5F0F\u4E3A\u53EA\u8BFB\uFF1B\u53D7\u63A7\u573A\u666F\u7528 setProps \u4FEE\u6539\uFF09",
|
|
61
|
-
record: "\u5F53\u524D\u8BB0\u5F55\uFF08\u53EA\u8BFB\uFF09"
|
|
66
|
+
record: "\u5F53\u524D\u8BB0\u5F55\uFF08\u53EA\u8BFB\uFF09",
|
|
67
|
+
formValues: {
|
|
68
|
+
description: "\u5F53\u524D\u8868\u5355\u503C\u5FEB\u7167\uFF08\u5BF9\u8C61\uFF09\u3002\u4EC5\u8868\u5355\u76F8\u5173\u4E0A\u4E0B\u6587\u53EF\u7528\uFF08Create/Edit Form\uFF09\u3002",
|
|
69
|
+
detail: "Record<string, any>",
|
|
70
|
+
examples: ["const { name, status } = ctx.formValues || {};"]
|
|
71
|
+
}
|
|
62
72
|
},
|
|
63
73
|
methods: {
|
|
64
74
|
onRefReady: "\u5BB9\u5668\u5C31\u7EEA\u56DE\u8C03",
|
|
@@ -58,7 +58,7 @@ JSBlockRunJSContext.define({
|
|
|
58
58
|
Parameters: (ref: React.RefObject, callback: (element: HTMLElement) => void, timeout?: number) => void
|
|
59
59
|
Example: ctx.onRefReady(ctx.ref, (el) => { el.innerHTML = "Ready!" })`,
|
|
60
60
|
requireAsync: "Load external library: `const lib = await ctx.requireAsync(url)`",
|
|
61
|
-
importAsync: "Dynamically import ESM module: `const mod = await ctx.importAsync(url)`"
|
|
61
|
+
importAsync: "Dynamically import an ESM module by URL: `const mod = await ctx.importAsync(url)`.\nNote: if the module has only a default export, ctx.importAsync returns that default value directly (no `.default`)."
|
|
62
62
|
}
|
|
63
63
|
});
|
|
64
64
|
JSBlockRunJSContext.define(
|
|
@@ -80,7 +80,7 @@ JSBlockRunJSContext.define(
|
|
|
80
80
|
methods: {
|
|
81
81
|
onRefReady: "\u5BB9\u5668 ref \u5C31\u7EEA\u56DE\u8C03\uFF1A\n```js\nctx.onRefReady(ctx.ref, el => { /* ... */ })\n```",
|
|
82
82
|
requireAsync: "\u52A0\u8F7D\u5916\u90E8\u5E93\uFF1A`const lib = await ctx.requireAsync(url)`",
|
|
83
|
-
importAsync: "\u6309 URL \u52A8\u6001\u5BFC\u5165 ESM \u6A21\u5757\uFF1A`const mod = await ctx.importAsync(url)
|
|
83
|
+
importAsync: "\u6309 URL \u52A8\u6001\u5BFC\u5165 ESM \u6A21\u5757\uFF1A`const mod = await ctx.importAsync(url)`\u3002\n\u6CE8\u610F\uFF1A\u5F53\u6A21\u5757\u53EA\u6709 default \u4E00\u4E2A\u5BFC\u51FA\u65F6\uFF0Cctx.importAsync \u4F1A\u76F4\u63A5\u8FD4\u56DE default \u503C\uFF08\u65E0\u9700\u518D\u5199 `.default`\uFF09\u3002"
|
|
84
84
|
}
|
|
85
85
|
},
|
|
86
86
|
{ locale: "zh-CN" }
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
import { FlowRunJSContext } from '../../flowContext';
|
|
10
|
+
/**
|
|
11
|
+
* RunJS context for JSEditableFieldModel (form editable custom field).
|
|
12
|
+
* NOTE: Some APIs (e.g., getValue/setValue/element) are provided by the model's runtime handler.
|
|
13
|
+
* This doc is used for editor autocomplete and AI coding assistance.
|
|
14
|
+
*/
|
|
15
|
+
export declare class JSEditableFieldRunJSContext extends FlowRunJSContext {
|
|
16
|
+
}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
var __defProp = Object.defineProperty;
|
|
11
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
12
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
13
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
14
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
15
|
+
var __export = (target, all) => {
|
|
16
|
+
for (var name in all)
|
|
17
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
18
|
+
};
|
|
19
|
+
var __copyProps = (to, from, except, desc) => {
|
|
20
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
21
|
+
for (let key of __getOwnPropNames(from))
|
|
22
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
23
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
24
|
+
}
|
|
25
|
+
return to;
|
|
26
|
+
};
|
|
27
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
+
var JSEditableFieldRunJSContext_exports = {};
|
|
29
|
+
__export(JSEditableFieldRunJSContext_exports, {
|
|
30
|
+
JSEditableFieldRunJSContext: () => JSEditableFieldRunJSContext
|
|
31
|
+
});
|
|
32
|
+
module.exports = __toCommonJS(JSEditableFieldRunJSContext_exports);
|
|
33
|
+
var import_flowContext = require("../../flowContext");
|
|
34
|
+
const _JSEditableFieldRunJSContext = class _JSEditableFieldRunJSContext extends import_flowContext.FlowRunJSContext {
|
|
35
|
+
};
|
|
36
|
+
__name(_JSEditableFieldRunJSContext, "JSEditableFieldRunJSContext");
|
|
37
|
+
let JSEditableFieldRunJSContext = _JSEditableFieldRunJSContext;
|
|
38
|
+
JSEditableFieldRunJSContext.define({
|
|
39
|
+
label: "JSEditableField RunJS context",
|
|
40
|
+
properties: {
|
|
41
|
+
element: {
|
|
42
|
+
description: "ElementProxy instance providing a safe DOM container for field rendering. In editable mode this container is typically a <span> element.",
|
|
43
|
+
detail: "ElementProxy"
|
|
44
|
+
},
|
|
45
|
+
value: {
|
|
46
|
+
description: "Current field value (read-only snapshot). In editable scenarios, prefer ctx.getValue()/ctx.setValue(v) for two-way binding.",
|
|
47
|
+
detail: "any",
|
|
48
|
+
examples: ["const v = ctx.getValue?.() ?? ctx.value;", 'ctx.setValue?.("new value");']
|
|
49
|
+
},
|
|
50
|
+
record: {
|
|
51
|
+
description: "Current record data object (read-only). Available in forms that are bound to a record.",
|
|
52
|
+
detail: "Record<string, any>"
|
|
53
|
+
},
|
|
54
|
+
form: {
|
|
55
|
+
description: 'Ant Design Form instance for reading/writing other fields. Example: ctx.form.getFieldValue("name")',
|
|
56
|
+
detail: "FormInstance"
|
|
57
|
+
},
|
|
58
|
+
formValues: {
|
|
59
|
+
description: "Snapshot of current form values (object). Prefer ctx.form.getFieldsValue() when you need the latest values.",
|
|
60
|
+
detail: "Record<string, any>"
|
|
61
|
+
},
|
|
62
|
+
namePath: {
|
|
63
|
+
description: "Field namePath in the form (array). Useful for advanced Form operations.",
|
|
64
|
+
detail: "Array<string | number>"
|
|
65
|
+
},
|
|
66
|
+
disabled: "Whether the field is disabled (boolean).",
|
|
67
|
+
readOnly: "Whether the field is read-only (boolean)."
|
|
68
|
+
},
|
|
69
|
+
methods: {
|
|
70
|
+
getValue: {
|
|
71
|
+
description: "Get current field value (recommended for editable custom fields).",
|
|
72
|
+
detail: "() => any",
|
|
73
|
+
completion: { insertText: "ctx.getValue?.()" }
|
|
74
|
+
},
|
|
75
|
+
setValue: {
|
|
76
|
+
description: "Set current field value (two-way binding with the form).",
|
|
77
|
+
detail: "(value: any) => void",
|
|
78
|
+
completion: { insertText: "ctx.setValue?.(value)" },
|
|
79
|
+
examples: ["ctx.setValue?.(e.target.value);"]
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
JSEditableFieldRunJSContext.define(
|
|
84
|
+
{
|
|
85
|
+
label: "JS \u53EF\u7F16\u8F91\u5B57\u6BB5 RunJS \u4E0A\u4E0B\u6587",
|
|
86
|
+
properties: {
|
|
87
|
+
element: {
|
|
88
|
+
description: "ElementProxy\uFF0C\u5B57\u6BB5\u6E32\u67D3\u7684\u5B89\u5168\u5BB9\u5668\uFF08\u901A\u5E38\u4E3A <span> \u5BB9\u5668\uFF09\u3002",
|
|
89
|
+
detail: "ElementProxy"
|
|
90
|
+
},
|
|
91
|
+
value: {
|
|
92
|
+
description: "\u5B57\u6BB5\u5F53\u524D\u503C\uFF08\u53EA\u8BFB\u5FEB\u7167\uFF09\u3002\u53EF\u7F16\u8F91\u573A\u666F\u5EFA\u8BAE\u4F7F\u7528 ctx.getValue()/ctx.setValue(v) \u505A\u53CC\u5411\u7ED1\u5B9A\u3002",
|
|
93
|
+
detail: "any",
|
|
94
|
+
examples: ["const v = ctx.getValue?.() ?? ctx.value;", 'ctx.setValue?.("\u65B0\u503C");']
|
|
95
|
+
},
|
|
96
|
+
record: { description: "\u5F53\u524D\u8BB0\u5F55\u5BF9\u8C61\uFF08\u53EA\u8BFB\uFF1B\u8868\u5355\u7ED1\u5B9A\u8BB0\u5F55\u65F6\u53EF\u7528\uFF09\u3002", detail: "Record<string, any>" },
|
|
97
|
+
form: { description: "Ant Design Form \u5B9E\u4F8B\uFF0C\u53EF\u8BFB\u5199\u5176\u5B83\u5B57\u6BB5\u3002", detail: "FormInstance" },
|
|
98
|
+
formValues: {
|
|
99
|
+
description: "\u5F53\u524D\u8868\u5355\u503C\u5FEB\u7167\uFF08\u5BF9\u8C61\uFF09\u3002\u9700\u8981\u6700\u65B0\u503C\u53EF\u7528 ctx.form.getFieldsValue()\u3002",
|
|
100
|
+
detail: "Record<string, any>"
|
|
101
|
+
},
|
|
102
|
+
namePath: { description: "\u5B57\u6BB5\u5728\u8868\u5355\u4E2D\u7684 namePath\uFF08\u6570\u7EC4\uFF09\u3002", detail: "Array<string | number>" },
|
|
103
|
+
disabled: "\u662F\u5426\u7981\u7528\uFF08boolean\uFF09",
|
|
104
|
+
readOnly: "\u662F\u5426\u53EA\u8BFB\uFF08boolean\uFF09"
|
|
105
|
+
},
|
|
106
|
+
methods: {
|
|
107
|
+
getValue: {
|
|
108
|
+
description: "\u83B7\u53D6\u5B57\u6BB5\u5F53\u524D\u503C\uFF08\u53EF\u7F16\u8F91\u5B57\u6BB5\u63A8\u8350\u4F7F\u7528\uFF09\u3002",
|
|
109
|
+
detail: "() => any",
|
|
110
|
+
completion: { insertText: "ctx.getValue?.()" }
|
|
111
|
+
},
|
|
112
|
+
setValue: {
|
|
113
|
+
description: "\u8BBE\u7F6E\u5B57\u6BB5\u5F53\u524D\u503C\uFF08\u4E0E\u8868\u5355\u53CC\u5411\u7ED1\u5B9A\uFF09\u3002",
|
|
114
|
+
detail: "(value: any) => void",
|
|
115
|
+
completion: { insertText: "ctx.setValue?.(value)" },
|
|
116
|
+
examples: ["ctx.setValue?.(e.target.value);"]
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
{ locale: "zh-CN" }
|
|
121
|
+
);
|
|
122
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
123
|
+
0 && (module.exports = {
|
|
124
|
+
JSEditableFieldRunJSContext
|
|
125
|
+
});
|
|
@@ -43,7 +43,12 @@ JSItemRunJSContext.define({
|
|
|
43
43
|
resource: `Current resource instance (read-only).
|
|
44
44
|
Provides access to the data resource associated with the current form context.`,
|
|
45
45
|
record: `Current record data object (read-only).
|
|
46
|
-
Contains all field values of the parent record
|
|
46
|
+
Contains all field values of the parent record.`,
|
|
47
|
+
formValues: {
|
|
48
|
+
description: "Snapshot of current form values (object). Available in form contexts (CreateForm/EditForm).",
|
|
49
|
+
detail: "Record<string, any>",
|
|
50
|
+
examples: ["const { name, status } = ctx.formValues || {};"]
|
|
51
|
+
}
|
|
47
52
|
},
|
|
48
53
|
methods: {
|
|
49
54
|
onRefReady: `Wait for form item container DOM element to be ready before executing callback.
|
|
@@ -56,7 +61,12 @@ JSItemRunJSContext.define(
|
|
|
56
61
|
properties: {
|
|
57
62
|
element: "ElementProxy\uFF0C\u8868\u5355\u9879\u6E32\u67D3\u5BB9\u5668\uFF0C\u652F\u6301 innerHTML/append \u7B49 DOM \u64CD\u4F5C",
|
|
58
63
|
resource: "\u5F53\u524D\u8D44\u6E90\uFF08\u53EA\u8BFB\uFF09",
|
|
59
|
-
record: "\u5F53\u524D\u8BB0\u5F55\uFF08\u53EA\u8BFB\uFF09"
|
|
64
|
+
record: "\u5F53\u524D\u8BB0\u5F55\uFF08\u53EA\u8BFB\uFF09",
|
|
65
|
+
formValues: {
|
|
66
|
+
description: "\u5F53\u524D\u8868\u5355\u503C\u5FEB\u7167\uFF08\u5BF9\u8C61\uFF09\u3002\u4EC5\u8868\u5355\u76F8\u5173\u4E0A\u4E0B\u6587\u53EF\u7528\uFF08Create/Edit Form\uFF09\u3002",
|
|
67
|
+
detail: "Record<string, any>",
|
|
68
|
+
examples: ["const { name, status } = ctx.formValues || {};"]
|
|
69
|
+
}
|
|
60
70
|
},
|
|
61
71
|
methods: {
|
|
62
72
|
onRefReady: "\u5BB9\u5668\u5C31\u7EEA\u540E\u6267\u884C\u56DE\u8C03\u3002\u53C2\u6570\uFF1A(ref, callback, timeout?)"
|