@nocobase/flow-engine 2.0.0-alpha.4 → 2.0.0-alpha.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (466) hide show
  1. package/lib/BlockScopedFlowEngine.d.ts +23 -0
  2. package/lib/BlockScopedFlowEngine.js +90 -0
  3. package/lib/FlowContextProvider.d.ts +2 -2
  4. package/lib/FlowContextProvider.js +3 -3
  5. package/lib/FlowDefinition.d.ts +4 -2
  6. package/lib/JSRunner.js +3 -0
  7. package/lib/ViewScopedFlowEngine.d.ts +1 -1
  8. package/lib/ViewScopedFlowEngine.js +12 -0
  9. package/lib/acl/Acl.d.ts +1 -0
  10. package/lib/acl/Acl.js +11 -0
  11. package/lib/components/FieldModelRenderer.js +14 -6
  12. package/lib/components/FieldSkeleton.d.ts +10 -0
  13. package/lib/components/FieldSkeleton.js +64 -0
  14. package/lib/components/FlowContextSelector.js +7 -2
  15. package/lib/components/FlowModelRenderer.d.ts +3 -6
  16. package/lib/components/FlowModelRenderer.js +16 -47
  17. package/lib/components/FormItem.js +5 -1
  18. package/lib/components/MobilePopup.d.ts +20 -0
  19. package/lib/components/MobilePopup.js +102 -0
  20. package/lib/components/MobilePopup.style.d.ts +17 -0
  21. package/lib/components/MobilePopup.style.js +186 -0
  22. package/lib/components/index.d.ts +1 -0
  23. package/lib/components/index.js +3 -1
  24. package/lib/components/settings/independents/dropdown/FlowsDropdownButton.js +2 -2
  25. package/lib/components/settings/wrappers/contextual/DefaultSettingsIcon.js +17 -5
  26. package/lib/components/settings/wrappers/contextual/FlowsContextMenu.js +2 -2
  27. package/lib/components/settings/wrappers/contextual/FlowsFloatContextMenu.d.ts +2 -2
  28. package/lib/components/settings/wrappers/contextual/FlowsFloatContextMenu.js +35 -6
  29. package/lib/components/settings/wrappers/contextual/StepSettingsDialog.js +7 -1
  30. package/lib/components/variables/VariableInput.js +19 -5
  31. package/lib/components/variables/VariableTag.js +43 -2
  32. package/lib/components/variables/types.d.ts +2 -0
  33. package/lib/data-source/index.d.ts +15 -4
  34. package/lib/data-source/index.js +42 -13
  35. package/lib/data-source/sortCollectionsByInherits.d.ts +10 -0
  36. package/lib/data-source/sortCollectionsByInherits.js +71 -0
  37. package/lib/emitter.d.ts +6 -0
  38. package/lib/emitter.js +12 -0
  39. package/lib/executor/FlowExecutor.d.ts +4 -5
  40. package/lib/executor/FlowExecutor.js +168 -99
  41. package/lib/flow-registry/GlobalFlowRegistry.d.ts +1 -0
  42. package/lib/flow-registry/GlobalFlowRegistry.js +3 -0
  43. package/lib/flow-registry/InstanceFlowRegistry.d.ts +1 -0
  44. package/lib/flow-registry/InstanceFlowRegistry.js +3 -0
  45. package/lib/flowContext.d.ts +37 -5
  46. package/lib/flowContext.js +224 -87
  47. package/lib/flowEngine.d.ts +24 -1
  48. package/lib/flowEngine.js +81 -8
  49. package/lib/flowSettings.d.ts +2 -1
  50. package/lib/flowSettings.js +16 -8
  51. package/lib/hooks/useApplyAutoFlows.js +2 -1
  52. package/lib/index.d.ts +7 -1
  53. package/lib/index.js +32 -3
  54. package/lib/locale/en-US.json +4 -2
  55. package/lib/locale/index.d.ts +4 -0
  56. package/lib/locale/zh-CN.json +4 -2
  57. package/lib/models/CollectionFieldModel.d.ts +3 -0
  58. package/lib/models/CollectionFieldModel.js +52 -6
  59. package/lib/models/flowModel.d.ts +30 -29
  60. package/lib/models/flowModel.js +153 -100
  61. package/lib/models/forkFlowModel.d.ts +8 -4
  62. package/lib/models/forkFlowModel.js +38 -8
  63. package/lib/provider.d.ts +3 -1
  64. package/lib/provider.js +7 -5
  65. package/lib/resources/multiRecordResource.js +25 -1
  66. package/lib/resources/singleRecordResource.js +19 -1
  67. package/lib/resources/sqlResource.d.ts +1 -0
  68. package/lib/resources/sqlResource.js +20 -24
  69. package/lib/runjs-context/contexts/FormJSFieldItemRunJSContext.d.ts +1 -6
  70. package/lib/runjs-context/contexts/FormJSFieldItemRunJSContext.js +27 -20
  71. package/lib/runjs-context/contexts/JSBlockRunJSContext.d.ts +1 -6
  72. package/lib/runjs-context/contexts/JSBlockRunJSContext.js +46 -33
  73. package/lib/runjs-context/contexts/JSCollectionActionRunJSContext.d.ts +1 -2
  74. package/lib/runjs-context/contexts/JSCollectionActionRunJSContext.js +14 -15
  75. package/lib/runjs-context/contexts/{LinkageRunJSContext.d.ts → JSColumnRunJSContext.d.ts} +6 -3
  76. package/lib/runjs-context/contexts/JSColumnRunJSContext.js +78 -0
  77. package/lib/runjs-context/contexts/JSFieldRunJSContext.d.ts +1 -6
  78. package/lib/runjs-context/contexts/JSFieldRunJSContext.js +28 -24
  79. package/lib/runjs-context/contexts/JSItemRunJSContext.d.ts +1 -6
  80. package/lib/runjs-context/contexts/JSItemRunJSContext.js +24 -20
  81. package/lib/runjs-context/contexts/JSRecordActionRunJSContext.d.ts +1 -2
  82. package/lib/runjs-context/contexts/JSRecordActionRunJSContext.js +16 -17
  83. package/lib/runjs-context/contexts/base.d.ts +9 -0
  84. package/lib/runjs-context/contexts/base.js +205 -0
  85. package/lib/runjs-context/helpers.d.ts +5 -2
  86. package/lib/runjs-context/helpers.js +36 -27
  87. package/lib/runjs-context/registry.d.ts +7 -4
  88. package/lib/runjs-context/registry.js +10 -42
  89. package/lib/runjs-context/setup.d.ts +9 -0
  90. package/lib/runjs-context/setup.js +82 -0
  91. package/lib/runjs-context/snippets/global/{copy-record-json.snippet.js → api-request.snippet.js} +25 -10
  92. package/lib/runjs-context/snippets/global/clipboard-copy-text.snippet.js +61 -0
  93. package/lib/runjs-context/snippets/global/{view-navigation-push.snippet.js → import-esm.snippet.js} +26 -12
  94. package/lib/runjs-context/snippets/global/message-error.snippet.js +6 -0
  95. package/lib/runjs-context/snippets/global/message-success.snippet.js +6 -0
  96. package/lib/runjs-context/snippets/global/notification-open.snippet.d.ts +3 -8
  97. package/lib/runjs-context/snippets/global/notification-open.snippet.js +8 -1
  98. package/lib/runjs-context/snippets/global/open-view-dialog.snippet.js +10 -3
  99. package/lib/runjs-context/snippets/global/open-view-drawer.snippet.js +10 -3
  100. package/lib/runjs-context/snippets/global/query-selector.snippet.js +53 -0
  101. package/lib/runjs-context/snippets/global/require-amd.snippet.d.ts +11 -0
  102. package/lib/runjs-context/snippets/global/{requireAsync.snippet.js → require-amd.snippet.js} +16 -13
  103. package/lib/runjs-context/snippets/global/window-open.snippet.d.ts +3 -8
  104. package/lib/runjs-context/snippets/global/window-open.snippet.js +8 -1
  105. package/lib/runjs-context/snippets/index.d.ts +14 -3
  106. package/lib/runjs-context/snippets/index.js +162 -40
  107. package/lib/runjs-context/snippets/scene/block/add-event-listener.snippet.d.ts +11 -0
  108. package/lib/runjs-context/snippets/scene/{jsblock → block}/add-event-listener.snippet.js +11 -2
  109. package/lib/runjs-context/snippets/scene/block/api-fetch-render-list.snippet.d.ts +11 -0
  110. package/lib/runjs-context/snippets/scene/block/api-fetch-render-list.snippet.js +64 -0
  111. package/lib/runjs-context/snippets/scene/block/chartjs-bar.snippet.d.ts +11 -0
  112. package/lib/runjs-context/snippets/scene/block/chartjs-bar.snippet.js +99 -0
  113. package/lib/runjs-context/snippets/{libs → scene/block}/echarts-init.snippet.js +24 -7
  114. package/lib/runjs-context/snippets/scene/block/render-antd-icons.snippet.d.ts +11 -0
  115. package/lib/runjs-context/snippets/scene/block/render-antd-icons.snippet.js +65 -0
  116. package/lib/runjs-context/snippets/scene/block/render-button-handler.snippet.d.ts +11 -0
  117. package/lib/runjs-context/snippets/scene/{jsblock → block}/render-button-handler.snippet.js +17 -9
  118. package/lib/runjs-context/snippets/scene/block/render-iframe.snippet.d.ts +11 -0
  119. package/lib/runjs-context/snippets/scene/block/render-iframe.snippet.js +57 -0
  120. package/lib/runjs-context/snippets/scene/block/render-info-card.snippet.d.ts +11 -0
  121. package/lib/runjs-context/snippets/scene/block/render-info-card.snippet.js +71 -0
  122. package/lib/runjs-context/snippets/scene/block/render-react-jsx.snippet.d.ts +11 -0
  123. package/lib/runjs-context/snippets/scene/{jsblock/render-card.snippet.js → block/render-react-jsx.snippet.js} +26 -13
  124. package/lib/runjs-context/snippets/scene/block/render-react.snippet.d.ts +11 -0
  125. package/lib/runjs-context/snippets/scene/{jsblock → block}/render-react.snippet.js +18 -17
  126. package/lib/runjs-context/snippets/scene/block/render-statistics.snippet.d.ts +11 -0
  127. package/lib/runjs-context/snippets/scene/block/render-statistics.snippet.js +95 -0
  128. package/lib/runjs-context/snippets/scene/block/render-timeline.snippet.d.ts +11 -0
  129. package/lib/runjs-context/snippets/scene/block/render-timeline.snippet.js +84 -0
  130. package/lib/runjs-context/snippets/scene/block/resource-example.snippet.d.ts +11 -0
  131. package/lib/runjs-context/snippets/scene/block/resource-example.snippet.js +60 -0
  132. package/lib/runjs-context/snippets/scene/block/three-users-orbit.snippet.d.ts +11 -0
  133. package/lib/runjs-context/snippets/scene/block/three-users-orbit.snippet.js +283 -0
  134. package/lib/runjs-context/snippets/scene/block/vue-component.snippet.d.ts +11 -0
  135. package/lib/runjs-context/snippets/scene/block/vue-component.snippet.js +124 -0
  136. package/lib/runjs-context/snippets/scene/detail/color-by-value.snippet.d.ts +11 -0
  137. package/lib/runjs-context/snippets/scene/{jsfield → detail}/color-by-value.snippet.js +13 -3
  138. package/lib/runjs-context/snippets/scene/detail/copy-to-clipboard.snippet.d.ts +11 -0
  139. package/lib/runjs-context/snippets/{global → scene/detail}/copy-to-clipboard.snippet.js +28 -6
  140. package/lib/runjs-context/snippets/scene/detail/format-number.snippet.d.ts +11 -0
  141. package/lib/runjs-context/snippets/scene/{jsfield → detail}/format-number.snippet.js +13 -3
  142. package/lib/runjs-context/snippets/scene/detail/innerHTML-value.snippet.d.ts +11 -0
  143. package/lib/runjs-context/snippets/scene/{jsfield → detail}/innerHTML-value.snippet.js +13 -3
  144. package/lib/runjs-context/snippets/scene/detail/percentage-bar.snippet.d.ts +11 -0
  145. package/lib/runjs-context/snippets/scene/detail/percentage-bar.snippet.js +82 -0
  146. package/lib/runjs-context/snippets/scene/detail/relative-time.snippet.d.ts +11 -0
  147. package/lib/runjs-context/snippets/scene/detail/relative-time.snippet.js +80 -0
  148. package/lib/runjs-context/snippets/scene/detail/status-tag.snippet.d.ts +11 -0
  149. package/lib/runjs-context/snippets/scene/detail/status-tag.snippet.js +74 -0
  150. package/lib/runjs-context/snippets/scene/form/calculate-total.snippet.d.ts +11 -0
  151. package/lib/runjs-context/snippets/scene/form/calculate-total.snippet.js +63 -0
  152. package/lib/runjs-context/snippets/scene/form/cascade-select.snippet.d.ts +11 -0
  153. package/lib/runjs-context/snippets/scene/form/cascade-select.snippet.js +81 -0
  154. package/lib/runjs-context/snippets/scene/form/conditional-required.snippet.d.ts +11 -0
  155. package/lib/runjs-context/snippets/scene/form/conditional-required.snippet.js +64 -0
  156. package/lib/runjs-context/snippets/scene/form/copy-field-values.snippet.d.ts +11 -0
  157. package/lib/runjs-context/snippets/scene/form/copy-field-values.snippet.js +74 -0
  158. package/lib/runjs-context/snippets/scene/form/render-basic.snippet.d.ts +11 -0
  159. package/lib/runjs-context/snippets/scene/{jsitem → form}/render-basic.snippet.js +11 -2
  160. package/lib/runjs-context/snippets/scene/form/set-disabled.snippet.d.ts +11 -0
  161. package/lib/runjs-context/snippets/scene/{linkage → form}/set-disabled.snippet.js +12 -3
  162. package/lib/runjs-context/snippets/scene/form/set-field-value.snippet.d.ts +11 -0
  163. package/lib/runjs-context/snippets/scene/{linkage → form}/set-field-value.snippet.js +12 -3
  164. package/lib/runjs-context/snippets/scene/form/set-required.snippet.d.ts +11 -0
  165. package/lib/runjs-context/snippets/scene/{linkage → form}/set-required.snippet.js +12 -3
  166. package/lib/runjs-context/snippets/scene/form/toggle-multiple-fields.snippet.d.ts +11 -0
  167. package/lib/runjs-context/snippets/scene/form/toggle-multiple-fields.snippet.js +67 -0
  168. package/lib/runjs-context/snippets/scene/form/toggle-visible.snippet.d.ts +11 -0
  169. package/lib/runjs-context/snippets/scene/{linkage → form}/toggle-visible.snippet.js +12 -3
  170. package/lib/runjs-context/snippets/scene/table/cell-open-dialog.snippet.d.ts +11 -0
  171. package/lib/runjs-context/snippets/scene/table/cell-open-dialog.snippet.js +64 -0
  172. package/lib/runjs-context/snippets/scene/table/collection-selected-count.snippet.d.ts +11 -0
  173. package/lib/runjs-context/snippets/scene/{actions → table}/collection-selected-count.snippet.js +11 -2
  174. package/lib/runjs-context/snippets/scene/table/concat-fields.snippet.d.ts +11 -0
  175. package/lib/runjs-context/snippets/scene/table/concat-fields.snippet.js +79 -0
  176. package/lib/runjs-context/snippets/scene/table/destroy-selected.snippet.d.ts +11 -0
  177. package/lib/runjs-context/snippets/{global/log-json-record.snippet.js → scene/table/destroy-selected.snippet.js} +24 -11
  178. package/lib/runjs-context/snippets/scene/table/export-selected-json.snippet.d.ts +11 -0
  179. package/lib/runjs-context/snippets/scene/table/export-selected-json.snippet.js +64 -0
  180. package/lib/runjs-context/snippets/scene/table/iterate-selected-rows.snippet.d.ts +11 -0
  181. package/lib/runjs-context/snippets/scene/{actions → table}/iterate-selected-rows.snippet.js +11 -2
  182. package/lib/runjs-context/snippets/types.d.ts +9 -1
  183. package/lib/scheduler/ModelOperationScheduler.d.ts +51 -0
  184. package/lib/scheduler/ModelOperationScheduler.js +262 -0
  185. package/lib/types.d.ts +28 -3
  186. package/lib/types.js +4 -3
  187. package/lib/utils/associationObjectVariable.d.ts +32 -0
  188. package/lib/utils/associationObjectVariable.js +157 -0
  189. package/lib/utils/buildSettingsViewInputArgs.d.ts +19 -0
  190. package/lib/utils/buildSettingsViewInputArgs.js +75 -0
  191. package/lib/utils/createEphemeralContext.d.ts +13 -0
  192. package/lib/utils/createEphemeralContext.js +140 -0
  193. package/lib/utils/flows.d.ts +10 -0
  194. package/lib/{runjs-context/snippets/global/api-request-post.snippet.js → utils/flows.js} +21 -15
  195. package/lib/utils/index.d.ts +7 -2
  196. package/lib/utils/index.js +21 -2
  197. package/lib/utils/jsxTransform.d.ts +15 -0
  198. package/lib/utils/jsxTransform.js +68 -0
  199. package/lib/utils/params-resolvers.js +3 -3
  200. package/lib/utils/parsePathnameToViewParams.d.ts +1 -1
  201. package/lib/utils/parsePathnameToViewParams.js +41 -5
  202. package/lib/utils/pruneFilter.d.ts +21 -0
  203. package/lib/{runjs-context/snippets/global/try-catch-async.snippet.js → utils/pruneFilter.js} +24 -16
  204. package/lib/utils/safeGlobals.d.ts +5 -3
  205. package/lib/utils/safeGlobals.js +40 -0
  206. package/lib/utils/schema-utils.js +2 -2
  207. package/lib/utils/serverContextParams.d.ts +1 -0
  208. package/lib/utils/translation.d.ts +4 -1
  209. package/lib/utils/translation.js +6 -2
  210. package/lib/utils/variablesParams.d.ts +22 -5
  211. package/lib/utils/variablesParams.js +132 -36
  212. package/lib/views/DrawerComponent.js +21 -2
  213. package/lib/views/PageComponent.js +2 -1
  214. package/lib/views/ViewNavigation.d.ts +3 -9
  215. package/lib/views/ViewNavigation.js +16 -2
  216. package/lib/views/createViewMeta.d.ts +29 -1
  217. package/lib/views/createViewMeta.js +338 -72
  218. package/lib/views/index.d.ts +1 -0
  219. package/lib/views/index.js +3 -0
  220. package/lib/views/useDialog.d.ts +9 -8
  221. package/lib/views/useDialog.js +19 -14
  222. package/lib/views/useDrawer.d.ts +9 -8
  223. package/lib/views/useDrawer.js +54 -35
  224. package/lib/views/usePage.d.ts +9 -8
  225. package/lib/views/usePage.js +20 -14
  226. package/package.json +6 -3
  227. package/src/BlockScopedFlowEngine.ts +86 -0
  228. package/src/FlowContextProvider.tsx +4 -2
  229. package/src/JSRunner.ts +3 -0
  230. package/src/ViewScopedFlowEngine.ts +15 -1
  231. package/src/__tests__/JSRunner.test.ts +62 -53
  232. package/src/__tests__/blockScopedFlowEngine.test.ts +154 -0
  233. package/src/__tests__/createViewMeta.popup.test.ts +132 -0
  234. package/src/__tests__/flow-engine.test.ts +3 -0
  235. package/src/__tests__/flowContext.test.ts +52 -0
  236. package/src/__tests__/flowContextCreateJSRunner.test.ts +163 -0
  237. package/src/__tests__/flowEngine.saveModel.test.ts +4 -0
  238. package/src/__tests__/flowRunJSContextDefine.test.ts +508 -0
  239. package/src/__tests__/flowSettings.open.test.tsx +2 -0
  240. package/src/__tests__/flowSettings.test.ts +2 -0
  241. package/src/__tests__/globalFlowRegistry.test.ts +1 -1
  242. package/src/__tests__/modelOperationScheduler.test.ts +346 -0
  243. package/src/__tests__/objectVariable.test.ts +464 -0
  244. package/src/__tests__/runjsContext.test.ts +216 -35
  245. package/src/__tests__/runjsContextImplementations.test.ts +217 -0
  246. package/src/__tests__/runjsContextRuntime.test.ts +269 -0
  247. package/src/__tests__/runjsEdgeCases.test.ts +281 -0
  248. package/src/__tests__/runjsLocales.test.ts +36 -0
  249. package/src/__tests__/runjsRuntimeFeatures.test.ts +461 -0
  250. package/src/__tests__/runjsSnippets.test.ts +140 -0
  251. package/src/__tests__/viewScopedFlowEngine.test.ts +3 -3
  252. package/src/acl/Acl.tsx +14 -0
  253. package/src/acl/__tests__/Acl.test.tsx +43 -0
  254. package/src/components/DynamicFlowsEditor.tsx +3 -4
  255. package/src/components/FieldModelRenderer.tsx +20 -7
  256. package/src/components/FieldSkeleton.tsx +27 -0
  257. package/src/components/FlowContextSelector.tsx +6 -2
  258. package/src/components/FlowModelRenderer.tsx +33 -81
  259. package/src/components/FormItem.tsx +8 -1
  260. package/src/components/MobilePopup.style.ts +220 -0
  261. package/src/components/MobilePopup.tsx +86 -0
  262. package/src/components/__tests__/flow-model-render-error-fallback.test.tsx +6 -6
  263. package/src/components/index.ts +1 -0
  264. package/src/components/settings/independents/dropdown/FlowsDropdownButton.tsx +1 -1
  265. package/src/components/settings/wrappers/contextual/DefaultSettingsIcon.tsx +17 -4
  266. package/src/components/settings/wrappers/contextual/FlowsContextMenu.tsx +1 -1
  267. package/src/components/settings/wrappers/contextual/FlowsFloatContextMenu.tsx +39 -10
  268. package/src/components/settings/wrappers/contextual/StepSettingsDialog.tsx +14 -1
  269. package/src/components/settings/wrappers/contextual/__tests__/DefaultSettingsIcon.test.tsx +425 -0
  270. package/src/components/subModel/__tests__/AddSubModelButton.test.tsx +5 -7
  271. package/src/components/variables/VariableInput.tsx +25 -5
  272. package/src/components/variables/VariableTag.tsx +54 -2
  273. package/src/components/variables/types.ts +2 -0
  274. package/src/data-source/__tests__/sortCollectionsByInherits.test.ts +125 -0
  275. package/src/data-source/index.ts +42 -11
  276. package/src/data-source/sortCollectionsByInherits.ts +61 -0
  277. package/src/emitter.ts +14 -0
  278. package/src/executor/FlowExecutor.ts +213 -119
  279. package/src/executor/__tests__/ctx-defs-injection.test.ts +197 -0
  280. package/src/executor/__tests__/flowExecutor.test.ts +151 -5
  281. package/src/flow-registry/GlobalFlowRegistry.ts +1 -0
  282. package/src/flow-registry/InstanceFlowRegistry.ts +1 -0
  283. package/src/flow-registry/__tests__/globalFlowRegistry.test.ts +54 -0
  284. package/src/flowContext.ts +303 -104
  285. package/src/flowEngine.ts +96 -6
  286. package/src/flowSettings.ts +12 -4
  287. package/src/hooks/useApplyAutoFlows.ts +3 -1
  288. package/src/index.ts +12 -1
  289. package/src/locale/en-US.json +4 -2
  290. package/src/locale/zh-CN.json +4 -2
  291. package/src/models/CollectionFieldModel.tsx +60 -8
  292. package/src/models/__tests__/dispatchEvent.behavior.test.ts +169 -0
  293. package/src/models/__tests__/flowModel.getFlows.sort.test.ts +33 -9
  294. package/src/models/__tests__/flowModel.scheduleModelOperation.test.tsx +129 -0
  295. package/src/models/__tests__/flowModel.test.ts +234 -111
  296. package/src/models/__tests__/forkFlowModel.test.ts +40 -7
  297. package/src/models/flowModel.tsx +197 -132
  298. package/src/models/forkFlowModel.ts +48 -8
  299. package/src/provider.tsx +10 -7
  300. package/src/resources/multiRecordResource.ts +28 -1
  301. package/src/resources/singleRecordResource.ts +19 -1
  302. package/src/resources/sqlResource.ts +20 -25
  303. package/src/runjs-context/contexts/FormJSFieldItemRunJSContext.ts +28 -21
  304. package/src/runjs-context/contexts/JSBlockRunJSContext.ts +46 -34
  305. package/src/runjs-context/contexts/JSCollectionActionRunJSContext.ts +15 -16
  306. package/src/runjs-context/contexts/JSColumnRunJSContext.ts +58 -0
  307. package/src/runjs-context/contexts/JSFieldRunJSContext.ts +30 -25
  308. package/src/runjs-context/contexts/JSItemRunJSContext.ts +25 -21
  309. package/src/runjs-context/contexts/JSRecordActionRunJSContext.ts +17 -18
  310. package/src/runjs-context/contexts/base.ts +196 -0
  311. package/src/runjs-context/helpers.ts +32 -30
  312. package/src/runjs-context/registry.ts +16 -47
  313. package/src/runjs-context/setup.ts +51 -0
  314. package/src/runjs-context/snippets/global/api-request.snippet.ts +38 -0
  315. package/src/runjs-context/snippets/global/clipboard-copy-text.snippet.ts +42 -0
  316. package/src/runjs-context/snippets/global/import-esm.snippet.ts +39 -0
  317. package/src/runjs-context/snippets/global/message-error.snippet.ts +6 -0
  318. package/src/runjs-context/snippets/global/message-success.snippet.ts +6 -0
  319. package/src/runjs-context/snippets/global/notification-open.snippet.ts +11 -1
  320. package/src/runjs-context/snippets/global/open-view-dialog.snippet.ts +10 -3
  321. package/src/runjs-context/snippets/global/open-view-drawer.snippet.ts +10 -3
  322. package/src/runjs-context/snippets/global/query-selector.snippet.ts +34 -0
  323. package/src/runjs-context/snippets/global/require-amd.snippet.ts +30 -0
  324. package/src/runjs-context/snippets/global/window-open.snippet.ts +11 -1
  325. package/src/runjs-context/snippets/index.ts +178 -39
  326. package/src/runjs-context/snippets/scene/{jsblock → block}/add-event-listener.snippet.ts +14 -2
  327. package/src/runjs-context/snippets/scene/block/api-fetch-render-list.snippet.ts +45 -0
  328. package/src/runjs-context/snippets/scene/block/chartjs-bar.snippet.ts +80 -0
  329. package/src/runjs-context/snippets/scene/block/echarts-init.snippet.ts +44 -0
  330. package/src/runjs-context/snippets/scene/block/render-antd-icons.snippet.ts +46 -0
  331. package/src/runjs-context/snippets/scene/block/render-button-handler.snippet.ts +35 -0
  332. package/src/runjs-context/snippets/scene/block/render-iframe.snippet.ts +38 -0
  333. package/src/runjs-context/snippets/scene/block/render-info-card.snippet.ts +52 -0
  334. package/src/runjs-context/snippets/scene/block/render-react-jsx.snippet.ts +39 -0
  335. package/src/runjs-context/snippets/scene/block/render-react.snippet.ts +38 -0
  336. package/src/runjs-context/snippets/scene/block/render-statistics.snippet.ts +76 -0
  337. package/src/runjs-context/snippets/scene/block/render-timeline.snippet.ts +65 -0
  338. package/src/runjs-context/snippets/scene/block/resource-example.snippet.ts +46 -0
  339. package/src/runjs-context/snippets/scene/block/three-users-orbit.snippet.ts +264 -0
  340. package/src/runjs-context/snippets/scene/block/vue-component.snippet.ts +105 -0
  341. package/src/runjs-context/snippets/scene/detail/color-by-value.snippet.ts +33 -0
  342. package/src/runjs-context/snippets/scene/detail/copy-to-clipboard.snippet.ts +45 -0
  343. package/src/runjs-context/snippets/scene/detail/format-number.snippet.ts +32 -0
  344. package/src/runjs-context/snippets/scene/detail/innerHTML-value.snippet.ts +31 -0
  345. package/src/runjs-context/snippets/scene/detail/percentage-bar.snippet.ts +63 -0
  346. package/src/runjs-context/snippets/scene/detail/relative-time.snippet.ts +61 -0
  347. package/src/runjs-context/snippets/scene/detail/status-tag.snippet.ts +55 -0
  348. package/src/runjs-context/snippets/scene/form/calculate-total.snippet.ts +44 -0
  349. package/src/runjs-context/snippets/scene/form/cascade-select.snippet.ts +62 -0
  350. package/src/runjs-context/snippets/scene/form/conditional-required.snippet.ts +45 -0
  351. package/src/runjs-context/snippets/scene/form/copy-field-values.snippet.ts +55 -0
  352. package/src/runjs-context/snippets/scene/{jsitem → form}/render-basic.snippet.ts +14 -2
  353. package/src/runjs-context/snippets/scene/{linkage → form}/set-disabled.snippet.ts +15 -3
  354. package/src/runjs-context/snippets/scene/{linkage → form}/set-field-value.snippet.ts +15 -3
  355. package/src/runjs-context/snippets/scene/{linkage → form}/set-required.snippet.ts +15 -3
  356. package/src/runjs-context/snippets/scene/form/toggle-multiple-fields.snippet.ts +48 -0
  357. package/src/runjs-context/snippets/scene/{linkage → form}/toggle-visible.snippet.ts +15 -3
  358. package/src/runjs-context/snippets/scene/table/cell-open-dialog.snippet.ts +45 -0
  359. package/src/runjs-context/snippets/scene/{actions → table}/collection-selected-count.snippet.ts +14 -2
  360. package/src/runjs-context/snippets/scene/table/concat-fields.snippet.ts +60 -0
  361. package/src/runjs-context/snippets/scene/table/destroy-selected.snippet.ts +36 -0
  362. package/src/runjs-context/snippets/scene/table/export-selected-json.snippet.ts +45 -0
  363. package/src/runjs-context/snippets/scene/{actions → table}/iterate-selected-rows.snippet.ts +14 -2
  364. package/src/runjs-context/snippets/types.ts +5 -1
  365. package/src/scheduler/ModelOperationScheduler.ts +304 -0
  366. package/src/types.ts +34 -0
  367. package/src/utils/__tests__/flows.test.ts +65 -0
  368. package/src/utils/__tests__/jsxTransform.test.ts +38 -0
  369. package/src/utils/__tests__/parsePathnameToViewParams.test.ts +25 -0
  370. package/src/utils/__tests__/pruneFilter.test.ts +38 -0
  371. package/src/utils/__tests__/safeGlobals.test.ts +22 -1
  372. package/src/utils/__tests__/variablesParams.test.ts +63 -0
  373. package/src/utils/associationObjectVariable.ts +180 -0
  374. package/src/utils/buildSettingsViewInputArgs.ts +72 -0
  375. package/src/utils/createEphemeralContext.ts +142 -0
  376. package/src/utils/flows.ts +23 -0
  377. package/src/utils/index.ts +11 -2
  378. package/src/utils/jsxTransform.ts +39 -0
  379. package/src/utils/params-resolvers.ts +2 -2
  380. package/src/utils/parsePathnameToViewParams.ts +50 -6
  381. package/src/utils/pruneFilter.ts +41 -0
  382. package/src/utils/safeGlobals.ts +49 -3
  383. package/src/utils/schema-utils.ts +1 -1
  384. package/src/utils/serverContextParams.ts +1 -0
  385. package/src/utils/translation.ts +7 -2
  386. package/src/utils/variablesParams.ts +156 -38
  387. package/src/views/DrawerComponent.tsx +21 -2
  388. package/src/views/PageComponent.tsx +1 -1
  389. package/src/views/ViewNavigation.ts +20 -12
  390. package/src/views/__tests__/ViewNavigation.test.ts +10 -0
  391. package/src/views/createViewMeta.ts +393 -70
  392. package/src/views/index.tsx +1 -0
  393. package/src/views/useDialog.tsx +24 -18
  394. package/src/views/useDrawer.tsx +74 -45
  395. package/src/views/usePage.tsx +26 -17
  396. package/lib/runjs-context/contexts/FlowRunJSContext.d.ts +0 -38
  397. package/lib/runjs-context/contexts/FlowRunJSContext.js +0 -217
  398. package/lib/runjs-context/contexts/LinkageRunJSContext.js +0 -62
  399. package/lib/runjs-context/index.d.ts +0 -19
  400. package/lib/runjs-context/index.js +0 -57
  401. package/lib/runjs-context/snippets/global/api-request-get.snippet.d.ts +0 -16
  402. package/lib/runjs-context/snippets/global/api-request-get.snippet.js +0 -42
  403. package/lib/runjs-context/snippets/global/api-request-post.snippet.d.ts +0 -16
  404. package/lib/runjs-context/snippets/global/console-log-ctx.snippet.d.ts +0 -16
  405. package/lib/runjs-context/snippets/global/console-log-ctx.snippet.js +0 -41
  406. package/lib/runjs-context/snippets/global/requireAsync.snippet.d.ts +0 -16
  407. package/lib/runjs-context/snippets/global/sleep.snippet.d.ts +0 -16
  408. package/lib/runjs-context/snippets/global/sleep.snippet.js +0 -43
  409. package/lib/runjs-context/snippets/global/try-catch-async.snippet.d.ts +0 -16
  410. package/lib/runjs-context/snippets/libs/echarts-init.snippet.d.ts +0 -15
  411. package/lib/runjs-context/snippets/scene/actions/collection-selected-count.snippet.d.ts +0 -15
  412. package/lib/runjs-context/snippets/scene/actions/iterate-selected-rows.snippet.d.ts +0 -15
  413. package/lib/runjs-context/snippets/scene/actions/record-id-message.snippet.d.ts +0 -15
  414. package/lib/runjs-context/snippets/scene/actions/record-id-message.snippet.js +0 -43
  415. package/lib/runjs-context/snippets/scene/actions/run-action-basic.snippet.d.ts +0 -15
  416. package/lib/runjs-context/snippets/scene/actions/run-action-basic.snippet.js +0 -40
  417. package/lib/runjs-context/snippets/scene/jsblock/add-event-listener.snippet.d.ts +0 -15
  418. package/lib/runjs-context/snippets/scene/jsblock/append-style.snippet.d.ts +0 -15
  419. package/lib/runjs-context/snippets/scene/jsblock/append-style.snippet.js +0 -42
  420. package/lib/runjs-context/snippets/scene/jsblock/jsx-mount.snippet.d.ts +0 -15
  421. package/lib/runjs-context/snippets/scene/jsblock/jsx-mount.snippet.js +0 -46
  422. package/lib/runjs-context/snippets/scene/jsblock/jsx-unmount.snippet.d.ts +0 -15
  423. package/lib/runjs-context/snippets/scene/jsblock/jsx-unmount.snippet.js +0 -41
  424. package/lib/runjs-context/snippets/scene/jsblock/render-basic.snippet.d.ts +0 -15
  425. package/lib/runjs-context/snippets/scene/jsblock/render-basic.snippet.js +0 -41
  426. package/lib/runjs-context/snippets/scene/jsblock/render-button-handler.snippet.d.ts +0 -15
  427. package/lib/runjs-context/snippets/scene/jsblock/render-react.snippet.d.ts +0 -15
  428. package/lib/runjs-context/snippets/scene/jsfield/color-by-value.snippet.d.ts +0 -15
  429. package/lib/runjs-context/snippets/scene/jsfield/format-number.snippet.d.ts +0 -15
  430. package/lib/runjs-context/snippets/scene/jsfield/innerHTML-value.snippet.d.ts +0 -15
  431. package/lib/runjs-context/snippets/scene/jsitem/render-basic.snippet.d.ts +0 -15
  432. package/lib/runjs-context/snippets/scene/linkage/set-disabled.snippet.d.ts +0 -15
  433. package/lib/runjs-context/snippets/scene/linkage/set-field-value.snippet.d.ts +0 -15
  434. package/lib/runjs-context/snippets/scene/linkage/set-required.snippet.d.ts +0 -15
  435. package/lib/runjs-context/snippets/scene/linkage/toggle-visible.snippet.d.ts +0 -15
  436. package/src/runjs-context/contexts/FlowRunJSContext.ts +0 -190
  437. package/src/runjs-context/contexts/LinkageRunJSContext.ts +0 -35
  438. package/src/runjs-context/index.ts +0 -20
  439. package/src/runjs-context/snippets/global/api-request-get.snippet.ts +0 -20
  440. package/src/runjs-context/snippets/global/api-request-post.snippet.ts +0 -20
  441. package/src/runjs-context/snippets/global/console-log-ctx.snippet.ts +0 -19
  442. package/src/runjs-context/snippets/global/copy-record-json.snippet.ts +0 -21
  443. package/src/runjs-context/snippets/global/copy-to-clipboard.snippet.ts +0 -21
  444. package/src/runjs-context/snippets/global/log-json-record.snippet.ts +0 -21
  445. package/src/runjs-context/snippets/global/requireAsync.snippet.ts +0 -24
  446. package/src/runjs-context/snippets/global/sleep.snippet.ts +0 -21
  447. package/src/runjs-context/snippets/global/try-catch-async.snippet.ts +0 -22
  448. package/src/runjs-context/snippets/global/view-navigation-push.snippet.ts +0 -23
  449. package/src/runjs-context/snippets/libs/echarts-init.snippet.ts +0 -24
  450. package/src/runjs-context/snippets/scene/actions/record-id-message.snippet.ts +0 -21
  451. package/src/runjs-context/snippets/scene/actions/run-action-basic.snippet.ts +0 -18
  452. package/src/runjs-context/snippets/scene/jsblock/append-style.snippet.ts +0 -20
  453. package/src/runjs-context/snippets/scene/jsblock/jsx-mount.snippet.ts +0 -24
  454. package/src/runjs-context/snippets/scene/jsblock/jsx-unmount.snippet.ts +0 -19
  455. package/src/runjs-context/snippets/scene/jsblock/render-basic.snippet.ts +0 -24
  456. package/src/runjs-context/snippets/scene/jsblock/render-button-handler.snippet.ts +0 -24
  457. package/src/runjs-context/snippets/scene/jsblock/render-card.snippet.ts +0 -30
  458. package/src/runjs-context/snippets/scene/jsblock/render-react.snippet.ts +0 -34
  459. package/src/runjs-context/snippets/scene/jsfield/color-by-value.snippet.ts +0 -20
  460. package/src/runjs-context/snippets/scene/jsfield/format-number.snippet.ts +0 -19
  461. package/src/runjs-context/snippets/scene/jsfield/innerHTML-value.snippet.ts +0 -18
  462. /package/lib/runjs-context/snippets/global/{copy-record-json.snippet.d.ts → api-request.snippet.d.ts} +0 -0
  463. /package/lib/runjs-context/snippets/global/{copy-to-clipboard.snippet.d.ts → clipboard-copy-text.snippet.d.ts} +0 -0
  464. /package/lib/runjs-context/snippets/global/{log-json-record.snippet.d.ts → import-esm.snippet.d.ts} +0 -0
  465. /package/lib/runjs-context/snippets/global/{view-navigation-push.snippet.d.ts → query-selector.snippet.d.ts} +0 -0
  466. /package/lib/runjs-context/snippets/scene/{jsblock/render-card.snippet.d.ts → block/echarts-init.snippet.d.ts} +0 -0
