@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
@@ -12,6 +12,7 @@ export type RecordRef = {
12
12
  id?: any;
13
13
  filterByTk?: any;
14
14
  dataSourceKey?: string;
15
+ sourceId?: any;
15
16
  fields?: string[];
16
17
  appends?: string[];
17
18
  record?: any;
@@ -14,5 +14,8 @@ import type { FlowModel } from '../models';
14
14
  * @returns 翻译函数,自动使用 flow-engine 命名空间
15
15
  */
16
16
  export declare function getT(model: FlowModel): (key: string, options?: any) => string;
17
+ export declare function tExpr(text: TFuncKey | TFuncKey[], options?: TOptions): string;
18
+ /**
19
+ * @deprecated use tExpr from `@nocobase/flow-engine` instead
20
+ */
17
21
  export declare function escapeT(text: TFuncKey | TFuncKey[], options?: TOptions): string;
18
- export { escapeT as tExpr };
@@ -29,7 +29,7 @@ var translation_exports = {};
29
29
  __export(translation_exports, {
30
30
  escapeT: () => escapeT,
31
31
  getT: () => getT,
32
- tExpr: () => escapeT
32
+ tExpr: () => tExpr
33
33
  });
34
34
  module.exports = __toCommonJS(translation_exports);
35
35
  var import_constants = require("./constants");
@@ -43,12 +43,16 @@ function getT(model) {
43
43
  return (key) => key;
44
44
  }
45
45
  __name(getT, "getT");
46
- function escapeT(text, options) {
46
+ function tExpr(text, options) {
47
47
  if (options) {
48
48
  return `{{t(${JSON.stringify(text)}, ${JSON.stringify(options)})}}`;
49
49
  }
50
50
  return `{{t(${JSON.stringify(text)})}}`;
51
51
  }
52
+ __name(tExpr, "tExpr");
53
+ function escapeT(text, options) {
54
+ return tExpr(text, options);
55
+ }
52
56
  __name(escapeT, "escapeT");
53
57
  // Annotate the CommonJS export names for ESM import in node:
54
58
  0 && (module.exports = {
@@ -6,11 +6,26 @@
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 type { FlowContext, PropertyMeta, PropertyMetaFactory } from '../flowContext';
10
- import type { JSONValue } from './params-resolvers';
9
+ import { extractUsedVariableNames as _extractUsedVariableNames, extractUsedVariablePaths as _extractUsedVariablePaths } from '@nocobase/shared';
11
10
  import type { Collection } from '../data-source';
11
+ import type { FlowContext, PropertyMeta, PropertyMetaFactory } from '../flowContext';
12
12
  import { type RecordRef, type ServerContextParams } from '../utils/serverContextParams';
13
+ import type { JSONValue } from './params-resolvers';
13
14
  export declare function inferRecordRef(ctx: FlowContext): RecordRef | undefined;
15
+ export declare function inferViewRecordRef(ctx: FlowContext): RecordRef | undefined;
16
+ export declare function getViewRecordFromParent(flowContext: FlowContext, viewContext: FlowContext): unknown;
17
+ export declare function createViewRecordResolveOnServer(ctx: FlowContext, getLocalRecord: () => unknown): (subPath: string) => boolean;
18
+ /**
19
+ * 创建一个用于 “ctx.record” 变量的 resolveOnServer 判定函数:
20
+ * - 若本地 record 不存在:统一走服务端;
21
+ * - 若本地 record 存在:
22
+ * - 访问空子路径("{{ ctx.record }}")时使用本地值,不走服务端;
23
+ * - 访问非关联字段(如 id/title):使用本地值;
24
+ * - 访问关联字段:
25
+ * - 若本地该字段无值(undefined/null),则交给服务端解析(无论是 "author" 还是 "author.name");
26
+ * - 若本地已有值,则仅在访问子属性且本地缺少该子属性值时交给服务端。
27
+ */
28
+ export declare function createRecordResolveOnServerWithLocal(collectionAccessor: () => Collection | null, valueAccessor: () => unknown): (subPath: string) => boolean;
14
29
  export declare function inferParentRecordRef(ctx: FlowContext): RecordRef | undefined;
15
30
  export type RecordParamsBuilder = (ctx: FlowContext) => RecordRef | Promise<RecordRef> | undefined;
16
31
  /**
@@ -27,12 +42,14 @@ export declare function createRecordMetaFactory(collectionAccessor: () => Collec
27
42
  * - Title: t('Current record')
28
43
  * - Params: inferRecordRef(ctx)
29
44
  */
30
- export declare function createCurrentRecordMetaFactory(ctx: FlowContext, collectionAccessor: () => Collection | null): PropertyMetaFactory;
45
+ export declare function createCurrentRecordMetaFactory(ctx: FlowContext, collectionAccessor: () => Collection | null, options?: {
46
+ title?: string;
47
+ }): PropertyMetaFactory;
31
48
  /**
32
49
  * Extract top-level ctx variable names used inside a JSON template.
33
50
  * Supports dot and bracket notations, e.g. {{ ctx.record.id }}, {{ ctx['parentRecord'].name }}.
34
51
  */
35
- export declare const extractUsedVariableNames: any;
52
+ export declare const extractUsedVariableNames: typeof _extractUsedVariableNames;
36
53
  /**
37
54
  * Extract used top-level ctx variables with their subpaths.
38
55
  * Returns a map: varName -> string[] subPaths
@@ -42,7 +59,7 @@ export declare const extractUsedVariableNames: any;
42
59
  * - {{ ctx.view.record.id }} => { view: ['record.id'] }
43
60
  * - {{ ctx.twice(21) }} => { twice: [''] } // method call -> empty subPath
44
61
  */
45
- export declare const extractUsedVariablePaths: any;
62
+ export declare const extractUsedVariablePaths: typeof _extractUsedVariablePaths;
46
63
  /**
47
64
  * 根据模板中用到的 ctx 变量,收集并构建服务端解析所需的 contextParams。
48
65
  * - 通过 FlowContext 的 PropertyMeta.buildVariablesParams 收集 RecordRef
@@ -7,9 +7,11 @@
7
7
  * For more information, please refer to: https://www.nocobase.com/agreement.
8
8
  */
9
9
 
10
+ var __create = Object.create;
10
11
  var __defProp = Object.defineProperty;
11
12
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
12
13
  var __getOwnPropNames = Object.getOwnPropertyNames;
14
+ var __getProtoOf = Object.getPrototypeOf;
13
15
  var __hasOwnProp = Object.prototype.hasOwnProperty;
14
16
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
15
17
  var __export = (target, all) => {
@@ -24,6 +26,14 @@ var __copyProps = (to, from, except, desc) => {
24
26
  }
25
27
  return to;
26
28
  };
29
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
30
+ // If the importer is in node compatibility mode or this is not an ESM
31
+ // file that has been converted to a CommonJS file using a Babel-
32
+ // compatible transform (i.e. "__esModule" has not been set), then set
33
+ // "default" to the CommonJS "module.exports" for node compatibility.
34
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
35
+ mod
36
+ ));
27
37
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
38
  var variablesParams_exports = {};
29
39
  __export(variablesParams_exports, {
@@ -31,15 +41,21 @@ __export(variablesParams_exports, {
31
41
  collectContextParamsForTemplate: () => collectContextParamsForTemplate,
32
42
  createCurrentRecordMetaFactory: () => createCurrentRecordMetaFactory,
33
43
  createRecordMetaFactory: () => createRecordMetaFactory,
44
+ createRecordResolveOnServerWithLocal: () => createRecordResolveOnServerWithLocal,
45
+ createViewRecordResolveOnServer: () => createViewRecordResolveOnServer,
34
46
  extractUsedVariableNames: () => extractUsedVariableNames,
35
47
  extractUsedVariablePaths: () => extractUsedVariablePaths,
48
+ getViewRecordFromParent: () => getViewRecordFromParent,
36
49
  inferParentRecordRef: () => inferParentRecordRef,
37
- inferRecordRef: () => inferRecordRef
50
+ inferRecordRef: () => inferRecordRef,
51
+ inferViewRecordRef: () => inferViewRecordRef
38
52
  });
39
53
  module.exports = __toCommonJS(variablesParams_exports);
40
- var import_createCollectionContextMeta = require("./createCollectionContextMeta");
54
+ var import_shared = require("@nocobase/shared");
41
55
  var import_serverContextParams = require("../utils/serverContextParams");
42
- var import_client = require("@nocobase/utils/client");
56
+ var import_createCollectionContextMeta = require("./createCollectionContextMeta");
57
+ var import_associationObjectVariable = require("./associationObjectVariable");
58
+ var import_lodash = __toESM(require("lodash"));
43
59
  function isObject(value) {
44
60
  return typeof value === "object" && value !== null;
45
61
  }
@@ -71,14 +87,94 @@ function inferRecordRef(ctx) {
71
87
  return { collection, dataSourceKey, filterByTk };
72
88
  }
73
89
  __name(inferRecordRef, "inferRecordRef");
90
+ function inferViewRecordRef(ctx) {
91
+ var _a, _b, _c;
92
+ const view = ctx.view;
93
+ if (!view) return void 0;
94
+ const inputArgs = (view == null ? void 0 : view.inputArgs) || {};
95
+ const collection = (inputArgs == null ? void 0 : inputArgs.collectionName) || ((_a = view == null ? void 0 : view.record) == null ? void 0 : _a.collection);
96
+ const dataSourceKey = (inputArgs == null ? void 0 : inputArgs.dataSourceKey) || ((_b = view == null ? void 0 : view.record) == null ? void 0 : _b.dataSourceKey) || "main";
97
+ const filterByTk = (inputArgs == null ? void 0 : inputArgs.filterByTk) || ((_c = view == null ? void 0 : view.record) == null ? void 0 : _c.filterByTk);
98
+ const sourceId = inputArgs == null ? void 0 : inputArgs.sourceId;
99
+ if (!collection || typeof filterByTk === "undefined" || filterByTk === null) return void 0;
100
+ return { collection, dataSourceKey, filterByTk, sourceId };
101
+ }
102
+ __name(inferViewRecordRef, "inferViewRecordRef");
103
+ function getViewRecordFromParent(flowContext, viewContext) {
104
+ var _a, _b, _c;
105
+ const parentRecord = (_a = flowContext.inputArgs) == null ? void 0 : _a.record;
106
+ const parentTk = (_b = flowContext.collection) == null ? void 0 : _b.filterTargetKey;
107
+ if (!parentRecord || !parentTk) return void 0;
108
+ const view = viewContext.view;
109
+ const viewFilterByTk = (_c = view == null ? void 0 : view.inputArgs) == null ? void 0 : _c.filterByTk;
110
+ const recordFilterByTk = parentRecord[parentTk];
111
+ if (viewFilterByTk == null || recordFilterByTk == null) return void 0;
112
+ if (viewFilterByTk !== recordFilterByTk) return void 0;
113
+ return import_lodash.default.cloneDeep(parentRecord);
114
+ }
115
+ __name(getViewRecordFromParent, "getViewRecordFromParent");
116
+ function createViewRecordResolveOnServer(ctx, getLocalRecord) {
117
+ return (p) => {
118
+ var _a, _b, _c, _d;
119
+ if (!(p === "record" || p.startsWith("record."))) return false;
120
+ const local = getLocalRecord();
121
+ if (!local) return true;
122
+ if (p === "record") return false;
123
+ const ref = inferViewRecordRef(ctx);
124
+ const colName = ref == null ? void 0 : ref.collection;
125
+ const dsKey = (ref == null ? void 0 : ref.dataSourceKey) || "main";
126
+ if (!colName) return true;
127
+ const ds = (_b = (_a = ctx.dataSourceManager) == null ? void 0 : _a.getDataSource) == null ? void 0 : _b.call(_a, dsKey);
128
+ const collection = (_d = (_c = ds == null ? void 0 : ds.collectionManager) == null ? void 0 : _c.getCollection) == null ? void 0 : _d.call(_c, colName);
129
+ if (!collection) return true;
130
+ const resolver = (0, import_associationObjectVariable.createAssociationSubpathResolver)(
131
+ () => collection,
132
+ () => local
133
+ );
134
+ const subPath = p.startsWith("record.") ? p.slice("record.".length) : "";
135
+ if (!subPath) return false;
136
+ return resolver(subPath);
137
+ };
138
+ }
139
+ __name(createViewRecordResolveOnServer, "createViewRecordResolveOnServer");
140
+ function createRecordResolveOnServerWithLocal(collectionAccessor, valueAccessor) {
141
+ const assocSubpathResolver = (0, import_associationObjectVariable.createAssociationSubpathResolver)(collectionAccessor, () => valueAccessor());
142
+ return (p) => {
143
+ var _a;
144
+ const local = valueAccessor();
145
+ if (!local) return true;
146
+ if (!p) return false;
147
+ const collection = collectionAccessor();
148
+ if (!p.includes(".")) {
149
+ const name = p;
150
+ let field;
151
+ if (collection) {
152
+ if (typeof collection.getField === "function") {
153
+ field = collection.getField(name);
154
+ }
155
+ if (!field && typeof collection.getFields === "function") {
156
+ const fields = collection.getFields() || [];
157
+ field = fields.find((f) => (f == null ? void 0 : f.name) === name);
158
+ }
159
+ }
160
+ const isAssoc = !!((_a = field == null ? void 0 : field.isAssociationField) == null ? void 0 : _a.call(field));
161
+ if (!isAssoc) return false;
162
+ const value = local == null ? void 0 : local[name];
163
+ if (value === void 0 || value === null) return true;
164
+ return false;
165
+ }
166
+ return assocSubpathResolver(p);
167
+ };
168
+ }
169
+ __name(createRecordResolveOnServerWithLocal, "createRecordResolveOnServerWithLocal");
74
170
  function inferParentRecordRef(ctx) {
75
171
  var _a, _b, _c, _d;
76
172
  const resource = getResource(ctx);
77
173
  const dataSourceKey = ((_a = getCollection(ctx)) == null ? void 0 : _a.dataSourceKey) || ((_b = resource == null ? void 0 : resource.getDataSourceKey) == null ? void 0 : _b.call(resource));
78
- const rn = (_c = resource == null ? void 0 : resource.getResourceName) == null ? void 0 : _c.call(resource);
174
+ const resourceName = (_c = resource == null ? void 0 : resource.getResourceName) == null ? void 0 : _c.call(resource);
79
175
  const sourceId = (_d = resource == null ? void 0 : resource.getSourceId) == null ? void 0 : _d.call(resource);
80
- if (!rn || typeof sourceId === "undefined" || sourceId === null) return void 0;
81
- const parts = String(rn).split(".");
176
+ if (!resourceName || typeof sourceId === "undefined" || sourceId === null) return void 0;
177
+ const parts = String(resourceName).split(".");
82
178
  if (parts.length < 2) return void 0;
83
179
  return { collection: parts[0], dataSourceKey, filterByTk: sourceId };
84
180
  }
@@ -98,43 +194,39 @@ function createRecordMetaFactory(collectionAccessor, title, paramsBuilder) {
98
194
  return factory;
99
195
  }
100
196
  __name(createRecordMetaFactory, "createRecordMetaFactory");
101
- function createCurrentRecordMetaFactory(ctx, collectionAccessor) {
102
- var _a;
103
- const title = ((_a = ctx == null ? void 0 : ctx.t) == null ? void 0 : _a.call(ctx, "Current record")) || "Current record";
197
+ function createCurrentRecordMetaFactory(ctx, collectionAccessor, options) {
198
+ var _a, _b;
199
+ const title = (options == null ? void 0 : options.title) ? ((_a = ctx.t) == null ? void 0 : _a.call(ctx, options.title)) || options.title : ((_b = ctx.t) == null ? void 0 : _b.call(ctx, "Current record")) || "Current record";
104
200
  return createRecordMetaFactory(collectionAccessor, title, (c) => inferRecordRef(c));
105
201
  }
106
202
  __name(createCurrentRecordMetaFactory, "createCurrentRecordMetaFactory");
107
- const extractUsedVariableNames = import_client.extractUsedVariableNames;
108
- const extractUsedVariablePaths = import_client.extractUsedVariablePaths;
203
+ const extractUsedVariableNames = import_shared.extractUsedVariableNames;
204
+ const extractUsedVariablePaths = import_shared.extractUsedVariablePaths;
109
205
  async function collectContextParamsForTemplate(ctx, template) {
110
206
  var _a;
111
- try {
112
- const usage = (0, import_client.extractUsedVariablePaths)(template) || {};
113
- const varNames = Object.keys(usage);
114
- if (!varNames.length) return void 0;
115
- const input = {};
116
- for (const key of varNames) {
117
- const opt = (_a = ctx.getPropertyOptions) == null ? void 0 : _a.call(ctx, key);
118
- const meta = opt == null ? void 0 : opt.meta;
119
- if (!meta) continue;
120
- let built;
121
- try {
122
- const resolvedMeta = typeof meta === "function" ? await meta() : meta;
123
- const builder = resolvedMeta == null ? void 0 : resolvedMeta.buildVariablesParams;
124
- if (typeof builder === "function") {
125
- built = await builder(ctx);
126
- }
127
- } catch (err) {
128
- continue;
129
- }
130
- if (built) {
131
- input[key] = built;
207
+ const usage = (0, import_shared.extractUsedVariablePaths)(template) || {};
208
+ const varNames = Object.keys(usage);
209
+ if (!varNames.length) return void 0;
210
+ const input = {};
211
+ for (const key of varNames) {
212
+ const opt = (_a = ctx.getPropertyOptions) == null ? void 0 : _a.call(ctx, key);
213
+ const meta = opt == null ? void 0 : opt.meta;
214
+ if (!meta) continue;
215
+ let built;
216
+ try {
217
+ const resolvedMeta = typeof meta === "function" ? await meta() : meta;
218
+ const builder = resolvedMeta == null ? void 0 : resolvedMeta.buildVariablesParams;
219
+ if (typeof builder === "function") {
220
+ built = await builder(ctx);
132
221
  }
222
+ } catch (err) {
223
+ continue;
224
+ }
225
+ if (built) {
226
+ input[key] = built;
133
227
  }
134
- return (0, import_serverContextParams.buildServerContextParams)(ctx, input);
135
- } catch (_) {
136
- return void 0;
137
228
  }
229
+ return (0, import_serverContextParams.buildServerContextParams)(ctx, input);
138
230
  }
139
231
  __name(collectContextParamsForTemplate, "collectContextParamsForTemplate");
140
232
  // Annotate the CommonJS export names for ESM import in node:
@@ -143,8 +235,12 @@ __name(collectContextParamsForTemplate, "collectContextParamsForTemplate");
143
235
  collectContextParamsForTemplate,
144
236
  createCurrentRecordMetaFactory,
145
237
  createRecordMetaFactory,
238
+ createRecordResolveOnServerWithLocal,
239
+ createViewRecordResolveOnServer,
146
240
  extractUsedVariableNames,
147
241
  extractUsedVariablePaths,
242
+ getViewRecordFromParent,
148
243
  inferParentRecordRef,
149
- inferRecordRef
244
+ inferRecordRef,
245
+ inferViewRecordRef
150
246
  });
@@ -42,12 +42,13 @@ __export(DrawerComponent_exports, {
42
42
  module.exports = __toCommonJS(DrawerComponent_exports);
43
43
  var import_antd = require("antd");
44
44
  var React = __toESM(require("react"));
45
+ var import_MobilePopup = require("../components/MobilePopup");
45
46
  const DrawerComponent = React.forwardRef((props, ref) => {
46
47
  var _a;
47
- const { children, footer: initialFooter, title, extra, hidden, ...drawerProps } = props;
48
+ const { children, footer: initialFooter, title, extra, hidden, isMobile, ...drawerProps } = props;
48
49
  const [open, setOpen] = React.useState(true);
49
50
  const [footer, setFooter] = React.useState(() => initialFooter);
50
- const [header, setHeader] = React.useState({ title, extra });
51
+ const [header, setHeader] = React.useState({ title, extra, ...drawerProps.header });
51
52
  React.useImperativeHandle(
52
53
  ref,
53
54
  () => ({
@@ -75,6 +76,24 @@ const DrawerComponent = React.forwardRef((props, ref) => {
75
76
  const container = React.useMemo(() => {
76
77
  return document.querySelector("#nocobase-app-container");
77
78
  }, []);
79
+ if (isMobile) {
80
+ return /* @__PURE__ */ React.createElement(
81
+ import_MobilePopup.MobilePopup,
82
+ {
83
+ className: hidden ? "nb-hidden" : "",
84
+ visible: open,
85
+ ...drawerProps,
86
+ footer,
87
+ ...header,
88
+ onClose: () => {
89
+ var _a2;
90
+ setOpen(false);
91
+ (_a2 = drawerProps.afterClose) == null ? void 0 : _a2.call(drawerProps);
92
+ }
93
+ },
94
+ children
95
+ );
96
+ }
78
97
  return /* @__PURE__ */ React.createElement(
79
98
  import_antd.Drawer,
80
99
  {
@@ -56,7 +56,8 @@ const PageComponent = (0, import_react.forwardRef)((props, ref) => {
56
56
  hidden,
57
57
  title: _title,
58
58
  styles = {},
59
- zIndex
59
+ zIndex = 4
60
+ // 这个默认值是为了防止表格的阴影显示到子页面上面
60
61
  } = mergedProps;
61
62
  const closedRef = (0, import_react.useRef)(false);
62
63
  const flowEngine = (0, import_provider.useFlowEngine)();
@@ -7,16 +7,10 @@
7
7
  * For more information, please refer to: https://www.nocobase.com/agreement.
8
8
  */
9
9
  import { FlowEngineContext } from '../flowContext';
10
- interface ViewParam {
11
- /** 视图唯一标识符,一般为某个 Model 实例的 uid */
10
+ import { ViewParam as SharedViewParam } from '../utils';
11
+ type ViewParam = Omit<SharedViewParam, 'viewUid'> & {
12
12
  viewUid?: string;
13
- /** 标签页唯一标识符 */
14
- tabUid?: string;
15
- /** 弹窗记录的 id */
16
- filterByTk?: string;
17
- /** source Id */
18
- sourceId?: string;
19
- }
13
+ };
20
14
  /**
21
15
  * 将 ViewParam 数组转换为 pathname
22
16
  *
@@ -31,6 +31,17 @@ __export(ViewNavigation_exports, {
31
31
  generatePathnameFromViewParams: () => generatePathnameFromViewParams
32
32
  });
33
33
  module.exports = __toCommonJS(ViewNavigation_exports);
34
+ function encodeFilterByTk(val) {
35
+ if (val === void 0 || val === null) return "";
36
+ if (val && typeof val === "object" && !Array.isArray(val)) {
37
+ const pairs = Object.entries(val).map(([k, v]) => {
38
+ return `${encodeURIComponent(String(k))}=${encodeURIComponent(String(v))}`;
39
+ });
40
+ return encodeURIComponent(pairs.join("&"));
41
+ }
42
+ return encodeURIComponent(String(val));
43
+ }
44
+ __name(encodeFilterByTk, "encodeFilterByTk");
34
45
  function generatePathnameFromViewParams(viewParams) {
35
46
  if (!viewParams || viewParams.length === 0) {
36
47
  return "/admin";
@@ -44,8 +55,11 @@ function generatePathnameFromViewParams(viewParams) {
44
55
  if (viewParam.tabUid) {
45
56
  segments.push("tab", viewParam.tabUid);
46
57
  }
47
- if (viewParam.filterByTk) {
48
- segments.push("filterbytk", viewParam.filterByTk);
58
+ if (viewParam.filterByTk != null) {
59
+ const encoded = encodeFilterByTk(viewParam.filterByTk);
60
+ if (encoded) {
61
+ segments.push("filterbytk", encoded);
62
+ }
49
63
  }
50
64
  if (viewParam.sourceId) {
51
65
  segments.push("sourceid", viewParam.sourceId);
@@ -7,10 +7,38 @@
7
7
  * For more information, please refer to: https://www.nocobase.com/agreement.
8
8
  */
9
9
  import type { FlowContext, PropertyMetaFactory } from '../flowContext';
10
+ import type { FlowView } from './FlowView';
10
11
  /**
11
12
  * Create a meta factory for ctx.view that includes:
12
13
  * - buildVariablesParams: { record } via inferRecordRef
13
14
  * - properties.record: full collection meta via buildRecordMeta
14
15
  * - type/preventClose/inputArgs/navigation fields for better variable selection UX
15
16
  */
16
- export declare function createViewMeta(ctx: FlowContext, getView: () => any): PropertyMetaFactory;
17
+ export declare function createViewMeta(ctx: FlowContext): PropertyMetaFactory;
18
+ /**
19
+ * 为 ctx.popup 构建元信息:
20
+ * - popup.record:当前弹窗记录(服务端解析)
21
+ * - popup.resource:数据源信息(前端解析)
22
+ * - popup.parent:上级弹窗(无限级,前端解析;不存在则禁用/为空)
23
+ */
24
+ export declare function createPopupMeta(ctx: FlowContext, anchorView?: FlowView): PropertyMetaFactory;
25
+ /**
26
+ * 根据视图堆栈构建 popup 运行时值(resource + parent 链)
27
+ */
28
+ interface PopupNodeResource {
29
+ dataSourceKey: string;
30
+ collectionName?: string;
31
+ filterByTk?: any;
32
+ sourceId?: any;
33
+ }
34
+ interface PopupNode {
35
+ uid?: string;
36
+ resource: PopupNodeResource;
37
+ parent?: PopupNode;
38
+ }
39
+ export declare function buildPopupRuntime(ctx: FlowContext, view: FlowView): Promise<PopupNode | undefined>;
40
+ /**
41
+ * 在视图上下文中注册 popup 变量(统一消除重复)
42
+ */
43
+ export declare function registerPopupVariable(ctx: FlowContext, view: FlowView): void;
44
+ export {};