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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (462) 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 +215 -87
  47. package/lib/flowEngine.d.ts +24 -1
  48. package/lib/flowEngine.js +56 -6
  49. package/lib/flowSettings.d.ts +2 -1
  50. package/lib/flowSettings.js +12 -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 +48 -5
  59. package/lib/models/flowModel.d.ts +30 -29
  60. package/lib/models/flowModel.js +135 -98
  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 +183 -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 +161 -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-button-handler.snippet.d.ts +11 -0
  115. package/lib/runjs-context/snippets/scene/{jsblock → block}/render-button-handler.snippet.js +17 -9
  116. package/lib/runjs-context/snippets/scene/block/render-iframe.snippet.d.ts +11 -0
  117. package/lib/runjs-context/snippets/scene/block/render-iframe.snippet.js +57 -0
  118. package/lib/runjs-context/snippets/scene/block/render-info-card.snippet.d.ts +11 -0
  119. package/lib/runjs-context/snippets/scene/block/render-info-card.snippet.js +71 -0
  120. package/lib/runjs-context/snippets/scene/block/render-react-jsx.snippet.d.ts +11 -0
  121. package/lib/runjs-context/snippets/scene/{jsblock/render-card.snippet.js → block/render-react-jsx.snippet.js} +26 -13
  122. package/lib/runjs-context/snippets/scene/block/render-react.snippet.d.ts +11 -0
  123. package/lib/runjs-context/snippets/scene/{jsblock → block}/render-react.snippet.js +18 -17
  124. package/lib/runjs-context/snippets/scene/block/render-statistics.snippet.d.ts +11 -0
  125. package/lib/runjs-context/snippets/scene/block/render-statistics.snippet.js +95 -0
  126. package/lib/runjs-context/snippets/scene/block/render-timeline.snippet.d.ts +11 -0
  127. package/lib/runjs-context/snippets/scene/block/render-timeline.snippet.js +84 -0
  128. package/lib/runjs-context/snippets/scene/block/resource-example.snippet.d.ts +11 -0
  129. package/lib/runjs-context/snippets/scene/block/resource-example.snippet.js +60 -0
  130. package/lib/runjs-context/snippets/scene/block/three-users-orbit.snippet.d.ts +11 -0
  131. package/lib/runjs-context/snippets/scene/block/three-users-orbit.snippet.js +283 -0
  132. package/lib/runjs-context/snippets/scene/block/vue-component.snippet.d.ts +11 -0
  133. package/lib/runjs-context/snippets/scene/block/vue-component.snippet.js +124 -0
  134. package/lib/runjs-context/snippets/scene/detail/color-by-value.snippet.d.ts +11 -0
  135. package/lib/runjs-context/snippets/scene/{jsfield → detail}/color-by-value.snippet.js +13 -3
  136. package/lib/runjs-context/snippets/scene/detail/copy-to-clipboard.snippet.d.ts +11 -0
  137. package/lib/runjs-context/snippets/{global → scene/detail}/copy-to-clipboard.snippet.js +28 -6
  138. package/lib/runjs-context/snippets/scene/detail/format-number.snippet.d.ts +11 -0
  139. package/lib/runjs-context/snippets/scene/{jsfield → detail}/format-number.snippet.js +13 -3
  140. package/lib/runjs-context/snippets/scene/detail/innerHTML-value.snippet.d.ts +11 -0
  141. package/lib/runjs-context/snippets/scene/{jsfield → detail}/innerHTML-value.snippet.js +13 -3
  142. package/lib/runjs-context/snippets/scene/detail/percentage-bar.snippet.d.ts +11 -0
  143. package/lib/runjs-context/snippets/scene/detail/percentage-bar.snippet.js +82 -0
  144. package/lib/runjs-context/snippets/scene/detail/relative-time.snippet.d.ts +11 -0
  145. package/lib/runjs-context/snippets/scene/detail/relative-time.snippet.js +80 -0
  146. package/lib/runjs-context/snippets/scene/detail/status-tag.snippet.d.ts +11 -0
  147. package/lib/runjs-context/snippets/scene/detail/status-tag.snippet.js +74 -0
  148. package/lib/runjs-context/snippets/scene/form/calculate-total.snippet.d.ts +11 -0
  149. package/lib/runjs-context/snippets/scene/form/calculate-total.snippet.js +63 -0
  150. package/lib/runjs-context/snippets/scene/form/cascade-select.snippet.d.ts +11 -0
  151. package/lib/runjs-context/snippets/scene/form/cascade-select.snippet.js +81 -0
  152. package/lib/runjs-context/snippets/scene/form/conditional-required.snippet.d.ts +11 -0
  153. package/lib/runjs-context/snippets/scene/form/conditional-required.snippet.js +64 -0
  154. package/lib/runjs-context/snippets/scene/form/copy-field-values.snippet.d.ts +11 -0
  155. package/lib/runjs-context/snippets/scene/form/copy-field-values.snippet.js +74 -0
  156. package/lib/runjs-context/snippets/scene/form/render-basic.snippet.d.ts +11 -0
  157. package/lib/runjs-context/snippets/scene/{jsitem → form}/render-basic.snippet.js +11 -2
  158. package/lib/runjs-context/snippets/scene/form/set-disabled.snippet.d.ts +11 -0
  159. package/lib/runjs-context/snippets/scene/{linkage → form}/set-disabled.snippet.js +12 -3
  160. package/lib/runjs-context/snippets/scene/form/set-field-value.snippet.d.ts +11 -0
  161. package/lib/runjs-context/snippets/scene/{linkage → form}/set-field-value.snippet.js +12 -3
  162. package/lib/runjs-context/snippets/scene/form/set-required.snippet.d.ts +11 -0
  163. package/lib/runjs-context/snippets/scene/{linkage → form}/set-required.snippet.js +12 -3
  164. package/lib/runjs-context/snippets/scene/form/toggle-multiple-fields.snippet.d.ts +11 -0
  165. package/lib/runjs-context/snippets/scene/form/toggle-multiple-fields.snippet.js +67 -0
  166. package/lib/runjs-context/snippets/scene/form/toggle-visible.snippet.d.ts +11 -0
  167. package/lib/runjs-context/snippets/scene/{linkage → form}/toggle-visible.snippet.js +12 -3
  168. package/lib/runjs-context/snippets/scene/table/cell-open-dialog.snippet.d.ts +11 -0
  169. package/lib/runjs-context/snippets/scene/table/cell-open-dialog.snippet.js +64 -0
  170. package/lib/runjs-context/snippets/scene/table/collection-selected-count.snippet.d.ts +11 -0
  171. package/lib/runjs-context/snippets/scene/{actions → table}/collection-selected-count.snippet.js +11 -2
  172. package/lib/runjs-context/snippets/scene/table/concat-fields.snippet.d.ts +11 -0
  173. package/lib/runjs-context/snippets/scene/table/concat-fields.snippet.js +79 -0
  174. package/lib/runjs-context/snippets/scene/table/destroy-selected.snippet.d.ts +11 -0
  175. package/lib/runjs-context/snippets/{global/log-json-record.snippet.js → scene/table/destroy-selected.snippet.js} +24 -11
  176. package/lib/runjs-context/snippets/scene/table/export-selected-json.snippet.d.ts +11 -0
  177. package/lib/runjs-context/snippets/scene/table/export-selected-json.snippet.js +64 -0
  178. package/lib/runjs-context/snippets/scene/table/iterate-selected-rows.snippet.d.ts +11 -0
  179. package/lib/runjs-context/snippets/scene/{actions → table}/iterate-selected-rows.snippet.js +11 -2
  180. package/lib/runjs-context/snippets/types.d.ts +9 -1
  181. package/lib/scheduler/ModelOperationScheduler.d.ts +51 -0
  182. package/lib/scheduler/ModelOperationScheduler.js +262 -0
  183. package/lib/types.d.ts +28 -3
  184. package/lib/types.js +4 -3
  185. package/lib/utils/associationObjectVariable.d.ts +32 -0
  186. package/lib/utils/associationObjectVariable.js +157 -0
  187. package/lib/utils/buildSettingsViewInputArgs.d.ts +19 -0
  188. package/lib/utils/buildSettingsViewInputArgs.js +75 -0
  189. package/lib/utils/createEphemeralContext.d.ts +13 -0
  190. package/lib/utils/createEphemeralContext.js +140 -0
  191. package/lib/utils/flows.d.ts +10 -0
  192. package/lib/{runjs-context/snippets/global/api-request-post.snippet.js → utils/flows.js} +21 -15
  193. package/lib/utils/index.d.ts +7 -2
  194. package/lib/utils/index.js +19 -2
  195. package/lib/utils/jsxTransform.d.ts +15 -0
  196. package/lib/utils/jsxTransform.js +68 -0
  197. package/lib/utils/params-resolvers.js +3 -3
  198. package/lib/utils/parsePathnameToViewParams.d.ts +1 -1
  199. package/lib/utils/parsePathnameToViewParams.js +41 -5
  200. package/lib/utils/pruneFilter.d.ts +21 -0
  201. package/lib/{runjs-context/snippets/global/try-catch-async.snippet.js → utils/pruneFilter.js} +24 -16
  202. package/lib/utils/safeGlobals.d.ts +5 -3
  203. package/lib/utils/safeGlobals.js +40 -0
  204. package/lib/utils/schema-utils.js +2 -2
  205. package/lib/utils/serverContextParams.d.ts +1 -0
  206. package/lib/utils/translation.d.ts +4 -1
  207. package/lib/utils/translation.js +6 -2
  208. package/lib/utils/variablesParams.d.ts +9 -5
  209. package/lib/utils/variablesParams.js +47 -36
  210. package/lib/views/DrawerComponent.js +21 -2
  211. package/lib/views/PageComponent.js +2 -1
  212. package/lib/views/ViewNavigation.d.ts +3 -9
  213. package/lib/views/ViewNavigation.js +16 -2
  214. package/lib/views/createViewMeta.d.ts +29 -1
  215. package/lib/views/createViewMeta.js +338 -72
  216. package/lib/views/index.d.ts +1 -0
  217. package/lib/views/index.js +3 -0
  218. package/lib/views/useDialog.d.ts +8 -8
  219. package/lib/views/useDialog.js +8 -7
  220. package/lib/views/useDrawer.d.ts +8 -8
  221. package/lib/views/useDrawer.js +43 -28
  222. package/lib/views/usePage.d.ts +8 -8
  223. package/lib/views/usePage.js +8 -7
  224. package/package.json +6 -3
  225. package/src/BlockScopedFlowEngine.ts +86 -0
  226. package/src/FlowContextProvider.tsx +4 -2
  227. package/src/JSRunner.ts +3 -0
  228. package/src/ViewScopedFlowEngine.ts +15 -1
  229. package/src/__tests__/JSRunner.test.ts +62 -53
  230. package/src/__tests__/blockScopedFlowEngine.test.ts +154 -0
  231. package/src/__tests__/createViewMeta.popup.test.ts +132 -0
  232. package/src/__tests__/flow-engine.test.ts +3 -0
  233. package/src/__tests__/flowContext.test.ts +52 -0
  234. package/src/__tests__/flowContextCreateJSRunner.test.ts +163 -0
  235. package/src/__tests__/flowEngine.saveModel.test.ts +4 -0
  236. package/src/__tests__/flowRunJSContextDefine.test.ts +508 -0
  237. package/src/__tests__/flowSettings.open.test.tsx +2 -0
  238. package/src/__tests__/flowSettings.test.ts +2 -0
  239. package/src/__tests__/globalFlowRegistry.test.ts +1 -1
  240. package/src/__tests__/modelOperationScheduler.test.ts +346 -0
  241. package/src/__tests__/objectVariable.test.ts +464 -0
  242. package/src/__tests__/runjsContext.test.ts +216 -35
  243. package/src/__tests__/runjsContextImplementations.test.ts +217 -0
  244. package/src/__tests__/runjsContextRuntime.test.ts +269 -0
  245. package/src/__tests__/runjsEdgeCases.test.ts +281 -0
  246. package/src/__tests__/runjsLocales.test.ts +36 -0
  247. package/src/__tests__/runjsRuntimeFeatures.test.ts +449 -0
  248. package/src/__tests__/runjsSnippets.test.ts +140 -0
  249. package/src/__tests__/viewScopedFlowEngine.test.ts +3 -3
  250. package/src/acl/Acl.tsx +14 -0
  251. package/src/acl/__tests__/Acl.test.tsx +43 -0
  252. package/src/components/DynamicFlowsEditor.tsx +3 -4
  253. package/src/components/FieldModelRenderer.tsx +20 -7
  254. package/src/components/FieldSkeleton.tsx +27 -0
  255. package/src/components/FlowContextSelector.tsx +6 -2
  256. package/src/components/FlowModelRenderer.tsx +33 -81
  257. package/src/components/FormItem.tsx +8 -1
  258. package/src/components/MobilePopup.style.ts +220 -0
  259. package/src/components/MobilePopup.tsx +86 -0
  260. package/src/components/__tests__/flow-model-render-error-fallback.test.tsx +6 -6
  261. package/src/components/index.ts +1 -0
  262. package/src/components/settings/independents/dropdown/FlowsDropdownButton.tsx +1 -1
  263. package/src/components/settings/wrappers/contextual/DefaultSettingsIcon.tsx +17 -4
  264. package/src/components/settings/wrappers/contextual/FlowsContextMenu.tsx +1 -1
  265. package/src/components/settings/wrappers/contextual/FlowsFloatContextMenu.tsx +39 -10
  266. package/src/components/settings/wrappers/contextual/StepSettingsDialog.tsx +14 -1
  267. package/src/components/settings/wrappers/contextual/__tests__/DefaultSettingsIcon.test.tsx +425 -0
  268. package/src/components/subModel/__tests__/AddSubModelButton.test.tsx +5 -7
  269. package/src/components/variables/VariableInput.tsx +25 -5
  270. package/src/components/variables/VariableTag.tsx +54 -2
  271. package/src/components/variables/types.ts +2 -0
  272. package/src/data-source/__tests__/sortCollectionsByInherits.test.ts +125 -0
  273. package/src/data-source/index.ts +42 -11
  274. package/src/data-source/sortCollectionsByInherits.ts +61 -0
  275. package/src/emitter.ts +14 -0
  276. package/src/executor/FlowExecutor.ts +213 -119
  277. package/src/executor/__tests__/ctx-defs-injection.test.ts +197 -0
  278. package/src/executor/__tests__/flowExecutor.test.ts +151 -5
  279. package/src/flow-registry/GlobalFlowRegistry.ts +1 -0
  280. package/src/flow-registry/InstanceFlowRegistry.ts +1 -0
  281. package/src/flow-registry/__tests__/globalFlowRegistry.test.ts +54 -0
  282. package/src/flowContext.ts +290 -104
  283. package/src/flowEngine.ts +74 -6
  284. package/src/flowSettings.ts +9 -4
  285. package/src/hooks/useApplyAutoFlows.ts +3 -1
  286. package/src/index.ts +12 -1
  287. package/src/locale/en-US.json +4 -2
  288. package/src/locale/zh-CN.json +4 -2
  289. package/src/models/CollectionFieldModel.tsx +56 -7
  290. package/src/models/__tests__/dispatchEvent.behavior.test.ts +169 -0
  291. package/src/models/__tests__/flowModel.getFlows.sort.test.ts +33 -9
  292. package/src/models/__tests__/flowModel.scheduleModelOperation.test.tsx +129 -0
  293. package/src/models/__tests__/flowModel.test.ts +234 -111
  294. package/src/models/__tests__/forkFlowModel.test.ts +40 -7
  295. package/src/models/flowModel.tsx +180 -132
  296. package/src/models/forkFlowModel.ts +48 -8
  297. package/src/provider.tsx +10 -7
  298. package/src/resources/multiRecordResource.ts +28 -1
  299. package/src/resources/singleRecordResource.ts +19 -1
  300. package/src/resources/sqlResource.ts +20 -25
  301. package/src/runjs-context/contexts/FormJSFieldItemRunJSContext.ts +28 -21
  302. package/src/runjs-context/contexts/JSBlockRunJSContext.ts +46 -34
  303. package/src/runjs-context/contexts/JSCollectionActionRunJSContext.ts +15 -16
  304. package/src/runjs-context/contexts/JSColumnRunJSContext.ts +58 -0
  305. package/src/runjs-context/contexts/JSFieldRunJSContext.ts +30 -25
  306. package/src/runjs-context/contexts/JSItemRunJSContext.ts +25 -21
  307. package/src/runjs-context/contexts/JSRecordActionRunJSContext.ts +17 -18
  308. package/src/runjs-context/contexts/base.ts +171 -0
  309. package/src/runjs-context/helpers.ts +32 -30
  310. package/src/runjs-context/registry.ts +16 -47
  311. package/src/runjs-context/setup.ts +51 -0
  312. package/src/runjs-context/snippets/global/api-request.snippet.ts +38 -0
  313. package/src/runjs-context/snippets/global/clipboard-copy-text.snippet.ts +42 -0
  314. package/src/runjs-context/snippets/global/import-esm.snippet.ts +39 -0
  315. package/src/runjs-context/snippets/global/message-error.snippet.ts +6 -0
  316. package/src/runjs-context/snippets/global/message-success.snippet.ts +6 -0
  317. package/src/runjs-context/snippets/global/notification-open.snippet.ts +11 -1
  318. package/src/runjs-context/snippets/global/open-view-dialog.snippet.ts +10 -3
  319. package/src/runjs-context/snippets/global/open-view-drawer.snippet.ts +10 -3
  320. package/src/runjs-context/snippets/global/query-selector.snippet.ts +34 -0
  321. package/src/runjs-context/snippets/global/require-amd.snippet.ts +30 -0
  322. package/src/runjs-context/snippets/global/window-open.snippet.ts +11 -1
  323. package/src/runjs-context/snippets/index.ts +177 -39
  324. package/src/runjs-context/snippets/scene/{jsblock → block}/add-event-listener.snippet.ts +14 -2
  325. package/src/runjs-context/snippets/scene/block/api-fetch-render-list.snippet.ts +45 -0
  326. package/src/runjs-context/snippets/scene/block/chartjs-bar.snippet.ts +80 -0
  327. package/src/runjs-context/snippets/scene/block/echarts-init.snippet.ts +44 -0
  328. package/src/runjs-context/snippets/scene/block/render-button-handler.snippet.ts +35 -0
  329. package/src/runjs-context/snippets/scene/block/render-iframe.snippet.ts +38 -0
  330. package/src/runjs-context/snippets/scene/block/render-info-card.snippet.ts +52 -0
  331. package/src/runjs-context/snippets/scene/block/render-react-jsx.snippet.ts +39 -0
  332. package/src/runjs-context/snippets/scene/block/render-react.snippet.ts +38 -0
  333. package/src/runjs-context/snippets/scene/block/render-statistics.snippet.ts +76 -0
  334. package/src/runjs-context/snippets/scene/block/render-timeline.snippet.ts +65 -0
  335. package/src/runjs-context/snippets/scene/block/resource-example.snippet.ts +46 -0
  336. package/src/runjs-context/snippets/scene/block/three-users-orbit.snippet.ts +264 -0
  337. package/src/runjs-context/snippets/scene/block/vue-component.snippet.ts +105 -0
  338. package/src/runjs-context/snippets/scene/detail/color-by-value.snippet.ts +33 -0
  339. package/src/runjs-context/snippets/scene/detail/copy-to-clipboard.snippet.ts +45 -0
  340. package/src/runjs-context/snippets/scene/detail/format-number.snippet.ts +32 -0
  341. package/src/runjs-context/snippets/scene/detail/innerHTML-value.snippet.ts +31 -0
  342. package/src/runjs-context/snippets/scene/detail/percentage-bar.snippet.ts +63 -0
  343. package/src/runjs-context/snippets/scene/detail/relative-time.snippet.ts +61 -0
  344. package/src/runjs-context/snippets/scene/detail/status-tag.snippet.ts +55 -0
  345. package/src/runjs-context/snippets/scene/form/calculate-total.snippet.ts +44 -0
  346. package/src/runjs-context/snippets/scene/form/cascade-select.snippet.ts +62 -0
  347. package/src/runjs-context/snippets/scene/form/conditional-required.snippet.ts +45 -0
  348. package/src/runjs-context/snippets/scene/form/copy-field-values.snippet.ts +55 -0
  349. package/src/runjs-context/snippets/scene/{jsitem → form}/render-basic.snippet.ts +14 -2
  350. package/src/runjs-context/snippets/scene/{linkage → form}/set-disabled.snippet.ts +15 -3
  351. package/src/runjs-context/snippets/scene/{linkage → form}/set-field-value.snippet.ts +15 -3
  352. package/src/runjs-context/snippets/scene/{linkage → form}/set-required.snippet.ts +15 -3
  353. package/src/runjs-context/snippets/scene/form/toggle-multiple-fields.snippet.ts +48 -0
  354. package/src/runjs-context/snippets/scene/{linkage → form}/toggle-visible.snippet.ts +15 -3
  355. package/src/runjs-context/snippets/scene/table/cell-open-dialog.snippet.ts +45 -0
  356. package/src/runjs-context/snippets/scene/{actions → table}/collection-selected-count.snippet.ts +14 -2
  357. package/src/runjs-context/snippets/scene/table/concat-fields.snippet.ts +60 -0
  358. package/src/runjs-context/snippets/scene/table/destroy-selected.snippet.ts +36 -0
  359. package/src/runjs-context/snippets/scene/table/export-selected-json.snippet.ts +45 -0
  360. package/src/runjs-context/snippets/scene/{actions → table}/iterate-selected-rows.snippet.ts +14 -2
  361. package/src/runjs-context/snippets/types.ts +5 -1
  362. package/src/scheduler/ModelOperationScheduler.ts +304 -0
  363. package/src/types.ts +34 -0
  364. package/src/utils/__tests__/flows.test.ts +65 -0
  365. package/src/utils/__tests__/jsxTransform.test.ts +38 -0
  366. package/src/utils/__tests__/parsePathnameToViewParams.test.ts +25 -0
  367. package/src/utils/__tests__/pruneFilter.test.ts +38 -0
  368. package/src/utils/__tests__/safeGlobals.test.ts +22 -1
  369. package/src/utils/associationObjectVariable.ts +180 -0
  370. package/src/utils/buildSettingsViewInputArgs.ts +72 -0
  371. package/src/utils/createEphemeralContext.ts +142 -0
  372. package/src/utils/flows.ts +23 -0
  373. package/src/utils/index.ts +10 -2
  374. package/src/utils/jsxTransform.ts +39 -0
  375. package/src/utils/params-resolvers.ts +2 -2
  376. package/src/utils/parsePathnameToViewParams.ts +50 -6
  377. package/src/utils/pruneFilter.ts +41 -0
  378. package/src/utils/safeGlobals.ts +49 -3
  379. package/src/utils/schema-utils.ts +1 -1
  380. package/src/utils/serverContextParams.ts +1 -0
  381. package/src/utils/translation.ts +7 -2
  382. package/src/utils/variablesParams.ts +50 -38
  383. package/src/views/DrawerComponent.tsx +21 -2
  384. package/src/views/PageComponent.tsx +1 -1
  385. package/src/views/ViewNavigation.ts +20 -12
  386. package/src/views/__tests__/ViewNavigation.test.ts +10 -0
  387. package/src/views/createViewMeta.ts +393 -70
  388. package/src/views/index.tsx +1 -0
  389. package/src/views/useDialog.tsx +12 -10
  390. package/src/views/useDrawer.tsx +62 -37
  391. package/src/views/usePage.tsx +13 -10
  392. package/lib/runjs-context/contexts/FlowRunJSContext.d.ts +0 -38
  393. package/lib/runjs-context/contexts/FlowRunJSContext.js +0 -217
  394. package/lib/runjs-context/contexts/LinkageRunJSContext.js +0 -62
  395. package/lib/runjs-context/index.d.ts +0 -19
  396. package/lib/runjs-context/index.js +0 -57
  397. package/lib/runjs-context/snippets/global/api-request-get.snippet.d.ts +0 -16
  398. package/lib/runjs-context/snippets/global/api-request-get.snippet.js +0 -42
  399. package/lib/runjs-context/snippets/global/api-request-post.snippet.d.ts +0 -16
  400. package/lib/runjs-context/snippets/global/console-log-ctx.snippet.d.ts +0 -16
  401. package/lib/runjs-context/snippets/global/console-log-ctx.snippet.js +0 -41
  402. package/lib/runjs-context/snippets/global/requireAsync.snippet.d.ts +0 -16
  403. package/lib/runjs-context/snippets/global/sleep.snippet.d.ts +0 -16
  404. package/lib/runjs-context/snippets/global/sleep.snippet.js +0 -43
  405. package/lib/runjs-context/snippets/global/try-catch-async.snippet.d.ts +0 -16
  406. package/lib/runjs-context/snippets/libs/echarts-init.snippet.d.ts +0 -15
  407. package/lib/runjs-context/snippets/scene/actions/collection-selected-count.snippet.d.ts +0 -15
  408. package/lib/runjs-context/snippets/scene/actions/iterate-selected-rows.snippet.d.ts +0 -15
  409. package/lib/runjs-context/snippets/scene/actions/record-id-message.snippet.d.ts +0 -15
  410. package/lib/runjs-context/snippets/scene/actions/record-id-message.snippet.js +0 -43
  411. package/lib/runjs-context/snippets/scene/actions/run-action-basic.snippet.d.ts +0 -15
  412. package/lib/runjs-context/snippets/scene/actions/run-action-basic.snippet.js +0 -40
  413. package/lib/runjs-context/snippets/scene/jsblock/add-event-listener.snippet.d.ts +0 -15
  414. package/lib/runjs-context/snippets/scene/jsblock/append-style.snippet.d.ts +0 -15
  415. package/lib/runjs-context/snippets/scene/jsblock/append-style.snippet.js +0 -42
  416. package/lib/runjs-context/snippets/scene/jsblock/jsx-mount.snippet.d.ts +0 -15
  417. package/lib/runjs-context/snippets/scene/jsblock/jsx-mount.snippet.js +0 -46
  418. package/lib/runjs-context/snippets/scene/jsblock/jsx-unmount.snippet.d.ts +0 -15
  419. package/lib/runjs-context/snippets/scene/jsblock/jsx-unmount.snippet.js +0 -41
  420. package/lib/runjs-context/snippets/scene/jsblock/render-basic.snippet.d.ts +0 -15
  421. package/lib/runjs-context/snippets/scene/jsblock/render-basic.snippet.js +0 -41
  422. package/lib/runjs-context/snippets/scene/jsblock/render-button-handler.snippet.d.ts +0 -15
  423. package/lib/runjs-context/snippets/scene/jsblock/render-react.snippet.d.ts +0 -15
  424. package/lib/runjs-context/snippets/scene/jsfield/color-by-value.snippet.d.ts +0 -15
  425. package/lib/runjs-context/snippets/scene/jsfield/format-number.snippet.d.ts +0 -15
  426. package/lib/runjs-context/snippets/scene/jsfield/innerHTML-value.snippet.d.ts +0 -15
  427. package/lib/runjs-context/snippets/scene/jsitem/render-basic.snippet.d.ts +0 -15
  428. package/lib/runjs-context/snippets/scene/linkage/set-disabled.snippet.d.ts +0 -15
  429. package/lib/runjs-context/snippets/scene/linkage/set-field-value.snippet.d.ts +0 -15
  430. package/lib/runjs-context/snippets/scene/linkage/set-required.snippet.d.ts +0 -15
  431. package/lib/runjs-context/snippets/scene/linkage/toggle-visible.snippet.d.ts +0 -15
  432. package/src/runjs-context/contexts/FlowRunJSContext.ts +0 -190
  433. package/src/runjs-context/contexts/LinkageRunJSContext.ts +0 -35
  434. package/src/runjs-context/index.ts +0 -20
  435. package/src/runjs-context/snippets/global/api-request-get.snippet.ts +0 -20
  436. package/src/runjs-context/snippets/global/api-request-post.snippet.ts +0 -20
  437. package/src/runjs-context/snippets/global/console-log-ctx.snippet.ts +0 -19
  438. package/src/runjs-context/snippets/global/copy-record-json.snippet.ts +0 -21
  439. package/src/runjs-context/snippets/global/copy-to-clipboard.snippet.ts +0 -21
  440. package/src/runjs-context/snippets/global/log-json-record.snippet.ts +0 -21
  441. package/src/runjs-context/snippets/global/requireAsync.snippet.ts +0 -24
  442. package/src/runjs-context/snippets/global/sleep.snippet.ts +0 -21
  443. package/src/runjs-context/snippets/global/try-catch-async.snippet.ts +0 -22
  444. package/src/runjs-context/snippets/global/view-navigation-push.snippet.ts +0 -23
  445. package/src/runjs-context/snippets/libs/echarts-init.snippet.ts +0 -24
  446. package/src/runjs-context/snippets/scene/actions/record-id-message.snippet.ts +0 -21
  447. package/src/runjs-context/snippets/scene/actions/run-action-basic.snippet.ts +0 -18
  448. package/src/runjs-context/snippets/scene/jsblock/append-style.snippet.ts +0 -20
  449. package/src/runjs-context/snippets/scene/jsblock/jsx-mount.snippet.ts +0 -24
  450. package/src/runjs-context/snippets/scene/jsblock/jsx-unmount.snippet.ts +0 -19
  451. package/src/runjs-context/snippets/scene/jsblock/render-basic.snippet.ts +0 -24
  452. package/src/runjs-context/snippets/scene/jsblock/render-button-handler.snippet.ts +0 -24
  453. package/src/runjs-context/snippets/scene/jsblock/render-card.snippet.ts +0 -30
  454. package/src/runjs-context/snippets/scene/jsblock/render-react.snippet.ts +0 -34
  455. package/src/runjs-context/snippets/scene/jsfield/color-by-value.snippet.ts +0 -20
  456. package/src/runjs-context/snippets/scene/jsfield/format-number.snippet.ts +0 -19
  457. package/src/runjs-context/snippets/scene/jsfield/innerHTML-value.snippet.ts +0 -18
  458. /package/lib/runjs-context/snippets/global/{copy-record-json.snippet.d.ts → api-request.snippet.d.ts} +0 -0
  459. /package/lib/runjs-context/snippets/global/{copy-to-clipboard.snippet.d.ts → clipboard-copy-text.snippet.d.ts} +0 -0
  460. /package/lib/runjs-context/snippets/global/{log-json-record.snippet.d.ts → import-esm.snippet.d.ts} +0 -0
  461. /package/lib/runjs-context/snippets/global/{view-navigation-push.snippet.d.ts → query-selector.snippet.d.ts} +0 -0
  462. /package/lib/runjs-context/snippets/scene/{jsblock/render-card.snippet.d.ts → block/echarts-init.snippet.d.ts} +0 -0