@@ -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)();
@@ -90,11 +92,11 @@ const FlowEngineGlobalsContextProvider = /* @__PURE__ */ __name(({ children }) =
90
92
  }
91
93
  engine.reactView.refresh();
92
94
  }, [engine, drawer, modal, message, notification, config, popover, token, dialog, embed]);
93
- return /* @__PURE__ */ import_react.default.createElement(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) {
99
+ if (!context && throwError) {
98
100
  throw new Error(
99
101
  "useFlowEngine must be used within a FlowEngineProvider, and FlowEngineProvider must be supplied with an engine."
100
102
  );
@@ -130,6 +130,7 @@ const _MultiRecordResource = class _MultiRecordResource extends import_baseRecor
130
130
  async create(data, options) {
131
131
  const config = this.mergeRequestConfig({ data }, this.createActionOptions, options);
132
132
  await this.runAction("create", config);
133
+ this.emit("saved", data);
133
134
  await this.refresh();
134
135
  }
135
136
  async get(filterByTk) {
@@ -144,17 +145,35 @@ const _MultiRecordResource = class _MultiRecordResource extends import_baseRecor
144
145
  return data;
145
146
  }
146
147
  async update(filterByTk, data, options) {
148
+ const collection = this.context.collection;
149
+ const filterTargetKey = collection == null ? void 0 : collection.filterTargetKey;
150
+ const tkData = collection == null ? void 0 : collection.getFilterByTK(this.context.record);
151
+ let result = data;
152
+ if (collection && filterTargetKey) {
153
+ if (Array.isArray(filterTargetKey)) {
154
+ result = {
155
+ ...data,
156
+ ...tkData || {}
157
+ };
158
+ } else {
159
+ result = {
160
+ ...data,
161
+ [filterTargetKey]: tkData
162
+ };
163
+ }
164
+ }
147
165
  const config = this.mergeRequestConfig(
148
166
  {
149
167
  params: {
150
168
  filterByTk
151
169
  },
152
- data
170
+ data: result
153
171
  },
154
172
  this.updateActionOptions,
155
173
  options
156
174
  );
157
175
  await this.runAction("update", config);
176
+ this.emit("saved", data);
158
177
  await this.refresh();
159
178
  }
160
179
  async destroySelectedRows() {
@@ -176,6 +195,11 @@ const _MultiRecordResource = class _MultiRecordResource extends import_baseRecor
176
195
  options
177
196
  );
178
197
  await this.runAction("destroy", config);
198
+ const currentPage = this.getPage();
199
+ const lastPage = Math.ceil((this.getCount() - import_lodash.default.castArray(filterByTk).length) / this.getPageSize());
200
+ if (currentPage > lastPage) {
201
+ this.setPage(lastPage);
202
+ }
179
203
  await this.refresh();
180
204
  }
181
205
  setItem(index, newDataItem) {
@@ -60,15 +60,33 @@ 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
+ let result = data;
63
64
  if (!this.isNewRecord) {
64
65
  config.params = config.params || {};
65
66
  config.params.filterByTk = this.getFilterByTk();
66
67
  actionName = "update";
68
+ const collection = this.context.collection;
69
+ const filterTargetKey = collection == null ? void 0 : collection.filterTargetKey;
70
+ const tkData = collection == null ? void 0 : collection.getFilterByTK(this.context.record);
71
+ if (collection && filterTargetKey) {
72
+ if (Array.isArray(filterTargetKey)) {
73
+ result = {
74
+ ...data,
75
+ ...tkData || {}
76
+ };
77
+ } else {
78
+ result = {
79
+ ...data,
80
+ [filterTargetKey]: tkData
81
+ };
82
+ }
83
+ }
67
84
  }
68
85
  await this.runAction(actionName, {
69
86
  ...config,
70
- data
87
+ data: result
71
88
  });
89
+ this.emit("saved", data);
72
90
  if ((options == null ? void 0 : options.refresh) !== false) {
73
91
  await this.refresh();
74
92
  }
@@ -61,6 +61,7 @@ export declare class SQLResource<TData = any> extends BaseRecordResource<TData>
61
61
  setFilterByTk(filterByTk: any): this;
62
62
  setFilter(filter: Record<string, any>): this;
63
63
  setBind(bind: Record<string, any> | Array<any>): this;
64
+ setLiquidContext(liquidContext: Record<string, any>): this;
64
65
  run(): Promise<any>;
65
66
  runBySQL(): Promise<any>;
66
67
  runById(): Promise<any>;
@@ -45,18 +45,7 @@ var import_reactive = require("@formily/reactive");
45
45
  var import_lodash = __toESM(require("lodash"));
46
46
  var import_flowContext = require("../flowContext");
47
47
  var import_baseRecordResource = require("./baseRecordResource");
48
- function transformSQL(template) {
49
- let index = 1;
50
- const bind = {};
51
- const sql = template.replace(/{{\s*([^}]+)\s*}}/g, (_2, expr) => {
52
- const key = `__var${index}`;
53
- bind[key] = `{{${expr.trim()}}}`;
54
- index++;
55
- return `$${key}`;
56
- });
57
- return { sql, bind };
58
- }
59
- __name(transformSQL, "transformSQL");
48
+ var import_client = require("@nocobase/utils/client");
60
49
  const _FlowSQLRepository = class _FlowSQLRepository {
61
50
  ctx;
62
51
  constructor(ctx) {
@@ -72,16 +61,17 @@ const _FlowSQLRepository = class _FlowSQLRepository {
72
61
  });
73
62
  }
74
63
  async run(sql, options = {}) {
75
- const result = transformSQL(sql);
76
- const bind = await this.ctx.resolveJsonTemplate(result.bind);
64
+ const { sql: transformedSQL, bind, liquidContext } = await (0, import_client.transformSQL)(sql);
65
+ const resolved = await this.ctx.resolveJsonTemplate({ bind, liquidContext });
66
+ const parsedSQL = await (0, import_client.parseLiquidContext)(transformedSQL, resolved.liquidContext);
77
67
  const { data } = await this.ctx.api.request({
78
68
  method: "POST",
79
69
  url: "flowSql:run",
80
70
  data: {
81
- sql: result.sql,
71
+ sql: parsedSQL,
82
72
  ...options,
83
73
  bind: {
84
- ...bind,
74
+ ...resolved.bind,
85
75
  ...options.bind
86
76
  }
87
77
  }
@@ -105,7 +95,7 @@ const _FlowSQLRepository = class _FlowSQLRepository {
105
95
  uid
106
96
  }
107
97
  });
108
- const bind = await this.ctx.resolveJsonTemplate(response.data.data || {});
98
+ const { bind, liquidContext } = await this.ctx.resolveJsonTemplate(response.data.data || {});
109
99
  const { data } = await this.ctx.api.request({
110
100
  method: "POST",
111
101
  url: "flowSql:runById",
@@ -114,8 +104,9 @@ const _FlowSQLRepository = class _FlowSQLRepository {
114
104
  ...options,
115
105
  bind: {
116
106
  ...bind,
117
- ...options.bind
118
- }
107
+ ...options == null ? void 0 : options.bind
108
+ },
109
+ liquidContext
119
110
  }
120
111
  });
121
112
  return data == null ? void 0 : data.data;
@@ -227,19 +218,23 @@ const _SQLResource = class _SQLResource extends import_baseRecordResource.BaseRe
227
218
  this.request.data.bind = bind;
228
219
  return this;
229
220
  }
