@nocobase/flow-engine 2.0.0-alpha.7 → 2.0.0-alpha.71

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (589) hide show
  1. package/lib/BlockScopedFlowEngine.d.ts +23 -0
  2. package/lib/BlockScopedFlowEngine.js +91 -0
  3. package/lib/FlowContextProvider.d.ts +2 -2
  4. package/lib/FlowContextProvider.js +3 -3
  5. package/lib/FlowDefinition.d.ts +6 -4
  6. package/lib/JSRunner.d.ts +6 -0
  7. package/lib/JSRunner.js +27 -1
  8. package/lib/ViewScopedFlowEngine.d.ts +1 -1
  9. package/lib/ViewScopedFlowEngine.js +18 -1
  10. package/lib/acl/Acl.d.ts +12 -12
  11. package/lib/acl/Acl.js +88 -30
  12. package/lib/components/DynamicFlowsEditor.js +2 -4
  13. package/lib/components/FieldModelRenderer.js +17 -9
  14. package/lib/components/FieldSkeleton.d.ts +10 -0
  15. package/lib/components/FieldSkeleton.js +64 -0
  16. package/lib/components/FlowContextSelector.js +19 -3
  17. package/lib/components/FlowModelRenderer.d.ts +4 -6
  18. package/lib/components/FlowModelRenderer.js +35 -53
  19. package/lib/components/FormItem.js +5 -1
  20. package/lib/components/MobilePopup.d.ts +20 -0
  21. package/lib/components/MobilePopup.js +102 -0
  22. package/lib/components/MobilePopup.style.d.ts +17 -0
  23. package/lib/components/MobilePopup.style.js +186 -0
  24. package/lib/components/common/withFlowDesignMode.d.ts +1 -1
  25. package/lib/components/common/withFlowDesignMode.js +5 -5
  26. package/lib/components/dnd/gridDragPlanner.d.ts +1 -0
  27. package/lib/components/dnd/gridDragPlanner.js +53 -1
  28. package/lib/components/index.d.ts +1 -0
  29. package/lib/components/index.js +3 -1
  30. package/lib/components/settings/independents/dropdown/FlowsDropdownButton.js +71 -53
  31. package/lib/components/settings/wrappers/component/SelectWithTitle.d.ts +19 -0
  32. package/lib/components/settings/wrappers/component/SelectWithTitle.js +136 -0
  33. package/lib/components/settings/wrappers/component/SwitchWithTitle.d.ts +10 -0
  34. package/lib/components/settings/wrappers/component/SwitchWithTitle.js +111 -0
  35. package/lib/components/settings/wrappers/contextual/DefaultSettingsIcon.js +233 -97
  36. package/lib/components/settings/wrappers/contextual/FlowsContextMenu.js +71 -54
  37. package/lib/components/settings/wrappers/contextual/FlowsFloatContextMenu.d.ts +2 -2
  38. package/lib/components/settings/wrappers/contextual/FlowsFloatContextMenu.js +63 -23
  39. package/lib/components/settings/wrappers/contextual/StepSettingsDialog.js +13 -2
  40. package/lib/components/settings/wrappers/embedded/FlowSettings.js +42 -28
  41. package/lib/components/settings/wrappers/embedded/FlowsSettings.js +3 -3
  42. package/lib/components/settings/wrappers/embedded/FlowsSettingsContent.js +52 -32
  43. package/lib/components/subModel/AddSubModelButton.d.ts +7 -0
  44. package/lib/components/subModel/AddSubModelButton.js +78 -8
  45. package/lib/components/subModel/LazyDropdown.js +14 -15
  46. package/lib/components/subModel/utils.d.ts +1 -1
  47. package/lib/components/subModel/utils.js +21 -11
  48. package/lib/components/variables/VariableInput.js +26 -6
  49. package/lib/components/variables/VariableTag.js +43 -2
  50. package/lib/components/variables/types.d.ts +2 -0
  51. package/lib/components/variables/utils.js +4 -2
  52. package/lib/data-source/index.d.ts +23 -4
  53. package/lib/data-source/index.js +135 -14
  54. package/lib/data-source/jioToJoiSchema.js +1 -0
  55. package/lib/emitter.d.ts +6 -0
  56. package/lib/emitter.js +12 -0
  57. package/lib/executor/FlowExecutor.d.ts +6 -6
  58. package/lib/executor/FlowExecutor.js +302 -99
  59. package/lib/flow-registry/GlobalFlowRegistry.d.ts +1 -0
  60. package/lib/flow-registry/GlobalFlowRegistry.js +3 -0
  61. package/lib/flow-registry/InstanceFlowRegistry.d.ts +1 -0
  62. package/lib/flow-registry/InstanceFlowRegistry.js +3 -0
  63. package/lib/flowContext.d.ts +105 -6
  64. package/lib/flowContext.js +447 -139
  65. package/lib/flowEngine.d.ts +71 -1
  66. package/lib/flowEngine.js +319 -16
  67. package/lib/flowSettings.d.ts +4 -3
  68. package/lib/flowSettings.js +45 -21
  69. package/lib/hooks/useApplyAutoFlows.d.ts +1 -0
  70. package/lib/hooks/useApplyAutoFlows.js +3 -2
  71. package/lib/index.d.ts +14 -3
  72. package/lib/index.js +54 -7
  73. package/lib/locale/de-DE.json +62 -0
  74. package/lib/locale/en-US.json +57 -45
  75. package/lib/locale/es-ES.json +62 -0
  76. package/lib/locale/fr-FR.json +62 -0
  77. package/lib/locale/hu-HU.json +62 -0
  78. package/lib/locale/id-ID.json +62 -0
  79. package/lib/locale/index.d.ts +114 -90
  80. package/lib/locale/it-IT.json +62 -0
  81. package/lib/locale/ja-JP.json +62 -0
  82. package/lib/locale/ko-KR.json +62 -0
  83. package/lib/locale/nl-NL.json +62 -0
  84. package/lib/locale/pt-BR.json +62 -0
  85. package/lib/locale/ru-RU.json +62 -0
  86. package/lib/locale/tr-TR.json +62 -0
  87. package/lib/locale/uk-UA.json +62 -0
  88. package/lib/locale/vi-VN.json +62 -0
  89. package/lib/locale/zh-CN.json +58 -46
  90. package/lib/locale/zh-TW.json +62 -0
  91. package/lib/models/CollectionFieldModel.d.ts +7 -2
  92. package/lib/models/CollectionFieldModel.js +63 -16
  93. package/lib/models/flowModel.d.ts +76 -32
  94. package/lib/models/flowModel.js +300 -112
  95. package/lib/models/forkFlowModel.d.ts +8 -4
  96. package/lib/models/forkFlowModel.js +38 -8
  97. package/lib/provider.d.ts +3 -1
  98. package/lib/provider.js +14 -11
  99. package/lib/reactive/index.d.ts +10 -0
  100. package/lib/{runjs-context/snippets/global/api-request-post.snippet.js → reactive/index.js} +14 -15
  101. package/lib/reactive/observer.d.ts +19 -0
  102. package/lib/reactive/observer.js +109 -0
  103. package/lib/resources/baseRecordResource.d.ts +6 -0
  104. package/lib/resources/baseRecordResource.js +38 -3
  105. package/lib/resources/multiRecordResource.d.ts +5 -2
  106. package/lib/resources/multiRecordResource.js +26 -10
  107. package/lib/resources/singleRecordResource.js +8 -3
  108. package/lib/resources/sqlResource.d.ts +5 -3
  109. package/lib/resources/sqlResource.js +30 -28
  110. package/lib/runjs-context/contexts/FormJSFieldItemRunJSContext.d.ts +1 -6
  111. package/lib/runjs-context/contexts/FormJSFieldItemRunJSContext.js +37 -20
  112. package/lib/runjs-context/contexts/JSBlockRunJSContext.d.ts +1 -6
  113. package/lib/runjs-context/contexts/JSBlockRunJSContext.js +46 -33
  114. package/lib/runjs-context/contexts/JSCollectionActionRunJSContext.d.ts +1 -2
  115. package/lib/runjs-context/contexts/JSCollectionActionRunJSContext.js +14 -15
  116. package/lib/runjs-context/contexts/{LinkageRunJSContext.d.ts → JSColumnRunJSContext.d.ts} +6 -3
  117. package/lib/runjs-context/contexts/JSColumnRunJSContext.js +78 -0
  118. package/lib/runjs-context/contexts/JSEditableFieldRunJSContext.d.ts +16 -0
  119. package/lib/runjs-context/contexts/JSEditableFieldRunJSContext.js +125 -0
  120. package/lib/runjs-context/contexts/JSFieldRunJSContext.d.ts +1 -6
  121. package/lib/runjs-context/contexts/JSFieldRunJSContext.js +28 -24
  122. package/lib/runjs-context/contexts/JSItemRunJSContext.d.ts +1 -6
  123. package/lib/runjs-context/contexts/JSItemRunJSContext.js +34 -20
  124. package/lib/runjs-context/contexts/JSRecordActionRunJSContext.d.ts +1 -2
  125. package/lib/runjs-context/contexts/JSRecordActionRunJSContext.js +16 -17
  126. package/lib/runjs-context/contexts/base.d.ts +9 -0
  127. package/lib/runjs-context/contexts/base.js +879 -0
  128. package/lib/runjs-context/contributions.d.ts +33 -0
  129. package/lib/runjs-context/contributions.js +88 -0
  130. package/lib/runjs-context/helpers.d.ts +5 -2
  131. package/lib/runjs-context/helpers.js +36 -27
  132. package/lib/runjs-context/registry.d.ts +7 -4
  133. package/lib/runjs-context/registry.js +10 -42
  134. package/lib/runjs-context/setup.d.ts +9 -0
  135. package/lib/runjs-context/setup.js +88 -0
  136. package/lib/runjs-context/snippets/global/{copy-record-json.snippet.js → api-request.snippet.js} +25 -10
  137. package/lib/runjs-context/snippets/global/clipboard-copy-text.snippet.js +61 -0
  138. package/lib/runjs-context/snippets/global/{view-navigation-push.snippet.js → import-esm.snippet.js} +26 -12
  139. package/lib/runjs-context/snippets/global/message-error.snippet.js +6 -0
  140. package/lib/runjs-context/snippets/global/message-success.snippet.js +6 -0
  141. package/lib/runjs-context/snippets/global/notification-open.snippet.d.ts +3 -8
  142. package/lib/runjs-context/snippets/global/notification-open.snippet.js +8 -1
  143. package/lib/runjs-context/snippets/global/open-view-dialog.snippet.js +10 -3
  144. package/lib/runjs-context/snippets/global/open-view-drawer.snippet.js +10 -3
  145. package/lib/runjs-context/snippets/global/query-selector.snippet.js +53 -0
  146. package/lib/runjs-context/snippets/global/require-amd.snippet.d.ts +11 -0
  147. package/lib/runjs-context/snippets/global/{requireAsync.snippet.js → require-amd.snippet.js} +16 -13
  148. package/lib/runjs-context/snippets/global/window-open.snippet.d.ts +3 -8
  149. package/lib/runjs-context/snippets/global/window-open.snippet.js +8 -1
  150. package/lib/runjs-context/snippets/index.d.ts +24 -3
  151. package/lib/runjs-context/snippets/index.js +183 -40
  152. package/lib/runjs-context/snippets/scene/block/add-event-listener.snippet.d.ts +11 -0
  153. package/lib/runjs-context/snippets/scene/{jsblock → block}/add-event-listener.snippet.js +11 -2
  154. package/lib/runjs-context/snippets/scene/block/api-fetch-render-list.snippet.d.ts +11 -0
  155. package/lib/runjs-context/snippets/scene/block/api-fetch-render-list.snippet.js +64 -0
  156. package/lib/runjs-context/snippets/scene/block/chartjs-bar.snippet.d.ts +11 -0
  157. package/lib/runjs-context/snippets/scene/block/chartjs-bar.snippet.js +99 -0
  158. package/lib/runjs-context/snippets/{libs → scene/block}/echarts-init.snippet.js +24 -7
  159. package/lib/runjs-context/snippets/scene/block/render-antd-icons.snippet.d.ts +11 -0
  160. package/lib/runjs-context/snippets/scene/block/render-antd-icons.snippet.js +65 -0
  161. package/lib/runjs-context/snippets/scene/block/render-button-handler.snippet.d.ts +11 -0
  162. package/lib/runjs-context/snippets/scene/{jsblock → block}/render-button-handler.snippet.js +17 -9
  163. package/lib/runjs-context/snippets/scene/block/render-iframe.snippet.d.ts +11 -0
  164. package/lib/runjs-context/snippets/scene/block/render-iframe.snippet.js +57 -0
  165. package/lib/runjs-context/snippets/scene/block/render-info-card.snippet.d.ts +11 -0
  166. package/lib/runjs-context/snippets/scene/block/render-info-card.snippet.js +71 -0
  167. package/lib/runjs-context/snippets/scene/block/render-react-jsx.snippet.d.ts +11 -0
  168. package/lib/runjs-context/snippets/scene/{jsblock/render-card.snippet.js → block/render-react-jsx.snippet.js} +26 -13
  169. package/lib/runjs-context/snippets/scene/block/render-react.snippet.d.ts +11 -0
  170. package/lib/runjs-context/snippets/scene/{jsblock → block}/render-react.snippet.js +18 -17
  171. package/lib/runjs-context/snippets/scene/block/render-statistics.snippet.d.ts +11 -0
  172. package/lib/runjs-context/snippets/scene/block/render-statistics.snippet.js +95 -0
  173. package/lib/runjs-context/snippets/scene/block/render-timeline.snippet.d.ts +11 -0
  174. package/lib/runjs-context/snippets/scene/block/render-timeline.snippet.js +84 -0
  175. package/lib/runjs-context/snippets/scene/block/resource-example.snippet.d.ts +11 -0
  176. package/lib/runjs-context/snippets/scene/block/resource-example.snippet.js +60 -0
  177. package/lib/runjs-context/snippets/scene/block/three-users-orbit.snippet.d.ts +11 -0
  178. package/lib/runjs-context/snippets/scene/block/three-users-orbit.snippet.js +283 -0
  179. package/lib/runjs-context/snippets/scene/block/vue-component.snippet.d.ts +11 -0
  180. package/lib/runjs-context/snippets/scene/block/vue-component.snippet.js +124 -0
  181. package/lib/runjs-context/snippets/scene/detail/color-by-value.snippet.d.ts +11 -0
  182. package/lib/runjs-context/snippets/scene/{jsfield → detail}/color-by-value.snippet.js +13 -3
  183. package/lib/runjs-context/snippets/scene/detail/copy-to-clipboard.snippet.d.ts +11 -0
  184. package/lib/runjs-context/snippets/{global → scene/detail}/copy-to-clipboard.snippet.js +28 -6
  185. package/lib/runjs-context/snippets/scene/detail/format-number.snippet.d.ts +11 -0
  186. package/lib/runjs-context/snippets/scene/{jsfield → detail}/format-number.snippet.js +13 -3
  187. package/lib/runjs-context/snippets/scene/detail/innerHTML-value.snippet.d.ts +11 -0
  188. package/lib/runjs-context/snippets/scene/{jsfield → detail}/innerHTML-value.snippet.js +13 -3
  189. package/lib/runjs-context/snippets/scene/detail/percentage-bar.snippet.d.ts +11 -0
  190. package/lib/runjs-context/snippets/scene/detail/percentage-bar.snippet.js +82 -0
  191. package/lib/runjs-context/snippets/scene/detail/relative-time.snippet.d.ts +11 -0
  192. package/lib/runjs-context/snippets/scene/detail/relative-time.snippet.js +80 -0
  193. package/lib/runjs-context/snippets/scene/detail/status-tag.snippet.d.ts +11 -0
  194. package/lib/runjs-context/snippets/scene/detail/status-tag.snippet.js +74 -0
  195. package/lib/runjs-context/snippets/scene/form/calculate-total.snippet.d.ts +11 -0
  196. package/lib/runjs-context/snippets/scene/form/calculate-total.snippet.js +63 -0
  197. package/lib/runjs-context/snippets/scene/form/cascade-select.snippet.d.ts +11 -0
  198. package/lib/runjs-context/snippets/scene/form/cascade-select.snippet.js +81 -0
  199. package/lib/runjs-context/snippets/scene/form/conditional-required.snippet.d.ts +11 -0
  200. package/lib/runjs-context/snippets/scene/form/conditional-required.snippet.js +64 -0
  201. package/lib/runjs-context/snippets/scene/form/copy-field-values.snippet.d.ts +11 -0
  202. package/lib/runjs-context/snippets/scene/form/copy-field-values.snippet.js +74 -0
  203. package/lib/runjs-context/snippets/scene/form/render-basic.snippet.d.ts +11 -0
  204. package/lib/runjs-context/snippets/scene/{jsitem → form}/render-basic.snippet.js +11 -2
  205. package/lib/runjs-context/snippets/scene/form/set-disabled.snippet.d.ts +11 -0
  206. package/lib/runjs-context/snippets/scene/{linkage → form}/set-disabled.snippet.js +12 -3
  207. package/lib/runjs-context/snippets/scene/form/set-field-value.snippet.d.ts +11 -0
  208. package/lib/runjs-context/snippets/scene/{linkage → form}/set-field-value.snippet.js +12 -3
  209. package/lib/runjs-context/snippets/scene/form/set-required.snippet.d.ts +11 -0
  210. package/lib/runjs-context/snippets/scene/{linkage → form}/set-required.snippet.js +12 -3
  211. package/lib/runjs-context/snippets/scene/form/toggle-multiple-fields.snippet.d.ts +11 -0
  212. package/lib/runjs-context/snippets/scene/form/toggle-multiple-fields.snippet.js +67 -0
  213. package/lib/runjs-context/snippets/scene/form/toggle-visible.snippet.d.ts +11 -0
  214. package/lib/runjs-context/snippets/scene/{linkage → form}/toggle-visible.snippet.js +12 -3
  215. package/lib/runjs-context/snippets/scene/table/cell-open-dialog.snippet.d.ts +11 -0
  216. package/lib/runjs-context/snippets/scene/table/cell-open-dialog.snippet.js +64 -0
  217. package/lib/runjs-context/snippets/scene/table/collection-selected-count.snippet.d.ts +11 -0
  218. package/lib/runjs-context/snippets/scene/{actions → table}/collection-selected-count.snippet.js +11 -2
  219. package/lib/runjs-context/snippets/scene/table/concat-fields.snippet.d.ts +11 -0
  220. package/lib/runjs-context/snippets/scene/table/concat-fields.snippet.js +79 -0
  221. package/lib/runjs-context/snippets/scene/table/destroy-selected.snippet.d.ts +11 -0
  222. package/lib/runjs-context/snippets/{global/log-json-record.snippet.js → scene/table/destroy-selected.snippet.js} +24 -11
  223. package/lib/runjs-context/snippets/scene/table/export-selected-json.snippet.d.ts +11 -0
  224. package/lib/runjs-context/snippets/scene/table/export-selected-json.snippet.js +64 -0
  225. package/lib/runjs-context/snippets/scene/table/iterate-selected-rows.snippet.d.ts +11 -0
  226. package/lib/runjs-context/snippets/scene/{actions → table}/iterate-selected-rows.snippet.js +11 -2
  227. package/lib/runjs-context/snippets/types.d.ts +9 -1
  228. package/lib/runjsLibs.d.ts +28 -0
  229. package/lib/runjsLibs.js +532 -0
  230. package/lib/scheduler/ModelOperationScheduler.d.ts +53 -0
  231. package/lib/scheduler/ModelOperationScheduler.js +262 -0
  232. package/lib/types.d.ts +66 -7
  233. package/lib/types.js +4 -3
  234. package/lib/utils/associationObjectVariable.d.ts +32 -0
  235. package/lib/utils/associationObjectVariable.js +157 -0
  236. package/lib/utils/createCollectionContextMeta.d.ts +1 -1
  237. package/lib/utils/createCollectionContextMeta.js +9 -4
  238. package/lib/utils/createEphemeralContext.d.ts +13 -0
  239. package/lib/utils/createEphemeralContext.js +140 -0
  240. package/lib/utils/flows.d.ts +10 -0
  241. package/lib/{runjs-context/snippets/global/console-log-ctx.snippet.js → utils/flows.js} +21 -14
  242. package/lib/utils/index.d.ts +9 -3
  243. package/lib/utils/index.js +30 -2
  244. package/lib/utils/jsxTransform.d.ts +15 -0
  245. package/lib/utils/jsxTransform.js +68 -0
  246. package/lib/utils/params-resolvers.js +19 -12
  247. package/lib/utils/parsePathnameToViewParams.d.ts +1 -1
  248. package/lib/utils/parsePathnameToViewParams.js +41 -5
  249. package/lib/utils/pruneFilter.d.ts +21 -0
  250. package/lib/{runjs-context/snippets/global/try-catch-async.snippet.js → utils/pruneFilter.js} +24 -16
  251. package/lib/utils/resolveModuleUrl.d.ts +58 -0
  252. package/lib/utils/resolveModuleUrl.js +65 -0
  253. package/lib/utils/runjsModuleLoader.d.ts +58 -0
  254. package/lib/utils/runjsModuleLoader.js +422 -0
  255. package/lib/utils/runjsTemplateCompat.d.ts +35 -0
  256. package/lib/utils/runjsTemplateCompat.js +743 -0
  257. package/lib/utils/safeGlobals.d.ts +6 -8
  258. package/lib/utils/safeGlobals.js +169 -14
  259. package/lib/utils/schema-utils.d.ts +6 -0
  260. package/lib/utils/schema-utils.js +71 -6
  261. package/lib/utils/serverContextParams.d.ts +4 -0
  262. package/lib/utils/serverContextParams.js +2 -0
  263. package/lib/utils/translation.d.ts +4 -1
  264. package/lib/utils/translation.js +6 -2
  265. package/lib/utils/variablesParams.d.ts +22 -5
  266. package/lib/utils/variablesParams.js +141 -61
  267. package/lib/views/DialogComponent.js +1 -5
  268. package/lib/views/DrawerComponent.js +18 -9
  269. package/lib/views/PageComponent.js +5 -5
  270. package/lib/views/ViewNavigation.d.ts +11 -15
  271. package/lib/views/ViewNavigation.js +37 -19
  272. package/lib/views/createViewMeta.d.ts +27 -5
  273. package/lib/views/createViewMeta.js +338 -72
  274. package/lib/views/index.d.ts +1 -1
  275. package/lib/views/index.js +4 -0
  276. package/lib/views/useDialog.d.ts +10 -9
  277. package/lib/views/useDialog.js +46 -34
  278. package/lib/views/useDrawer.d.ts +10 -9
  279. package/lib/views/useDrawer.js +74 -48
  280. package/lib/views/usePage.d.ts +14 -9
  281. package/lib/views/usePage.js +82 -33
  282. package/lib/views/usePopover.js +4 -1
  283. package/lib/views/viewEvents.d.ts +17 -0
  284. package/lib/views/viewEvents.js +90 -0
  285. package/package.json +6 -3
  286. package/src/BlockScopedFlowEngine.ts +85 -0
  287. package/src/FlowContextProvider.tsx +4 -2
  288. package/src/JSRunner.ts +39 -1
  289. package/src/ViewScopedFlowEngine.ts +21 -1
  290. package/src/__tests__/JSRunner.test.ts +125 -52
  291. package/src/__tests__/blockScopedFlowEngine.test.ts +154 -0
  292. package/src/__tests__/createViewMeta.popup.test.ts +203 -0
  293. package/src/__tests__/flow-engine.test.ts +3 -0
  294. package/src/__tests__/flowContext.test.ts +160 -0
  295. package/src/__tests__/flowContextCreateJSRunner.test.ts +163 -0
  296. package/src/__tests__/flowEngine.dataSourceDirty.test.ts +63 -0
  297. package/src/__tests__/flowEngine.destroyModel.test.ts +74 -0
  298. package/src/__tests__/flowEngine.moveModel.test.ts +43 -0
  299. package/src/__tests__/flowEngine.removeModel.test.ts +72 -0
  300. package/src/__tests__/flowEngine.saveModel.test.ts +4 -0
  301. package/src/__tests__/flowModel.openView.navigation.test.ts +31 -2
  302. package/src/__tests__/flowRunJSContextDefine.test.ts +508 -0
  303. package/src/__tests__/flowSettings.open.test.tsx +71 -15
  304. package/src/__tests__/flowSettings.test.ts +2 -0
  305. package/src/__tests__/globalFlowRegistry.test.ts +1 -1
  306. package/src/__tests__/modelOperationScheduler.test.ts +346 -0
  307. package/src/__tests__/objectVariable.test.ts +464 -0
  308. package/src/__tests__/provider.test.tsx +0 -5
  309. package/src/__tests__/runjsContext.test.ts +219 -35
  310. package/src/__tests__/runjsContextImplementations.test.ts +217 -0
  311. package/src/__tests__/runjsContextRuntime.test.ts +269 -0
  312. package/src/__tests__/runjsEdgeCases.test.ts +281 -0
  313. package/src/__tests__/runjsExternalLibs.test.ts +242 -0
  314. package/src/__tests__/runjsLibsLazyLoading.test.ts +44 -0
  315. package/src/__tests__/runjsLocales.test.ts +39 -0
  316. package/src/__tests__/runjsPreprocessDefault.test.ts +49 -0
  317. package/src/__tests__/runjsRuntimeFeatures.test.ts +461 -0
  318. package/src/__tests__/runjsSnippets.test.ts +140 -0
  319. package/src/__tests__/viewScopedFlowEngine.test.ts +101 -3
  320. package/src/acl/Acl.tsx +85 -31
  321. package/src/acl/__tests__/Acl.test.tsx +43 -1
  322. package/src/components/DynamicFlowsEditor.tsx +0 -10
  323. package/src/components/FieldModelRenderer.tsx +22 -9
  324. package/src/components/FieldSkeleton.tsx +27 -0
  325. package/src/components/FlowContextSelector.tsx +20 -2
  326. package/src/components/FlowModelRenderer.tsx +52 -84
  327. package/src/components/FormItem.tsx +8 -1
  328. package/src/components/MobilePopup.style.ts +220 -0
  329. package/src/components/MobilePopup.tsx +86 -0
  330. package/src/components/__tests__/FlowModelRenderer.test.tsx +89 -0
  331. package/src/components/__tests__/flow-model-render-error-fallback.test.tsx +6 -6
  332. package/src/components/__tests__/gridDragPlanner.test.ts +141 -1
  333. package/src/components/common/withFlowDesignMode.tsx +5 -5
  334. package/src/components/dnd/gridDragPlanner.ts +60 -0
  335. package/src/components/index.ts +1 -0
  336. package/src/components/settings/independents/dropdown/FlowsDropdownButton.tsx +34 -17
  337. package/src/components/settings/wrappers/component/SelectWithTitle.tsx +110 -0
  338. package/src/components/settings/wrappers/component/SwitchWithTitle.tsx +83 -0
  339. package/src/components/settings/wrappers/component/__tests__/InlineControls.test.tsx +74 -0
  340. package/src/components/settings/wrappers/contextual/DefaultSettingsIcon.tsx +272 -125
  341. package/src/components/settings/wrappers/contextual/FlowsContextMenu.tsx +34 -18
  342. package/src/components/settings/wrappers/contextual/FlowsFloatContextMenu.tsx +56 -18
  343. package/src/components/settings/wrappers/contextual/StepSettings.tsx +1 -2
  344. package/src/components/settings/wrappers/contextual/StepSettingsDialog.tsx +13 -1
  345. package/src/components/settings/wrappers/contextual/__tests__/DefaultSettingsIcon.test.tsx +624 -0
  346. package/src/components/settings/wrappers/embedded/FlowSettings.tsx +47 -35
  347. package/src/components/settings/wrappers/embedded/FlowsSettings.tsx +1 -1
  348. package/src/components/settings/wrappers/embedded/FlowsSettingsContent.tsx +64 -42
  349. package/src/components/subModel/AddSubModelButton.tsx +104 -9
  350. package/src/components/subModel/LazyDropdown.tsx +14 -14
  351. package/src/components/subModel/__tests__/AddSubModelButton.test.tsx +168 -7
  352. package/src/components/subModel/__tests__/utils.test.ts +12 -12
  353. package/src/components/subModel/utils.ts +25 -6
  354. package/src/components/variables/VariableInput.tsx +32 -6
  355. package/src/components/variables/VariableTag.tsx +54 -2
  356. package/src/components/variables/types.ts +2 -0
  357. package/src/components/variables/utils.ts +7 -3
  358. package/src/data-source/index.ts +143 -12
  359. package/src/data-source/jioToJoiSchema.ts +1 -0
  360. package/src/emitter.ts +14 -0
  361. package/src/executor/FlowExecutor.ts +383 -119
  362. package/src/executor/__tests__/ctx-defs-injection.test.ts +197 -0
  363. package/src/executor/__tests__/flowExecutor.test.ts +217 -5
  364. package/src/flow-registry/GlobalFlowRegistry.ts +1 -0
  365. package/src/flow-registry/InstanceFlowRegistry.ts +1 -0
  366. package/src/flow-registry/__tests__/globalFlowRegistry.test.ts +54 -0
  367. package/src/flowContext.ts +646 -158
  368. package/src/flowEngine.ts +385 -14
  369. package/src/flowSettings.ts +59 -30
  370. package/src/hooks/useApplyAutoFlows.ts +5 -3
  371. package/src/index.ts +26 -3
  372. package/src/locale/de-DE.json +62 -0
  373. package/src/locale/en-US.json +57 -45
  374. package/src/locale/es-ES.json +62 -0
  375. package/src/locale/fr-FR.json +62 -0
  376. package/src/locale/hu-HU.json +62 -0
  377. package/src/locale/id-ID.json +62 -0
  378. package/src/locale/it-IT.json +62 -0
  379. package/src/locale/ja-JP.json +62 -0
  380. package/src/locale/ko-KR.json +62 -0
  381. package/src/locale/nl-NL.json +62 -0
  382. package/src/locale/pt-BR.json +62 -0
  383. package/src/locale/ru-RU.json +62 -0
  384. package/src/locale/tr-TR.json +62 -0
  385. package/src/locale/uk-UA.json +62 -0
  386. package/src/locale/vi-VN.json +62 -0
  387. package/src/locale/zh-CN.json +58 -46
  388. package/src/locale/zh-TW.json +62 -0
  389. package/src/models/CollectionFieldModel.tsx +82 -18
  390. package/src/models/__tests__/dispatchEvent.behavior.test.ts +169 -0
  391. package/src/models/__tests__/dispatchEvent.when.test.ts +356 -0
  392. package/src/models/__tests__/flowEngine.resolveUse.test.ts +170 -0
  393. package/src/models/__tests__/flowModel.clone.test.ts +416 -0
  394. package/src/models/__tests__/flowModel.getFlows.sort.test.ts +33 -9
  395. package/src/models/__tests__/flowModel.scheduleModelOperation.test.tsx +129 -0
  396. package/src/models/__tests__/flowModel.test.ts +296 -119
  397. package/src/models/__tests__/forkFlowModel.test.ts +40 -7
  398. package/src/models/flowModel.tsx +426 -148
  399. package/src/models/forkFlowModel.ts +48 -8
  400. package/src/provider.tsx +18 -14
  401. package/src/reactive/__tests__/observer.test.tsx +211 -0
  402. package/src/reactive/index.ts +11 -0
  403. package/src/reactive/observer.tsx +101 -0
  404. package/src/resources/__tests__/multiRecordResource.test.ts +44 -0
  405. package/src/resources/__tests__/sqlResource.test.ts +60 -0
  406. package/src/resources/baseRecordResource.ts +46 -3
  407. package/src/resources/multiRecordResource.ts +28 -12
  408. package/src/resources/singleRecordResource.ts +9 -3
  409. package/src/resources/sqlResource.ts +33 -32
  410. package/src/runjs-context/contexts/FormJSFieldItemRunJSContext.ts +38 -21
  411. package/src/runjs-context/contexts/JSBlockRunJSContext.ts +50 -34
  412. package/src/runjs-context/contexts/JSCollectionActionRunJSContext.ts +15 -16
  413. package/src/runjs-context/contexts/JSColumnRunJSContext.ts +58 -0
  414. package/src/runjs-context/contexts/JSEditableFieldRunJSContext.ts +106 -0
  415. package/src/runjs-context/contexts/JSFieldRunJSContext.ts +30 -25
  416. package/src/runjs-context/contexts/JSItemRunJSContext.ts +35 -21
  417. package/src/runjs-context/contexts/JSRecordActionRunJSContext.ts +17 -18
  418. package/src/runjs-context/contexts/base.ts +871 -0
  419. package/src/runjs-context/contributions.ts +88 -0
  420. package/src/runjs-context/helpers.ts +32 -30
  421. package/src/runjs-context/registry.ts +16 -47
  422. package/src/runjs-context/setup.ts +57 -0
  423. package/src/runjs-context/snippets/global/api-request.snippet.ts +38 -0
  424. package/src/runjs-context/snippets/global/clipboard-copy-text.snippet.ts +42 -0
  425. package/src/runjs-context/snippets/global/import-esm.snippet.ts +39 -0
  426. package/src/runjs-context/snippets/global/message-error.snippet.ts +6 -0
  427. package/src/runjs-context/snippets/global/message-success.snippet.ts +6 -0
  428. package/src/runjs-context/snippets/global/notification-open.snippet.ts +11 -1
  429. package/src/runjs-context/snippets/global/open-view-dialog.snippet.ts +10 -3
  430. package/src/runjs-context/snippets/global/open-view-drawer.snippet.ts +10 -3
  431. package/src/runjs-context/snippets/global/query-selector.snippet.ts +34 -0
  432. package/src/runjs-context/snippets/global/require-amd.snippet.ts +30 -0
  433. package/src/runjs-context/snippets/global/window-open.snippet.ts +11 -1
  434. package/src/runjs-context/snippets/index.ts +212 -39
  435. package/src/runjs-context/snippets/scene/{jsblock → block}/add-event-listener.snippet.ts +14 -2
  436. package/src/runjs-context/snippets/scene/block/api-fetch-render-list.snippet.ts +45 -0
  437. package/src/runjs-context/snippets/scene/block/chartjs-bar.snippet.ts +80 -0
  438. package/src/runjs-context/snippets/scene/block/echarts-init.snippet.ts +44 -0
  439. package/src/runjs-context/snippets/scene/block/render-antd-icons.snippet.ts +46 -0
  440. package/src/runjs-context/snippets/scene/block/render-button-handler.snippet.ts +35 -0
  441. package/src/runjs-context/snippets/scene/block/render-iframe.snippet.ts +38 -0
  442. package/src/runjs-context/snippets/scene/block/render-info-card.snippet.ts +52 -0
  443. package/src/runjs-context/snippets/scene/block/render-react-jsx.snippet.ts +39 -0
  444. package/src/runjs-context/snippets/scene/block/render-react.snippet.ts +38 -0
  445. package/src/runjs-context/snippets/scene/block/render-statistics.snippet.ts +76 -0
  446. package/src/runjs-context/snippets/scene/block/render-timeline.snippet.ts +65 -0
  447. package/src/runjs-context/snippets/scene/block/resource-example.snippet.ts +46 -0
  448. package/src/runjs-context/snippets/scene/block/three-users-orbit.snippet.ts +264 -0
  449. package/src/runjs-context/snippets/scene/block/vue-component.snippet.ts +105 -0
  450. package/src/runjs-context/snippets/scene/detail/color-by-value.snippet.ts +33 -0
  451. package/src/runjs-context/snippets/scene/detail/copy-to-clipboard.snippet.ts +45 -0
  452. package/src/runjs-context/snippets/scene/detail/format-number.snippet.ts +32 -0
  453. package/src/runjs-context/snippets/scene/detail/innerHTML-value.snippet.ts +31 -0
  454. package/src/runjs-context/snippets/scene/detail/percentage-bar.snippet.ts +63 -0
  455. package/src/runjs-context/snippets/scene/detail/relative-time.snippet.ts +61 -0
  456. package/src/runjs-context/snippets/scene/detail/status-tag.snippet.ts +55 -0
  457. package/src/runjs-context/snippets/scene/form/calculate-total.snippet.ts +44 -0
  458. package/src/runjs-context/snippets/scene/form/cascade-select.snippet.ts +62 -0
  459. package/src/runjs-context/snippets/scene/form/conditional-required.snippet.ts +45 -0
  460. package/src/runjs-context/snippets/scene/form/copy-field-values.snippet.ts +55 -0
  461. package/src/runjs-context/snippets/scene/{jsitem → form}/render-basic.snippet.ts +14 -2
  462. package/src/runjs-context/snippets/scene/{linkage → form}/set-disabled.snippet.ts +15 -3
  463. package/src/runjs-context/snippets/scene/{linkage → form}/set-field-value.snippet.ts +15 -3
  464. package/src/runjs-context/snippets/scene/{linkage → form}/set-required.snippet.ts +15 -3
  465. package/src/runjs-context/snippets/scene/form/toggle-multiple-fields.snippet.ts +48 -0
  466. package/src/runjs-context/snippets/scene/{linkage → form}/toggle-visible.snippet.ts +15 -3
  467. package/src/runjs-context/snippets/scene/table/cell-open-dialog.snippet.ts +45 -0
  468. package/src/runjs-context/snippets/scene/{actions → table}/collection-selected-count.snippet.ts +14 -2
  469. package/src/runjs-context/snippets/scene/table/concat-fields.snippet.ts +60 -0
  470. package/src/runjs-context/snippets/scene/table/destroy-selected.snippet.ts +36 -0
  471. package/src/runjs-context/snippets/scene/table/export-selected-json.snippet.ts +45 -0
  472. package/src/runjs-context/snippets/scene/{actions → table}/iterate-selected-rows.snippet.ts +14 -2
  473. package/src/runjs-context/snippets/types.ts +5 -1
  474. package/src/runjsLibs.ts +622 -0
  475. package/src/scheduler/ModelOperationScheduler.ts +306 -0
  476. package/src/types.ts +86 -5
  477. package/src/utils/__tests__/createCollectionContextMeta.test.ts +51 -0
  478. package/src/utils/__tests__/flows.test.ts +65 -0
  479. package/src/utils/__tests__/jsxTransform.test.ts +38 -0
  480. package/src/utils/__tests__/params-resolvers.test.ts +40 -0
  481. package/src/utils/__tests__/parsePathnameToViewParams.test.ts +25 -0
  482. package/src/utils/__tests__/pruneFilter.test.ts +38 -0
  483. package/src/utils/__tests__/runjsRequireAsyncAutoWhitelist.test.ts +38 -0
  484. package/src/utils/__tests__/runjsTemplateCompat.test.ts +159 -0
  485. package/src/utils/__tests__/safeGlobals.test.ts +79 -2
  486. package/src/utils/__tests__/utils.test.ts +114 -15
  487. package/src/utils/__tests__/variablesParams.test.ts +120 -0
  488. package/src/utils/associationObjectVariable.ts +180 -0
  489. package/src/utils/createCollectionContextMeta.ts +9 -3
  490. package/src/utils/createEphemeralContext.ts +142 -0
  491. package/src/utils/flows.ts +23 -0
  492. package/src/utils/index.ts +17 -3
  493. package/src/utils/jsxTransform.ts +39 -0
  494. package/src/utils/params-resolvers.ts +25 -11
  495. package/src/utils/parsePathnameToViewParams.ts +50 -6
  496. package/src/utils/pruneFilter.ts +41 -0
  497. package/src/utils/resolveModuleUrl.ts +91 -0
  498. package/src/utils/runjsModuleLoader.ts +553 -0
  499. package/src/utils/runjsTemplateCompat.ts +828 -0
  500. package/src/utils/safeGlobals.ts +181 -15
  501. package/src/utils/schema-utils.ts +81 -3
  502. package/src/utils/serverContextParams.ts +6 -0
  503. package/src/utils/translation.ts +7 -2
  504. package/src/utils/variablesParams.ts +164 -72
  505. package/src/views/DialogComponent.tsx +1 -4
  506. package/src/views/DrawerComponent.tsx +19 -7
  507. package/src/views/PageComponent.tsx +3 -5
  508. package/src/views/ViewNavigation.ts +49 -43
  509. package/src/views/__tests__/FlowView.usePage.test.tsx +186 -0
  510. package/src/views/__tests__/ViewNavigation.test.ts +54 -34
  511. package/src/views/__tests__/useDialog.closeDestroy.test.tsx +159 -0
  512. package/src/views/__tests__/viewEvents.resolveOpenerEngine.test.ts +28 -0
  513. package/src/views/createViewMeta.ts +402 -73
  514. package/src/views/index.tsx +1 -1
  515. package/src/views/useDialog.tsx +52 -31
  516. package/src/views/useDrawer.tsx +99 -55
  517. package/src/views/usePage.tsx +101 -33
  518. package/src/views/usePopover.tsx +4 -1
  519. package/src/views/viewEvents.ts +55 -0
  520. package/lib/runjs-context/contexts/FlowRunJSContext.d.ts +0 -38
  521. package/lib/runjs-context/contexts/FlowRunJSContext.js +0 -217
  522. package/lib/runjs-context/contexts/LinkageRunJSContext.js +0 -62
  523. package/lib/runjs-context/index.d.ts +0 -19
  524. package/lib/runjs-context/index.js +0 -57
  525. package/lib/runjs-context/snippets/global/api-request-get.snippet.d.ts +0 -16
  526. package/lib/runjs-context/snippets/global/api-request-get.snippet.js +0 -42
  527. package/lib/runjs-context/snippets/global/api-request-post.snippet.d.ts +0 -16
  528. package/lib/runjs-context/snippets/global/console-log-ctx.snippet.d.ts +0 -16
  529. package/lib/runjs-context/snippets/global/requireAsync.snippet.d.ts +0 -16
  530. package/lib/runjs-context/snippets/global/sleep.snippet.d.ts +0 -16
  531. package/lib/runjs-context/snippets/global/sleep.snippet.js +0 -43
  532. package/lib/runjs-context/snippets/global/try-catch-async.snippet.d.ts +0 -16
  533. package/lib/runjs-context/snippets/libs/echarts-init.snippet.d.ts +0 -15
  534. package/lib/runjs-context/snippets/scene/actions/collection-selected-count.snippet.d.ts +0 -15
  535. package/lib/runjs-context/snippets/scene/actions/iterate-selected-rows.snippet.d.ts +0 -15
  536. package/lib/runjs-context/snippets/scene/actions/record-id-message.snippet.d.ts +0 -15
  537. package/lib/runjs-context/snippets/scene/actions/record-id-message.snippet.js +0 -43
  538. package/lib/runjs-context/snippets/scene/actions/run-action-basic.snippet.d.ts +0 -15
  539. package/lib/runjs-context/snippets/scene/actions/run-action-basic.snippet.js +0 -40
  540. package/lib/runjs-context/snippets/scene/jsblock/add-event-listener.snippet.d.ts +0 -15
  541. package/lib/runjs-context/snippets/scene/jsblock/append-style.snippet.d.ts +0 -15
  542. package/lib/runjs-context/snippets/scene/jsblock/append-style.snippet.js +0 -42
  543. package/lib/runjs-context/snippets/scene/jsblock/jsx-mount.snippet.d.ts +0 -15
  544. package/lib/runjs-context/snippets/scene/jsblock/jsx-mount.snippet.js +0 -46
  545. package/lib/runjs-context/snippets/scene/jsblock/jsx-unmount.snippet.d.ts +0 -15
  546. package/lib/runjs-context/snippets/scene/jsblock/jsx-unmount.snippet.js +0 -41
  547. package/lib/runjs-context/snippets/scene/jsblock/render-basic.snippet.d.ts +0 -15
  548. package/lib/runjs-context/snippets/scene/jsblock/render-basic.snippet.js +0 -41
  549. package/lib/runjs-context/snippets/scene/jsblock/render-button-handler.snippet.d.ts +0 -15
  550. package/lib/runjs-context/snippets/scene/jsblock/render-react.snippet.d.ts +0 -15
  551. package/lib/runjs-context/snippets/scene/jsfield/color-by-value.snippet.d.ts +0 -15
  552. package/lib/runjs-context/snippets/scene/jsfield/format-number.snippet.d.ts +0 -15
  553. package/lib/runjs-context/snippets/scene/jsfield/innerHTML-value.snippet.d.ts +0 -15
  554. package/lib/runjs-context/snippets/scene/jsitem/render-basic.snippet.d.ts +0 -15
  555. package/lib/runjs-context/snippets/scene/linkage/set-disabled.snippet.d.ts +0 -15
  556. package/lib/runjs-context/snippets/scene/linkage/set-field-value.snippet.d.ts +0 -15
  557. package/lib/runjs-context/snippets/scene/linkage/set-required.snippet.d.ts +0 -15
  558. package/lib/runjs-context/snippets/scene/linkage/toggle-visible.snippet.d.ts +0 -15
  559. package/src/runjs-context/contexts/FlowRunJSContext.ts +0 -190
  560. package/src/runjs-context/contexts/LinkageRunJSContext.ts +0 -35
  561. package/src/runjs-context/index.ts +0 -20
  562. package/src/runjs-context/snippets/global/api-request-get.snippet.ts +0 -20
  563. package/src/runjs-context/snippets/global/api-request-post.snippet.ts +0 -20
  564. package/src/runjs-context/snippets/global/console-log-ctx.snippet.ts +0 -19
  565. package/src/runjs-context/snippets/global/copy-record-json.snippet.ts +0 -21
  566. package/src/runjs-context/snippets/global/copy-to-clipboard.snippet.ts +0 -21
  567. package/src/runjs-context/snippets/global/log-json-record.snippet.ts +0 -21
  568. package/src/runjs-context/snippets/global/requireAsync.snippet.ts +0 -24
  569. package/src/runjs-context/snippets/global/sleep.snippet.ts +0 -21
  570. package/src/runjs-context/snippets/global/try-catch-async.snippet.ts +0 -22
  571. package/src/runjs-context/snippets/global/view-navigation-push.snippet.ts +0 -23
  572. package/src/runjs-context/snippets/libs/echarts-init.snippet.ts +0 -24
  573. package/src/runjs-context/snippets/scene/actions/record-id-message.snippet.ts +0 -21
  574. package/src/runjs-context/snippets/scene/actions/run-action-basic.snippet.ts +0 -18
  575. package/src/runjs-context/snippets/scene/jsblock/append-style.snippet.ts +0 -20
  576. package/src/runjs-context/snippets/scene/jsblock/jsx-mount.snippet.ts +0 -24
  577. package/src/runjs-context/snippets/scene/jsblock/jsx-unmount.snippet.ts +0 -19
  578. package/src/runjs-context/snippets/scene/jsblock/render-basic.snippet.ts +0 -24
  579. package/src/runjs-context/snippets/scene/jsblock/render-button-handler.snippet.ts +0 -24
  580. package/src/runjs-context/snippets/scene/jsblock/render-card.snippet.ts +0 -30
  581. package/src/runjs-context/snippets/scene/jsblock/render-react.snippet.ts +0 -34
  582. package/src/runjs-context/snippets/scene/jsfield/color-by-value.snippet.ts +0 -20
  583. package/src/runjs-context/snippets/scene/jsfield/format-number.snippet.ts +0 -19
  584. package/src/runjs-context/snippets/scene/jsfield/innerHTML-value.snippet.ts +0 -18
  585. /package/lib/runjs-context/snippets/global/{copy-record-json.snippet.d.ts → api-request.snippet.d.ts} +0 -0
  586. /package/lib/runjs-context/snippets/global/{copy-to-clipboard.snippet.d.ts → clipboard-copy-text.snippet.d.ts} +0 -0
  587. /package/lib/runjs-context/snippets/global/{log-json-record.snippet.d.ts → import-esm.snippet.d.ts} +0 -0
  588. /package/lib/runjs-context/snippets/global/{view-navigation-push.snippet.d.ts → query-selector.snippet.d.ts} +0 -0
  589. /package/lib/runjs-context/snippets/scene/{jsblock/render-card.snippet.d.ts → block/echarts-init.snippet.d.ts} +0 -0