@@ -9,22 +9,50 @@
9
9
 
10
10
  import * as React from 'react';
11
11
  import DOMPurify from 'dompurify';
12
- import { observer } from '..';
12
+ import { autorun, observable, observer } from '..';
13
13
  import { FlowContext, FlowEngineContext } from '../flowContext';
14
14
  import { FlowViewContextProvider } from '../FlowContextProvider';
15
- import { createViewMeta } from './createViewMeta';
15
+ import { registerPopupVariable } from './createViewMeta';
16
16
  import DrawerComponent from './DrawerComponent';
17
17
  import usePatchElement from './usePatchElement';
18
18
  import { FlowEngineProvider } from '../provider';
19
19
  import { createViewScopedEngine } from '../ViewScopedFlowEngine';
20
20
 
21
- let uuid = 0;
22
-
23
21
  export function useDrawer() {
24
22
  const holderRef = React.useRef(null);
23
+ const drawerList = React.useMemo(() => observable.shallow({ value: [] }), []);
24
+
25
+ const RenderNestedDrawer = React.memo((props: { index: number }) => {
26
+ const { index } = props;
27
+ const [RenderDrawer, setRenderDrawer] = React.useState<React.ComponentType | null>(null);
28
+
29
+ React.useEffect(() => {
30
+ autorun(() => {
31
+ const list = drawerList.value;
32
+ if (list[index] && RenderDrawer !== list[index]) {
33
+ setRenderDrawer(list[index]);
34
+ }
35
+
36
+ if (!list[index]) {
37
+ setRenderDrawer(null);
38
+ }
39
+ });
40
+ }, [RenderDrawer, index]);
41
+
42
+ if (!RenderDrawer) {
43
+ return null;
44
+ }
45
+
46
+ return (
47
+ <RenderDrawer>
48
+ <RenderNestedDrawer index={index + 1} />
49
+ </RenderDrawer>
50
+ );
51
+ });
52
+
53
+ RenderNestedDrawer.displayName = 'RenderNestedDrawer';
25
54
 
26
55
  const open = (config, flowContext: FlowEngineContext) => {
27
- uuid += 1;
28
56
  const drawerRef = React.createRef<{
29
57
  destroy: () => void;
30
58
  update: (config: any) => void;
@@ -44,7 +72,7 @@ export function useDrawer() {
44
72
  let currentHeader: any = null;
45
73
 
46
74
  // Footer 组件实现
47
- const FooterComponent = ({ children, ...props }) => {
75
+ const FooterComponent: React.FC<{ children?: React.ReactNode }> = ({ children }) => {
48
76
  React.useEffect(() => {
49
77
  currentFooter = children;
50
78
  drawerRef.current?.setFooter(children);
@@ -59,10 +87,10 @@ export function useDrawer() {
59
87
  };
60
88
 
61
89
  // Header 组件实现
62
- const HeaderComponent = ({ ...props }) => {
90
+ const HeaderComponent: React.FC<{ title?: React.ReactNode; extra?: React.ReactNode }> = (props) => {
63
91
  React.useEffect(() => {
64
92
  currentHeader = props;
65
- drawerRef.current?.setHeader(props as any);
93
+ drawerRef.current?.setHeader(props);
66
94
 
67
95
  return () => {
68
96
  currentHeader = null;
@@ -75,7 +103,7 @@ export function useDrawer() {
75
103
 
76
104
  // 构造 currentDrawer 实例
77
105
  const currentDrawer = {
78
- type: 'drawer',
106
+ type: 'drawer' as const,
79
107
  inputArgs: config.inputArgs || {},
80
108
  preventClose: !!config.preventClose,
81
109
  destroy: () => drawerRef.current?.destroy(),
@@ -102,11 +130,6 @@ export function useDrawer() {
102
130
  };
103
131
 
104
132
  const ctx = new FlowContext();
105
- ctx.defineProperty('view', {
106
- get: () => currentDrawer,
107
- meta: createViewMeta(ctx, () => currentDrawer),
108
- resolveOnServer: (p: string) => p === 'record' || p.startsWith('record.'),
109
- });
110
133
  // 为当前视图创建作用域引擎(隔离实例与缓存)
111
134
  const scopedEngine = createViewScopedEngine(flowContext.engine);
112
135
  // 先将引擎暴露给视图上下文,再按需继承父上下文
@@ -118,9 +141,17 @@ export function useDrawer() {
118
141
  ctx.addDelegate(flowContext.engine.context);
119
142
  }
120
143
 
144
+ ctx.defineProperty('view', {
145
+ get: () => currentDrawer,
146
+ // meta: createViewMeta(ctx),
147
+ resolveOnServer: (p: string) => p === 'record' || p.startsWith('record.'),
148
+ });
149
+ // 顶层 popup 变量:弹窗记录/数据源/上级弹窗链(去重封装)
150
+ registerPopupVariable(ctx, currentDrawer);
151
+
121
152
  // 内部组件,在 Provider 内部计算 content
122
- const DrawerWithContext: React.FC = observer(
123
- (props) => {
153
+ const DrawerWithContext: React.FC = React.memo(
154
+ observer((props) => {
124
155
  // eslint-disable-next-line react-hooks/rules-of-hooks
125
156
  const mountedRef = React.useRef(false);
126
157
  const rawContent = typeof config.content === 'function' ? config.content(currentDrawer, ctx) : config.content;
@@ -147,7 +178,7 @@ export function useDrawer() {
147
178
  ref={drawerRef}
148
179
  {...config}
149
180
  footer={currentFooter}
150
- header={currentHeader}
181
+ header={config.header || currentHeader}
151
182
  hidden={config.inputArgs?.hidden?.value}
152
183
  afterClose={() => {
153
184
  closeFunc?.();
@@ -156,48 +187,42 @@ export function useDrawer() {
156
187
  // 关闭时修正 previous/next 指针
157
188
  scopedEngine.unlinkFromStack();
158
189
  }}
190
+ isMobile={ctx.isMobileLayout}
159
191
  >
160
192
  {content}
161
193
  {props.children}
162
194
  </DrawerComponent>
163
195
  );
164
- },
165
- {
166
- displayName: 'DrawerWithContext',
167
- },
196
+ }),
168
197
  );
169
198
 
170
- const renderDrawer = (children: React.ReactNode) => (
199
+ DrawerWithContext.displayName = 'DrawerWithContext';
200
+
201
+ const RenderDrawer = React.memo(({ children }) => (
171
202
  <FlowEngineProvider engine={scopedEngine}>
172
203
  <FlowViewContextProvider context={ctx}>
173
204
  <DrawerWithContext>{children}</DrawerWithContext>
174
205
  </FlowViewContextProvider>
175
206
  </FlowEngineProvider>
176
- );
207
+ ));
208
+
209
+ RenderDrawer.displayName = 'RenderDrawer';
177
210
 
178
- closeFunc = holderRef.current?.patchElement(renderDrawer);
211
+ closeFunc = holderRef.current?.patchElement(RenderDrawer);
179
212
  return Object.assign(promise, currentDrawer);
180
213
  };
181
214
 
182
215
  const api = React.useMemo(() => ({ open }), []);
183
216
  const ElementsHolder = React.memo(
184
217
  React.forwardRef((props, ref) => {
185
- const [elements, patchElement] = usePatchElement<(children: React.ReactNode) => React.ReactElement>();
218
+ const [elements, patchElement] = usePatchElement<React.ElementType>();
186
219
  React.useImperativeHandle(ref, () => ({ patchElement }), [patchElement]);
187
220
 
188
- // 嵌套渲染:后面的元素是前一个元素的子元素
189
- const renderNestedElements = () => {
190
- if (elements.length === 0) {
191
- return null;
192
- }
193
-
194
- // 从最后一个元素开始,向前递归渲染
195
- return elements.reduceRight((children: React.ReactNode, renderElement) => {
196
- return renderElement(children);
197
- }, null as React.ReactNode);
198
- };
221
+ React.useEffect(() => {
222
+ drawerList.value = elements;
223
+ }, [elements]);
199
224
 
200
- return <>{renderNestedElements()}</>;
225
+ return <RenderNestedDrawer index={0} />;
201
226
  }),
202
227
  );
203
228
 
@@ -12,7 +12,7 @@ import ReactDOM from 'react-dom';
12
12
  import { observer } from '..';
13
13
  import { FlowContext } from '../flowContext';
14
14
  import { FlowViewContextProvider } from '../FlowContextProvider';
15
- import { createViewMeta } from './createViewMeta';
15
+ import { registerPopupVariable } from './createViewMeta';
16
16
  import { PageComponent } from './PageComponent';
17
17
  import usePatchElement from './usePatchElement';
18
18
  import { FlowEngineProvider } from '../provider';
@@ -48,7 +48,7 @@ export function usePage() {
48
48
  });
49
49
 
50
50
  // Footer 组件实现
51
- const FooterComponent = ({ children, ...props }) => {
51
+ const FooterComponent: React.FC<{ children?: React.ReactNode }> = ({ children }) => {
52
52
  React.useEffect(() => {
53
53
  pageRef.current?.setFooter(children);
54
54
 
@@ -61,9 +61,9 @@ export function usePage() {
61
61
  };
62
62
 
63
63
  // Header 组件实现
64
- const HeaderComponent = ({ ...props }) => {
64
+ const HeaderComponent: React.FC<{ title?: React.ReactNode; extra?: React.ReactNode }> = (props) => {
65
65
  React.useEffect(() => {
66
- pageRef.current?.setHeader(props as any);
66
+ pageRef.current?.setHeader(props);
67
67
 
68
68
  return () => {
69
69
  pageRef.current?.setHeader(null);
@@ -77,7 +77,7 @@ export function usePage() {
77
77
 
78
78
  // 构造 currentPage 实例
79
79
  const currentPage = {
80
- type: 'embed',
80
+ type: 'embed' as const,
81
81
  inputArgs: config.inputArgs || {},
82
82
  preventClose: !!config.preventClose,
83
83
  destroy: () => pageRef.current?.destroy(),
@@ -102,11 +102,6 @@ export function usePage() {
102
102
  };
103
103
 
104
104
  const ctx = new FlowContext();
105
- ctx.defineProperty('view', {
106
- get: () => currentPage,
107
- meta: createViewMeta(ctx, () => currentPage),
108
- resolveOnServer: (p: string) => p === 'record' || p.startsWith('record.'),
109
- });
110
105
  // 为当前视图创建作用域引擎(隔离实例与缓存)
111
106
  const scopedEngine = createViewScopedEngine(flowContext.engine);
112
107
  ctx.defineProperty('engine', { value: scopedEngine });
@@ -117,6 +112,14 @@ export function usePage() {
117
112
  ctx.addDelegate(flowContext.engine.context);
118
113
  }
119
114
 
115
+ ctx.defineProperty('view', {
116
+ get: () => currentPage,
117
+ // meta: createViewMeta(ctx),
118
+ resolveOnServer: (p: string) => p === 'record' || p.startsWith('record.'),
119
+ });
120
+ // 顶层 popup 变量:弹窗记录/数据源/上级弹窗链(去重封装)
121
+ registerPopupVariable(ctx, currentPage);
122
+
120
123
  const PageWithContext = observer(
121
124
  () => {
122
125
  // eslint-disable-next-line react-hooks/rules-of-hooks
@@ -1,38 +0,0 @@
1
- /**
2
- * This file is part of the NocoBase (R) project.
3
- * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
- * Authors: NocoBase Team.
5
- *
6
- * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
- * For more information, please refer to: https://www.nocobase.com/agreement.
8
- */
9
- import type { FlowContext } from '../../flowContext';
10
- export type RunJSVersion = 'v1' | (string & {});
11
- export type RunJSContextCtor = new (delegate: FlowContext) => FlowRunJSContext;
12
- export type RunJSDocMeta = {
13
- label?: string;
14
- properties?: Record<string, any>;
15
- methods?: Record<string, any>;
16
- snipastes?: Record<string, any>;
17
- };
18
- export declare class FlowRunJSContext {
19
- #private;
20
- protected _delegate: FlowContext;
21
- [key: string]: any;
22
- static allow?: {
23
- keys?: ReadonlyArray<string>;
24
- facades?: Record<string, ReadonlyArray<string>>;
25
- };
26
- constructor(delegate: FlowContext);
27
- defineProperty(key: string, options: {
28
- get?: (ctx: any) => any;
29
- value?: any;
30
- }): void;
31
- defineMethod(name: string, fn: (...args: any[]) => any): void;
32
- static injectDefaultGlobals?(): {
33
- window?: any;
34
- document?: any;
35
- } | void;
36
- static define(meta: RunJSDocMeta): void;
37
- static getDoc(): RunJSDocMeta;
38
- }
@@ -1,217 +0,0 @@
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 __typeError = (msg) => {
17
- throw TypeError(msg);
18
- };
19
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
20
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
21
- var __export = (target, all) => {
22
- for (var name in all)
23
- __defProp(target, name, { get: all[name], enumerable: true });
24
- };
25
- var __copyProps = (to, from, except, desc) => {
26
- if (from && typeof from === "object" || typeof from === "function") {
27
- for (let key of __getOwnPropNames(from))
28
- if (!__hasOwnProp.call(to, key) && key !== except)
29
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
30
- }
31
- return to;
32
- };
33
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
34
- // If the importer is in node compatibility mode or this is not an ESM
35
- // file that has been converted to a CommonJS file using a Babel-
36
- // compatible transform (i.e. "__esModule" has not been set), then set
37
- // "default" to the CommonJS "module.exports" for node compatibility.
38
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
39
- mod
40
- ));
41
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
42
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
43
- var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
44
- var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
45
- var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
46
- var FlowRunJSContext_exports = {};
47
- __export(FlowRunJSContext_exports, {
48
- FlowRunJSContext: () => FlowRunJSContext
49
- });
50
- module.exports = __toCommonJS(FlowRunJSContext_exports);
51
- var antd = __toESM(require("antd"));
52
- var import_react = __toESM(require("react"));
53
- var ReactDOMClient = __toESM(require("react-dom/client"));
54
- var _FlowRunJSContext_instances, exposeProps_fn, exposeMethods_fn;
55
- const classMeta = /* @__PURE__ */ new WeakMap();
56
- const classDocCache = /* @__PURE__ */ new WeakMap();
57
- function deepMerge(base, patch) {
58
- if (patch === null) return void 0;
59
- if (Array.isArray(base) || Array.isArray(patch) || typeof base !== "object" || typeof patch !== "object") {
60
- return patch ?? base;
61
- }
62
- const out = { ...base };
63
- for (const k of Object.keys(patch)) {
64
- const v = deepMerge(base == null ? void 0 : base[k], patch[k]);
65
- if (typeof v === "undefined") delete out[k];
66
- else out[k] = v;
67
- }
68
- return out;
69
- }
70
- __name(deepMerge, "deepMerge");
71
- const _FlowRunJSContext = class _FlowRunJSContext {
72
- constructor(delegate) {
73
- __privateAdd(this, _FlowRunJSContext_instances);
74
- __publicField(this, "_delegate");
75
- this._delegate = delegate;
76
- const self = this;
77
- self.React = import_react.default;
78
- self.react = import_react.default;
79
- self.antd = antd;
80
- self.ReactDOM = ReactDOMClient;
81
- self.dispatchModelEvent = async (modelOrUid, eventName, inputArgs) => {
82
- var _a, _b, _c, _d, _e, _f, _g, _h;
83
- let model = null;
84
- const engine = this._delegate.engine;
85
- if (typeof modelOrUid === "string") {
86
- model = await ((_a = engine == null ? void 0 : engine.loadModel) == null ? void 0 : _a.call(engine, { uid: modelOrUid }));
87
- } else if (modelOrUid && typeof modelOrUid === "object" && typeof modelOrUid.dispatchEvent === "function") {
88
- model = modelOrUid;
89
- }
90
- if (model) {
91
- (_c = (_b = model.context) == null ? void 0 : _b.addDelegate) == null ? void 0 : _c.call(_b, self);
92
- model.dispatchEvent(eventName, {
93
- navigation: false,
94
- ...((_e = (_d = self.model) == null ? void 0 : _d["getInputArgs"]) == null ? void 0 : _e.call(_d)) || {},
95
- ...inputArgs || {}
96
- });
97
- } else {
98
- (_h = (_f = self.message) == null ? void 0 : _f.error) == null ? void 0 : _h.call(
99
- _f,
100
- ((_g = self.t) == null ? void 0 : _g.call(self, "Model with ID {{uid}} not found", { uid: String(modelOrUid) })) || "Model not found"
101
- );
102
- }
103
- };
104
- __privateMethod(this, _FlowRunJSContext_instances, exposeProps_fn).call(this, [
105
- "message",
106
- "notification",
107
- "logger",
108
- "resource",
109
- "urlSearchParams",
110
- "token",
111
- "role",
112
- "auth",
113
- "api",
114
- "ref",
115
- "model"
116
- ]);
117
- __privateMethod(this, _FlowRunJSContext_instances, exposeMethods_fn).call(this, ["t", "requireAsync", "copyToClipboard", "resolveJsonTemplate", "runAction", "onRefReady"]);
118
- }
119
- // 供子类/外部一致使用的定义 API(与 FlowContext 的接口保持一致风格)
120
- defineProperty(key, options) {
121
- if (options && typeof options.get === "function") {
122
- Object.defineProperty(this, key, {
123
- configurable: true,
124
- enumerable: true,
125
- get: /* @__PURE__ */ __name(() => {
126
- var _a;
127
- return (_a = options.get) == null ? void 0 : _a.call(options, this);
128
- }, "get")
129
- });
130
- return;
131
- }
132
- Object.defineProperty(this, key, {
133
- configurable: true,
134
- enumerable: true,
135
- writable: false,
136
- value: options == null ? void 0 : options.value
137
- });
138
- }
139
- defineMethod(name, fn) {
140
- Object.defineProperty(this, name, {
141
- configurable: true,
142
- enumerable: false,
143
- writable: false,
144
- value: fn.bind(this)
145
- });
146
- }
147
- static define(meta) {
148
- const prev = classMeta.get(this) || {};
149
- classMeta.set(this, deepMerge(prev, meta));
150
- classDocCache.delete(this);
151
- }
152
- static getDoc() {
153
- const self = this;
154
- if (classDocCache.has(self)) return classDocCache.get(self);
155
- const chain = [];
156
- let cur = self;
157
- while (cur && cur.prototype) {
158
- chain.unshift(cur);
159
- cur = Object.getPrototypeOf(cur);
160
- }
161
- let merged = {};
162
- for (const cls of chain) merged = deepMerge(merged, classMeta.get(cls) || {});
163
- classDocCache.set(self, merged);
164
- return merged;
165
- }
166
- };
167
- _FlowRunJSContext_instances = new WeakSet();
168
- // 工具:将委托上的属性以 getter 暴露
169
- exposeProps_fn = /* @__PURE__ */ __name(function(names) {
170
- for (const k of names) {
171
- if (Object.prototype.hasOwnProperty.call(this, k)) continue;
172
- this.defineProperty(k, { get: /* @__PURE__ */ __name(() => this._delegate[k], "get") });
173
- }
174
- }, "#exposeProps");
175
- // 工具:将委托上的同名方法绑定暴露
176
- exposeMethods_fn = /* @__PURE__ */ __name(function(names) {
177
- for (const k of names) {
178
- if (Object.prototype.hasOwnProperty.call(this, k)) continue;
179
- const src = this._delegate[k];
180
- if (typeof src === "function") {
181
- this.defineMethod(k, src.bind(this._delegate));
182
- }
183
- }
184
- }, "#exposeMethods");
185
- __name(_FlowRunJSContext, "FlowRunJSContext");
186
- __publicField(_FlowRunJSContext, "allow");
187
- let FlowRunJSContext = _FlowRunJSContext;
188
- FlowRunJSContext.define({
189
- label: "RunJS base",
190
- properties: {
191
- t: "\u56FD\u9645\u5316\u51FD\u6570\u3002\u793A\u4F8B\uFF1A`ctx.t('Hello {name}', { name: 'World' })`",
192
- logger: "Pino logger \u5B50\u5B9E\u4F8B\u3002`ctx.logger.info({ foo: 1 }, 'msg')`",
193
- message: "AntD \u5168\u5C40\u6D88\u606F\u3002`ctx.message.success('done')`",
194
- notification: "AntD \u901A\u77E5\u3002`ctx.notification.open({ message: 'Hi' })`",
195
- requireAsync: "\u5F02\u6B65\u52A0\u8F7D\u5916\u90E8\u5E93\u3002`const x = await ctx.requireAsync(url)`",
196
- copyToClipboard: "\u590D\u5236\u6587\u672C\u5230\u526A\u8D34\u677F\u3002`await ctx.copyToClipboard(text)`",
197
- resolveJsonTemplate: "\u89E3\u6790\u542B {{ }} \u7684\u6A21\u677F/\u8868\u8FBE\u5F0F",
198
- runAction: "\u8FD0\u884C\u5F53\u524D\u6A21\u578B\u52A8\u4F5C\u3002`await ctx.runAction(name, params)`",
199
- resource: "\u6570\u636E\u8D44\u6E90\uFF08\u6309\u59D4\u6258\u53EF\u89C1\uFF09",
200
- urlSearchParams: "URL \u67E5\u8BE2\u53C2\u6570\u5BF9\u8C61",
201
- token: "API Token",
202
- role: "\u5F53\u524D\u89D2\u8272",
203
- auth: "\u8BA4\u8BC1\u4FE1\u606F\uFF08locale/role/user/token\uFF09",
204
- api: "APIClient \u5B9E\u4F8B",
205
- React: "React \u547D\u540D\u7A7A\u95F4\uFF08RunJS \u73AF\u5883\u53EF\u7528\uFF09",
206
- react: "React \u522B\u540D\uFF08\u5C0F\u5199\uFF09",
207
- ReactDOM: "ReactDOM \u5BA2\u6237\u7AEF\uFF08\u542B createRoot\uFF09",
208
- antd: "AntD \u7EC4\u4EF6\u5E93\uFF08RunJS \u73AF\u5883\u53EF\u7528\uFF09"
209
- },
210
- methods: {
211
- dispatchModelEvent: "\u89E6\u53D1\u6A21\u578B\u4E8B\u4EF6\uFF1A`await ctx.dispatchModelEvent(modelUid, 'click', { ... })`"
212
- }
213
- });
214
- // Annotate the CommonJS export names for ESM import in node:
215
- 0 && (module.exports = {
216
- FlowRunJSContext
217
- });
@@ -1,62 +0,0 @@
1
- /**
2
- * This file is part of the NocoBase (R) project.
3
- * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
- * Authors: NocoBase Team.
5
- *
6
- * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
- * For more information, please refer to: https://www.nocobase.com/agreement.
8
- */
9
-
10
- var __defProp = Object.defineProperty;
11
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
12
- var __getOwnPropNames = Object.getOwnPropertyNames;
13
- var __hasOwnProp = Object.prototype.hasOwnProperty;
14
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
15
- var __export = (target, all) => {
16
- for (var name in all)
17
- __defProp(target, name, { get: all[name], enumerable: true });
18
- };
19
- var __copyProps = (to, from, except, desc) => {
20
- if (from && typeof from === "object" || typeof from === "function") {
21
- for (let key of __getOwnPropNames(from))
22
- if (!__hasOwnProp.call(to, key) && key !== except)
23
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
24
- }
25
- return to;
26
- };
27
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
- var LinkageRunJSContext_exports = {};
29
- __export(LinkageRunJSContext_exports, {
30
- LinkageRunJSContext: () => LinkageRunJSContext
31
- });
32
- module.exports = __toCommonJS(LinkageRunJSContext_exports);
33
- var import_FlowRunJSContext = require("./FlowRunJSContext");
34
- const _LinkageRunJSContext = class _LinkageRunJSContext extends import_FlowRunJSContext.FlowRunJSContext {
35
- constructor(delegate) {
36
- super(delegate);
37
- this.defineProperty("model", { get: /* @__PURE__ */ __name(() => this._delegate["model"], "get") });
38
- this.defineProperty("fields", { get: /* @__PURE__ */ __name(() => this._delegate["fields"], "get") });
39
- }
40
- };
41
- __name(_LinkageRunJSContext, "LinkageRunJSContext");
42
- let LinkageRunJSContext = _LinkageRunJSContext;
43
- LinkageRunJSContext.define({
44
- label: "Linkage RunJS context",
45
- properties: {
46
- model: "\u5F53\u524D\u5757/\u5B57\u6BB5\u6A21\u578B\uFF08\u53EA\u8BFB\u8BBF\u95EE\uFF09",
47
- fields: "\u53EF\u8BBF\u95EE\u7684\u5B57\u6BB5\u96C6\u5408\uFF08\u53EA\u8BFB\uFF09"
48
- },
49
- methods: {
50
- message: "Message API"
51
- },
52
- snipastes: {
53
- "Set field value": { $ref: "scene/linkage/set-field-value", prefix: "sn-link-set" },
54
- "Toggle visible": { $ref: "scene/linkage/toggle-visible", prefix: "sn-link-visibility" },
55
- "Set disabled": { $ref: "scene/linkage/set-disabled", prefix: "sn-link-disable" },
56
- "Set required": { $ref: "scene/linkage/set-required", prefix: "sn-link-required" }
57
- }
58
- });
59
- // Annotate the CommonJS export names for ESM import in node:
60
- 0 && (module.exports = {
61
- LinkageRunJSContext
62
- });
@@ -1,19 +0,0 @@
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 './registry';
10
- export * from './helpers';
11
- export * from './contexts/FlowRunJSContext';
12
- export * from './contexts/JSBlockRunJSContext';
13
- export * from './contexts/JSFieldRunJSContext';
14
- export * from './contexts/JSItemRunJSContext';
15
- export * from './contexts/FormJSFieldItemRunJSContext';
16
- export * from './contexts/JSRecordActionRunJSContext';
17
- export * from './contexts/JSCollectionActionRunJSContext';
18
- export * from './contexts/LinkageRunJSContext';
19
- export { engineSnippets } from './snippets';
@@ -1,57 +0,0 @@
1
- /**
2
- * This file is part of the NocoBase (R) project.
3
- * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
- * Authors: NocoBase Team.
5
- *
6
- * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
- * For more information, please refer to: https://www.nocobase.com/agreement.
8
- */
9
-
10
- var __defProp = Object.defineProperty;
11
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
12
- var __getOwnPropNames = Object.getOwnPropertyNames;
13
- var __hasOwnProp = Object.prototype.hasOwnProperty;
14
- var __export = (target, all) => {
15
- for (var name in all)
16
- __defProp(target, name, { get: all[name], enumerable: true });
17
- };
18
- var __copyProps = (to, from, except, desc) => {
19
- if (from && typeof from === "object" || typeof from === "function") {
20
- for (let key of __getOwnPropNames(from))
21
- if (!__hasOwnProp.call(to, key) && key !== except)
22
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
23
- }
24
- return to;
25
- };
26
- var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
27
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
- var runjs_context_exports = {};
29
- __export(runjs_context_exports, {
30
- engineSnippets: () => import_snippets.engineSnippets
31
- });
32
- module.exports = __toCommonJS(runjs_context_exports);
33
- __reExport(runjs_context_exports, require("./registry"), module.exports);
34
- __reExport(runjs_context_exports, require("./helpers"), module.exports);
35
- __reExport(runjs_context_exports, require("./contexts/FlowRunJSContext"), module.exports);
36
- __reExport(runjs_context_exports, require("./contexts/JSBlockRunJSContext"), module.exports);
37
- __reExport(runjs_context_exports, require("./contexts/JSFieldRunJSContext"), module.exports);
38
- __reExport(runjs_context_exports, require("./contexts/JSItemRunJSContext"), module.exports);
39
- __reExport(runjs_context_exports, require("./contexts/FormJSFieldItemRunJSContext"), module.exports);
40
- __reExport(runjs_context_exports, require("./contexts/JSRecordActionRunJSContext"), module.exports);
41
- __reExport(runjs_context_exports, require("./contexts/JSCollectionActionRunJSContext"), module.exports);
42
- __reExport(runjs_context_exports, require("./contexts/LinkageRunJSContext"), module.exports);
43
- var import_snippets = require("./snippets");
44
- // Annotate the CommonJS export names for ESM import in node:
45
- 0 && (module.exports = {
46
- engineSnippets,
47
- ...require("./registry"),
48
- ...require("./helpers"),
49
- ...require("./contexts/FlowRunJSContext"),
50
- ...require("./contexts/JSBlockRunJSContext"),
51
- ...require("./contexts/JSFieldRunJSContext"),
52
- ...require("./contexts/JSItemRunJSContext"),
53
- ...require("./contexts/FormJSFieldItemRunJSContext"),
54
- ...require("./contexts/JSRecordActionRunJSContext"),
55
- ...require("./contexts/JSCollectionActionRunJSContext"),
56
- ...require("./contexts/LinkageRunJSContext")
57
- });
@@ -1,16 +0,0 @@
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
- declare const _default: {
10
- contexts: string[];
11
- prefix: string;
12
- label: string;
13
- description: string;
14
- content: string;
15
- };
16
- export default _default;