221
+ setLiquidContext(liquidContext) {
222
+ this.request.data.liquidContext = liquidContext;
223
+ return this;
224
+ }
230
225
  async run() {
231
226
  return this._debugEnabled ? await this.runBySQL() : await this.runById();
232
227
  }
233
228
  async runBySQL() {
234
229
  const sql = this._sql;
235
- const result = transformSQL(sql);
236
- const bind = await this.context.resolveJsonTemplate(result.bind);
230
+ const { sql: transformedSQL, bind, liquidContext } = await (0, import_client.transformSQL)(sql);
231
+ const resolved = await this.context.resolveJsonTemplate({ bind, liquidContext });
237
232
  const options = import_lodash.default.cloneDeep({
238
233
  method: "post",
239
234
  ...this.getRefreshRequestOptions()
240
235
  });
241
- options.data.bind = bind;
242
- options.data.sql = result.sql;
236
+ options.data.sql = await (0, import_client.parseLiquidContext)(transformedSQL, resolved.liquidContext);
237
+ options.data.bind = resolved.bind;
243
238
  return await this.runAction("run", options);
244
239
  }
245
240
  async runById() {
@@ -249,8 +244,9 @@ const _SQLResource = class _SQLResource extends import_baseRecordResource.BaseRe
249
244
  uid: this.request.data.uid
250
245
  }
