@nocobase/flow-engine 2.0.0-alpha.4 → 2.0.0-alpha.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/BlockScopedFlowEngine.d.ts +23 -0
- package/lib/BlockScopedFlowEngine.js +90 -0
- package/lib/FlowContextProvider.d.ts +2 -2
- package/lib/FlowContextProvider.js +3 -3
- package/lib/FlowDefinition.d.ts +4 -2
- package/lib/JSRunner.js +3 -0
- package/lib/ViewScopedFlowEngine.d.ts +1 -1
- package/lib/ViewScopedFlowEngine.js +12 -0
- package/lib/acl/Acl.d.ts +1 -0
- package/lib/acl/Acl.js +11 -0
- package/lib/components/FieldModelRenderer.js +14 -6
- package/lib/components/FieldSkeleton.d.ts +10 -0
- package/lib/components/FieldSkeleton.js +64 -0
- package/lib/components/FlowContextSelector.js +7 -2
- package/lib/components/FlowModelRenderer.d.ts +3 -6
- package/lib/components/FlowModelRenderer.js +16 -47
- package/lib/components/FormItem.js +5 -1
- package/lib/components/MobilePopup.d.ts +20 -0
- package/lib/components/MobilePopup.js +102 -0
- package/lib/components/MobilePopup.style.d.ts +17 -0
- package/lib/components/MobilePopup.style.js +186 -0
- package/lib/components/index.d.ts +1 -0
- package/lib/components/index.js +3 -1
- package/lib/components/settings/independents/dropdown/FlowsDropdownButton.js +2 -2
- package/lib/components/settings/wrappers/contextual/DefaultSettingsIcon.js +17 -5
- package/lib/components/settings/wrappers/contextual/FlowsContextMenu.js +2 -2
- package/lib/components/settings/wrappers/contextual/FlowsFloatContextMenu.d.ts +2 -2
- package/lib/components/settings/wrappers/contextual/FlowsFloatContextMenu.js +35 -6
- package/lib/components/settings/wrappers/contextual/StepSettingsDialog.js +7 -1
- package/lib/components/variables/VariableInput.js +19 -5
- package/lib/components/variables/VariableTag.js +43 -2
- package/lib/components/variables/types.d.ts +2 -0
- package/lib/data-source/index.d.ts +15 -4
- package/lib/data-source/index.js +42 -13
- package/lib/data-source/sortCollectionsByInherits.d.ts +10 -0
- package/lib/data-source/sortCollectionsByInherits.js +71 -0
- package/lib/emitter.d.ts +6 -0
- package/lib/emitter.js +12 -0
- package/lib/executor/FlowExecutor.d.ts +4 -5
- package/lib/executor/FlowExecutor.js +168 -99
- package/lib/flow-registry/GlobalFlowRegistry.d.ts +1 -0
- package/lib/flow-registry/GlobalFlowRegistry.js +3 -0
- package/lib/flow-registry/InstanceFlowRegistry.d.ts +1 -0
- package/lib/flow-registry/InstanceFlowRegistry.js +3 -0
- package/lib/flowContext.d.ts +37 -5
- package/lib/flowContext.js +215 -87
- package/lib/flowEngine.d.ts +24 -1
- package/lib/flowEngine.js +56 -6
- package/lib/flowSettings.d.ts +2 -1
- package/lib/flowSettings.js +12 -8
- package/lib/hooks/useApplyAutoFlows.js +2 -1
- package/lib/index.d.ts +7 -1
- package/lib/index.js +32 -3
- package/lib/locale/en-US.json +4 -2
- package/lib/locale/index.d.ts +4 -0
- package/lib/locale/zh-CN.json +4 -2
- package/lib/models/CollectionFieldModel.d.ts +3 -0
- package/lib/models/CollectionFieldModel.js +48 -5
- package/lib/models/flowModel.d.ts +30 -29
- package/lib/models/flowModel.js +135 -98
- package/lib/models/forkFlowModel.d.ts +8 -4
- package/lib/models/forkFlowModel.js +38 -8
- package/lib/provider.d.ts +3 -1
- package/lib/provider.js +7 -5
- package/lib/resources/multiRecordResource.js +25 -1
- package/lib/resources/singleRecordResource.js +19 -1
- package/lib/resources/sqlResource.d.ts +1 -0
- package/lib/resources/sqlResource.js +20 -24
- package/lib/runjs-context/contexts/FormJSFieldItemRunJSContext.d.ts +1 -6
- package/lib/runjs-context/contexts/FormJSFieldItemRunJSContext.js +27 -20
- package/lib/runjs-context/contexts/JSBlockRunJSContext.d.ts +1 -6
- package/lib/runjs-context/contexts/JSBlockRunJSContext.js +46 -33
- package/lib/runjs-context/contexts/JSCollectionActionRunJSContext.d.ts +1 -2
- package/lib/runjs-context/contexts/JSCollectionActionRunJSContext.js +14 -15
- package/lib/runjs-context/contexts/{LinkageRunJSContext.d.ts → JSColumnRunJSContext.d.ts} +6 -3
- package/lib/runjs-context/contexts/JSColumnRunJSContext.js +78 -0
- package/lib/runjs-context/contexts/JSFieldRunJSContext.d.ts +1 -6
- package/lib/runjs-context/contexts/JSFieldRunJSContext.js +28 -24
- package/lib/runjs-context/contexts/JSItemRunJSContext.d.ts +1 -6
- package/lib/runjs-context/contexts/JSItemRunJSContext.js +24 -20
- package/lib/runjs-context/contexts/JSRecordActionRunJSContext.d.ts +1 -2
- package/lib/runjs-context/contexts/JSRecordActionRunJSContext.js +16 -17
- package/lib/runjs-context/contexts/base.d.ts +9 -0
- package/lib/runjs-context/contexts/base.js +183 -0
- package/lib/runjs-context/helpers.d.ts +5 -2
- package/lib/runjs-context/helpers.js +36 -27
- package/lib/runjs-context/registry.d.ts +7 -4
- package/lib/runjs-context/registry.js +10 -42
- package/lib/runjs-context/setup.d.ts +9 -0
- package/lib/runjs-context/setup.js +82 -0
- package/lib/runjs-context/snippets/global/{copy-record-json.snippet.js → api-request.snippet.js} +25 -10
- package/lib/runjs-context/snippets/global/clipboard-copy-text.snippet.js +61 -0
- package/lib/runjs-context/snippets/global/{view-navigation-push.snippet.js → import-esm.snippet.js} +26 -12
- package/lib/runjs-context/snippets/global/message-error.snippet.js +6 -0
- package/lib/runjs-context/snippets/global/message-success.snippet.js +6 -0
- package/lib/runjs-context/snippets/global/notification-open.snippet.d.ts +3 -8
- package/lib/runjs-context/snippets/global/notification-open.snippet.js +8 -1
- package/lib/runjs-context/snippets/global/open-view-dialog.snippet.js +10 -3
- package/lib/runjs-context/snippets/global/open-view-drawer.snippet.js +10 -3
- package/lib/runjs-context/snippets/global/query-selector.snippet.js +53 -0
- package/lib/runjs-context/snippets/global/require-amd.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/global/{requireAsync.snippet.js → require-amd.snippet.js} +16 -13
- package/lib/runjs-context/snippets/global/window-open.snippet.d.ts +3 -8
- package/lib/runjs-context/snippets/global/window-open.snippet.js +8 -1
- package/lib/runjs-context/snippets/index.d.ts +14 -3
- package/lib/runjs-context/snippets/index.js +161 -40
- package/lib/runjs-context/snippets/scene/block/add-event-listener.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/{jsblock → block}/add-event-listener.snippet.js +11 -2
- package/lib/runjs-context/snippets/scene/block/api-fetch-render-list.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/block/api-fetch-render-list.snippet.js +64 -0
- package/lib/runjs-context/snippets/scene/block/chartjs-bar.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/block/chartjs-bar.snippet.js +99 -0
- package/lib/runjs-context/snippets/{libs → scene/block}/echarts-init.snippet.js +24 -7
- package/lib/runjs-context/snippets/scene/block/render-button-handler.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/{jsblock → block}/render-button-handler.snippet.js +17 -9
- package/lib/runjs-context/snippets/scene/block/render-iframe.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/block/render-iframe.snippet.js +57 -0
- package/lib/runjs-context/snippets/scene/block/render-info-card.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/block/render-info-card.snippet.js +71 -0
- package/lib/runjs-context/snippets/scene/block/render-react-jsx.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/{jsblock/render-card.snippet.js → block/render-react-jsx.snippet.js} +26 -13
- package/lib/runjs-context/snippets/scene/block/render-react.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/{jsblock → block}/render-react.snippet.js +18 -17
- package/lib/runjs-context/snippets/scene/block/render-statistics.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/block/render-statistics.snippet.js +95 -0
- package/lib/runjs-context/snippets/scene/block/render-timeline.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/block/render-timeline.snippet.js +84 -0
- package/lib/runjs-context/snippets/scene/block/resource-example.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/block/resource-example.snippet.js +60 -0
- package/lib/runjs-context/snippets/scene/block/three-users-orbit.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/block/three-users-orbit.snippet.js +283 -0
- package/lib/runjs-context/snippets/scene/block/vue-component.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/block/vue-component.snippet.js +124 -0
- package/lib/runjs-context/snippets/scene/detail/color-by-value.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/{jsfield → detail}/color-by-value.snippet.js +13 -3
- package/lib/runjs-context/snippets/scene/detail/copy-to-clipboard.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/{global → scene/detail}/copy-to-clipboard.snippet.js +28 -6
- package/lib/runjs-context/snippets/scene/detail/format-number.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/{jsfield → detail}/format-number.snippet.js +13 -3
- package/lib/runjs-context/snippets/scene/detail/innerHTML-value.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/{jsfield → detail}/innerHTML-value.snippet.js +13 -3
- package/lib/runjs-context/snippets/scene/detail/percentage-bar.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/detail/percentage-bar.snippet.js +82 -0
- package/lib/runjs-context/snippets/scene/detail/relative-time.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/detail/relative-time.snippet.js +80 -0
- package/lib/runjs-context/snippets/scene/detail/status-tag.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/detail/status-tag.snippet.js +74 -0
- package/lib/runjs-context/snippets/scene/form/calculate-total.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/form/calculate-total.snippet.js +63 -0
- package/lib/runjs-context/snippets/scene/form/cascade-select.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/form/cascade-select.snippet.js +81 -0
- package/lib/runjs-context/snippets/scene/form/conditional-required.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/form/conditional-required.snippet.js +64 -0
- package/lib/runjs-context/snippets/scene/form/copy-field-values.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/form/copy-field-values.snippet.js +74 -0
- package/lib/runjs-context/snippets/scene/form/render-basic.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/{jsitem → form}/render-basic.snippet.js +11 -2
- package/lib/runjs-context/snippets/scene/form/set-disabled.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/{linkage → form}/set-disabled.snippet.js +12 -3
- package/lib/runjs-context/snippets/scene/form/set-field-value.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/{linkage → form}/set-field-value.snippet.js +12 -3
- package/lib/runjs-context/snippets/scene/form/set-required.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/{linkage → form}/set-required.snippet.js +12 -3
- package/lib/runjs-context/snippets/scene/form/toggle-multiple-fields.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/form/toggle-multiple-fields.snippet.js +67 -0
- package/lib/runjs-context/snippets/scene/form/toggle-visible.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/{linkage → form}/toggle-visible.snippet.js +12 -3
- package/lib/runjs-context/snippets/scene/table/cell-open-dialog.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/table/cell-open-dialog.snippet.js +64 -0
- package/lib/runjs-context/snippets/scene/table/collection-selected-count.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/{actions → table}/collection-selected-count.snippet.js +11 -2
- package/lib/runjs-context/snippets/scene/table/concat-fields.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/table/concat-fields.snippet.js +79 -0
- package/lib/runjs-context/snippets/scene/table/destroy-selected.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/{global/log-json-record.snippet.js → scene/table/destroy-selected.snippet.js} +24 -11
- package/lib/runjs-context/snippets/scene/table/export-selected-json.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/table/export-selected-json.snippet.js +64 -0
- package/lib/runjs-context/snippets/scene/table/iterate-selected-rows.snippet.d.ts +11 -0
- package/lib/runjs-context/snippets/scene/{actions → table}/iterate-selected-rows.snippet.js +11 -2
- package/lib/runjs-context/snippets/types.d.ts +9 -1
- package/lib/scheduler/ModelOperationScheduler.d.ts +51 -0
- package/lib/scheduler/ModelOperationScheduler.js +262 -0
- package/lib/types.d.ts +28 -3
- package/lib/types.js +4 -3
- package/lib/utils/associationObjectVariable.d.ts +32 -0
- package/lib/utils/associationObjectVariable.js +157 -0
- package/lib/utils/buildSettingsViewInputArgs.d.ts +19 -0
- package/lib/utils/buildSettingsViewInputArgs.js +75 -0
- package/lib/utils/createEphemeralContext.d.ts +13 -0
- package/lib/utils/createEphemeralContext.js +140 -0
- package/lib/utils/flows.d.ts +10 -0
- package/lib/{runjs-context/snippets/global/api-request-post.snippet.js → utils/flows.js} +21 -15
- package/lib/utils/index.d.ts +7 -2
- package/lib/utils/index.js +19 -2
- package/lib/utils/jsxTransform.d.ts +15 -0
- package/lib/utils/jsxTransform.js +68 -0
- package/lib/utils/params-resolvers.js +3 -3
- package/lib/utils/parsePathnameToViewParams.d.ts +1 -1
- package/lib/utils/parsePathnameToViewParams.js +41 -5
- package/lib/utils/pruneFilter.d.ts +21 -0
- package/lib/{runjs-context/snippets/global/try-catch-async.snippet.js → utils/pruneFilter.js} +24 -16
- package/lib/utils/safeGlobals.d.ts +5 -3
- package/lib/utils/safeGlobals.js +40 -0
- package/lib/utils/schema-utils.js +2 -2
- package/lib/utils/serverContextParams.d.ts +1 -0
- package/lib/utils/translation.d.ts +4 -1
- package/lib/utils/translation.js +6 -2
- package/lib/utils/variablesParams.d.ts +9 -5
- package/lib/utils/variablesParams.js +47 -36
- package/lib/views/DrawerComponent.js +21 -2
- package/lib/views/PageComponent.js +2 -1
- package/lib/views/ViewNavigation.d.ts +3 -9
- package/lib/views/ViewNavigation.js +16 -2
- package/lib/views/createViewMeta.d.ts +29 -1
- package/lib/views/createViewMeta.js +338 -72
- package/lib/views/index.d.ts +1 -0
- package/lib/views/index.js +3 -0
- package/lib/views/useDialog.d.ts +8 -8
- package/lib/views/useDialog.js +8 -7
- package/lib/views/useDrawer.d.ts +8 -8
- package/lib/views/useDrawer.js +43 -28
- package/lib/views/usePage.d.ts +8 -8
- package/lib/views/usePage.js +8 -7
- package/package.json +6 -3
- package/src/BlockScopedFlowEngine.ts +86 -0
- package/src/FlowContextProvider.tsx +4 -2
- package/src/JSRunner.ts +3 -0
- package/src/ViewScopedFlowEngine.ts +15 -1
- package/src/__tests__/JSRunner.test.ts +62 -53
- package/src/__tests__/blockScopedFlowEngine.test.ts +154 -0
- package/src/__tests__/createViewMeta.popup.test.ts +132 -0
- package/src/__tests__/flow-engine.test.ts +3 -0
- package/src/__tests__/flowContext.test.ts +52 -0
- package/src/__tests__/flowContextCreateJSRunner.test.ts +163 -0
- package/src/__tests__/flowEngine.saveModel.test.ts +4 -0
- package/src/__tests__/flowRunJSContextDefine.test.ts +508 -0
- package/src/__tests__/flowSettings.open.test.tsx +2 -0
- package/src/__tests__/flowSettings.test.ts +2 -0
- package/src/__tests__/globalFlowRegistry.test.ts +1 -1
- package/src/__tests__/modelOperationScheduler.test.ts +346 -0
- package/src/__tests__/objectVariable.test.ts +464 -0
- package/src/__tests__/runjsContext.test.ts +216 -35
- package/src/__tests__/runjsContextImplementations.test.ts +217 -0
- package/src/__tests__/runjsContextRuntime.test.ts +269 -0
- package/src/__tests__/runjsEdgeCases.test.ts +281 -0
- package/src/__tests__/runjsLocales.test.ts +36 -0
- package/src/__tests__/runjsRuntimeFeatures.test.ts +449 -0
- package/src/__tests__/runjsSnippets.test.ts +140 -0
- package/src/__tests__/viewScopedFlowEngine.test.ts +3 -3
- package/src/acl/Acl.tsx +14 -0
- package/src/acl/__tests__/Acl.test.tsx +43 -0
- package/src/components/DynamicFlowsEditor.tsx +3 -4
- package/src/components/FieldModelRenderer.tsx +20 -7
- package/src/components/FieldSkeleton.tsx +27 -0
- package/src/components/FlowContextSelector.tsx +6 -2
- package/src/components/FlowModelRenderer.tsx +33 -81
- package/src/components/FormItem.tsx +8 -1
- package/src/components/MobilePopup.style.ts +220 -0
- package/src/components/MobilePopup.tsx +86 -0
- package/src/components/__tests__/flow-model-render-error-fallback.test.tsx +6 -6
- package/src/components/index.ts +1 -0
- package/src/components/settings/independents/dropdown/FlowsDropdownButton.tsx +1 -1
- package/src/components/settings/wrappers/contextual/DefaultSettingsIcon.tsx +17 -4
- package/src/components/settings/wrappers/contextual/FlowsContextMenu.tsx +1 -1
- package/src/components/settings/wrappers/contextual/FlowsFloatContextMenu.tsx +39 -10
- package/src/components/settings/wrappers/contextual/StepSettingsDialog.tsx +14 -1
- package/src/components/settings/wrappers/contextual/__tests__/DefaultSettingsIcon.test.tsx +425 -0
- package/src/components/subModel/__tests__/AddSubModelButton.test.tsx +5 -7
- package/src/components/variables/VariableInput.tsx +25 -5
- package/src/components/variables/VariableTag.tsx +54 -2
- package/src/components/variables/types.ts +2 -0
- package/src/data-source/__tests__/sortCollectionsByInherits.test.ts +125 -0
- package/src/data-source/index.ts +42 -11
- package/src/data-source/sortCollectionsByInherits.ts +61 -0
- package/src/emitter.ts +14 -0
- package/src/executor/FlowExecutor.ts +213 -119
- package/src/executor/__tests__/ctx-defs-injection.test.ts +197 -0
- package/src/executor/__tests__/flowExecutor.test.ts +151 -5
- package/src/flow-registry/GlobalFlowRegistry.ts +1 -0
- package/src/flow-registry/InstanceFlowRegistry.ts +1 -0
- package/src/flow-registry/__tests__/globalFlowRegistry.test.ts +54 -0
- package/src/flowContext.ts +290 -104
- package/src/flowEngine.ts +74 -6
- package/src/flowSettings.ts +9 -4
- package/src/hooks/useApplyAutoFlows.ts +3 -1
- package/src/index.ts +12 -1
- package/src/locale/en-US.json +4 -2
- package/src/locale/zh-CN.json +4 -2
- package/src/models/CollectionFieldModel.tsx +56 -7
- package/src/models/__tests__/dispatchEvent.behavior.test.ts +169 -0
- package/src/models/__tests__/flowModel.getFlows.sort.test.ts +33 -9
- package/src/models/__tests__/flowModel.scheduleModelOperation.test.tsx +129 -0
- package/src/models/__tests__/flowModel.test.ts +234 -111
- package/src/models/__tests__/forkFlowModel.test.ts +40 -7
- package/src/models/flowModel.tsx +180 -132
- package/src/models/forkFlowModel.ts +48 -8
- package/src/provider.tsx +10 -7
- package/src/resources/multiRecordResource.ts +28 -1
- package/src/resources/singleRecordResource.ts +19 -1
- package/src/resources/sqlResource.ts +20 -25
- package/src/runjs-context/contexts/FormJSFieldItemRunJSContext.ts +28 -21
- package/src/runjs-context/contexts/JSBlockRunJSContext.ts +46 -34
- package/src/runjs-context/contexts/JSCollectionActionRunJSContext.ts +15 -16
- package/src/runjs-context/contexts/JSColumnRunJSContext.ts +58 -0
- package/src/runjs-context/contexts/JSFieldRunJSContext.ts +30 -25
- package/src/runjs-context/contexts/JSItemRunJSContext.ts +25 -21
- package/src/runjs-context/contexts/JSRecordActionRunJSContext.ts +17 -18
- package/src/runjs-context/contexts/base.ts +171 -0
- package/src/runjs-context/helpers.ts +32 -30
- package/src/runjs-context/registry.ts +16 -47
- package/src/runjs-context/setup.ts +51 -0
- package/src/runjs-context/snippets/global/api-request.snippet.ts +38 -0
- package/src/runjs-context/snippets/global/clipboard-copy-text.snippet.ts +42 -0
- package/src/runjs-context/snippets/global/import-esm.snippet.ts +39 -0
- package/src/runjs-context/snippets/global/message-error.snippet.ts +6 -0
- package/src/runjs-context/snippets/global/message-success.snippet.ts +6 -0
- package/src/runjs-context/snippets/global/notification-open.snippet.ts +11 -1
- package/src/runjs-context/snippets/global/open-view-dialog.snippet.ts +10 -3
- package/src/runjs-context/snippets/global/open-view-drawer.snippet.ts +10 -3
- package/src/runjs-context/snippets/global/query-selector.snippet.ts +34 -0
- package/src/runjs-context/snippets/global/require-amd.snippet.ts +30 -0
- package/src/runjs-context/snippets/global/window-open.snippet.ts +11 -1
- package/src/runjs-context/snippets/index.ts +177 -39
- package/src/runjs-context/snippets/scene/{jsblock → block}/add-event-listener.snippet.ts +14 -2
- package/src/runjs-context/snippets/scene/block/api-fetch-render-list.snippet.ts +45 -0
- package/src/runjs-context/snippets/scene/block/chartjs-bar.snippet.ts +80 -0
- package/src/runjs-context/snippets/scene/block/echarts-init.snippet.ts +44 -0
- package/src/runjs-context/snippets/scene/block/render-button-handler.snippet.ts +35 -0
- package/src/runjs-context/snippets/scene/block/render-iframe.snippet.ts +38 -0
- package/src/runjs-context/snippets/scene/block/render-info-card.snippet.ts +52 -0
- package/src/runjs-context/snippets/scene/block/render-react-jsx.snippet.ts +39 -0
- package/src/runjs-context/snippets/scene/block/render-react.snippet.ts +38 -0
- package/src/runjs-context/snippets/scene/block/render-statistics.snippet.ts +76 -0
- package/src/runjs-context/snippets/scene/block/render-timeline.snippet.ts +65 -0
- package/src/runjs-context/snippets/scene/block/resource-example.snippet.ts +46 -0
- package/src/runjs-context/snippets/scene/block/three-users-orbit.snippet.ts +264 -0
- package/src/runjs-context/snippets/scene/block/vue-component.snippet.ts +105 -0
- package/src/runjs-context/snippets/scene/detail/color-by-value.snippet.ts +33 -0
- package/src/runjs-context/snippets/scene/detail/copy-to-clipboard.snippet.ts +45 -0
- package/src/runjs-context/snippets/scene/detail/format-number.snippet.ts +32 -0
- package/src/runjs-context/snippets/scene/detail/innerHTML-value.snippet.ts +31 -0
- package/src/runjs-context/snippets/scene/detail/percentage-bar.snippet.ts +63 -0
- package/src/runjs-context/snippets/scene/detail/relative-time.snippet.ts +61 -0
- package/src/runjs-context/snippets/scene/detail/status-tag.snippet.ts +55 -0
- package/src/runjs-context/snippets/scene/form/calculate-total.snippet.ts +44 -0
- package/src/runjs-context/snippets/scene/form/cascade-select.snippet.ts +62 -0
- package/src/runjs-context/snippets/scene/form/conditional-required.snippet.ts +45 -0
- package/src/runjs-context/snippets/scene/form/copy-field-values.snippet.ts +55 -0
- package/src/runjs-context/snippets/scene/{jsitem → form}/render-basic.snippet.ts +14 -2
- package/src/runjs-context/snippets/scene/{linkage → form}/set-disabled.snippet.ts +15 -3
- package/src/runjs-context/snippets/scene/{linkage → form}/set-field-value.snippet.ts +15 -3
- package/src/runjs-context/snippets/scene/{linkage → form}/set-required.snippet.ts +15 -3
- package/src/runjs-context/snippets/scene/form/toggle-multiple-fields.snippet.ts +48 -0
- package/src/runjs-context/snippets/scene/{linkage → form}/toggle-visible.snippet.ts +15 -3
- package/src/runjs-context/snippets/scene/table/cell-open-dialog.snippet.ts +45 -0
- package/src/runjs-context/snippets/scene/{actions → table}/collection-selected-count.snippet.ts +14 -2
- package/src/runjs-context/snippets/scene/table/concat-fields.snippet.ts +60 -0
- package/src/runjs-context/snippets/scene/table/destroy-selected.snippet.ts +36 -0
- package/src/runjs-context/snippets/scene/table/export-selected-json.snippet.ts +45 -0
- package/src/runjs-context/snippets/scene/{actions → table}/iterate-selected-rows.snippet.ts +14 -2
- package/src/runjs-context/snippets/types.ts +5 -1
- package/src/scheduler/ModelOperationScheduler.ts +304 -0
- package/src/types.ts +34 -0
- package/src/utils/__tests__/flows.test.ts +65 -0
- package/src/utils/__tests__/jsxTransform.test.ts +38 -0
- package/src/utils/__tests__/parsePathnameToViewParams.test.ts +25 -0
- package/src/utils/__tests__/pruneFilter.test.ts +38 -0
- package/src/utils/__tests__/safeGlobals.test.ts +22 -1
- package/src/utils/associationObjectVariable.ts +180 -0
- package/src/utils/buildSettingsViewInputArgs.ts +72 -0
- package/src/utils/createEphemeralContext.ts +142 -0
- package/src/utils/flows.ts +23 -0
- package/src/utils/index.ts +10 -2
- package/src/utils/jsxTransform.ts +39 -0
- package/src/utils/params-resolvers.ts +2 -2
- package/src/utils/parsePathnameToViewParams.ts +50 -6
- package/src/utils/pruneFilter.ts +41 -0
- package/src/utils/safeGlobals.ts +49 -3
- package/src/utils/schema-utils.ts +1 -1
- package/src/utils/serverContextParams.ts +1 -0
- package/src/utils/translation.ts +7 -2
- package/src/utils/variablesParams.ts +50 -38
- package/src/views/DrawerComponent.tsx +21 -2
- package/src/views/PageComponent.tsx +1 -1
- package/src/views/ViewNavigation.ts +20 -12
- package/src/views/__tests__/ViewNavigation.test.ts +10 -0
- package/src/views/createViewMeta.ts +393 -70
- package/src/views/index.tsx +1 -0
- package/src/views/useDialog.tsx +12 -10
- package/src/views/useDrawer.tsx +62 -37
- package/src/views/usePage.tsx +13 -10
- package/lib/runjs-context/contexts/FlowRunJSContext.d.ts +0 -38
- package/lib/runjs-context/contexts/FlowRunJSContext.js +0 -217
- package/lib/runjs-context/contexts/LinkageRunJSContext.js +0 -62
- package/lib/runjs-context/index.d.ts +0 -19
- package/lib/runjs-context/index.js +0 -57
- package/lib/runjs-context/snippets/global/api-request-get.snippet.d.ts +0 -16
- package/lib/runjs-context/snippets/global/api-request-get.snippet.js +0 -42
- package/lib/runjs-context/snippets/global/api-request-post.snippet.d.ts +0 -16
- package/lib/runjs-context/snippets/global/console-log-ctx.snippet.d.ts +0 -16
- package/lib/runjs-context/snippets/global/console-log-ctx.snippet.js +0 -41
- package/lib/runjs-context/snippets/global/requireAsync.snippet.d.ts +0 -16
- package/lib/runjs-context/snippets/global/sleep.snippet.d.ts +0 -16
- package/lib/runjs-context/snippets/global/sleep.snippet.js +0 -43
- package/lib/runjs-context/snippets/global/try-catch-async.snippet.d.ts +0 -16
- package/lib/runjs-context/snippets/libs/echarts-init.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/actions/collection-selected-count.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/actions/iterate-selected-rows.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/actions/record-id-message.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/actions/record-id-message.snippet.js +0 -43
- package/lib/runjs-context/snippets/scene/actions/run-action-basic.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/actions/run-action-basic.snippet.js +0 -40
- package/lib/runjs-context/snippets/scene/jsblock/add-event-listener.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/jsblock/append-style.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/jsblock/append-style.snippet.js +0 -42
- package/lib/runjs-context/snippets/scene/jsblock/jsx-mount.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/jsblock/jsx-mount.snippet.js +0 -46
- package/lib/runjs-context/snippets/scene/jsblock/jsx-unmount.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/jsblock/jsx-unmount.snippet.js +0 -41
- package/lib/runjs-context/snippets/scene/jsblock/render-basic.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/jsblock/render-basic.snippet.js +0 -41
- package/lib/runjs-context/snippets/scene/jsblock/render-button-handler.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/jsblock/render-react.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/jsfield/color-by-value.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/jsfield/format-number.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/jsfield/innerHTML-value.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/jsitem/render-basic.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/linkage/set-disabled.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/linkage/set-field-value.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/linkage/set-required.snippet.d.ts +0 -15
- package/lib/runjs-context/snippets/scene/linkage/toggle-visible.snippet.d.ts +0 -15
- package/src/runjs-context/contexts/FlowRunJSContext.ts +0 -190
- package/src/runjs-context/contexts/LinkageRunJSContext.ts +0 -35
- package/src/runjs-context/index.ts +0 -20
- package/src/runjs-context/snippets/global/api-request-get.snippet.ts +0 -20
- package/src/runjs-context/snippets/global/api-request-post.snippet.ts +0 -20
- package/src/runjs-context/snippets/global/console-log-ctx.snippet.ts +0 -19
- package/src/runjs-context/snippets/global/copy-record-json.snippet.ts +0 -21
- package/src/runjs-context/snippets/global/copy-to-clipboard.snippet.ts +0 -21
- package/src/runjs-context/snippets/global/log-json-record.snippet.ts +0 -21
- package/src/runjs-context/snippets/global/requireAsync.snippet.ts +0 -24
- package/src/runjs-context/snippets/global/sleep.snippet.ts +0 -21
- package/src/runjs-context/snippets/global/try-catch-async.snippet.ts +0 -22
- package/src/runjs-context/snippets/global/view-navigation-push.snippet.ts +0 -23
- package/src/runjs-context/snippets/libs/echarts-init.snippet.ts +0 -24
- package/src/runjs-context/snippets/scene/actions/record-id-message.snippet.ts +0 -21
- package/src/runjs-context/snippets/scene/actions/run-action-basic.snippet.ts +0 -18
- package/src/runjs-context/snippets/scene/jsblock/append-style.snippet.ts +0 -20
- package/src/runjs-context/snippets/scene/jsblock/jsx-mount.snippet.ts +0 -24
- package/src/runjs-context/snippets/scene/jsblock/jsx-unmount.snippet.ts +0 -19
- package/src/runjs-context/snippets/scene/jsblock/render-basic.snippet.ts +0 -24
- package/src/runjs-context/snippets/scene/jsblock/render-button-handler.snippet.ts +0 -24
- package/src/runjs-context/snippets/scene/jsblock/render-card.snippet.ts +0 -30
- package/src/runjs-context/snippets/scene/jsblock/render-react.snippet.ts +0 -34
- package/src/runjs-context/snippets/scene/jsfield/color-by-value.snippet.ts +0 -20
- package/src/runjs-context/snippets/scene/jsfield/format-number.snippet.ts +0 -19
- package/src/runjs-context/snippets/scene/jsfield/innerHTML-value.snippet.ts +0 -18
- /package/lib/runjs-context/snippets/global/{copy-record-json.snippet.d.ts → api-request.snippet.d.ts} +0 -0
- /package/lib/runjs-context/snippets/global/{copy-to-clipboard.snippet.d.ts → clipboard-copy-text.snippet.d.ts} +0 -0
- /package/lib/runjs-context/snippets/global/{log-json-record.snippet.d.ts → import-esm.snippet.d.ts} +0 -0
- /package/lib/runjs-context/snippets/global/{view-navigation-push.snippet.d.ts → query-selector.snippet.d.ts} +0 -0
- /package/lib/runjs-context/snippets/scene/{jsblock/render-card.snippet.d.ts → block/echarts-init.snippet.d.ts} +0 -0
|
@@ -44,8 +44,8 @@ __export(params_resolvers_exports, {
|
|
|
44
44
|
resolveExpressions: () => resolveExpressions
|
|
45
45
|
});
|
|
46
46
|
module.exports = __toCommonJS(params_resolvers_exports);
|
|
47
|
+
var import_shared = require("@nocobase/shared");
|
|
47
48
|
var import_lodash = __toESM(require("lodash"));
|
|
48
|
-
var import_client = require("@nocobase/utils/client");
|
|
49
49
|
async function resolveDefaultParams(defaultParams, ctx) {
|
|
50
50
|
if (!defaultParams) {
|
|
51
51
|
return {};
|
|
@@ -275,9 +275,9 @@ async function compileExpression(expression, ctx) {
|
|
|
275
275
|
if (!first) return void 0;
|
|
276
276
|
const base = await ctx[first];
|
|
277
277
|
if (segs.length === 0) return base;
|
|
278
|
-
return (0,
|
|
278
|
+
return (0, import_shared.getValuesByPath)(base, segs.join("."));
|
|
279
279
|
}, "resolveDotOnlyPath");
|
|
280
|
-
const singleMatch = expression.match(/^\{\{\s*(
|
|
280
|
+
const singleMatch = expression.match(/^\s*\{\{\s*([^{}]+?)\s*\}\}\s*$/);
|
|
281
281
|
if (singleMatch) {
|
|
282
282
|
const inner = singleMatch[1];
|
|
283
283
|
const dotPath = matchDotOnly(inner);
|
|
@@ -54,16 +54,52 @@ const parsePathnameToViewParams = /* @__PURE__ */ __name((pathname) => {
|
|
|
54
54
|
break;
|
|
55
55
|
}
|
|
56
56
|
} else if (currentView && i + 1 < segments.length) {
|
|
57
|
-
const
|
|
57
|
+
const rawValue = segments[i + 1];
|
|
58
|
+
let decoded = rawValue;
|
|
59
|
+
try {
|
|
60
|
+
decoded = decodeURIComponent(rawValue);
|
|
61
|
+
} catch (_) {
|
|
62
|
+
}
|
|
58
63
|
switch (segment) {
|
|
59
64
|
case "tab":
|
|
60
|
-
currentView.tabUid =
|
|
65
|
+
currentView.tabUid = decoded;
|
|
61
66
|
break;
|
|
62
|
-
case "filterbytk":
|
|
63
|
-
|
|
67
|
+
case "filterbytk": {
|
|
68
|
+
const parseKeyValuePairs = /* @__PURE__ */ __name((s) => {
|
|
69
|
+
const obj = {};
|
|
70
|
+
s.split("&").forEach((pair) => {
|
|
71
|
+
const [k, v = ""] = pair.split("=");
|
|
72
|
+
if (!k) return;
|
|
73
|
+
try {
|
|
74
|
+
const key = decodeURIComponent(k);
|
|
75
|
+
const val = decodeURIComponent(v);
|
|
76
|
+
obj[key] = val;
|
|
77
|
+
} catch (_) {
|
|
78
|
+
obj[k] = v;
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
return obj;
|
|
82
|
+
}, "parseKeyValuePairs");
|
|
83
|
+
let parsed = decoded;
|
|
84
|
+
if (decoded && (decoded.startsWith("{") || decoded.startsWith("["))) {
|
|
85
|
+
try {
|
|
86
|
+
const maybe = JSON.parse(decoded);
|
|
87
|
+
if (maybe && typeof maybe === "object" && !Array.isArray(maybe)) {
|
|
88
|
+
parsed = maybe;
|
|
89
|
+
} else {
|
|
90
|
+
parsed = decoded;
|
|
91
|
+
}
|
|
92
|
+
} catch (_) {
|
|
93
|
+
parsed = decoded;
|
|
94
|
+
}
|
|
95
|
+
} else if (decoded && decoded.includes("=") && decoded.includes("&")) {
|
|
96
|
+
parsed = parseKeyValuePairs(decoded);
|
|
97
|
+
}
|
|
98
|
+
currentView.filterByTk = parsed;
|
|
64
99
|
break;
|
|
100
|
+
}
|
|
65
101
|
case "sourceid":
|
|
66
|
-
currentView.sourceId =
|
|
102
|
+
currentView.sourceId = decoded;
|
|
67
103
|
break;
|
|
68
104
|
default:
|
|
69
105
|
break;
|
|
@@ -0,0 +1,21 @@
|
|
|
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
|
+
* 递归清理筛选对象中的“空值”。
|
|
11
|
+
*
|
|
12
|
+
* 规则:
|
|
13
|
+
* - 移除:`null`、`undefined`、空字符串 `''`、空数组 `[]`、空对象 `{}`;
|
|
14
|
+
* - 保留:`false`、`0` 等有意义的“假值”。
|
|
15
|
+
*
|
|
16
|
+
* 注意:当清理后整体变为空结构时,返回 `undefined`,用于表示无需下发该条件。
|
|
17
|
+
*
|
|
18
|
+
* @param input 任意筛选对象/数组/原始值
|
|
19
|
+
* @returns 清理后的对象;若为空则返回 `undefined`
|
|
20
|
+
*/
|
|
21
|
+
export declare function pruneFilter<T = any>(input: T): T | undefined;
|
package/lib/{runjs-context/snippets/global/try-catch-async.snippet.js → utils/pruneFilter.js}
RENAMED
|
@@ -11,6 +11,7 @@ var __defProp = Object.defineProperty;
|
|
|
11
11
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
12
12
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
13
13
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
14
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
14
15
|
var __export = (target, all) => {
|
|
15
16
|
for (var name in all)
|
|
16
17
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -24,21 +25,28 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
24
25
|
return to;
|
|
25
26
|
};
|
|
26
27
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
27
|
-
var
|
|
28
|
-
__export(
|
|
29
|
-
|
|
28
|
+
var pruneFilter_exports = {};
|
|
29
|
+
__export(pruneFilter_exports, {
|
|
30
|
+
pruneFilter: () => pruneFilter
|
|
30
31
|
});
|
|
31
|
-
module.exports = __toCommonJS(
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
32
|
+
module.exports = __toCommonJS(pruneFilter_exports);
|
|
33
|
+
function pruneFilter(input) {
|
|
34
|
+
if (Array.isArray(input)) {
|
|
35
|
+
const arr = input.map((v) => pruneFilter(v)).filter((v) => v !== void 0);
|
|
36
|
+
return arr.length ? arr : void 0;
|
|
37
|
+
}
|
|
38
|
+
if (input && typeof input === "object") {
|
|
39
|
+
const out = {};
|
|
40
|
+
Object.keys(input).forEach((k) => {
|
|
41
|
+
const v = pruneFilter(input[k]);
|
|
42
|
+
if (v !== void 0) out[k] = v;
|
|
43
|
+
});
|
|
44
|
+
return Object.keys(out).length ? out : void 0;
|
|
45
|
+
}
|
|
46
|
+
return input === null || input === void 0 || typeof input === "string" && input === "" ? void 0 : input;
|
|
42
47
|
}
|
|
43
|
-
|
|
44
|
-
|
|
48
|
+
__name(pruneFilter, "pruneFilter");
|
|
49
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
50
|
+
0 && (module.exports = {
|
|
51
|
+
pruneFilter
|
|
52
|
+
});
|
|
@@ -7,10 +7,12 @@
|
|
|
7
7
|
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
8
|
*/
|
|
9
9
|
/**
|
|
10
|
-
* 统一的安全全局对象代理:window/document
|
|
11
|
-
* -
|
|
12
|
-
* - document
|
|
10
|
+
* 统一的安全全局对象代理:window/document/navigator
|
|
11
|
+
* - window:仅允许常用的定时器、console、Math、Date、addEventListener、open(安全包装)、location(安全代理)
|
|
12
|
+
* - document:仅允许 createElement/querySelector/querySelectorAll
|
|
13
|
+
* - navigator:仅提供极少量低风险能力(clipboard.writeText、onLine、language、languages)
|
|
13
14
|
* - 不允许随意访问未声明的属性,最小权限原则
|
|
14
15
|
*/
|
|
15
16
|
export declare function createSafeWindow(extra?: Record<string, any>): {};
|
|
16
17
|
export declare function createSafeDocument(extra?: Record<string, any>): {};
|
|
18
|
+
export declare function createSafeNavigator(extra?: Record<string, any>): {};
|
package/lib/utils/safeGlobals.js
CHANGED
|
@@ -28,6 +28,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
28
28
|
var safeGlobals_exports = {};
|
|
29
29
|
__export(safeGlobals_exports, {
|
|
30
30
|
createSafeDocument: () => createSafeDocument,
|
|
31
|
+
createSafeNavigator: () => createSafeNavigator,
|
|
31
32
|
createSafeWindow: () => createSafeWindow
|
|
32
33
|
});
|
|
33
34
|
module.exports = __toCommonJS(safeGlobals_exports);
|
|
@@ -172,8 +173,47 @@ function createSafeDocument(extra) {
|
|
|
172
173
|
);
|
|
173
174
|
}
|
|
174
175
|
__name(createSafeDocument, "createSafeDocument");
|
|
176
|
+
function createSafeNavigator(extra) {
|
|
177
|
+
var _a;
|
|
178
|
+
const nav = typeof window !== "undefined" && window.navigator || void 0;
|
|
179
|
+
const clipboard = {};
|
|
180
|
+
const writeText = (_a = nav == null ? void 0 : nav.clipboard) == null ? void 0 : _a.writeText;
|
|
181
|
+
if (typeof writeText === "function") {
|
|
182
|
+
clipboard.writeText = writeText.bind(nav.clipboard);
|
|
183
|
+
}
|
|
184
|
+
const allowed = {
|
|
185
|
+
clipboard
|
|
186
|
+
};
|
|
187
|
+
Object.defineProperty(allowed, "onLine", {
|
|
188
|
+
get: /* @__PURE__ */ __name(() => !!(nav == null ? void 0 : nav.onLine), "get"),
|
|
189
|
+
enumerable: true,
|
|
190
|
+
configurable: false
|
|
191
|
+
});
|
|
192
|
+
Object.defineProperty(allowed, "language", {
|
|
193
|
+
get: /* @__PURE__ */ __name(() => nav == null ? void 0 : nav.language, "get"),
|
|
194
|
+
enumerable: true,
|
|
195
|
+
configurable: false
|
|
196
|
+
});
|
|
197
|
+
Object.defineProperty(allowed, "languages", {
|
|
198
|
+
get: /* @__PURE__ */ __name(() => (nav == null ? void 0 : nav.languages) ? [...nav.languages] : void 0, "get"),
|
|
199
|
+
enumerable: true,
|
|
200
|
+
configurable: false
|
|
201
|
+
});
|
|
202
|
+
Object.assign(allowed, extra || {});
|
|
203
|
+
return new Proxy(
|
|
204
|
+
{},
|
|
205
|
+
{
|
|
206
|
+
get(_t, prop) {
|
|
207
|
+
if (prop in allowed) return allowed[prop];
|
|
208
|
+
throw new Error(`Access to navigator property "${String(prop)}" is not allowed.`);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
);
|
|
212
|
+
}
|
|
213
|
+
__name(createSafeNavigator, "createSafeNavigator");
|
|
175
214
|
// Annotate the CommonJS export names for ESM import in node:
|
|
176
215
|
0 && (module.exports = {
|
|
177
216
|
createSafeDocument,
|
|
217
|
+
createSafeNavigator,
|
|
178
218
|
createSafeWindow
|
|
179
219
|
});
|
|
@@ -131,14 +131,14 @@ function compileUiSchema(scope, uiSchema, options = {}) {
|
|
|
131
131
|
}
|
|
132
132
|
__name(compileUiSchema, "compileUiSchema");
|
|
133
133
|
async function resolveStepUiSchema(model, flow, step) {
|
|
134
|
-
var _a
|
|
134
|
+
var _a;
|
|
135
135
|
const flowRuntimeContext = new import_flowContext.FlowRuntimeContext(model, flow.key, "settings");
|
|
136
136
|
(0, import_setupRuntimeContextSteps.setupRuntimeContextSteps)(flowRuntimeContext, flow.steps, model, flow.key);
|
|
137
137
|
flowRuntimeContext.defineProperty("currentStep", { value: step });
|
|
138
138
|
let stepUiSchema = step.uiSchema;
|
|
139
139
|
if (step.use) {
|
|
140
140
|
try {
|
|
141
|
-
const action = (
|
|
141
|
+
const action = (_a = model.getAction) == null ? void 0 : _a.call(model, step.use);
|
|
142
142
|
if (action && action.uiSchema) {
|
|
143
143
|
stepUiSchema = stepUiSchema || action.uiSchema;
|
|
144
144
|
}
|
|
@@ -14,5 +14,8 @@ import type { FlowModel } from '../models';
|
|
|
14
14
|
* @returns 翻译函数,自动使用 flow-engine 命名空间
|
|
15
15
|
*/
|
|
16
16
|
export declare function getT(model: FlowModel): (key: string, options?: any) => string;
|
|
17
|
+
export declare function tExpr(text: TFuncKey | TFuncKey[], options?: TOptions): string;
|
|
18
|
+
/**
|
|
19
|
+
* @deprecated use tExpr from `@nocobase/flow-engine` instead
|
|
20
|
+
*/
|
|
17
21
|
export declare function escapeT(text: TFuncKey | TFuncKey[], options?: TOptions): string;
|
|
18
|
-
export { escapeT as tExpr };
|
package/lib/utils/translation.js
CHANGED
|
@@ -29,7 +29,7 @@ var translation_exports = {};
|
|
|
29
29
|
__export(translation_exports, {
|
|
30
30
|
escapeT: () => escapeT,
|
|
31
31
|
getT: () => getT,
|
|
32
|
-
tExpr: () =>
|
|
32
|
+
tExpr: () => tExpr
|
|
33
33
|
});
|
|
34
34
|
module.exports = __toCommonJS(translation_exports);
|
|
35
35
|
var import_constants = require("./constants");
|
|
@@ -43,12 +43,16 @@ function getT(model) {
|
|
|
43
43
|
return (key) => key;
|
|
44
44
|
}
|
|
45
45
|
__name(getT, "getT");
|
|
46
|
-
function
|
|
46
|
+
function tExpr(text, options) {
|
|
47
47
|
if (options) {
|
|
48
48
|
return `{{t(${JSON.stringify(text)}, ${JSON.stringify(options)})}}`;
|
|
49
49
|
}
|
|
50
50
|
return `{{t(${JSON.stringify(text)})}}`;
|
|
51
51
|
}
|
|
52
|
+
__name(tExpr, "tExpr");
|
|
53
|
+
function escapeT(text, options) {
|
|
54
|
+
return tExpr(text, options);
|
|
55
|
+
}
|
|
52
56
|
__name(escapeT, "escapeT");
|
|
53
57
|
// Annotate the CommonJS export names for ESM import in node:
|
|
54
58
|
0 && (module.exports = {
|
|
@@ -6,11 +6,13 @@
|
|
|
6
6
|
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
7
|
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
8
|
*/
|
|
9
|
-
import
|
|
10
|
-
import type { JSONValue } from './params-resolvers';
|
|
9
|
+
import { extractUsedVariableNames as _extractUsedVariableNames, extractUsedVariablePaths as _extractUsedVariablePaths } from '@nocobase/shared';
|
|
11
10
|
import type { Collection } from '../data-source';
|
|
11
|
+
import type { FlowContext, PropertyMeta, PropertyMetaFactory } from '../flowContext';
|
|
12
12
|
import { type RecordRef, type ServerContextParams } from '../utils/serverContextParams';
|
|
13
|
+
import type { JSONValue } from './params-resolvers';
|
|
13
14
|
export declare function inferRecordRef(ctx: FlowContext): RecordRef | undefined;
|
|
15
|
+
export declare function inferViewRecordRef(ctx: FlowContext): RecordRef | undefined;
|
|
14
16
|
export declare function inferParentRecordRef(ctx: FlowContext): RecordRef | undefined;
|
|
15
17
|
export type RecordParamsBuilder = (ctx: FlowContext) => RecordRef | Promise<RecordRef> | undefined;
|
|
16
18
|
/**
|
|
@@ -27,12 +29,14 @@ export declare function createRecordMetaFactory(collectionAccessor: () => Collec
|
|
|
27
29
|
* - Title: t('Current record')
|
|
28
30
|
* - Params: inferRecordRef(ctx)
|
|
29
31
|
*/
|
|
30
|
-
export declare function createCurrentRecordMetaFactory(ctx: FlowContext, collectionAccessor: () => Collection | null
|
|
32
|
+
export declare function createCurrentRecordMetaFactory(ctx: FlowContext, collectionAccessor: () => Collection | null, options?: {
|
|
33
|
+
title?: string;
|
|
34
|
+
}): PropertyMetaFactory;
|
|
31
35
|
/**
|
|
32
36
|
* Extract top-level ctx variable names used inside a JSON template.
|
|
33
37
|
* Supports dot and bracket notations, e.g. {{ ctx.record.id }}, {{ ctx['parentRecord'].name }}.
|
|
34
38
|
*/
|
|
35
|
-
export declare const extractUsedVariableNames:
|
|
39
|
+
export declare const extractUsedVariableNames: typeof _extractUsedVariableNames;
|
|
36
40
|
/**
|
|
37
41
|
* Extract used top-level ctx variables with their subpaths.
|
|
38
42
|
* Returns a map: varName -> string[] subPaths
|
|
@@ -42,7 +46,7 @@ export declare const extractUsedVariableNames: any;
|
|
|
42
46
|
* - {{ ctx.view.record.id }} => { view: ['record.id'] }
|
|
43
47
|
* - {{ ctx.twice(21) }} => { twice: [''] } // method call -> empty subPath
|
|
44
48
|
*/
|
|
45
|
-
export declare const extractUsedVariablePaths:
|
|
49
|
+
export declare const extractUsedVariablePaths: typeof _extractUsedVariablePaths;
|
|
46
50
|
/**
|
|
47
51
|
* 根据模板中用到的 ctx 变量,收集并构建服务端解析所需的 contextParams。
|
|
48
52
|
* - 通过 FlowContext 的 PropertyMeta.buildVariablesParams 收集 RecordRef
|
|
@@ -34,12 +34,13 @@ __export(variablesParams_exports, {
|
|
|
34
34
|
extractUsedVariableNames: () => extractUsedVariableNames,
|
|
35
35
|
extractUsedVariablePaths: () => extractUsedVariablePaths,
|
|
36
36
|
inferParentRecordRef: () => inferParentRecordRef,
|
|
37
|
-
inferRecordRef: () => inferRecordRef
|
|
37
|
+
inferRecordRef: () => inferRecordRef,
|
|
38
|
+
inferViewRecordRef: () => inferViewRecordRef
|
|
38
39
|
});
|
|
39
40
|
module.exports = __toCommonJS(variablesParams_exports);
|
|
40
|
-
var
|
|
41
|
+
var import_shared = require("@nocobase/shared");
|
|
41
42
|
var import_serverContextParams = require("../utils/serverContextParams");
|
|
42
|
-
var
|
|
43
|
+
var import_createCollectionContextMeta = require("./createCollectionContextMeta");
|
|
43
44
|
function isObject(value) {
|
|
44
45
|
return typeof value === "object" && value !== null;
|
|
45
46
|
}
|
|
@@ -71,14 +72,27 @@ function inferRecordRef(ctx) {
|
|
|
71
72
|
return { collection, dataSourceKey, filterByTk };
|
|
72
73
|
}
|
|
73
74
|
__name(inferRecordRef, "inferRecordRef");
|
|
75
|
+
function inferViewRecordRef(ctx) {
|
|
76
|
+
var _a, _b, _c;
|
|
77
|
+
const view = ctx.view;
|
|
78
|
+
if (!view) return void 0;
|
|
79
|
+
const inputArgs = (view == null ? void 0 : view.inputArgs) || {};
|
|
80
|
+
const collection = (inputArgs == null ? void 0 : inputArgs.collectionName) || ((_a = view == null ? void 0 : view.record) == null ? void 0 : _a.collection);
|
|
81
|
+
const dataSourceKey = (inputArgs == null ? void 0 : inputArgs.dataSourceKey) || ((_b = view == null ? void 0 : view.record) == null ? void 0 : _b.dataSourceKey) || "main";
|
|
82
|
+
const filterByTk = (inputArgs == null ? void 0 : inputArgs.filterByTk) || ((_c = view == null ? void 0 : view.record) == null ? void 0 : _c.filterByTk);
|
|
83
|
+
const sourceId = inputArgs == null ? void 0 : inputArgs.sourceId;
|
|
84
|
+
if (!collection || typeof filterByTk === "undefined" || filterByTk === null) return void 0;
|
|
85
|
+
return { collection, dataSourceKey, filterByTk, sourceId };
|
|
86
|
+
}
|
|
87
|
+
__name(inferViewRecordRef, "inferViewRecordRef");
|
|
74
88
|
function inferParentRecordRef(ctx) {
|
|
75
89
|
var _a, _b, _c, _d;
|
|
76
90
|
const resource = getResource(ctx);
|
|
77
91
|
const dataSourceKey = ((_a = getCollection(ctx)) == null ? void 0 : _a.dataSourceKey) || ((_b = resource == null ? void 0 : resource.getDataSourceKey) == null ? void 0 : _b.call(resource));
|
|
78
|
-
const
|
|
92
|
+
const resourceName = (_c = resource == null ? void 0 : resource.getResourceName) == null ? void 0 : _c.call(resource);
|
|
79
93
|
const sourceId = (_d = resource == null ? void 0 : resource.getSourceId) == null ? void 0 : _d.call(resource);
|
|
80
|
-
if (!
|
|
81
|
-
const parts = String(
|
|
94
|
+
if (!resourceName || typeof sourceId === "undefined" || sourceId === null) return void 0;
|
|
95
|
+
const parts = String(resourceName).split(".");
|
|
82
96
|
if (parts.length < 2) return void 0;
|
|
83
97
|
return { collection: parts[0], dataSourceKey, filterByTk: sourceId };
|
|
84
98
|
}
|
|
@@ -98,43 +112,39 @@ function createRecordMetaFactory(collectionAccessor, title, paramsBuilder) {
|
|
|
98
112
|
return factory;
|
|
99
113
|
}
|
|
100
114
|
__name(createRecordMetaFactory, "createRecordMetaFactory");
|
|
101
|
-
function createCurrentRecordMetaFactory(ctx, collectionAccessor) {
|
|
102
|
-
var _a;
|
|
103
|
-
const title = ((_a = ctx == null ? void 0 : ctx.t) == null ? void 0 :
|
|
115
|
+
function createCurrentRecordMetaFactory(ctx, collectionAccessor, options) {
|
|
116
|
+
var _a, _b;
|
|
117
|
+
const title = (options == null ? void 0 : options.title) ? ((_a = ctx.t) == null ? void 0 : _a.call(ctx, options.title)) || options.title : ((_b = ctx.t) == null ? void 0 : _b.call(ctx, "Current record")) || "Current record";
|
|
104
118
|
return createRecordMetaFactory(collectionAccessor, title, (c) => inferRecordRef(c));
|
|
105
119
|
}
|
|
106
120
|
__name(createCurrentRecordMetaFactory, "createCurrentRecordMetaFactory");
|
|
107
|
-
const extractUsedVariableNames =
|
|
108
|
-
const extractUsedVariablePaths =
|
|
121
|
+
const extractUsedVariableNames = import_shared.extractUsedVariableNames;
|
|
122
|
+
const extractUsedVariablePaths = import_shared.extractUsedVariablePaths;
|
|
109
123
|
async function collectContextParamsForTemplate(ctx, template) {
|
|
110
124
|
var _a;
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
built = await builder(ctx);
|
|
126
|
-
}
|
|
127
|
-
} catch (err) {
|
|
128
|
-
continue;
|
|
129
|
-
}
|
|
130
|
-
if (built) {
|
|
131
|
-
input[key] = built;
|
|
125
|
+
const usage = (0, import_shared.extractUsedVariablePaths)(template) || {};
|
|
126
|
+
const varNames = Object.keys(usage);
|
|
127
|
+
if (!varNames.length) return void 0;
|
|
128
|
+
const input = {};
|
|
129
|
+
for (const key of varNames) {
|
|
130
|
+
const opt = (_a = ctx.getPropertyOptions) == null ? void 0 : _a.call(ctx, key);
|
|
131
|
+
const meta = opt == null ? void 0 : opt.meta;
|
|
132
|
+
if (!meta) continue;
|
|
133
|
+
let built;
|
|
134
|
+
try {
|
|
135
|
+
const resolvedMeta = typeof meta === "function" ? await meta() : meta;
|
|
136
|
+
const builder = resolvedMeta == null ? void 0 : resolvedMeta.buildVariablesParams;
|
|
137
|
+
if (typeof builder === "function") {
|
|
138
|
+
built = await builder(ctx);
|
|
132
139
|
}
|
|
140
|
+
} catch (err) {
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
if (built) {
|
|
144
|
+
input[key] = built;
|
|
133
145
|
}
|
|
134
|
-
return (0, import_serverContextParams.buildServerContextParams)(ctx, input);
|
|
135
|
-
} catch (_) {
|
|
136
|
-
return void 0;
|
|
137
146
|
}
|
|
147
|
+
return (0, import_serverContextParams.buildServerContextParams)(ctx, input);
|
|
138
148
|
}
|
|
139
149
|
__name(collectContextParamsForTemplate, "collectContextParamsForTemplate");
|
|
140
150
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -146,5 +156,6 @@ __name(collectContextParamsForTemplate, "collectContextParamsForTemplate");
|
|
|
146
156
|
extractUsedVariableNames,
|
|
147
157
|
extractUsedVariablePaths,
|
|
148
158
|
inferParentRecordRef,
|
|
149
|
-
inferRecordRef
|
|
159
|
+
inferRecordRef,
|
|
160
|
+
inferViewRecordRef
|
|
150
161
|
});
|
|
@@ -42,12 +42,13 @@ __export(DrawerComponent_exports, {
|
|
|
42
42
|
module.exports = __toCommonJS(DrawerComponent_exports);
|
|
43
43
|
var import_antd = require("antd");
|
|
44
44
|
var React = __toESM(require("react"));
|
|
45
|
+
var import_MobilePopup = require("../components/MobilePopup");
|
|
45
46
|
const DrawerComponent = React.forwardRef((props, ref) => {
|
|
46
47
|
var _a;
|
|
47
|
-
const { children, footer: initialFooter, title, extra, hidden, ...drawerProps } = props;
|
|
48
|
+
const { children, footer: initialFooter, title, extra, hidden, isMobile, ...drawerProps } = props;
|
|
48
49
|
const [open, setOpen] = React.useState(true);
|
|
49
50
|
const [footer, setFooter] = React.useState(() => initialFooter);
|
|
50
|
-
const [header, setHeader] = React.useState({ title, extra });
|
|
51
|
+
const [header, setHeader] = React.useState({ title, extra, ...drawerProps.header });
|
|
51
52
|
React.useImperativeHandle(
|
|
52
53
|
ref,
|
|
53
54
|
() => ({
|
|
@@ -75,6 +76,24 @@ const DrawerComponent = React.forwardRef((props, ref) => {
|
|
|
75
76
|
const container = React.useMemo(() => {
|
|
76
77
|
return document.querySelector("#nocobase-app-container");
|
|
77
78
|
}, []);
|
|
79
|
+
if (isMobile) {
|
|
80
|
+
return /* @__PURE__ */ React.createElement(
|
|
81
|
+
import_MobilePopup.MobilePopup,
|
|
82
|
+
{
|
|
83
|
+
className: hidden ? "nb-hidden" : "",
|
|
84
|
+
visible: open,
|
|
85
|
+
...drawerProps,
|
|
86
|
+
footer,
|
|
87
|
+
...header,
|
|
88
|
+
onClose: () => {
|
|
89
|
+
var _a2;
|
|
90
|
+
setOpen(false);
|
|
91
|
+
(_a2 = drawerProps.afterClose) == null ? void 0 : _a2.call(drawerProps);
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
children
|
|
95
|
+
);
|
|
96
|
+
}
|
|
78
97
|
return /* @__PURE__ */ React.createElement(
|
|
79
98
|
import_antd.Drawer,
|
|
80
99
|
{
|
|
@@ -56,7 +56,8 @@ const PageComponent = (0, import_react.forwardRef)((props, ref) => {
|
|
|
56
56
|
hidden,
|
|
57
57
|
title: _title,
|
|
58
58
|
styles = {},
|
|
59
|
-
zIndex
|
|
59
|
+
zIndex = 4
|
|
60
|
+
// 这个默认值是为了防止表格的阴影显示到子页面上面
|
|
60
61
|
} = mergedProps;
|
|
61
62
|
const closedRef = (0, import_react.useRef)(false);
|
|
62
63
|
const flowEngine = (0, import_provider.useFlowEngine)();
|
|
@@ -7,16 +7,10 @@
|
|
|
7
7
|
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
8
|
*/
|
|
9
9
|
import { FlowEngineContext } from '../flowContext';
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
import { ViewParam as SharedViewParam } from '../utils';
|
|
11
|
+
type ViewParam = Omit<SharedViewParam, 'viewUid'> & {
|
|
12
12
|
viewUid?: string;
|
|
13
|
-
|
|
14
|
-
tabUid?: string;
|
|
15
|
-
/** 弹窗记录的 id */
|
|
16
|
-
filterByTk?: string;
|
|
17
|
-
/** source Id */
|
|
18
|
-
sourceId?: string;
|
|
19
|
-
}
|
|
13
|
+
};
|
|
20
14
|
/**
|
|
21
15
|
* 将 ViewParam 数组转换为 pathname
|
|
22
16
|
*
|
|
@@ -31,6 +31,17 @@ __export(ViewNavigation_exports, {
|
|
|
31
31
|
generatePathnameFromViewParams: () => generatePathnameFromViewParams
|
|
32
32
|
});
|
|
33
33
|
module.exports = __toCommonJS(ViewNavigation_exports);
|
|
34
|
+
function encodeFilterByTk(val) {
|
|
35
|
+
if (val === void 0 || val === null) return "";
|
|
36
|
+
if (val && typeof val === "object" && !Array.isArray(val)) {
|
|
37
|
+
const pairs = Object.entries(val).map(([k, v]) => {
|
|
38
|
+
return `${encodeURIComponent(String(k))}=${encodeURIComponent(String(v))}`;
|
|
39
|
+
});
|
|
40
|
+
return encodeURIComponent(pairs.join("&"));
|
|
41
|
+
}
|
|
42
|
+
return encodeURIComponent(String(val));
|
|
43
|
+
}
|
|
44
|
+
__name(encodeFilterByTk, "encodeFilterByTk");
|
|
34
45
|
function generatePathnameFromViewParams(viewParams) {
|
|
35
46
|
if (!viewParams || viewParams.length === 0) {
|
|
36
47
|
return "/admin";
|
|
@@ -44,8 +55,11 @@ function generatePathnameFromViewParams(viewParams) {
|
|
|
44
55
|
if (viewParam.tabUid) {
|
|
45
56
|
segments.push("tab", viewParam.tabUid);
|
|
46
57
|
}
|
|
47
|
-
if (viewParam.filterByTk) {
|
|
48
|
-
|
|
58
|
+
if (viewParam.filterByTk != null) {
|
|
59
|
+
const encoded = encodeFilterByTk(viewParam.filterByTk);
|
|
60
|
+
if (encoded) {
|
|
61
|
+
segments.push("filterbytk", encoded);
|
|
62
|
+
}
|
|
49
63
|
}
|
|
50
64
|
if (viewParam.sourceId) {
|
|
51
65
|
segments.push("sourceid", viewParam.sourceId);
|
|
@@ -7,10 +7,38 @@
|
|
|
7
7
|
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
8
|
*/
|
|
9
9
|
import type { FlowContext, PropertyMetaFactory } from '../flowContext';
|
|
10
|
+
import type { FlowView } from './FlowView';
|
|
10
11
|
/**
|
|
11
12
|
* Create a meta factory for ctx.view that includes:
|
|
12
13
|
* - buildVariablesParams: { record } via inferRecordRef
|
|
13
14
|
* - properties.record: full collection meta via buildRecordMeta
|
|
14
15
|
* - type/preventClose/inputArgs/navigation fields for better variable selection UX
|
|
15
16
|
*/
|
|
16
|
-
export declare function createViewMeta(ctx: FlowContext
|
|
17
|
+
export declare function createViewMeta(ctx: FlowContext): PropertyMetaFactory;
|
|
18
|
+
/**
|
|
19
|
+
* 为 ctx.popup 构建元信息:
|
|
20
|
+
* - popup.record:当前弹窗记录(服务端解析)
|
|
21
|
+
* - popup.resource:数据源信息(前端解析)
|
|
22
|
+
* - popup.parent:上级弹窗(无限级,前端解析;不存在则禁用/为空)
|
|
23
|
+
*/
|
|
24
|
+
export declare function createPopupMeta(ctx: FlowContext, anchorView?: FlowView): PropertyMetaFactory;
|
|
25
|
+
/**
|
|
26
|
+
* 根据视图堆栈构建 popup 运行时值(resource + parent 链)
|
|
27
|
+
*/
|
|
28
|
+
interface PopupNodeResource {
|
|
29
|
+
dataSourceKey: string;
|
|
30
|
+
collectionName?: string;
|
|
31
|
+
filterByTk?: any;
|
|
32
|
+
sourceId?: any;
|
|
33
|
+
}
|
|
34
|
+
interface PopupNode {
|
|
35
|
+
uid?: string;
|
|
36
|
+
resource: PopupNodeResource;
|
|
37
|
+
parent?: PopupNode;
|
|
38
|
+
}
|
|
39
|
+
export declare function buildPopupRuntime(ctx: FlowContext, view: FlowView): Promise<PopupNode | undefined>;
|
|
40
|
+
/**
|
|
41
|
+
* 在视图上下文中注册 popup 变量(统一消除重复)
|
|
42
|
+
*/
|
|
43
|
+
export declare function registerPopupVariable(ctx: FlowContext, view: FlowView): void;
|
|
44
|
+
export {};
|