@@ -31,7 +31,7 @@ export declare class ForkFlowModel<TMaster extends FlowModel = FlowModel> {
31
31
  /** 是否已被释放 */
32
32
  private disposed;
33
33
  /** fork 在 master.forks 中的索引 */
34
- readonly forkId: number;
34
+ readonly forkId: string;
35
35
  /** 需要与 master 共享的属性列表 */
36
36
  private static readonly SHARED_PROPERTIES;
37
37
  /**
@@ -48,7 +48,7 @@ export declare class ForkFlowModel<TMaster extends FlowModel = FlowModel> {
48
48
  * 注意:此属性通过 Proxy 在 get/set 陷阱中被动态访问,IDE 可能无法检测到使用, 切勿删除!
49
49
  */
50
50
  private localProperties;
51
- constructor(master: TMaster, initialProps?: IModelComponentProps, forkId?: number);
51
+ constructor(master: TMaster, initialProps?: IModelComponentProps, forkId?: string);
52
52
  get context(): FlowModelContext;
53
53
  /**
54
54
  * 获取对象及其原型链上的属性描述符
@@ -58,14 +58,18 @@ export declare class ForkFlowModel<TMaster extends FlowModel = FlowModel> {
58
58
  * 修改局部 props,仅影响当前 fork
59
59
  */
60
60
  setProps(key: string | IModelComponentProps, value?: any): void;
61
+ /**
62
+ * 清理局部 props,仅影响当前 fork
63
+ */
64
+ clearProps(): {};
61
65
  /**
62
66
  * render 依旧使用 master 的方法,但合并后的 props 需要透传
63
67
  */
64
68
  render(): any;
65
69
  /**
66
- * 自动流程缓存的作用域标识(fork 专用)。
70
+ * 事件缓存的作用域标识(fork 专用)。
67
71
  */
68
- getAutoFlowCacheScope(): string;
72
+ getFlowCacheScope(eventName: string): string;
69
73
  /**
70
74
  * 释放 fork:从 master.forks 中移除自身并断开引用
71
75
  */
@@ -38,10 +38,10 @@ __export(forkFlowModel_exports, {
38
38
  module.exports = __toCommonJS(forkFlowModel_exports);
39
39
  var import_reactive = require("@formily/reactive");
40
40
  var import_flowContext = require("../flowContext");
41
- var import_flowEngine = require("../flowEngine");
41
+ var import_secure = require("uid/secure");
42
42
  var _flowContext;
43
43
  const _ForkFlowModel = class _ForkFlowModel {
44
- constructor(master, initialProps = {}, forkId = 0) {
44
+ constructor(master, initialProps = {}, forkId) {
45
45
  /** 与 master 相同的 UID,用于日志调试 */
46
46
  __publicField(this, "uid");
47
47
  /** 调试标识,便于在日志或断言中快速识别 */
@@ -65,7 +65,7 @@ const _ForkFlowModel = class _ForkFlowModel {
65
65
  this.master = master;
66
66
  this.uid = master.uid;
67
67
  this.localProps = { ...initialProps };
68
- this.forkId = forkId;
68
+ this.forkId = forkId || (0, import_secure.uid)();
69
69
  this.hidden = this.master.hidden;
70
70
  (0, import_reactive.define)(this, {
71
71
  localProps: import_reactive.observable,
@@ -179,6 +179,12 @@ const _ForkFlowModel = class _ForkFlowModel {
179
179
  this.localProps = { ...this.localProps, ...key };
180
180
  }
181
181
  }
182
+ /**
183
+ * 清理局部 props,仅影响当前 fork
184
+ */
185
+ clearProps() {
186
+ return this.localProps = {};
187
+ }
182
188
  /**
183
189
  * render 依旧使用 master 的方法,但合并后的 props 需要透传
184
190
  */
@@ -194,10 +200,10 @@ const _ForkFlowModel = class _ForkFlowModel {
194
200
  }
195
201
  }
196
202
  /**
197
- * 自动流程缓存的作用域标识(fork 专用)。
203
+ * 事件缓存的作用域标识(fork 专用)。
198
204
  */
199
- getAutoFlowCacheScope() {
200
- return String(this.forkId);
205
+ getFlowCacheScope(eventName) {
206
+ return `${String(eventName)}:${String(this.forkId)}`;
201
207
  }
202
208
  // onUnmount() {
203
209
  // // 不在此处自动 dispose(避免破坏外部 fork 管理),但应透传到 master 的 onUnmount 钩子,
@@ -216,11 +222,35 @@ const _ForkFlowModel = class _ForkFlowModel {
216
222
  * 释放 fork:从 master.forks 中移除自身并断开引用
217
223
  */
218
224
  dispose() {
225
+ var _a;
219
226
  if (this.disposed) return;
220
227
  this.disposed = true;
228
+ try {
229
+ const cache = (_a = this.flowEngine) == null ? void 0 : _a.applyFlowCache;
230
+ if (cache && cache.size > 0) {
231
+ const uidSuffixes = [`:${this.uid}`, `-${this.uid}`];
232
+ const forkIdColon = `:${this.forkId}:`;
233
+ const forkIdHyphen = `-${this.forkId}-`;
234
+ for (const key of cache.keys()) {
235
+ const isEventCache = key.startsWith("event:") || key.startsWith("event-");
236
+ if (!isEventCache) continue;
237
+ const endMatches = uidSuffixes.some((s) => key.endsWith(s));
238
+ if (!endMatches) continue;
239
+ let trimmed = key;
240
+ for (const suf of uidSuffixes) {
241
+ if (trimmed.endsWith(suf)) {
242
+ trimmed = trimmed.slice(0, -suf.length);
243
+ break;
244
+ }
245
+ }
246
+ if (trimmed.includes(forkIdColon) || trimmed.includes(forkIdHyphen)) {
247
+ cache.delete(key);
248
+ }
249
+ }
250
+ }
251
+ } catch {
252
+ }
221
253
  if (this.master && this.master.forks) {
222
- const forkCacheKey = import_flowEngine.FlowEngine.generateApplyFlowCacheKey(`${this.forkId}`, "all", this.uid);
223
- this.flowEngine.applyFlowCache.delete(forkCacheKey);
224
254
  this.master.forks.delete(this);
225
255
  }
226
256
  if (this.master && this.master.forkCache) {
package/lib/provider.d.ts CHANGED
@@ -17,6 +17,8 @@ export declare const FlowEngineProvider: React.FC<FlowEngineProviderProps>;
17
17
  export declare const FlowEngineGlobalsContextProvider: React.FC<{
18
18
  children: React.ReactNode;
19
19
  }>;
20
- export declare const useFlowEngine: () => FlowEngine;
20
+ export declare const useFlowEngine: ({ throwError }?: {
21
+ throwError?: boolean;
22
+ }) => FlowEngine;
21
23
  export declare const useFlowEngineContext: () => FlowEngineContext;
22
24
  export {};
package/lib/provider.js CHANGED
@@ -49,14 +49,16 @@ var import_FlowContextProvider = require("./FlowContextProvider");
49
49
  var import_views = require("./views");
50
50
  var import_FlowView = require("./views/FlowView");
51
51
  const FlowEngineReactContext = (0, import_react.createContext)(null);
52
- const FlowEngineProvider = /* @__PURE__ */ __name((props) => {
52
+ const FlowEngineProvider = import_react.default.memo((props) => {
53
53
  const { engine, children } = props;
54
54
  if (!engine) {
55
55
  throw new Error("FlowEngineProvider must be supplied with an engine.");
56
56
  }
57
57
  return /* @__PURE__ */ import_react.default.createElement(FlowEngineReactContext.Provider, { value: engine }, /* @__PURE__ */ import_react.default.createElement(import_FlowContextProvider.FlowContextProvider, { context: engine.context }, children));
58
- }, "FlowEngineProvider");
58
+ });
59
+ FlowEngineProvider.displayName = "FlowEngineProvider";
59
60
  const FlowEngineGlobalsContextProvider = /* @__PURE__ */ __name(({ children }) => {
61
+ var _a;
60
62
  const { modal, message, notification } = import_antd.App.useApp();
61
63
  const [drawer, contextHolder] = (0, import_views.useDrawer)();
62
64
  const [embed, pageContextHolder] = (0, import_views.usePage)();
@@ -77,27 +79,28 @@ const FlowEngineGlobalsContextProvider = /* @__PURE__ */ __name(({ children }) =
77
79
  cache: false,
78
80
  get: /* @__PURE__ */ __name((ctx) => new import_FlowView.FlowViewer(ctx, { drawer, embed, popover, dialog }), "get")
79
81
  });
80
- engine.context.defineProperty("themeToken", {
81
- get: /* @__PURE__ */ __name(() => token, "get"),
82
- observable: true,
83
- cache: true
84
- });
85
82
  for (const item of Object.entries(context)) {
86
83
  const [key, value] = item;
87
84
  if (value) {
88
85
  engine.context.defineProperty(key, { value });
89
86
  }
90
87
  }
88
+ engine.context.defineProperty("themeToken", {
89
+ get: /* @__PURE__ */ __name(() => token, "get"),
90
+ observable: true,
91
+ cache: true
92
+ });
91
93
  engine.reactView.refresh();
92
94
  }, [engine, drawer, modal, message, notification, config, popover, token, dialog, embed]);
93
- return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, children, contextHolder, popoverContextHolder, pageContextHolder, dialogContextHolder);
95
+ return /* @__PURE__ */ import_react.default.createElement(import_antd.ConfigProvider, { ...config, locale: (_a = engine.context.locales) == null ? void 0 : _a.antd, popupMatchSelectWidth: false }, children, contextHolder, popoverContextHolder, pageContextHolder, dialogContextHolder);
94
96
  }, "FlowEngineGlobalsContextProvider");
95
- const useFlowEngine = /* @__PURE__ */ __name(() => {
97
+ const useFlowEngine = /* @__PURE__ */ __name(({ throwError = true } = {}) => {
96
98
  const context = (0, import_react.useContext)(FlowEngineReactContext);
97
- if (!context) {
98
- throw new Error(
99
+ if (!context && throwError) {
100
+ console.warn(
99
101
  "useFlowEngine must be used within a FlowEngineProvider, and FlowEngineProvider must be supplied with an engine."
100
102
  );
103
+ return;
101
104
  }
102
105
  return context;
103
106
  }, "useFlowEngine");
@@ -0,0 +1,10 @@
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
+ export * from '@formily/reactive';
10
+ export { observer, getPageActive } from './observer';
@@ -23,20 +23,19 @@ var __copyProps = (to, from, except, desc) => {
23
23
  }
24
24
  return to;
25
25
  };
26
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
26
27
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
27
- var api_request_post_snippet_exports = {};
28
- __export(api_request_post_snippet_exports, {
29
- default: () => api_request_post_snippet_default
28
+ var reactive_exports = {};
29
+ __export(reactive_exports, {
30
+ getPageActive: () => import_observer.getPageActive,
31
+ observer: () => import_observer.observer
32
+ });
33
+ module.exports = __toCommonJS(reactive_exports);
34
+ __reExport(reactive_exports, require("@formily/reactive"), module.exports);
35
+ var import_observer = require("./observer");
36
+ // Annotate the CommonJS export names for ESM import in node:
37
+ 0 && (module.exports = {
38
+ getPageActive,
39
+ observer,
40
+ ...require("@formily/reactive")
30
41
  });
31
- module.exports = __toCommonJS(api_request_post_snippet_exports);
32
- var api_request_post_snippet_default = {
33
- contexts: ["*"],
34
- prefix: "sn-api-post",
35
- label: "POST request template",
36
- description: "Basic template to send a POST request via ctx.api",
37
- content: `
38
- const res = await ctx.api.request({ url: '/your/api', method: 'post', data: { name: 'NocoBase' } });
39
- ctx.message.success(ctx.t('POST request completed'));
40
- console.log(ctx.t('POST result:'), res);
41
- `
42
- };
@@ -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 { IObserverOptions, ReactFC } from '@formily/reactive-react';
10
+ import React from 'react';
11
+ import { FlowEngineContext } from '..';
12
+ type ObserverComponentProps<P, Options extends IObserverOptions> = Options extends {
13
+ forwardRef: true;
14
+ } ? P & {
15
+ ref?: 'ref' extends keyof P ? P['ref'] : React.RefAttributes<any>;
16
+ } : React.PropsWithoutRef<P>;
17
+ export declare const observer: <P, Options extends IObserverOptions = IObserverOptions>(Component: ReactFC<P>, options?: Options) => React.MemoExoticComponent<ReactFC<ObserverComponentProps<P, Options>>>;
18
+ export declare function getPageActive(context: FlowEngineContext): boolean | undefined;
19
+ export {};
@@ -0,0 +1,109 @@
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 observer_exports = {};
39
+ __export(observer_exports, {
40
+ getPageActive: () => getPageActive,
41
+ observer: () => observer
42
+ });
43
+ module.exports = __toCommonJS(observer_exports);
44
+ var import_reactive_react = require("@formily/reactive-react");
45
+ var import_react = __toESM(require("react"));
46
+ var import_FlowContextProvider = require("../FlowContextProvider");
47
+ var import_reactive = require("@formily/reactive");
48
+ const observer = /* @__PURE__ */ __name((Component, options) => {
49
+ const ComponentWithDefaultScheduler = import_react.default.memo((props) => {
50
+ const ctx = (0, import_FlowContextProvider.useFlowContext)();
51
+ const ctxRef = (0, import_react.useRef)(ctx);
52
+ ctxRef.current = ctx;
53
+ const pendingDisposerRef = (0, import_react.useRef)(null);
54
+ (0, import_react.useEffect)(() => {
55
+ return () => {
56
+ if (pendingDisposerRef.current) {
57
+ pendingDisposerRef.current();
58
+ pendingDisposerRef.current = null;
59
+ }
60
+ };
61
+ }, []);
62
+ const ObservedComponent = (0, import_react.useMemo)(
63
+ () => (0, import_reactive_react.observer)(Component, {
64
+ scheduler(updater) {
65
+ var _a, _b;
66
+ const pageActive = getPageActive(ctxRef.current);
67
+ const tabActive = (_b = (_a = ctxRef.current) == null ? void 0 : _a.tabActive) == null ? void 0 : _b.value;
68
+ if (pageActive === false || tabActive === false) {
69
+ setTimeout(() => {
70
+ if (pendingDisposerRef.current) {
71
+ return;
72
+ }
73
+ const disposer = (0, import_reactive.autorun)(() => {
74
+ var _a2, _b2, _c, _d, _e, _f;
75
+ if (((_b2 = (_a2 = ctxRef.current) == null ? void 0 : _a2.pageActive) == null ? void 0 : _b2.value) && (((_d = (_c = ctxRef.current) == null ? void 0 : _c.tabActive) == null ? void 0 : _d.value) === true || ((_f = (_e = ctxRef.current) == null ? void 0 : _e.tabActive) == null ? void 0 : _f.value) === void 0)) {
76
+ updater();
77
+ disposer == null ? void 0 : disposer();
78
+ pendingDisposerRef.current = null;
79
+ }
80
+ });
81
+ pendingDisposerRef.current = disposer;
82
+ });
83
+ return;
84
+ }
85
+ if (pendingDisposerRef.current) {
86
+ pendingDisposerRef.current();
87
+ pendingDisposerRef.current = null;
88
+ }
89
+ updater();
90
+ },
91
+ ...options
92
+ }),
93
+ []
94
+ );
95
+ return /* @__PURE__ */ import_react.default.createElement(ObservedComponent, { ...props });
96
+ });
97
+ ComponentWithDefaultScheduler.displayName = `ComponentWithDefaultScheduler`;
98
+ return ComponentWithDefaultScheduler;
99
+ }, "observer");
100
+ function getPageActive(context) {
101
+ var _a, _b, _c;
102
+ return typeof ((_a = context == null ? void 0 : context.pageActive) == null ? void 0 : _a.value) === "boolean" ? (_b = context == null ? void 0 : context.pageActive) == null ? void 0 : _b.value : (_c = context == null ? void 0 : context.view) == null ? void 0 : _c.inputArgs.pageActive;
103
+ }
104
+ __name(getPageActive, "getPageActive");
105
+ // Annotate the CommonJS export names for ESM import in node:
106
+ 0 && (module.exports = {
107
+ getPageActive,
108
+ observer
109
+ });
@@ -30,6 +30,11 @@ export declare abstract class BaseRecordResource<TData = any> extends APIResourc
30
30
  runAction<TData = any, TMeta = any>(action: string, options: any): Promise<any>;
31
31
  setResourceName(resourceName: string): this;
32
32
  getResourceName(): string;
33
+ /**
34
+ * Mark current resource as dirty on the root FlowEngine.
35
+ * Used to coordinate "refresh on active" across view stacks.
36
+ */
37
+ protected markDataSourceDirty(resourceName?: string): void;
33
38
  setSourceId(sourceId: string | number): this;
34
39
  getSourceId(): string | number;
35
40
  setDataSourceKey(dataSourceKey: string): this;
@@ -45,6 +50,7 @@ export declare abstract class BaseRecordResource<TData = any> extends APIResourc
45
50
  removeAppends(appends: string | string[]): this;
46
51
  getUpdateAssociationValues(): string[];
47
52
  addUpdateAssociationValues(updateAssociationValues: string | string[]): this;
53
+ jsonStringify(value: any): string;
48
54
  setFilterByTk(filterByTk: any): this;
49
55
  getFilterByTk(): any;
50
56
  setFields(fields: string[] | string): this;
@@ -44,6 +44,7 @@ var import_lodash = __toESM(require("lodash"));
44
44
  var import_apiResource = require("./apiResource");
45
45
  var import_filterItem = require("./filterItem");
46
46
  var import_flowResource = require("./flowResource");
47
+ var import_viewEvents = require("../views/viewEvents");
47
48
  const _BaseRecordResource = class _BaseRecordResource extends import_apiResource.APIResource {
48
49
  resourceName;
49
50
  sourceId = null;
@@ -110,6 +111,7 @@ const _BaseRecordResource = class _BaseRecordResource extends import_apiResource
110
111
  }
111
112
  async runAction(action, options) {
112
113
  var _a;
114
+ const { rawResponse, ...rest } = options;
113
115
  const config = this.mergeRequestConfig(
114
116
  import_lodash.default.omit(this.request, ["params", "data", "method"]),
115
117
  {
@@ -117,14 +119,18 @@ const _BaseRecordResource = class _BaseRecordResource extends import_apiResource
117
119
  url: this.buildURL(action)
118
120
  },
119
121
  (_a = this.runActionOptions) == null ? void 0 : _a[action],
120
- options
122
+ rest
121
123
  );
122
124
  if (["create", "update", "firstOrCreate", "updateOrCreate"].includes(action)) {
123
125
  config.params = config.params || {};
124
126
  config.params.updateAssociationValues = this.getUpdateAssociationValues();
125
127
  }
126
128
  try {
127
- const { data } = await this.api.request(config);
129
+ const response = await this.api.request(config);
130
+ if (rawResponse) {
131
+ return response;
132
+ }
133
+ const { data } = response;
128
134
  if (!(data == null ? void 0 : data.data)) {
129
135
  return data;
130
136
  }
@@ -140,6 +146,29 @@ const _BaseRecordResource = class _BaseRecordResource extends import_apiResource
140
146
  getResourceName() {
141
147
  return this.resourceName;
142
148
  }
149
+ /**
150
+ * Mark current resource as dirty on the root FlowEngine.
151
+ * Used to coordinate "refresh on active" across view stacks.
152
+ */
153
+ markDataSourceDirty(resourceName) {
154
+ var _a, _b;
155
+ const engine = this.context.engine;
156
+ if (!engine) return;
157
+ const dataSourceKey = this.getDataSourceKey() || "main";
158
+ const resName = resourceName || this.getResourceName();
159
+ if (!resName) return;
160
+ const affectedResourceNames = /* @__PURE__ */ new Set([String(resName)]);
161
+ if (typeof resName === "string" && resName.includes(".")) {
162
+ affectedResourceNames.add(resName.split(".")[0]);
163
+ }
164
+ for (const name of affectedResourceNames) {
165
+ engine.markDataSourceDirty(dataSourceKey, name);
166
+ }
167
+ (_b = (_a = engine.emitter) == null ? void 0 : _a.emit) == null ? void 0 : _b.call(_a, import_viewEvents.DATA_SOURCE_DIRTY_EVENT, {
168
+ dataSourceKey,
169
+ resourceNames: Array.from(affectedResourceNames)
170
+ });
171
+ }
143
172
  setSourceId(sourceId) {
144
173
  this.sourceId = sourceId;
145
174
  return this;
@@ -219,8 +248,14 @@ const _BaseRecordResource = class _BaseRecordResource extends import_apiResource
219
248
  this.updateAssociationValues = currentUpdateAssociationValues;
220
249
  return this;
221
250
  }
251
+ jsonStringify(value) {
252
+ if (value !== null && typeof value === "object") {
253
+ return JSON.stringify(value);
254
+ }
255
+ return value;
256
+ }
222
257
  setFilterByTk(filterByTk) {
223
- return this.addRequestParameter("filterByTk", filterByTk);
258
+ return this.addRequestParameter("filterByTk", this.jsonStringify(filterByTk));
224
259
  }
225
260
  getFilterByTk() {
226
261
  return this.request.params.filterByTk;
@@ -16,6 +16,7 @@ export declare class MultiRecordResource<TDataItem = any> extends BaseRecordReso
16
16
  value: Record<string, any>;
17
17
  };
18
18
  private refreshTimer;
19
+ private refreshWaiters;
19
20
  protected createActionOptions: {};
20
21
  protected updateActionOptions: {};
21
22
  protected _refreshActionName: string;
@@ -39,11 +40,13 @@ export declare class MultiRecordResource<TDataItem = any> extends BaseRecordReso
39
40
  next(): Promise<void>;
40
41
  previous(): Promise<void>;
41
42
  goto(page: number): Promise<void>;
42
- create(data: TDataItem, options?: AxiosRequestConfig): Promise<void>;
43
+ create(data: TDataItem, options?: AxiosRequestConfig & {
44
+ refresh?: boolean;
45
+ }): Promise<void>;
43
46
  get(filterByTk: any): Promise<TDataItem | undefined>;
44
47
  update(filterByTk: string | number, data: Partial<TDataItem>, options?: AxiosRequestConfig): Promise<void>;
45
48
  destroySelectedRows(): Promise<void>;
46
- destroy(filterByTk: string | number | string[] | number[] | TDataItem | TDataItem[], options?: AxiosRequestConfig): Promise<void>;
49
+ destroy(filterByTk: string | number | string[] | number[] | TDataItem | TDataItem[] | object, options?: AxiosRequestConfig): Promise<void>;
47
50
  setItem(index: number, newDataItem: TDataItem): void;
48
51
  /**
49
52
  * 在同一个事件循环内多次调用 refresh 方法时,只有最后一次调用会生效。避免触发多次相同的接口请求。
@@ -47,6 +47,7 @@ const _MultiRecordResource = class _MultiRecordResource extends import_baseRecor
47
47
  _data = import_reactive.observable.ref([]);
48
48
  _meta = import_reactive.observable.ref({});
49
49
  refreshTimer = null;
50
+ refreshWaiters = [];
50
51
  createActionOptions = {};
51
52
  updateActionOptions = {};
52
53
  _refreshActionName = "list";
@@ -129,8 +130,13 @@ const _MultiRecordResource = class _MultiRecordResource extends import_baseRecor
129
130
  }
130
131
  async create(data, options) {
131
132
  const config = this.mergeRequestConfig({ data }, this.createActionOptions, options);
132
- await this.runAction("create", config);
133
- await this.refresh();
133
+ const res = await this.runAction("create", config);
134
+ this.markDataSourceDirty();
135
+ this.emit("saved", data);
136
+ if ((options == null ? void 0 : options.refresh) !== false) {
137
+ await this.refresh();
138
+ }
139
+ return res;
134
140
  }
135
141
  async get(filterByTk) {
136
142
  const options = {
@@ -144,17 +150,20 @@ const _MultiRecordResource = class _MultiRecordResource extends import_baseRecor
144
150
  return data;
145
151
  }
146
152
  async update(filterByTk, data, options) {
153
+ const result = data;
147
154
  const config = this.mergeRequestConfig(
148
155
  {
149
156
  params: {
150
157
  filterByTk
151
158
  },
152
- data
159
+ data: result
153
160
  },
154
161
  this.updateActionOptions,
155
162
  options
156
163
  );
157
164
  await this.runAction("update", config);
165
+ this.markDataSourceDirty();
166
+ this.emit("saved", data);
158
167
  await this.refresh();
159
168
  }
160
169
  async destroySelectedRows() {
@@ -168,14 +177,18 @@ const _MultiRecordResource = class _MultiRecordResource extends import_baseRecor
168
177
  const config = this.mergeRequestConfig(
169
178
  {
170
179
  params: {
171
- filterByTk: import_lodash.default.castArray(filterByTk).map((item) => {
172
- return typeof item === "object" ? item["id"] : item;
173
- })
180
+ filterByTk: this.jsonStringify(filterByTk)
174
181
  }
175
182
  },
176
183
  options
177
184
  );
178
185
  await this.runAction("destroy", config);
186
+ this.markDataSourceDirty();
187
+ const currentPage = this.getPage();
188
+ const lastPage = Math.ceil((this.getCount() - import_lodash.default.castArray(filterByTk).length) / this.getPageSize());
189
+ if (currentPage > lastPage) {
190
+ this.setPage(lastPage || 1);
191
+ }
179
192
  await this.refresh();
180
193
  }
181
194
  setItem(index, newDataItem) {
@@ -193,7 +206,11 @@ const _MultiRecordResource = class _MultiRecordResource extends import_baseRecor
193
206
  clearTimeout(this.refreshTimer);
194
207
  }
195
208
  return new Promise((resolve, reject) => {
209
+ this.refreshWaiters.push({ resolve, reject });
196
210
  this.refreshTimer = setTimeout(async () => {
211
+ const waiters = this.refreshWaiters;
212
+ this.refreshWaiters = [];
213
+ this.refreshTimer = null;
197
214
  try {
198
215
  this.clearError();
199
216
  this.loading = true;
@@ -209,13 +226,12 @@ const _MultiRecordResource = class _MultiRecordResource extends import_baseRecor
209
226
  this.setPageSize(meta.pageSize);
210
227
  }
211
228
  this.emit("refresh");
212
- this.loading = false;
213
- resolve();
229
+ waiters.forEach((w) => w.resolve());
214
230
  } catch (error) {
215
231
  this.setError(error);
216
- reject(error instanceof Error ? error : new Error(String(error)));
232
+ const err = error instanceof Error ? error : new Error(String(error));
233
+ waiters.forEach((w) => w.reject(err));
217
234
  } finally {
218
- this.refreshTimer = null;
219
235
  this.loading = false;
220
236
  }
221
237
  });
@@ -60,29 +60,34 @@ const _SingleRecordResource = class _SingleRecordResource extends import_baseRec
60
60
  async save(data, options) {
61
61
  const config = this.mergeRequestConfig(this.saveActionOptions, import_lodash.default.omit(options, ["refresh"]));
62
62
  let actionName = "create";
63
+ const result = data;
63
64
  if (!this.isNewRecord) {
64
65
  config.params = config.params || {};
65
66
  config.params.filterByTk = this.getFilterByTk();
66
67
  actionName = "update";
67
68
  }
68
- await this.runAction(actionName, {
69
+ const res = await this.runAction(actionName, {
69
70
  ...config,
70
- data
71
+ data: result
71
72
  });
73
+ this.markDataSourceDirty();
74
+ this.emit("saved", data);
72
75
  if ((options == null ? void 0 : options.refresh) !== false) {
73
76
  await this.refresh();
74
77
  }
78
+ return res;
75
79
  }
76
80
  async destroy(options) {
77
81
  const config = this.mergeRequestConfig(
78
82
  {
79
83
  params: {
80
- filterByTk: this.request.params.filterByTk
84
+ filterByTk: this.jsonStringify(this.request.params.filterByTk)
81
85
  }
82
86
  },
83
87
  options
84
88
  );
85
89
  await this.runAction("destroy", config);
90
+ this.markDataSourceDirty();
86
91
  this.setData(null);
87
92
  }
88
93
  async refresh() {
@@ -6,7 +6,7 @@
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 { FlowEngineContext } from '../flowContext';
9
+ import { FlowContext, FlowEngineContext } from '../flowContext';
10
10
  import { BaseRecordResource } from './baseRecordResource';
11
11
  type SQLRunOptions = {
12
12
  bind?: Record<string, any>;
@@ -20,8 +20,8 @@ type SQLSaveOptions = {
20
20
  dataSourceKey?: string;
21
21
  };
22
22
  export declare class FlowSQLRepository {
23
- protected ctx: FlowEngineContext;
24
- constructor(ctx: FlowEngineContext);
23
+ protected ctx: FlowContext;
24
+ constructor(ctx: FlowContext);
25
25
  run(sql: string, options?: SQLRunOptions): Promise<any>;
26
26
  save(data: SQLSaveOptions): Promise<void>;
27
27
  runById(uid: string, options?: SQLRunOptions): Promise<any>;
@@ -35,6 +35,7 @@ export declare class SQLResource<TData = any> extends BaseRecordResource<TData>
35
35
  value: Record<string, any>;
36
36
  };
37
37
  private refreshTimer;
38
+ private refreshWaiters;
38
39
  private _debugEnabled;
39
40
  private _sql;
40
41
  protected request: {
@@ -61,6 +62,7 @@ export declare class SQLResource<TData = any> extends BaseRecordResource<TData>
61
62
  setFilterByTk(filterByTk: any): this;
62
63
  setFilter(filter: Record<string, any>): this;
63
64
  setBind(bind: Record<string, any> | Array<any>): this;
65
+ setLiquidContext(liquidContext: Record<string, any>): this;
64
66
  run(): Promise<any>;
65
67
  runBySQL(): Promise<any>;
66
68
  runById(): Promise<any>;