@nocobase/flow-engine 2.0.0-alpha.7 → 2.0.0-alpha.71
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 +91 -0
- package/lib/FlowContextProvider.d.ts +2 -2
- package/lib/FlowContextProvider.js +3 -3
- package/lib/FlowDefinition.d.ts +6 -4
- package/lib/JSRunner.d.ts +6 -0
- package/lib/JSRunner.js +27 -1
- package/lib/ViewScopedFlowEngine.d.ts +1 -1
- package/lib/ViewScopedFlowEngine.js +18 -1
- package/lib/acl/Acl.d.ts +12 -12
- package/lib/acl/Acl.js +88 -30
- package/lib/components/DynamicFlowsEditor.js +2 -4
- package/lib/components/FieldModelRenderer.js +17 -9
- package/lib/components/FieldSkeleton.d.ts +10 -0
- package/lib/components/FieldSkeleton.js +64 -0
- package/lib/components/FlowContextSelector.js +19 -3
- package/lib/components/FlowModelRenderer.d.ts +4 -6
- package/lib/components/FlowModelRenderer.js +35 -53
- 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/common/withFlowDesignMode.d.ts +1 -1
- package/lib/components/common/withFlowDesignMode.js +5 -5
- package/lib/components/dnd/gridDragPlanner.d.ts +1 -0
- package/lib/components/dnd/gridDragPlanner.js +53 -1
- package/lib/components/index.d.ts +1 -0
- package/lib/components/index.js +3 -1
- package/lib/components/settings/independents/dropdown/FlowsDropdownButton.js +71 -53
- package/lib/components/settings/wrappers/component/SelectWithTitle.d.ts +19 -0
- package/lib/components/settings/wrappers/component/SelectWithTitle.js +136 -0
- package/lib/components/settings/wrappers/component/SwitchWithTitle.d.ts +10 -0
- package/lib/components/settings/wrappers/component/SwitchWithTitle.js +111 -0
- package/lib/components/settings/wrappers/contextual/DefaultSettingsIcon.js +233 -97
- package/lib/components/settings/wrappers/contextual/FlowsContextMenu.js +71 -54
- package/lib/components/settings/wrappers/contextual/FlowsFloatContextMenu.d.ts +2 -2
- package/lib/components/settings/wrappers/contextual/FlowsFloatContextMenu.js +63 -23
- package/lib/components/settings/wrappers/contextual/StepSettingsDialog.js +13 -2
- package/lib/components/settings/wrappers/embedded/FlowSettings.js +42 -28
- package/lib/components/settings/wrappers/embedded/FlowsSettings.js +3 -3
- package/lib/components/settings/wrappers/embedded/FlowsSettingsContent.js +52 -32
- package/lib/components/subModel/AddSubModelButton.d.ts +7 -0
- package/lib/components/subModel/AddSubModelButton.js +78 -8
- package/lib/components/subModel/LazyDropdown.js +14 -15
- package/lib/components/subModel/utils.d.ts +1 -1
- package/lib/components/subModel/utils.js +21 -11
- package/lib/components/variables/VariableInput.js +26 -6
- package/lib/components/variables/VariableTag.js +43 -2
- package/lib/components/variables/types.d.ts +2 -0
- package/lib/components/variables/utils.js +4 -2
- package/lib/data-source/index.d.ts +23 -4
- package/lib/data-source/index.js +135 -14
- package/lib/data-source/jioToJoiSchema.js +1 -0
- package/lib/emitter.d.ts +6 -0
- package/lib/emitter.js +12 -0
- package/lib/executor/FlowExecutor.d.ts +6 -6
- package/lib/executor/FlowExecutor.js +302 -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 +105 -6
- package/lib/flowContext.js +447 -139
- package/lib/flowEngine.d.ts +71 -1
- package/lib/flowEngine.js +319 -16
- package/lib/flowSettings.d.ts +4 -3
- package/lib/flowSettings.js +45 -21
- package/lib/hooks/useApplyAutoFlows.d.ts +1 -0
- package/lib/hooks/useApplyAutoFlows.js +3 -2
- package/lib/index.d.ts +14 -3
- package/lib/index.js +54 -7
- package/lib/locale/de-DE.json +62 -0
- package/lib/locale/en-US.json +57 -45
- package/lib/locale/es-ES.json +62 -0
- package/lib/locale/fr-FR.json +62 -0
- package/lib/locale/hu-HU.json +62 -0
- package/lib/locale/id-ID.json +62 -0
- package/lib/locale/index.d.ts +114 -90
- package/lib/locale/it-IT.json +62 -0
- package/lib/locale/ja-JP.json +62 -0
- package/lib/locale/ko-KR.json +62 -0
- package/lib/locale/nl-NL.json +62 -0
- package/lib/locale/pt-BR.json +62 -0
- package/lib/locale/ru-RU.json +62 -0
- package/lib/locale/tr-TR.json +62 -0
- package/lib/locale/uk-UA.json +62 -0
- package/lib/locale/vi-VN.json +62 -0
- package/lib/locale/zh-CN.json +58 -46
- package/lib/locale/zh-TW.json +62 -0
- package/lib/models/CollectionFieldModel.d.ts +7 -2
- package/lib/models/CollectionFieldModel.js +63 -16
- package/lib/models/flowModel.d.ts +76 -32
- package/lib/models/flowModel.js +300 -112
- 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 +14 -11
- package/lib/reactive/index.d.ts +10 -0
- package/lib/{runjs-context/snippets/global/api-request-post.snippet.js → reactive/index.js} +14 -15
- package/lib/reactive/observer.d.ts +19 -0
- package/lib/reactive/observer.js +109 -0
- package/lib/resources/baseRecordResource.d.ts +6 -0
- package/lib/resources/baseRecordResource.js +38 -3
- package/lib/resources/multiRecordResource.d.ts +5 -2
- package/lib/resources/multiRecordResource.js +26 -10
- package/lib/resources/singleRecordResource.js +8 -3
- package/lib/resources/sqlResource.d.ts +5 -3
- package/lib/resources/sqlResource.js +30 -28
- package/lib/runjs-context/contexts/FormJSFieldItemRunJSContext.d.ts +1 -6
- package/lib/runjs-context/contexts/FormJSFieldItemRunJSContext.js +37 -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/JSEditableFieldRunJSContext.d.ts +16 -0
- package/lib/runjs-context/contexts/JSEditableFieldRunJSContext.js +125 -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 +34 -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 +879 -0
- package/lib/runjs-context/contributions.d.ts +33 -0
- package/lib/runjs-context/contributions.js +88 -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 +88 -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 +24 -3
- package/lib/runjs-context/snippets/index.js +183 -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-antd-icons.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/block/render-antd-icons.snippet.js +65 -0
- 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/runjsLibs.d.ts +28 -0
- package/lib/runjsLibs.js +532 -0
- package/lib/scheduler/ModelOperationScheduler.d.ts +53 -0
- package/lib/scheduler/ModelOperationScheduler.js +262 -0
- package/lib/types.d.ts +66 -7
- package/lib/types.js +4 -3
- package/lib/utils/associationObjectVariable.d.ts +32 -0
- package/lib/utils/associationObjectVariable.js +157 -0
- package/lib/utils/createCollectionContextMeta.d.ts +1 -1
- package/lib/utils/createCollectionContextMeta.js +9 -4
- 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/console-log-ctx.snippet.js → utils/flows.js} +21 -14
- package/lib/utils/index.d.ts +9 -3
- package/lib/utils/index.js +30 -2
- package/lib/utils/jsxTransform.d.ts +15 -0
- package/lib/utils/jsxTransform.js +68 -0
- package/lib/utils/params-resolvers.js +19 -12
- 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/resolveModuleUrl.d.ts +58 -0
- package/lib/utils/resolveModuleUrl.js +65 -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/safeGlobals.d.ts +6 -8
- package/lib/utils/safeGlobals.js +169 -14
- package/lib/utils/schema-utils.d.ts +6 -0
- package/lib/utils/schema-utils.js +71 -6
- package/lib/utils/serverContextParams.d.ts +4 -0
- package/lib/utils/serverContextParams.js +2 -0
- package/lib/utils/translation.d.ts +4 -1
- package/lib/utils/translation.js +6 -2
- package/lib/utils/variablesParams.d.ts +22 -5
- package/lib/utils/variablesParams.js +141 -61
- package/lib/views/DialogComponent.js +1 -5
- package/lib/views/DrawerComponent.js +18 -9
- package/lib/views/PageComponent.js +5 -5
- package/lib/views/ViewNavigation.d.ts +11 -15
- package/lib/views/ViewNavigation.js +37 -19
- package/lib/views/createViewMeta.d.ts +27 -5
- package/lib/views/createViewMeta.js +338 -72
- package/lib/views/index.d.ts +1 -1
- package/lib/views/index.js +4 -0
- package/lib/views/useDialog.d.ts +10 -9
- package/lib/views/useDialog.js +46 -34
- package/lib/views/useDrawer.d.ts +10 -9
- package/lib/views/useDrawer.js +74 -48
- package/lib/views/usePage.d.ts +14 -9
- package/lib/views/usePage.js +82 -33
- 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 +6 -3
- package/src/BlockScopedFlowEngine.ts +85 -0
- package/src/FlowContextProvider.tsx +4 -2
- package/src/JSRunner.ts +39 -1
- package/src/ViewScopedFlowEngine.ts +21 -1
- package/src/__tests__/JSRunner.test.ts +125 -52
- package/src/__tests__/blockScopedFlowEngine.test.ts +154 -0
- package/src/__tests__/createViewMeta.popup.test.ts +203 -0
- package/src/__tests__/flow-engine.test.ts +3 -0
- package/src/__tests__/flowContext.test.ts +160 -0
- package/src/__tests__/flowContextCreateJSRunner.test.ts +163 -0
- package/src/__tests__/flowEngine.dataSourceDirty.test.ts +63 -0
- package/src/__tests__/flowEngine.destroyModel.test.ts +74 -0
- package/src/__tests__/flowEngine.moveModel.test.ts +43 -0
- package/src/__tests__/flowEngine.removeModel.test.ts +72 -0
- package/src/__tests__/flowEngine.saveModel.test.ts +4 -0
- package/src/__tests__/flowModel.openView.navigation.test.ts +31 -2
- package/src/__tests__/flowRunJSContextDefine.test.ts +508 -0
- package/src/__tests__/flowSettings.open.test.tsx +71 -15
- 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__/provider.test.tsx +0 -5
- package/src/__tests__/runjsContext.test.ts +219 -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__/runjsExternalLibs.test.ts +242 -0
- package/src/__tests__/runjsLibsLazyLoading.test.ts +44 -0
- package/src/__tests__/runjsLocales.test.ts +39 -0
- package/src/__tests__/runjsPreprocessDefault.test.ts +49 -0
- package/src/__tests__/runjsRuntimeFeatures.test.ts +461 -0
- package/src/__tests__/runjsSnippets.test.ts +140 -0
- package/src/__tests__/viewScopedFlowEngine.test.ts +101 -3
- package/src/acl/Acl.tsx +85 -31
- package/src/acl/__tests__/Acl.test.tsx +43 -1
- package/src/components/DynamicFlowsEditor.tsx +0 -10
- package/src/components/FieldModelRenderer.tsx +22 -9
- package/src/components/FieldSkeleton.tsx +27 -0
- package/src/components/FlowContextSelector.tsx +20 -2
- package/src/components/FlowModelRenderer.tsx +52 -84
- 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__/FlowModelRenderer.test.tsx +89 -0
- package/src/components/__tests__/flow-model-render-error-fallback.test.tsx +6 -6
- package/src/components/__tests__/gridDragPlanner.test.ts +141 -1
- package/src/components/common/withFlowDesignMode.tsx +5 -5
- package/src/components/dnd/gridDragPlanner.ts +60 -0
- package/src/components/index.ts +1 -0
- package/src/components/settings/independents/dropdown/FlowsDropdownButton.tsx +34 -17
- package/src/components/settings/wrappers/component/SelectWithTitle.tsx +110 -0
- package/src/components/settings/wrappers/component/SwitchWithTitle.tsx +83 -0
- package/src/components/settings/wrappers/component/__tests__/InlineControls.test.tsx +74 -0
- package/src/components/settings/wrappers/contextual/DefaultSettingsIcon.tsx +272 -125
- package/src/components/settings/wrappers/contextual/FlowsContextMenu.tsx +34 -18
- package/src/components/settings/wrappers/contextual/FlowsFloatContextMenu.tsx +56 -18
- package/src/components/settings/wrappers/contextual/StepSettings.tsx +1 -2
- package/src/components/settings/wrappers/contextual/StepSettingsDialog.tsx +13 -1
- package/src/components/settings/wrappers/contextual/__tests__/DefaultSettingsIcon.test.tsx +624 -0
- package/src/components/settings/wrappers/embedded/FlowSettings.tsx +47 -35
- package/src/components/settings/wrappers/embedded/FlowsSettings.tsx +1 -1
- package/src/components/settings/wrappers/embedded/FlowsSettingsContent.tsx +64 -42
- package/src/components/subModel/AddSubModelButton.tsx +104 -9
- package/src/components/subModel/LazyDropdown.tsx +14 -14
- package/src/components/subModel/__tests__/AddSubModelButton.test.tsx +168 -7
- package/src/components/subModel/__tests__/utils.test.ts +12 -12
- package/src/components/subModel/utils.ts +25 -6
- package/src/components/variables/VariableInput.tsx +32 -6
- package/src/components/variables/VariableTag.tsx +54 -2
- package/src/components/variables/types.ts +2 -0
- package/src/components/variables/utils.ts +7 -3
- package/src/data-source/index.ts +143 -12
- package/src/data-source/jioToJoiSchema.ts +1 -0
- package/src/emitter.ts +14 -0
- package/src/executor/FlowExecutor.ts +383 -119
- package/src/executor/__tests__/ctx-defs-injection.test.ts +197 -0
- package/src/executor/__tests__/flowExecutor.test.ts +217 -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 +646 -158
- package/src/flowEngine.ts +385 -14
- package/src/flowSettings.ts +59 -30
- package/src/hooks/useApplyAutoFlows.ts +5 -3
- package/src/index.ts +26 -3
- package/src/locale/de-DE.json +62 -0
- package/src/locale/en-US.json +57 -45
- package/src/locale/es-ES.json +62 -0
- package/src/locale/fr-FR.json +62 -0
- package/src/locale/hu-HU.json +62 -0
- package/src/locale/id-ID.json +62 -0
- package/src/locale/it-IT.json +62 -0
- package/src/locale/ja-JP.json +62 -0
- package/src/locale/ko-KR.json +62 -0
- package/src/locale/nl-NL.json +62 -0
- package/src/locale/pt-BR.json +62 -0
- package/src/locale/ru-RU.json +62 -0
- package/src/locale/tr-TR.json +62 -0
- package/src/locale/uk-UA.json +62 -0
- package/src/locale/vi-VN.json +62 -0
- package/src/locale/zh-CN.json +58 -46
- package/src/locale/zh-TW.json +62 -0
- package/src/models/CollectionFieldModel.tsx +82 -18
- package/src/models/__tests__/dispatchEvent.behavior.test.ts +169 -0
- package/src/models/__tests__/dispatchEvent.when.test.ts +356 -0
- package/src/models/__tests__/flowEngine.resolveUse.test.ts +170 -0
- package/src/models/__tests__/flowModel.clone.test.ts +416 -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 +296 -119
- package/src/models/__tests__/forkFlowModel.test.ts +40 -7
- package/src/models/flowModel.tsx +426 -148
- package/src/models/forkFlowModel.ts +48 -8
- package/src/provider.tsx +18 -14
- package/src/reactive/__tests__/observer.test.tsx +211 -0
- package/src/reactive/index.ts +11 -0
- package/src/reactive/observer.tsx +101 -0
- package/src/resources/__tests__/multiRecordResource.test.ts +44 -0
- package/src/resources/__tests__/sqlResource.test.ts +60 -0
- package/src/resources/baseRecordResource.ts +46 -3
- package/src/resources/multiRecordResource.ts +28 -12
- package/src/resources/singleRecordResource.ts +9 -3
- package/src/resources/sqlResource.ts +33 -32
- package/src/runjs-context/contexts/FormJSFieldItemRunJSContext.ts +38 -21
- package/src/runjs-context/contexts/JSBlockRunJSContext.ts +50 -34
- package/src/runjs-context/contexts/JSCollectionActionRunJSContext.ts +15 -16
- package/src/runjs-context/contexts/JSColumnRunJSContext.ts +58 -0
- package/src/runjs-context/contexts/JSEditableFieldRunJSContext.ts +106 -0
- package/src/runjs-context/contexts/JSFieldRunJSContext.ts +30 -25
- package/src/runjs-context/contexts/JSItemRunJSContext.ts +35 -21
- package/src/runjs-context/contexts/JSRecordActionRunJSContext.ts +17 -18
- package/src/runjs-context/contexts/base.ts +871 -0
- package/src/runjs-context/contributions.ts +88 -0
- package/src/runjs-context/helpers.ts +32 -30
- package/src/runjs-context/registry.ts +16 -47
- package/src/runjs-context/setup.ts +57 -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 +212 -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-antd-icons.snippet.ts +46 -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/runjsLibs.ts +622 -0
- package/src/scheduler/ModelOperationScheduler.ts +306 -0
- package/src/types.ts +86 -5
- package/src/utils/__tests__/createCollectionContextMeta.test.ts +51 -0
- package/src/utils/__tests__/flows.test.ts +65 -0
- package/src/utils/__tests__/jsxTransform.test.ts +38 -0
- package/src/utils/__tests__/params-resolvers.test.ts +40 -0
- package/src/utils/__tests__/parsePathnameToViewParams.test.ts +25 -0
- package/src/utils/__tests__/pruneFilter.test.ts +38 -0
- package/src/utils/__tests__/runjsRequireAsyncAutoWhitelist.test.ts +38 -0
- package/src/utils/__tests__/runjsTemplateCompat.test.ts +159 -0
- package/src/utils/__tests__/safeGlobals.test.ts +79 -2
- package/src/utils/__tests__/utils.test.ts +114 -15
- package/src/utils/__tests__/variablesParams.test.ts +120 -0
- package/src/utils/associationObjectVariable.ts +180 -0
- package/src/utils/createCollectionContextMeta.ts +9 -3
- package/src/utils/createEphemeralContext.ts +142 -0
- package/src/utils/flows.ts +23 -0
- package/src/utils/index.ts +17 -3
- package/src/utils/jsxTransform.ts +39 -0
- package/src/utils/params-resolvers.ts +25 -11
- package/src/utils/parsePathnameToViewParams.ts +50 -6
- package/src/utils/pruneFilter.ts +41 -0
- package/src/utils/resolveModuleUrl.ts +91 -0
- package/src/utils/runjsModuleLoader.ts +553 -0
- package/src/utils/runjsTemplateCompat.ts +828 -0
- package/src/utils/safeGlobals.ts +181 -15
- package/src/utils/schema-utils.ts +81 -3
- package/src/utils/serverContextParams.ts +6 -0
- package/src/utils/translation.ts +7 -2
- package/src/utils/variablesParams.ts +164 -72
- package/src/views/DialogComponent.tsx +1 -4
- package/src/views/DrawerComponent.tsx +19 -7
- package/src/views/PageComponent.tsx +3 -5
- package/src/views/ViewNavigation.ts +49 -43
- package/src/views/__tests__/FlowView.usePage.test.tsx +186 -0
- package/src/views/__tests__/ViewNavigation.test.ts +54 -34
- package/src/views/__tests__/useDialog.closeDestroy.test.tsx +159 -0
- package/src/views/__tests__/viewEvents.resolveOpenerEngine.test.ts +28 -0
- package/src/views/createViewMeta.ts +402 -73
- package/src/views/index.tsx +1 -1
- package/src/views/useDialog.tsx +52 -31
- package/src/views/useDrawer.tsx +99 -55
- package/src/views/usePage.tsx +101 -33
- package/src/views/usePopover.tsx +4 -1
- package/src/views/viewEvents.ts +55 -0
- 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/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/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,24 @@ export declare class FlowEngine {
|
|
|
81
84
|
private _previousEngine?;
|
|
82
85
|
private _nextEngine?;
|
|
83
86
|
private _resources;
|
|
87
|
+
/**
|
|
88
|
+
* Data change registry used to coordinate "refresh on active" across view-scoped engines.
|
|
89
|
+
*
|
|
90
|
+
* Keyed by: dataSourceKey -> resourceName -> version.
|
|
91
|
+
* - mark: increments version
|
|
92
|
+
* - get: returns current version (default 0)
|
|
93
|
+
*
|
|
94
|
+
* NOTE: ViewScopedFlowEngine proxies delegate non-local fields/methods to parents, so this
|
|
95
|
+
* registry naturally lives on the root engine instance and is shared across the whole view stack.
|
|
96
|
+
*/
|
|
97
|
+
private _dataSourceDirtyVersions;
|
|
98
|
+
/**
|
|
99
|
+
* 引擎事件总线(目前用于模型生命周期等事件)。
|
|
100
|
+
* ViewScopedFlowEngine 持有自己的实例,实现作用域隔离。
|
|
101
|
+
*/
|
|
102
|
+
emitter: Emitter;
|
|
103
|
+
/** 调度器:仅在 View 作用域引擎本地启用;根/Block 作用域默认不持有 */
|
|
104
|
+
private _modelOperationScheduler?;
|
|
84
105
|
logger: pino.Logger;
|
|
85
106
|
/**
|
|
86
107
|
* Flow settings, including components and form scopes.
|
|
@@ -95,13 +116,29 @@ export declare class FlowEngine {
|
|
|
95
116
|
*/
|
|
96
117
|
reactView: ReactView;
|
|
97
118
|
/**
|
|
98
|
-
* Flow executor that runs
|
|
119
|
+
* Flow executor that runs event flows.
|
|
99
120
|
*/
|
|
100
121
|
executor: FlowExecutor;
|
|
101
122
|
/**
|
|
102
123
|
* Constructor. Initializes React view, registers default model and form scopes.
|
|
103
124
|
*/
|
|
104
125
|
constructor();
|
|
126
|
+
/** 获取/创建当前引擎的调度器(仅在本地作用域) */
|
|
127
|
+
getScheduler(): ModelOperationScheduler;
|
|
128
|
+
/** 释放并清理当前引擎本地调度器(若存在) */
|
|
129
|
+
disposeScheduler(): void;
|
|
130
|
+
/**
|
|
131
|
+
* Mark a data source resource as "dirty" (changed).
|
|
132
|
+
* This is used by data blocks to decide whether to refresh when a view becomes active.
|
|
133
|
+
*/
|
|
134
|
+
markDataSourceDirty(dataSourceKey: string, resourceName: string): number;
|
|
135
|
+
/**
|
|
136
|
+
* Get current dirty version for a data source resource.
|
|
137
|
+
* Returns 0 when no writes have been recorded.
|
|
138
|
+
*/
|
|
139
|
+
getDataSourceDirtyVersion(dataSourceKey: string, resourceName: string): number;
|
|
140
|
+
/** 在目标模型生命周期达成时执行操作(仅在 View 引擎本地存储计划) */
|
|
141
|
+
scheduleModelOperation(fromModelOrUid: FlowModel | string, toUid: string, fn: (model: FlowModel) => Promise<void> | void, options?: ScheduleOptions): ScheduledCancel;
|
|
105
142
|
/** 上一个引擎(根引擎为 undefined) */
|
|
106
143
|
get previousEngine(): FlowEngine | undefined;
|
|
107
144
|
/** 下一个引擎(若存在) */
|
|
@@ -218,6 +255,11 @@ export declare class FlowEngine {
|
|
|
218
255
|
delegateToParent?: boolean;
|
|
219
256
|
delegate?: FlowContext;
|
|
220
257
|
}): T;
|
|
258
|
+
/**
|
|
259
|
+
* 按类上的 resolveUse 链路解析最终用于实例化的模型类。
|
|
260
|
+
* 允许模型类根据上下文动态指定实际使用的类,支持多级 resolveUse。
|
|
261
|
+
*/
|
|
262
|
+
private _resolveModelClass;
|
|
221
263
|
/**
|
|
222
264
|
* 尝试应用当前模型可用 flow 的 defaultParams(如果存在)到 model.stepParams。
|
|
223
265
|
* 仅对尚未存在的步骤参数进行填充,不覆盖已有值。
|
|
@@ -242,12 +284,33 @@ export declare class FlowEngine {
|
|
|
242
284
|
* @returns {boolean} Returns true if successfully destroyed, false otherwise (e.g. instance does not exist)
|
|
243
285
|
*/
|
|
244
286
|
removeModel(uid: string): boolean;
|
|
287
|
+
/**
|
|
288
|
+
* Remove a local model instance and all its sub-models recursively.
|
|
289
|
+
* @param {string} uid UID of the model instance to destroy
|
|
290
|
+
* @returns {boolean} Returns true if successfully destroyed, false otherwise
|
|
291
|
+
*/
|
|
292
|
+
removeModelWithSubModels(uid: string): boolean;
|
|
245
293
|
/**
|
|
246
294
|
* Check if the model repository is set.
|
|
247
295
|
* @returns {boolean} Returns true if set, false otherwise.
|
|
248
296
|
* @private
|
|
249
297
|
*/
|
|
250
298
|
private ensureModelRepository;
|
|
299
|
+
/**
|
|
300
|
+
* Try to locate a model instance in previous engines (view stack) by uid.
|
|
301
|
+
* This is mainly used by view-scoped engines to reuse already-loaded model trees
|
|
302
|
+
* (e.g. models created from local JSON) without hitting the repository.
|
|
303
|
+
*/
|
|
304
|
+
private findModelInPreviousEngines;
|
|
305
|
+
/**
|
|
306
|
+
* Try to locate a sub-model in previous engines (view stack) by (parentId, subKey).
|
|
307
|
+
*/
|
|
308
|
+
private findSubModelInPreviousEngines;
|
|
309
|
+
/**
|
|
310
|
+
* Hydrate a model into current engine from an already-existing model instance in previous engines.
|
|
311
|
+
* - Avoids repository requests when the model tree is already present in memory.
|
|
312
|
+
*/
|
|
313
|
+
private hydrateModelFromPreviousEngines;
|
|
251
314
|
/**
|
|
252
315
|
* Load a model instance (prefers local, falls back to repository).
|
|
253
316
|
* @template T FlowModel subclass type, defaults to FlowModel.
|
|
@@ -304,6 +367,13 @@ export declare class FlowEngine {
|
|
|
304
367
|
* @returns {Promise<boolean>} Whether destroyed successfully
|
|
305
368
|
*/
|
|
306
369
|
destroyModel(uid: string): Promise<boolean>;
|
|
370
|
+
/**
|
|
371
|
+
* Duplicate a model tree via repository API.
|
|
372
|
+
* Returns the duplicated model JSON (root with subModels) or null if not available.
|
|
373
|
+
* @param {string} uid UID of the model to duplicate
|
|
374
|
+
* @returns {Promise<any | null>} Duplicated model JSON or null
|
|
375
|
+
*/
|
|
376
|
+
duplicateModel(uid: string): Promise<Record<string, any>>;
|
|
307
377
|
/**
|
|
308
378
|
* Replace a model instance with a new instance of a class.
|
|
309
379
|
* @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,24 @@ const _FlowEngine = class _FlowEngine {
|
|
|
118
120
|
__publicField(this, "_previousEngine");
|
|
119
121
|
__publicField(this, "_nextEngine");
|
|
120
122
|
__publicField(this, "_resources", /* @__PURE__ */ new Map());
|
|
123
|
+
/**
|
|
124
|
+
* Data change registry used to coordinate "refresh on active" across view-scoped engines.
|
|
125
|
+
*
|
|
126
|
+
* Keyed by: dataSourceKey -> resourceName -> version.
|
|
127
|
+
* - mark: increments version
|
|
128
|
+
* - get: returns current version (default 0)
|
|
129
|
+
*
|
|
130
|
+
* NOTE: ViewScopedFlowEngine proxies delegate non-local fields/methods to parents, so this
|
|
131
|
+
* registry naturally lives on the root engine instance and is shared across the whole view stack.
|
|
132
|
+
*/
|
|
133
|
+
__publicField(this, "_dataSourceDirtyVersions", /* @__PURE__ */ new Map());
|
|
134
|
+
/**
|
|
135
|
+
* 引擎事件总线(目前用于模型生命周期等事件)。
|
|
136
|
+
* ViewScopedFlowEngine 持有自己的实例,实现作用域隔离。
|
|
137
|
+
*/
|
|
138
|
+
__publicField(this, "emitter", new import_emitter.Emitter());
|
|
139
|
+
/** 调度器:仅在 View 作用域引擎本地启用;根/Block 作用域默认不持有 */
|
|
140
|
+
__publicField(this, "_modelOperationScheduler");
|
|
121
141
|
__publicField(this, "logger");
|
|
122
142
|
/**
|
|
123
143
|
* Flow settings, including components and form scopes.
|
|
@@ -132,7 +152,7 @@ const _FlowEngine = class _FlowEngine {
|
|
|
132
152
|
*/
|
|
133
153
|
__publicField(this, "reactView");
|
|
134
154
|
/**
|
|
135
|
-
* Flow executor that runs
|
|
155
|
+
* Flow executor that runs event flows.
|
|
136
156
|
*/
|
|
137
157
|
__publicField(this, "executor");
|
|
138
158
|
this.reactView = new import_ReactView.ReactView(this);
|
|
@@ -161,6 +181,54 @@ const _FlowEngine = class _FlowEngine {
|
|
|
161
181
|
});
|
|
162
182
|
this.executor = new import_FlowExecutor.FlowExecutor(this);
|
|
163
183
|
}
|
|
184
|
+
/** 获取/创建当前引擎的调度器(仅在本地作用域) */
|
|
185
|
+
getScheduler() {
|
|
186
|
+
if (!this._modelOperationScheduler) {
|
|
187
|
+
this._modelOperationScheduler = new import_ModelOperationScheduler.default(this);
|
|
188
|
+
}
|
|
189
|
+
return this._modelOperationScheduler;
|
|
190
|
+
}
|
|
191
|
+
/** 释放并清理当前引擎本地调度器(若存在) */
|
|
192
|
+
disposeScheduler() {
|
|
193
|
+
if (this._modelOperationScheduler) {
|
|
194
|
+
try {
|
|
195
|
+
this._modelOperationScheduler.dispose();
|
|
196
|
+
} finally {
|
|
197
|
+
this._modelOperationScheduler = void 0;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Mark a data source resource as "dirty" (changed).
|
|
203
|
+
* This is used by data blocks to decide whether to refresh when a view becomes active.
|
|
204
|
+
*/
|
|
205
|
+
markDataSourceDirty(dataSourceKey, resourceName) {
|
|
206
|
+
const dsKey = String(dataSourceKey || "main");
|
|
207
|
+
const resName = String(resourceName || "");
|
|
208
|
+
if (!resName) return this.getDataSourceDirtyVersion(dsKey, resName);
|
|
209
|
+
const ds = this._dataSourceDirtyVersions.get(dsKey) || /* @__PURE__ */ new Map();
|
|
210
|
+
if (!this._dataSourceDirtyVersions.has(dsKey)) {
|
|
211
|
+
this._dataSourceDirtyVersions.set(dsKey, ds);
|
|
212
|
+
}
|
|
213
|
+
const next = (ds.get(resName) || 0) + 1;
|
|
214
|
+
ds.set(resName, next);
|
|
215
|
+
return next;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Get current dirty version for a data source resource.
|
|
219
|
+
* Returns 0 when no writes have been recorded.
|
|
220
|
+
*/
|
|
221
|
+
getDataSourceDirtyVersion(dataSourceKey, resourceName) {
|
|
222
|
+
var _a;
|
|
223
|
+
const dsKey = String(dataSourceKey || "main");
|
|
224
|
+
const resName = String(resourceName || "");
|
|
225
|
+
if (!resName) return 0;
|
|
226
|
+
return ((_a = this._dataSourceDirtyVersions.get(dsKey)) == null ? void 0 : _a.get(resName)) || 0;
|
|
227
|
+
}
|
|
228
|
+
/** 在目标模型生命周期达成时执行操作(仅在 View 引擎本地存储计划) */
|
|
229
|
+
scheduleModelOperation(fromModelOrUid, toUid, fn, options) {
|
|
230
|
+
return this.getScheduler().schedule(fromModelOrUid, toUid, fn, options);
|
|
231
|
+
}
|
|
164
232
|
/** 上一个引擎(根引擎为 undefined) */
|
|
165
233
|
get previousEngine() {
|
|
166
234
|
return this._previousEngine;
|
|
@@ -361,8 +429,14 @@ const _FlowEngine = class _FlowEngine {
|
|
|
361
429
|
* @returns {T} Created model instance
|
|
362
430
|
*/
|
|
363
431
|
createModel(options, extra) {
|
|
432
|
+
var _a;
|
|
364
433
|
const { parentId, uid, use: modelClassName, subModels } = options;
|
|
365
|
-
const
|
|
434
|
+
const parentModel = parentId ? this.getModel(parentId) || ((_a = this.previousEngine) == null ? void 0 : _a.getModel(parentId)) : void 0;
|
|
435
|
+
const ModelClass = this._resolveModelClass(
|
|
436
|
+
typeof modelClassName === "string" ? this.getModelClass(modelClassName) : modelClassName,
|
|
437
|
+
options,
|
|
438
|
+
parentModel
|
|
439
|
+
);
|
|
366
440
|
if (uid && this._modelInstances.has(uid)) {
|
|
367
441
|
return this._modelInstances.get(uid);
|
|
368
442
|
}
|
|
@@ -376,20 +450,69 @@ const _FlowEngine = class _FlowEngine {
|
|
|
376
450
|
if (extra == null ? void 0 : extra.delegate) {
|
|
377
451
|
modelInstance.context.addDelegate(extra.delegate);
|
|
378
452
|
}
|
|
379
|
-
if (
|
|
380
|
-
modelInstance.setParent(
|
|
453
|
+
if (parentModel) {
|
|
454
|
+
modelInstance.setParent(parentModel);
|
|
381
455
|
if ((extra == null ? void 0 : extra.delegateToParent) === false) {
|
|
382
456
|
modelInstance.removeParentDelegate();
|
|
383
457
|
}
|
|
384
458
|
}
|
|
385
459
|
this._modelInstances.set(modelInstance.uid, modelInstance);
|
|
386
460
|
modelInstance.onInit(options);
|
|
461
|
+
void this.emitter.emitAsync("model:created", {
|
|
462
|
+
uid: modelInstance.uid,
|
|
463
|
+
model: modelInstance
|
|
464
|
+
});
|
|
387
465
|
this._applyFlowDefinitionDefaultParams(modelInstance).catch((err) => {
|
|
388
466
|
console.warn("FlowEngine: apply flow defaultParams failed:", err);
|
|
389
467
|
});
|
|
390
468
|
modelInstance._createSubModels(options.subModels);
|
|
391
469
|
return modelInstance;
|
|
392
470
|
}
|
|
471
|
+
/**
|
|
472
|
+
* 按类上的 resolveUse 链路解析最终用于实例化的模型类。
|
|
473
|
+
* 允许模型类根据上下文动态指定实际使用的类,支持多级 resolveUse。
|
|
474
|
+
*/
|
|
475
|
+
_resolveModelClass(initial, options, parent) {
|
|
476
|
+
const normalize = /* @__PURE__ */ __name((resolved) => {
|
|
477
|
+
if (!resolved) return {};
|
|
478
|
+
if (typeof resolved === "object" && "use" in resolved) {
|
|
479
|
+
return { target: resolved.use, stop: !!resolved.stop };
|
|
480
|
+
}
|
|
481
|
+
return { target: resolved, stop: false };
|
|
482
|
+
}, "normalize");
|
|
483
|
+
let current = initial;
|
|
484
|
+
const visited = /* @__PURE__ */ new Set();
|
|
485
|
+
while (current) {
|
|
486
|
+
if (visited.has(current)) {
|
|
487
|
+
console.warn(`FlowEngine: resolveUse circular reference detected on '${current.name}'.`);
|
|
488
|
+
break;
|
|
489
|
+
}
|
|
490
|
+
visited.add(current);
|
|
491
|
+
const resolver = current == null ? void 0 : current.resolveUse;
|
|
492
|
+
if (typeof resolver !== "function") {
|
|
493
|
+
break;
|
|
494
|
+
}
|
|
495
|
+
const { target, stop } = normalize(resolver(options, this, parent));
|
|
496
|
+
if (!target || target === current) {
|
|
497
|
+
break;
|
|
498
|
+
}
|
|
499
|
+
let next;
|
|
500
|
+
if (typeof target === "string") {
|
|
501
|
+
next = this.getModelClass(target);
|
|
502
|
+
if (!next) {
|
|
503
|
+
console.warn(`FlowEngine: resolveUse returned '${target}' but no model is registered under that name.`);
|
|
504
|
+
return void 0;
|
|
505
|
+
}
|
|
506
|
+
} else {
|
|
507
|
+
next = target;
|
|
508
|
+
}
|
|
509
|
+
current = next;
|
|
510
|
+
if (stop) {
|
|
511
|
+
break;
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
return current;
|
|
515
|
+
}
|
|
393
516
|
/**
|
|
394
517
|
* 尝试应用当前模型可用 flow 的 defaultParams(如果存在)到 model.stepParams。
|
|
395
518
|
* 仅对尚未存在的步骤参数进行填充,不覆盖已有值。
|
|
@@ -460,12 +583,13 @@ const _FlowEngine = class _FlowEngine {
|
|
|
460
583
|
* @returns {boolean} Returns true if successfully destroyed, false otherwise (e.g. instance does not exist)
|
|
461
584
|
*/
|
|
462
585
|
removeModel(uid) {
|
|
463
|
-
var _a;
|
|
586
|
+
var _a, _b, _c;
|
|
464
587
|
if (!this._modelInstances.has(uid)) {
|
|
465
588
|
console.warn(`FlowEngine: Model with UID '${uid}' does not exist.`);
|
|
466
589
|
return false;
|
|
467
590
|
}
|
|
468
591
|
const modelInstance = this._modelInstances.get(uid);
|
|
592
|
+
modelInstance.invalidateFlowCache(void 0, true);
|
|
469
593
|
modelInstance.clearForks();
|
|
470
594
|
if ((_a = modelInstance.parent) == null ? void 0 : _a.subModels) {
|
|
471
595
|
for (const subKey in modelInstance.parent.subModels) {
|
|
@@ -475,18 +599,65 @@ const _FlowEngine = class _FlowEngine {
|
|
|
475
599
|
if (index !== -1) {
|
|
476
600
|
subModelValue.splice(index, 1);
|
|
477
601
|
modelInstance.parent.emitter.emit("onSubModelRemoved", modelInstance);
|
|
602
|
+
(_b = this.emitter) == null ? void 0 : _b.emit("model:subModel:removed", {
|
|
603
|
+
parentUid: modelInstance.parent.uid,
|
|
604
|
+
parent: modelInstance.parent,
|
|
605
|
+
model: modelInstance
|
|
606
|
+
});
|
|
478
607
|
break;
|
|
479
608
|
}
|
|
480
609
|
} else if (subModelValue && subModelValue === modelInstance) {
|
|
481
610
|
delete modelInstance.parent.subModels[subKey];
|
|
482
611
|
modelInstance.parent.emitter.emit("onSubModelRemoved", modelInstance);
|
|
612
|
+
(_c = this.emitter) == null ? void 0 : _c.emit("model:subModel:removed", {
|
|
613
|
+
parentUid: modelInstance.parent.uid,
|
|
614
|
+
parent: modelInstance.parent,
|
|
615
|
+
model: modelInstance
|
|
616
|
+
});
|
|
483
617
|
break;
|
|
484
618
|
}
|
|
485
619
|
}
|
|
486
620
|
}
|
|
487
621
|
this._modelInstances.delete(uid);
|
|
622
|
+
void this.emitter.emitAsync("model:destroyed", {
|
|
623
|
+
uid,
|
|
624
|
+
model: modelInstance
|
|
625
|
+
});
|
|
488
626
|
return true;
|
|
489
627
|
}
|
|
628
|
+
/**
|
|
629
|
+
* Remove a local model instance and all its sub-models recursively.
|
|
630
|
+
* @param {string} uid UID of the model instance to destroy
|
|
631
|
+
* @returns {boolean} Returns true if successfully destroyed, false otherwise
|
|
632
|
+
*/
|
|
633
|
+
removeModelWithSubModels(uid) {
|
|
634
|
+
const model = this.getModel(uid);
|
|
635
|
+
if (!model) {
|
|
636
|
+
return false;
|
|
637
|
+
}
|
|
638
|
+
const collectDescendants = /* @__PURE__ */ __name((m, acc) => {
|
|
639
|
+
if (m.subModels) {
|
|
640
|
+
for (const key in m.subModels) {
|
|
641
|
+
const sub = m.subModels[key];
|
|
642
|
+
if (Array.isArray(sub)) {
|
|
643
|
+
[...sub].forEach((s) => collectDescendants(s, acc));
|
|
644
|
+
} else if (sub) {
|
|
645
|
+
collectDescendants(sub, acc);
|
|
646
|
+
}
|
|
647
|
+
}
|
|
648
|
+
}
|
|
649
|
+
acc.push(m);
|
|
650
|
+
}, "collectDescendants");
|
|
651
|
+
const allModels = [];
|
|
652
|
+
collectDescendants(model, allModels);
|
|
653
|
+
let success = true;
|
|
654
|
+
for (const m of allModels) {
|
|
655
|
+
if (!this.removeModel(m.uid)) {
|
|
656
|
+
success = false;
|
|
657
|
+
}
|
|
658
|
+
}
|
|
659
|
+
return success;
|
|
660
|
+
}
|
|
490
661
|
/**
|
|
491
662
|
* Check if the model repository is set.
|
|
492
663
|
* @returns {boolean} Returns true if set, false otherwise.
|
|
@@ -498,6 +669,91 @@ const _FlowEngine = class _FlowEngine {
|
|
|
498
669
|
}
|
|
499
670
|
return true;
|
|
500
671
|
}
|
|
672
|
+
/**
|
|
673
|
+
* Try to locate a model instance in previous engines (view stack) by uid.
|
|
674
|
+
* This is mainly used by view-scoped engines to reuse already-loaded model trees
|
|
675
|
+
* (e.g. models created from local JSON) without hitting the repository.
|
|
676
|
+
*/
|
|
677
|
+
findModelInPreviousEngines(uid) {
|
|
678
|
+
let eng = this.previousEngine;
|
|
679
|
+
while (eng) {
|
|
680
|
+
const found = eng.getModel(uid);
|
|
681
|
+
if (found) return found;
|
|
682
|
+
eng = eng.previousEngine;
|
|
683
|
+
}
|
|
684
|
+
return void 0;
|
|
685
|
+
}
|
|
686
|
+
/**
|
|
687
|
+
* Try to locate a sub-model in previous engines (view stack) by (parentId, subKey).
|
|
688
|
+
*/
|
|
689
|
+
findSubModelInPreviousEngines(parentId, subKey) {
|
|
690
|
+
var _a;
|
|
691
|
+
let eng = this.previousEngine;
|
|
692
|
+
while (eng) {
|
|
693
|
+
const parent = eng.getModel(parentId);
|
|
694
|
+
if (parent) {
|
|
695
|
+
const sub = (_a = parent.subModels) == null ? void 0 : _a[subKey];
|
|
696
|
+
if (sub) {
|
|
697
|
+
const model = Array.isArray(sub) ? sub[0] : sub;
|
|
698
|
+
if (model) return { parent, model };
|
|
699
|
+
}
|
|
700
|
+
}
|
|
701
|
+
eng = eng.previousEngine;
|
|
702
|
+
}
|
|
703
|
+
return void 0;
|
|
704
|
+
}
|
|
705
|
+
/**
|
|
706
|
+
* Hydrate a model into current engine from an already-existing model instance in previous engines.
|
|
707
|
+
* - Avoids repository requests when the model tree is already present in memory.
|
|
708
|
+
*/
|
|
709
|
+
hydrateModelFromPreviousEngines(options, extra) {
|
|
710
|
+
var _a;
|
|
711
|
+
const uid = options == null ? void 0 : options.uid;
|
|
712
|
+
const parentId = options == null ? void 0 : options.parentId;
|
|
713
|
+
const subKey = options == null ? void 0 : options.subKey;
|
|
714
|
+
if (uid && !this._modelInstances.has(uid)) {
|
|
715
|
+
const existing = this.findModelInPreviousEngines(uid);
|
|
716
|
+
if (existing == null ? void 0 : existing.context.flowSettingsEnabled) {
|
|
717
|
+
return null;
|
|
718
|
+
}
|
|
719
|
+
if (existing) {
|
|
720
|
+
const data = existing.serialize();
|
|
721
|
+
return this.createModel(data, extra);
|
|
722
|
+
}
|
|
723
|
+
}
|
|
724
|
+
if (parentId && subKey) {
|
|
725
|
+
const found = this.findSubModelInPreviousEngines(parentId, subKey);
|
|
726
|
+
if (!found || found.parent.context.flowSettingsEnabled) return null;
|
|
727
|
+
const { parent: parentFromPrev, model: modelFromPrev } = found;
|
|
728
|
+
let localParent = this.getModel(parentId);
|
|
729
|
+
if (!localParent) {
|
|
730
|
+
const parentData = parentFromPrev.serialize();
|
|
731
|
+
delete parentData.subModels;
|
|
732
|
+
localParent = this.createModel(parentData, extra);
|
|
733
|
+
}
|
|
734
|
+
const modelData = modelFromPrev.serialize();
|
|
735
|
+
const localModel = this.createModel(modelData, extra);
|
|
736
|
+
const mounted = (_a = localParent.subModels) == null ? void 0 : _a[subKey];
|
|
737
|
+
if (Array.isArray(mounted)) {
|
|
738
|
+
const exists = mounted.some((m) => (m == null ? void 0 : m.uid) === (localModel == null ? void 0 : localModel.uid));
|
|
739
|
+
if (!exists) {
|
|
740
|
+
localParent.addSubModel(subKey, localModel);
|
|
741
|
+
}
|
|
742
|
+
} else if (mounted instanceof import_models.FlowModel) {
|
|
743
|
+
if (mounted.uid !== (localModel == null ? void 0 : localModel.uid)) {
|
|
744
|
+
localParent.setSubModel(subKey, localModel);
|
|
745
|
+
}
|
|
746
|
+
} else {
|
|
747
|
+
if ((localModel == null ? void 0 : localModel.subType) === "array") {
|
|
748
|
+
localParent.addSubModel(subKey, localModel);
|
|
749
|
+
} else {
|
|
750
|
+
localParent.setSubModel(subKey, localModel);
|
|
751
|
+
}
|
|
752
|
+
}
|
|
753
|
+
return localModel;
|
|
754
|
+
}
|
|
755
|
+
return null;
|
|
756
|
+
}
|
|
501
757
|
/**
|
|
502
758
|
* Load a model instance (prefers local, falls back to repository).
|
|
503
759
|
* @template T FlowModel subclass type, defaults to FlowModel.
|
|
@@ -506,12 +762,26 @@ const _FlowEngine = class _FlowEngine {
|
|
|
506
762
|
*/
|
|
507
763
|
async loadModel(options) {
|
|
508
764
|
if (!this.ensureModelRepository()) return;
|
|
509
|
-
const
|
|
510
|
-
if (
|
|
511
|
-
|
|
765
|
+
const refresh = !!(options == null ? void 0 : options.refresh);
|
|
766
|
+
if (!refresh) {
|
|
767
|
+
const model = this.findModelByParentId(options.parentId, options.subKey);
|
|
768
|
+
if (model) {
|
|
769
|
+
return model;
|
|
770
|
+
}
|
|
771
|
+
const hydrated = this.hydrateModelFromPreviousEngines(options);
|
|
772
|
+
if (hydrated) {
|
|
773
|
+
return hydrated;
|
|
774
|
+
}
|
|
512
775
|
}
|
|
513
776
|
const data = await this._modelRepository.findOne(options);
|
|
514
|
-
|
|
777
|
+
if (!(data == null ? void 0 : data.uid)) return null;
|
|
778
|
+
if (refresh) {
|
|
779
|
+
const existing = this.getModel(data.uid);
|
|
780
|
+
if (existing) {
|
|
781
|
+
this.removeModelWithSubModels(existing.uid);
|
|
782
|
+
}
|
|
783
|
+
}
|
|
784
|
+
return this.createModel(data);
|
|
515
785
|
}
|
|
516
786
|
/**
|
|
517
787
|
* Find a sub-model by parent model ID and subKey.
|
|
@@ -549,6 +819,10 @@ const _FlowEngine = class _FlowEngine {
|
|
|
549
819
|
if (m) {
|
|
550
820
|
return m;
|
|
551
821
|
}
|
|
822
|
+
const hydrated = this.hydrateModelFromPreviousEngines(options, extra);
|
|
823
|
+
if (hydrated) {
|
|
824
|
+
return hydrated;
|
|
825
|
+
}
|
|
552
826
|
const data = await this._modelRepository.findOne(options);
|
|
553
827
|
let model = null;
|
|
554
828
|
if (data == null ? void 0 : data.uid) {
|
|
@@ -627,7 +901,21 @@ const _FlowEngine = class _FlowEngine {
|
|
|
627
901
|
if (this.ensureModelRepository()) {
|
|
628
902
|
await this._modelRepository.destroy(uid);
|
|
629
903
|
}
|
|
630
|
-
|
|
904
|
+
const modelInstance = this._modelInstances.get(uid);
|
|
905
|
+
const parent = modelInstance == null ? void 0 : modelInstance.parent;
|
|
906
|
+
const result = this.removeModel(uid);
|
|
907
|
+
parent && parent.emitter.emit("onSubModelDestroyed", modelInstance);
|
|
908
|
+
return result;
|
|
909
|
+
}
|
|
910
|
+
/**
|
|
911
|
+
* Duplicate a model tree via repository API.
|
|
912
|
+
* Returns the duplicated model JSON (root with subModels) or null if not available.
|
|
913
|
+
* @param {string} uid UID of the model to duplicate
|
|
914
|
+
* @returns {Promise<any | null>} Duplicated model JSON or null
|
|
915
|
+
*/
|
|
916
|
+
async duplicateModel(uid) {
|
|
917
|
+
if (!this.ensureModelRepository()) return null;
|
|
918
|
+
return this._modelRepository.duplicate(uid);
|
|
631
919
|
}
|
|
632
920
|
/**
|
|
633
921
|
* Replace a model instance with a new instance of a class.
|
|
@@ -640,7 +928,7 @@ const _FlowEngine = class _FlowEngine {
|
|
|
640
928
|
* @returns {Promise<T | null>} Newly created model instance
|
|
641
929
|
*/
|
|
642
930
|
async replaceModel(uid, optionsOrFn) {
|
|
643
|
-
var _a;
|
|
931
|
+
var _a, _b;
|
|
644
932
|
const oldModel = this.getModel(uid);
|
|
645
933
|
if (!oldModel) {
|
|
646
934
|
console.warn(`FlowEngine: Cannot replace model. Model with UID '${uid}' not found.`);
|
|
@@ -674,9 +962,15 @@ const _FlowEngine = class _FlowEngine {
|
|
|
674
962
|
}
|
|
675
963
|
if (currentParent) {
|
|
676
964
|
currentParent.emitter.setPaused(false);
|
|
677
|
-
currentParent.parent.
|
|
965
|
+
currentParent.parent.invalidateFlowCache("beforeRender", true);
|
|
678
966
|
(_a = currentParent.parent) == null ? void 0 : _a.rerender();
|
|
679
967
|
currentParent.emitter.emit("onSubModelReplaced", { oldModel, newModel });
|
|
968
|
+
(_b = this.emitter) == null ? void 0 : _b.emit("model:subModel:replaced", {
|
|
969
|
+
parentUid: currentParent.uid,
|
|
970
|
+
parent: currentParent,
|
|
971
|
+
oldModel,
|
|
972
|
+
newModel
|
|
973
|
+
});
|
|
680
974
|
}
|
|
681
975
|
await newModel.save();
|
|
682
976
|
return newModel;
|
|
@@ -688,6 +982,7 @@ const _FlowEngine = class _FlowEngine {
|
|
|
688
982
|
* @returns {Promise<void>} No return value
|
|
689
983
|
*/
|
|
690
984
|
async moveModel(sourceId, targetId, options) {
|
|
985
|
+
var _a, _b;
|
|
691
986
|
const sourceModel = this.getModel(sourceId);
|
|
692
987
|
const targetModel = this.getModel(targetId);
|
|
693
988
|
if (!sourceModel || !targetModel) {
|
|
@@ -704,7 +999,8 @@ const _FlowEngine = class _FlowEngine {
|
|
|
704
999
|
console.error("FlowModel.moveTo: Parent subModels must be an array to perform move operation.");
|
|
705
1000
|
return false;
|
|
706
1001
|
}
|
|
707
|
-
const
|
|
1002
|
+
const subModelsCopy = [...subModels];
|
|
1003
|
+
const findIndex = /* @__PURE__ */ __name((model) => subModelsCopy.findIndex((item) => item.uid === model.uid), "findIndex");
|
|
708
1004
|
const currentIndex = findIndex(sourceModel2);
|
|
709
1005
|
const targetIndex = findIndex(targetModel2);
|
|
710
1006
|
if (currentIndex === -1 || targetIndex === -1) {
|
|
@@ -715,11 +1011,12 @@ const _FlowEngine = class _FlowEngine {
|
|
|
715
1011
|
console.warn("FlowModel.moveTo: Current model is already at the target position. No action taken.");
|
|
716
1012
|
return false;
|
|
717
1013
|
}
|
|
718
|
-
const [movedModel] =
|
|
719
|
-
|
|
720
|
-
|
|
1014
|
+
const [movedModel] = subModelsCopy.splice(currentIndex, 1);
|
|
1015
|
+
subModelsCopy.splice(targetIndex, 0, movedModel);
|
|
1016
|
+
subModelsCopy.forEach((model, index) => {
|
|
721
1017
|
model.sortIndex = index;
|
|
722
1018
|
});
|
|
1019
|
+
subModels.splice(0, subModels.length, ...subModelsCopy);
|
|
723
1020
|
return true;
|
|
724
1021
|
}, "move");
|
|
725
1022
|
move(sourceModel, targetModel);
|
|
@@ -728,6 +1025,12 @@ const _FlowEngine = class _FlowEngine {
|
|
|
728
1025
|
await this._modelRepository.move(sourceId, targetId, position);
|
|
729
1026
|
}
|
|
730
1027
|
sourceModel.parent.emitter.emit("onSubModelMoved", { source: sourceModel, target: targetModel });
|
|
1028
|
+
(_b = this.emitter) == null ? void 0 : _b.emit("model:subModel:moved", {
|
|
1029
|
+
parentUid: (_a = sourceModel.parent) == null ? void 0 : _a.uid,
|
|
1030
|
+
parent: sourceModel.parent,
|
|
1031
|
+
source: sourceModel,
|
|
1032
|
+
target: targetModel
|
|
1033
|
+
});
|
|
731
1034
|
}
|
|
732
1035
|
/**
|
|
733
1036
|
* Filter model classes by parent class (supports multi-level inheritance).
|
package/lib/flowSettings.d.ts
CHANGED
|
@@ -25,8 +25,8 @@ export interface FlowSettingsOpenOptions {
|
|
|
25
25
|
/** 指定打开的步骤 key(配合 flowKey 使用) */
|
|
26
26
|
stepKey?: string;
|
|
27
27
|
/** 弹窗展现形式(drawer 或 dialog) */
|
|
28
|
-
uiMode?: 'dialog' | 'drawer' | 'embed' | {
|
|
29
|
-
type?: 'dialog' | 'drawer' | 'embed';
|
|
28
|
+
uiMode?: 'select' | 'switch' | 'dialog' | 'drawer' | 'embed' | {
|
|
29
|
+
type?: 'dialog' | 'drawer' | 'embed' | 'select' | 'switch';
|
|
30
30
|
props?: {
|
|
31
31
|
title?: string;
|
|
32
32
|
width?: number;
|
|
@@ -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 的可配置步骤)
|