@nocobase/flow-engine 2.0.0-alpha.4 → 2.0.0-alpha.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/BlockScopedFlowEngine.d.ts +23 -0
- package/lib/BlockScopedFlowEngine.js +90 -0
- package/lib/FlowContextProvider.d.ts +2 -2
- package/lib/FlowContextProvider.js +3 -3
- package/lib/FlowDefinition.d.ts +4 -2
- package/lib/JSRunner.js +3 -0
- package/lib/ViewScopedFlowEngine.d.ts +1 -1
- package/lib/ViewScopedFlowEngine.js +12 -0
- package/lib/acl/Acl.d.ts +1 -0
- package/lib/acl/Acl.js +11 -0
- package/lib/components/FieldModelRenderer.js +14 -6
- package/lib/components/FieldSkeleton.d.ts +10 -0
- package/lib/components/FieldSkeleton.js +64 -0
- package/lib/components/FlowContextSelector.js +7 -2
- package/lib/components/FlowModelRenderer.d.ts +3 -6
- package/lib/components/FlowModelRenderer.js +16 -47
- package/lib/components/FormItem.js +5 -1
- package/lib/components/MobilePopup.d.ts +20 -0
- package/lib/components/MobilePopup.js +102 -0
- package/lib/components/MobilePopup.style.d.ts +17 -0
- package/lib/components/MobilePopup.style.js +186 -0
- package/lib/components/index.d.ts +1 -0
- package/lib/components/index.js +3 -1
- package/lib/components/settings/independents/dropdown/FlowsDropdownButton.js +2 -2
- package/lib/components/settings/wrappers/contextual/DefaultSettingsIcon.js +17 -5
- package/lib/components/settings/wrappers/contextual/FlowsContextMenu.js +2 -2
- package/lib/components/settings/wrappers/contextual/FlowsFloatContextMenu.d.ts +2 -2
- package/lib/components/settings/wrappers/contextual/FlowsFloatContextMenu.js +35 -6
- package/lib/components/settings/wrappers/contextual/StepSettingsDialog.js +7 -1
- package/lib/components/variables/VariableInput.js +19 -5
- package/lib/components/variables/VariableTag.js +43 -2
- package/lib/components/variables/types.d.ts +2 -0
- package/lib/data-source/index.d.ts +15 -4
- package/lib/data-source/index.js +42 -13
- package/lib/data-source/sortCollectionsByInherits.d.ts +10 -0
- package/lib/data-source/sortCollectionsByInherits.js +71 -0
- package/lib/emitter.d.ts +6 -0
- package/lib/emitter.js +12 -0
- package/lib/executor/FlowExecutor.d.ts +4 -5
- package/lib/executor/FlowExecutor.js +168 -99
- package/lib/flow-registry/GlobalFlowRegistry.d.ts +1 -0
- package/lib/flow-registry/GlobalFlowRegistry.js +3 -0
- package/lib/flow-registry/InstanceFlowRegistry.d.ts +1 -0
- package/lib/flow-registry/InstanceFlowRegistry.js +3 -0
- package/lib/flowContext.d.ts +37 -5
- package/lib/flowContext.js +224 -87
- package/lib/flowEngine.d.ts +24 -1
- package/lib/flowEngine.js +81 -8
- package/lib/flowSettings.d.ts +2 -1
- package/lib/flowSettings.js +16 -8
- package/lib/hooks/useApplyAutoFlows.js +2 -1
- package/lib/index.d.ts +7 -1
- package/lib/index.js +32 -3
- package/lib/locale/en-US.json +4 -2
- package/lib/locale/index.d.ts +4 -0
- package/lib/locale/zh-CN.json +4 -2
- package/lib/models/CollectionFieldModel.d.ts +3 -0
- package/lib/models/CollectionFieldModel.js +52 -6
- package/lib/models/flowModel.d.ts +30 -29
- package/lib/models/flowModel.js +153 -100
- package/lib/models/forkFlowModel.d.ts +8 -4
- package/lib/models/forkFlowModel.js +38 -8
- package/lib/provider.d.ts +3 -1
- package/lib/provider.js +7 -5
- package/lib/resources/multiRecordResource.js +25 -1
- package/lib/resources/singleRecordResource.js +19 -1
- package/lib/resources/sqlResource.d.ts +1 -0
- package/lib/resources/sqlResource.js +20 -24
- package/lib/runjs-context/contexts/FormJSFieldItemRunJSContext.d.ts +1 -6
- package/lib/runjs-context/contexts/FormJSFieldItemRunJSContext.js +27 -20
- package/lib/runjs-context/contexts/JSBlockRunJSContext.d.ts +1 -6
- package/lib/runjs-context/contexts/JSBlockRunJSContext.js +46 -33
- package/lib/runjs-context/contexts/JSCollectionActionRunJSContext.d.ts +1 -2
- package/lib/runjs-context/contexts/JSCollectionActionRunJSContext.js +14 -15
- package/lib/runjs-context/contexts/{LinkageRunJSContext.d.ts → JSColumnRunJSContext.d.ts} +6 -3
- package/lib/runjs-context/contexts/JSColumnRunJSContext.js +78 -0
- package/lib/runjs-context/contexts/JSFieldRunJSContext.d.ts +1 -6
- package/lib/runjs-context/contexts/JSFieldRunJSContext.js +28 -24
- package/lib/runjs-context/contexts/JSItemRunJSContext.d.ts +1 -6
- package/lib/runjs-context/contexts/JSItemRunJSContext.js +24 -20
- package/lib/runjs-context/contexts/JSRecordActionRunJSContext.d.ts +1 -2
- package/lib/runjs-context/contexts/JSRecordActionRunJSContext.js +16 -17
- package/lib/runjs-context/contexts/base.d.ts +9 -0
- package/lib/runjs-context/contexts/base.js +205 -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 +162 -40
- package/lib/runjs-context/snippets/scene/block/add-event-listener.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/{jsblock → block}/add-event-listener.snippet.js +11 -2
- package/lib/runjs-context/snippets/scene/block/api-fetch-render-list.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/block/api-fetch-render-list.snippet.js +64 -0
- package/lib/runjs-context/snippets/scene/block/chartjs-bar.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/block/chartjs-bar.snippet.js +99 -0
- package/lib/runjs-context/snippets/{libs → scene/block}/echarts-init.snippet.js +24 -7
- package/lib/runjs-context/snippets/scene/block/render-antd-icons.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/block/render-antd-icons.snippet.js +65 -0
- package/lib/runjs-context/snippets/scene/block/render-button-handler.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/{jsblock → block}/render-button-handler.snippet.js +17 -9
- package/lib/runjs-context/snippets/scene/block/render-iframe.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/block/render-iframe.snippet.js +57 -0
- package/lib/runjs-context/snippets/scene/block/render-info-card.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/block/render-info-card.snippet.js +71 -0
- package/lib/runjs-context/snippets/scene/block/render-react-jsx.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/{jsblock/render-card.snippet.js → block/render-react-jsx.snippet.js} +26 -13
- package/lib/runjs-context/snippets/scene/block/render-react.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/{jsblock → block}/render-react.snippet.js +18 -17
- package/lib/runjs-context/snippets/scene/block/render-statistics.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/block/render-statistics.snippet.js +95 -0
- package/lib/runjs-context/snippets/scene/block/render-timeline.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/block/render-timeline.snippet.js +84 -0
- package/lib/runjs-context/snippets/scene/block/resource-example.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/block/resource-example.snippet.js +60 -0
- package/lib/runjs-context/snippets/scene/block/three-users-orbit.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/block/three-users-orbit.snippet.js +283 -0
- package/lib/runjs-context/snippets/scene/block/vue-component.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/block/vue-component.snippet.js +124 -0
- package/lib/runjs-context/snippets/scene/detail/color-by-value.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/{jsfield → detail}/color-by-value.snippet.js +13 -3
- package/lib/runjs-context/snippets/scene/detail/copy-to-clipboard.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/{global → scene/detail}/copy-to-clipboard.snippet.js +28 -6
- package/lib/runjs-context/snippets/scene/detail/format-number.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/{jsfield → detail}/format-number.snippet.js +13 -3
- package/lib/runjs-context/snippets/scene/detail/innerHTML-value.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/{jsfield → detail}/innerHTML-value.snippet.js +13 -3
- package/lib/runjs-context/snippets/scene/detail/percentage-bar.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/detail/percentage-bar.snippet.js +82 -0
- package/lib/runjs-context/snippets/scene/detail/relative-time.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/detail/relative-time.snippet.js +80 -0
- package/lib/runjs-context/snippets/scene/detail/status-tag.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/detail/status-tag.snippet.js +74 -0
- package/lib/runjs-context/snippets/scene/form/calculate-total.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/form/calculate-total.snippet.js +63 -0
- package/lib/runjs-context/snippets/scene/form/cascade-select.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/form/cascade-select.snippet.js +81 -0
- package/lib/runjs-context/snippets/scene/form/conditional-required.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/form/conditional-required.snippet.js +64 -0
- package/lib/runjs-context/snippets/scene/form/copy-field-values.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/form/copy-field-values.snippet.js +74 -0
- package/lib/runjs-context/snippets/scene/form/render-basic.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/{jsitem → form}/render-basic.snippet.js +11 -2
- package/lib/runjs-context/snippets/scene/form/set-disabled.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/{linkage → form}/set-disabled.snippet.js +12 -3
- package/lib/runjs-context/snippets/scene/form/set-field-value.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/{linkage → form}/set-field-value.snippet.js +12 -3
- package/lib/runjs-context/snippets/scene/form/set-required.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/{linkage → form}/set-required.snippet.js +12 -3
- package/lib/runjs-context/snippets/scene/form/toggle-multiple-fields.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/form/toggle-multiple-fields.snippet.js +67 -0
- package/lib/runjs-context/snippets/scene/form/toggle-visible.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/{linkage → form}/toggle-visible.snippet.js +12 -3
- package/lib/runjs-context/snippets/scene/table/cell-open-dialog.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/table/cell-open-dialog.snippet.js +64 -0
- package/lib/runjs-context/snippets/scene/table/collection-selected-count.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/{actions → table}/collection-selected-count.snippet.js +11 -2
- package/lib/runjs-context/snippets/scene/table/concat-fields.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/table/concat-fields.snippet.js +79 -0
- package/lib/runjs-context/snippets/scene/table/destroy-selected.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/{global/log-json-record.snippet.js → scene/table/destroy-selected.snippet.js} +24 -11
- package/lib/runjs-context/snippets/scene/table/export-selected-json.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/table/export-selected-json.snippet.js +64 -0
- package/lib/runjs-context/snippets/scene/table/iterate-selected-rows.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/{actions → table}/iterate-selected-rows.snippet.js +11 -2
- package/lib/runjs-context/snippets/types.d.ts +9 -1
- package/lib/scheduler/ModelOperationScheduler.d.ts +51 -0
- package/lib/scheduler/ModelOperationScheduler.js +262 -0
- package/lib/types.d.ts +28 -3
- package/lib/types.js +4 -3
- package/lib/utils/associationObjectVariable.d.ts +32 -0
- package/lib/utils/associationObjectVariable.js +157 -0
- package/lib/utils/buildSettingsViewInputArgs.d.ts +19 -0
- package/lib/utils/buildSettingsViewInputArgs.js +75 -0
- package/lib/utils/createEphemeralContext.d.ts +13 -0
- package/lib/utils/createEphemeralContext.js +140 -0
- package/lib/utils/flows.d.ts +10 -0
- package/lib/{runjs-context/snippets/global/api-request-post.snippet.js → utils/flows.js} +21 -15
- package/lib/utils/index.d.ts +7 -2
- package/lib/utils/index.js +21 -2
- package/lib/utils/jsxTransform.d.ts +15 -0
- package/lib/utils/jsxTransform.js +68 -0
- package/lib/utils/params-resolvers.js +3 -3
- package/lib/utils/parsePathnameToViewParams.d.ts +1 -1
- package/lib/utils/parsePathnameToViewParams.js +41 -5
- package/lib/utils/pruneFilter.d.ts +21 -0
- package/lib/{runjs-context/snippets/global/try-catch-async.snippet.js → utils/pruneFilter.js} +24 -16
- package/lib/utils/safeGlobals.d.ts +5 -3
- package/lib/utils/safeGlobals.js +40 -0
- package/lib/utils/schema-utils.js +2 -2
- package/lib/utils/serverContextParams.d.ts +1 -0
- package/lib/utils/translation.d.ts +4 -1
- package/lib/utils/translation.js +6 -2
- package/lib/utils/variablesParams.d.ts +22 -5
- package/lib/utils/variablesParams.js +132 -36
- package/lib/views/DrawerComponent.js +21 -2
- package/lib/views/PageComponent.js +2 -1
- package/lib/views/ViewNavigation.d.ts +3 -9
- package/lib/views/ViewNavigation.js +16 -2
- package/lib/views/createViewMeta.d.ts +29 -1
- package/lib/views/createViewMeta.js +338 -72
- package/lib/views/index.d.ts +1 -0
- package/lib/views/index.js +3 -0
- package/lib/views/useDialog.d.ts +9 -8
- package/lib/views/useDialog.js +19 -14
- package/lib/views/useDrawer.d.ts +9 -8
- package/lib/views/useDrawer.js +54 -35
- package/lib/views/usePage.d.ts +9 -8
- package/lib/views/usePage.js +20 -14
- package/package.json +6 -3
- package/src/BlockScopedFlowEngine.ts +86 -0
- package/src/FlowContextProvider.tsx +4 -2
- package/src/JSRunner.ts +3 -0
- package/src/ViewScopedFlowEngine.ts +15 -1
- package/src/__tests__/JSRunner.test.ts +62 -53
- package/src/__tests__/blockScopedFlowEngine.test.ts +154 -0
- package/src/__tests__/createViewMeta.popup.test.ts +132 -0
- package/src/__tests__/flow-engine.test.ts +3 -0
- package/src/__tests__/flowContext.test.ts +52 -0
- package/src/__tests__/flowContextCreateJSRunner.test.ts +163 -0
- package/src/__tests__/flowEngine.saveModel.test.ts +4 -0
- package/src/__tests__/flowRunJSContextDefine.test.ts +508 -0
- package/src/__tests__/flowSettings.open.test.tsx +2 -0
- package/src/__tests__/flowSettings.test.ts +2 -0
- package/src/__tests__/globalFlowRegistry.test.ts +1 -1
- package/src/__tests__/modelOperationScheduler.test.ts +346 -0
- package/src/__tests__/objectVariable.test.ts +464 -0
- package/src/__tests__/runjsContext.test.ts +216 -35
- package/src/__tests__/runjsContextImplementations.test.ts +217 -0
- package/src/__tests__/runjsContextRuntime.test.ts +269 -0
- package/src/__tests__/runjsEdgeCases.test.ts +281 -0
- package/src/__tests__/runjsLocales.test.ts +36 -0
- package/src/__tests__/runjsRuntimeFeatures.test.ts +461 -0
- package/src/__tests__/runjsSnippets.test.ts +140 -0
- package/src/__tests__/viewScopedFlowEngine.test.ts +3 -3
- package/src/acl/Acl.tsx +14 -0
- package/src/acl/__tests__/Acl.test.tsx +43 -0
- package/src/components/DynamicFlowsEditor.tsx +3 -4
- package/src/components/FieldModelRenderer.tsx +20 -7
- package/src/components/FieldSkeleton.tsx +27 -0
- package/src/components/FlowContextSelector.tsx +6 -2
- package/src/components/FlowModelRenderer.tsx +33 -81
- package/src/components/FormItem.tsx +8 -1
- package/src/components/MobilePopup.style.ts +220 -0
- package/src/components/MobilePopup.tsx +86 -0
- package/src/components/__tests__/flow-model-render-error-fallback.test.tsx +6 -6
- package/src/components/index.ts +1 -0
- package/src/components/settings/independents/dropdown/FlowsDropdownButton.tsx +1 -1
- package/src/components/settings/wrappers/contextual/DefaultSettingsIcon.tsx +17 -4
- package/src/components/settings/wrappers/contextual/FlowsContextMenu.tsx +1 -1
- package/src/components/settings/wrappers/contextual/FlowsFloatContextMenu.tsx +39 -10
- package/src/components/settings/wrappers/contextual/StepSettingsDialog.tsx +14 -1
- package/src/components/settings/wrappers/contextual/__tests__/DefaultSettingsIcon.test.tsx +425 -0
- package/src/components/subModel/__tests__/AddSubModelButton.test.tsx +5 -7
- package/src/components/variables/VariableInput.tsx +25 -5
- package/src/components/variables/VariableTag.tsx +54 -2
- package/src/components/variables/types.ts +2 -0
- package/src/data-source/__tests__/sortCollectionsByInherits.test.ts +125 -0
- package/src/data-source/index.ts +42 -11
- package/src/data-source/sortCollectionsByInherits.ts +61 -0
- package/src/emitter.ts +14 -0
- package/src/executor/FlowExecutor.ts +213 -119
- package/src/executor/__tests__/ctx-defs-injection.test.ts +197 -0
- package/src/executor/__tests__/flowExecutor.test.ts +151 -5
- package/src/flow-registry/GlobalFlowRegistry.ts +1 -0
- package/src/flow-registry/InstanceFlowRegistry.ts +1 -0
- package/src/flow-registry/__tests__/globalFlowRegistry.test.ts +54 -0
- package/src/flowContext.ts +303 -104
- package/src/flowEngine.ts +96 -6
- package/src/flowSettings.ts +12 -4
- package/src/hooks/useApplyAutoFlows.ts +3 -1
- package/src/index.ts +12 -1
- package/src/locale/en-US.json +4 -2
- package/src/locale/zh-CN.json +4 -2
- package/src/models/CollectionFieldModel.tsx +60 -8
- package/src/models/__tests__/dispatchEvent.behavior.test.ts +169 -0
- package/src/models/__tests__/flowModel.getFlows.sort.test.ts +33 -9
- package/src/models/__tests__/flowModel.scheduleModelOperation.test.tsx +129 -0
- package/src/models/__tests__/flowModel.test.ts +234 -111
- package/src/models/__tests__/forkFlowModel.test.ts +40 -7
- package/src/models/flowModel.tsx +197 -132
- package/src/models/forkFlowModel.ts +48 -8
- package/src/provider.tsx +10 -7
- package/src/resources/multiRecordResource.ts +28 -1
- package/src/resources/singleRecordResource.ts +19 -1
- package/src/resources/sqlResource.ts +20 -25
- package/src/runjs-context/contexts/FormJSFieldItemRunJSContext.ts +28 -21
- package/src/runjs-context/contexts/JSBlockRunJSContext.ts +46 -34
- package/src/runjs-context/contexts/JSCollectionActionRunJSContext.ts +15 -16
- package/src/runjs-context/contexts/JSColumnRunJSContext.ts +58 -0
- package/src/runjs-context/contexts/JSFieldRunJSContext.ts +30 -25
- package/src/runjs-context/contexts/JSItemRunJSContext.ts +25 -21
- package/src/runjs-context/contexts/JSRecordActionRunJSContext.ts +17 -18
- package/src/runjs-context/contexts/base.ts +196 -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 +178 -39
- package/src/runjs-context/snippets/scene/{jsblock → block}/add-event-listener.snippet.ts +14 -2
- package/src/runjs-context/snippets/scene/block/api-fetch-render-list.snippet.ts +45 -0
- package/src/runjs-context/snippets/scene/block/chartjs-bar.snippet.ts +80 -0
- package/src/runjs-context/snippets/scene/block/echarts-init.snippet.ts +44 -0
- package/src/runjs-context/snippets/scene/block/render-antd-icons.snippet.ts +46 -0
- package/src/runjs-context/snippets/scene/block/render-button-handler.snippet.ts +35 -0
- package/src/runjs-context/snippets/scene/block/render-iframe.snippet.ts +38 -0
- package/src/runjs-context/snippets/scene/block/render-info-card.snippet.ts +52 -0
- package/src/runjs-context/snippets/scene/block/render-react-jsx.snippet.ts +39 -0
- package/src/runjs-context/snippets/scene/block/render-react.snippet.ts +38 -0
- package/src/runjs-context/snippets/scene/block/render-statistics.snippet.ts +76 -0
- package/src/runjs-context/snippets/scene/block/render-timeline.snippet.ts +65 -0
- package/src/runjs-context/snippets/scene/block/resource-example.snippet.ts +46 -0
- package/src/runjs-context/snippets/scene/block/three-users-orbit.snippet.ts +264 -0
- package/src/runjs-context/snippets/scene/block/vue-component.snippet.ts +105 -0
- package/src/runjs-context/snippets/scene/detail/color-by-value.snippet.ts +33 -0
- package/src/runjs-context/snippets/scene/detail/copy-to-clipboard.snippet.ts +45 -0
- package/src/runjs-context/snippets/scene/detail/format-number.snippet.ts +32 -0
- package/src/runjs-context/snippets/scene/detail/innerHTML-value.snippet.ts +31 -0
- package/src/runjs-context/snippets/scene/detail/percentage-bar.snippet.ts +63 -0
- package/src/runjs-context/snippets/scene/detail/relative-time.snippet.ts +61 -0
- package/src/runjs-context/snippets/scene/detail/status-tag.snippet.ts +55 -0
- package/src/runjs-context/snippets/scene/form/calculate-total.snippet.ts +44 -0
- package/src/runjs-context/snippets/scene/form/cascade-select.snippet.ts +62 -0
- package/src/runjs-context/snippets/scene/form/conditional-required.snippet.ts +45 -0
- package/src/runjs-context/snippets/scene/form/copy-field-values.snippet.ts +55 -0
- package/src/runjs-context/snippets/scene/{jsitem → form}/render-basic.snippet.ts +14 -2
- package/src/runjs-context/snippets/scene/{linkage → form}/set-disabled.snippet.ts +15 -3
- package/src/runjs-context/snippets/scene/{linkage → form}/set-field-value.snippet.ts +15 -3
- package/src/runjs-context/snippets/scene/{linkage → form}/set-required.snippet.ts +15 -3
- package/src/runjs-context/snippets/scene/form/toggle-multiple-fields.snippet.ts +48 -0
- package/src/runjs-context/snippets/scene/{linkage → form}/toggle-visible.snippet.ts +15 -3
- package/src/runjs-context/snippets/scene/table/cell-open-dialog.snippet.ts +45 -0
- package/src/runjs-context/snippets/scene/{actions → table}/collection-selected-count.snippet.ts +14 -2
- package/src/runjs-context/snippets/scene/table/concat-fields.snippet.ts +60 -0
- package/src/runjs-context/snippets/scene/table/destroy-selected.snippet.ts +36 -0
- package/src/runjs-context/snippets/scene/table/export-selected-json.snippet.ts +45 -0
- package/src/runjs-context/snippets/scene/{actions → table}/iterate-selected-rows.snippet.ts +14 -2
- package/src/runjs-context/snippets/types.ts +5 -1
- package/src/scheduler/ModelOperationScheduler.ts +304 -0
- package/src/types.ts +34 -0
- package/src/utils/__tests__/flows.test.ts +65 -0
- package/src/utils/__tests__/jsxTransform.test.ts +38 -0
- package/src/utils/__tests__/parsePathnameToViewParams.test.ts +25 -0
- package/src/utils/__tests__/pruneFilter.test.ts +38 -0
- package/src/utils/__tests__/safeGlobals.test.ts +22 -1
- package/src/utils/__tests__/variablesParams.test.ts +63 -0
- package/src/utils/associationObjectVariable.ts +180 -0
- package/src/utils/buildSettingsViewInputArgs.ts +72 -0
- package/src/utils/createEphemeralContext.ts +142 -0
- package/src/utils/flows.ts +23 -0
- package/src/utils/index.ts +11 -2
- package/src/utils/jsxTransform.ts +39 -0
- package/src/utils/params-resolvers.ts +2 -2
- package/src/utils/parsePathnameToViewParams.ts +50 -6
- package/src/utils/pruneFilter.ts +41 -0
- package/src/utils/safeGlobals.ts +49 -3
- package/src/utils/schema-utils.ts +1 -1
- package/src/utils/serverContextParams.ts +1 -0
- package/src/utils/translation.ts +7 -2
- package/src/utils/variablesParams.ts +156 -38
- package/src/views/DrawerComponent.tsx +21 -2
- package/src/views/PageComponent.tsx +1 -1
- package/src/views/ViewNavigation.ts +20 -12
- package/src/views/__tests__/ViewNavigation.test.ts +10 -0
- package/src/views/createViewMeta.ts +393 -70
- package/src/views/index.tsx +1 -0
- package/src/views/useDialog.tsx +24 -18
- package/src/views/useDrawer.tsx +74 -45
- package/src/views/usePage.tsx +26 -17
- package/lib/runjs-context/contexts/FlowRunJSContext.d.ts +0 -38
- package/lib/runjs-context/contexts/FlowRunJSContext.js +0 -217
- package/lib/runjs-context/contexts/LinkageRunJSContext.js +0 -62
- package/lib/runjs-context/index.d.ts +0 -19
- package/lib/runjs-context/index.js +0 -57
- package/lib/runjs-context/snippets/global/api-request-get.snippet.d.ts +0 -16
- package/lib/runjs-context/snippets/global/api-request-get.snippet.js +0 -42
- package/lib/runjs-context/snippets/global/api-request-post.snippet.d.ts +0 -16
- package/lib/runjs-context/snippets/global/console-log-ctx.snippet.d.ts +0 -16
- package/lib/runjs-context/snippets/global/console-log-ctx.snippet.js +0 -41
- package/lib/runjs-context/snippets/global/requireAsync.snippet.d.ts +0 -16
- package/lib/runjs-context/snippets/global/sleep.snippet.d.ts +0 -16
- package/lib/runjs-context/snippets/global/sleep.snippet.js +0 -43
- package/lib/runjs-context/snippets/global/try-catch-async.snippet.d.ts +0 -16
- package/lib/runjs-context/snippets/libs/echarts-init.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/actions/collection-selected-count.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/actions/iterate-selected-rows.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/actions/record-id-message.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/actions/record-id-message.snippet.js +0 -43
- package/lib/runjs-context/snippets/scene/actions/run-action-basic.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/actions/run-action-basic.snippet.js +0 -40
- package/lib/runjs-context/snippets/scene/jsblock/add-event-listener.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/jsblock/append-style.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/jsblock/append-style.snippet.js +0 -42
- package/lib/runjs-context/snippets/scene/jsblock/jsx-mount.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/jsblock/jsx-mount.snippet.js +0 -46
- package/lib/runjs-context/snippets/scene/jsblock/jsx-unmount.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/jsblock/jsx-unmount.snippet.js +0 -41
- package/lib/runjs-context/snippets/scene/jsblock/render-basic.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/jsblock/render-basic.snippet.js +0 -41
- package/lib/runjs-context/snippets/scene/jsblock/render-button-handler.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/jsblock/render-react.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/jsfield/color-by-value.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/jsfield/format-number.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/jsfield/innerHTML-value.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/jsitem/render-basic.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/linkage/set-disabled.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/linkage/set-field-value.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/linkage/set-required.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/linkage/toggle-visible.snippet.d.ts +0 -15
- package/src/runjs-context/contexts/FlowRunJSContext.ts +0 -190
- package/src/runjs-context/contexts/LinkageRunJSContext.ts +0 -35
- package/src/runjs-context/index.ts +0 -20
- package/src/runjs-context/snippets/global/api-request-get.snippet.ts +0 -20
- package/src/runjs-context/snippets/global/api-request-post.snippet.ts +0 -20
- package/src/runjs-context/snippets/global/console-log-ctx.snippet.ts +0 -19
- package/src/runjs-context/snippets/global/copy-record-json.snippet.ts +0 -21
- package/src/runjs-context/snippets/global/copy-to-clipboard.snippet.ts +0 -21
- package/src/runjs-context/snippets/global/log-json-record.snippet.ts +0 -21
- package/src/runjs-context/snippets/global/requireAsync.snippet.ts +0 -24
- package/src/runjs-context/snippets/global/sleep.snippet.ts +0 -21
- package/src/runjs-context/snippets/global/try-catch-async.snippet.ts +0 -22
- package/src/runjs-context/snippets/global/view-navigation-push.snippet.ts +0 -23
- package/src/runjs-context/snippets/libs/echarts-init.snippet.ts +0 -24
- package/src/runjs-context/snippets/scene/actions/record-id-message.snippet.ts +0 -21
- package/src/runjs-context/snippets/scene/actions/run-action-basic.snippet.ts +0 -18
- package/src/runjs-context/snippets/scene/jsblock/append-style.snippet.ts +0 -20
- package/src/runjs-context/snippets/scene/jsblock/jsx-mount.snippet.ts +0 -24
- package/src/runjs-context/snippets/scene/jsblock/jsx-unmount.snippet.ts +0 -19
- package/src/runjs-context/snippets/scene/jsblock/render-basic.snippet.ts +0 -24
- package/src/runjs-context/snippets/scene/jsblock/render-button-handler.snippet.ts +0 -24
- package/src/runjs-context/snippets/scene/jsblock/render-card.snippet.ts +0 -30
- package/src/runjs-context/snippets/scene/jsblock/render-react.snippet.ts +0 -34
- package/src/runjs-context/snippets/scene/jsfield/color-by-value.snippet.ts +0 -20
- package/src/runjs-context/snippets/scene/jsfield/format-number.snippet.ts +0 -19
- package/src/runjs-context/snippets/scene/jsfield/innerHTML-value.snippet.ts +0 -18
- /package/lib/runjs-context/snippets/global/{copy-record-json.snippet.d.ts → api-request.snippet.d.ts} +0 -0
- /package/lib/runjs-context/snippets/global/{copy-to-clipboard.snippet.d.ts → clipboard-copy-text.snippet.d.ts} +0 -0
- /package/lib/runjs-context/snippets/global/{log-json-record.snippet.d.ts → import-esm.snippet.d.ts} +0 -0
- /package/lib/runjs-context/snippets/global/{view-navigation-push.snippet.d.ts → query-selector.snippet.d.ts} +0 -0
- /package/lib/runjs-context/snippets/scene/{jsblock/render-card.snippet.d.ts → block/echarts-init.snippet.d.ts} +0 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
import type { FlowEngine } from '../flowEngine';
|
|
10
|
+
import type { FlowModel } from '../models/flowModel';
|
|
11
|
+
type LifecycleType = 'created' | 'mounted' | 'unmounted' | 'destroyed' | `event:${string}:start` | `event:${string}:end` | `event:${string}:error`;
|
|
12
|
+
export type ScheduleWhen = LifecycleType | ((e: LifecycleEvent) => boolean);
|
|
13
|
+
export interface ScheduleOptions {
|
|
14
|
+
when?: ScheduleWhen;
|
|
15
|
+
}
|
|
16
|
+
export type ScheduledCancel = () => boolean;
|
|
17
|
+
export interface LifecycleEvent {
|
|
18
|
+
type: LifecycleType;
|
|
19
|
+
uid: string;
|
|
20
|
+
model?: FlowModel;
|
|
21
|
+
runId?: string;
|
|
22
|
+
error?: any;
|
|
23
|
+
inputArgs?: Record<string, any>;
|
|
24
|
+
result?: any;
|
|
25
|
+
}
|
|
26
|
+
export declare class ModelOperationScheduler {
|
|
27
|
+
private engine;
|
|
28
|
+
private itemsByTargetUid;
|
|
29
|
+
private itemIdsByFromUid;
|
|
30
|
+
private itemsById;
|
|
31
|
+
private unbindHandlers;
|
|
32
|
+
private subscribedEventNames;
|
|
33
|
+
constructor(engine: FlowEngine);
|
|
34
|
+
/** 外部调用入口 */
|
|
35
|
+
schedule(fromModelOrUid: FlowModel | string, toUid: string, fn: (model: FlowModel) => Promise<void> | void, options?: ScheduleOptions): ScheduledCancel;
|
|
36
|
+
cancel(filter: {
|
|
37
|
+
fromUid?: string;
|
|
38
|
+
toUid?: string;
|
|
39
|
+
}): void;
|
|
40
|
+
/** 引擎关闭时释放 */
|
|
41
|
+
dispose(): void;
|
|
42
|
+
private bindEngineLifecycle;
|
|
43
|
+
private ensureEventSubscriptionIfNeeded;
|
|
44
|
+
private parseEventWhen;
|
|
45
|
+
private processLifecycleEvent;
|
|
46
|
+
private shouldTrigger;
|
|
47
|
+
private tryExecuteOnce;
|
|
48
|
+
private internalCancel;
|
|
49
|
+
private takeItem;
|
|
50
|
+
}
|
|
51
|
+
export default ModelOperationScheduler;
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
var __defProp = Object.defineProperty;
|
|
11
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
12
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
13
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
14
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
15
|
+
var __export = (target, all) => {
|
|
16
|
+
for (var name in all)
|
|
17
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
18
|
+
};
|
|
19
|
+
var __copyProps = (to, from, except, desc) => {
|
|
20
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
21
|
+
for (let key of __getOwnPropNames(from))
|
|
22
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
23
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
24
|
+
}
|
|
25
|
+
return to;
|
|
26
|
+
};
|
|
27
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
+
var ModelOperationScheduler_exports = {};
|
|
29
|
+
__export(ModelOperationScheduler_exports, {
|
|
30
|
+
ModelOperationScheduler: () => ModelOperationScheduler,
|
|
31
|
+
default: () => ModelOperationScheduler_default
|
|
32
|
+
});
|
|
33
|
+
module.exports = __toCommonJS(ModelOperationScheduler_exports);
|
|
34
|
+
var import_secure = require("uid/secure");
|
|
35
|
+
const _ModelOperationScheduler = class _ModelOperationScheduler {
|
|
36
|
+
constructor(engine) {
|
|
37
|
+
this.engine = engine;
|
|
38
|
+
this.bindEngineLifecycle();
|
|
39
|
+
}
|
|
40
|
+
itemsByTargetUid = /* @__PURE__ */ new Map();
|
|
41
|
+
itemIdsByFromUid = /* @__PURE__ */ new Map();
|
|
42
|
+
itemsById = /* @__PURE__ */ new Map();
|
|
43
|
+
unbindHandlers = [];
|
|
44
|
+
subscribedEventNames = /* @__PURE__ */ new Set();
|
|
45
|
+
/** 外部调用入口 */
|
|
46
|
+
schedule(fromModelOrUid, toUid, fn, options) {
|
|
47
|
+
const fromUid = typeof fromModelOrUid === "string" ? fromModelOrUid : fromModelOrUid == null ? void 0 : fromModelOrUid.uid;
|
|
48
|
+
if (!fromUid) {
|
|
49
|
+
throw new Error("scheduleModelOperation: invalid from model or uid");
|
|
50
|
+
}
|
|
51
|
+
if (!toUid || typeof toUid !== "string") {
|
|
52
|
+
throw new Error("scheduleModelOperation: invalid target uid");
|
|
53
|
+
}
|
|
54
|
+
const item = {
|
|
55
|
+
id: (0, import_secure.uid)(),
|
|
56
|
+
fromUid,
|
|
57
|
+
toUid,
|
|
58
|
+
fn,
|
|
59
|
+
options: {
|
|
60
|
+
// 默认语义:仅当 when === 'created' 时,对“已存在的目标”进行一次立即执行;
|
|
61
|
+
// 其它 when 不做立即执行,需等待后续真实生命周期事件。
|
|
62
|
+
when: (options == null ? void 0 : options.when) ?? "created"
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
let targetMap = this.itemsByTargetUid.get(toUid);
|
|
66
|
+
if (!targetMap) {
|
|
67
|
+
targetMap = /* @__PURE__ */ new Map();
|
|
68
|
+
this.itemsByTargetUid.set(toUid, targetMap);
|
|
69
|
+
}
|
|
70
|
+
targetMap.set(item.id, item);
|
|
71
|
+
let fromSet = this.itemIdsByFromUid.get(fromUid);
|
|
72
|
+
if (!fromSet) {
|
|
73
|
+
fromSet = /* @__PURE__ */ new Set();
|
|
74
|
+
this.itemIdsByFromUid.set(fromUid, fromSet);
|
|
75
|
+
}
|
|
76
|
+
fromSet.add(item.id);
|
|
77
|
+
this.itemsById.set(item.id, item);
|
|
78
|
+
this.ensureEventSubscriptionIfNeeded(item.options.when);
|
|
79
|
+
const modelNow = this.engine.getModel(toUid);
|
|
80
|
+
if (modelNow && item.options.when === "created") {
|
|
81
|
+
void this.tryExecuteOnce(item.id, { type: "created", uid: toUid, model: modelNow });
|
|
82
|
+
}
|
|
83
|
+
return () => this.internalCancel(item.id);
|
|
84
|
+
}
|
|
85
|
+
cancel(filter) {
|
|
86
|
+
const { fromUid, toUid } = filter || {};
|
|
87
|
+
if (toUid && this.itemsByTargetUid.has(toUid)) {
|
|
88
|
+
const map = this.itemsByTargetUid.get(toUid);
|
|
89
|
+
if (map)
|
|
90
|
+
for (const item of map.values()) {
|
|
91
|
+
if (fromUid && item.fromUid !== fromUid) continue;
|
|
92
|
+
this.internalCancel(item.id);
|
|
93
|
+
}
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
if (fromUid && this.itemIdsByFromUid.has(fromUid)) {
|
|
97
|
+
const set = this.itemIdsByFromUid.get(fromUid);
|
|
98
|
+
if (set)
|
|
99
|
+
for (const id of Array.from(set)) {
|
|
100
|
+
const it = this.itemsById.get(id);
|
|
101
|
+
if (!it) continue;
|
|
102
|
+
if (toUid && it.toUid !== toUid) continue;
|
|
103
|
+
this.internalCancel(id);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/** 引擎关闭时释放 */
|
|
108
|
+
dispose() {
|
|
109
|
+
try {
|
|
110
|
+
for (const unbind of this.unbindHandlers) {
|
|
111
|
+
try {
|
|
112
|
+
unbind();
|
|
113
|
+
} catch (err) {
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
} finally {
|
|
117
|
+
this.unbindHandlers = [];
|
|
118
|
+
}
|
|
119
|
+
for (const map of this.itemsByTargetUid.values()) {
|
|
120
|
+
for (const item of map.values()) this.internalCancel(item.id);
|
|
121
|
+
}
|
|
122
|
+
this.itemsByTargetUid.clear();
|
|
123
|
+
this.itemIdsByFromUid.clear();
|
|
124
|
+
}
|
|
125
|
+
bindEngineLifecycle() {
|
|
126
|
+
const emitter = this.engine.emitter;
|
|
127
|
+
if (!emitter || typeof emitter.on !== "function") return;
|
|
128
|
+
const onCreated = /* @__PURE__ */ __name((e) => {
|
|
129
|
+
this.processLifecycleEvent(e.uid, { ...e, type: "created" });
|
|
130
|
+
}, "onCreated");
|
|
131
|
+
emitter.on("model:created", onCreated);
|
|
132
|
+
this.unbindHandlers.push(() => emitter.off("model:created", onCreated));
|
|
133
|
+
const onMounted = /* @__PURE__ */ __name((e) => {
|
|
134
|
+
this.processLifecycleEvent(e.uid, { ...e, type: "mounted" });
|
|
135
|
+
}, "onMounted");
|
|
136
|
+
emitter.on("model:mounted", onMounted);
|
|
137
|
+
this.unbindHandlers.push(() => emitter.off("model:mounted", onMounted));
|
|
138
|
+
const onGenericBeforeStart = /* @__PURE__ */ __name((e) => {
|
|
139
|
+
this.processLifecycleEvent(e.uid, { ...e, type: "event:beforeRender:start" });
|
|
140
|
+
}, "onGenericBeforeStart");
|
|
141
|
+
emitter.on("model:event:beforeRender:start", onGenericBeforeStart);
|
|
142
|
+
this.unbindHandlers.push(() => emitter.off("model:event:beforeRender:start", onGenericBeforeStart));
|
|
143
|
+
const onGenericBeforeEnd = /* @__PURE__ */ __name((e) => {
|
|
144
|
+
this.processLifecycleEvent(e.uid, { ...e, type: "event:beforeRender:end" });
|
|
145
|
+
}, "onGenericBeforeEnd");
|
|
146
|
+
emitter.on("model:event:beforeRender:end", onGenericBeforeEnd);
|
|
147
|
+
this.unbindHandlers.push(() => emitter.off("model:event:beforeRender:end", onGenericBeforeEnd));
|
|
148
|
+
const onUnmounted = /* @__PURE__ */ __name((e) => {
|
|
149
|
+
this.processLifecycleEvent(e.uid, { ...e, type: "unmounted" });
|
|
150
|
+
}, "onUnmounted");
|
|
151
|
+
emitter.on("model:unmounted", onUnmounted);
|
|
152
|
+
this.unbindHandlers.push(() => emitter.off("model:unmounted", onUnmounted));
|
|
153
|
+
const onDestroyed = /* @__PURE__ */ __name((e) => {
|
|
154
|
+
const targetBucket = this.itemsByTargetUid.get(e.uid);
|
|
155
|
+
const event = { ...e, type: "destroyed" };
|
|
156
|
+
if (targetBucket && targetBucket.size) {
|
|
157
|
+
const ids = Array.from(targetBucket.keys());
|
|
158
|
+
for (const id of ids) {
|
|
159
|
+
const it = this.itemsById.get(id);
|
|
160
|
+
if (!it) continue;
|
|
161
|
+
if (this.shouldTrigger(it.options.when, event)) {
|
|
162
|
+
void this.tryExecuteOnce(id, event);
|
|
163
|
+
} else {
|
|
164
|
+
this.internalCancel(id);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}, "onDestroyed");
|
|
169
|
+
emitter.on("model:destroyed", onDestroyed);
|
|
170
|
+
this.unbindHandlers.push(() => emitter.off("model:destroyed", onDestroyed));
|
|
171
|
+
}
|
|
172
|
+
ensureEventSubscriptionIfNeeded(when) {
|
|
173
|
+
if (!when || typeof when !== "string") return;
|
|
174
|
+
const parsed = this.parseEventWhen(when);
|
|
175
|
+
if (!parsed) return;
|
|
176
|
+
const { name } = parsed;
|
|
177
|
+
if (this.subscribedEventNames.has(name)) return;
|
|
178
|
+
this.subscribedEventNames.add(name);
|
|
179
|
+
const emitter = this.engine.emitter;
|
|
180
|
+
const onStart = /* @__PURE__ */ __name((e) => {
|
|
181
|
+
this.processLifecycleEvent(e.uid, { ...e, type: `event:${name}:start` });
|
|
182
|
+
}, "onStart");
|
|
183
|
+
const onEnd = /* @__PURE__ */ __name((e) => {
|
|
184
|
+
this.processLifecycleEvent(e.uid, { ...e, type: `event:${name}:end` });
|
|
185
|
+
}, "onEnd");
|
|
186
|
+
const onError = /* @__PURE__ */ __name((e) => {
|
|
187
|
+
this.processLifecycleEvent(e.uid, { ...e, type: `event:${name}:error` });
|
|
188
|
+
}, "onError");
|
|
189
|
+
emitter.on(`model:event:${name}:start`, onStart);
|
|
190
|
+
emitter.on(`model:event:${name}:end`, onEnd);
|
|
191
|
+
emitter.on(`model:event:${name}:error`, onError);
|
|
192
|
+
this.unbindHandlers.push(() => emitter.off(`model:event:${name}:start`, onStart));
|
|
193
|
+
this.unbindHandlers.push(() => emitter.off(`model:event:${name}:end`, onEnd));
|
|
194
|
+
this.unbindHandlers.push(() => emitter.off(`model:event:${name}:error`, onError));
|
|
195
|
+
}
|
|
196
|
+
parseEventWhen(when) {
|
|
197
|
+
if (!when || typeof when !== "string") return null;
|
|
198
|
+
const m = /^event:([^:]+):(start|end|error)$/.exec(when);
|
|
199
|
+
if (!m) return null;
|
|
200
|
+
return { name: m[1], phase: m[2] };
|
|
201
|
+
}
|
|
202
|
+
processLifecycleEvent(targetUid, event) {
|
|
203
|
+
const targetBucket = this.itemsByTargetUid.get(targetUid);
|
|
204
|
+
if (!targetBucket || targetBucket.size === 0) return;
|
|
205
|
+
const ids = Array.from(targetBucket.keys());
|
|
206
|
+
for (const id of ids) {
|
|
207
|
+
const item = this.itemsById.get(id);
|
|
208
|
+
if (!item) continue;
|
|
209
|
+
const should = this.shouldTrigger(item.options.when, event);
|
|
210
|
+
if (!should) continue;
|
|
211
|
+
void this.tryExecuteOnce(id, event);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
shouldTrigger(when, event) {
|
|
215
|
+
if (!when) return false;
|
|
216
|
+
if (typeof when === "function") return !!when(event);
|
|
217
|
+
return when === event.type;
|
|
218
|
+
}
|
|
219
|
+
async tryExecuteOnce(id, event) {
|
|
220
|
+
var _a, _b;
|
|
221
|
+
const item = this.takeItem(id);
|
|
222
|
+
if (!item) return;
|
|
223
|
+
try {
|
|
224
|
+
const model = event.model || this.engine.getModel(item.toUid);
|
|
225
|
+
if (!model) return;
|
|
226
|
+
await Promise.resolve(item.fn(model));
|
|
227
|
+
} catch (err) {
|
|
228
|
+
(_b = (_a = this.engine.logger) == null ? void 0 : _a.error) == null ? void 0 : _b.call(
|
|
229
|
+
_a,
|
|
230
|
+
{ err, id, fromUid: item.fromUid, toUid: item.toUid, when: item.options.when },
|
|
231
|
+
"ModelOperationScheduler: operation execution failed"
|
|
232
|
+
);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
internalCancel(id) {
|
|
236
|
+
return !!this.takeItem(id);
|
|
237
|
+
}
|
|
238
|
+
takeItem(id) {
|
|
239
|
+
const it = this.itemsById.get(id);
|
|
240
|
+
if (!it) return void 0;
|
|
241
|
+
const { toUid, fromUid } = it;
|
|
242
|
+
const map = this.itemsByTargetUid.get(toUid);
|
|
243
|
+
if (map) {
|
|
244
|
+
map.delete(id);
|
|
245
|
+
if (map.size === 0) this.itemsByTargetUid.delete(toUid);
|
|
246
|
+
}
|
|
247
|
+
const set = this.itemIdsByFromUid.get(fromUid);
|
|
248
|
+
if (set) {
|
|
249
|
+
set.delete(id);
|
|
250
|
+
if (set.size === 0) this.itemIdsByFromUid.delete(fromUid);
|
|
251
|
+
}
|
|
252
|
+
this.itemsById.delete(id);
|
|
253
|
+
return it;
|
|
254
|
+
}
|
|
255
|
+
};
|
|
256
|
+
__name(_ModelOperationScheduler, "ModelOperationScheduler");
|
|
257
|
+
let ModelOperationScheduler = _ModelOperationScheduler;
|
|
258
|
+
var ModelOperationScheduler_default = ModelOperationScheduler;
|
|
259
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
260
|
+
0 && (module.exports = {
|
|
261
|
+
ModelOperationScheduler
|
|
262
|
+
});
|
package/lib/types.d.ts
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
import { ISchema } from '@formily/json-schema';
|
|
11
11
|
import { SubModelItem } from './components';
|
|
12
12
|
import { FlowContext, FlowModelContext, FlowRuntimeContext, FlowSettingsContext } from './flowContext';
|
|
13
|
+
import type { PropertyOptions } from './flowContext';
|
|
13
14
|
import type { FlowEngine } from './flowEngine';
|
|
14
15
|
import type { FlowModel } from './models';
|
|
15
16
|
/**
|
|
@@ -110,12 +111,14 @@ export declare enum ActionScene {
|
|
|
110
111
|
BLOCK_LINKAGE_RULES = 1,
|
|
111
112
|
/** 表单字段级联动规则可用 */
|
|
112
113
|
FIELD_LINKAGE_RULES = 2,
|
|
114
|
+
/** 子表单字段级联动规则可用 */
|
|
115
|
+
SUB_FORM_FIELD_LINKAGE_RULES = 3,
|
|
113
116
|
/** 详情字段级联动规则可用 */
|
|
114
|
-
DETAILS_FIELD_LINKAGE_RULES =
|
|
117
|
+
DETAILS_FIELD_LINKAGE_RULES = 4,
|
|
115
118
|
/** 按钮级联动规则可用 */
|
|
116
|
-
ACTION_LINKAGE_RULES =
|
|
119
|
+
ACTION_LINKAGE_RULES = 5,
|
|
117
120
|
/** 动态事件流可用 */
|
|
118
|
-
DYNAMIC_EVENT_FLOW =
|
|
121
|
+
DYNAMIC_EVENT_FLOW = 6
|
|
119
122
|
}
|
|
120
123
|
/**
|
|
121
124
|
* Defines a reusable action with generic model type support.
|
|
@@ -132,6 +135,18 @@ export interface ActionDefinition<TModel extends FlowModel = FlowModel, TCtx ext
|
|
|
132
135
|
uiMode?: StepUIMode | ((ctx: FlowRuntimeContext<TModel>) => StepUIMode | Promise<StepUIMode>);
|
|
133
136
|
scene?: ActionScene | ActionScene[];
|
|
134
137
|
sort?: number;
|
|
138
|
+
/**
|
|
139
|
+
* 在执行 Action 前为 ctx 定义临时属性。
|
|
140
|
+
* - 仅支持 PropertyOptions 形态(例如:{ foo: { value: 5 } });
|
|
141
|
+
* - 或函数形式(接收 ctx,返回 PropertyOptions 对象;支持 Promise)。
|
|
142
|
+
*/
|
|
143
|
+
defineProperties?: Record<string, PropertyOptions> | ((ctx: TCtx) => Record<string, PropertyOptions> | Promise<Record<string, PropertyOptions>>);
|
|
144
|
+
/**
|
|
145
|
+
* 在执行 Action 前为 ctx 定义临时方法。
|
|
146
|
+
* - 支持 JSON 形式(对象的值应为函数)
|
|
147
|
+
* - 或函数形式(接收 ctx,返回方法对象;支持 Promise)
|
|
148
|
+
*/
|
|
149
|
+
defineMethods?: Record<string, (this: TCtx, ...args: any[]) => any> | ((ctx: TCtx) => Record<string, (this: TCtx, ...args: any[]) => any> | Promise<Record<string, (this: TCtx, ...args: any[]) => any>>);
|
|
135
150
|
}
|
|
136
151
|
/**
|
|
137
152
|
* Flow 事件名称集合。
|
|
@@ -146,6 +161,15 @@ export type FlowEvent<TModel extends FlowModel = FlowModel> = FlowEventName | {
|
|
|
146
161
|
eventName: FlowEventName;
|
|
147
162
|
defaultParams?: Record<string, any>;
|
|
148
163
|
};
|
|
164
|
+
/**
|
|
165
|
+
* 事件分发选项。
|
|
166
|
+
*/
|
|
167
|
+
export interface DispatchEventOptions {
|
|
168
|
+
/** 是否顺序执行(默认并行) */
|
|
169
|
+
sequential?: boolean;
|
|
170
|
+
/** 是否使用缓存(默认 false;beforeRender 的默认值为 true,可覆盖) */
|
|
171
|
+
useCache?: boolean;
|
|
172
|
+
}
|
|
149
173
|
/**
|
|
150
174
|
* 事件定义:用于事件注册表(全局/模型类级)。
|
|
151
175
|
*/
|
|
@@ -240,6 +264,7 @@ export interface IFlowModelRepository<T extends FlowModel = FlowModel> {
|
|
|
240
264
|
}): Promise<Record<string, any>>;
|
|
241
265
|
destroy(uid: string): Promise<boolean>;
|
|
242
266
|
move(sourceId: string, targetId: string, position: 'before' | 'after'): Promise<void>;
|
|
267
|
+
duplicate(uid: string): Promise<Record<string, any> | null>;
|
|
243
268
|
}
|
|
244
269
|
/**
|
|
245
270
|
* 步骤设置对话框的属性接口
|
package/lib/types.js
CHANGED
|
@@ -32,9 +32,10 @@ module.exports = __toCommonJS(types_exports);
|
|
|
32
32
|
var ActionScene = /* @__PURE__ */ ((ActionScene2) => {
|
|
33
33
|
ActionScene2[ActionScene2["BLOCK_LINKAGE_RULES"] = 1] = "BLOCK_LINKAGE_RULES";
|
|
34
34
|
ActionScene2[ActionScene2["FIELD_LINKAGE_RULES"] = 2] = "FIELD_LINKAGE_RULES";
|
|
35
|
-
ActionScene2[ActionScene2["
|
|
36
|
-
ActionScene2[ActionScene2["
|
|
37
|
-
ActionScene2[ActionScene2["
|
|
35
|
+
ActionScene2[ActionScene2["SUB_FORM_FIELD_LINKAGE_RULES"] = 3] = "SUB_FORM_FIELD_LINKAGE_RULES";
|
|
36
|
+
ActionScene2[ActionScene2["DETAILS_FIELD_LINKAGE_RULES"] = 4] = "DETAILS_FIELD_LINKAGE_RULES";
|
|
37
|
+
ActionScene2[ActionScene2["ACTION_LINKAGE_RULES"] = 5] = "ACTION_LINKAGE_RULES";
|
|
38
|
+
ActionScene2[ActionScene2["DYNAMIC_EVENT_FLOW"] = 6] = "DYNAMIC_EVENT_FLOW";
|
|
38
39
|
return ActionScene2;
|
|
39
40
|
})(ActionScene || {});
|
|
40
41
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
import type { Collection } from '../data-source';
|
|
10
|
+
import type { FlowContext, PropertyMetaFactory } from '../flowContext';
|
|
11
|
+
/**
|
|
12
|
+
* 创建一个用于“对象类变量”(如 formValues / currentObject)的 `resolveOnServer` 判定函数。
|
|
13
|
+
* 仅当访问路径以“关联字段名”开头(且继续访问其子属性)时,返回 true 交由服务端解析;
|
|
14
|
+
* 否则在前端解析即可。
|
|
15
|
+
*
|
|
16
|
+
* @param collectionAccessor 返回当前对象所在 collection
|
|
17
|
+
* @param valueAccessor 可选,本地值访问器。若本地已存在目标子路径的值,则认为无需走后端,优先使用本地值。
|
|
18
|
+
* @returns `(subPath) => boolean` 判断是否需要服务端解析
|
|
19
|
+
*/
|
|
20
|
+
export declare function createAssociationSubpathResolver(collectionAccessor: () => Collection | null, valueAccessor?: () => unknown): (subPath: string) => boolean;
|
|
21
|
+
/**
|
|
22
|
+
* 构建“对象类变量”的 PropertyMetaFactory:
|
|
23
|
+
* - 暴露集合字段结构(通过 createCollectionContextMeta)用于变量选择器;
|
|
24
|
+
* - 提供 buildVariablesParams:基于对象当前值,收集所有“已选择的关联字段”
|
|
25
|
+
* 以便服务端在 variables:resolve 时按需补全关联数据。
|
|
26
|
+
*
|
|
27
|
+
* @param collectionAccessor 获取集合对象,用于字段/元信息来源
|
|
28
|
+
* @param title 变量组标题(用于 UI 展示)
|
|
29
|
+
* @param valueAccessor 获取当前对象值(如 ctx.form.getFieldsValue() / ctx.currentObject)
|
|
30
|
+
* @returns PropertyMetaFactory
|
|
31
|
+
*/
|
|
32
|
+
export declare function createAssociationAwareObjectMetaFactory(collectionAccessor: () => Collection | null, title: string, valueAccessor: (ctx: FlowContext) => any): PropertyMetaFactory;
|
|
@@ -0,0 +1,157 @@
|
|
|
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 __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
17
|
+
var __export = (target, all) => {
|
|
18
|
+
for (var name in all)
|
|
19
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
20
|
+
};
|
|
21
|
+
var __copyProps = (to, from, except, desc) => {
|
|
22
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
23
|
+
for (let key of __getOwnPropNames(from))
|
|
24
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
25
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
26
|
+
}
|
|
27
|
+
return to;
|
|
28
|
+
};
|
|
29
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
30
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
31
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
32
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
33
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
34
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
35
|
+
mod
|
|
36
|
+
));
|
|
37
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
38
|
+
var associationObjectVariable_exports = {};
|
|
39
|
+
__export(associationObjectVariable_exports, {
|
|
40
|
+
createAssociationAwareObjectMetaFactory: () => createAssociationAwareObjectMetaFactory,
|
|
41
|
+
createAssociationSubpathResolver: () => createAssociationSubpathResolver
|
|
42
|
+
});
|
|
43
|
+
module.exports = __toCommonJS(associationObjectVariable_exports);
|
|
44
|
+
var import_lodash = __toESM(require("lodash"));
|
|
45
|
+
var import_createCollectionContextMeta = require("./createCollectionContextMeta");
|
|
46
|
+
function baseFieldNameOf(subPath) {
|
|
47
|
+
if (!subPath) return void 0;
|
|
48
|
+
const m = subPath.match(/^([^.[]+)/);
|
|
49
|
+
return m == null ? void 0 : m[1];
|
|
50
|
+
}
|
|
51
|
+
__name(baseFieldNameOf, "baseFieldNameOf");
|
|
52
|
+
function findFieldByName(collection, name) {
|
|
53
|
+
var _a;
|
|
54
|
+
if (!collection || !name) return void 0;
|
|
55
|
+
const direct = collection.getField(name);
|
|
56
|
+
if (direct) return direct;
|
|
57
|
+
const fields = ((_a = collection.getFields) == null ? void 0 : _a.call(collection)) || [];
|
|
58
|
+
return fields.find((f) => f.name === name);
|
|
59
|
+
}
|
|
60
|
+
__name(findFieldByName, "findFieldByName");
|
|
61
|
+
function toFilterByTk(value, primaryKey) {
|
|
62
|
+
if (value == null) return void 0;
|
|
63
|
+
if (Array.isArray(primaryKey)) {
|
|
64
|
+
if (typeof value !== "object" || !value) return void 0;
|
|
65
|
+
const out = {};
|
|
66
|
+
for (const k of primaryKey) {
|
|
67
|
+
const v = value[k];
|
|
68
|
+
if (typeof v === "undefined" || v === null) return void 0;
|
|
69
|
+
out[k] = v;
|
|
70
|
+
}
|
|
71
|
+
return out;
|
|
72
|
+
}
|
|
73
|
+
if (typeof value === "string" || typeof value === "number") return value;
|
|
74
|
+
if (typeof value === "object") {
|
|
75
|
+
return value[primaryKey];
|
|
76
|
+
}
|
|
77
|
+
return void 0;
|
|
78
|
+
}
|
|
79
|
+
__name(toFilterByTk, "toFilterByTk");
|
|
80
|
+
function createAssociationSubpathResolver(collectionAccessor, valueAccessor) {
|
|
81
|
+
return (p) => {
|
|
82
|
+
if (!p || !p.includes(".")) return false;
|
|
83
|
+
const base = baseFieldNameOf(p);
|
|
84
|
+
if (!base) return false;
|
|
85
|
+
const collection = collectionAccessor();
|
|
86
|
+
const field = findFieldByName(collection, base);
|
|
87
|
+
const isAssoc = !!(field == null ? void 0 : field.isAssociationField());
|
|
88
|
+
if (!isAssoc) return false;
|
|
89
|
+
if (typeof valueAccessor === "function") {
|
|
90
|
+
const local = valueAccessor();
|
|
91
|
+
if (local && typeof local === "object") {
|
|
92
|
+
const v = import_lodash.default.get(local, p);
|
|
93
|
+
if (typeof v !== "undefined") return false;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return true;
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
__name(createAssociationSubpathResolver, "createAssociationSubpathResolver");
|
|
100
|
+
function createAssociationAwareObjectMetaFactory(collectionAccessor, title, valueAccessor) {
|
|
101
|
+
const baseFactory = (0, import_createCollectionContextMeta.createCollectionContextMeta)(collectionAccessor, title);
|
|
102
|
+
const factory = /* @__PURE__ */ __name(async () => {
|
|
103
|
+
const base = await baseFactory();
|
|
104
|
+
if (!base) return null;
|
|
105
|
+
const meta = {
|
|
106
|
+
...base,
|
|
107
|
+
buildVariablesParams: /* @__PURE__ */ __name((ctx) => {
|
|
108
|
+
var _a;
|
|
109
|
+
const collection = collectionAccessor();
|
|
110
|
+
const obj = valueAccessor(ctx);
|
|
111
|
+
if (!collection || !obj || typeof obj !== "object") return {};
|
|
112
|
+
const params = {};
|
|
113
|
+
const fields = ((_a = collection.getFields) == null ? void 0 : _a.call(collection)) || [];
|
|
114
|
+
for (const field of fields) {
|
|
115
|
+
const name = field.name;
|
|
116
|
+
if (!name) continue;
|
|
117
|
+
if (!field.isAssociationField()) continue;
|
|
118
|
+
const target = field.target;
|
|
119
|
+
const targetCollection = field.targetCollection;
|
|
120
|
+
if (!target || !targetCollection) continue;
|
|
121
|
+
const primaryKey = targetCollection.filterTargetKey;
|
|
122
|
+
const associationValue = obj[name];
|
|
123
|
+
if (associationValue == null) continue;
|
|
124
|
+
if (Array.isArray(associationValue)) {
|
|
125
|
+
const ids = associationValue.map((item) => toFilterByTk(item, primaryKey)).filter((v) => v != null);
|
|
126
|
+
if (ids.length) {
|
|
127
|
+
params[name] = {
|
|
128
|
+
collection: target,
|
|
129
|
+
dataSourceKey: targetCollection.dataSourceKey,
|
|
130
|
+
filterByTk: ids
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
} else {
|
|
134
|
+
const id = toFilterByTk(associationValue, primaryKey);
|
|
135
|
+
if (id != null) {
|
|
136
|
+
params[name] = {
|
|
137
|
+
collection: target,
|
|
138
|
+
dataSourceKey: targetCollection.dataSourceKey,
|
|
139
|
+
filterByTk: id
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return params;
|
|
145
|
+
}, "buildVariablesParams")
|
|
146
|
+
};
|
|
147
|
+
return meta;
|
|
148
|
+
}, "factory");
|
|
149
|
+
factory.title = title;
|
|
150
|
+
return factory;
|
|
151
|
+
}
|
|
152
|
+
__name(createAssociationAwareObjectMetaFactory, "createAssociationAwareObjectMetaFactory");
|
|
153
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
154
|
+
0 && (module.exports = {
|
|
155
|
+
createAssociationAwareObjectMetaFactory,
|
|
156
|
+
createAssociationSubpathResolver
|
|
157
|
+
});
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
import type { FlowModel } from '../models';
|
|
10
|
+
/**
|
|
11
|
+
* 统一构造设置弹窗 openView 的 inputArgs:
|
|
12
|
+
* - collectionName/dataSourceKey/filterByTk:优先从 model.context 推断;否则回退父视图 inputArgs
|
|
13
|
+
* - sourceId:优先从 resource.getSourceId();否则回退父视图 inputArgs
|
|
14
|
+
* - associationName:来自 association.resourceName 或 resource.getResourceName()
|
|
15
|
+
* - navigation:父视图 navigation 或传入的 navigationOverride
|
|
16
|
+
*/
|
|
17
|
+
export declare function buildSettingsViewInputArgs(model: FlowModel, extra?: Record<string, any>, options?: {
|
|
18
|
+
navigationOverride?: any;
|
|
19
|
+
}): Record<string, any>;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
var __defProp = Object.defineProperty;
|
|
11
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
12
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
13
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
14
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
15
|
+
var __export = (target, all) => {
|
|
16
|
+
for (var name in all)
|
|
17
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
18
|
+
};
|
|
19
|
+
var __copyProps = (to, from, except, desc) => {
|
|
20
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
21
|
+
for (let key of __getOwnPropNames(from))
|
|
22
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
23
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
24
|
+
}
|
|
25
|
+
return to;
|
|
26
|
+
};
|
|
27
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
+
var buildSettingsViewInputArgs_exports = {};
|
|
29
|
+
__export(buildSettingsViewInputArgs_exports, {
|
|
30
|
+
buildSettingsViewInputArgs: () => buildSettingsViewInputArgs
|
|
31
|
+
});
|
|
32
|
+
module.exports = __toCommonJS(buildSettingsViewInputArgs_exports);
|
|
33
|
+
var import_variablesParams = require("./variablesParams");
|
|
34
|
+
function buildSettingsViewInputArgs(model, extra, options) {
|
|
35
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
|
|
36
|
+
const defaults = {};
|
|
37
|
+
try {
|
|
38
|
+
const ref = (0, import_variablesParams.inferRecordRef)(model.context);
|
|
39
|
+
if (ref == null ? void 0 : ref.collection) {
|
|
40
|
+
defaults.collectionName = ref.collection;
|
|
41
|
+
defaults.dataSourceKey = ref.dataSourceKey || "main";
|
|
42
|
+
defaults.filterByTk = ref.filterByTk;
|
|
43
|
+
}
|
|
44
|
+
const parentArgs = ((_b = (_a = model == null ? void 0 : model.context) == null ? void 0 : _a.view) == null ? void 0 : _b.inputArgs) || {};
|
|
45
|
+
if (!defaults.collectionName && (parentArgs == null ? void 0 : parentArgs.collectionName)) {
|
|
46
|
+
defaults.collectionName = parentArgs.collectionName;
|
|
47
|
+
defaults.dataSourceKey = parentArgs.dataSourceKey || defaults.dataSourceKey || "main";
|
|
48
|
+
}
|
|
49
|
+
if (defaults.filterByTk == null && (parentArgs == null ? void 0 : parentArgs.filterByTk) != null) {
|
|
50
|
+
defaults.filterByTk = parentArgs.filterByTk;
|
|
51
|
+
}
|
|
52
|
+
if (defaults.sourceId == null && (parentArgs == null ? void 0 : parentArgs.sourceId) != null) {
|
|
53
|
+
defaults.sourceId = parentArgs.sourceId;
|
|
54
|
+
}
|
|
55
|
+
const nav = (options == null ? void 0 : options.navigationOverride) ?? ((_d = (_c = model == null ? void 0 : model.context) == null ? void 0 : _c.view) == null ? void 0 : _d.navigation);
|
|
56
|
+
if (nav) {
|
|
57
|
+
defaults.navigation = nav;
|
|
58
|
+
}
|
|
59
|
+
const sid = (_g = (_f = (_e = model == null ? void 0 : model.context) == null ? void 0 : _e.resource) == null ? void 0 : _f.getSourceId) == null ? void 0 : _g.call(_f);
|
|
60
|
+
if (sid !== void 0 && sid !== null && String(sid) !== "") {
|
|
61
|
+
defaults.sourceId = sid;
|
|
62
|
+
}
|
|
63
|
+
const assocName = ((_i = (_h = model == null ? void 0 : model.context) == null ? void 0 : _h.association) == null ? void 0 : _i.resourceName) || ((_l = (_k = (_j = model == null ? void 0 : model.context) == null ? void 0 : _j.resource) == null ? void 0 : _k.getResourceName) == null ? void 0 : _l.call(_k));
|
|
64
|
+
if (typeof assocName === "string" && assocName) {
|
|
65
|
+
defaults.associationName = assocName;
|
|
66
|
+
}
|
|
67
|
+
} catch (_) {
|
|
68
|
+
}
|
|
69
|
+
return { ...defaults, ...extra || {} };
|
|
70
|
+
}
|
|
71
|
+
__name(buildSettingsViewInputArgs, "buildSettingsViewInputArgs");
|
|
72
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
73
|
+
0 && (module.exports = {
|
|
74
|
+
buildSettingsViewInputArgs
|
|
75
|
+
});
|