251
246
  });
252
- const bind = await this.context.resolveJsonTemplate(data);
247
+ const { bind, liquidContext } = await this.context.resolveJsonTemplate(data);
253
248
  this.setBind(bind);
249
+ this.setLiquidContext(liquidContext);
254
250
  return await this.runAction("runById", {
255
251
  method: "post",
256
252
  ...this.getRefreshRequestOptions()
@@ -6,11 +6,6 @@
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 { FlowRunJSContext } from './FlowRunJSContext';
9
+ import { FlowRunJSContext } from '../../flowContext';
10
10
  export declare class FormJSFieldItemRunJSContext extends FlowRunJSContext {
11
- static injectDefaultGlobals(): {
12
- window: {};
13
- document: {};
14
- };
15
- constructor(delegate: any);
16
11
  }
@@ -30,36 +30,43 @@ __export(FormJSFieldItemRunJSContext_exports, {
30
30
  FormJSFieldItemRunJSContext: () => FormJSFieldItemRunJSContext
31
31
  });
32
32
  module.exports = __toCommonJS(FormJSFieldItemRunJSContext_exports);
33
- var import_FlowRunJSContext = require("./FlowRunJSContext");
34
- var import_utils = require("../../utils");
35
- const _FormJSFieldItemRunJSContext = class _FormJSFieldItemRunJSContext extends import_FlowRunJSContext.FlowRunJSContext {
36
- static injectDefaultGlobals() {
37
- return { window: (0, import_utils.createSafeWindow)(), document: (0, import_utils.createSafeDocument)() };
38
- }
39
- constructor(delegate) {
40
- super(delegate);
41
- this.defineProperty("element", { get: /* @__PURE__ */ __name(() => this._delegate["element"], "get") });
42
- this.defineProperty("record", { get: /* @__PURE__ */ __name(() => this._delegate["record"], "get") });
43
- this.defineProperty("value", { get: /* @__PURE__ */ __name(() => this._delegate["value"], "get") });
44
- }
33
+ var import_flowContext = require("../../flowContext");
34
+ const _FormJSFieldItemRunJSContext = class _FormJSFieldItemRunJSContext extends import_flowContext.FlowRunJSContext {
45
35
  };
46
36
  __name(_FormJSFieldItemRunJSContext, "FormJSFieldItemRunJSContext");
47
37
  let FormJSFieldItemRunJSContext = _FormJSFieldItemRunJSContext;
48
38
  FormJSFieldItemRunJSContext.define({
49
39
  label: "FormJSFieldItem RunJS context",
50
40
  properties: {
51
- element: "ElementProxy\uFF0C\u8868\u5355\u5B57\u6BB5\u5BB9\u5668",
52
- value: "\u5B57\u6BB5\u503C\uFF08\u8BFB/\u53D7\u63A7\u573A\u666F\u9700\u901A\u8FC7 setProps \u4FEE\u6539\uFF09",
53
- record: "\u5F53\u524D\u8BB0\u5F55\uFF08\u53EA\u8BFB\uFF09"
41
+ element: `ElementProxy instance providing a safe DOM container for form field rendering.
42
+ Supports innerHTML, append, and other DOM manipulation methods.`,
43
+ value: `Current field value (read-only in display mode; in controlled scenarios, use setProps to modify).`,
44
+ record: `Current record data object (read-only).
45
+ Contains all field values of the parent record.`
54
46
  },
55
47
  methods: {
56
- onRefReady: "\u5BB9\u5668\u5C31\u7EEA\u56DE\u8C03",
57
- setProps: "\u8BBE\u7F6E\u8868\u5355\u9879\u5C5E\u6027\uFF1A`setProps(fieldModel, { value })`\uFF08\u7531\u8054\u52A8/\u8868\u5355\u4E0A\u4E0B\u6587\u63D0\u4F9B\uFF09"
58
- },
59
- snipastes: {
60
- \u663E\u793A\u5B57\u6BB5\u503C: { $ref: "scene/jsfield/innerHTML-value", prefix: "sn-form-value" }
48
+ onRefReady: `Wait for form field container DOM element to be ready before executing callback.
49
+ Parameters: (ref: React.RefObject, callback: (element: HTMLElement) => void, timeout?: number) => void`,
50
+ setProps: `Set form field properties programmatically.
51
+ Parameters: (fieldModel: any, props: { value?: any, disabled?: boolean, visible?: boolean }) => void
52
+ Example: ctx.setProps(fieldModel, { value: "new value" })`
61
53
  }
62
54
  });
55
+ FormJSFieldItemRunJSContext.define(
56
+ {
57
+ label: "\u8868\u5355 JS \u5B57\u6BB5\u9879 RunJS \u4E0A\u4E0B\u6587",
58
+ properties: {
59
+ element: "ElementProxy\uFF0C\u8868\u5355\u5B57\u6BB5\u5BB9\u5668",
60
+ value: "\u5B57\u6BB5\u503C\uFF08\u5C55\u793A\u6A21\u5F0F\u4E3A\u53EA\u8BFB\uFF1B\u53D7\u63A7\u573A\u666F\u7528 setProps \u4FEE\u6539\uFF09",
61
+ record: "\u5F53\u524D\u8BB0\u5F55\uFF08\u53EA\u8BFB\uFF09"
62
+ },
63
+ methods: {
64
+ onRefReady: "\u5BB9\u5668\u5C31\u7EEA\u56DE\u8C03",
65
+ setProps: "\u8BBE\u7F6E\u8868\u5355\u9879\u5C5E\u6027\uFF1A`setProps(fieldModel, { value })`\uFF08\u7531\u8054\u52A8/\u8868\u5355\u4E0A\u4E0B\u6587\u63D0\u4F9B\uFF09"
66
+ }
67
+ },
68
+ { locale: "zh-CN" }
69
+ );
63
70
  // Annotate the CommonJS export names for ESM import in node:
64
71
  0 && (module.exports = {
65
72
  FormJSFieldItemRunJSContext
@@ -6,11 +6,6 @@
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 { FlowRunJSContext } from './FlowRunJSContext';
9
+ import { FlowRunJSContext } from '../../flowContext';
10
10
  export declare class JSBlockRunJSContext extends FlowRunJSContext {
11
- static injectDefaultGlobals(): {
12
- window: {};
13
- document: {};
14
- };
15
- constructor(delegate: any);
16
11
  }
@@ -30,48 +30,61 @@ __export(JSBlockRunJSContext_exports, {
30
30
  JSBlockRunJSContext: () => JSBlockRunJSContext
31
31
  });
32
32
  module.exports = __toCommonJS(JSBlockRunJSContext_exports);
33
- var import_FlowRunJSContext = require("./FlowRunJSContext");
34
- var import_utils = require("../../utils");
35
- const _JSBlockRunJSContext = class _JSBlockRunJSContext extends import_FlowRunJSContext.FlowRunJSContext {
36
- static injectDefaultGlobals() {
37
- return { window: (0, import_utils.createSafeWindow)(), document: (0, import_utils.createSafeDocument)() };
38
- }
39
- constructor(delegate) {
40
- super(delegate);
41
- this.defineProperty("element", { get: /* @__PURE__ */ __name(() => this._delegate["element"], "get") });
42
- this.defineProperty("record", { get: /* @__PURE__ */ __name(() => this._delegate["record"], "get") });
43
- this.defineProperty("value", { get: /* @__PURE__ */ __name(() => this._delegate["value"], "get") });
44
- }
33
+ var import_flowContext = require("../../flowContext");
34
+ const _JSBlockRunJSContext = class _JSBlockRunJSContext extends import_flowContext.FlowRunJSContext {
45
35
  };
46
36
  __name(_JSBlockRunJSContext, "JSBlockRunJSContext");
47
37
  let JSBlockRunJSContext = _JSBlockRunJSContext;
48
38
  JSBlockRunJSContext.define({
49
- label: "JSBlock RunJS context",
39
+ label: "RunJS context",
50
40
  properties: {
51
- element: "ElementProxy\uFF0C\u5B89\u5168 DOM \u5BB9\u5668\u3002\u652F\u6301 innerHTML/append \u7B49",
52
- record: "\u5F53\u524D\u8BB0\u5F55\uFF08\u53EA\u8BFB\uFF0C\u5B58\u5728\u4E8E\u6570\u636E\u5757/\u8BE6\u60C5\u7B49\u573A\u666F\uFF09",
53
- value: "\u5F53\u524D\u503C\uFF08\u82E5\u5B58\u5728\uFF09",
54
- React: "React\uFF08\u5DF2\u6CE8\u5165\uFF09",
55
- antd: "AntD\uFF08\u5DF2\u6CE8\u5165\uFF09"
41
+ element: {
42
+ description: `ElementProxy instance providing a safe DOM container.
43
+ Supports innerHTML, append, and other DOM manipulation methods.
44
+ Use this to render content in the JS block.`,
45
+ detail: "ElementProxy",
46
+ properties: {
47
+ innerHTML: "Set or read the HTML content of the container element."
48
+ }
49
+ },
50
+ record: `Current record data object (read-only).
51
+ Available when the JS block is within a data block or detail view context.`,
52
+ value: "Current value of the field or component, if available in the current context.",
53
+ React: "React library",
54
+ antd: "Ant Design library"
56
55
  },
57
56
  methods: {
58
- onRefReady: "Container ref ready callback:\n```js\nctx.onRefReady(ctx.ref, el => { /* ... */ })\n```",
59
- requireAsync: "Load external library: `const lib = await ctx.requireAsync(url)`"
60
- },
61
- snipastes: {
62
- "Render HTML": { $ref: "scene/jsblock/render-basic", prefix: "sn-jsb-html" },
63
- "Render React": { $ref: "scene/jsblock/render-react", prefix: "sn-jsb-react" },
64
- "Init ECharts": { $ref: "libs/echarts-init", prefix: "sn-echarts" },
65
- "Render card": { $ref: "scene/jsblock/render-card", prefix: "sn-jsb-card" },
66
- "Button handler": { $ref: "scene/jsblock/render-button-handler", prefix: "sn-jsb-button" },
67
- "JSX mount": { $ref: "scene/jsblock/jsx-mount", prefix: "sn-jsx-mount" },
68
- "JSX unmount": { $ref: "scene/jsblock/jsx-unmount", prefix: "sn-jsx-unmount" },
69
- Notification: { $ref: "global/notification-open", prefix: "sn-notify" },
70
- "Window open": { $ref: "global/window-open", prefix: "sn-window-open" },
71
- "Add click listener": { $ref: "scene/jsblock/add-event-listener", prefix: "sn-jsb-click" },
72
- "Append style": { $ref: "scene/jsblock/append-style", prefix: "sn-jsb-style" }
57
+ onRefReady: `Wait for container DOM element to be ready before executing callback.
58
+ Parameters: (ref: React.RefObject, callback: (element: HTMLElement) => void, timeout?: number) => void
59
+ Example: ctx.onRefReady(ctx.ref, (el) => { el.innerHTML = "Ready!" })`,
60
+ requireAsync: "Load external library: `const lib = await ctx.requireAsync(url)`",
61
+ importAsync: "Dynamically import ESM module: `const mod = await ctx.importAsync(url)`"
73
62
  }
74
63
  });
64
+ JSBlockRunJSContext.define(
65
+ {
66
+ label: "RunJS \u4E0A\u4E0B\u6587",
67
+ properties: {
68
+ element: {
69
+ description: "ElementProxy\uFF0C\u5B89\u5168\u7684 DOM \u5BB9\u5668\uFF0C\u652F\u6301 innerHTML/append \u7B49",
70
+ detail: "ElementProxy",
71
+ properties: {
72
+ innerHTML: "\u8BFB\u53D6\u6216\u8BBE\u7F6E\u5BB9\u5668\u7684 HTML \u5185\u5BB9"
73
+ }
74
+ },
75
+ record: "\u5F53\u524D\u8BB0\u5F55\uFF08\u53EA\u8BFB\uFF0C\u7528\u4E8E\u6570\u636E\u533A\u5757/\u8BE6\u60C5\u7B49\u573A\u666F\uFF09",
76
+ value: "\u5F53\u524D\u503C\uFF08\u82E5\u5B58\u5728\uFF09",
77
+ React: "React \u5E93",
78
+ antd: "Ant Design \u5E93"
79
+ },
80
+ methods: {
81
+ onRefReady: "\u5BB9\u5668 ref \u5C31\u7EEA\u56DE\u8C03\uFF1A\n```js\nctx.onRefReady(ctx.ref, el => { /* ... */ })\n```",
82
+ requireAsync: "\u52A0\u8F7D\u5916\u90E8\u5E93\uFF1A`const lib = await ctx.requireAsync(url)`",
83
+ importAsync: "\u6309 URL \u52A8\u6001\u5BFC\u5165 ESM \u6A21\u5757\uFF1A`const mod = await ctx.importAsync(url)`"
84
+ }
85
+ },
86
+ { locale: "zh-CN" }
87
+ );
75
88
  // Annotate the CommonJS export names for ESM import in node:
76
89
  0 && (module.exports = {
77
90
  JSBlockRunJSContext
@@ -6,7 +6,6 @@
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 { FlowRunJSContext } from './FlowRunJSContext';
9
+ import { FlowRunJSContext } from '../../flowContext';
10
10
  export declare class JSCollectionActionRunJSContext extends FlowRunJSContext {
11
- constructor(delegate: any);
12
11
  }
@@ -30,29 +30,28 @@ __export(JSCollectionActionRunJSContext_exports, {
30
30
  JSCollectionActionRunJSContext: () => JSCollectionActionRunJSContext
31
31
  });
32
32
  module.exports = __toCommonJS(JSCollectionActionRunJSContext_exports);
33
- var import_FlowRunJSContext = require("./FlowRunJSContext");
34
- const _JSCollectionActionRunJSContext = class _JSCollectionActionRunJSContext extends import_FlowRunJSContext.FlowRunJSContext {
35
- constructor(delegate) {
36
- super(delegate);
37
- this.defineProperty("resource", { get: /* @__PURE__ */ __name(() => this._delegate["resource"], "get") });
38
- }
33
+ var import_flowContext = require("../../flowContext");
34
+ const _JSCollectionActionRunJSContext = class _JSCollectionActionRunJSContext extends import_flowContext.FlowRunJSContext {
39
35
  };
40
36
  __name(_JSCollectionActionRunJSContext, "JSCollectionActionRunJSContext");
41
37
  let JSCollectionActionRunJSContext = _JSCollectionActionRunJSContext;
42
38
  JSCollectionActionRunJSContext.define({
43
39
  label: "JSCollectionAction RunJS context",
44
40
  properties: {
45
- resource: "\u5217\u8868\u8D44\u6E90\uFF08\u9009\u4E2D\u884C/\u5206\u9875\u7B49\uFF09"
46
- },
47
- methods: {
48
- runAction: "Run action",
49
- message: "Message API"
50
- },
51
- snipastes: {
52
- "Selected count": { $ref: "scene/actions/collection-selected-count", prefix: "sn-act-selected-count" },
53
- "Iterate selected rows": { $ref: "scene/actions/iterate-selected-rows", prefix: "sn-act-iterate" }
41
+ resource: `Collection resource instance providing access to selected rows, pagination, and data operations.
42
+ Use ctx.resource.selectedRows to get selected records.
43
+ Use ctx.resource.pagination for page info.`
54
44
  }
55
45
  });
46
+ JSCollectionActionRunJSContext.define(
47
+ {
48
+ label: "JS \u96C6\u5408\u52A8\u4F5C RunJS \u4E0A\u4E0B\u6587",
49
+ properties: {
50
+ resource: "\u5217\u8868\u8D44\u6E90\uFF08\u5305\u542B\u9009\u4E2D\u884C/\u5206\u9875\u4FE1\u606F\u7B49\uFF09"
51
+ }
52
+ },
53
+ { locale: "zh-CN" }
54
+ );
56
55
  // Annotate the CommonJS export names for ESM import in node:
57
56
  0 && (module.exports = {
58
57
  JSCollectionActionRunJSContext
@@ -6,7 +6,10 @@
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 { FlowRunJSContext } from './FlowRunJSContext';
10
- export declare class LinkageRunJSContext extends FlowRunJSContext {
11
- constructor(delegate: any);
9
+ import { FlowRunJSContext } from '../../flowContext';
10
+ /**
11
+ * RunJS context for JSColumnModel (table custom column).
12
+ * Focused on per-row rendering with access to current record and cell element.
13
+ */
14
+ export declare class JSColumnRunJSContext extends FlowRunJSContext {
12
15
  }