@nocobase/flow-engine 2.0.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +661 -0
- package/README.md +30 -0
- package/lib/ContextPathProxy.d.ts +17 -0
- package/lib/ContextPathProxy.js +65 -0
- package/lib/ElementProxy.d.ts +17 -0
- package/lib/ElementProxy.js +93 -0
- package/lib/FlowContextProvider.d.ts +24 -0
- package/lib/FlowContextProvider.js +82 -0
- package/lib/FlowDefinition.d.ts +423 -0
- package/lib/FlowDefinition.js +257 -0
- package/lib/JSRunner.d.ts +32 -0
- package/lib/JSRunner.js +95 -0
- package/lib/ReactView.d.ts +20 -0
- package/lib/ReactView.js +120 -0
- package/lib/ViewScopedFlowEngine.d.ts +23 -0
- package/lib/ViewScopedFlowEngine.js +81 -0
- package/lib/acl/Acl.d.ts +31 -0
- package/lib/acl/Acl.js +115 -0
- package/lib/action-registry/BaseActionRegistry.d.ts +23 -0
- package/lib/action-registry/BaseActionRegistry.js +57 -0
- package/lib/action-registry/EngineActionRegistry.d.ts +20 -0
- package/lib/action-registry/EngineActionRegistry.js +47 -0
- package/lib/action-registry/ModelActionRegistry.d.ts +34 -0
- package/lib/action-registry/ModelActionRegistry.js +79 -0
- package/lib/components/DynamicFlowsEditor.d.ts +17 -0
- package/lib/components/DynamicFlowsEditor.js +49 -0
- package/lib/components/FieldModelRenderer.d.ts +10 -0
- package/lib/components/FieldModelRenderer.js +94 -0
- package/lib/components/FlowContextSelector.d.ts +11 -0
- package/lib/components/FlowContextSelector.js +221 -0
- package/lib/components/FlowErrorFallback.d.ts +25 -0
- package/lib/components/FlowErrorFallback.js +264 -0
- package/lib/components/FlowModelRenderer.d.ts +64 -0
- package/lib/components/FlowModelRenderer.js +254 -0
- package/lib/components/FormItem.d.ts +18 -0
- package/lib/components/FormItem.js +147 -0
- package/lib/components/common/FlowSettingsButton.d.ts +11 -0
- package/lib/components/common/FlowSettingsButton.js +66 -0
- package/lib/components/common/index.d.ts +9 -0
- package/lib/components/common/index.js +30 -0
- package/lib/components/common/withFlowDesignMode.d.ts +26 -0
- package/lib/components/common/withFlowDesignMode.js +61 -0
- package/lib/components/dnd/getMousePositionOnElement.d.ts +50 -0
- package/lib/components/dnd/getMousePositionOnElement.js +95 -0
- package/lib/components/dnd/index.d.ts +24 -0
- package/lib/components/dnd/index.js +164 -0
- package/lib/components/dnd/moveBlock.d.ts +33 -0
- package/lib/components/dnd/moveBlock.js +302 -0
- package/lib/components/index.d.ts +18 -0
- package/lib/components/index.js +48 -0
- package/lib/components/settings/independents/dropdown/FlowsDropdownButton.d.ts +46 -0
- package/lib/components/settings/independents/dropdown/FlowsDropdownButton.js +225 -0
- package/lib/components/settings/independents/dropdown/index.d.ts +9 -0
- package/lib/components/settings/independents/dropdown/index.js +30 -0
- package/lib/components/settings/independents/index.d.ts +1 -0
- package/lib/components/settings/independents/index.js +30 -0
- package/lib/components/settings/index.d.ts +10 -0
- package/lib/components/settings/index.js +32 -0
- package/lib/components/settings/wrappers/contextual/DefaultSettingsIcon.d.ts +24 -0
- package/lib/components/settings/wrappers/contextual/DefaultSettingsIcon.js +501 -0
- package/lib/components/settings/wrappers/contextual/FlowsContextMenu.d.ts +45 -0
- package/lib/components/settings/wrappers/contextual/FlowsContextMenu.js +231 -0
- package/lib/components/settings/wrappers/contextual/FlowsFloatContextMenu.d.ts +111 -0
- package/lib/components/settings/wrappers/contextual/FlowsFloatContextMenu.js +484 -0
- package/lib/components/settings/wrappers/contextual/StepRequiredSettingsDialog.d.ts +26 -0
- package/lib/components/settings/wrappers/contextual/StepRequiredSettingsDialog.js +342 -0
- package/lib/components/settings/wrappers/contextual/StepSettings.d.ts +23 -0
- package/lib/components/settings/wrappers/contextual/StepSettings.js +110 -0
- package/lib/components/settings/wrappers/contextual/StepSettingsDialog.d.ts +20 -0
- package/lib/components/settings/wrappers/contextual/StepSettingsDialog.js +206 -0
- package/lib/components/settings/wrappers/contextual/StepSettingsDrawer.d.ts +20 -0
- package/lib/components/settings/wrappers/contextual/StepSettingsDrawer.js +47 -0
- package/lib/components/settings/wrappers/contextual/index.d.ts +14 -0
- package/lib/components/settings/wrappers/contextual/index.js +40 -0
- package/lib/components/settings/wrappers/embedded/FlowSettings.d.ts +33 -0
- package/lib/components/settings/wrappers/embedded/FlowSettings.js +207 -0
- package/lib/components/settings/wrappers/embedded/FlowsSettings.d.ts +41 -0
- package/lib/components/settings/wrappers/embedded/FlowsSettings.js +84 -0
- package/lib/components/settings/wrappers/embedded/FlowsSettingsContent.d.ts +16 -0
- package/lib/components/settings/wrappers/embedded/FlowsSettingsContent.js +88 -0
- package/lib/components/settings/wrappers/embedded/index.d.ts +10 -0
- package/lib/components/settings/wrappers/embedded/index.js +32 -0
- package/lib/components/settings/wrappers/index.d.ts +2 -0
- package/lib/components/settings/wrappers/index.js +32 -0
- package/lib/components/subModel/AddSubModelButton.d.ts +62 -0
- package/lib/components/subModel/AddSubModelButton.js +415 -0
- package/lib/components/subModel/LazyDropdown.d.ts +55 -0
- package/lib/components/subModel/LazyDropdown.js +524 -0
- package/lib/components/subModel/index.d.ts +10 -0
- package/lib/components/subModel/index.js +32 -0
- package/lib/components/subModel/utils.d.ts +34 -0
- package/lib/components/subModel/utils.js +287 -0
- package/lib/components/variables/InlineVariableTag.d.ts +21 -0
- package/lib/components/variables/InlineVariableTag.js +123 -0
- package/lib/components/variables/SlateVariableEditor.d.ts +46 -0
- package/lib/components/variables/SlateVariableEditor.js +302 -0
- package/lib/components/variables/VariableInput.d.ts +11 -0
- package/lib/components/variables/VariableInput.js +322 -0
- package/lib/components/variables/VariableTag.d.ts +11 -0
- package/lib/components/variables/VariableTag.js +148 -0
- package/lib/components/variables/VariableTrigger.d.ts +20 -0
- package/lib/components/variables/VariableTrigger.js +136 -0
- package/lib/components/variables/index.d.ts +15 -0
- package/lib/components/variables/index.js +53 -0
- package/lib/components/variables/types.d.ts +93 -0
- package/lib/components/variables/types.js +24 -0
- package/lib/components/variables/useResolvedMetaTree.d.ts +19 -0
- package/lib/components/variables/useResolvedMetaTree.js +91 -0
- package/lib/components/variables/utils.d.ts +22 -0
- package/lib/components/variables/utils.js +177 -0
- package/lib/data-source/index.d.ts +180 -0
- package/lib/data-source/index.js +733 -0
- package/lib/data-source/jioToJoiSchema.d.ts +19 -0
- package/lib/data-source/jioToJoiSchema.js +114 -0
- package/lib/decorators/index.d.ts +9 -0
- package/lib/decorators/index.js +36 -0
- package/lib/decorators/largeField.d.ts +9 -0
- package/lib/decorators/largeField.js +42 -0
- package/lib/emitter.d.ts +16 -0
- package/lib/emitter.js +58 -0
- package/lib/event-registry/BaseEventRegistry.d.ts +22 -0
- package/lib/event-registry/BaseEventRegistry.js +57 -0
- package/lib/event-registry/EngineEventRegistry.d.ts +19 -0
- package/lib/event-registry/EngineEventRegistry.js +47 -0
- package/lib/event-registry/ModelEventRegistry.d.ts +33 -0
- package/lib/event-registry/ModelEventRegistry.js +79 -0
- package/lib/executor/FlowExecutor.d.ts +26 -0
- package/lib/executor/FlowExecutor.js +262 -0
- package/lib/flow-registry/BaseFlowRegistry.d.ts +46 -0
- package/lib/flow-registry/BaseFlowRegistry.js +86 -0
- package/lib/flow-registry/GlobalFlowRegistry.d.ts +22 -0
- package/lib/flow-registry/GlobalFlowRegistry.js +95 -0
- package/lib/flow-registry/InstanceFlowRegistry.d.ts +21 -0
- package/lib/flow-registry/InstanceFlowRegistry.js +59 -0
- package/lib/flow-registry/index.d.ts +11 -0
- package/lib/flow-registry/index.js +34 -0
- package/lib/flowContext.d.ts +215 -0
- package/lib/flowContext.js +1266 -0
- package/lib/flowEngine.d.ts +340 -0
- package/lib/flowEngine.js +781 -0
- package/lib/flowI18n.d.ts +46 -0
- package/lib/flowI18n.js +117 -0
- package/lib/flowSettings.d.ts +266 -0
- package/lib/flowSettings.js +850 -0
- package/lib/hooks/index.d.ts +14 -0
- package/lib/hooks/index.js +40 -0
- package/lib/hooks/useApplyAutoFlows.d.ts +21 -0
- package/lib/hooks/useApplyAutoFlows.js +62 -0
- package/lib/hooks/useFlowModel.d.ts +29 -0
- package/lib/hooks/useFlowModel.js +72 -0
- package/lib/hooks/useFlowModelById.d.ts +11 -0
- package/lib/hooks/useFlowModelById.js +61 -0
- package/lib/hooks/useFlowSettingsContext.d.ts +20 -0
- package/lib/hooks/useFlowSettingsContext.js +61 -0
- package/lib/hooks/useFlowStep.d.ts +17 -0
- package/lib/hooks/useFlowStep.js +56 -0
- package/lib/hooks/useNiceDropdownMaxHeight.d.ts +13 -0
- package/lib/hooks/useNiceDropdownMaxHeight.js +52 -0
- package/lib/index.d.ts +27 -0
- package/lib/index.js +73 -0
- package/lib/locale/en-US.json +61 -0
- package/lib/locale/index.d.ts +141 -0
- package/lib/locale/index.js +70 -0
- package/lib/locale/zh-CN.json +61 -0
- package/lib/models/CollectionFieldModel.d.ts +50 -0
- package/lib/models/CollectionFieldModel.js +242 -0
- package/lib/models/DisplayItemModel.d.ts +12 -0
- package/lib/models/DisplayItemModel.js +41 -0
- package/lib/models/EditableItemModel.d.ts +12 -0
- package/lib/models/EditableItemModel.js +41 -0
- package/lib/models/FilterableItemModel.d.ts +12 -0
- package/lib/models/FilterableItemModel.js +41 -0
- package/lib/models/flowModel.d.ts +344 -0
- package/lib/models/flowModel.js +1133 -0
- package/lib/models/forkFlowModel.d.ts +83 -0
- package/lib/models/forkFlowModel.js +257 -0
- package/lib/models/index.d.ts +14 -0
- package/lib/models/index.js +40 -0
- package/lib/provider.d.ts +22 -0
- package/lib/provider.js +114 -0
- package/lib/resources/apiResource.d.ts +34 -0
- package/lib/resources/apiResource.js +153 -0
- package/lib/resources/baseRecordResource.d.ts +61 -0
- package/lib/resources/baseRecordResource.js +264 -0
- package/lib/resources/filterItem.d.ts +33 -0
- package/lib/resources/filterItem.js +93 -0
- package/lib/resources/flowResource.d.ts +45 -0
- package/lib/resources/flowResource.js +146 -0
- package/lib/resources/index.d.ts +15 -0
- package/lib/resources/index.js +42 -0
- package/lib/resources/multiRecordResource.d.ts +53 -0
- package/lib/resources/multiRecordResource.js +230 -0
- package/lib/resources/singleRecordResource.d.ts +23 -0
- package/lib/resources/singleRecordResource.js +111 -0
- package/lib/resources/sqlResource.d.ts +73 -0
- package/lib/resources/sqlResource.js +294 -0
- package/lib/runjs-context/contexts/FlowRunJSContext.d.ts +38 -0
- package/lib/runjs-context/contexts/FlowRunJSContext.js +217 -0
- package/lib/runjs-context/contexts/FormJSFieldItemRunJSContext.d.ts +16 -0
- package/lib/runjs-context/contexts/FormJSFieldItemRunJSContext.js +66 -0
- package/lib/runjs-context/contexts/JSBlockRunJSContext.d.ts +16 -0
- package/lib/runjs-context/contexts/JSBlockRunJSContext.js +78 -0
- package/lib/runjs-context/contexts/JSCollectionActionRunJSContext.d.ts +12 -0
- package/lib/runjs-context/contexts/JSCollectionActionRunJSContext.js +59 -0
- package/lib/runjs-context/contexts/JSFieldRunJSContext.d.ts +16 -0
- package/lib/runjs-context/contexts/JSFieldRunJSContext.js +70 -0
- package/lib/runjs-context/contexts/JSItemRunJSContext.d.ts +16 -0
- package/lib/runjs-context/contexts/JSItemRunJSContext.js +66 -0
- package/lib/runjs-context/contexts/JSRecordActionRunJSContext.d.ts +12 -0
- package/lib/runjs-context/contexts/JSRecordActionRunJSContext.js +61 -0
- package/lib/runjs-context/contexts/LinkageRunJSContext.d.ts +12 -0
- package/lib/runjs-context/contexts/LinkageRunJSContext.js +62 -0
- package/lib/runjs-context/helpers.d.ts +17 -0
- package/lib/runjs-context/helpers.js +79 -0
- package/lib/runjs-context/index.d.ts +19 -0
- package/lib/runjs-context/index.js +57 -0
- package/lib/runjs-context/registry.d.ts +17 -0
- package/lib/runjs-context/registry.js +93 -0
- package/lib/runjs-context/snippets/global/api-request-get.snippet.d.ts +16 -0
- package/lib/runjs-context/snippets/global/api-request-get.snippet.js +42 -0
- package/lib/runjs-context/snippets/global/api-request-post.snippet.d.ts +16 -0
- package/lib/runjs-context/snippets/global/api-request-post.snippet.js +42 -0
- package/lib/runjs-context/snippets/global/console-log-ctx.snippet.d.ts +16 -0
- package/lib/runjs-context/snippets/global/console-log-ctx.snippet.js +41 -0
- package/lib/runjs-context/snippets/global/copy-record-json.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/global/copy-record-json.snippet.js +42 -0
- package/lib/runjs-context/snippets/global/copy-to-clipboard.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/global/copy-to-clipboard.snippet.js +42 -0
- package/lib/runjs-context/snippets/global/log-json-record.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/global/log-json-record.snippet.js +42 -0
- package/lib/runjs-context/snippets/global/message-error.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/global/message-error.snippet.js +41 -0
- package/lib/runjs-context/snippets/global/message-success.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/global/message-success.snippet.js +41 -0
- package/lib/runjs-context/snippets/global/notification-open.snippet.d.ts +16 -0
- package/lib/runjs-context/snippets/global/notification-open.snippet.js +43 -0
- package/lib/runjs-context/snippets/global/open-view-dialog.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/global/open-view-dialog.snippet.js +47 -0
- package/lib/runjs-context/snippets/global/open-view-drawer.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/global/open-view-drawer.snippet.js +47 -0
- package/lib/runjs-context/snippets/global/requireAsync.snippet.d.ts +16 -0
- package/lib/runjs-context/snippets/global/requireAsync.snippet.js +46 -0
- package/lib/runjs-context/snippets/global/sleep.snippet.d.ts +16 -0
- package/lib/runjs-context/snippets/global/sleep.snippet.js +43 -0
- package/lib/runjs-context/snippets/global/try-catch-async.snippet.d.ts +16 -0
- package/lib/runjs-context/snippets/global/try-catch-async.snippet.js +44 -0
- package/lib/runjs-context/snippets/global/view-navigation-push.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/global/view-navigation-push.snippet.js +44 -0
- package/lib/runjs-context/snippets/global/window-open.snippet.d.ts +16 -0
- package/lib/runjs-context/snippets/global/window-open.snippet.js +41 -0
- package/lib/runjs-context/snippets/index.d.ts +11 -0
- package/lib/runjs-context/snippets/index.js +94 -0
- package/lib/runjs-context/snippets/libs/echarts-init.snippet.d.ts +15 -0
- package/lib/runjs-context/snippets/libs/echarts-init.snippet.js +46 -0
- package/lib/runjs-context/snippets/scene/actions/collection-selected-count.snippet.d.ts +15 -0
- package/lib/runjs-context/snippets/scene/actions/collection-selected-count.snippet.js +44 -0
- package/lib/runjs-context/snippets/scene/actions/iterate-selected-rows.snippet.d.ts +15 -0
- package/lib/runjs-context/snippets/scene/actions/iterate-selected-rows.snippet.js +43 -0
- package/lib/runjs-context/snippets/scene/actions/record-id-message.snippet.d.ts +15 -0
- package/lib/runjs-context/snippets/scene/actions/record-id-message.snippet.js +43 -0
- package/lib/runjs-context/snippets/scene/actions/run-action-basic.snippet.d.ts +15 -0
- package/lib/runjs-context/snippets/scene/actions/run-action-basic.snippet.js +40 -0
- package/lib/runjs-context/snippets/scene/jsblock/add-event-listener.snippet.d.ts +15 -0
- package/lib/runjs-context/snippets/scene/jsblock/add-event-listener.snippet.js +46 -0
- package/lib/runjs-context/snippets/scene/jsblock/append-style.snippet.d.ts +15 -0
- package/lib/runjs-context/snippets/scene/jsblock/append-style.snippet.js +42 -0
- package/lib/runjs-context/snippets/scene/jsblock/jsx-mount.snippet.d.ts +15 -0
- package/lib/runjs-context/snippets/scene/jsblock/jsx-mount.snippet.js +46 -0
- package/lib/runjs-context/snippets/scene/jsblock/jsx-unmount.snippet.d.ts +15 -0
- package/lib/runjs-context/snippets/scene/jsblock/jsx-unmount.snippet.js +41 -0
- package/lib/runjs-context/snippets/scene/jsblock/render-basic.snippet.d.ts +15 -0
- package/lib/runjs-context/snippets/scene/jsblock/render-basic.snippet.js +41 -0
- package/lib/runjs-context/snippets/scene/jsblock/render-button-handler.snippet.d.ts +15 -0
- package/lib/runjs-context/snippets/scene/jsblock/render-button-handler.snippet.js +46 -0
- package/lib/runjs-context/snippets/scene/jsblock/render-card.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/jsblock/render-card.snippet.js +45 -0
- package/lib/runjs-context/snippets/scene/jsblock/render-react.snippet.d.ts +15 -0
- package/lib/runjs-context/snippets/scene/jsblock/render-react.snippet.js +56 -0
- package/lib/runjs-context/snippets/scene/jsfield/color-by-value.snippet.d.ts +15 -0
- package/lib/runjs-context/snippets/scene/jsfield/color-by-value.snippet.js +42 -0
- package/lib/runjs-context/snippets/scene/jsfield/format-number.snippet.d.ts +15 -0
- package/lib/runjs-context/snippets/scene/jsfield/format-number.snippet.js +41 -0
- package/lib/runjs-context/snippets/scene/jsfield/innerHTML-value.snippet.d.ts +15 -0
- package/lib/runjs-context/snippets/scene/jsfield/innerHTML-value.snippet.js +40 -0
- package/lib/runjs-context/snippets/scene/jsitem/render-basic.snippet.d.ts +15 -0
- package/lib/runjs-context/snippets/scene/jsitem/render-basic.snippet.js +44 -0
- package/lib/runjs-context/snippets/scene/linkage/set-disabled.snippet.d.ts +15 -0
- package/lib/runjs-context/snippets/scene/linkage/set-disabled.snippet.js +60 -0
- package/lib/runjs-context/snippets/scene/linkage/set-field-value.snippet.d.ts +15 -0
- package/lib/runjs-context/snippets/scene/linkage/set-field-value.snippet.js +59 -0
- package/lib/runjs-context/snippets/scene/linkage/set-required.snippet.d.ts +15 -0
- package/lib/runjs-context/snippets/scene/linkage/set-required.snippet.js +60 -0
- package/lib/runjs-context/snippets/scene/linkage/toggle-visible.snippet.d.ts +15 -0
- package/lib/runjs-context/snippets/scene/linkage/toggle-visible.snippet.js +60 -0
- package/lib/runjs-context/snippets/types.d.ts +16 -0
- package/lib/runjs-context/snippets/types.js +24 -0
- package/lib/types.d.ts +398 -0
- package/lib/types.js +43 -0
- package/lib/utils/autoFlowError.d.ts +16 -0
- package/lib/utils/autoFlowError.js +53 -0
- package/lib/utils/constants.d.ts +29 -0
- package/lib/utils/constants.js +77 -0
- package/lib/utils/context.d.ts +40 -0
- package/lib/utils/context.js +63 -0
- package/lib/utils/createCollectionContextMeta.d.ts +11 -0
- package/lib/utils/createCollectionContextMeta.js +117 -0
- package/lib/utils/exceptions.d.ts +22 -0
- package/lib/utils/exceptions.js +62 -0
- package/lib/utils/flow-definitions.d.ts +11 -0
- package/lib/utils/flow-definitions.js +40 -0
- package/lib/utils/index.d.ts +22 -0
- package/lib/utils/index.js +117 -0
- package/lib/utils/inheritance.d.ts +16 -0
- package/lib/utils/inheritance.js +53 -0
- package/lib/utils/params-resolvers.d.ts +51 -0
- package/lib/utils/params-resolvers.js +309 -0
- package/lib/utils/parsePathnameToViewParams.d.ts +34 -0
- package/lib/utils/parsePathnameToViewParams.js +84 -0
- package/lib/utils/safeGlobals.d.ts +16 -0
- package/lib/utils/safeGlobals.js +179 -0
- package/lib/utils/schema-utils.d.ts +40 -0
- package/lib/utils/schema-utils.js +161 -0
- package/lib/utils/serverContextParams.d.ts +28 -0
- package/lib/utils/serverContextParams.js +106 -0
- package/lib/utils/setupRuntimeContextSteps.d.ts +19 -0
- package/lib/utils/setupRuntimeContextSteps.js +88 -0
- package/lib/utils/translation.d.ts +18 -0
- package/lib/utils/translation.js +58 -0
- package/lib/utils/variablesParams.d.ts +51 -0
- package/lib/utils/variablesParams.js +150 -0
- package/lib/views/DialogComponent.d.ts +22 -0
- package/lib/views/DialogComponent.js +98 -0
- package/lib/views/DrawerComponent.d.ts +11 -0
- package/lib/views/DrawerComponent.js +101 -0
- package/lib/views/FlowView.d.ts +76 -0
- package/lib/views/FlowView.js +81 -0
- package/lib/views/PageComponent.d.ts +10 -0
- package/lib/views/PageComponent.js +167 -0
- package/lib/views/ViewNavigation.d.ts +45 -0
- package/lib/views/ViewNavigation.js +97 -0
- package/lib/views/createViewMeta.d.ts +16 -0
- package/lib/views/createViewMeta.js +171 -0
- package/lib/views/index.d.ts +13 -0
- package/lib/views/index.js +48 -0
- package/lib/views/useDialog.d.ts +32 -0
- package/lib/views/useDialog.js +199 -0
- package/lib/views/useDrawer.d.ts +33 -0
- package/lib/views/useDrawer.js +206 -0
- package/lib/views/usePage.d.ts +32 -0
- package/lib/views/usePage.js +193 -0
- package/lib/views/usePatchElement.d.ts +10 -0
- package/lib/views/usePatchElement.js +54 -0
- package/lib/views/usePopover.d.ts +17 -0
- package/lib/views/usePopover.js +159 -0
- package/package.json +37 -0
- package/src/ContextPathProxy.ts +45 -0
- package/src/ElementProxy.ts +69 -0
- package/src/FlowContextProvider.tsx +40 -0
- package/src/FlowDefinition.ts +275 -0
- package/src/JSRunner.ts +84 -0
- package/src/ReactView.tsx +104 -0
- package/src/ViewScopedFlowEngine.ts +75 -0
- package/src/__tests__/ElementProxy.test.ts +51 -0
- package/src/__tests__/JSRunner.test.ts +92 -0
- package/src/__tests__/ReactView.test.tsx +63 -0
- package/src/__tests__/context-path-proxy.test.ts +35 -0
- package/src/__tests__/flow-engine.test.ts +189 -0
- package/src/__tests__/flowContext.test.ts +2012 -0
- package/src/__tests__/flowEngine.saveModel.test.ts +171 -0
- package/src/__tests__/flowI18n.test.ts +28 -0
- package/src/__tests__/flowModel.getFlows.test.ts +61 -0
- package/src/__tests__/flowModel.openView.navigation.test.ts +78 -0
- package/src/__tests__/flowRuntimeContext.test.ts +187 -0
- package/src/__tests__/flowSettings.open.test.tsx +1920 -0
- package/src/__tests__/flowSettings.test.ts +566 -0
- package/src/__tests__/globalFlowRegistry.test.ts +77 -0
- package/src/__tests__/isFieldInterfaceMatch.test.ts +51 -0
- package/src/__tests__/metaTreeNodeCache.test.ts +234 -0
- package/src/__tests__/path-aggregation.test.ts +85 -0
- package/src/__tests__/provider.test.tsx +28 -0
- package/src/__tests__/renderHiddenInConfig.test.tsx +91 -0
- package/src/__tests__/runjsContext.test.ts +60 -0
- package/src/__tests__/viewScopedFlowEngine.test.ts +212 -0
- package/src/acl/Acl.tsx +109 -0
- package/src/acl/__tests__/Acl.test.tsx +72 -0
- package/src/action-registry/BaseActionRegistry.ts +46 -0
- package/src/action-registry/EngineActionRegistry.ts +32 -0
- package/src/action-registry/ModelActionRegistry.ts +75 -0
- package/src/action-registry/__tests__/engineActionRegistry.test.ts +43 -0
- package/src/action-registry/__tests__/modelActionRegistry.test.ts +107 -0
- package/src/components/DynamicFlowsEditor.tsx +318 -0
- package/src/components/FieldModelRenderer.tsx +62 -0
- package/src/components/FlowContextSelector.tsx +255 -0
- package/src/components/FlowErrorFallback.tsx +316 -0
- package/src/components/FlowModelRenderer.tsx +428 -0
- package/src/components/FormItem.tsx +130 -0
- package/src/components/__tests__/flow-model-render-error-fallback.test.tsx +226 -0
- package/src/components/common/FlowSettingsButton.tsx +30 -0
- package/src/components/common/index.ts +10 -0
- package/src/components/common/withFlowDesignMode.tsx +49 -0
- package/src/components/dnd/getMousePositionOnElement.ts +115 -0
- package/src/components/dnd/index.tsx +128 -0
- package/src/components/dnd/moveBlock.ts +379 -0
- package/src/components/index.ts +20 -0
- package/src/components/settings/independents/dropdown/FlowsDropdownButton.tsx +279 -0
- package/src/components/settings/independents/dropdown/index.ts +10 -0
- package/src/components/settings/independents/index.ts +2 -0
- package/src/components/settings/index.ts +11 -0
- package/src/components/settings/wrappers/contextual/DefaultSettingsIcon.tsx +617 -0
- package/src/components/settings/wrappers/contextual/FlowsContextMenu.tsx +292 -0
- package/src/components/settings/wrappers/contextual/FlowsFloatContextMenu.tsx +655 -0
- package/src/components/settings/wrappers/contextual/StepRequiredSettingsDialog.tsx +446 -0
- package/src/components/settings/wrappers/contextual/StepSettings.tsx +109 -0
- package/src/components/settings/wrappers/contextual/StepSettingsDialog.tsx +217 -0
- package/src/components/settings/wrappers/contextual/StepSettingsDrawer.tsx +32 -0
- package/src/components/settings/wrappers/contextual/index.ts +15 -0
- package/src/components/settings/wrappers/embedded/FlowSettings.tsx +258 -0
- package/src/components/settings/wrappers/embedded/FlowsSettings.tsx +111 -0
- package/src/components/settings/wrappers/embedded/FlowsSettingsContent.tsx +96 -0
- package/src/components/settings/wrappers/embedded/index.ts +11 -0
- package/src/components/settings/wrappers/index.ts +5 -0
- package/src/components/subModel/AddSubModelButton.tsx +575 -0
- package/src/components/subModel/LazyDropdown.tsx +714 -0
- package/src/components/subModel/__tests__/AddSubModelButton.test.tsx +1185 -0
- package/src/components/subModel/__tests__/buildWrapperFieldChildren.test.ts +192 -0
- package/src/components/subModel/__tests__/utils.test.ts +425 -0
- package/src/components/subModel/index.ts +12 -0
- package/src/components/subModel/utils.ts +278 -0
- package/src/components/variables/InlineVariableTag.tsx +97 -0
- package/src/components/variables/SlateVariableEditor.tsx +384 -0
- package/src/components/variables/VariableInput.tsx +342 -0
- package/src/components/variables/VariableTag.tsx +123 -0
- package/src/components/variables/VariableTrigger.tsx +116 -0
- package/src/components/variables/__tests__/FlowContextSelector.test.tsx +553 -0
- package/src/components/variables/__tests__/VariableInput.test.tsx +550 -0
- package/src/components/variables/__tests__/VariableTag.test.tsx +347 -0
- package/src/components/variables/__tests__/test-utils.tsx +62 -0
- package/src/components/variables/__tests__/utils.test.ts +310 -0
- package/src/components/variables/index.ts +16 -0
- package/src/components/variables/types.ts +100 -0
- package/src/components/variables/useResolvedMetaTree.ts +76 -0
- package/src/components/variables/utils.ts +192 -0
- package/src/data-source/__tests__/collection.test.ts +58 -0
- package/src/data-source/__tests__/index.test.ts +82 -0
- package/src/data-source/__tests__/jioToJoiSchema.test.ts +56 -0
- package/src/data-source/index.ts +812 -0
- package/src/data-source/jioToJoiSchema.ts +103 -0
- package/src/decorators/index.ts +10 -0
- package/src/decorators/largeField.ts +14 -0
- package/src/emitter.ts +33 -0
- package/src/event-registry/BaseEventRegistry.ts +40 -0
- package/src/event-registry/EngineEventRegistry.ts +26 -0
- package/src/event-registry/ModelEventRegistry.ts +69 -0
- package/src/event-registry/__tests__/engineEventRegistry.test.ts +48 -0
- package/src/executor/FlowExecutor.ts +256 -0
- package/src/executor/__tests__/eventStep.test.ts +157 -0
- package/src/executor/__tests__/flowExecutor.test.ts +163 -0
- package/src/flow-registry/BaseFlowRegistry.ts +91 -0
- package/src/flow-registry/GlobalFlowRegistry.ts +82 -0
- package/src/flow-registry/InstanceFlowRegistry.ts +39 -0
- package/src/flow-registry/__tests__/globalFlowRegistry.test.ts +141 -0
- package/src/flow-registry/__tests__/instance-and-global-registry.test.ts +67 -0
- package/src/flow-registry/__tests__/instanceFlowRegistry.test.ts +83 -0
- package/src/flow-registry/index.ts +12 -0
- package/src/flowContext.ts +1639 -0
- package/src/flowEngine.ts +905 -0
- package/src/flowI18n.ts +96 -0
- package/src/flowSettings.ts +1045 -0
- package/src/hooks/index.ts +15 -0
- package/src/hooks/useApplyAutoFlows.ts +51 -0
- package/src/hooks/useFlowModel.tsx +59 -0
- package/src/hooks/useFlowModelById.ts +37 -0
- package/src/hooks/useFlowSettingsContext.tsx +37 -0
- package/src/hooks/useFlowStep.tsx +19 -0
- package/src/hooks/useNiceDropdownMaxHeight.ts +34 -0
- package/src/index.ts +38 -0
- package/src/locale/en-US.json +61 -0
- package/src/locale/index.ts +38 -0
- package/src/locale/zh-CN.json +61 -0
- package/src/models/CollectionFieldModel.tsx +269 -0
- package/src/models/DisplayItemModel.tsx +13 -0
- package/src/models/EditableItemModel.tsx +13 -0
- package/src/models/FilterableItemModel.tsx +13 -0
- package/src/models/__tests__/CollectionFieldModel.test.ts +122 -0
- package/src/models/__tests__/defaultParams-on-create.test.ts +83 -0
- package/src/models/__tests__/flow-model-oninit.test.ts +44 -0
- package/src/models/__tests__/flowModel.actions.integration.test.ts +100 -0
- package/src/models/__tests__/flowModel.getFlows.sort.test.ts +100 -0
- package/src/models/__tests__/flowModel.test.ts +2746 -0
- package/src/models/__tests__/flowRegistry.test.ts +512 -0
- package/src/models/__tests__/forkFlowModel.test.ts +1047 -0
- package/src/models/__tests__/model-actions.test.ts +70 -0
- package/src/models/__tests__/model-events.test.ts +69 -0
- package/src/models/flowModel.tsx +1398 -0
- package/src/models/forkFlowModel.ts +287 -0
- package/src/models/index.ts +17 -0
- package/src/provider.tsx +101 -0
- package/src/resources/__tests__/apiResource.test.ts +201 -0
- package/src/resources/__tests__/baseRecordResource.test.ts +262 -0
- package/src/resources/__tests__/filterItem.test.ts +260 -0
- package/src/resources/__tests__/flowResource.test.ts +127 -0
- package/src/resources/apiResource.ts +148 -0
- package/src/resources/baseRecordResource.ts +279 -0
- package/src/resources/filterItem.ts +74 -0
- package/src/resources/flowResource.ts +143 -0
- package/src/resources/index.ts +17 -0
- package/src/resources/multiRecordResource.ts +219 -0
- package/src/resources/singleRecordResource.ts +83 -0
- package/src/resources/sqlResource.ts +299 -0
- package/src/runjs-context/contexts/FlowRunJSContext.ts +190 -0
- package/src/runjs-context/contexts/FormJSFieldItemRunJSContext.ts +39 -0
- package/src/runjs-context/contexts/JSBlockRunJSContext.ts +52 -0
- package/src/runjs-context/contexts/JSCollectionActionRunJSContext.ts +32 -0
- package/src/runjs-context/contexts/JSFieldRunJSContext.ts +43 -0
- package/src/runjs-context/contexts/JSItemRunJSContext.ts +39 -0
- package/src/runjs-context/contexts/JSRecordActionRunJSContext.ts +34 -0
- package/src/runjs-context/contexts/LinkageRunJSContext.ts +35 -0
- package/src/runjs-context/helpers.ts +56 -0
- package/src/runjs-context/index.ts +20 -0
- package/src/runjs-context/registry.ts +65 -0
- package/src/runjs-context/snippets/global/api-request-get.snippet.ts +20 -0
- package/src/runjs-context/snippets/global/api-request-post.snippet.ts +20 -0
- package/src/runjs-context/snippets/global/console-log-ctx.snippet.ts +19 -0
- package/src/runjs-context/snippets/global/copy-record-json.snippet.ts +21 -0
- package/src/runjs-context/snippets/global/copy-to-clipboard.snippet.ts +21 -0
- package/src/runjs-context/snippets/global/log-json-record.snippet.ts +21 -0
- package/src/runjs-context/snippets/global/message-error.snippet.ts +20 -0
- package/src/runjs-context/snippets/global/message-success.snippet.ts +20 -0
- package/src/runjs-context/snippets/global/notification-open.snippet.ts +21 -0
- package/src/runjs-context/snippets/global/open-view-dialog.snippet.ts +26 -0
- package/src/runjs-context/snippets/global/open-view-drawer.snippet.ts +26 -0
- package/src/runjs-context/snippets/global/requireAsync.snippet.ts +24 -0
- package/src/runjs-context/snippets/global/sleep.snippet.ts +21 -0
- package/src/runjs-context/snippets/global/try-catch-async.snippet.ts +22 -0
- package/src/runjs-context/snippets/global/view-navigation-push.snippet.ts +23 -0
- package/src/runjs-context/snippets/global/window-open.snippet.ts +19 -0
- package/src/runjs-context/snippets/index.ts +59 -0
- package/src/runjs-context/snippets/libs/echarts-init.snippet.ts +24 -0
- package/src/runjs-context/snippets/scene/actions/collection-selected-count.snippet.ts +22 -0
- package/src/runjs-context/snippets/scene/actions/iterate-selected-rows.snippet.ts +21 -0
- package/src/runjs-context/snippets/scene/actions/record-id-message.snippet.ts +21 -0
- package/src/runjs-context/snippets/scene/actions/run-action-basic.snippet.ts +18 -0
- package/src/runjs-context/snippets/scene/jsblock/add-event-listener.snippet.ts +29 -0
- package/src/runjs-context/snippets/scene/jsblock/append-style.snippet.ts +20 -0
- package/src/runjs-context/snippets/scene/jsblock/jsx-mount.snippet.ts +24 -0
- package/src/runjs-context/snippets/scene/jsblock/jsx-unmount.snippet.ts +19 -0
- package/src/runjs-context/snippets/scene/jsblock/render-basic.snippet.ts +24 -0
- package/src/runjs-context/snippets/scene/jsblock/render-button-handler.snippet.ts +24 -0
- package/src/runjs-context/snippets/scene/jsblock/render-card.snippet.ts +30 -0
- package/src/runjs-context/snippets/scene/jsblock/render-react.snippet.ts +34 -0
- package/src/runjs-context/snippets/scene/jsfield/color-by-value.snippet.ts +20 -0
- package/src/runjs-context/snippets/scene/jsfield/format-number.snippet.ts +19 -0
- package/src/runjs-context/snippets/scene/jsfield/innerHTML-value.snippet.ts +18 -0
- package/src/runjs-context/snippets/scene/jsitem/render-basic.snippet.ts +27 -0
- package/src/runjs-context/snippets/scene/linkage/set-disabled.snippet.ts +38 -0
- package/src/runjs-context/snippets/scene/linkage/set-field-value.snippet.ts +37 -0
- package/src/runjs-context/snippets/scene/linkage/set-required.snippet.ts +38 -0
- package/src/runjs-context/snippets/scene/linkage/toggle-visible.snippet.ts +38 -0
- package/src/runjs-context/snippets/types.ts +17 -0
- package/src/types.ts +474 -0
- package/src/utils/__tests__/context.test.ts +93 -0
- package/src/utils/__tests__/params-resolvers.test.ts +652 -0
- package/src/utils/__tests__/parsePathnameToViewParams.test.ts +104 -0
- package/src/utils/__tests__/safeGlobals.test.ts +29 -0
- package/src/utils/__tests__/utils.test.ts +1021 -0
- package/src/utils/__tests__/variablesParams.test.ts +52 -0
- package/src/utils/autoFlowError.ts +29 -0
- package/src/utils/constants.ts +60 -0
- package/src/utils/context.ts +70 -0
- package/src/utils/createCollectionContextMeta.ts +122 -0
- package/src/utils/exceptions.ts +36 -0
- package/src/utils/flow-definitions.ts +16 -0
- package/src/utils/index.ts +63 -0
- package/src/utils/inheritance.ts +39 -0
- package/src/utils/params-resolvers.ts +482 -0
- package/src/utils/parsePathnameToViewParams.ts +103 -0
- package/src/utils/safeGlobals.ts +188 -0
- package/src/utils/schema-utils.ts +201 -0
- package/src/utils/serverContextParams.ts +111 -0
- package/src/utils/setupRuntimeContextSteps.ts +89 -0
- package/src/utils/translation.ts +37 -0
- package/src/utils/variablesParams.ts +175 -0
- package/src/views/DialogComponent.tsx +79 -0
- package/src/views/DrawerComponent.tsx +72 -0
- package/src/views/FlowView.tsx +103 -0
- package/src/views/PageComponent.tsx +150 -0
- package/src/views/ViewNavigation.ts +122 -0
- package/src/views/__tests__/FlowView.test.ts +31 -0
- package/src/views/__tests__/ViewNavigation.test.ts +191 -0
- package/src/views/__tests__/usePatchElement.test.tsx +28 -0
- package/src/views/createViewMeta.ts +157 -0
- package/src/views/index.tsx +14 -0
- package/src/views/useDialog.tsx +192 -0
- package/src/views/useDrawer.tsx +205 -0
- package/src/views/usePage.tsx +182 -0
- package/src/views/usePatchElement.tsx +27 -0
- package/src/views/usePopover.tsx +131 -0
|
@@ -0,0 +1,1133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
var __create = Object.create;
|
|
11
|
+
var __defProp = Object.defineProperty;
|
|
12
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
13
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
14
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
15
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
16
|
+
var __typeError = (msg) => {
|
|
17
|
+
throw TypeError(msg);
|
|
18
|
+
};
|
|
19
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
20
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
21
|
+
var __export = (target, all) => {
|
|
22
|
+
for (var name in all)
|
|
23
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
24
|
+
};
|
|
25
|
+
var __copyProps = (to, from, except, desc) => {
|
|
26
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
27
|
+
for (let key of __getOwnPropNames(from))
|
|
28
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
29
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
30
|
+
}
|
|
31
|
+
return to;
|
|
32
|
+
};
|
|
33
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
34
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
35
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
36
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
37
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
38
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
39
|
+
mod
|
|
40
|
+
));
|
|
41
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
42
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
43
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
44
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
45
|
+
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
46
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
|
|
47
|
+
var flowModel_exports = {};
|
|
48
|
+
__export(flowModel_exports, {
|
|
49
|
+
ErrorFlowModel: () => ErrorFlowModel,
|
|
50
|
+
FlowModel: () => FlowModel,
|
|
51
|
+
ModelRenderMode: () => ModelRenderMode,
|
|
52
|
+
defineFlow: () => defineFlow
|
|
53
|
+
});
|
|
54
|
+
module.exports = __toCommonJS(flowModel_exports);
|
|
55
|
+
var import_reactive = require("@formily/reactive");
|
|
56
|
+
var import_reactive_react = require("@formily/reactive-react");
|
|
57
|
+
var import_lodash = __toESM(require("lodash"));
|
|
58
|
+
var import_react = __toESM(require("react"));
|
|
59
|
+
var import_secure = require("uid/secure");
|
|
60
|
+
var import_StepRequiredSettingsDialog = require("../components/settings/wrappers/contextual/StepRequiredSettingsDialog");
|
|
61
|
+
var import_StepSettingsDialog = require("../components/settings/wrappers/contextual/StepSettingsDialog");
|
|
62
|
+
var import_emitter = require("../emitter");
|
|
63
|
+
var import_InstanceFlowRegistry = require("../flow-registry/InstanceFlowRegistry");
|
|
64
|
+
var import_flowContext = require("../flowContext");
|
|
65
|
+
var import_flowEngine = require("../flowEngine");
|
|
66
|
+
var import_utils = require("../utils");
|
|
67
|
+
var import_lib = require("antd/lib");
|
|
68
|
+
var import_ModelActionRegistry = require("../action-registry/ModelActionRegistry");
|
|
69
|
+
var import_utils2 = require("../components/subModel/utils");
|
|
70
|
+
var import_ModelEventRegistry = require("../event-registry/ModelEventRegistry");
|
|
71
|
+
var import_GlobalFlowRegistry = require("../flow-registry/GlobalFlowRegistry");
|
|
72
|
+
var import_forkFlowModel = require("./forkFlowModel");
|
|
73
|
+
var _flowContext;
|
|
74
|
+
const classActionRegistries = /* @__PURE__ */ new WeakMap();
|
|
75
|
+
const classEventRegistries = /* @__PURE__ */ new WeakMap();
|
|
76
|
+
const modelMetas = /* @__PURE__ */ new WeakMap();
|
|
77
|
+
const modelGlobalRegistries = /* @__PURE__ */ new WeakMap();
|
|
78
|
+
var ModelRenderMode = /* @__PURE__ */ ((ModelRenderMode2) => {
|
|
79
|
+
ModelRenderMode2["ReactElement"] = "reactElement";
|
|
80
|
+
ModelRenderMode2["RenderFunction"] = "renderFunction";
|
|
81
|
+
return ModelRenderMode2;
|
|
82
|
+
})(ModelRenderMode || {});
|
|
83
|
+
const _FlowModel = class _FlowModel {
|
|
84
|
+
constructor(options) {
|
|
85
|
+
__publicField(this, "uid");
|
|
86
|
+
__publicField(this, "sortIndex");
|
|
87
|
+
__publicField(this, "hidden", false);
|
|
88
|
+
__publicField(this, "props", {});
|
|
89
|
+
__publicField(this, "stepParams", {});
|
|
90
|
+
__publicField(this, "flowEngine");
|
|
91
|
+
__publicField(this, "parent");
|
|
92
|
+
__publicField(this, "subModels");
|
|
93
|
+
__publicField(this, "_options");
|
|
94
|
+
__publicField(this, "_title");
|
|
95
|
+
__publicField(this, "isNew", false);
|
|
96
|
+
// 标记是否为新建状态
|
|
97
|
+
/**
|
|
98
|
+
* 所有 fork 实例的引用集合。
|
|
99
|
+
* 使用 Set 便于在销毁时主动遍历并调用 dispose,避免悬挂引用。
|
|
100
|
+
*/
|
|
101
|
+
__publicField(this, "forks", /* @__PURE__ */ new Set());
|
|
102
|
+
__publicField(this, "emitter", new import_emitter.Emitter());
|
|
103
|
+
/**
|
|
104
|
+
* 基于 key 的 fork 实例缓存,用于复用 fork 实例
|
|
105
|
+
*/
|
|
106
|
+
__publicField(this, "forkCache", /* @__PURE__ */ new Map());
|
|
107
|
+
/**
|
|
108
|
+
* 上一次 applyAutoFlows 的执行参数
|
|
109
|
+
*/
|
|
110
|
+
__publicField(this, "_lastAutoRunParams", null);
|
|
111
|
+
__publicField(this, "observerDispose");
|
|
112
|
+
__privateAdd(this, _flowContext);
|
|
113
|
+
/**
|
|
114
|
+
* 原始 render 方法的引用
|
|
115
|
+
*/
|
|
116
|
+
__publicField(this, "_originalRender", null);
|
|
117
|
+
/**
|
|
118
|
+
* 缓存的响应式包装器组件(每个实例一个)
|
|
119
|
+
*/
|
|
120
|
+
__publicField(this, "_reactiveWrapperCache");
|
|
121
|
+
__publicField(this, "flowRegistry");
|
|
122
|
+
__publicField(this, "_cleanRun");
|
|
123
|
+
__publicField(this, "_dispatchEventWithDebounce", import_lodash.default.debounce(async (eventName, inputArgs) => {
|
|
124
|
+
return this._dispatchEvent(eventName, inputArgs);
|
|
125
|
+
}, 100));
|
|
126
|
+
/**
|
|
127
|
+
* 重新执行上一次的 applyAutoFlows,保持参数一致
|
|
128
|
+
* 如果之前没有执行过,则直接跳过
|
|
129
|
+
* 使用 lodash debounce 避免频繁调用
|
|
130
|
+
*/
|
|
131
|
+
__publicField(this, "_rerunLastAutoRun", import_lodash.default.debounce(async () => {
|
|
132
|
+
if (this._lastAutoRunParams) {
|
|
133
|
+
try {
|
|
134
|
+
await this.applyAutoFlows(...this._lastAutoRunParams);
|
|
135
|
+
} catch (error) {
|
|
136
|
+
console.error("FlowModel._rerunLastAutoRun: Error during rerun:", error);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}, 100));
|
|
140
|
+
if (!options.flowEngine) {
|
|
141
|
+
throw new Error("FlowModel must be initialized with a FlowEngine instance.");
|
|
142
|
+
}
|
|
143
|
+
this.flowEngine = options.flowEngine;
|
|
144
|
+
if (this.flowEngine.getModel(options.uid)) {
|
|
145
|
+
return this.flowEngine.getModel(options.uid);
|
|
146
|
+
}
|
|
147
|
+
if (!options.uid) {
|
|
148
|
+
options.uid = (0, import_secure.uid)();
|
|
149
|
+
}
|
|
150
|
+
this.uid = options.uid;
|
|
151
|
+
this.props = {
|
|
152
|
+
...options.props
|
|
153
|
+
};
|
|
154
|
+
this.stepParams = options.stepParams || {};
|
|
155
|
+
this.subModels = {};
|
|
156
|
+
this.sortIndex = options.sortIndex || 0;
|
|
157
|
+
this._options = options;
|
|
158
|
+
(0, import_reactive.define)(this, {
|
|
159
|
+
hidden: import_reactive.observable,
|
|
160
|
+
props: import_reactive.observable,
|
|
161
|
+
subModels: import_reactive.observable.shallow,
|
|
162
|
+
stepParams: import_reactive.observable,
|
|
163
|
+
// setProps: action,
|
|
164
|
+
setProps: import_reactive.batch,
|
|
165
|
+
// setStepParams: action,
|
|
166
|
+
setStepParams: import_reactive.batch
|
|
167
|
+
});
|
|
168
|
+
this.flowRegistry = new import_InstanceFlowRegistry.InstanceFlowRegistry(this);
|
|
169
|
+
this.flowRegistry.addFlows(options.flowRegistry);
|
|
170
|
+
this.observerDispose = (0, import_reactive.observe)(this.stepParams, (changed) => {
|
|
171
|
+
if (changed.type === "set" && import_lodash.default.isEqual(changed.value, changed.oldValue)) {
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
if (this.flowEngine) {
|
|
175
|
+
this.invalidateAutoFlowCache();
|
|
176
|
+
}
|
|
177
|
+
this._rerunLastAutoRun();
|
|
178
|
+
this.forks.forEach((fork) => {
|
|
179
|
+
fork.rerender();
|
|
180
|
+
});
|
|
181
|
+
});
|
|
182
|
+
try {
|
|
183
|
+
this.setupReactiveRender();
|
|
184
|
+
} catch (error) {
|
|
185
|
+
console.error(`Failed to setup reactive render for ${this.constructor.name}:`, error);
|
|
186
|
+
if (typeof this.render !== "function") {
|
|
187
|
+
this.render = () => import_react.default.createElement("div", null, "Render method not available");
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
this._cleanRun = !!options["cleanRun"];
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* 当 flowSettings.enabled 且 model.hidden 为 true 时用于渲染设置态组件(实例方法,子类可覆盖)。
|
|
194
|
+
* 基类默认仅返回一个透明度降低的占位元素
|
|
195
|
+
*/
|
|
196
|
+
renderHiddenInConfig() {
|
|
197
|
+
var _a;
|
|
198
|
+
return /* @__PURE__ */ import_react.default.createElement("span", { style: { opacity: 0.5 } }, ((_a = this.translate) == null ? void 0 : _a.call(this, "Hidden")) || "Hidden");
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* 对外暴露的上下文:
|
|
202
|
+
*/
|
|
203
|
+
get context() {
|
|
204
|
+
if (!__privateGet(this, _flowContext)) {
|
|
205
|
+
__privateSet(this, _flowContext, new import_flowContext.FlowModelContext(this));
|
|
206
|
+
}
|
|
207
|
+
return __privateGet(this, _flowContext);
|
|
208
|
+
}
|
|
209
|
+
on(eventName, listener) {
|
|
210
|
+
this.emitter.on(eventName, listener);
|
|
211
|
+
}
|
|
212
|
+
onInit(options) {
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* 通过 AddSubModelButton 添加为子模型后调用(子类可覆盖)
|
|
216
|
+
*/
|
|
217
|
+
async afterAddAsSubModel() {
|
|
218
|
+
}
|
|
219
|
+
get async() {
|
|
220
|
+
return this._options.async || false;
|
|
221
|
+
}
|
|
222
|
+
get use() {
|
|
223
|
+
return this._options.use;
|
|
224
|
+
}
|
|
225
|
+
get subKey() {
|
|
226
|
+
return this._options.subKey;
|
|
227
|
+
}
|
|
228
|
+
get subType() {
|
|
229
|
+
return this._options.subType;
|
|
230
|
+
}
|
|
231
|
+
get reactView() {
|
|
232
|
+
return this.flowEngine.reactView;
|
|
233
|
+
}
|
|
234
|
+
get parentId() {
|
|
235
|
+
return this._options.parentId;
|
|
236
|
+
}
|
|
237
|
+
static get meta() {
|
|
238
|
+
return modelMetas.get(this);
|
|
239
|
+
}
|
|
240
|
+
static get globalFlowRegistry() {
|
|
241
|
+
const Cls = this;
|
|
242
|
+
let reg = modelGlobalRegistries.get(Cls);
|
|
243
|
+
if (!reg) {
|
|
244
|
+
reg = new import_GlobalFlowRegistry.GlobalFlowRegistry(Cls);
|
|
245
|
+
modelGlobalRegistries.set(Cls, reg);
|
|
246
|
+
}
|
|
247
|
+
return reg;
|
|
248
|
+
}
|
|
249
|
+
// 获取当前类的动作注册表(含父子链注入),按类缓存
|
|
250
|
+
static get actionRegistry() {
|
|
251
|
+
const ModelClass = this;
|
|
252
|
+
let registry = classActionRegistries.get(ModelClass);
|
|
253
|
+
if (!registry) {
|
|
254
|
+
let parentRegistry = null;
|
|
255
|
+
const ParentClass = Object.getPrototypeOf(ModelClass);
|
|
256
|
+
if (ParentClass && ParentClass !== Function.prototype && ParentClass !== Object.prototype) {
|
|
257
|
+
const isSubclassOfFlowModel = ParentClass === _FlowModel || (0, import_utils.isInheritedFrom)(ParentClass, _FlowModel);
|
|
258
|
+
if (isSubclassOfFlowModel) {
|
|
259
|
+
parentRegistry = ParentClass.actionRegistry;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
registry = new import_ModelActionRegistry.ModelActionRegistry(ModelClass, parentRegistry);
|
|
263
|
+
classActionRegistries.set(ModelClass, registry);
|
|
264
|
+
}
|
|
265
|
+
return registry;
|
|
266
|
+
}
|
|
267
|
+
// 获取当前类的事件注册表(含父子链注入),按类缓存
|
|
268
|
+
static get eventRegistry() {
|
|
269
|
+
const ModelClass = this;
|
|
270
|
+
let registry = classEventRegistries.get(ModelClass);
|
|
271
|
+
if (!registry) {
|
|
272
|
+
let parentRegistry = null;
|
|
273
|
+
const ParentClass = Object.getPrototypeOf(ModelClass);
|
|
274
|
+
if (ParentClass && ParentClass !== Function.prototype && ParentClass !== Object.prototype) {
|
|
275
|
+
const isSubclassOfFlowModel = ParentClass === _FlowModel || (0, import_utils.isInheritedFrom)(ParentClass, _FlowModel);
|
|
276
|
+
if (isSubclassOfFlowModel) {
|
|
277
|
+
parentRegistry = ParentClass.eventRegistry;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
registry = new import_ModelEventRegistry.ModelEventRegistry(ModelClass, parentRegistry);
|
|
281
|
+
classEventRegistries.set(ModelClass, registry);
|
|
282
|
+
}
|
|
283
|
+
return registry;
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* 注册仅当前 FlowModel 类及其子类可用的 Action。
|
|
287
|
+
* 该注册是类级别的,不会影响全局(FlowEngine)的 Action 注册。
|
|
288
|
+
*/
|
|
289
|
+
static registerAction(definition) {
|
|
290
|
+
this.actionRegistry.registerAction(definition);
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* 批量注册仅当前 FlowModel 类及其子类可用的 Actions。
|
|
294
|
+
*/
|
|
295
|
+
static registerActions(actions) {
|
|
296
|
+
this.actionRegistry.registerActions(actions);
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* 注册仅当前 FlowModel 类及其子类可用的 Event。
|
|
300
|
+
* 该注册是类级别的,不会影响全局(FlowEngine)的 Event 注册。
|
|
301
|
+
*/
|
|
302
|
+
static registerEvent(definition) {
|
|
303
|
+
this.eventRegistry.registerEvent(definition);
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* 批量注册仅当前 FlowModel 类及其子类可用的 Events。
|
|
307
|
+
*/
|
|
308
|
+
static registerEvents(events) {
|
|
309
|
+
this.eventRegistry.registerEvents(events);
|
|
310
|
+
}
|
|
311
|
+
static buildChildrenFromModels(ctx, Models) {
|
|
312
|
+
return Models.map((M) => (0, import_utils2.buildSubModelItem)(M, ctx, true));
|
|
313
|
+
}
|
|
314
|
+
get title() {
|
|
315
|
+
var _a;
|
|
316
|
+
return this.translate(this._title) || this.translate((_a = this.constructor["meta"]) == null ? void 0 : _a.label);
|
|
317
|
+
}
|
|
318
|
+
setTitle(value) {
|
|
319
|
+
this._title = value;
|
|
320
|
+
}
|
|
321
|
+
setHidden(value) {
|
|
322
|
+
this.hidden = !!value;
|
|
323
|
+
}
|
|
324
|
+
_createSubModels(subModels) {
|
|
325
|
+
let mergedSubModels = subModels || {};
|
|
326
|
+
try {
|
|
327
|
+
const Cls = this.constructor;
|
|
328
|
+
const meta = Cls.meta;
|
|
329
|
+
const metaCreate = meta == null ? void 0 : meta.createModelOptions;
|
|
330
|
+
if (metaCreate && typeof metaCreate === "object" && metaCreate.subModels) {
|
|
331
|
+
mergedSubModels = import_lodash.default.merge({}, import_lodash.default.cloneDeep(metaCreate.subModels || {}), import_lodash.default.cloneDeep(subModels || {}));
|
|
332
|
+
}
|
|
333
|
+
} catch (e) {
|
|
334
|
+
}
|
|
335
|
+
Object.entries(mergedSubModels || {}).forEach(([key, value]) => {
|
|
336
|
+
if (Array.isArray(value)) {
|
|
337
|
+
value.sort((a, b) => (a.sortIndex || 0) - (b.sortIndex || 0)).forEach((item) => {
|
|
338
|
+
this.addSubModel(key, item);
|
|
339
|
+
});
|
|
340
|
+
} else {
|
|
341
|
+
this.setSubModel(key, value);
|
|
342
|
+
}
|
|
343
|
+
});
|
|
344
|
+
}
|
|
345
|
+
invalidateAutoFlowCache(deep = false) {
|
|
346
|
+
if (this.flowEngine) {
|
|
347
|
+
const cacheKey = import_flowEngine.FlowEngine.generateApplyFlowCacheKey("autoFlow", "all", this.uid);
|
|
348
|
+
this.flowEngine.applyFlowCache.delete(cacheKey);
|
|
349
|
+
this.forks.forEach((fork) => {
|
|
350
|
+
const forkCacheKey = import_flowEngine.FlowEngine.generateApplyFlowCacheKey(`${fork["forkId"]}`, "all", this.uid);
|
|
351
|
+
this.flowEngine.applyFlowCache.delete(forkCacheKey);
|
|
352
|
+
});
|
|
353
|
+
}
|
|
354
|
+
if (deep) {
|
|
355
|
+
const subModelKeys = Object.keys(this.subModels);
|
|
356
|
+
for (const subModelKey of subModelKeys) {
|
|
357
|
+
const subModelValue = this.subModels[subModelKey];
|
|
358
|
+
if (Array.isArray(subModelValue)) {
|
|
359
|
+
for (const subModel of subModelValue) {
|
|
360
|
+
subModel.invalidateAutoFlowCache(deep);
|
|
361
|
+
}
|
|
362
|
+
} else if (subModelValue instanceof _FlowModel) {
|
|
363
|
+
subModelValue.invalidateAutoFlowCache(deep);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* 设置FlowEngine实例
|
|
370
|
+
* @param {FlowEngine} flowEngine FlowEngine实例
|
|
371
|
+
*/
|
|
372
|
+
setFlowEngine(flowEngine) {
|
|
373
|
+
}
|
|
374
|
+
static define(meta) {
|
|
375
|
+
modelMetas.set(this, meta);
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* 注册一个 Flow。
|
|
379
|
+
* @template TModel 具体的FlowModel子类类型
|
|
380
|
+
* @param {string | FlowDefinitionOptions<TModel>} keyOrDefinition 流程的 Key 或 FlowDefinitionOptions 对象。
|
|
381
|
+
* 如果为字符串,则为流程 Key,需要配合 flowDefinition 参数。
|
|
382
|
+
* 如果为对象,则为包含 key 属性的完整 FlowDefinitionOptions。
|
|
383
|
+
* @param {FlowDefinitionOptions<TModel>} [flowDefinition] 当第一个参数为流程 Key 时,此参数为流程的定义。
|
|
384
|
+
* @returns {void}
|
|
385
|
+
*/
|
|
386
|
+
static registerFlow(keyOrDefinition, flowDefinition) {
|
|
387
|
+
const Cls = this;
|
|
388
|
+
if (typeof keyOrDefinition === "string") {
|
|
389
|
+
Cls.globalFlowRegistry.addFlow(keyOrDefinition, flowDefinition);
|
|
390
|
+
} else {
|
|
391
|
+
Cls.globalFlowRegistry.addFlow(keyOrDefinition.key, keyOrDefinition);
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
// /**
|
|
395
|
+
// * 清空所有注册的流程定义。在测试中用来清理已注册的流,防止对其它测试产生影响。
|
|
396
|
+
// */
|
|
397
|
+
// public static clearFlows(): void {
|
|
398
|
+
// modelFlows = new WeakMap<typeof FlowModel, Map<string, FlowDefinition>>();
|
|
399
|
+
// }
|
|
400
|
+
/**
|
|
401
|
+
* 获取已注册的流程定义。
|
|
402
|
+
* 如果当前类不存在对应的flow,会继续往父类查找。
|
|
403
|
+
* @param {string} key 流程 Key。
|
|
404
|
+
* @returns {FlowDefinition | undefined} 流程定义,如果未找到则返回 undefined。
|
|
405
|
+
*/
|
|
406
|
+
getFlow(key) {
|
|
407
|
+
if (this.flowRegistry.hasFlow(key)) {
|
|
408
|
+
return this.flowRegistry.getFlow(key);
|
|
409
|
+
}
|
|
410
|
+
const Cls = this.constructor;
|
|
411
|
+
return Cls.globalFlowRegistry.getFlow(key);
|
|
412
|
+
}
|
|
413
|
+
/**
|
|
414
|
+
* 注册一个实例级别的流程定义。
|
|
415
|
+
* @template TModel 具体的FlowModel子类类型
|
|
416
|
+
* @param {string | FlowDefinitionOptions<TModel>} keyOrDefinition 流程的 Key 或 FlowDefinitionOptions 对象。
|
|
417
|
+
* @param {FlowDefinitionOptions<TModel>} [flowDefinition] 当第一个参数为流程 Key 时,此参数为流程的定义。
|
|
418
|
+
* @returns {FlowDefinition} 注册的流程定义实例
|
|
419
|
+
*/
|
|
420
|
+
registerFlow(keyOrDefinition, flowDefinition) {
|
|
421
|
+
if (typeof keyOrDefinition === "string") {
|
|
422
|
+
return this.flowRegistry.addFlow(keyOrDefinition, flowDefinition);
|
|
423
|
+
} else {
|
|
424
|
+
return this.flowRegistry.addFlow(keyOrDefinition.key, keyOrDefinition);
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
/**
|
|
428
|
+
* 获取当前模型可用的所有 Actions:
|
|
429
|
+
* - 包含全局(FlowEngine)注册的 Actions;
|
|
430
|
+
* - 合并类级(FlowModel.registerAction(s))注册的 Actions,并考虑继承(子类覆盖父类同名 Action)。
|
|
431
|
+
*/
|
|
432
|
+
getActions() {
|
|
433
|
+
var _a;
|
|
434
|
+
const ModelClass = this.constructor;
|
|
435
|
+
const merged = ModelClass.actionRegistry.getActions();
|
|
436
|
+
const actions = /* @__PURE__ */ new Map();
|
|
437
|
+
const globalActions = (_a = this.flowEngine) == null ? void 0 : _a.getActions();
|
|
438
|
+
if (globalActions) for (const [k, v] of globalActions) actions.set(k, v);
|
|
439
|
+
for (const [k, v] of merged) actions.set(k, v);
|
|
440
|
+
return actions;
|
|
441
|
+
}
|
|
442
|
+
/**
|
|
443
|
+
* 获取当前模型可用的所有 Events:
|
|
444
|
+
* - 包含全局(FlowEngine)注册的 Events;
|
|
445
|
+
* - 合并类级(FlowModel.registerEvent(s))注册的 Events,并考虑继承(子类覆盖父类同名 Event)。
|
|
446
|
+
*/
|
|
447
|
+
getEvents() {
|
|
448
|
+
var _a;
|
|
449
|
+
const ModelClass = this.constructor;
|
|
450
|
+
const merged = ModelClass.eventRegistry.getEvents();
|
|
451
|
+
const events = /* @__PURE__ */ new Map();
|
|
452
|
+
const globalEvents = (_a = this.flowEngine) == null ? void 0 : _a.getEvents();
|
|
453
|
+
if (globalEvents) for (const [k, v] of globalEvents) events.set(k, v);
|
|
454
|
+
for (const [k, v] of merged) events.set(k, v);
|
|
455
|
+
return events;
|
|
456
|
+
}
|
|
457
|
+
/**
|
|
458
|
+
* 获取指定名称的 Event(优先返回类级注册的,未找到则回退到全局)。
|
|
459
|
+
*/
|
|
460
|
+
getEvent(name) {
|
|
461
|
+
var _a;
|
|
462
|
+
const ModelClass = this.constructor;
|
|
463
|
+
const own = ModelClass.eventRegistry.getEvent(name);
|
|
464
|
+
if (own) return own;
|
|
465
|
+
return (_a = this.flowEngine) == null ? void 0 : _a.getEvent(name);
|
|
466
|
+
}
|
|
467
|
+
/**
|
|
468
|
+
* 获取指定名称的 Action(优先返回类级注册的,未找到则回退到全局)。
|
|
469
|
+
*/
|
|
470
|
+
getAction(name) {
|
|
471
|
+
var _a;
|
|
472
|
+
const ModelClass = this.constructor;
|
|
473
|
+
const own = ModelClass.actionRegistry.getAction(name);
|
|
474
|
+
if (own) return own;
|
|
475
|
+
return (_a = this.flowEngine) == null ? void 0 : _a.getAction(name);
|
|
476
|
+
}
|
|
477
|
+
getFlows() {
|
|
478
|
+
const instanceFlows = this.flowRegistry.getFlows();
|
|
479
|
+
const staticFlows = this.constructor.globalFlowRegistry.getFlows();
|
|
480
|
+
const instanceKeys = new Set(instanceFlows.keys());
|
|
481
|
+
const staticEntries = Array.from(staticFlows.entries()).filter(([key]) => !instanceKeys.has(key));
|
|
482
|
+
const instanceEntries = Array.from(instanceFlows.entries());
|
|
483
|
+
const allEntries = [...staticEntries, ...instanceEntries];
|
|
484
|
+
allEntries.sort(([, a], [, b]) => {
|
|
485
|
+
const sa = a.sort ?? 0;
|
|
486
|
+
const sb = b.sort ?? 0;
|
|
487
|
+
if (sa !== sb) return sa - sb;
|
|
488
|
+
return 0;
|
|
489
|
+
});
|
|
490
|
+
return new Map(allEntries);
|
|
491
|
+
}
|
|
492
|
+
setProps(props, value) {
|
|
493
|
+
if (typeof props === "string") {
|
|
494
|
+
this.props[props] = value;
|
|
495
|
+
} else {
|
|
496
|
+
this.props = { ...this.props, ...props };
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
getProps() {
|
|
500
|
+
return this.props;
|
|
501
|
+
}
|
|
502
|
+
setStepParams(flowKeyOrAllParams, stepKeyOrStepsParams, params) {
|
|
503
|
+
if (typeof flowKeyOrAllParams === "string") {
|
|
504
|
+
const flowKey = flowKeyOrAllParams;
|
|
505
|
+
if (typeof stepKeyOrStepsParams === "string" && params !== void 0) {
|
|
506
|
+
if (!this.stepParams[flowKey]) {
|
|
507
|
+
this.stepParams[flowKey] = {};
|
|
508
|
+
}
|
|
509
|
+
this.stepParams[flowKey][stepKeyOrStepsParams] = {
|
|
510
|
+
...this.stepParams[flowKey][stepKeyOrStepsParams],
|
|
511
|
+
...params
|
|
512
|
+
};
|
|
513
|
+
} else if (typeof stepKeyOrStepsParams === "object" && stepKeyOrStepsParams !== null) {
|
|
514
|
+
this.stepParams[flowKey] = { ...this.stepParams[flowKey] || {}, ...stepKeyOrStepsParams };
|
|
515
|
+
}
|
|
516
|
+
} else if (typeof flowKeyOrAllParams === "object" && flowKeyOrAllParams !== null) {
|
|
517
|
+
for (const fk in flowKeyOrAllParams) {
|
|
518
|
+
if (Object.prototype.hasOwnProperty.call(flowKeyOrAllParams, fk)) {
|
|
519
|
+
this.stepParams[fk] = { ...this.stepParams[fk] || {}, ...flowKeyOrAllParams[fk] };
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
getStepParams(flowKey, stepKey) {
|
|
525
|
+
var _a;
|
|
526
|
+
if (flowKey && stepKey) {
|
|
527
|
+
return (_a = this.stepParams[flowKey]) == null ? void 0 : _a[stepKey];
|
|
528
|
+
}
|
|
529
|
+
if (flowKey) {
|
|
530
|
+
return this.stepParams[flowKey];
|
|
531
|
+
}
|
|
532
|
+
return this.stepParams;
|
|
533
|
+
}
|
|
534
|
+
async applyFlow(flowKey, inputArgs, runId) {
|
|
535
|
+
const currentFlowEngine = this.flowEngine;
|
|
536
|
+
if (!currentFlowEngine) {
|
|
537
|
+
console.warn("FlowEngine not available on this model for applyFlow. Check and model.flowEngine setup.");
|
|
538
|
+
return Promise.reject(new Error("FlowEngine not available for applyFlow. Please set flowEngine on the model."));
|
|
539
|
+
}
|
|
540
|
+
const isFork = this.isFork === true;
|
|
541
|
+
const target = this;
|
|
542
|
+
console.log(
|
|
543
|
+
`[FlowModel] applyFlow: uid=${this.uid}, flowKey=${flowKey}, isFork=${isFork}, cleanRun=${this.cleanRun}, targetIsFork=${(target == null ? void 0 : target.isFork) === true}`
|
|
544
|
+
);
|
|
545
|
+
return currentFlowEngine.executor.runFlow(target, flowKey, inputArgs, runId);
|
|
546
|
+
}
|
|
547
|
+
async _dispatchEvent(eventName, inputArgs) {
|
|
548
|
+
const currentFlowEngine = this.flowEngine;
|
|
549
|
+
if (!currentFlowEngine) {
|
|
550
|
+
console.warn("FlowEngine not available on this model for dispatchEvent. Please set flowEngine on the model.");
|
|
551
|
+
return;
|
|
552
|
+
}
|
|
553
|
+
const isFork = this.isFork === true;
|
|
554
|
+
const target = this;
|
|
555
|
+
console.log(
|
|
556
|
+
`[FlowModel] dispatchEvent: uid=${this.uid}, event=${eventName}, isFork=${isFork}, cleanRun=${this.cleanRun}, targetIsFork=${(target == null ? void 0 : target.isFork) === true}`
|
|
557
|
+
);
|
|
558
|
+
await currentFlowEngine.executor.dispatchEvent(target, eventName, inputArgs);
|
|
559
|
+
}
|
|
560
|
+
async dispatchEvent(eventName, inputArgs, options) {
|
|
561
|
+
if (options == null ? void 0 : options.debounce) {
|
|
562
|
+
return this._dispatchEventWithDebounce(eventName, inputArgs);
|
|
563
|
+
}
|
|
564
|
+
return this._dispatchEvent(eventName, inputArgs);
|
|
565
|
+
}
|
|
566
|
+
/**
|
|
567
|
+
* 获取所有自动应用流程定义(保持 getFlows 的顺序,即按 sort 排序)
|
|
568
|
+
* @returns {FlowDefinition[]} 自动应用流程定义数组(已按 sort 排序)
|
|
569
|
+
*/
|
|
570
|
+
getAutoFlows() {
|
|
571
|
+
const allFlows = this.getFlows();
|
|
572
|
+
const autoFlows = Array.from(allFlows.values()).filter((flow) => {
|
|
573
|
+
if (flow.on) {
|
|
574
|
+
return false;
|
|
575
|
+
}
|
|
576
|
+
if (flow.manual === true) {
|
|
577
|
+
return false;
|
|
578
|
+
}
|
|
579
|
+
return true;
|
|
580
|
+
});
|
|
581
|
+
return autoFlows;
|
|
582
|
+
}
|
|
583
|
+
/**
|
|
584
|
+
* 自动流程执行前钩子。
|
|
585
|
+
* 子类可覆盖;可抛出 FlowExitException 提前终止。
|
|
586
|
+
*/
|
|
587
|
+
async onBeforeAutoFlows(inputArgs) {
|
|
588
|
+
}
|
|
589
|
+
/**
|
|
590
|
+
* 自动流程执行后钩子。
|
|
591
|
+
* 子类可覆盖。
|
|
592
|
+
*/
|
|
593
|
+
async onAfterAutoFlows(results, inputArgs) {
|
|
594
|
+
}
|
|
595
|
+
/**
|
|
596
|
+
* 自动流程错误钩子。
|
|
597
|
+
* 子类可覆盖。
|
|
598
|
+
*/
|
|
599
|
+
async onAutoFlowsError(error, inputArgs) {
|
|
600
|
+
}
|
|
601
|
+
useHooksBeforeRender() {
|
|
602
|
+
}
|
|
603
|
+
async applyAutoFlows(...args) {
|
|
604
|
+
var _a, _b;
|
|
605
|
+
const [inputArgs, useCache = true] = args;
|
|
606
|
+
const cacheKey = useCache ? import_flowEngine.FlowEngine.generateApplyFlowCacheKey(this["forkId"] ?? "autoFlow", "all", this.uid) : null;
|
|
607
|
+
if (!import_lodash.default.isEqual(inputArgs, (_a = this._lastAutoRunParams) == null ? void 0 : _a[0]) && cacheKey) {
|
|
608
|
+
this.flowEngine.applyFlowCache.delete(cacheKey);
|
|
609
|
+
}
|
|
610
|
+
this._lastAutoRunParams = args;
|
|
611
|
+
try {
|
|
612
|
+
await this.onBeforeAutoFlows(inputArgs);
|
|
613
|
+
} catch (error) {
|
|
614
|
+
if (error instanceof import_utils.FlowExitException) {
|
|
615
|
+
(_b = this.context.logger) == null ? void 0 : _b.debug(`[FlowModel.applyAutoFlows] ${error.message}`);
|
|
616
|
+
return [];
|
|
617
|
+
}
|
|
618
|
+
try {
|
|
619
|
+
await this.onAutoFlowsError(error, inputArgs);
|
|
620
|
+
} catch (_2) {
|
|
621
|
+
}
|
|
622
|
+
throw error;
|
|
623
|
+
}
|
|
624
|
+
let results = [];
|
|
625
|
+
try {
|
|
626
|
+
results = await this.flowEngine.executor.runAutoFlows(this, inputArgs, useCache);
|
|
627
|
+
} catch (error) {
|
|
628
|
+
try {
|
|
629
|
+
await this.onAutoFlowsError(error, inputArgs);
|
|
630
|
+
} catch (_2) {
|
|
631
|
+
}
|
|
632
|
+
throw error;
|
|
633
|
+
}
|
|
634
|
+
try {
|
|
635
|
+
await this.onAfterAutoFlows(results, inputArgs);
|
|
636
|
+
} catch (error) {
|
|
637
|
+
try {
|
|
638
|
+
await this.onAutoFlowsError(error, inputArgs);
|
|
639
|
+
} catch (_2) {
|
|
640
|
+
}
|
|
641
|
+
throw error;
|
|
642
|
+
}
|
|
643
|
+
return results;
|
|
644
|
+
}
|
|
645
|
+
/**
|
|
646
|
+
* 智能检测是否应该跳过响应式包装
|
|
647
|
+
* 说明:
|
|
648
|
+
* - 仅基于标记判断,不会执行 render,避免出现“预调用 render”带来的副作用和双调用问题。
|
|
649
|
+
* - 当子类需要返回函数(如表格列的单元格渲染器),应在子类上设置静态属性 `renderReturnsFunction = true`。
|
|
650
|
+
*/
|
|
651
|
+
shouldSkipReactiveWrapping() {
|
|
652
|
+
if (this.render.__isReactiveWrapped) {
|
|
653
|
+
return true;
|
|
654
|
+
}
|
|
655
|
+
const Cls = this.constructor;
|
|
656
|
+
if (Cls.renderMode === "renderFunction" /* RenderFunction */) {
|
|
657
|
+
return true;
|
|
658
|
+
}
|
|
659
|
+
return false;
|
|
660
|
+
}
|
|
661
|
+
/**
|
|
662
|
+
* 设置 render 方法的响应式包装
|
|
663
|
+
* @private
|
|
664
|
+
*/
|
|
665
|
+
setupReactiveRender() {
|
|
666
|
+
if (typeof this.render !== "function") {
|
|
667
|
+
return;
|
|
668
|
+
}
|
|
669
|
+
try {
|
|
670
|
+
const originalRender = this.render;
|
|
671
|
+
this._originalRender = originalRender;
|
|
672
|
+
if (typeof originalRender !== "function") {
|
|
673
|
+
console.error(`FlowModel ${this.constructor.name}: original render method is not a function`, originalRender);
|
|
674
|
+
return;
|
|
675
|
+
}
|
|
676
|
+
if (this.shouldSkipReactiveWrapping()) {
|
|
677
|
+
const wrappedNonReactive = /* @__PURE__ */ __name(function() {
|
|
678
|
+
var _a, _b, _c;
|
|
679
|
+
const isConfigMode = !!((_b = (_a = this == null ? void 0 : this.flowEngine) == null ? void 0 : _a.flowSettings) == null ? void 0 : _b.enabled);
|
|
680
|
+
if (this.hidden) {
|
|
681
|
+
if (!isConfigMode) return null;
|
|
682
|
+
const rendered = (_c = this.renderHiddenInConfig) == null ? void 0 : _c.call(this);
|
|
683
|
+
const Cls = this.constructor;
|
|
684
|
+
const returnsFunction = Cls.renderMode === "renderFunction" /* RenderFunction */;
|
|
685
|
+
return returnsFunction ? typeof rendered === "function" ? rendered : () => rendered : rendered;
|
|
686
|
+
}
|
|
687
|
+
return originalRender.call(this);
|
|
688
|
+
}, "wrappedNonReactive");
|
|
689
|
+
wrappedNonReactive.__originalRender = originalRender;
|
|
690
|
+
this.render = wrappedNonReactive;
|
|
691
|
+
return;
|
|
692
|
+
}
|
|
693
|
+
const createReactiveWrapper = /* @__PURE__ */ __name((modelInstance) => {
|
|
694
|
+
const ReactiveWrapper = (0, import_reactive_react.observer)(() => {
|
|
695
|
+
var _a, _b, _c;
|
|
696
|
+
const renderTarget = modelInstance;
|
|
697
|
+
if (renderTarget !== modelInstance && (renderTarget == null ? void 0 : renderTarget.localProps) !== void 0) {
|
|
698
|
+
renderTarget.localProps;
|
|
699
|
+
modelInstance.props;
|
|
700
|
+
} else {
|
|
701
|
+
modelInstance.props;
|
|
702
|
+
}
|
|
703
|
+
import_react.default.useEffect(() => {
|
|
704
|
+
if (typeof renderTarget.onMount === "function") {
|
|
705
|
+
renderTarget.onMount();
|
|
706
|
+
}
|
|
707
|
+
return () => {
|
|
708
|
+
if (typeof renderTarget.onUnmount === "function") {
|
|
709
|
+
renderTarget.onUnmount();
|
|
710
|
+
}
|
|
711
|
+
};
|
|
712
|
+
}, [renderTarget]);
|
|
713
|
+
const isConfigMode = !!((_b = (_a = modelInstance == null ? void 0 : modelInstance.flowEngine) == null ? void 0 : _a.flowSettings) == null ? void 0 : _b.enabled);
|
|
714
|
+
if (modelInstance.hidden) {
|
|
715
|
+
if (!isConfigMode) {
|
|
716
|
+
return null;
|
|
717
|
+
}
|
|
718
|
+
return (_c = modelInstance.renderHiddenInConfig) == null ? void 0 : _c.call(modelInstance);
|
|
719
|
+
}
|
|
720
|
+
return originalRender.call(renderTarget);
|
|
721
|
+
});
|
|
722
|
+
ReactiveWrapper.displayName = `ReactiveWrapper(${modelInstance.constructor.name})`;
|
|
723
|
+
return ReactiveWrapper;
|
|
724
|
+
}, "createReactiveWrapper");
|
|
725
|
+
const wrappedRender = /* @__PURE__ */ __name(function() {
|
|
726
|
+
if (!this._reactiveWrapperCache) {
|
|
727
|
+
this._reactiveWrapperCache = createReactiveWrapper(this);
|
|
728
|
+
}
|
|
729
|
+
return import_react.default.createElement(this._reactiveWrapperCache);
|
|
730
|
+
}, "wrappedRender");
|
|
731
|
+
wrappedRender.__isReactiveWrapped = true;
|
|
732
|
+
wrappedRender.__originalRender = originalRender;
|
|
733
|
+
this.render = wrappedRender;
|
|
734
|
+
} catch (error) {
|
|
735
|
+
console.error(`FlowModel ${this.constructor.name}: Error during render method wrapping:`, error);
|
|
736
|
+
}
|
|
737
|
+
}
|
|
738
|
+
get cleanRun() {
|
|
739
|
+
return true;
|
|
740
|
+
}
|
|
741
|
+
setCleanRun(value) {
|
|
742
|
+
const prev = this._cleanRun;
|
|
743
|
+
this._cleanRun = !!value;
|
|
744
|
+
}
|
|
745
|
+
/**
|
|
746
|
+
* 组件挂载时的生命周期钩子
|
|
747
|
+
* 子类可以重写此方法来添加挂载时的逻辑
|
|
748
|
+
* @protected
|
|
749
|
+
*/
|
|
750
|
+
// eslint-disable-next-line no-empty
|
|
751
|
+
onMount() {
|
|
752
|
+
}
|
|
753
|
+
/**
|
|
754
|
+
* 组件卸载时的生命周期钩子
|
|
755
|
+
* 子类可以重写此方法来添加卸载时的逻辑
|
|
756
|
+
* @protected
|
|
757
|
+
*/
|
|
758
|
+
onUnmount() {
|
|
759
|
+
}
|
|
760
|
+
/**
|
|
761
|
+
* 有权限时的渲染逻辑。
|
|
762
|
+
* 这是一个抽象方法,所有子类都必须实现,用于返回自己的正常 UI。
|
|
763
|
+
*
|
|
764
|
+
* @returns {React.ReactNode} 有权限时的渲染结果
|
|
765
|
+
*/
|
|
766
|
+
render() {
|
|
767
|
+
return /* @__PURE__ */ import_react.default.createElement("div", { ...this.props });
|
|
768
|
+
}
|
|
769
|
+
async rerender() {
|
|
770
|
+
var _a;
|
|
771
|
+
await this.applyAutoFlows((_a = this._lastAutoRunParams) == null ? void 0 : _a[0], false);
|
|
772
|
+
}
|
|
773
|
+
/**
|
|
774
|
+
* 自动流程缓存的作用域标识;fork 实例可覆盖以区分缓存。
|
|
775
|
+
*/
|
|
776
|
+
getAutoFlowCacheScope() {
|
|
777
|
+
return "autoFlow";
|
|
778
|
+
}
|
|
779
|
+
setParent(parent) {
|
|
780
|
+
const isValidParent = parent && (parent.constructor === _FlowModel || (0, import_utils.isInheritedFrom)(parent.constructor, _FlowModel));
|
|
781
|
+
if (!isValidParent) {
|
|
782
|
+
throw new Error("Parent must be an instance of FlowModel.");
|
|
783
|
+
}
|
|
784
|
+
this.parent = parent;
|
|
785
|
+
this._options.parentId = parent.uid;
|
|
786
|
+
if (this._options.delegateToParent !== false) {
|
|
787
|
+
this.context.addDelegate(this.parent.context);
|
|
788
|
+
}
|
|
789
|
+
}
|
|
790
|
+
removeParentDelegate() {
|
|
791
|
+
if (!this.parent) {
|
|
792
|
+
return;
|
|
793
|
+
}
|
|
794
|
+
this.context.removeDelegate(this.parent.context);
|
|
795
|
+
}
|
|
796
|
+
addSubModel(subKey, options) {
|
|
797
|
+
var _a;
|
|
798
|
+
const actualParent = this["master"] || this;
|
|
799
|
+
let model;
|
|
800
|
+
if (options instanceof _FlowModel) {
|
|
801
|
+
const hasParent = !!options.parent;
|
|
802
|
+
const parentUid = (_a = options.parent) == null ? void 0 : _a.uid;
|
|
803
|
+
if (hasParent && parentUid && parentUid !== actualParent.uid) {
|
|
804
|
+
throw new Error("Sub model already has a parent.");
|
|
805
|
+
}
|
|
806
|
+
model = options;
|
|
807
|
+
} else {
|
|
808
|
+
model = actualParent.flowEngine.createModel({
|
|
809
|
+
...options,
|
|
810
|
+
parentId: actualParent.uid,
|
|
811
|
+
subKey,
|
|
812
|
+
subType: "array"
|
|
813
|
+
});
|
|
814
|
+
}
|
|
815
|
+
model.setParent(actualParent);
|
|
816
|
+
const subModels = actualParent.subModels;
|
|
817
|
+
if (!Array.isArray(subModels[subKey])) {
|
|
818
|
+
subModels[subKey] = import_reactive.observable.shallow([]);
|
|
819
|
+
}
|
|
820
|
+
const maxSortIndex = Math.max(...subModels[subKey].map((item) => item.sortIndex || 0), 0);
|
|
821
|
+
model.sortIndex = maxSortIndex + 1;
|
|
822
|
+
subModels[subKey].push(model);
|
|
823
|
+
actualParent.emitter.emit("onSubModelAdded", model);
|
|
824
|
+
return model;
|
|
825
|
+
}
|
|
826
|
+
setSubModel(subKey, options) {
|
|
827
|
+
var _a;
|
|
828
|
+
const actualParent = this["master"] || this;
|
|
829
|
+
let model;
|
|
830
|
+
if (options instanceof _FlowModel) {
|
|
831
|
+
const hasParent = !!options.parent;
|
|
832
|
+
const parentUid = (_a = options.parent) == null ? void 0 : _a.uid;
|
|
833
|
+
if (hasParent && parentUid && parentUid !== actualParent.uid) {
|
|
834
|
+
throw new Error("Sub model already has a parent.");
|
|
835
|
+
}
|
|
836
|
+
model = options;
|
|
837
|
+
} else {
|
|
838
|
+
model = actualParent.flowEngine.createModel({
|
|
839
|
+
...options,
|
|
840
|
+
parentId: actualParent.uid,
|
|
841
|
+
subKey,
|
|
842
|
+
subType: "object"
|
|
843
|
+
});
|
|
844
|
+
}
|
|
845
|
+
model.setParent(actualParent);
|
|
846
|
+
actualParent.subModels[subKey] = model;
|
|
847
|
+
actualParent.emitter.emit("onSubModelAdded", model);
|
|
848
|
+
return model;
|
|
849
|
+
}
|
|
850
|
+
filterSubModels(subKey, callback) {
|
|
851
|
+
const model = this.subModels[subKey];
|
|
852
|
+
if (!model) {
|
|
853
|
+
return [];
|
|
854
|
+
}
|
|
855
|
+
const results = [];
|
|
856
|
+
import_lodash.default.castArray(model).sort((a, b) => (a.sortIndex || 0) - (b.sortIndex || 0)).forEach((item, index) => {
|
|
857
|
+
const result = callback(item, index);
|
|
858
|
+
if (result) {
|
|
859
|
+
results.push(item);
|
|
860
|
+
}
|
|
861
|
+
});
|
|
862
|
+
return results;
|
|
863
|
+
}
|
|
864
|
+
mapSubModels(subKey, callback) {
|
|
865
|
+
const model = this.subModels[subKey];
|
|
866
|
+
if (!model) {
|
|
867
|
+
return [];
|
|
868
|
+
}
|
|
869
|
+
const results = [];
|
|
870
|
+
import_lodash.default.castArray(model).sort((a, b) => (a.sortIndex || 0) - (b.sortIndex || 0)).forEach((item, index) => {
|
|
871
|
+
const result = callback(item, index);
|
|
872
|
+
results.push(result);
|
|
873
|
+
});
|
|
874
|
+
return results;
|
|
875
|
+
}
|
|
876
|
+
hasSubModel(subKey) {
|
|
877
|
+
const subModel = this.subModels[subKey];
|
|
878
|
+
if (!subModel) {
|
|
879
|
+
return false;
|
|
880
|
+
}
|
|
881
|
+
return import_lodash.default.castArray(subModel).length > 0;
|
|
882
|
+
}
|
|
883
|
+
findSubModel(subKey, callback) {
|
|
884
|
+
const model = this.subModels[subKey];
|
|
885
|
+
if (!model) {
|
|
886
|
+
return null;
|
|
887
|
+
}
|
|
888
|
+
return import_lodash.default.castArray(model).find((item) => {
|
|
889
|
+
return callback(item);
|
|
890
|
+
}) || null;
|
|
891
|
+
}
|
|
892
|
+
createRootModel(options) {
|
|
893
|
+
return this.flowEngine.createModel(options);
|
|
894
|
+
}
|
|
895
|
+
async applySubModelsAutoFlows(subKey, inputArgs, shared) {
|
|
896
|
+
await Promise.all(
|
|
897
|
+
this.mapSubModels(subKey, async (sub) => {
|
|
898
|
+
await sub.applyAutoFlows(inputArgs);
|
|
899
|
+
})
|
|
900
|
+
);
|
|
901
|
+
}
|
|
902
|
+
/**
|
|
903
|
+
* 创建一个 fork 实例,实现"一份数据(master)多视图(fork)"的能力。
|
|
904
|
+
* @param {IModelComponentProps} [localProps={}] fork 专属的局部 props,优先级高于 master.props
|
|
905
|
+
* @param {string} [key] 可选的 key,用于复用 fork 实例。如果提供了 key,会尝试复用已存在的 fork
|
|
906
|
+
* @returns {ForkFlowModel<this>} 创建的 fork 实例
|
|
907
|
+
*/
|
|
908
|
+
createFork(localProps, key, options) {
|
|
909
|
+
if (key) {
|
|
910
|
+
const cachedFork = this.forkCache.get(key);
|
|
911
|
+
if (cachedFork && !cachedFork.disposed) {
|
|
912
|
+
cachedFork.setProps(localProps || {});
|
|
913
|
+
return cachedFork;
|
|
914
|
+
}
|
|
915
|
+
}
|
|
916
|
+
const forkId = this.forks.size;
|
|
917
|
+
const fork = new import_forkFlowModel.ForkFlowModel(this, localProps, forkId);
|
|
918
|
+
if ((options == null ? void 0 : options.register) !== false) {
|
|
919
|
+
this.forks.add(fork);
|
|
920
|
+
}
|
|
921
|
+
if (key && (options == null ? void 0 : options.register) !== false) {
|
|
922
|
+
this.forkCache.set(key, fork);
|
|
923
|
+
}
|
|
924
|
+
return fork;
|
|
925
|
+
}
|
|
926
|
+
clearForks() {
|
|
927
|
+
var _a;
|
|
928
|
+
console.log(`FlowModel ${this.uid} clearing all forks.`);
|
|
929
|
+
if ((_a = this.forks) == null ? void 0 : _a.size) {
|
|
930
|
+
this.forks.forEach((fork) => fork.dispose());
|
|
931
|
+
this.forks.clear();
|
|
932
|
+
}
|
|
933
|
+
this.forkCache.clear();
|
|
934
|
+
}
|
|
935
|
+
getFork(key) {
|
|
936
|
+
return this.forkCache.get(key);
|
|
937
|
+
}
|
|
938
|
+
/**
|
|
939
|
+
* 移动当前模型到目标模型的位置
|
|
940
|
+
* @param {FlowModel} targetModel 目标模型
|
|
941
|
+
* @param {PersistOptions} [options] 可选的持久化选项
|
|
942
|
+
* @returns {boolean} 是否成功移动
|
|
943
|
+
*/
|
|
944
|
+
moveTo(targetModel, options) {
|
|
945
|
+
if (!this.flowEngine) {
|
|
946
|
+
throw new Error("FlowEngine is not set on this model. Please set flowEngine before saving.");
|
|
947
|
+
}
|
|
948
|
+
return this.flowEngine.moveModel(this.uid, targetModel.uid, options);
|
|
949
|
+
}
|
|
950
|
+
remove() {
|
|
951
|
+
if (!this.flowEngine) {
|
|
952
|
+
throw new Error("FlowEngine is not set on this model. Please set flowEngine before saving.");
|
|
953
|
+
}
|
|
954
|
+
this.observerDispose();
|
|
955
|
+
this.invalidateAutoFlowCache(true);
|
|
956
|
+
return this.flowEngine.removeModel(this.uid);
|
|
957
|
+
}
|
|
958
|
+
async save() {
|
|
959
|
+
if (!this.flowEngine) {
|
|
960
|
+
throw new Error("FlowEngine is not set on this model. Please set flowEngine before saving.");
|
|
961
|
+
}
|
|
962
|
+
return this.flowEngine.saveModel(this);
|
|
963
|
+
}
|
|
964
|
+
async saveStepParams() {
|
|
965
|
+
return this.flowEngine.saveModel(this, { onlyStepParams: true });
|
|
966
|
+
}
|
|
967
|
+
async destroy() {
|
|
968
|
+
if (!this.flowEngine) {
|
|
969
|
+
throw new Error("FlowEngine is not set on this model. Please set flowEngine before deleting.");
|
|
970
|
+
}
|
|
971
|
+
this.observerDispose();
|
|
972
|
+
this.invalidateAutoFlowCache(true);
|
|
973
|
+
return this.flowEngine.destroyModel(this.uid);
|
|
974
|
+
}
|
|
975
|
+
/**
|
|
976
|
+
* @deprecated
|
|
977
|
+
* 打开步骤设置对话框
|
|
978
|
+
* 用于配置流程中特定步骤的参数和设置
|
|
979
|
+
* @param {string} flowKey 流程的唯一标识符
|
|
980
|
+
* @param {string} stepKey 步骤的唯一标识符
|
|
981
|
+
* @returns {void}
|
|
982
|
+
*/
|
|
983
|
+
openStepSettingsDialog(flowKey, stepKey) {
|
|
984
|
+
var _a;
|
|
985
|
+
const flow = this.getFlow(flowKey);
|
|
986
|
+
const step = (_a = flow == null ? void 0 : flow.steps) == null ? void 0 : _a[stepKey];
|
|
987
|
+
if (!flow || !step) {
|
|
988
|
+
console.error(`Flow ${flowKey} or step ${stepKey} not found`);
|
|
989
|
+
return;
|
|
990
|
+
}
|
|
991
|
+
const ctx = new import_flowContext.FlowRuntimeContext(this, flowKey, "settings");
|
|
992
|
+
(0, import_utils.setupRuntimeContextSteps)(ctx, flow.steps, this, flowKey);
|
|
993
|
+
ctx.defineProperty("currentStep", { value: step });
|
|
994
|
+
return (0, import_StepSettingsDialog.openStepSettingsDialog)({
|
|
995
|
+
model: this,
|
|
996
|
+
flowKey,
|
|
997
|
+
stepKey,
|
|
998
|
+
ctx
|
|
999
|
+
});
|
|
1000
|
+
}
|
|
1001
|
+
/**
|
|
1002
|
+
* 配置必填步骤参数
|
|
1003
|
+
* 用于在一个分步表单中配置所有需要参数的步骤
|
|
1004
|
+
* @param {number | string} [dialogWidth=800] 对话框宽度,默认为800
|
|
1005
|
+
* @param {string} [dialogTitle='步骤参数配置'] 对话框标题,默认为'步骤参数配置'
|
|
1006
|
+
* @returns {Promise<any>} 返回表单提交的值
|
|
1007
|
+
*/
|
|
1008
|
+
async configureRequiredSteps(dialogWidth, dialogTitle) {
|
|
1009
|
+
return (0, import_StepRequiredSettingsDialog.openRequiredParamsStepFormDialog)({
|
|
1010
|
+
model: this,
|
|
1011
|
+
dialogWidth,
|
|
1012
|
+
dialogTitle
|
|
1013
|
+
});
|
|
1014
|
+
}
|
|
1015
|
+
/**
|
|
1016
|
+
* @deprecated
|
|
1017
|
+
* @param dialogWidth
|
|
1018
|
+
* @param dialogTitle
|
|
1019
|
+
* @returns
|
|
1020
|
+
*/
|
|
1021
|
+
async openPresetStepSettingsDialog(dialogWidth, dialogTitle) {
|
|
1022
|
+
return this.configureRequiredSteps(dialogWidth, dialogTitle);
|
|
1023
|
+
}
|
|
1024
|
+
async openFlowStepSettingsDialog(options) {
|
|
1025
|
+
}
|
|
1026
|
+
get translate() {
|
|
1027
|
+
return this.flowEngine.translate.bind(this.flowEngine);
|
|
1028
|
+
}
|
|
1029
|
+
// TODO: 不完整,需要考虑 sub-model 的情况
|
|
1030
|
+
serialize() {
|
|
1031
|
+
const data = {
|
|
1032
|
+
uid: this.uid,
|
|
1033
|
+
...import_lodash.default.omit(this._options, ["flowEngine"]),
|
|
1034
|
+
stepParams: this.stepParams,
|
|
1035
|
+
sortIndex: this.sortIndex
|
|
1036
|
+
};
|
|
1037
|
+
const subModels = this.subModels;
|
|
1038
|
+
for (const subModelKey in subModels) {
|
|
1039
|
+
data.subModels = data.subModels || {};
|
|
1040
|
+
if (Array.isArray(subModels[subModelKey])) {
|
|
1041
|
+
data.subModels[subModelKey] = subModels[subModelKey].map((model, index) => ({
|
|
1042
|
+
...model.serialize(),
|
|
1043
|
+
sortIndex: index
|
|
1044
|
+
}));
|
|
1045
|
+
} else if (subModels[subModelKey] instanceof _FlowModel) {
|
|
1046
|
+
data.subModels[subModelKey] = subModels[subModelKey].serialize();
|
|
1047
|
+
}
|
|
1048
|
+
}
|
|
1049
|
+
for (const [key, flow] of this.flowRegistry.getFlows()) {
|
|
1050
|
+
data["flowRegistry"] = data["flowRegistry"] || {};
|
|
1051
|
+
data["flowRegistry"][key] = flow.toData();
|
|
1052
|
+
}
|
|
1053
|
+
return data;
|
|
1054
|
+
}
|
|
1055
|
+
/**
|
|
1056
|
+
* Opens the flow settings dialog for this flow model.
|
|
1057
|
+
* @param options - Configuration options for opening flow settings, excluding the model property
|
|
1058
|
+
* @returns A promise that resolves when the flow settings dialog is opened
|
|
1059
|
+
*/
|
|
1060
|
+
async openFlowSettings(options) {
|
|
1061
|
+
return this.flowEngine.flowSettings.open({
|
|
1062
|
+
model: this,
|
|
1063
|
+
...options
|
|
1064
|
+
});
|
|
1065
|
+
}
|
|
1066
|
+
// =============================
|
|
1067
|
+
// Dynamic flows (disabled)
|
|
1068
|
+
// The following APIs are kept as comments to preserve context
|
|
1069
|
+
// =============================
|
|
1070
|
+
/*
|
|
1071
|
+
async openDynamicFlowsEditor(
|
|
1072
|
+
options?: Omit<FlowSettingsOpenOptions, 'model' | 'flowKey' | 'flowKeys' | 'stepKey' | 'preset'>,
|
|
1073
|
+
) {
|
|
1074
|
+
return this.flowEngine.flowSettings.openDynamicFlowsEditor({
|
|
1075
|
+
model: this,
|
|
1076
|
+
...options,
|
|
1077
|
+
});
|
|
1078
|
+
}
|
|
1079
|
+
|
|
1080
|
+
#dynamicFlows: FlowDefinition[] = [];
|
|
1081
|
+
|
|
1082
|
+
async loadDynamicFlows(): Promise<FlowDefinition[]> {
|
|
1083
|
+
return JSON.parse(localStorage.getItem('DYNAMIC_FLOWS') || '[]');
|
|
1084
|
+
}
|
|
1085
|
+
|
|
1086
|
+
async saveDynamicFlows(): Promise<void> {
|
|
1087
|
+
localStorage.setItem('DYNAMIC_FLOWS', JSON.stringify(this.#dynamicFlows));
|
|
1088
|
+
}
|
|
1089
|
+
|
|
1090
|
+
setDynamicFlows(flows: FlowDefinition[]): void {
|
|
1091
|
+
this.#dynamicFlows = flows;
|
|
1092
|
+
flows.forEach((flow) => {
|
|
1093
|
+
// @ts-ignore
|
|
1094
|
+
this.constructor.registerFlow(flow);
|
|
1095
|
+
});
|
|
1096
|
+
}
|
|
1097
|
+
|
|
1098
|
+
getDynamicFlows(): FlowDefinitionOptions[] {
|
|
1099
|
+
return this.#dynamicFlows;
|
|
1100
|
+
}
|
|
1101
|
+
*/
|
|
1102
|
+
};
|
|
1103
|
+
_flowContext = new WeakMap();
|
|
1104
|
+
__name(_FlowModel, "FlowModel");
|
|
1105
|
+
/**
|
|
1106
|
+
* 声明渲染模式:
|
|
1107
|
+
* - 'renderElement': render 返回 React 节点,框架会用 observer 包装以获得响应式;
|
|
1108
|
+
* - 'renderFunction': render 返回渲染函数(例如表格单元格渲染器),不做包装也不预调用;
|
|
1109
|
+
*/
|
|
1110
|
+
__publicField(_FlowModel, "renderMode", "reactElement" /* ReactElement */);
|
|
1111
|
+
let FlowModel = _FlowModel;
|
|
1112
|
+
const _ErrorFlowModel = class _ErrorFlowModel extends FlowModel {
|
|
1113
|
+
errorMessage;
|
|
1114
|
+
setErrorMessage(msg) {
|
|
1115
|
+
this.errorMessage = msg;
|
|
1116
|
+
}
|
|
1117
|
+
render() {
|
|
1118
|
+
return /* @__PURE__ */ import_react.default.createElement(import_lib.Typography.Text, { type: "danger" }, this.errorMessage);
|
|
1119
|
+
}
|
|
1120
|
+
};
|
|
1121
|
+
__name(_ErrorFlowModel, "ErrorFlowModel");
|
|
1122
|
+
let ErrorFlowModel = _ErrorFlowModel;
|
|
1123
|
+
function defineFlow(definition) {
|
|
1124
|
+
return definition;
|
|
1125
|
+
}
|
|
1126
|
+
__name(defineFlow, "defineFlow");
|
|
1127
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
1128
|
+
0 && (module.exports = {
|
|
1129
|
+
ErrorFlowModel,
|
|
1130
|
+
FlowModel,
|
|
1131
|
+
ModelRenderMode,
|
|
1132
|
+
defineFlow
|
|
1133
|
+
});
|