@nocobase/flow-engine 2.0.0-alpha.4 → 2.0.0-alpha.40
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.d.ts +23 -0
- package/lib/BlockScopedFlowEngine.js +90 -0
- package/lib/FlowContextProvider.d.ts +2 -2
- package/lib/FlowContextProvider.js +3 -3
- package/lib/FlowDefinition.d.ts +4 -2
- package/lib/JSRunner.js +3 -0
- package/lib/ViewScopedFlowEngine.d.ts +1 -1
- package/lib/ViewScopedFlowEngine.js +12 -0
- package/lib/acl/Acl.d.ts +1 -0
- package/lib/acl/Acl.js +11 -0
- package/lib/components/FieldModelRenderer.js +14 -6
- package/lib/components/FieldSkeleton.d.ts +10 -0
- package/lib/components/FieldSkeleton.js +64 -0
- package/lib/components/FlowContextSelector.js +7 -2
- package/lib/components/FlowModelRenderer.d.ts +3 -6
- package/lib/components/FlowModelRenderer.js +16 -47
- package/lib/components/FormItem.js +5 -1
- package/lib/components/MobilePopup.d.ts +20 -0
- package/lib/components/MobilePopup.js +102 -0
- package/lib/components/MobilePopup.style.d.ts +17 -0
- package/lib/components/MobilePopup.style.js +186 -0
- package/lib/components/index.d.ts +1 -0
- package/lib/components/index.js +3 -1
- package/lib/components/settings/independents/dropdown/FlowsDropdownButton.js +2 -2
- package/lib/components/settings/wrappers/contextual/DefaultSettingsIcon.js +17 -5
- package/lib/components/settings/wrappers/contextual/FlowsContextMenu.js +2 -2
- package/lib/components/settings/wrappers/contextual/FlowsFloatContextMenu.d.ts +2 -2
- package/lib/components/settings/wrappers/contextual/FlowsFloatContextMenu.js +35 -6
- package/lib/components/settings/wrappers/contextual/StepSettingsDialog.js +7 -1
- package/lib/components/variables/VariableInput.js +19 -5
- package/lib/components/variables/VariableTag.js +43 -2
- package/lib/components/variables/types.d.ts +2 -0
- package/lib/data-source/index.d.ts +15 -4
- package/lib/data-source/index.js +42 -13
- package/lib/data-source/sortCollectionsByInherits.d.ts +10 -0
- package/lib/data-source/sortCollectionsByInherits.js +71 -0
- package/lib/emitter.d.ts +6 -0
- package/lib/emitter.js +12 -0
- package/lib/executor/FlowExecutor.d.ts +4 -5
- package/lib/executor/FlowExecutor.js +168 -99
- package/lib/flow-registry/GlobalFlowRegistry.d.ts +1 -0
- package/lib/flow-registry/GlobalFlowRegistry.js +3 -0
- package/lib/flow-registry/InstanceFlowRegistry.d.ts +1 -0
- package/lib/flow-registry/InstanceFlowRegistry.js +3 -0
- package/lib/flowContext.d.ts +37 -5
- package/lib/flowContext.js +215 -87
- package/lib/flowEngine.d.ts +24 -1
- package/lib/flowEngine.js +56 -6
- package/lib/flowSettings.d.ts +2 -1
- package/lib/flowSettings.js +12 -8
- package/lib/hooks/useApplyAutoFlows.js +2 -1
- package/lib/index.d.ts +7 -1
- package/lib/index.js +32 -3
- package/lib/locale/en-US.json +4 -2
- package/lib/locale/index.d.ts +4 -0
- package/lib/locale/zh-CN.json +4 -2
- package/lib/models/CollectionFieldModel.d.ts +3 -0
- package/lib/models/CollectionFieldModel.js +48 -5
- package/lib/models/flowModel.d.ts +30 -29
- package/lib/models/flowModel.js +135 -98
- package/lib/models/forkFlowModel.d.ts +8 -4
- package/lib/models/forkFlowModel.js +38 -8
- package/lib/provider.d.ts +3 -1
- package/lib/provider.js +7 -5
- package/lib/resources/multiRecordResource.js +25 -1
- package/lib/resources/singleRecordResource.js +19 -1
- package/lib/resources/sqlResource.d.ts +1 -0
- package/lib/resources/sqlResource.js +20 -24
- package/lib/runjs-context/contexts/FormJSFieldItemRunJSContext.d.ts +1 -6
- package/lib/runjs-context/contexts/FormJSFieldItemRunJSContext.js +27 -20
- package/lib/runjs-context/contexts/JSBlockRunJSContext.d.ts +1 -6
- package/lib/runjs-context/contexts/JSBlockRunJSContext.js +46 -33
- package/lib/runjs-context/contexts/JSCollectionActionRunJSContext.d.ts +1 -2
- package/lib/runjs-context/contexts/JSCollectionActionRunJSContext.js +14 -15
- package/lib/runjs-context/contexts/{LinkageRunJSContext.d.ts → JSColumnRunJSContext.d.ts} +6 -3
- package/lib/runjs-context/contexts/JSColumnRunJSContext.js +78 -0
- package/lib/runjs-context/contexts/JSFieldRunJSContext.d.ts +1 -6
- package/lib/runjs-context/contexts/JSFieldRunJSContext.js +28 -24
- package/lib/runjs-context/contexts/JSItemRunJSContext.d.ts +1 -6
- package/lib/runjs-context/contexts/JSItemRunJSContext.js +24 -20
- package/lib/runjs-context/contexts/JSRecordActionRunJSContext.d.ts +1 -2
- package/lib/runjs-context/contexts/JSRecordActionRunJSContext.js +16 -17
- package/lib/runjs-context/contexts/base.d.ts +9 -0
- package/lib/runjs-context/contexts/base.js +183 -0
- package/lib/runjs-context/helpers.d.ts +5 -2
- package/lib/runjs-context/helpers.js +36 -27
- package/lib/runjs-context/registry.d.ts +7 -4
- package/lib/runjs-context/registry.js +10 -42
- package/lib/runjs-context/setup.d.ts +9 -0
- package/lib/runjs-context/setup.js +82 -0
- package/lib/runjs-context/snippets/global/{copy-record-json.snippet.js → api-request.snippet.js} +25 -10
- package/lib/runjs-context/snippets/global/clipboard-copy-text.snippet.js +61 -0
- package/lib/runjs-context/snippets/global/{view-navigation-push.snippet.js → import-esm.snippet.js} +26 -12
- package/lib/runjs-context/snippets/global/message-error.snippet.js +6 -0
- package/lib/runjs-context/snippets/global/message-success.snippet.js +6 -0
- package/lib/runjs-context/snippets/global/notification-open.snippet.d.ts +3 -8
- package/lib/runjs-context/snippets/global/notification-open.snippet.js +8 -1
- package/lib/runjs-context/snippets/global/open-view-dialog.snippet.js +10 -3
- package/lib/runjs-context/snippets/global/open-view-drawer.snippet.js +10 -3
- package/lib/runjs-context/snippets/global/query-selector.snippet.js +53 -0
- package/lib/runjs-context/snippets/global/require-amd.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/global/{requireAsync.snippet.js → require-amd.snippet.js} +16 -13
- package/lib/runjs-context/snippets/global/window-open.snippet.d.ts +3 -8
- package/lib/runjs-context/snippets/global/window-open.snippet.js +8 -1
- package/lib/runjs-context/snippets/index.d.ts +14 -3
- package/lib/runjs-context/snippets/index.js +161 -40
- package/lib/runjs-context/snippets/scene/block/add-event-listener.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/{jsblock → block}/add-event-listener.snippet.js +11 -2
- package/lib/runjs-context/snippets/scene/block/api-fetch-render-list.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/block/api-fetch-render-list.snippet.js +64 -0
- package/lib/runjs-context/snippets/scene/block/chartjs-bar.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/block/chartjs-bar.snippet.js +99 -0
- package/lib/runjs-context/snippets/{libs → scene/block}/echarts-init.snippet.js +24 -7
- package/lib/runjs-context/snippets/scene/block/render-button-handler.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/{jsblock → block}/render-button-handler.snippet.js +17 -9
- package/lib/runjs-context/snippets/scene/block/render-iframe.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/block/render-iframe.snippet.js +57 -0
- package/lib/runjs-context/snippets/scene/block/render-info-card.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/block/render-info-card.snippet.js +71 -0
- package/lib/runjs-context/snippets/scene/block/render-react-jsx.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/{jsblock/render-card.snippet.js → block/render-react-jsx.snippet.js} +26 -13
- package/lib/runjs-context/snippets/scene/block/render-react.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/{jsblock → block}/render-react.snippet.js +18 -17
- package/lib/runjs-context/snippets/scene/block/render-statistics.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/block/render-statistics.snippet.js +95 -0
- package/lib/runjs-context/snippets/scene/block/render-timeline.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/block/render-timeline.snippet.js +84 -0
- package/lib/runjs-context/snippets/scene/block/resource-example.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/block/resource-example.snippet.js +60 -0
- package/lib/runjs-context/snippets/scene/block/three-users-orbit.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/block/three-users-orbit.snippet.js +283 -0
- package/lib/runjs-context/snippets/scene/block/vue-component.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/block/vue-component.snippet.js +124 -0
- package/lib/runjs-context/snippets/scene/detail/color-by-value.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/{jsfield → detail}/color-by-value.snippet.js +13 -3
- package/lib/runjs-context/snippets/scene/detail/copy-to-clipboard.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/{global → scene/detail}/copy-to-clipboard.snippet.js +28 -6
- package/lib/runjs-context/snippets/scene/detail/format-number.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/{jsfield → detail}/format-number.snippet.js +13 -3
- package/lib/runjs-context/snippets/scene/detail/innerHTML-value.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/{jsfield → detail}/innerHTML-value.snippet.js +13 -3
- package/lib/runjs-context/snippets/scene/detail/percentage-bar.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/detail/percentage-bar.snippet.js +82 -0
- package/lib/runjs-context/snippets/scene/detail/relative-time.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/detail/relative-time.snippet.js +80 -0
- package/lib/runjs-context/snippets/scene/detail/status-tag.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/detail/status-tag.snippet.js +74 -0
- package/lib/runjs-context/snippets/scene/form/calculate-total.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/form/calculate-total.snippet.js +63 -0
- package/lib/runjs-context/snippets/scene/form/cascade-select.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/form/cascade-select.snippet.js +81 -0
- package/lib/runjs-context/snippets/scene/form/conditional-required.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/form/conditional-required.snippet.js +64 -0
- package/lib/runjs-context/snippets/scene/form/copy-field-values.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/form/copy-field-values.snippet.js +74 -0
- package/lib/runjs-context/snippets/scene/form/render-basic.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/{jsitem → form}/render-basic.snippet.js +11 -2
- package/lib/runjs-context/snippets/scene/form/set-disabled.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/{linkage → form}/set-disabled.snippet.js +12 -3
- package/lib/runjs-context/snippets/scene/form/set-field-value.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/{linkage → form}/set-field-value.snippet.js +12 -3
- package/lib/runjs-context/snippets/scene/form/set-required.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/{linkage → form}/set-required.snippet.js +12 -3
- package/lib/runjs-context/snippets/scene/form/toggle-multiple-fields.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/form/toggle-multiple-fields.snippet.js +67 -0
- package/lib/runjs-context/snippets/scene/form/toggle-visible.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/{linkage → form}/toggle-visible.snippet.js +12 -3
- package/lib/runjs-context/snippets/scene/table/cell-open-dialog.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/table/cell-open-dialog.snippet.js +64 -0
- package/lib/runjs-context/snippets/scene/table/collection-selected-count.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/{actions → table}/collection-selected-count.snippet.js +11 -2
- package/lib/runjs-context/snippets/scene/table/concat-fields.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/table/concat-fields.snippet.js +79 -0
- package/lib/runjs-context/snippets/scene/table/destroy-selected.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/{global/log-json-record.snippet.js → scene/table/destroy-selected.snippet.js} +24 -11
- package/lib/runjs-context/snippets/scene/table/export-selected-json.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/table/export-selected-json.snippet.js +64 -0
- package/lib/runjs-context/snippets/scene/table/iterate-selected-rows.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/{actions → table}/iterate-selected-rows.snippet.js +11 -2
- package/lib/runjs-context/snippets/types.d.ts +9 -1
- package/lib/scheduler/ModelOperationScheduler.d.ts +51 -0
- package/lib/scheduler/ModelOperationScheduler.js +262 -0
- package/lib/types.d.ts +28 -3
- package/lib/types.js +4 -3
- package/lib/utils/associationObjectVariable.d.ts +32 -0
- package/lib/utils/associationObjectVariable.js +157 -0
- package/lib/utils/buildSettingsViewInputArgs.d.ts +19 -0
- package/lib/utils/buildSettingsViewInputArgs.js +75 -0
- package/lib/utils/createEphemeralContext.d.ts +13 -0
- package/lib/utils/createEphemeralContext.js +140 -0
- package/lib/utils/flows.d.ts +10 -0
- package/lib/{runjs-context/snippets/global/api-request-post.snippet.js → utils/flows.js} +21 -15
- package/lib/utils/index.d.ts +7 -2
- package/lib/utils/index.js +19 -2
- package/lib/utils/jsxTransform.d.ts +15 -0
- package/lib/utils/jsxTransform.js +68 -0
- package/lib/utils/params-resolvers.js +3 -3
- package/lib/utils/parsePathnameToViewParams.d.ts +1 -1
- package/lib/utils/parsePathnameToViewParams.js +41 -5
- package/lib/utils/pruneFilter.d.ts +21 -0
- package/lib/{runjs-context/snippets/global/try-catch-async.snippet.js → utils/pruneFilter.js} +24 -16
- package/lib/utils/safeGlobals.d.ts +5 -3
- package/lib/utils/safeGlobals.js +40 -0
- package/lib/utils/schema-utils.js +2 -2
- package/lib/utils/serverContextParams.d.ts +1 -0
- package/lib/utils/translation.d.ts +4 -1
- package/lib/utils/translation.js +6 -2
- package/lib/utils/variablesParams.d.ts +9 -5
- package/lib/utils/variablesParams.js +47 -36
- package/lib/views/DrawerComponent.js +21 -2
- package/lib/views/PageComponent.js +2 -1
- package/lib/views/ViewNavigation.d.ts +3 -9
- package/lib/views/ViewNavigation.js +16 -2
- package/lib/views/createViewMeta.d.ts +29 -1
- package/lib/views/createViewMeta.js +338 -72
- package/lib/views/index.d.ts +1 -0
- package/lib/views/index.js +3 -0
- package/lib/views/useDialog.d.ts +8 -8
- package/lib/views/useDialog.js +8 -7
- package/lib/views/useDrawer.d.ts +8 -8
- package/lib/views/useDrawer.js +43 -28
- package/lib/views/usePage.d.ts +8 -8
- package/lib/views/usePage.js +8 -7
- package/package.json +6 -3
- package/src/BlockScopedFlowEngine.ts +86 -0
- package/src/FlowContextProvider.tsx +4 -2
- package/src/JSRunner.ts +3 -0
- package/src/ViewScopedFlowEngine.ts +15 -1
- package/src/__tests__/JSRunner.test.ts +62 -53
- package/src/__tests__/blockScopedFlowEngine.test.ts +154 -0
- package/src/__tests__/createViewMeta.popup.test.ts +132 -0
- package/src/__tests__/flow-engine.test.ts +3 -0
- package/src/__tests__/flowContext.test.ts +52 -0
- package/src/__tests__/flowContextCreateJSRunner.test.ts +163 -0
- package/src/__tests__/flowEngine.saveModel.test.ts +4 -0
- package/src/__tests__/flowRunJSContextDefine.test.ts +508 -0
- package/src/__tests__/flowSettings.open.test.tsx +2 -0
- package/src/__tests__/flowSettings.test.ts +2 -0
- package/src/__tests__/globalFlowRegistry.test.ts +1 -1
- package/src/__tests__/modelOperationScheduler.test.ts +346 -0
- package/src/__tests__/objectVariable.test.ts +464 -0
- package/src/__tests__/runjsContext.test.ts +216 -35
- package/src/__tests__/runjsContextImplementations.test.ts +217 -0
- package/src/__tests__/runjsContextRuntime.test.ts +269 -0
- package/src/__tests__/runjsEdgeCases.test.ts +281 -0
- package/src/__tests__/runjsLocales.test.ts +36 -0
- package/src/__tests__/runjsRuntimeFeatures.test.ts +449 -0
- package/src/__tests__/runjsSnippets.test.ts +140 -0
- package/src/__tests__/viewScopedFlowEngine.test.ts +3 -3
- package/src/acl/Acl.tsx +14 -0
- package/src/acl/__tests__/Acl.test.tsx +43 -0
- package/src/components/DynamicFlowsEditor.tsx +3 -4
- package/src/components/FieldModelRenderer.tsx +20 -7
- package/src/components/FieldSkeleton.tsx +27 -0
- package/src/components/FlowContextSelector.tsx +6 -2
- package/src/components/FlowModelRenderer.tsx +33 -81
- package/src/components/FormItem.tsx +8 -1
- package/src/components/MobilePopup.style.ts +220 -0
- package/src/components/MobilePopup.tsx +86 -0
- package/src/components/__tests__/flow-model-render-error-fallback.test.tsx +6 -6
- package/src/components/index.ts +1 -0
- package/src/components/settings/independents/dropdown/FlowsDropdownButton.tsx +1 -1
- package/src/components/settings/wrappers/contextual/DefaultSettingsIcon.tsx +17 -4
- package/src/components/settings/wrappers/contextual/FlowsContextMenu.tsx +1 -1
- package/src/components/settings/wrappers/contextual/FlowsFloatContextMenu.tsx +39 -10
- package/src/components/settings/wrappers/contextual/StepSettingsDialog.tsx +14 -1
- package/src/components/settings/wrappers/contextual/__tests__/DefaultSettingsIcon.test.tsx +425 -0
- package/src/components/subModel/__tests__/AddSubModelButton.test.tsx +5 -7
- package/src/components/variables/VariableInput.tsx +25 -5
- package/src/components/variables/VariableTag.tsx +54 -2
- package/src/components/variables/types.ts +2 -0
- package/src/data-source/__tests__/sortCollectionsByInherits.test.ts +125 -0
- package/src/data-source/index.ts +42 -11
- package/src/data-source/sortCollectionsByInherits.ts +61 -0
- package/src/emitter.ts +14 -0
- package/src/executor/FlowExecutor.ts +213 -119
- package/src/executor/__tests__/ctx-defs-injection.test.ts +197 -0
- package/src/executor/__tests__/flowExecutor.test.ts +151 -5
- package/src/flow-registry/GlobalFlowRegistry.ts +1 -0
- package/src/flow-registry/InstanceFlowRegistry.ts +1 -0
- package/src/flow-registry/__tests__/globalFlowRegistry.test.ts +54 -0
- package/src/flowContext.ts +290 -104
- package/src/flowEngine.ts +74 -6
- package/src/flowSettings.ts +9 -4
- package/src/hooks/useApplyAutoFlows.ts +3 -1
- package/src/index.ts +12 -1
- package/src/locale/en-US.json +4 -2
- package/src/locale/zh-CN.json +4 -2
- package/src/models/CollectionFieldModel.tsx +56 -7
- package/src/models/__tests__/dispatchEvent.behavior.test.ts +169 -0
- package/src/models/__tests__/flowModel.getFlows.sort.test.ts +33 -9
- package/src/models/__tests__/flowModel.scheduleModelOperation.test.tsx +129 -0
- package/src/models/__tests__/flowModel.test.ts +234 -111
- package/src/models/__tests__/forkFlowModel.test.ts +40 -7
- package/src/models/flowModel.tsx +180 -132
- package/src/models/forkFlowModel.ts +48 -8
- package/src/provider.tsx +10 -7
- package/src/resources/multiRecordResource.ts +28 -1
- package/src/resources/singleRecordResource.ts +19 -1
- package/src/resources/sqlResource.ts +20 -25
- package/src/runjs-context/contexts/FormJSFieldItemRunJSContext.ts +28 -21
- package/src/runjs-context/contexts/JSBlockRunJSContext.ts +46 -34
- package/src/runjs-context/contexts/JSCollectionActionRunJSContext.ts +15 -16
- package/src/runjs-context/contexts/JSColumnRunJSContext.ts +58 -0
- package/src/runjs-context/contexts/JSFieldRunJSContext.ts +30 -25
- package/src/runjs-context/contexts/JSItemRunJSContext.ts +25 -21
- package/src/runjs-context/contexts/JSRecordActionRunJSContext.ts +17 -18
- package/src/runjs-context/contexts/base.ts +171 -0
- package/src/runjs-context/helpers.ts +32 -30
- package/src/runjs-context/registry.ts +16 -47
- package/src/runjs-context/setup.ts +51 -0
- package/src/runjs-context/snippets/global/api-request.snippet.ts +38 -0
- package/src/runjs-context/snippets/global/clipboard-copy-text.snippet.ts +42 -0
- package/src/runjs-context/snippets/global/import-esm.snippet.ts +39 -0
- package/src/runjs-context/snippets/global/message-error.snippet.ts +6 -0
- package/src/runjs-context/snippets/global/message-success.snippet.ts +6 -0
- package/src/runjs-context/snippets/global/notification-open.snippet.ts +11 -1
- package/src/runjs-context/snippets/global/open-view-dialog.snippet.ts +10 -3
- package/src/runjs-context/snippets/global/open-view-drawer.snippet.ts +10 -3
- package/src/runjs-context/snippets/global/query-selector.snippet.ts +34 -0
- package/src/runjs-context/snippets/global/require-amd.snippet.ts +30 -0
- package/src/runjs-context/snippets/global/window-open.snippet.ts +11 -1
- package/src/runjs-context/snippets/index.ts +177 -39
- package/src/runjs-context/snippets/scene/{jsblock → block}/add-event-listener.snippet.ts +14 -2
- package/src/runjs-context/snippets/scene/block/api-fetch-render-list.snippet.ts +45 -0
- package/src/runjs-context/snippets/scene/block/chartjs-bar.snippet.ts +80 -0
- package/src/runjs-context/snippets/scene/block/echarts-init.snippet.ts +44 -0
- package/src/runjs-context/snippets/scene/block/render-button-handler.snippet.ts +35 -0
- package/src/runjs-context/snippets/scene/block/render-iframe.snippet.ts +38 -0
- package/src/runjs-context/snippets/scene/block/render-info-card.snippet.ts +52 -0
- package/src/runjs-context/snippets/scene/block/render-react-jsx.snippet.ts +39 -0
- package/src/runjs-context/snippets/scene/block/render-react.snippet.ts +38 -0
- package/src/runjs-context/snippets/scene/block/render-statistics.snippet.ts +76 -0
- package/src/runjs-context/snippets/scene/block/render-timeline.snippet.ts +65 -0
- package/src/runjs-context/snippets/scene/block/resource-example.snippet.ts +46 -0
- package/src/runjs-context/snippets/scene/block/three-users-orbit.snippet.ts +264 -0
- package/src/runjs-context/snippets/scene/block/vue-component.snippet.ts +105 -0
- package/src/runjs-context/snippets/scene/detail/color-by-value.snippet.ts +33 -0
- package/src/runjs-context/snippets/scene/detail/copy-to-clipboard.snippet.ts +45 -0
- package/src/runjs-context/snippets/scene/detail/format-number.snippet.ts +32 -0
- package/src/runjs-context/snippets/scene/detail/innerHTML-value.snippet.ts +31 -0
- package/src/runjs-context/snippets/scene/detail/percentage-bar.snippet.ts +63 -0
- package/src/runjs-context/snippets/scene/detail/relative-time.snippet.ts +61 -0
- package/src/runjs-context/snippets/scene/detail/status-tag.snippet.ts +55 -0
- package/src/runjs-context/snippets/scene/form/calculate-total.snippet.ts +44 -0
- package/src/runjs-context/snippets/scene/form/cascade-select.snippet.ts +62 -0
- package/src/runjs-context/snippets/scene/form/conditional-required.snippet.ts +45 -0
- package/src/runjs-context/snippets/scene/form/copy-field-values.snippet.ts +55 -0
- package/src/runjs-context/snippets/scene/{jsitem → form}/render-basic.snippet.ts +14 -2
- package/src/runjs-context/snippets/scene/{linkage → form}/set-disabled.snippet.ts +15 -3
- package/src/runjs-context/snippets/scene/{linkage → form}/set-field-value.snippet.ts +15 -3
- package/src/runjs-context/snippets/scene/{linkage → form}/set-required.snippet.ts +15 -3
- package/src/runjs-context/snippets/scene/form/toggle-multiple-fields.snippet.ts +48 -0
- package/src/runjs-context/snippets/scene/{linkage → form}/toggle-visible.snippet.ts +15 -3
- package/src/runjs-context/snippets/scene/table/cell-open-dialog.snippet.ts +45 -0
- package/src/runjs-context/snippets/scene/{actions → table}/collection-selected-count.snippet.ts +14 -2
- package/src/runjs-context/snippets/scene/table/concat-fields.snippet.ts +60 -0
- package/src/runjs-context/snippets/scene/table/destroy-selected.snippet.ts +36 -0
- package/src/runjs-context/snippets/scene/table/export-selected-json.snippet.ts +45 -0
- package/src/runjs-context/snippets/scene/{actions → table}/iterate-selected-rows.snippet.ts +14 -2
- package/src/runjs-context/snippets/types.ts +5 -1
- package/src/scheduler/ModelOperationScheduler.ts +304 -0
- package/src/types.ts +34 -0
- package/src/utils/__tests__/flows.test.ts +65 -0
- package/src/utils/__tests__/jsxTransform.test.ts +38 -0
- package/src/utils/__tests__/parsePathnameToViewParams.test.ts +25 -0
- package/src/utils/__tests__/pruneFilter.test.ts +38 -0
- package/src/utils/__tests__/safeGlobals.test.ts +22 -1
- package/src/utils/associationObjectVariable.ts +180 -0
- package/src/utils/buildSettingsViewInputArgs.ts +72 -0
- package/src/utils/createEphemeralContext.ts +142 -0
- package/src/utils/flows.ts +23 -0
- package/src/utils/index.ts +10 -2
- package/src/utils/jsxTransform.ts +39 -0
- package/src/utils/params-resolvers.ts +2 -2
- package/src/utils/parsePathnameToViewParams.ts +50 -6
- package/src/utils/pruneFilter.ts +41 -0
- package/src/utils/safeGlobals.ts +49 -3
- package/src/utils/schema-utils.ts +1 -1
- package/src/utils/serverContextParams.ts +1 -0
- package/src/utils/translation.ts +7 -2
- package/src/utils/variablesParams.ts +50 -38
- package/src/views/DrawerComponent.tsx +21 -2
- package/src/views/PageComponent.tsx +1 -1
- package/src/views/ViewNavigation.ts +20 -12
- package/src/views/__tests__/ViewNavigation.test.ts +10 -0
- package/src/views/createViewMeta.ts +393 -70
- package/src/views/index.tsx +1 -0
- package/src/views/useDialog.tsx +12 -10
- package/src/views/useDrawer.tsx +62 -37
- package/src/views/usePage.tsx +13 -10
- package/lib/runjs-context/contexts/FlowRunJSContext.d.ts +0 -38
- package/lib/runjs-context/contexts/FlowRunJSContext.js +0 -217
- package/lib/runjs-context/contexts/LinkageRunJSContext.js +0 -62
- package/lib/runjs-context/index.d.ts +0 -19
- package/lib/runjs-context/index.js +0 -57
- package/lib/runjs-context/snippets/global/api-request-get.snippet.d.ts +0 -16
- package/lib/runjs-context/snippets/global/api-request-get.snippet.js +0 -42
- package/lib/runjs-context/snippets/global/api-request-post.snippet.d.ts +0 -16
- package/lib/runjs-context/snippets/global/console-log-ctx.snippet.d.ts +0 -16
- package/lib/runjs-context/snippets/global/console-log-ctx.snippet.js +0 -41
- package/lib/runjs-context/snippets/global/requireAsync.snippet.d.ts +0 -16
- package/lib/runjs-context/snippets/global/sleep.snippet.d.ts +0 -16
- package/lib/runjs-context/snippets/global/sleep.snippet.js +0 -43
- package/lib/runjs-context/snippets/global/try-catch-async.snippet.d.ts +0 -16
- package/lib/runjs-context/snippets/libs/echarts-init.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/actions/collection-selected-count.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/actions/iterate-selected-rows.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/actions/record-id-message.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/actions/record-id-message.snippet.js +0 -43
- package/lib/runjs-context/snippets/scene/actions/run-action-basic.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/actions/run-action-basic.snippet.js +0 -40
- package/lib/runjs-context/snippets/scene/jsblock/add-event-listener.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/jsblock/append-style.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/jsblock/append-style.snippet.js +0 -42
- package/lib/runjs-context/snippets/scene/jsblock/jsx-mount.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/jsblock/jsx-mount.snippet.js +0 -46
- package/lib/runjs-context/snippets/scene/jsblock/jsx-unmount.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/jsblock/jsx-unmount.snippet.js +0 -41
- package/lib/runjs-context/snippets/scene/jsblock/render-basic.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/jsblock/render-basic.snippet.js +0 -41
- package/lib/runjs-context/snippets/scene/jsblock/render-button-handler.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/jsblock/render-react.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/jsfield/color-by-value.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/jsfield/format-number.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/jsfield/innerHTML-value.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/jsitem/render-basic.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/linkage/set-disabled.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/linkage/set-field-value.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/linkage/set-required.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/linkage/toggle-visible.snippet.d.ts +0 -15
- package/src/runjs-context/contexts/FlowRunJSContext.ts +0 -190
- package/src/runjs-context/contexts/LinkageRunJSContext.ts +0 -35
- package/src/runjs-context/index.ts +0 -20
- package/src/runjs-context/snippets/global/api-request-get.snippet.ts +0 -20
- package/src/runjs-context/snippets/global/api-request-post.snippet.ts +0 -20
- package/src/runjs-context/snippets/global/console-log-ctx.snippet.ts +0 -19
- package/src/runjs-context/snippets/global/copy-record-json.snippet.ts +0 -21
- package/src/runjs-context/snippets/global/copy-to-clipboard.snippet.ts +0 -21
- package/src/runjs-context/snippets/global/log-json-record.snippet.ts +0 -21
- package/src/runjs-context/snippets/global/requireAsync.snippet.ts +0 -24
- package/src/runjs-context/snippets/global/sleep.snippet.ts +0 -21
- package/src/runjs-context/snippets/global/try-catch-async.snippet.ts +0 -22
- package/src/runjs-context/snippets/global/view-navigation-push.snippet.ts +0 -23
- package/src/runjs-context/snippets/libs/echarts-init.snippet.ts +0 -24
- package/src/runjs-context/snippets/scene/actions/record-id-message.snippet.ts +0 -21
- package/src/runjs-context/snippets/scene/actions/run-action-basic.snippet.ts +0 -18
- package/src/runjs-context/snippets/scene/jsblock/append-style.snippet.ts +0 -20
- package/src/runjs-context/snippets/scene/jsblock/jsx-mount.snippet.ts +0 -24
- package/src/runjs-context/snippets/scene/jsblock/jsx-unmount.snippet.ts +0 -19
- package/src/runjs-context/snippets/scene/jsblock/render-basic.snippet.ts +0 -24
- package/src/runjs-context/snippets/scene/jsblock/render-button-handler.snippet.ts +0 -24
- package/src/runjs-context/snippets/scene/jsblock/render-card.snippet.ts +0 -30
- package/src/runjs-context/snippets/scene/jsblock/render-react.snippet.ts +0 -34
- package/src/runjs-context/snippets/scene/jsfield/color-by-value.snippet.ts +0 -20
- package/src/runjs-context/snippets/scene/jsfield/format-number.snippet.ts +0 -19
- package/src/runjs-context/snippets/scene/jsfield/innerHTML-value.snippet.ts +0 -18
- /package/lib/runjs-context/snippets/global/{copy-record-json.snippet.d.ts → api-request.snippet.d.ts} +0 -0
- /package/lib/runjs-context/snippets/global/{copy-to-clipboard.snippet.d.ts → clipboard-copy-text.snippet.d.ts} +0 -0
- /package/lib/runjs-context/snippets/global/{log-json-record.snippet.d.ts → import-esm.snippet.d.ts} +0 -0
- /package/lib/runjs-context/snippets/global/{view-navigation-push.snippet.d.ts → query-selector.snippet.d.ts} +0 -0
- /package/lib/runjs-context/snippets/scene/{jsblock/render-card.snippet.d.ts → block/echarts-init.snippet.d.ts} +0 -0
package/lib/flowContext.js
CHANGED
|
@@ -51,7 +51,7 @@ __export(flowContext_exports, {
|
|
|
51
51
|
FlowEngineContext: () => FlowEngineContext,
|
|
52
52
|
FlowForkModelContext: () => FlowForkModelContext,
|
|
53
53
|
FlowModelContext: () => FlowModelContext,
|
|
54
|
-
|
|
54
|
+
FlowRunJSContext: () => FlowRunJSContext,
|
|
55
55
|
FlowRuntimeContext: () => FlowRuntimeContext
|
|
56
56
|
});
|
|
57
57
|
module.exports = __toCommonJS(flowContext_exports);
|
|
@@ -60,18 +60,22 @@ var antd = __toESM(require("antd"));
|
|
|
60
60
|
var import_lodash = __toESM(require("lodash"));
|
|
61
61
|
var import_qs = __toESM(require("qs"));
|
|
62
62
|
var import_react = __toESM(require("react"));
|
|
63
|
+
var ReactDOMClient = __toESM(require("react-dom/client"));
|
|
64
|
+
var import_ElementProxy = require("./ElementProxy");
|
|
63
65
|
var import_Acl = require("./acl/Acl");
|
|
64
66
|
var import_ContextPathProxy = require("./ContextPathProxy");
|
|
65
67
|
var import_data_source = require("./data-source");
|
|
66
68
|
var import_flowEngine = require("./flowEngine");
|
|
67
69
|
var import_flowI18n = require("./flowI18n");
|
|
68
70
|
var import_JSRunner = require("./JSRunner");
|
|
69
|
-
var import_models = require("./models");
|
|
70
71
|
var import_resources = require("./resources");
|
|
71
72
|
var import_utils = require("./utils");
|
|
72
73
|
var import_exceptions = require("./utils/exceptions");
|
|
73
74
|
var import_params_resolvers = require("./utils/params-resolvers");
|
|
74
75
|
var import_serverContextParams = require("./utils/serverContextParams");
|
|
76
|
+
var import_registry = require("./runjs-context/registry");
|
|
77
|
+
var import_createEphemeralContext = require("./utils/createEphemeralContext");
|
|
78
|
+
var import_dayjs = __toESM(require("dayjs"));
|
|
75
79
|
var _proxy, _FlowContext_instances, createChildNodes_fn, findMetaByPath_fn, findMetaInDelegatesDeep_fn, findMetaInProperty_fn, resolvePathInMeta_fn, resolvePathInMetaAsync_fn, buildParentTitles_fn, toTreeNode_fn;
|
|
76
80
|
function isRecordRefLike(val) {
|
|
77
81
|
return !!(val && typeof val === "object" && "collection" in val && "filterByTk" in val);
|
|
@@ -657,34 +661,6 @@ toTreeNode_fn = /* @__PURE__ */ __name(function(name, metaOrFactory, paths = [na
|
|
|
657
661
|
}, "#toTreeNode");
|
|
658
662
|
__name(_FlowContext, "FlowContext");
|
|
659
663
|
let FlowContext = _FlowContext;
|
|
660
|
-
const _FlowRunjsContext = class _FlowRunjsContext extends FlowContext {
|
|
661
|
-
constructor(delegate) {
|
|
662
|
-
super();
|
|
663
|
-
this.addDelegate(delegate);
|
|
664
|
-
this.defineProperty("React", { value: import_react.default });
|
|
665
|
-
this.defineProperty("antd", { value: antd });
|
|
666
|
-
this.defineMethod(
|
|
667
|
-
"dispatchModelEvent",
|
|
668
|
-
async (modelOrUid, eventName, inputArgs) => {
|
|
669
|
-
var _a, _b;
|
|
670
|
-
let model = null;
|
|
671
|
-
if (typeof modelOrUid === "string") {
|
|
672
|
-
model = await this.engine.loadModel({ uid: modelOrUid });
|
|
673
|
-
} else if (modelOrUid instanceof import_models.FlowModel) {
|
|
674
|
-
model = modelOrUid;
|
|
675
|
-
}
|
|
676
|
-
if (model) {
|
|
677
|
-
model.context.addDelegate(this);
|
|
678
|
-
model.dispatchEvent(eventName, { navigation: false, ...(_b = (_a = this.model) == null ? void 0 : _a["getInputArgs"]) == null ? void 0 : _b.call(_a), ...inputArgs });
|
|
679
|
-
} else {
|
|
680
|
-
this.message.error(this.t("Model with ID {{uid}} not found", { uid: modelOrUid }));
|
|
681
|
-
}
|
|
682
|
-
}
|
|
683
|
-
);
|
|
684
|
-
}
|
|
685
|
-
};
|
|
686
|
-
__name(_FlowRunjsContext, "FlowRunjsContext");
|
|
687
|
-
let FlowRunjsContext = _FlowRunjsContext;
|
|
688
664
|
const _BaseFlowEngineContext = class _BaseFlowEngineContext extends FlowContext {
|
|
689
665
|
};
|
|
690
666
|
__name(_BaseFlowEngineContext, "BaseFlowEngineContext");
|
|
@@ -724,7 +700,7 @@ const _FlowEngineContext = class _FlowEngineContext extends BaseFlowEngineContex
|
|
|
724
700
|
});
|
|
725
701
|
this.defineMethod("runjs", async (code, variables, options) => {
|
|
726
702
|
const mergedGlobals = { ...(options == null ? void 0 : options.globals) || {}, ...variables || {} };
|
|
727
|
-
const runner = this.createJSRunner({
|
|
703
|
+
const runner = await this.createJSRunner({
|
|
728
704
|
...options || {},
|
|
729
705
|
globals: mergedGlobals
|
|
730
706
|
});
|
|
@@ -797,6 +773,16 @@ const _FlowEngineContext = class _FlowEngineContext extends BaseFlowEngineContex
|
|
|
797
773
|
const inputFromMeta = await collectFromMeta();
|
|
798
774
|
const autoInput = { ...inputFromMeta };
|
|
799
775
|
const autoContextParams = Object.keys(autoInput).length ? (0, import_serverContextParams.buildServerContextParams)(this, autoInput) : void 0;
|
|
776
|
+
if (!autoContextParams) {
|
|
777
|
+
const keys = Object.keys(serverVarPaths);
|
|
778
|
+
const allOptional = keys.length > 0 && keys.every((k) => {
|
|
779
|
+
var _a2;
|
|
780
|
+
return (_a2 = this.getPropertyOptions(k)) == null ? void 0 : _a2.serverOnlyWhenContextParams;
|
|
781
|
+
});
|
|
782
|
+
if (allOptional) {
|
|
783
|
+
return (0, import_utils.resolveExpressions)(template, this);
|
|
784
|
+
}
|
|
785
|
+
}
|
|
800
786
|
if (this.api) {
|
|
801
787
|
try {
|
|
802
788
|
serverResolved = await (0, import_params_resolvers.enqueueVariablesResolve)(this, {
|
|
@@ -930,45 +916,54 @@ const _FlowEngineContext = class _FlowEngineContext extends BaseFlowEngineContex
|
|
|
930
916
|
);
|
|
931
917
|
});
|
|
932
918
|
});
|
|
933
|
-
this.defineMethod("
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
...options,
|
|
937
|
-
globals: {
|
|
938
|
-
ctx: runCtx,
|
|
939
|
-
window: (0, import_utils.createSafeWindow)(),
|
|
940
|
-
document: (0, import_utils.createSafeDocument)(),
|
|
941
|
-
...options == null ? void 0 : options.globals
|
|
942
|
-
}
|
|
943
|
-
});
|
|
944
|
-
});
|
|
945
|
-
this.defineMethod("copyToClipboard", async (text) => {
|
|
946
|
-
const content = String(text ?? "");
|
|
947
|
-
try {
|
|
948
|
-
if (typeof navigator !== "undefined" && navigator.clipboard && navigator.clipboard.writeText) {
|
|
949
|
-
await navigator.clipboard.writeText(content);
|
|
950
|
-
return;
|
|
951
|
-
}
|
|
952
|
-
} catch (e) {
|
|
919
|
+
this.defineMethod("importAsync", async (url) => {
|
|
920
|
+
if (!url || typeof url !== "string") {
|
|
921
|
+
throw new Error("invalid url");
|
|
953
922
|
}
|
|
954
|
-
|
|
923
|
+
const u = url.trim();
|
|
924
|
+
const g = globalThis;
|
|
925
|
+
g.__nocobaseImportAsyncCache = g.__nocobaseImportAsyncCache || /* @__PURE__ */ new Map();
|
|
926
|
+
const cache = g.__nocobaseImportAsyncCache;
|
|
927
|
+
if (cache.has(u)) return cache.get(u);
|
|
928
|
+
const nativeImport = /* @__PURE__ */ __name(() => import(
|
|
929
|
+
/* @vite-ignore */
|
|
930
|
+
/* webpackIgnore: true */
|
|
931
|
+
u
|
|
932
|
+
), "nativeImport");
|
|
933
|
+
const evalImport = /* @__PURE__ */ __name(() => {
|
|
934
|
+
const importer = (0, eval)("u => import(u)");
|
|
935
|
+
return importer(u);
|
|
936
|
+
}, "evalImport");
|
|
937
|
+
const p = (async () => {
|
|
955
938
|
try {
|
|
956
|
-
|
|
957
|
-
ta.value = content;
|
|
958
|
-
ta.setAttribute("readonly", "");
|
|
959
|
-
ta.style.position = "fixed";
|
|
960
|
-
ta.style.top = "-9999px";
|
|
961
|
-
document.body.appendChild(ta);
|
|
962
|
-
ta.focus();
|
|
963
|
-
ta.select();
|
|
964
|
-
const ok = document.execCommand("copy");
|
|
965
|
-
document.body.removeChild(ta);
|
|
966
|
-
if (ok) resolve();
|
|
967
|
-
else reject(new Error("execCommand copy failed"));
|
|
939
|
+
return await nativeImport();
|
|
968
940
|
} catch (err) {
|
|
969
|
-
|
|
941
|
+
try {
|
|
942
|
+
return await evalImport();
|
|
943
|
+
} catch (err2) {
|
|
944
|
+
throw err2 || err;
|
|
945
|
+
}
|
|
970
946
|
}
|
|
971
|
-
});
|
|
947
|
+
})();
|
|
948
|
+
cache.set(u, p);
|
|
949
|
+
return p;
|
|
950
|
+
});
|
|
951
|
+
this.defineMethod("createJSRunner", async function(options) {
|
|
952
|
+
try {
|
|
953
|
+
const mod = await import("./runjs-context/setup");
|
|
954
|
+
if (typeof (mod == null ? void 0 : mod.setupRunJSContexts) === "function") await mod.setupRunJSContexts();
|
|
955
|
+
} catch (_2) {
|
|
956
|
+
}
|
|
957
|
+
const version = (options == null ? void 0 : options.version) || "v1";
|
|
958
|
+
const modelClass = (0, import_registry.getModelClassName)(this);
|
|
959
|
+
const Ctor = import_registry.RunJSContextRegistry.resolve(version, modelClass) || import_registry.RunJSContextRegistry.resolve(version, "*") || FlowRunJSContext;
|
|
960
|
+
let runCtx;
|
|
961
|
+
if (Ctor) {
|
|
962
|
+
runCtx = new Ctor(this);
|
|
963
|
+
}
|
|
964
|
+
const globals = { ctx: runCtx, ...(options == null ? void 0 : options.globals) || {} };
|
|
965
|
+
const { timeoutMs } = options || {};
|
|
966
|
+
return new import_JSRunner.JSRunner({ globals, timeoutMs });
|
|
972
967
|
});
|
|
973
968
|
this.defineMethod("buildServerContextParams", function(input) {
|
|
974
969
|
return (0, import_serverContextParams.buildServerContextParams)(this, input);
|
|
@@ -986,7 +981,7 @@ const _FlowEngineContext = class _FlowEngineContext extends BaseFlowEngineContex
|
|
|
986
981
|
"runAction",
|
|
987
982
|
async function(actionName, params) {
|
|
988
983
|
const def = this.engine.getAction(actionName);
|
|
989
|
-
const ctx =
|
|
984
|
+
const ctx = await (0, import_createEphemeralContext.createEphemeralContext)(this, def);
|
|
990
985
|
if (!def) {
|
|
991
986
|
throw new Error(`Action '${actionName}' not found.`);
|
|
992
987
|
}
|
|
@@ -1019,13 +1014,22 @@ const _FlowEngineContext = class _FlowEngineContext extends BaseFlowEngineContex
|
|
|
1019
1014
|
context: this.createProxy()
|
|
1020
1015
|
});
|
|
1021
1016
|
});
|
|
1017
|
+
this.defineMethod(
|
|
1018
|
+
"useResource",
|
|
1019
|
+
function(className) {
|
|
1020
|
+
if (this.has("resource")) return;
|
|
1021
|
+
this.defineProperty("resource", {
|
|
1022
|
+
get: /* @__PURE__ */ __name(() => this.createResource(className), "get")
|
|
1023
|
+
});
|
|
1024
|
+
}
|
|
1025
|
+
);
|
|
1022
1026
|
}
|
|
1023
1027
|
};
|
|
1024
1028
|
__name(_FlowEngineContext, "FlowEngineContext");
|
|
1025
1029
|
let FlowEngineContext = _FlowEngineContext;
|
|
1026
1030
|
const _FlowModelContext = class _FlowModelContext extends BaseFlowModelContext {
|
|
1027
1031
|
constructor(model) {
|
|
1028
|
-
if (!
|
|
1032
|
+
if (!model || typeof model !== "object") {
|
|
1029
1033
|
throw new Error("Invalid FlowModel instance");
|
|
1030
1034
|
}
|
|
1031
1035
|
super();
|
|
@@ -1034,7 +1038,7 @@ const _FlowModelContext = class _FlowModelContext extends BaseFlowModelContext {
|
|
|
1034
1038
|
this.engine.reactView.onRefReady(ref, cb, timeout);
|
|
1035
1039
|
});
|
|
1036
1040
|
this.defineMethod("runjs", async (code, variables, options) => {
|
|
1037
|
-
const runner = this.createJSRunner({
|
|
1041
|
+
const runner = await this.createJSRunner({
|
|
1038
1042
|
globals: variables,
|
|
1039
1043
|
version: options == null ? void 0 : options.version
|
|
1040
1044
|
});
|
|
@@ -1051,7 +1055,7 @@ const _FlowModelContext = class _FlowModelContext extends BaseFlowModelContext {
|
|
|
1051
1055
|
}, "get")
|
|
1052
1056
|
});
|
|
1053
1057
|
this.defineMethod("openView", async function(uid, options) {
|
|
1054
|
-
var _a, _b, _c, _d, _e, _f
|
|
1058
|
+
var _a, _b, _c, _d, _e, _f;
|
|
1055
1059
|
const opts = { ...options };
|
|
1056
1060
|
if (opts.defineProperties || opts.defineMethod) {
|
|
1057
1061
|
opts.navigation = false;
|
|
@@ -1069,28 +1073,29 @@ const _FlowModelContext = class _FlowModelContext extends BaseFlowModelContext {
|
|
|
1069
1073
|
stepParams: {
|
|
1070
1074
|
popupSettings: {
|
|
1071
1075
|
openView: {
|
|
1072
|
-
|
|
1076
|
+
// 持久化首次传入的关键展示/数据参数,供后续路由与再次打开复用
|
|
1077
|
+
...import_lodash.default.pick(opts, ["dataSourceKey", "collectionName", "associationName", "mode", "size"])
|
|
1073
1078
|
}
|
|
1074
1079
|
}
|
|
1075
1080
|
}
|
|
1076
1081
|
});
|
|
1077
1082
|
await model2.save();
|
|
1078
1083
|
}
|
|
1079
|
-
if ((
|
|
1080
|
-
model2.
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
}
|
|
1085
|
-
|
|
1086
|
-
|
|
1084
|
+
if ((_a = model2.getStepParams("popupSettings")) == null ? void 0 : _a.openView) {
|
|
1085
|
+
const prevOpenView = ((_b = model2.getStepParams("popupSettings")) == null ? void 0 : _b.openView) || {};
|
|
1086
|
+
const incoming = import_lodash.default.pick(opts, ["dataSourceKey", "collectionName", "associationName", "mode", "size"]);
|
|
1087
|
+
const nextOpenView = { ...prevOpenView, ...incoming };
|
|
1088
|
+
if (!import_lodash.default.isEqual(prevOpenView, nextOpenView)) {
|
|
1089
|
+
model2.setStepParams("popupSettings", { openView: nextOpenView });
|
|
1090
|
+
await model2.save();
|
|
1091
|
+
}
|
|
1087
1092
|
}
|
|
1088
|
-
const viewUid = (opts == null ? void 0 : opts.routeViewUid) ?? (opts == null ? void 0 : opts.viewUid) ?? (((
|
|
1093
|
+
const viewUid = (opts == null ? void 0 : opts.routeViewUid) ?? (opts == null ? void 0 : opts.viewUid) ?? (((_d = (_c = model2.stepParams) == null ? void 0 : _c.popupSettings) == null ? void 0 : _d.openView) ? model2.uid : this.model.uid);
|
|
1089
1094
|
const parentView = this.view;
|
|
1090
1095
|
const pendingType = (opts == null ? void 0 : opts.isMobileLayout) ? "embed" : (opts == null ? void 0 : opts.mode) || "drawer";
|
|
1091
1096
|
const pendingInputArgs = { ...opts, viewUid, navigation: opts.navigation };
|
|
1092
|
-
pendingInputArgs.filterByTk = pendingInputArgs.filterByTk || ((
|
|
1093
|
-
pendingInputArgs.sourceId = pendingInputArgs.sourceId || ((
|
|
1097
|
+
pendingInputArgs.filterByTk = pendingInputArgs.filterByTk || ((_e = this.inputArgs) == null ? void 0 : _e.filterByTk);
|
|
1098
|
+
pendingInputArgs.sourceId = pendingInputArgs.sourceId || ((_f = this.inputArgs) == null ? void 0 : _f.sourceId);
|
|
1094
1099
|
const pendingView = {
|
|
1095
1100
|
type: pendingType,
|
|
1096
1101
|
inputArgs: pendingInputArgs,
|
|
@@ -1119,7 +1124,7 @@ const _FlowModelContext = class _FlowModelContext extends BaseFlowModelContext {
|
|
|
1119
1124
|
"runAction",
|
|
1120
1125
|
async function(actionName, params) {
|
|
1121
1126
|
const def = this.model.getAction(actionName);
|
|
1122
|
-
const ctx =
|
|
1127
|
+
const ctx = await (0, import_createEphemeralContext.createEphemeralContext)(this, def);
|
|
1123
1128
|
if (!def) {
|
|
1124
1129
|
throw new Error(`Action '${actionName}' not found.`);
|
|
1125
1130
|
}
|
|
@@ -1144,7 +1149,7 @@ __name(_FlowModelContext, "FlowModelContext");
|
|
|
1144
1149
|
let FlowModelContext = _FlowModelContext;
|
|
1145
1150
|
const _FlowForkModelContext = class _FlowForkModelContext extends BaseFlowModelContext {
|
|
1146
1151
|
constructor(master, fork) {
|
|
1147
|
-
if (!
|
|
1152
|
+
if (!master || typeof master !== "object") {
|
|
1148
1153
|
throw new Error("Invalid FlowModel instance");
|
|
1149
1154
|
}
|
|
1150
1155
|
super();
|
|
@@ -1165,7 +1170,7 @@ const _FlowForkModelContext = class _FlowForkModelContext extends BaseFlowModelC
|
|
|
1165
1170
|
}, "get")
|
|
1166
1171
|
});
|
|
1167
1172
|
this.defineMethod("runjs", async (code, variables, options) => {
|
|
1168
|
-
const runner = this.createJSRunner({
|
|
1173
|
+
const runner = await this.createJSRunner({
|
|
1169
1174
|
globals: variables,
|
|
1170
1175
|
version: options == null ? void 0 : options.version
|
|
1171
1176
|
});
|
|
@@ -1216,7 +1221,7 @@ const _FlowRuntimeContext = class _FlowRuntimeContext extends BaseFlowModelConte
|
|
|
1216
1221
|
this.engine.reactView.onRefReady(ref, cb, timeout);
|
|
1217
1222
|
});
|
|
1218
1223
|
this.defineMethod("runjs", async (code, variables, options) => {
|
|
1219
|
-
const runner = this.createJSRunner({
|
|
1224
|
+
const runner = await this.createJSRunner({
|
|
1220
1225
|
globals: variables,
|
|
1221
1226
|
version: options == null ? void 0 : options.version
|
|
1222
1227
|
});
|
|
@@ -1257,12 +1262,135 @@ const _FlowRuntimeContext = class _FlowRuntimeContext extends BaseFlowModelConte
|
|
|
1257
1262
|
};
|
|
1258
1263
|
__name(_FlowRuntimeContext, "FlowRuntimeContext");
|
|
1259
1264
|
let FlowRuntimeContext = _FlowRuntimeContext;
|
|
1265
|
+
const __runjsClassDefaultMeta = /* @__PURE__ */ new WeakMap();
|
|
1266
|
+
const __runjsClassLocaleMeta = /* @__PURE__ */ new WeakMap();
|
|
1267
|
+
const __runjsDocCache = /* @__PURE__ */ new WeakMap();
|
|
1268
|
+
function __runjsDeepMerge(base, patch) {
|
|
1269
|
+
if (patch === null) return void 0;
|
|
1270
|
+
if (Array.isArray(base) || Array.isArray(patch) || typeof base !== "object" || typeof patch !== "object") {
|
|
1271
|
+
return patch ?? base;
|
|
1272
|
+
}
|
|
1273
|
+
const out = { ...base };
|
|
1274
|
+
for (const k of Object.keys(patch)) {
|
|
1275
|
+
const v = __runjsDeepMerge(base == null ? void 0 : base[k], patch[k]);
|
|
1276
|
+
if (typeof v === "undefined") delete out[k];
|
|
1277
|
+
else out[k] = v;
|
|
1278
|
+
}
|
|
1279
|
+
return out;
|
|
1280
|
+
}
|
|
1281
|
+
__name(__runjsDeepMerge, "__runjsDeepMerge");
|
|
1282
|
+
const _FlowRunJSContext = class _FlowRunJSContext extends FlowContext {
|
|
1283
|
+
constructor(delegate) {
|
|
1284
|
+
super();
|
|
1285
|
+
this.addDelegate(delegate);
|
|
1286
|
+
this.defineProperty("React", { value: import_react.default });
|
|
1287
|
+
this.defineProperty("antd", { value: antd });
|
|
1288
|
+
this.defineProperty("dayjs", { value: import_dayjs.default });
|
|
1289
|
+
const ReactDOMShim = {
|
|
1290
|
+
...ReactDOMClient,
|
|
1291
|
+
createRoot: /* @__PURE__ */ __name((container, options) => {
|
|
1292
|
+
const realContainer = (container == null ? void 0 : container.__el) || container;
|
|
1293
|
+
return this.engine.reactView.createRoot(realContainer, options);
|
|
1294
|
+
}, "createRoot")
|
|
1295
|
+
};
|
|
1296
|
+
this.defineProperty("ReactDOM", { value: ReactDOMShim });
|
|
1297
|
+
this.defineMethod(
|
|
1298
|
+
"render",
|
|
1299
|
+
function(vnode, container) {
|
|
1300
|
+
const el = container || this.element;
|
|
1301
|
+
if (!el) throw new Error("ctx.render: container not provided and ctx.element is not available");
|
|
1302
|
+
const containerEl = (el == null ? void 0 : el.__el) || el;
|
|
1303
|
+
const globalRef = globalThis;
|
|
1304
|
+
globalRef.__nbRunjsRoots = globalRef.__nbRunjsRoots || /* @__PURE__ */ new WeakMap();
|
|
1305
|
+
const rootMap = globalRef.__nbRunjsRoots;
|
|
1306
|
+
if (typeof vnode === "string") {
|
|
1307
|
+
const existingRoot = rootMap.get(containerEl);
|
|
1308
|
+
if (existingRoot && typeof existingRoot.unmount === "function") {
|
|
1309
|
+
try {
|
|
1310
|
+
existingRoot.unmount();
|
|
1311
|
+
} finally {
|
|
1312
|
+
rootMap.delete(containerEl);
|
|
1313
|
+
}
|
|
1314
|
+
}
|
|
1315
|
+
const proxy = new import_ElementProxy.ElementProxy(containerEl);
|
|
1316
|
+
proxy.innerHTML = String(vnode ?? "");
|
|
1317
|
+
return null;
|
|
1318
|
+
}
|
|
1319
|
+
if (vnode && vnode.nodeType && (vnode.nodeType === 1 || vnode.nodeType === 3 || vnode.nodeType === 11)) {
|
|
1320
|
+
const existingRoot = rootMap.get(containerEl);
|
|
1321
|
+
if (existingRoot && typeof existingRoot.unmount === "function") {
|
|
1322
|
+
try {
|
|
1323
|
+
existingRoot.unmount();
|
|
1324
|
+
} finally {
|
|
1325
|
+
rootMap.delete(containerEl);
|
|
1326
|
+
}
|
|
1327
|
+
}
|
|
1328
|
+
while (containerEl.firstChild) containerEl.removeChild(containerEl.firstChild);
|
|
1329
|
+
containerEl.appendChild(vnode);
|
|
1330
|
+
return null;
|
|
1331
|
+
}
|
|
1332
|
+
let root = rootMap.get(containerEl);
|
|
1333
|
+
if (!root) {
|
|
1334
|
+
root = this.ReactDOM.createRoot(containerEl);
|
|
1335
|
+
rootMap.set(containerEl, root);
|
|
1336
|
+
}
|
|
1337
|
+
root.render(vnode);
|
|
1338
|
+
return root;
|
|
1339
|
+
}
|
|
1340
|
+
);
|
|
1341
|
+
}
|
|
1342
|
+
static define(meta, options) {
|
|
1343
|
+
const locale = options == null ? void 0 : options.locale;
|
|
1344
|
+
if (locale) {
|
|
1345
|
+
const map = __runjsClassLocaleMeta.get(this) || /* @__PURE__ */ new Map();
|
|
1346
|
+
const prev = map.get(locale) || {};
|
|
1347
|
+
map.set(locale, __runjsDeepMerge(prev, meta));
|
|
1348
|
+
__runjsClassLocaleMeta.set(this, map);
|
|
1349
|
+
} else {
|
|
1350
|
+
const prev = __runjsClassDefaultMeta.get(this) || {};
|
|
1351
|
+
__runjsClassDefaultMeta.set(this, __runjsDeepMerge(prev, meta));
|
|
1352
|
+
}
|
|
1353
|
+
__runjsDocCache.delete(this);
|
|
1354
|
+
}
|
|
1355
|
+
static getDoc(locale) {
|
|
1356
|
+
const self = this;
|
|
1357
|
+
let cacheForClass = __runjsDocCache.get(self);
|
|
1358
|
+
const cacheKey = String(locale || "default");
|
|
1359
|
+
if (cacheForClass && cacheForClass.has(cacheKey)) return cacheForClass.get(cacheKey);
|
|
1360
|
+
const chain = [];
|
|
1361
|
+
let cur = self;
|
|
1362
|
+
while (cur && cur.prototype) {
|
|
1363
|
+
chain.unshift(cur);
|
|
1364
|
+
cur = Object.getPrototypeOf(cur);
|
|
1365
|
+
}
|
|
1366
|
+
let merged = {};
|
|
1367
|
+
for (const cls of chain) {
|
|
1368
|
+
merged = __runjsDeepMerge(merged, __runjsClassDefaultMeta.get(cls) || {});
|
|
1369
|
+
}
|
|
1370
|
+
if (locale) {
|
|
1371
|
+
for (const cls of chain) {
|
|
1372
|
+
const lmap = __runjsClassLocaleMeta.get(cls);
|
|
1373
|
+
if (lmap && lmap.has(locale)) {
|
|
1374
|
+
merged = __runjsDeepMerge(merged, lmap.get(locale));
|
|
1375
|
+
}
|
|
1376
|
+
}
|
|
1377
|
+
}
|
|
1378
|
+
if (!cacheForClass) {
|
|
1379
|
+
cacheForClass = /* @__PURE__ */ new Map();
|
|
1380
|
+
__runjsDocCache.set(self, cacheForClass);
|
|
1381
|
+
}
|
|
1382
|
+
cacheForClass.set(cacheKey, merged);
|
|
1383
|
+
return merged;
|
|
1384
|
+
}
|
|
1385
|
+
};
|
|
1386
|
+
__name(_FlowRunJSContext, "FlowRunJSContext");
|
|
1387
|
+
let FlowRunJSContext = _FlowRunJSContext;
|
|
1260
1388
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1261
1389
|
0 && (module.exports = {
|
|
1262
1390
|
FlowContext,
|
|
1263
1391
|
FlowEngineContext,
|
|
1264
1392
|
FlowForkModelContext,
|
|
1265
1393
|
FlowModelContext,
|
|
1266
|
-
|
|
1394
|
+
FlowRunJSContext,
|
|
1267
1395
|
FlowRuntimeContext
|
|
1268
1396
|
});
|
package/lib/flowEngine.d.ts
CHANGED
|
@@ -5,6 +5,9 @@ import { FlowSettings } from './flowSettings';
|
|
|
5
5
|
import { FlowModel } from './models';
|
|
6
6
|
import { ReactView } from './ReactView';
|
|
7
7
|
import { FlowResource } from './resources';
|
|
8
|
+
import { Emitter } from './emitter';
|
|
9
|
+
import ModelOperationScheduler from './scheduler/ModelOperationScheduler';
|
|
10
|
+
import type { ScheduleOptions, ScheduledCancel } from './scheduler/ModelOperationScheduler';
|
|
8
11
|
import type { ActionDefinition, ApplyFlowCacheEntry, CreateModelOptions, EventDefinition, FlowModelOptions, IFlowModelRepository, ModelConstructor, PersistOptions, ResourceType } from './types';
|
|
9
12
|
/**
|
|
10
13
|
* FlowEngine is the core class of the flow engine, responsible for managing flow models, actions, model repository, and more.
|
|
@@ -81,6 +84,13 @@ export declare class FlowEngine {
|
|
|
81
84
|
private _previousEngine?;
|
|
82
85
|
private _nextEngine?;
|
|
83
86
|
private _resources;
|
|
87
|
+
/**
|
|
88
|
+
* 引擎事件总线(目前用于模型生命周期等事件)。
|
|
89
|
+
* ViewScopedFlowEngine 持有自己的实例,实现作用域隔离。
|
|
90
|
+
*/
|
|
91
|
+
emitter: Emitter;
|
|
92
|
+
/** 调度器:仅在 View 作用域引擎本地启用;根/Block 作用域默认不持有 */
|
|
93
|
+
private _modelOperationScheduler?;
|
|
84
94
|
logger: pino.Logger;
|
|
85
95
|
/**
|
|
86
96
|
* Flow settings, including components and form scopes.
|
|
@@ -95,13 +105,19 @@ export declare class FlowEngine {
|
|
|
95
105
|
*/
|
|
96
106
|
reactView: ReactView;
|
|
97
107
|
/**
|
|
98
|
-
* Flow executor that runs
|
|
108
|
+
* Flow executor that runs event flows.
|
|
99
109
|
*/
|
|
100
110
|
executor: FlowExecutor;
|
|
101
111
|
/**
|
|
102
112
|
* Constructor. Initializes React view, registers default model and form scopes.
|
|
103
113
|
*/
|
|
104
114
|
constructor();
|
|
115
|
+
/** 获取/创建当前引擎的调度器(仅在本地作用域) */
|
|
116
|
+
getScheduler(): ModelOperationScheduler;
|
|
117
|
+
/** 释放并清理当前引擎本地调度器(若存在) */
|
|
118
|
+
disposeScheduler(): void;
|
|
119
|
+
/** 在目标模型生命周期达成时执行操作(仅在 View 引擎本地存储计划) */
|
|
120
|
+
scheduleModelOperation(fromModelOrUid: FlowModel | string, toUid: string, fn: (model: FlowModel) => Promise<void> | void, options?: ScheduleOptions): ScheduledCancel;
|
|
105
121
|
/** 上一个引擎(根引擎为 undefined) */
|
|
106
122
|
get previousEngine(): FlowEngine | undefined;
|
|
107
123
|
/** 下一个引擎(若存在) */
|
|
@@ -304,6 +320,13 @@ export declare class FlowEngine {
|
|
|
304
320
|
* @returns {Promise<boolean>} Whether destroyed successfully
|
|
305
321
|
*/
|
|
306
322
|
destroyModel(uid: string): Promise<boolean>;
|
|
323
|
+
/**
|
|
324
|
+
* Duplicate a model tree via repository API.
|
|
325
|
+
* Returns the duplicated model JSON (root with subModels) or null if not available.
|
|
326
|
+
* @param {string} uid UID of the model to duplicate
|
|
327
|
+
* @returns {Promise<any | null>} Duplicated model JSON or null
|
|
328
|
+
*/
|
|
329
|
+
duplicateModel(uid: string): Promise<Record<string, any>>;
|
|
307
330
|
/**
|
|
308
331
|
* Replace a model instance with a new instance of a class.
|
|
309
332
|
* @template T New model type
|
package/lib/flowEngine.js
CHANGED
|
@@ -59,6 +59,8 @@ var import_flowSettings = require("./flowSettings");
|
|
|
59
59
|
var import_models = require("./models");
|
|
60
60
|
var import_ReactView = require("./ReactView");
|
|
61
61
|
var import_resources = require("./resources");
|
|
62
|
+
var import_emitter = require("./emitter");
|
|
63
|
+
var import_ModelOperationScheduler = __toESM(require("./scheduler/ModelOperationScheduler"));
|
|
62
64
|
var import_utils = require("./utils");
|
|
63
65
|
var _FlowEngine_instances, registerModel_fn;
|
|
64
66
|
const _FlowEngine = class _FlowEngine {
|
|
@@ -118,6 +120,13 @@ const _FlowEngine = class _FlowEngine {
|
|
|
118
120
|
__publicField(this, "_previousEngine");
|
|
119
121
|
__publicField(this, "_nextEngine");
|
|
120
122
|
__publicField(this, "_resources", /* @__PURE__ */ new Map());
|
|
123
|
+
/**
|
|
124
|
+
* 引擎事件总线(目前用于模型生命周期等事件)。
|
|
125
|
+
* ViewScopedFlowEngine 持有自己的实例,实现作用域隔离。
|
|
126
|
+
*/
|
|
127
|
+
__publicField(this, "emitter", new import_emitter.Emitter());
|
|
128
|
+
/** 调度器:仅在 View 作用域引擎本地启用;根/Block 作用域默认不持有 */
|
|
129
|
+
__publicField(this, "_modelOperationScheduler");
|
|
121
130
|
__publicField(this, "logger");
|
|
122
131
|
/**
|
|
123
132
|
* Flow settings, including components and form scopes.
|
|
@@ -132,7 +141,7 @@ const _FlowEngine = class _FlowEngine {
|
|
|
132
141
|
*/
|
|
133
142
|
__publicField(this, "reactView");
|
|
134
143
|
/**
|
|
135
|
-
* Flow executor that runs
|
|
144
|
+
* Flow executor that runs event flows.
|
|
136
145
|
*/
|
|
137
146
|
__publicField(this, "executor");
|
|
138
147
|
this.reactView = new import_ReactView.ReactView(this);
|
|
@@ -161,6 +170,27 @@ const _FlowEngine = class _FlowEngine {
|
|
|
161
170
|
});
|
|
162
171
|
this.executor = new import_FlowExecutor.FlowExecutor(this);
|
|
163
172
|
}
|
|
173
|
+
/** 获取/创建当前引擎的调度器(仅在本地作用域) */
|
|
174
|
+
getScheduler() {
|
|
175
|
+
if (!this._modelOperationScheduler) {
|
|
176
|
+
this._modelOperationScheduler = new import_ModelOperationScheduler.default(this);
|
|
177
|
+
}
|
|
178
|
+
return this._modelOperationScheduler;
|
|
179
|
+
}
|
|
180
|
+
/** 释放并清理当前引擎本地调度器(若存在) */
|
|
181
|
+
disposeScheduler() {
|
|
182
|
+
if (this._modelOperationScheduler) {
|
|
183
|
+
try {
|
|
184
|
+
this._modelOperationScheduler.dispose();
|
|
185
|
+
} finally {
|
|
186
|
+
this._modelOperationScheduler = void 0;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
/** 在目标模型生命周期达成时执行操作(仅在 View 引擎本地存储计划) */
|
|
191
|
+
scheduleModelOperation(fromModelOrUid, toUid, fn, options) {
|
|
192
|
+
return this.getScheduler().schedule(fromModelOrUid, toUid, fn, options);
|
|
193
|
+
}
|
|
164
194
|
/** 上一个引擎(根引擎为 undefined) */
|
|
165
195
|
get previousEngine() {
|
|
166
196
|
return this._previousEngine;
|
|
@@ -384,6 +414,10 @@ const _FlowEngine = class _FlowEngine {
|
|
|
384
414
|
}
|
|
385
415
|
this._modelInstances.set(modelInstance.uid, modelInstance);
|
|
386
416
|
modelInstance.onInit(options);
|
|
417
|
+
void this.emitter.emitAsync("model:created", {
|
|
418
|
+
uid: modelInstance.uid,
|
|
419
|
+
model: modelInstance
|
|
420
|
+
});
|
|
387
421
|
this._applyFlowDefinitionDefaultParams(modelInstance).catch((err) => {
|
|
388
422
|
console.warn("FlowEngine: apply flow defaultParams failed:", err);
|
|
389
423
|
});
|
|
@@ -485,6 +519,10 @@ const _FlowEngine = class _FlowEngine {
|
|
|
485
519
|
}
|
|
486
520
|
}
|
|
487
521
|
this._modelInstances.delete(uid);
|
|
522
|
+
void this.emitter.emitAsync("model:destroyed", {
|
|
523
|
+
uid,
|
|
524
|
+
model: modelInstance
|
|
525
|
+
});
|
|
488
526
|
return true;
|
|
489
527
|
}
|
|
490
528
|
/**
|
|
@@ -629,6 +667,16 @@ const _FlowEngine = class _FlowEngine {
|
|
|
629
667
|
}
|
|
630
668
|
return this.removeModel(uid);
|
|
631
669
|
}
|
|
670
|
+
/**
|
|
671
|
+
* Duplicate a model tree via repository API.
|
|
672
|
+
* Returns the duplicated model JSON (root with subModels) or null if not available.
|
|
673
|
+
* @param {string} uid UID of the model to duplicate
|
|
674
|
+
* @returns {Promise<any | null>} Duplicated model JSON or null
|
|
675
|
+
*/
|
|
676
|
+
async duplicateModel(uid) {
|
|
677
|
+
if (!this.ensureModelRepository()) return null;
|
|
678
|
+
return this._modelRepository.duplicate(uid);
|
|
679
|
+
}
|
|
632
680
|
/**
|
|
633
681
|
* Replace a model instance with a new instance of a class.
|
|
634
682
|
* @template T New model type
|
|
@@ -674,7 +722,7 @@ const _FlowEngine = class _FlowEngine {
|
|
|
674
722
|
}
|
|
675
723
|
if (currentParent) {
|
|
676
724
|
currentParent.emitter.setPaused(false);
|
|
677
|
-
currentParent.parent.
|
|
725
|
+
currentParent.parent.invalidateFlowCache("beforeRender", true);
|
|
678
726
|
(_a = currentParent.parent) == null ? void 0 : _a.rerender();
|
|
679
727
|
currentParent.emitter.emit("onSubModelReplaced", { oldModel, newModel });
|
|
680
728
|
}
|
|
@@ -704,7 +752,8 @@ const _FlowEngine = class _FlowEngine {
|
|
|
704
752
|
console.error("FlowModel.moveTo: Parent subModels must be an array to perform move operation.");
|
|
705
753
|
return false;
|
|
706
754
|
}
|
|
707
|
-
const
|
|
755
|
+
const subModelsCopy = [...subModels];
|
|
756
|
+
const findIndex = /* @__PURE__ */ __name((model) => subModelsCopy.findIndex((item) => item.uid === model.uid), "findIndex");
|
|
708
757
|
const currentIndex = findIndex(sourceModel2);
|
|
709
758
|
const targetIndex = findIndex(targetModel2);
|
|
710
759
|
if (currentIndex === -1 || targetIndex === -1) {
|
|
@@ -715,11 +764,12 @@ const _FlowEngine = class _FlowEngine {
|
|
|
715
764
|
console.warn("FlowModel.moveTo: Current model is already at the target position. No action taken.");
|
|
716
765
|
return false;
|
|
717
766
|
}
|
|
718
|
-
const [movedModel] =
|
|
719
|
-
|
|
720
|
-
|
|
767
|
+
const [movedModel] = subModelsCopy.splice(currentIndex, 1);
|
|
768
|
+
subModelsCopy.splice(targetIndex, 0, movedModel);
|
|
769
|
+
subModelsCopy.forEach((model, index) => {
|
|
721
770
|
model.sortIndex = index;
|
|
722
771
|
});
|
|
772
|
+
sourceModel2.parent.subModels[sourceModel2.subKey] = subModelsCopy;
|
|
723
773
|
return true;
|
|
724
774
|
}, "move");
|
|
725
775
|
move(sourceModel, targetModel);
|
package/lib/flowSettings.d.ts
CHANGED
|
@@ -227,12 +227,13 @@ export declare class FlowSettings {
|
|
|
227
227
|
* @param {any} form 表单实例(从外部传入以便统一管理)
|
|
228
228
|
* @returns {React.ReactElement} 渲染的表单元素
|
|
229
229
|
*/
|
|
230
|
-
renderStepForm({ uiSchema, initialValues, flowEngine, form, onFormValuesChange, }: {
|
|
230
|
+
renderStepForm({ uiSchema, initialValues, flowEngine, form, onFormValuesChange, key, }: {
|
|
231
231
|
uiSchema: any;
|
|
232
232
|
initialValues: any;
|
|
233
233
|
flowEngine: any;
|
|
234
234
|
form?: any;
|
|
235
235
|
onFormValuesChange?: (form: any) => void;
|
|
236
|
+
key?: string;
|
|
236
237
|
}): React.ReactElement;
|
|
237
238
|
/**
|
|
238
239
|
* 打开流程设置入口(聚合渲染多个 flow 的可配置步骤)
|