@nocobase/flow-engine 2.0.0-alpha.2 → 2.0.0-alpha.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/BlockScopedFlowEngine.d.ts +23 -0
- package/lib/BlockScopedFlowEngine.js +90 -0
- package/lib/FlowContextProvider.d.ts +2 -2
- package/lib/FlowContextProvider.js +3 -3
- package/lib/FlowDefinition.d.ts +2 -2
- package/lib/JSRunner.js +3 -0
- package/lib/ViewScopedFlowEngine.d.ts +1 -1
- package/lib/components/FieldModelRenderer.js +10 -4
- package/lib/components/FieldSkeleton.d.ts +10 -0
- package/lib/components/FieldSkeleton.js +64 -0
- package/lib/components/FlowContextSelector.js +7 -2
- package/lib/components/FlowModelRenderer.d.ts +2 -5
- package/lib/components/FlowModelRenderer.js +16 -47
- package/lib/components/FormItem.js +5 -1
- package/lib/{runjs-context/snippets/global/requireAsync.snippet.d.ts → components/dnd/findModelUidPosition.d.ts} +4 -7
- package/lib/{runjs-context/snippets/scene/jsblock/jsx-mount.snippet.js → components/dnd/findModelUidPosition.js} +23 -19
- package/lib/components/dnd/gridDragPlanner.d.ts +130 -0
- package/lib/components/dnd/gridDragPlanner.js +497 -0
- package/lib/components/dnd/index.d.ts +2 -2
- package/lib/components/dnd/index.js +5 -5
- package/lib/components/settings/wrappers/contextual/StepSettingsDialog.js +7 -1
- package/lib/components/variables/VariableInput.js +16 -2
- package/lib/components/variables/VariableTag.js +43 -2
- package/lib/components/variables/types.d.ts +2 -0
- package/lib/data-source/index.d.ts +12 -4
- package/lib/data-source/index.js +18 -12
- package/lib/data-source/sortCollectionsByInherits.d.ts +10 -0
- package/lib/data-source/sortCollectionsByInherits.js +71 -0
- package/lib/executor/FlowExecutor.d.ts +4 -5
- package/lib/executor/FlowExecutor.js +122 -94
- package/lib/flowContext.d.ts +33 -5
- package/lib/flowContext.js +145 -74
- package/lib/flowEngine.d.ts +8 -1
- package/lib/flowEngine.js +12 -2
- package/lib/flowSettings.d.ts +2 -1
- package/lib/flowSettings.js +7 -3
- package/lib/hooks/useApplyAutoFlows.js +2 -1
- package/lib/index.d.ts +6 -1
- package/lib/index.js +29 -3
- package/lib/models/CollectionFieldModel.d.ts +2 -0
- package/lib/models/CollectionFieldModel.js +43 -3
- package/lib/models/flowModel.d.ts +28 -29
- package/lib/models/flowModel.js +110 -88
- package/lib/models/forkFlowModel.d.ts +2 -2
- package/lib/models/forkFlowModel.js +29 -6
- package/lib/provider.d.ts +3 -1
- package/lib/provider.js +7 -5
- package/lib/resources/multiRecordResource.js +2 -0
- package/lib/resources/singleRecordResource.js +1 -0
- package/lib/runjs-context/contexts/FormJSFieldItemRunJSContext.d.ts +1 -6
- package/lib/runjs-context/contexts/FormJSFieldItemRunJSContext.js +27 -20
- package/lib/runjs-context/contexts/JSBlockRunJSContext.d.ts +1 -6
- package/lib/runjs-context/contexts/JSBlockRunJSContext.js +46 -33
- package/lib/runjs-context/contexts/JSCollectionActionRunJSContext.d.ts +1 -2
- package/lib/runjs-context/contexts/JSCollectionActionRunJSContext.js +14 -15
- package/lib/runjs-context/contexts/{LinkageRunJSContext.d.ts → JSColumnRunJSContext.d.ts} +6 -3
- package/lib/runjs-context/contexts/JSColumnRunJSContext.js +78 -0
- package/lib/runjs-context/contexts/JSFieldRunJSContext.d.ts +1 -6
- package/lib/runjs-context/contexts/JSFieldRunJSContext.js +28 -24
- package/lib/runjs-context/contexts/JSItemRunJSContext.d.ts +1 -6
- package/lib/runjs-context/contexts/JSItemRunJSContext.js +24 -20
- package/lib/runjs-context/contexts/JSRecordActionRunJSContext.d.ts +1 -2
- package/lib/runjs-context/contexts/JSRecordActionRunJSContext.js +16 -17
- package/lib/runjs-context/contexts/base.d.ts +9 -0
- package/lib/runjs-context/contexts/base.js +169 -0
- package/lib/runjs-context/helpers.d.ts +5 -2
- package/lib/runjs-context/helpers.js +36 -27
- package/lib/runjs-context/registry.d.ts +7 -4
- package/lib/runjs-context/registry.js +10 -42
- package/lib/runjs-context/setup.d.ts +9 -0
- package/lib/runjs-context/setup.js +82 -0
- package/lib/runjs-context/snippets/global/{copy-record-json.snippet.js → api-request.snippet.js} +25 -10
- package/lib/runjs-context/snippets/global/clipboard-copy-text.snippet.js +61 -0
- package/lib/runjs-context/snippets/global/{view-navigation-push.snippet.js → import-esm.snippet.js} +26 -12
- package/lib/runjs-context/snippets/global/message-error.snippet.js +6 -0
- package/lib/runjs-context/snippets/global/message-success.snippet.js +6 -0
- package/lib/runjs-context/snippets/global/notification-open.snippet.d.ts +3 -8
- package/lib/runjs-context/snippets/global/notification-open.snippet.js +8 -1
- package/lib/runjs-context/snippets/global/open-view-dialog.snippet.js +10 -3
- package/lib/runjs-context/snippets/global/open-view-drawer.snippet.js +10 -3
- package/lib/runjs-context/snippets/global/query-selector.snippet.js +53 -0
- package/lib/runjs-context/snippets/global/require-amd.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/global/{requireAsync.snippet.js → require-amd.snippet.js} +16 -13
- package/lib/runjs-context/snippets/global/window-open.snippet.d.ts +3 -8
- package/lib/runjs-context/snippets/global/window-open.snippet.js +8 -1
- package/lib/runjs-context/snippets/index.d.ts +14 -3
- package/lib/runjs-context/snippets/index.js +160 -40
- package/lib/runjs-context/snippets/scene/block/add-event-listener.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/{jsblock → block}/add-event-listener.snippet.js +11 -2
- package/lib/runjs-context/snippets/scene/block/api-fetch-render-list.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/block/api-fetch-render-list.snippet.js +64 -0
- package/lib/runjs-context/snippets/scene/block/chartjs-bar.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/block/chartjs-bar.snippet.js +99 -0
- package/lib/runjs-context/snippets/{libs → scene/block}/echarts-init.snippet.js +24 -7
- package/lib/runjs-context/snippets/scene/block/render-button-handler.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/{jsblock → block}/render-button-handler.snippet.js +12 -6
- 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 +72 -0
- 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 +12 -11
- 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 +100 -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 +85 -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/types.d.ts +15 -3
- package/lib/types.js +4 -3
- package/lib/utils/buildSettingsViewInputArgs.d.ts +19 -0
- package/lib/utils/buildSettingsViewInputArgs.js +75 -0
- package/lib/utils/index.d.ts +3 -2
- package/lib/utils/index.js +5 -2
- package/lib/utils/params-resolvers.js +2 -2
- package/lib/utils/safeGlobals.d.ts +5 -3
- package/lib/utils/safeGlobals.js +40 -0
- package/lib/utils/serverContextParams.d.ts +1 -0
- package/lib/utils/variablesParams.d.ts +9 -5
- package/lib/utils/variablesParams.js +47 -36
- package/lib/views/PageComponent.js +2 -1
- package/lib/views/createViewMeta.d.ts +29 -1
- package/lib/views/createViewMeta.js +321 -72
- package/lib/views/index.d.ts +1 -0
- package/lib/views/index.js +3 -0
- package/lib/views/useDialog.d.ts +8 -8
- package/lib/views/useDialog.js +8 -7
- package/lib/views/useDrawer.d.ts +8 -8
- package/lib/views/useDrawer.js +40 -26
- package/lib/views/usePage.d.ts +8 -8
- package/lib/views/usePage.js +8 -7
- package/package.json +4 -3
- package/src/BlockScopedFlowEngine.ts +86 -0
- package/src/FlowContextProvider.tsx +4 -2
- package/src/JSRunner.ts +3 -0
- package/src/ViewScopedFlowEngine.ts +1 -1
- package/src/__tests__/JSRunner.test.ts +62 -53
- package/src/__tests__/blockScopedFlowEngine.test.ts +154 -0
- package/src/__tests__/flow-engine.test.ts +3 -0
- package/src/__tests__/flowContextCreateJSRunner.test.ts +163 -0
- package/src/__tests__/flowEngine.saveModel.test.ts +4 -0
- package/src/__tests__/flowRunJSContextDefine.test.ts +508 -0
- package/src/__tests__/globalFlowRegistry.test.ts +1 -1
- package/src/__tests__/runjsContext.test.ts +216 -35
- package/src/__tests__/runjsContextImplementations.test.ts +217 -0
- package/src/__tests__/runjsContextRuntime.test.ts +269 -0
- package/src/__tests__/runjsEdgeCases.test.ts +281 -0
- package/src/__tests__/runjsLocales.test.ts +36 -0
- package/src/__tests__/runjsRuntimeFeatures.test.ts +449 -0
- package/src/__tests__/runjsSnippets.test.ts +140 -0
- package/src/__tests__/viewScopedFlowEngine.test.ts +3 -3
- package/src/components/DynamicFlowsEditor.tsx +3 -4
- package/src/components/FieldModelRenderer.tsx +16 -5
- package/src/components/FieldSkeleton.tsx +27 -0
- package/src/components/FlowContextSelector.tsx +6 -2
- package/src/components/FlowModelRenderer.tsx +30 -78
- package/src/components/FormItem.tsx +8 -1
- package/src/components/__tests__/flow-model-render-error-fallback.test.tsx +5 -5
- package/src/components/__tests__/gridDragPlanner.test.ts +494 -0
- package/src/components/dnd/README.md +149 -0
- package/src/components/dnd/findModelUidPosition.ts +26 -0
- package/src/components/dnd/gridDragPlanner.ts +659 -0
- package/src/components/dnd/index.tsx +3 -3
- package/src/components/settings/wrappers/contextual/StepSettingsDialog.tsx +14 -1
- package/src/components/subModel/__tests__/AddSubModelButton.test.tsx +1 -0
- package/src/components/variables/VariableInput.tsx +22 -2
- package/src/components/variables/VariableTag.tsx +54 -2
- package/src/components/variables/types.ts +2 -0
- package/src/data-source/__tests__/sortCollectionsByInherits.test.ts +125 -0
- package/src/data-source/index.ts +16 -10
- package/src/data-source/sortCollectionsByInherits.ts +61 -0
- package/src/executor/FlowExecutor.ts +160 -114
- package/src/executor/__tests__/flowExecutor.test.ts +151 -5
- package/src/flowContext.ts +196 -93
- package/src/flowEngine.ts +13 -2
- package/src/flowSettings.ts +8 -3
- package/src/hooks/useApplyAutoFlows.ts +3 -1
- package/src/index.ts +11 -1
- package/src/models/CollectionFieldModel.tsx +43 -4
- package/src/models/__tests__/flowModel.getFlows.sort.test.ts +4 -4
- package/src/models/__tests__/flowModel.test.ts +218 -95
- package/src/models/flowModel.tsx +146 -122
- package/src/models/forkFlowModel.ts +37 -5
- package/src/provider.tsx +10 -7
- package/src/resources/multiRecordResource.ts +2 -0
- package/src/resources/singleRecordResource.ts +1 -0
- package/src/runjs-context/contexts/FormJSFieldItemRunJSContext.ts +28 -21
- package/src/runjs-context/contexts/JSBlockRunJSContext.ts +46 -34
- package/src/runjs-context/contexts/JSCollectionActionRunJSContext.ts +15 -16
- package/src/runjs-context/contexts/JSColumnRunJSContext.ts +58 -0
- package/src/runjs-context/contexts/JSFieldRunJSContext.ts +30 -25
- package/src/runjs-context/contexts/JSItemRunJSContext.ts +25 -21
- package/src/runjs-context/contexts/JSRecordActionRunJSContext.ts +17 -18
- package/src/runjs-context/contexts/base.ts +155 -0
- package/src/runjs-context/helpers.ts +32 -30
- package/src/runjs-context/registry.ts +16 -47
- package/src/runjs-context/setup.ts +51 -0
- package/src/runjs-context/snippets/global/api-request.snippet.ts +38 -0
- package/src/runjs-context/snippets/global/clipboard-copy-text.snippet.ts +42 -0
- package/src/runjs-context/snippets/global/import-esm.snippet.ts +39 -0
- package/src/runjs-context/snippets/global/message-error.snippet.ts +6 -0
- package/src/runjs-context/snippets/global/message-success.snippet.ts +6 -0
- package/src/runjs-context/snippets/global/notification-open.snippet.ts +11 -1
- package/src/runjs-context/snippets/global/open-view-dialog.snippet.ts +10 -3
- package/src/runjs-context/snippets/global/open-view-drawer.snippet.ts +10 -3
- package/src/runjs-context/snippets/global/query-selector.snippet.ts +34 -0
- package/src/runjs-context/snippets/global/require-amd.snippet.ts +30 -0
- package/src/runjs-context/snippets/global/window-open.snippet.ts +11 -1
- package/src/runjs-context/snippets/index.ts +176 -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/{jsblock → block}/render-button-handler.snippet.ts +15 -6
- 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 +53 -0
- package/src/runjs-context/snippets/scene/{jsblock → block}/render-react.snippet.ts +15 -11
- package/src/runjs-context/snippets/scene/block/render-statistics.snippet.ts +81 -0
- package/src/runjs-context/snippets/scene/block/render-timeline.snippet.ts +66 -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/types.ts +13 -0
- package/src/utils/__tests__/safeGlobals.test.ts +22 -1
- package/src/utils/buildSettingsViewInputArgs.ts +72 -0
- package/src/utils/index.ts +2 -2
- package/src/utils/params-resolvers.ts +1 -1
- package/src/utils/safeGlobals.ts +49 -3
- package/src/utils/serverContextParams.ts +1 -0
- package/src/utils/variablesParams.ts +50 -38
- package/src/views/PageComponent.tsx +1 -1
- package/src/views/createViewMeta.ts +372 -70
- package/src/views/index.tsx +1 -0
- package/src/views/useDialog.tsx +12 -10
- package/src/views/useDrawer.tsx +60 -36
- package/src/views/usePage.tsx +13 -10
- package/lib/components/dnd/getMousePositionOnElement.d.ts +0 -50
- package/lib/components/dnd/getMousePositionOnElement.js +0 -95
- package/lib/components/dnd/moveBlock.d.ts +0 -33
- package/lib/components/dnd/moveBlock.js +0 -302
- 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/api-request-post.snippet.js +0 -42
- package/lib/runjs-context/snippets/global/console-log-ctx.snippet.d.ts +0 -16
- package/lib/runjs-context/snippets/global/console-log-ctx.snippet.js +0 -41
- package/lib/runjs-context/snippets/global/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/global/try-catch-async.snippet.js +0 -44
- 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-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-card.snippet.js +0 -45
- 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/components/dnd/getMousePositionOnElement.ts +0 -115
- package/src/components/dnd/moveBlock.ts +0 -379
- 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-card.snippet.ts +0 -30
- 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
|
@@ -40,11 +40,14 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
40
40
|
var CollectionFieldModel_exports = {};
|
|
41
41
|
__export(CollectionFieldModel_exports, {
|
|
42
42
|
CollectionFieldModel: () => CollectionFieldModel,
|
|
43
|
+
FieldDeletePlaceholder: () => FieldDeletePlaceholder,
|
|
43
44
|
FieldPlaceholder: () => FieldPlaceholder
|
|
44
45
|
});
|
|
45
46
|
module.exports = __toCommonJS(CollectionFieldModel_exports);
|
|
46
47
|
var import_antd = require("antd");
|
|
47
48
|
var import_react = __toESM(require("react"));
|
|
49
|
+
var import_react_i18next = require("react-i18next");
|
|
50
|
+
var import_hooks = require("../hooks");
|
|
48
51
|
var import_utils = require("../utils");
|
|
49
52
|
var import_flowModel = require("./flowModel");
|
|
50
53
|
function FieldPlaceholder() {
|
|
@@ -62,9 +65,40 @@ function FieldPlaceholder() {
|
|
|
62
65
|
));
|
|
63
66
|
}
|
|
64
67
|
__name(FieldPlaceholder, "FieldPlaceholder");
|
|
68
|
+
function FieldDeletePlaceholder() {
|
|
69
|
+
const { t } = (0, import_react_i18next.useTranslation)();
|
|
70
|
+
const model = (0, import_hooks.useFlowModel)();
|
|
71
|
+
const blockModel = model.context.blockModel;
|
|
72
|
+
const dataSource = blockModel.collection.dataSource;
|
|
73
|
+
const collection = blockModel.collection;
|
|
74
|
+
const name = model.fieldPath;
|
|
75
|
+
const nameValue = (0, import_react.useMemo)(() => {
|
|
76
|
+
const dataSourcePrefix = `${t(dataSource.displayName || dataSource.key)} > `;
|
|
77
|
+
const collectionPrefix = collection ? `${t(collection.title) || collection.name || collection.tableName} > ` : "";
|
|
78
|
+
return `${dataSourcePrefix}${collectionPrefix}${name}`;
|
|
79
|
+
}, []);
|
|
80
|
+
return /* @__PURE__ */ import_react.default.createElement(import_antd.Form.Item, null, /* @__PURE__ */ import_react.default.createElement(
|
|
81
|
+
"div",
|
|
82
|
+
{
|
|
83
|
+
style: {
|
|
84
|
+
color: "rgba(0,0,0,0.45)"
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
t(`The {{type}} "{{name}}" may have been deleted. Please remove this {{blockType}}.`, {
|
|
88
|
+
type: t("Field"),
|
|
89
|
+
name: nameValue,
|
|
90
|
+
blockType: t("Field")
|
|
91
|
+
}).replaceAll(">", ">")
|
|
92
|
+
));
|
|
93
|
+
}
|
|
94
|
+
__name(FieldDeletePlaceholder, "FieldDeletePlaceholder");
|
|
65
95
|
const defaultWhen = /* @__PURE__ */ __name(() => true, "defaultWhen");
|
|
66
96
|
const _CollectionFieldModel = class _CollectionFieldModel extends import_flowModel.FlowModel {
|
|
97
|
+
fieldDeleted = false;
|
|
67
98
|
renderHiddenInConfig() {
|
|
99
|
+
if (this.fieldDeleted) {
|
|
100
|
+
return /* @__PURE__ */ import_react.default.createElement(FieldDeletePlaceholder, null);
|
|
101
|
+
}
|
|
68
102
|
return /* @__PURE__ */ import_react.default.createElement(FieldPlaceholder, null);
|
|
69
103
|
}
|
|
70
104
|
get title() {
|
|
@@ -86,11 +120,13 @@ const _CollectionFieldModel = class _CollectionFieldModel extends import_flowMod
|
|
|
86
120
|
return this.fieldPath;
|
|
87
121
|
}, "get")
|
|
88
122
|
});
|
|
89
|
-
this.context.blockModel
|
|
90
|
-
|
|
123
|
+
if (this.context.blockModel) {
|
|
124
|
+
this.context.blockModel.addAppends(this.fieldPath);
|
|
125
|
+
this.context.blockModel.addAppends(this.associationPathName);
|
|
126
|
+
}
|
|
91
127
|
}
|
|
92
128
|
getFieldSettingsInitParams() {
|
|
93
|
-
return this.getStepParams("fieldSettings", "init");
|
|
129
|
+
return this.getStepParams("fieldSettings", "init") || {};
|
|
94
130
|
}
|
|
95
131
|
get fieldPath() {
|
|
96
132
|
return this.getFieldSettingsInitParams().fieldPath;
|
|
@@ -107,6 +143,9 @@ const _CollectionFieldModel = class _CollectionFieldModel extends import_flowMod
|
|
|
107
143
|
}
|
|
108
144
|
}
|
|
109
145
|
static getBindingsByField(ctx, collectionField) {
|
|
146
|
+
if (!collectionField) {
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
110
149
|
const interfaceName = collectionField.interface;
|
|
111
150
|
if (!this.bindings.has(interfaceName)) {
|
|
112
151
|
return [];
|
|
@@ -238,5 +277,6 @@ CollectionFieldModel.registerFlow({
|
|
|
238
277
|
// Annotate the CommonJS export names for ESM import in node:
|
|
239
278
|
0 && (module.exports = {
|
|
240
279
|
CollectionFieldModel,
|
|
280
|
+
FieldDeletePlaceholder,
|
|
241
281
|
FieldPlaceholder
|
|
242
282
|
});
|
|
@@ -18,7 +18,7 @@ import { ModelEventRegistry } from '../event-registry/ModelEventRegistry';
|
|
|
18
18
|
import { GlobalFlowRegistry } from '../flow-registry/GlobalFlowRegistry';
|
|
19
19
|
import { FlowDefinition } from '../FlowDefinition';
|
|
20
20
|
import { FlowSettingsOpenOptions } from '../flowSettings';
|
|
21
|
-
import type { EventDefinition } from '../types';
|
|
21
|
+
import type { EventDefinition, DispatchEventOptions } from '../types';
|
|
22
22
|
import { ForkFlowModel } from './forkFlowModel';
|
|
23
23
|
export declare enum ModelRenderMode {
|
|
24
24
|
ReactElement = "reactElement",
|
|
@@ -42,6 +42,7 @@ export declare class FlowModel<Structure extends DefaultStructure = DefaultStruc
|
|
|
42
42
|
private _options;
|
|
43
43
|
protected _title: string;
|
|
44
44
|
isNew: boolean;
|
|
45
|
+
skeleton: any;
|
|
45
46
|
/**
|
|
46
47
|
* 所有 fork 实例的引用集合。
|
|
47
48
|
* 使用 Set 便于在销毁时主动遍历并调用 dispose,避免悬挂引用。
|
|
@@ -53,7 +54,7 @@ export declare class FlowModel<Structure extends DefaultStructure = DefaultStruc
|
|
|
53
54
|
*/
|
|
54
55
|
private forkCache;
|
|
55
56
|
/**
|
|
56
|
-
* 上一次
|
|
57
|
+
* 上一次 beforeRender 的执行参数
|
|
57
58
|
*/
|
|
58
59
|
private _lastAutoRunParams;
|
|
59
60
|
protected observerDispose: () => void;
|
|
@@ -117,7 +118,11 @@ export declare class FlowModel<Structure extends DefaultStructure = DefaultStruc
|
|
|
117
118
|
setTitle(value: string): void;
|
|
118
119
|
setHidden(value: boolean): void;
|
|
119
120
|
_createSubModels(subModels: Record<string, CreateSubModelOptions | CreateSubModelOptions[]>): void;
|
|
120
|
-
|
|
121
|
+
/**
|
|
122
|
+
* 失效指定事件的流程缓存;未指定 eventName 时,失效当前模型全部事件缓存。
|
|
123
|
+
* - 默认 beforeRender 与其它事件共享同一缓存体系:prefix=`event:${scope}`,flowKey=`eventName`,uid=`model.uid`
|
|
124
|
+
*/
|
|
125
|
+
invalidateFlowCache(eventName?: string, deep?: boolean): void;
|
|
121
126
|
/**
|
|
122
127
|
* 设置FlowEngine实例
|
|
123
128
|
* @param {FlowEngine} flowEngine FlowEngine实例
|
|
@@ -187,45 +192,36 @@ export declare class FlowModel<Structure extends DefaultStructure = DefaultStruc
|
|
|
187
192
|
private _dispatchEvent;
|
|
188
193
|
private _dispatchEventWithDebounce;
|
|
189
194
|
dispatchEvent(eventName: string, inputArgs?: Record<string, any>, options?: {
|
|
190
|
-
/**
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
debounce: boolean;
|
|
194
|
-
}): Promise<void>;
|
|
195
|
+
/** 是否要开启防抖功能 */
|
|
196
|
+
debounce?: boolean;
|
|
197
|
+
} & DispatchEventOptions): Promise<any[]>;
|
|
195
198
|
/**
|
|
196
|
-
*
|
|
197
|
-
*
|
|
199
|
+
* 按事件名获取对应的流程集合(保持 getFlows 的顺序,即按 sort 排序)。
|
|
200
|
+
* - beforeRender 兼容:除显式 on: 'beforeRender' 外,包含未声明 on 且 manual !== true 的流程。
|
|
198
201
|
*/
|
|
199
|
-
|
|
202
|
+
getEventFlows(eventName: string): FlowDefinition[];
|
|
200
203
|
/**
|
|
201
|
-
* 重新执行上一次的
|
|
204
|
+
* 重新执行上一次的 beforeRender,保持参数一致
|
|
202
205
|
* 如果之前没有执行过,则直接跳过
|
|
203
206
|
* 使用 lodash debounce 避免频繁调用
|
|
204
207
|
*/
|
|
205
208
|
private _rerunLastAutoRun;
|
|
206
209
|
/**
|
|
207
|
-
*
|
|
208
|
-
*
|
|
210
|
+
* 通用事件分发钩子:开始
|
|
211
|
+
* 子类可覆盖;beforeRender 事件可通过抛出 FlowExitException 提前终止。
|
|
209
212
|
*/
|
|
210
|
-
|
|
213
|
+
onDispatchEventStart(eventName: string, options?: DispatchEventOptions, inputArgs?: Record<string, any>): Promise<void>;
|
|
211
214
|
/**
|
|
212
|
-
*
|
|
215
|
+
* 通用事件分发钩子:结束
|
|
213
216
|
* 子类可覆盖。
|
|
214
217
|
*/
|
|
215
|
-
|
|
218
|
+
onDispatchEventEnd(eventName: string, options?: DispatchEventOptions, inputArgs?: Record<string, any>, results?: any[]): Promise<void>;
|
|
216
219
|
/**
|
|
217
|
-
*
|
|
220
|
+
* 通用事件分发钩子:错误
|
|
218
221
|
* 子类可覆盖。
|
|
219
222
|
*/
|
|
220
|
-
|
|
223
|
+
onDispatchEventError(eventName: string, options?: DispatchEventOptions, inputArgs?: Record<string, any>, error?: Error): Promise<void>;
|
|
221
224
|
useHooksBeforeRender(): void;
|
|
222
|
-
/**
|
|
223
|
-
* 执行所有自动应用流程
|
|
224
|
-
* @param {Record<string, any>} [inputArgs] 可选的运行时参数
|
|
225
|
-
* @param {boolean} [useCache=true] 是否使用缓存机制,默认为 true
|
|
226
|
-
* @returns {Promise<any[]>} 所有自动应用流程的执行结果数组
|
|
227
|
-
*/
|
|
228
|
-
applyAutoFlows(inputArgs?: Record<string, any>, useCache?: boolean): Promise<any[]>;
|
|
229
225
|
/**
|
|
230
226
|
* 智能检测是否应该跳过响应式包装
|
|
231
227
|
* 说明:
|
|
@@ -261,9 +257,9 @@ export declare class FlowModel<Structure extends DefaultStructure = DefaultStruc
|
|
|
261
257
|
render(): any;
|
|
262
258
|
rerender(): Promise<void>;
|
|
263
259
|
/**
|
|
264
|
-
*
|
|
260
|
+
* 事件缓存的作用域标识;可按事件区分(默认与事件无关的 scope 返回 'default')。
|
|
265
261
|
*/
|
|
266
|
-
|
|
262
|
+
getFlowCacheScope(eventName: string): string;
|
|
267
263
|
setParent(parent: FlowModel): void;
|
|
268
264
|
removeParentDelegate(): void;
|
|
269
265
|
addSubModel<T extends FlowModel>(subKey: string, options: CreateModelOptions | T): T;
|
|
@@ -273,7 +269,10 @@ export declare class FlowModel<Structure extends DefaultStructure = DefaultStruc
|
|
|
273
269
|
hasSubModel<K extends keyof Structure['subModels']>(subKey: K): boolean;
|
|
274
270
|
findSubModel<K extends keyof Structure['subModels'], R>(subKey: K, callback: (model: ArrayElementType<Structure['subModels'][K]>) => R): ArrayElementType<Structure['subModels'][K]> | null;
|
|
275
271
|
createRootModel(options: any): FlowModel<DefaultStructure>;
|
|
276
|
-
|
|
272
|
+
/**
|
|
273
|
+
* 对指定子模型派发 beforeRender 事件(顺序执行并使用缓存)。
|
|
274
|
+
*/
|
|
275
|
+
applySubModelsBeforeRenderFlows<K extends keyof Structure['subModels']>(subKey: K, inputArgs?: Record<string, any>, shared?: Record<string, any>): Promise<void>;
|
|
277
276
|
/**
|
|
278
277
|
* 创建一个 fork 实例,实现"一份数据(master)多视图(fork)"的能力。
|
|
279
278
|
* @param {IModelComponentProps} [localProps={}] fork 专属的局部 props,优先级高于 master.props
|
package/lib/models/flowModel.js
CHANGED
|
@@ -62,7 +62,6 @@ var import_StepSettingsDialog = require("../components/settings/wrappers/context
|
|
|
62
62
|
var import_emitter = require("../emitter");
|
|
63
63
|
var import_InstanceFlowRegistry = require("../flow-registry/InstanceFlowRegistry");
|
|
64
64
|
var import_flowContext = require("../flowContext");
|
|
65
|
-
var import_flowEngine = require("../flowEngine");
|
|
66
65
|
var import_utils = require("../utils");
|
|
67
66
|
var import_lib = require("antd/lib");
|
|
68
67
|
var import_ModelActionRegistry = require("../action-registry/ModelActionRegistry");
|
|
@@ -94,6 +93,7 @@ const _FlowModel = class _FlowModel {
|
|
|
94
93
|
__publicField(this, "_title");
|
|
95
94
|
__publicField(this, "isNew", false);
|
|
96
95
|
// 标记是否为新建状态
|
|
96
|
+
__publicField(this, "skeleton", null);
|
|
97
97
|
/**
|
|
98
98
|
* 所有 fork 实例的引用集合。
|
|
99
99
|
* 使用 Set 便于在销毁时主动遍历并调用 dispose,避免悬挂引用。
|
|
@@ -105,7 +105,7 @@ const _FlowModel = class _FlowModel {
|
|
|
105
105
|
*/
|
|
106
106
|
__publicField(this, "forkCache", /* @__PURE__ */ new Map());
|
|
107
107
|
/**
|
|
108
|
-
* 上一次
|
|
108
|
+
* 上一次 beforeRender 的执行参数
|
|
109
109
|
*/
|
|
110
110
|
__publicField(this, "_lastAutoRunParams", null);
|
|
111
111
|
__publicField(this, "observerDispose");
|
|
@@ -120,18 +120,22 @@ const _FlowModel = class _FlowModel {
|
|
|
120
120
|
__publicField(this, "_reactiveWrapperCache");
|
|
121
121
|
__publicField(this, "flowRegistry");
|
|
122
122
|
__publicField(this, "_cleanRun");
|
|
123
|
-
__publicField(this, "_dispatchEventWithDebounce", import_lodash.default.debounce(
|
|
124
|
-
|
|
125
|
-
|
|
123
|
+
__publicField(this, "_dispatchEventWithDebounce", import_lodash.default.debounce(
|
|
124
|
+
async (eventName, inputArgs, options) => {
|
|
125
|
+
return this._dispatchEvent(eventName, inputArgs, options);
|
|
126
|
+
},
|
|
127
|
+
100
|
|
128
|
+
));
|
|
126
129
|
/**
|
|
127
|
-
* 重新执行上一次的
|
|
130
|
+
* 重新执行上一次的 beforeRender,保持参数一致
|
|
128
131
|
* 如果之前没有执行过,则直接跳过
|
|
129
132
|
* 使用 lodash debounce 避免频繁调用
|
|
130
133
|
*/
|
|
131
134
|
__publicField(this, "_rerunLastAutoRun", import_lodash.default.debounce(async () => {
|
|
132
135
|
if (this._lastAutoRunParams) {
|
|
133
136
|
try {
|
|
134
|
-
|
|
137
|
+
const [inputArgs] = this._lastAutoRunParams;
|
|
138
|
+
await this.dispatchEvent("beforeRender", inputArgs);
|
|
135
139
|
} catch (error) {
|
|
136
140
|
console.error("FlowModel._rerunLastAutoRun: Error during rerun:", error);
|
|
137
141
|
}
|
|
@@ -172,7 +176,7 @@ const _FlowModel = class _FlowModel {
|
|
|
172
176
|
return;
|
|
173
177
|
}
|
|
174
178
|
if (this.flowEngine) {
|
|
175
|
-
this.
|
|
179
|
+
this.invalidateFlowCache("beforeRender");
|
|
176
180
|
}
|
|
177
181
|
this._rerunLastAutoRun();
|
|
178
182
|
this.forks.forEach((fork) => {
|
|
@@ -342,13 +346,57 @@ const _FlowModel = class _FlowModel {
|
|
|
342
346
|
}
|
|
343
347
|
});
|
|
344
348
|
}
|
|
345
|
-
|
|
349
|
+
/**
|
|
350
|
+
* 失效指定事件的流程缓存;未指定 eventName 时,失效当前模型全部事件缓存。
|
|
351
|
+
* - 默认 beforeRender 与其它事件共享同一缓存体系:prefix=`event:${scope}`,flowKey=`eventName`,uid=`model.uid`
|
|
352
|
+
*/
|
|
353
|
+
invalidateFlowCache(eventName, deep = false) {
|
|
346
354
|
if (this.flowEngine) {
|
|
347
|
-
const
|
|
348
|
-
this.flowEngine.applyFlowCache
|
|
355
|
+
const scope = `event:${this.getFlowCacheScope(eventName || "beforeRender")}`;
|
|
356
|
+
const cache = this.flowEngine.applyFlowCache;
|
|
357
|
+
if (eventName) {
|
|
358
|
+
const altScope = scope.replace(/:/g, "-");
|
|
359
|
+
const uidSuffixes = [`:${this.uid}`, `-${this.uid}`];
|
|
360
|
+
const eventSegments = [`:${eventName}:`, `-${eventName}-`];
|
|
361
|
+
for (const key of cache.keys()) {
|
|
362
|
+
const startMatches = key.startsWith(scope) || key.startsWith(altScope);
|
|
363
|
+
const endMatches = uidSuffixes.some((s) => key.endsWith(s));
|
|
364
|
+
const eventMatches = eventSegments.some((seg) => key.includes(seg));
|
|
365
|
+
if (startMatches && endMatches && eventMatches) {
|
|
366
|
+
cache.delete(key);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
} else {
|
|
370
|
+
const altScope = `${scope}:`.replace(/:/g, "-");
|
|
371
|
+
const prefixes = [`${scope}:`, altScope];
|
|
372
|
+
const uidSuffixes = [`:${this.uid}`, `-${this.uid}`];
|
|
373
|
+
for (const key of cache.keys()) {
|
|
374
|
+
const startMatches = prefixes.some((p) => key.startsWith(p));
|
|
375
|
+
const endMatches = uidSuffixes.some((s) => key.endsWith(s));
|
|
376
|
+
if (startMatches && endMatches) cache.delete(key);
|
|
377
|
+
}
|
|
378
|
+
}
|
|
349
379
|
this.forks.forEach((fork) => {
|
|
350
|
-
|
|
351
|
-
|
|
380
|
+
var _a;
|
|
381
|
+
const forkScope = `event:${((_a = fork.getFlowCacheScope) == null ? void 0 : _a.call(fork, eventName || "beforeRender")) ?? String(fork["forkId"])}`;
|
|
382
|
+
const altForkScope = forkScope.replace(/:/g, "-");
|
|
383
|
+
const uidSuffixes = [`:${this.uid}`, `-${this.uid}`];
|
|
384
|
+
if (eventName) {
|
|
385
|
+
const eventSegments = [`:${eventName}:`, `-${eventName}-`];
|
|
386
|
+
for (const key of this.flowEngine.applyFlowCache.keys()) {
|
|
387
|
+
const startMatches = key.startsWith(forkScope) || key.startsWith(altForkScope);
|
|
388
|
+
const endMatches = uidSuffixes.some((s) => key.endsWith(s));
|
|
389
|
+
const eventMatches = eventSegments.some((seg) => key.includes(seg));
|
|
390
|
+
if (startMatches && endMatches && eventMatches) this.flowEngine.applyFlowCache.delete(key);
|
|
391
|
+
}
|
|
392
|
+
} else {
|
|
393
|
+
const prefixes = [`${forkScope}:`, `${altForkScope}-`];
|
|
394
|
+
for (const key of this.flowEngine.applyFlowCache.keys()) {
|
|
395
|
+
const startMatches = prefixes.some((p) => key.startsWith(p));
|
|
396
|
+
const endMatches = uidSuffixes.some((s) => key.endsWith(s));
|
|
397
|
+
if (startMatches && endMatches) this.flowEngine.applyFlowCache.delete(key);
|
|
398
|
+
}
|
|
399
|
+
}
|
|
352
400
|
});
|
|
353
401
|
}
|
|
354
402
|
if (deep) {
|
|
@@ -357,10 +405,10 @@ const _FlowModel = class _FlowModel {
|
|
|
357
405
|
const subModelValue = this.subModels[subModelKey];
|
|
358
406
|
if (Array.isArray(subModelValue)) {
|
|
359
407
|
for (const subModel of subModelValue) {
|
|
360
|
-
subModel.
|
|
408
|
+
subModel.invalidateFlowCache(eventName, deep);
|
|
361
409
|
}
|
|
362
410
|
} else if (subModelValue instanceof _FlowModel) {
|
|
363
|
-
subModelValue.
|
|
411
|
+
subModelValue.invalidateFlowCache(eventName, deep);
|
|
364
412
|
}
|
|
365
413
|
}
|
|
366
414
|
}
|
|
@@ -544,7 +592,7 @@ const _FlowModel = class _FlowModel {
|
|
|
544
592
|
);
|
|
545
593
|
return currentFlowEngine.executor.runFlow(target, flowKey, inputArgs, runId);
|
|
546
594
|
}
|
|
547
|
-
async _dispatchEvent(eventName, inputArgs) {
|
|
595
|
+
async _dispatchEvent(eventName, inputArgs, options) {
|
|
548
596
|
const currentFlowEngine = this.flowEngine;
|
|
549
597
|
if (!currentFlowEngine) {
|
|
550
598
|
console.warn("FlowEngine not available on this model for dispatchEvent. Please set flowEngine on the model.");
|
|
@@ -555,93 +603,63 @@ const _FlowModel = class _FlowModel {
|
|
|
555
603
|
console.log(
|
|
556
604
|
`[FlowModel] dispatchEvent: uid=${this.uid}, event=${eventName}, isFork=${isFork}, cleanRun=${this.cleanRun}, targetIsFork=${(target == null ? void 0 : target.isFork) === true}`
|
|
557
605
|
);
|
|
558
|
-
await currentFlowEngine.executor.dispatchEvent(target, eventName, inputArgs);
|
|
606
|
+
return await currentFlowEngine.executor.dispatchEvent(target, eventName, inputArgs, options);
|
|
559
607
|
}
|
|
560
608
|
async dispatchEvent(eventName, inputArgs, options) {
|
|
609
|
+
const isBeforeRender = eventName === "beforeRender";
|
|
610
|
+
const defaults = isBeforeRender ? { sequential: true, useCache: true } : {};
|
|
611
|
+
const execOptions = {
|
|
612
|
+
sequential: (options == null ? void 0 : options.sequential) ?? defaults.sequential,
|
|
613
|
+
useCache: (options == null ? void 0 : options.useCache) ?? defaults.useCache
|
|
614
|
+
};
|
|
615
|
+
if (isBeforeRender) {
|
|
616
|
+
this._lastAutoRunParams = [inputArgs, execOptions.useCache];
|
|
617
|
+
}
|
|
561
618
|
if (options == null ? void 0 : options.debounce) {
|
|
562
|
-
return this._dispatchEventWithDebounce(eventName, inputArgs);
|
|
619
|
+
return this._dispatchEventWithDebounce(eventName, inputArgs, execOptions);
|
|
563
620
|
}
|
|
564
|
-
return this._dispatchEvent(eventName, inputArgs);
|
|
621
|
+
return this._dispatchEvent(eventName, inputArgs, execOptions);
|
|
565
622
|
}
|
|
566
623
|
/**
|
|
567
|
-
*
|
|
568
|
-
*
|
|
624
|
+
* 按事件名获取对应的流程集合(保持 getFlows 的顺序,即按 sort 排序)。
|
|
625
|
+
* - beforeRender 兼容:除显式 on: 'beforeRender' 外,包含未声明 on 且 manual !== true 的流程。
|
|
569
626
|
*/
|
|
570
|
-
|
|
627
|
+
getEventFlows(eventName) {
|
|
571
628
|
const allFlows = this.getFlows();
|
|
572
|
-
const
|
|
573
|
-
|
|
574
|
-
|
|
629
|
+
const beforeRender = eventName === "beforeRender";
|
|
630
|
+
const isMatch = /* @__PURE__ */ __name((flow) => {
|
|
631
|
+
var _a;
|
|
632
|
+
if (beforeRender) {
|
|
633
|
+
if (flow.manual === true) return false;
|
|
634
|
+
if (!flow.on) return true;
|
|
635
|
+
return typeof flow.on === "string" ? flow.on === "beforeRender" : ((_a = flow.on) == null ? void 0 : _a.eventName) === "beforeRender";
|
|
575
636
|
}
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
return autoFlows;
|
|
637
|
+
const on = flow.on;
|
|
638
|
+
if (!on) return false;
|
|
639
|
+
return typeof on === "string" ? on === eventName : (on == null ? void 0 : on.eventName) === eventName;
|
|
640
|
+
}, "isMatch");
|
|
641
|
+
return Array.from(allFlows.values()).filter(isMatch);
|
|
582
642
|
}
|
|
583
643
|
/**
|
|
584
|
-
*
|
|
585
|
-
*
|
|
644
|
+
* 通用事件分发钩子:开始
|
|
645
|
+
* 子类可覆盖;beforeRender 事件可通过抛出 FlowExitException 提前终止。
|
|
586
646
|
*/
|
|
587
|
-
async
|
|
647
|
+
async onDispatchEventStart(eventName, options, inputArgs) {
|
|
588
648
|
}
|
|
589
649
|
/**
|
|
590
|
-
*
|
|
650
|
+
* 通用事件分发钩子:结束
|
|
591
651
|
* 子类可覆盖。
|
|
592
652
|
*/
|
|
593
|
-
async
|
|
653
|
+
async onDispatchEventEnd(eventName, options, inputArgs, results) {
|
|
594
654
|
}
|
|
595
655
|
/**
|
|
596
|
-
*
|
|
656
|
+
* 通用事件分发钩子:错误
|
|
597
657
|
* 子类可覆盖。
|
|
598
658
|
*/
|
|
599
|
-
async
|
|
659
|
+
async onDispatchEventError(eventName, options, inputArgs, error) {
|
|
600
660
|
}
|
|
601
661
|
useHooksBeforeRender() {
|
|
602
662
|
}
|
|
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
663
|
/**
|
|
646
664
|
* 智能检测是否应该跳过响应式包装
|
|
647
665
|
* 说明:
|
|
@@ -717,6 +735,7 @@ const _FlowModel = class _FlowModel {
|
|
|
717
735
|
}
|
|
718
736
|
return (_c = modelInstance.renderHiddenInConfig) == null ? void 0 : _c.call(modelInstance);
|
|
719
737
|
}
|
|
738
|
+
modelInstance.stepParams;
|
|
720
739
|
return originalRender.call(renderTarget);
|
|
721
740
|
});
|
|
722
741
|
ReactiveWrapper.displayName = `ReactiveWrapper(${modelInstance.constructor.name})`;
|
|
@@ -768,13 +787,13 @@ const _FlowModel = class _FlowModel {
|
|
|
768
787
|
}
|
|
769
788
|
async rerender() {
|
|
770
789
|
var _a;
|
|
771
|
-
await this.
|
|
790
|
+
await this.dispatchEvent("beforeRender", (_a = this._lastAutoRunParams) == null ? void 0 : _a[0], { useCache: false });
|
|
772
791
|
}
|
|
773
792
|
/**
|
|
774
|
-
*
|
|
793
|
+
* 事件缓存的作用域标识;可按事件区分(默认与事件无关的 scope 返回 'default')。
|
|
775
794
|
*/
|
|
776
|
-
|
|
777
|
-
return
|
|
795
|
+
getFlowCacheScope(eventName) {
|
|
796
|
+
return String(eventName);
|
|
778
797
|
}
|
|
779
798
|
setParent(parent) {
|
|
780
799
|
const isValidParent = parent && (parent.constructor === _FlowModel || (0, import_utils.isInheritedFrom)(parent.constructor, _FlowModel));
|
|
@@ -892,10 +911,13 @@ const _FlowModel = class _FlowModel {
|
|
|
892
911
|
createRootModel(options) {
|
|
893
912
|
return this.flowEngine.createModel(options);
|
|
894
913
|
}
|
|
895
|
-
|
|
914
|
+
/**
|
|
915
|
+
* 对指定子模型派发 beforeRender 事件(顺序执行并使用缓存)。
|
|
916
|
+
*/
|
|
917
|
+
async applySubModelsBeforeRenderFlows(subKey, inputArgs, shared) {
|
|
896
918
|
await Promise.all(
|
|
897
919
|
this.mapSubModels(subKey, async (sub) => {
|
|
898
|
-
await sub.
|
|
920
|
+
await sub.dispatchEvent("beforeRender", inputArgs);
|
|
899
921
|
})
|
|
900
922
|
);
|
|
901
923
|
}
|
|
@@ -952,7 +974,7 @@ const _FlowModel = class _FlowModel {
|
|
|
952
974
|
throw new Error("FlowEngine is not set on this model. Please set flowEngine before saving.");
|
|
953
975
|
}
|
|
954
976
|
this.observerDispose();
|
|
955
|
-
this.
|
|
977
|
+
this.invalidateFlowCache("beforeRender", true);
|
|
956
978
|
return this.flowEngine.removeModel(this.uid);
|
|
957
979
|
}
|
|
958
980
|
async save() {
|
|
@@ -969,7 +991,7 @@ const _FlowModel = class _FlowModel {
|
|
|
969
991
|
throw new Error("FlowEngine is not set on this model. Please set flowEngine before deleting.");
|
|
970
992
|
}
|
|
971
993
|
this.observerDispose();
|
|
972
|
-
this.
|
|
994
|
+
this.invalidateFlowCache("beforeRender", true);
|
|
973
995
|
return this.flowEngine.destroyModel(this.uid);
|
|
974
996
|
}
|
|
975
997
|
/**
|
|
@@ -63,9 +63,9 @@ export declare class ForkFlowModel<TMaster extends FlowModel = FlowModel> {
|
|
|
63
63
|
*/
|
|
64
64
|
render(): any;
|
|
65
65
|
/**
|
|
66
|
-
*
|
|
66
|
+
* 事件缓存的作用域标识(fork 专用)。
|
|
67
67
|
*/
|
|
68
|
-
|
|
68
|
+
getFlowCacheScope(eventName: string): string;
|
|
69
69
|
/**
|
|
70
70
|
* 释放 fork:从 master.forks 中移除自身并断开引用
|
|
71
71
|
*/
|
|
@@ -38,7 +38,6 @@ __export(forkFlowModel_exports, {
|
|
|
38
38
|
module.exports = __toCommonJS(forkFlowModel_exports);
|
|
39
39
|
var import_reactive = require("@formily/reactive");
|
|
40
40
|
var import_flowContext = require("../flowContext");
|
|
41
|
-
var import_flowEngine = require("../flowEngine");
|
|
42
41
|
var _flowContext;
|
|
43
42
|
const _ForkFlowModel = class _ForkFlowModel {
|
|
44
43
|
constructor(master, initialProps = {}, forkId = 0) {
|
|
@@ -194,10 +193,10 @@ const _ForkFlowModel = class _ForkFlowModel {
|
|
|
194
193
|
}
|
|
195
194
|
}
|
|
196
195
|
/**
|
|
197
|
-
*
|
|
196
|
+
* 事件缓存的作用域标识(fork 专用)。
|
|
198
197
|
*/
|
|
199
|
-
|
|
200
|
-
return String(this.forkId)
|
|
198
|
+
getFlowCacheScope(eventName) {
|
|
199
|
+
return `${String(eventName)}:${String(this.forkId)}`;
|
|
201
200
|
}
|
|
202
201
|
// onUnmount() {
|
|
203
202
|
// // 不在此处自动 dispose(避免破坏外部 fork 管理),但应透传到 master 的 onUnmount 钩子,
|
|
@@ -216,11 +215,35 @@ const _ForkFlowModel = class _ForkFlowModel {
|
|
|
216
215
|
* 释放 fork:从 master.forks 中移除自身并断开引用
|
|
217
216
|
*/
|
|
218
217
|
dispose() {
|
|
218
|
+
var _a;
|
|
219
219
|
if (this.disposed) return;
|
|
220
220
|
this.disposed = true;
|
|
221
|
+
try {
|
|
222
|
+
const cache = (_a = this.flowEngine) == null ? void 0 : _a.applyFlowCache;
|
|
223
|
+
if (cache && cache.size > 0) {
|
|
224
|
+
const uidSuffixes = [`:${this.uid}`, `-${this.uid}`];
|
|
225
|
+
const forkIdColon = `:${this.forkId}:`;
|
|
226
|
+
const forkIdHyphen = `-${this.forkId}-`;
|
|
227
|
+
for (const key of cache.keys()) {
|
|
228
|
+
const isEventCache = key.startsWith("event:") || key.startsWith("event-");
|
|
229
|
+
if (!isEventCache) continue;
|
|
230
|
+
const endMatches = uidSuffixes.some((s) => key.endsWith(s));
|
|
231
|
+
if (!endMatches) continue;
|
|
232
|
+
let trimmed = key;
|
|
233
|
+
for (const suf of uidSuffixes) {
|
|
234
|
+
if (trimmed.endsWith(suf)) {
|
|
235
|
+
trimmed = trimmed.slice(0, -suf.length);
|
|
236
|
+
break;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
if (trimmed.includes(forkIdColon) || trimmed.includes(forkIdHyphen)) {
|
|
240
|
+
cache.delete(key);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
} catch {
|
|
245
|
+
}
|
|
221
246
|
if (this.master && this.master.forks) {
|
|
222
|
-
const forkCacheKey = import_flowEngine.FlowEngine.generateApplyFlowCacheKey(`${this.forkId}`, "all", this.uid);
|
|
223
|
-
this.flowEngine.applyFlowCache.delete(forkCacheKey);
|
|
224
247
|
this.master.forks.delete(this);
|
|
225
248
|
}
|
|
226
249
|
if (this.master && this.master.forkCache) {
|
package/lib/provider.d.ts
CHANGED
|
@@ -17,6 +17,8 @@ export declare const FlowEngineProvider: React.FC<FlowEngineProviderProps>;
|
|
|
17
17
|
export declare const FlowEngineGlobalsContextProvider: React.FC<{
|
|
18
18
|
children: React.ReactNode;
|
|
19
19
|
}>;
|
|
20
|
-
export declare const useFlowEngine: (
|
|
20
|
+
export declare const useFlowEngine: ({ throwError }?: {
|
|
21
|
+
throwError?: boolean;
|
|
22
|
+
}) => FlowEngine;
|
|
21
23
|
export declare const useFlowEngineContext: () => FlowEngineContext;
|
|
22
24
|
export {};
|
package/lib/provider.js
CHANGED
|
@@ -49,14 +49,16 @@ var import_FlowContextProvider = require("./FlowContextProvider");
|
|
|
49
49
|
var import_views = require("./views");
|
|
50
50
|
var import_FlowView = require("./views/FlowView");
|
|
51
51
|
const FlowEngineReactContext = (0, import_react.createContext)(null);
|
|
52
|
-
const FlowEngineProvider =
|
|
52
|
+
const FlowEngineProvider = import_react.default.memo((props) => {
|
|
53
53
|
const { engine, children } = props;
|
|
54
54
|
if (!engine) {
|
|
55
55
|
throw new Error("FlowEngineProvider must be supplied with an engine.");
|
|
56
56
|
}
|
|
57
57
|
return /* @__PURE__ */ import_react.default.createElement(FlowEngineReactContext.Provider, { value: engine }, /* @__PURE__ */ import_react.default.createElement(import_FlowContextProvider.FlowContextProvider, { context: engine.context }, children));
|
|
58
|
-
}
|
|
58
|
+
});
|
|
59
|
+
FlowEngineProvider.displayName = "FlowEngineProvider";
|
|
59
60
|
const FlowEngineGlobalsContextProvider = /* @__PURE__ */ __name(({ children }) => {
|
|
61
|
+
var _a;
|
|
60
62
|
const { modal, message, notification } = import_antd.App.useApp();
|
|
61
63
|
const [drawer, contextHolder] = (0, import_views.useDrawer)();
|
|
62
64
|
const [embed, pageContextHolder] = (0, import_views.usePage)();
|
|
@@ -90,11 +92,11 @@ const FlowEngineGlobalsContextProvider = /* @__PURE__ */ __name(({ children }) =
|
|
|
90
92
|
}
|
|
91
93
|
engine.reactView.refresh();
|
|
92
94
|
}, [engine, drawer, modal, message, notification, config, popover, token, dialog, embed]);
|
|
93
|
-
return /* @__PURE__ */ import_react.default.createElement(
|
|
95
|
+
return /* @__PURE__ */ import_react.default.createElement(import_antd.ConfigProvider, { ...config, locale: (_a = engine.context.locales) == null ? void 0 : _a.antd, popupMatchSelectWidth: false }, children, contextHolder, popoverContextHolder, pageContextHolder, dialogContextHolder);
|
|
94
96
|
}, "FlowEngineGlobalsContextProvider");
|
|
95
|
-
const useFlowEngine = /* @__PURE__ */ __name(() => {
|
|
97
|
+
const useFlowEngine = /* @__PURE__ */ __name(({ throwError = true } = {}) => {
|
|
96
98
|
const context = (0, import_react.useContext)(FlowEngineReactContext);
|
|
97
|
-
if (!context) {
|
|
99
|
+
if (!context && throwError) {
|
|
98
100
|
throw new Error(
|
|
99
101
|
"useFlowEngine must be used within a FlowEngineProvider, and FlowEngineProvider must be supplied with an engine."
|
|
100
102
|
);
|