@nocobase/plugin-workflow 2.2.0-alpha.1 → 2.2.0-alpha.11

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 (264) hide show
  1. package/client-v2.d.ts +2 -0
  2. package/client-v2.js +1 -0
  3. package/dist/client/119.e7dbd037d52d1286.js +10 -0
  4. package/dist/client/142.fb4936d78fc80007.js +10 -0
  5. package/dist/client/159.cc9a0f2d92cab2c1.js +10 -0
  6. package/dist/client/276.69fb2aea13bc7c37.js +10 -0
  7. package/dist/client/346.66d060d37843d3d1.js +10 -0
  8. package/dist/client/382.d37fba14a6b91b0b.js +10 -0
  9. package/dist/client/394.a37310b78419ad7a.js +10 -0
  10. package/dist/client/438.6c6409d821d8c353.js +10 -0
  11. package/dist/client/509.88792f5bd054b2af.js +10 -0
  12. package/dist/client/54.d81b710f7b4c1cd5.js +10 -0
  13. package/dist/client/618.1aa6c21d0f2840cb.js +10 -0
  14. package/dist/client/635.ff6085589e23d39b.js +10 -0
  15. package/dist/client/67.56a3d15a55ab7d5c.js +10 -0
  16. package/dist/client/719.f011fde3ad54571e.js +10 -0
  17. package/dist/client/728.711fd4f1ed7d4e6a.js +10 -0
  18. package/dist/client/739.49407722fca8d236.js +10 -0
  19. package/dist/client/759.13aab01e6912ed8d.js +10 -0
  20. package/dist/client/772.1ebaef11a0ac8688.js +10 -0
  21. package/dist/client/782.47792ce10fc0d5fb.js +10 -0
  22. package/dist/client/828.6880ab21513b1968.js +10 -0
  23. package/dist/client/87.083467b89aaf3e53.js +10 -0
  24. package/dist/client/938.26493fc09ba1ccbc.js +10 -0
  25. package/dist/client/964.5ab736effd480a42.js +10 -0
  26. package/dist/client/972.dd7f074d5f12e171.js +10 -0
  27. package/dist/client/AddNodeContext.d.ts +1 -9
  28. package/dist/client/Branch.d.ts +1 -1
  29. package/dist/client/BranchContext.d.ts +2 -10
  30. package/dist/client/FlowContext.d.ts +10 -5
  31. package/dist/client/NodeClipboardContext.d.ts +12 -2
  32. package/dist/client/NodeDragContext.d.ts +14 -2
  33. package/dist/client/RemoveNodeContext.d.ts +16 -2
  34. package/dist/client/index.d.ts +1 -1
  35. package/dist/client/index.js +1 -1
  36. package/dist/client/nodeVariableUtils.d.ts +7 -6
  37. package/dist/client/nodes/calculation.d.ts +3 -75
  38. package/dist/client/nodes/condition.d.ts +7 -111
  39. package/dist/client/nodes/create.d.ts +3 -124
  40. package/dist/client/nodes/destroy.d.ts +2 -57
  41. package/dist/client/nodes/end.d.ts +2 -23
  42. package/dist/client/nodes/index.d.ts +2 -91
  43. package/dist/client/nodes/multi-conditions.d.ts +10 -48
  44. package/dist/client/nodes/output.d.ts +2 -44
  45. package/dist/client/nodes/query.d.ts +3 -255
  46. package/dist/client/nodes/update.d.ts +2 -117
  47. package/dist/client/style.d.ts +7 -26
  48. package/dist/client/triggers/collection.d.ts +3 -154
  49. package/dist/client/triggers/index.d.ts +2 -36
  50. package/dist/client/triggers/schedule/index.d.ts +8 -65
  51. package/dist/client/utils.d.ts +4 -5
  52. package/dist/client/variable.d.ts +7 -53
  53. package/dist/client-v2/119.81195bcd0d451279.js +10 -0
  54. package/dist/client-v2/142.a8c8df2a9abb43c5.js +10 -0
  55. package/dist/client-v2/159.cb221540c286cd32.js +10 -0
  56. package/dist/client-v2/276.7f746d899e221e2f.js +10 -0
  57. package/dist/client-v2/326.bdc99ad8e7590970.js +10 -0
  58. package/dist/client-v2/346.8c038b3c99d4fdc9.js +10 -0
  59. package/dist/client-v2/382.05f5482bb512b179.js +10 -0
  60. package/dist/client-v2/387.5e61d648d16dbf1b.js +10 -0
  61. package/dist/client-v2/394.515ed058e7f72797.js +10 -0
  62. package/dist/client-v2/438.b7df0416b66f8f64.js +10 -0
  63. package/dist/client-v2/513.617697f74783a611.js +10 -0
  64. package/dist/client-v2/54.d3daf06e53092726.js +10 -0
  65. package/dist/client-v2/635.14a6f21cf4f16345.js +10 -0
  66. package/dist/client-v2/677.7382807126d9621a.js +10 -0
  67. package/dist/client-v2/719.05cf070ef89a78f4.js +10 -0
  68. package/dist/client-v2/728.4e8322ff8fce87b9.js +10 -0
  69. package/dist/client-v2/739.5b60845103064f8d.js +10 -0
  70. package/dist/client-v2/759.7b162ad3adf450f1.js +10 -0
  71. package/dist/client-v2/772.8e5148d8c1518449.js +10 -0
  72. package/dist/client-v2/938.717e47af39485b29.js +10 -0
  73. package/dist/client-v2/ExecutionCanvas.d.ts +15 -0
  74. package/dist/client-v2/canvas/AddNodeContext.d.ts +35 -0
  75. package/dist/client-v2/canvas/AddNodeContext.shared.d.ts +33 -0
  76. package/dist/client-v2/canvas/AddNodeSlot.d.ts +20 -0
  77. package/dist/client-v2/canvas/Branch.d.ts +32 -0
  78. package/dist/client-v2/canvas/BranchContext.d.ts +29 -0
  79. package/dist/client-v2/canvas/BranchRenderContext.d.ts +14 -0
  80. package/dist/client-v2/canvas/CanvasContent.d.ts +20 -0
  81. package/dist/client-v2/canvas/DownstreamBranchIndex.d.ts +20 -0
  82. package/dist/client-v2/canvas/Instruction.d.ts +139 -0
  83. package/dist/{client/triggers/schedule/EndsByField.d.ts → client-v2/canvas/JobButton.d.ts} +3 -3
  84. package/dist/client-v2/canvas/Node.d.ts +38 -0
  85. package/dist/client-v2/canvas/NodeClipboardContext.d.ts +64 -0
  86. package/dist/client-v2/canvas/NodeConfigDrawer.d.ts +27 -0
  87. package/dist/client-v2/canvas/NodeDragContext.d.ts +83 -0
  88. package/dist/client-v2/canvas/RemoveNodeContext.d.ts +45 -0
  89. package/dist/client-v2/canvas/WorkflowTypedVariableInput.d.ts +16 -0
  90. package/dist/client-v2/canvas/WorkflowVariableInput.d.ts +47 -0
  91. package/dist/client-v2/canvas/WorkflowVariableJsonTextArea.d.ts +15 -0
  92. package/dist/client-v2/canvas/WorkflowVariableTag.d.ts +22 -0
  93. package/dist/client-v2/canvas/WorkflowVariableTextArea.d.ts +23 -0
  94. package/dist/client-v2/canvas/adaptVariableOptionToMetaTree.d.ts +48 -0
  95. package/dist/client-v2/canvas/addNodeController.d.ts +70 -0
  96. package/dist/client-v2/canvas/collectionFieldOptions.d.ts +57 -0
  97. package/dist/client-v2/canvas/contexts.d.ts +86 -0
  98. package/dist/client-v2/canvas/dropImpact.d.ts +28 -0
  99. package/dist/client-v2/canvas/instructionAvailability.d.ts +26 -0
  100. package/dist/client-v2/canvas/nodeRenderDispatch.d.ts +79 -0
  101. package/dist/client-v2/canvas/nodeTree.d.ts +21 -0
  102. package/dist/client-v2/canvas/nodeVariableUtils.d.ts +14 -0
  103. package/dist/client-v2/canvas/removeNodeUtils.d.ts +31 -0
  104. package/dist/client-v2/canvas/style.d.ts +35 -0
  105. package/dist/client-v2/canvas/textAreaInsertion.d.ts +14 -0
  106. package/dist/client-v2/canvas/useWorkflowInstruction.d.ts +23 -0
  107. package/dist/client-v2/canvas/useWorkflowVariableOptions.d.ts +40 -0
  108. package/dist/client-v2/canvas/workflowVariableConverters.d.ts +13 -0
  109. package/dist/client-v2/components/Calculation.d.ts +18 -0
  110. package/dist/client-v2/components/ExecutionStatusIcon.d.ts +18 -0
  111. package/dist/{client/triggers/schedule/RepeatField.d.ts → client-v2/components/ExecutionStatusTag.d.ts} +3 -4
  112. package/dist/client-v2/components/ExecutionViewHeader.d.ts +29 -0
  113. package/dist/client-v2/components/ExecutionsDropdown.d.ts +25 -0
  114. package/dist/client-v2/components/FilterDynamicComponent.d.ts +28 -0
  115. package/dist/client-v2/components/HideVariableContext.d.ts +11 -0
  116. package/dist/client-v2/components/JobResultModal.d.ts +11 -0
  117. package/dist/client-v2/components/RadioWithTooltip.d.ts +23 -0
  118. package/dist/client-v2/components/SyncModeSelect.d.ts +16 -0
  119. package/dist/{client/triggers/schedule/OnField.d.ts → client-v2/components/SyncModeTag.d.ts} +3 -3
  120. package/dist/client-v2/components/TestRunButton.d.ts +36 -0
  121. package/dist/client-v2/components/TimeoutInput.d.ts +15 -0
  122. package/dist/client-v2/components/WorkflowCanvasHeader.d.ts +17 -0
  123. package/dist/client-v2/components/WorkflowDetailsModal.d.ts +25 -0
  124. package/dist/client-v2/components/WorkflowEnabledSwitch.d.ts +16 -0
  125. package/dist/client-v2/components/WorkflowMenu.d.ts +17 -0
  126. package/dist/client-v2/components/WorkflowRevisionsDropdown.d.ts +15 -0
  127. package/dist/client-v2/components/WorkflowVariableWrapper.d.ts +25 -0
  128. package/dist/client-v2/components/collection/AppendsSelect.d.ts +15 -0
  129. package/dist/client-v2/components/collection/AssignedFieldsEditor.d.ts +24 -0
  130. package/dist/client-v2/components/collection/CollectionCascader.d.ts +15 -0
  131. package/dist/client-v2/components/collection/FieldsSelect.d.ts +16 -0
  132. package/dist/client-v2/components/collection/PaginationFields.d.ts +14 -0
  133. package/dist/client-v2/components/collection/SortFieldsInput.d.ts +19 -0
  134. package/dist/client-v2/components/collection/TriggerCollectionRecordSelect.d.ts +15 -0
  135. package/dist/client-v2/components/collection/index.d.ts +16 -0
  136. package/dist/client-v2/components/collection/utils.d.ts +42 -0
  137. package/dist/client-v2/components/formatResultForDisplay.d.ts +17 -0
  138. package/dist/client-v2/components/jobStatus.d.ts +27 -0
  139. package/dist/client-v2/components/renderEngineReference.d.ts +10 -0
  140. package/dist/client-v2/components/workflowCanvas.d.ts +41 -0
  141. package/dist/client-v2/constants.d.ts +19 -0
  142. package/dist/client-v2/hooks/useWorkflowRuntimePaths.d.ts +16 -0
  143. package/dist/client-v2/index.d.ts +48 -0
  144. package/dist/client-v2/index.js +10 -0
  145. package/dist/client-v2/locale.d.ts +41 -0
  146. package/dist/{client → client-v2}/models/NodeDetailsGridModel.d.ts +1 -1
  147. package/dist/{client → client-v2}/models/NodeDetailsModel.d.ts +1 -1
  148. package/dist/{client → client-v2}/models/NodeValueModel.d.ts +1 -1
  149. package/dist/{client → client-v2}/models/TaskCardCommonItemModel.d.ts +1 -1
  150. package/dist/client-v2/models/WorkflowTasksTopbarActionModel.d.ts +18 -0
  151. package/dist/{client → client-v2}/models/index.d.ts +2 -0
  152. package/dist/client-v2/models/triggerWorkflows.d.ts +43 -0
  153. package/dist/client-v2/nodes/calculation.d.ts +38 -0
  154. package/dist/client-v2/nodes/collectionNode.d.ts +29 -0
  155. package/dist/client-v2/nodes/components/calculation.d.ts +11 -0
  156. package/dist/client-v2/nodes/components/collection.d.ts +15 -0
  157. package/dist/client-v2/nodes/components/condition.d.ts +25 -0
  158. package/dist/client-v2/nodes/components/conditionShared.d.ts +20 -0
  159. package/dist/client-v2/nodes/components/create.d.ts +12 -0
  160. package/dist/client-v2/nodes/components/destroy.d.ts +12 -0
  161. package/dist/{client/triggers/schedule/ScheduleConfig.d.ts → client-v2/nodes/components/end.d.ts} +1 -1
  162. package/dist/client-v2/nodes/components/filter.d.ts +17 -0
  163. package/dist/client-v2/nodes/components/multi-conditions.d.ts +13 -0
  164. package/dist/client-v2/nodes/components/multiConditionsShared.d.ts +20 -0
  165. package/dist/client-v2/nodes/components/output.d.ts +10 -0
  166. package/dist/client-v2/nodes/components/query.d.ts +12 -0
  167. package/dist/client-v2/nodes/components/update.d.ts +12 -0
  168. package/dist/client-v2/nodes/condition.d.ts +46 -0
  169. package/dist/client-v2/nodes/create.d.ts +30 -0
  170. package/dist/client-v2/nodes/destroy.d.ts +24 -0
  171. package/dist/client-v2/nodes/end.d.ts +21 -0
  172. package/dist/client-v2/nodes/multi-conditions.d.ts +34 -0
  173. package/dist/client-v2/nodes/output.d.ts +29 -0
  174. package/dist/client-v2/nodes/query.d.ts +32 -0
  175. package/dist/client-v2/nodes/update.d.ts +25 -0
  176. package/dist/client-v2/pages/ExecutionHistoryDrawer.d.ts +13 -0
  177. package/dist/client-v2/pages/ExecutionViewPage.d.ts +10 -0
  178. package/dist/client-v2/pages/WorkflowCanvasPage.d.ts +10 -0
  179. package/dist/client-v2/pages/WorkflowCategoryTabs.d.ts +25 -0
  180. package/dist/client-v2/pages/WorkflowFormDrawer.d.ts +40 -0
  181. package/dist/client-v2/pages/WorkflowPane.d.ts +10 -0
  182. package/dist/client-v2/pages/WorkflowTasksPage.d.ts +10 -0
  183. package/dist/client-v2/plugin.d.ts +119 -0
  184. package/dist/client-v2/taskCenter.d.ts +105 -0
  185. package/dist/client-v2/triggers/ExecuteWorkflowButton.d.ts +35 -0
  186. package/dist/client-v2/triggers/TriggerConfig.d.ts +22 -0
  187. package/dist/client-v2/triggers/TriggerExecutionButton.d.ts +13 -0
  188. package/dist/client-v2/triggers/collection/CollectionConfig.d.ts +14 -0
  189. package/dist/client-v2/triggers/collection/TriggerCollectionConfig.d.ts +11 -0
  190. package/dist/client-v2/triggers/collection/constants.d.ts +28 -0
  191. package/dist/client-v2/triggers/collection/index.d.ts +40 -0
  192. package/dist/client-v2/triggers/index.d.ts +63 -0
  193. package/dist/client-v2/triggers/schedule/EndsByField.d.ts +17 -0
  194. package/dist/client-v2/triggers/schedule/OnField.d.ts +20 -0
  195. package/dist/client-v2/triggers/schedule/RepeatField.d.ts +23 -0
  196. package/dist/client-v2/triggers/schedule/ScheduleConfig.d.ts +17 -0
  197. package/dist/client-v2/triggers/schedule/ScheduleModes.d.ts +41 -0
  198. package/dist/{client → client-v2}/triggers/schedule/TriggerScheduleConfig.d.ts +1 -0
  199. package/dist/{client → client-v2}/triggers/schedule/constants.d.ts +8 -5
  200. package/dist/client-v2/triggers/schedule/index.d.ts +40 -0
  201. package/dist/client-v2/triggers/schedule/locale/Cron.zh-CN.d.ts +11 -0
  202. package/dist/client-v2/utils/contextSingleton.d.ts +9 -0
  203. package/dist/common/collections/workflows.d.ts +16 -0
  204. package/dist/common/collections/workflows.js +5 -0
  205. package/dist/common/defaultWorkflowFilter.d.ts +21 -0
  206. package/dist/common/defaultWorkflowFilter.js +38 -0
  207. package/dist/common/executionStatus.d.ts +44 -0
  208. package/dist/common/executionStatus.js +133 -0
  209. package/dist/externalVersion.js +16 -12
  210. package/dist/locale/de-DE.json +16 -1
  211. package/dist/locale/en-US.json +31 -2
  212. package/dist/locale/es-ES.json +16 -1
  213. package/dist/locale/fr-FR.json +16 -1
  214. package/dist/locale/hu-HU.json +16 -1
  215. package/dist/locale/id-ID.json +16 -1
  216. package/dist/locale/it-IT.json +16 -1
  217. package/dist/locale/ja-JP.json +16 -1
  218. package/dist/locale/ko-KR.json +16 -1
  219. package/dist/locale/nl-NL.json +16 -1
  220. package/dist/locale/pt-BR.json +16 -1
  221. package/dist/locale/ru-RU.json +16 -1
  222. package/dist/locale/tr-TR.json +16 -1
  223. package/dist/locale/uk-UA.json +16 -1
  224. package/dist/locale/vi-VN.json +16 -1
  225. package/dist/locale/zh-CN.json +30 -2
  226. package/dist/locale/zh-TW.json +22 -1
  227. package/dist/node_modules/cron-parser/package.json +1 -1
  228. package/dist/node_modules/joi/package.json +1 -1
  229. package/dist/node_modules/lru-cache/package.json +1 -1
  230. package/dist/node_modules/nodejs-snowflake/package.json +1 -1
  231. package/dist/server/Dispatcher.d.ts +27 -14
  232. package/dist/server/Dispatcher.js +208 -154
  233. package/dist/server/ExecutionTimeoutManager.js +4 -3
  234. package/dist/server/Plugin.d.ts +17 -8
  235. package/dist/server/Plugin.js +58 -13
  236. package/dist/server/Processor.d.ts +17 -7
  237. package/dist/server/Processor.js +112 -0
  238. package/dist/server/actions/executions.js +3 -6
  239. package/dist/server/actions/jobs.js +1 -2
  240. package/dist/server/actions/nodes.js +36 -1
  241. package/dist/server/actions/workflows.d.ts +1 -0
  242. package/dist/server/actions/workflows.js +17 -2
  243. package/dist/server/index.d.ts +1 -1
  244. package/dist/server/instructions/CreateInstruction.js +6 -2
  245. package/dist/server/instructions/DestroyInstruction.js +2 -1
  246. package/dist/server/instructions/QueryInstruction.js +2 -1
  247. package/dist/server/instructions/UpdateInstruction.js +2 -1
  248. package/dist/server/triggers/CollectionTrigger.d.ts +6 -1
  249. package/dist/server/triggers/CollectionTrigger.js +29 -1
  250. package/dist/server/triggers/ScheduleTrigger/StaticScheduleTrigger.d.ts +1 -1
  251. package/dist/server/triggers/index.d.ts +1 -1
  252. package/dist/server/types/Execution.d.ts +2 -0
  253. package/dist/server/types/Job.d.ts +5 -0
  254. package/dist/server/types/Workflow.d.ts +1 -0
  255. package/dist/server/utils.d.ts +2 -1
  256. package/dist/server/utils.js +46 -28
  257. package/dist/swagger/index.d.ts +1 -0
  258. package/dist/swagger/index.js +4 -2
  259. package/package.json +4 -2
  260. package/dist/client/618.19af7f84261c815d.js +0 -10
  261. package/dist/client/67.452743ce8ec30617.js +0 -10
  262. package/dist/client/964.ffbf5b47ed12bbdc.js +0 -10
  263. package/dist/client/triggers/schedule/ScheduleModes.d.ts +0 -170
  264. package/dist/client/triggers/schedule/locale/Cron.zh-CN.d.ts +0 -42
@@ -46,6 +46,7 @@ var import_database = require("@nocobase/database");
46
46
  var import_data_source_manager = require("@nocobase/data-source-manager");
47
47
  var import__ = __toESM(require("."));
48
48
  var import_utils2 = require("../utils");
49
+ var import_constants = require("../constants");
49
50
  const MODE_BITMAP = {
50
51
  CREATE: 1,
51
52
  UPDATE: 2,
@@ -96,6 +97,7 @@ class CollectionTrigger extends import__.default {
96
97
  otherwise: import_joi.default.forbidden()
97
98
  }),
98
99
  condition: import_joi.default.object(),
100
+ rollbackOnFailure: import_joi.default.boolean().optional(),
99
101
  appends: import_joi.default.when("mode", {
100
102
  is: (mode) => mode !== MODE_BITMAP.DESTROY,
101
103
  then: import_joi.default.array().items(import_joi.default.string()).optional(),
@@ -112,6 +114,7 @@ class CollectionTrigger extends import__.default {
112
114
  events = /* @__PURE__ */ new Map();
113
115
  // async function, should return promise
114
116
  static async handler(workflowId, eventType, data, options) {
117
+ var _a, _b;
115
118
  const workflow = this.workflow.enabledCache.get(workflowId);
116
119
  const { skipWorkflow = false, stack } = options.context ?? {};
117
120
  if (skipWorkflow) {
@@ -130,10 +133,25 @@ class CollectionTrigger extends import__.default {
130
133
  });
131
134
  return;
132
135
  }
133
- await this.workflow.trigger(workflow, ctx, {
136
+ const processor = await this.workflow.trigger(workflow, ctx, {
134
137
  transaction,
135
138
  stack
136
139
  });
140
+ const execution = processor ? processor.execution : null;
141
+ const lastSavedJob = processor ? processor.lastSavedJob : null;
142
+ if (workflow.config.rollbackOnFailure && (!execution || execution.status < import_constants.EXECUTION_STATUS.STARTED)) {
143
+ this.workflow.getLogger(workflow.id).error("[CollectionTrigger] source operation rolled back because sync workflow failed", {
144
+ workflowId: workflow.id,
145
+ workflowKey: workflow.key,
146
+ workflowTitle: workflow.title,
147
+ executionId: execution == null ? void 0 : execution.id,
148
+ executionStatus: execution == null ? void 0 : execution.status,
149
+ lastJobId: lastSavedJob == null ? void 0 : lastSavedJob.id,
150
+ lastJobStatus: lastSavedJob == null ? void 0 : lastSavedJob.status,
151
+ lastJobResult: lastSavedJob == null ? void 0 : lastSavedJob.result
152
+ });
153
+ throw this.createRollbackOnFailureError((_b = (_a = options.context) == null ? void 0 : _a.getCurrentLocale) == null ? void 0 : _b.call(_a));
154
+ }
137
155
  } else {
138
156
  if (transaction) {
139
157
  transaction.afterCommit(() => {
@@ -144,6 +162,13 @@ class CollectionTrigger extends import__.default {
144
162
  }
145
163
  }
146
164
  }
165
+ createRollbackOnFailureError(locale) {
166
+ const message = this.workflow.t("System process failed, please contact administrator.", locale ? { lng: locale } : {}).toString();
167
+ const error = new Error(message);
168
+ error.status = 422;
169
+ error.code = "WORKFLOW_ROLLBACK_ON_FAILURE";
170
+ return error;
171
+ }
147
172
  async prepare(workflow, data, options) {
148
173
  const { condition, changed, mode, appends } = workflow.config;
149
174
  const [dataSourceName, collectionName] = (0, import_data_source_manager.parseCollectionName)(workflow.config.collection);
@@ -280,6 +305,9 @@ class CollectionTrigger extends import__.default {
280
305
  // }
281
306
  async execute(workflow, values, options) {
282
307
  const ctx = await this.prepare(workflow, values == null ? void 0 : values.data, options);
308
+ if (!ctx) {
309
+ return null;
310
+ }
283
311
  const [dataSourceName] = (0, import_data_source_manager.parseCollectionName)(workflow.config.collection);
284
312
  const { transaction } = options;
285
313
  return this.workflow.trigger(workflow, ctx, {
@@ -20,5 +20,5 @@ export default class StaticScheduleTrigger {
20
20
  trigger(workflow: WorkflowModel, time: number): Promise<void>;
21
21
  on(workflow: any): void;
22
22
  off(workflow: any): void;
23
- execute(workflow: any, values: any, options: any): void | Promise<import("../..").Processor>;
23
+ execute(workflow: any, values: any, options: any): void | Promise<void | import("../..").Processor>;
24
24
  }
@@ -26,6 +26,6 @@ export declare abstract class Trigger {
26
26
  [key: string]: string;
27
27
  };
28
28
  sync?: boolean;
29
- execute?(workflow: WorkflowModel, values: any, options: Transactionable): void | Processor | Promise<void | Processor>;
29
+ execute?(workflow: WorkflowModel, values: any, options: Transactionable): void | Processor | null | Promise<void | Processor | null>;
30
30
  }
31
31
  export default Trigger;
@@ -12,11 +12,13 @@ import WorkflowModel from './Workflow';
12
12
  export default class ExecutionModel extends Model {
13
13
  static readonly database: Database;
14
14
  id: number;
15
+ workflowId: number;
15
16
  title: string;
16
17
  context: any;
17
18
  status: number;
18
19
  reason?: string | null;
19
20
  dispatched: boolean;
21
+ manually?: boolean | null;
20
22
  parentExecutionId?: number | null;
21
23
  stack?: Array<number | string>;
22
24
  startedAt?: Date | null;
@@ -8,8 +8,11 @@
8
8
  */
9
9
  import { BelongsToGetAssociationMixin, Model } from '@nocobase/database';
10
10
  import FlowNodeModel from './FlowNode';
11
+ import ExecutionModel from './Execution';
11
12
  export default class JobModel extends Model {
12
13
  id: number;
14
+ executionId: number;
15
+ workflowId?: number;
13
16
  status: number;
14
17
  result?: any;
15
18
  meta?: any;
@@ -20,4 +23,6 @@ export default class JobModel extends Model {
20
23
  nodeId: number;
21
24
  node?: FlowNodeModel;
22
25
  getNode: BelongsToGetAssociationMixin<FlowNodeModel>;
26
+ execution?: ExecutionModel;
27
+ getExecution: BelongsToGetAssociationMixin<ExecutionModel>;
23
28
  }
@@ -19,6 +19,7 @@ export default class WorkflowModel extends Model {
19
19
  description?: string;
20
20
  type: string;
21
21
  config: any;
22
+ invalid: boolean;
22
23
  options: {
23
24
  timeout?: number;
24
25
  stackLimit?: number;
@@ -16,6 +16,7 @@ type AbortOptions = Transactionable & {
16
16
  reason?: (typeof EXECUTION_REASON)[keyof typeof EXECUTION_REASON];
17
17
  };
18
18
  export declare function getExecutionLockKey(executionId: number | string): string;
19
+ export declare function getJobLockKey(jobId: number | string): string;
19
20
  export declare function isLockAcquireError(error: unknown): boolean;
20
21
  export declare function validateCollectionField(collection: string, dataSourceManager: DataSourceManager): Record<string, string> | null;
21
22
  export declare function getExecutionStatusName(status: number | null | undefined): string;
@@ -32,5 +33,5 @@ export declare function getWorkflowExecutionLogMeta(workflow: WorkflowModel, pro
32
33
  lastJobStatus: number;
33
34
  };
34
35
  export declare function abortExecution(plugin: PluginWorkflowServer, execution: ExecutionModel, options?: AbortOptions): Promise<boolean>;
35
- export declare function toJSON(data: any): any;
36
+ export declare function toJSON<T>(data: T): T;
36
37
  export {};
@@ -29,6 +29,7 @@ __export(utils_exports, {
29
29
  abortExecution: () => abortExecution,
30
30
  getExecutionLockKey: () => getExecutionLockKey,
31
31
  getExecutionStatusName: () => getExecutionStatusName,
32
+ getJobLockKey: () => getJobLockKey,
32
33
  getWorkflowExecutionLogMeta: () => getWorkflowExecutionLogMeta,
33
34
  isLockAcquireError: () => isLockAcquireError,
34
35
  toJSON: () => toJSON,
@@ -41,6 +42,9 @@ var import_constants = require("./constants");
41
42
  function getExecutionLockKey(executionId) {
42
43
  return `workflow:execution:${executionId}`;
43
44
  }
45
+ function getJobLockKey(jobId) {
46
+ return `workflow:job:${jobId}`;
47
+ }
44
48
  function isLockAcquireError(error) {
45
49
  return error instanceof Error && error.constructor.name === "LockAcquireError";
46
50
  }
@@ -95,33 +99,34 @@ async function abortExecution(plugin, execution, options = {}) {
95
99
  const ExecutionRepo = plugin.db.getRepository("executions");
96
100
  const JobRepo = plugin.db.getRepository("jobs");
97
101
  try {
102
+ if (!transaction) {
103
+ return plugin.db.sequelize.transaction(
104
+ (transaction2) => abortExecution(plugin, execution, {
105
+ ...options,
106
+ transaction: transaction2
107
+ })
108
+ );
109
+ }
98
110
  const abortValues = {
99
111
  status: import_constants.EXECUTION_STATUS.ABORTED,
100
112
  ...options.reason ? {
101
113
  reason: options.reason
102
114
  } : {}
103
115
  };
104
- if (transaction) {
105
- const lockedExecution = await ExecutionRepo.findOne({
106
- filterByTk: execution.id,
107
- transaction,
108
- lock: transaction.LOCK.UPDATE
109
- });
110
- if (!lockedExecution || lockedExecution.status !== import_constants.EXECUTION_STATUS.STARTED) {
111
- return false;
112
- }
113
- await lockedExecution.update(abortValues, { transaction });
114
- } else {
115
- const [affected] = await ExecutionRepo.model.update(abortValues, {
116
- where: {
117
- id: execution.id,
118
- status: import_constants.EXECUTION_STATUS.STARTED
119
- },
120
- individualHooks: true
121
- });
122
- if (!affected) {
123
- return false;
124
- }
116
+ const expectedStatus = typeof execution.status === "undefined" ? import_constants.EXECUTION_STATUS.STARTED : execution.status;
117
+ if (![import_constants.EXECUTION_STATUS.QUEUEING, import_constants.EXECUTION_STATUS.STARTED].includes(expectedStatus)) {
118
+ return false;
119
+ }
120
+ const [affected] = await ExecutionRepo.model.update(abortValues, {
121
+ where: {
122
+ id: execution.id,
123
+ status: expectedStatus
124
+ },
125
+ individualHooks: true,
126
+ transaction
127
+ });
128
+ if (!affected) {
129
+ return false;
125
130
  }
126
131
  const updated = await JobRepo.update({
127
132
  values: {
@@ -137,11 +142,14 @@ async function abortExecution(plugin, execution, options = {}) {
137
142
  const childExecutions = await plugin.db.getRepository("executions").find({
138
143
  filter: {
139
144
  parentExecutionId: execution.id,
140
- status: import_constants.EXECUTION_STATUS.STARTED
145
+ status: [import_constants.EXECUTION_STATUS.QUEUEING, import_constants.EXECUTION_STATUS.STARTED]
141
146
  },
142
147
  transaction
143
148
  });
144
149
  for (const child of childExecutions) {
150
+ if (![import_constants.EXECUTION_STATUS.QUEUEING, import_constants.EXECUTION_STATUS.STARTED].includes(child.status)) {
151
+ continue;
152
+ }
145
153
  await abortExecution(plugin, child, { transaction, reason: import_constants.EXECUTION_REASON.PARENT_ABORTED });
146
154
  }
147
155
  const updateLocalState = () => {
@@ -150,11 +158,7 @@ async function abortExecution(plugin, execution, options = {}) {
150
158
  plugin.timeoutManager.clear(execution.id);
151
159
  plugin.abortRunningExecution(execution.id, options.reason);
152
160
  };
153
- if (transaction) {
154
- afterTransactionCommit(transaction, updateLocalState);
155
- } else {
156
- updateLocalState();
157
- }
161
+ afterTransactionCommit(transaction, updateLocalState);
158
162
  logger.info(`execution (${execution.id}) aborted`, {
159
163
  workflowId: execution.workflowId,
160
164
  pendingJobs: Array.isArray(updated) ? updated.length : updated
@@ -164,6 +168,16 @@ async function abortExecution(plugin, execution, options = {}) {
164
168
  throw error;
165
169
  }
166
170
  }
171
+ function getHiddenFieldNames(model) {
172
+ const { collection } = model.constructor;
173
+ if (!(collection == null ? void 0 : collection.fields)) {
174
+ return [];
175
+ }
176
+ return Array.from(collection.fields.values()).filter((field) => {
177
+ var _a;
178
+ return (_a = field == null ? void 0 : field.options) == null ? void 0 : _a.hidden;
179
+ }).map((field) => field.options.name).filter((name) => typeof name === "string");
180
+ }
167
181
  function toJSON(data) {
168
182
  if (Array.isArray(data)) {
169
183
  return data.map(toJSON);
@@ -171,7 +185,10 @@ function toJSON(data) {
171
185
  if (!(data instanceof import_database.Model) || !data) {
172
186
  return data;
173
187
  }
174
- const result = data.get();
188
+ const result = { ...data.get() };
189
+ for (const fieldName of getHiddenFieldNames(data)) {
190
+ delete result[fieldName];
191
+ }
175
192
  Object.keys(data.constructor.associations).forEach((key) => {
176
193
  if (result[key] != null && typeof result[key] === "object") {
177
194
  result[key] = toJSON(result[key]);
@@ -184,6 +201,7 @@ function toJSON(data) {
184
201
  abortExecution,
185
202
  getExecutionLockKey,
186
203
  getExecutionStatusName,
204
+ getJobLockKey,
187
205
  getWorkflowExecutionLogMeta,
188
206
  isLockAcquireError,
189
207
  toJSON,
@@ -428,6 +428,7 @@ declare const _default: {
428
428
  properties: {
429
429
  execution: {
430
430
  type: string;
431
+ nullable: boolean;
431
432
  properties: {
432
433
  id: {
433
434
  type: string;
@@ -394,7 +394,8 @@ var swagger_default = {
394
394
  "**autoRevision:** When set to `1`, if the workflow has never been executed",
395
395
  "(`executed === 0`), a new revision is created automatically after execution.",
396
396
  "",
397
- "**Returns:** `{ execution: { id, status }, newVersionId? }`"
397
+ "**Returns:** `{ execution: { id, status } | null, newVersionId? }`.",
398
+ "`execution` is `null` when the request is valid but no execution is started."
398
399
  ].join("\n"),
399
400
  parameters: [
400
401
  {
@@ -433,6 +434,7 @@ var swagger_default = {
433
434
  properties: {
434
435
  execution: {
435
436
  type: "object",
437
+ nullable: true,
436
438
  properties: {
437
439
  id: { type: "integer", description: "Execution ID" },
438
440
  status: { type: "integer", description: "Execution status code" }
@@ -449,7 +451,7 @@ var swagger_default = {
449
451
  }
450
452
  },
451
453
  400: {
452
- description: "Bad Request. Request body or `filterByTk` is missing/invalid, or workflow not triggered."
454
+ description: "Bad Request. Request body or `filterByTk` is missing/invalid."
453
455
  },
454
456
  404: { description: "Not Found. Workflow does not exist." }
455
457
  }
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "description": "A powerful BPM tool that provides foundational support for business automation, with the capability to extend unlimited triggers and nodes.",
7
7
  "description.zh-CN": "一个强大的 BPM 工具,为业务自动化提供基础支持,并且可任意扩展更多的触发器和节点。",
8
8
  "description.ru-RU": "Мощный инструмент BPM, обеспечивающий базовую поддержку автоматизации бизнес-процессов с возможностью неограниченного расширения триггеров и узлов.",
9
- "version": "2.2.0-alpha.1",
9
+ "version": "2.2.0-alpha.11",
10
10
  "license": "Apache-2.0",
11
11
  "main": "./dist/server/index.js",
12
12
  "homepage": "https://docs.nocobase.com/handbook/workflow",
@@ -18,6 +18,7 @@
18
18
  "@formily/core": "2.x",
19
19
  "@formily/react": "2.x",
20
20
  "@types/ejs": "^3.1.1",
21
+ "ahooks": "^3.7.2",
21
22
  "antd": "5.x",
22
23
  "classnames": "^2.3.1",
23
24
  "cron-parser": "4.4.0",
@@ -36,6 +37,7 @@
36
37
  "peerDependencies": {
37
38
  "@nocobase/actions": "2.x",
38
39
  "@nocobase/client": "2.x",
40
+ "@nocobase/client-v2": "2.x",
39
41
  "@nocobase/database": "2.x",
40
42
  "@nocobase/evaluators": "2.x",
41
43
  "@nocobase/logger": "2.x",
@@ -49,7 +51,7 @@
49
51
  "@nocobase/test": "2.x",
50
52
  "@nocobase/utils": "2.x"
51
53
  },
52
- "gitHead": "303663aba6c6eefa27e6a6435b4c0352074ec40f",
54
+ "gitHead": "c9ff1f51e5c33bc6437b64eb779212be71b78f58",
53
55
  "keywords": [
54
56
  "Workflow"
55
57
  ]
@@ -1,10 +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
- "use strict";(self.webpackChunk_nocobase_plugin_workflow=self.webpackChunk_nocobase_plugin_workflow||[]).push([["618"],{5705:function(e,t,r){r.r(t),r.d(t,{WorkflowPane:function(){return eO}});var n,o,i=r(9155),c=r.n(i),a=r(2059),l=r(9452),u=r(5230),s=r(3342),p=r(4421);function m(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}function d(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e}var f=function(e){var t,r=e.request,n=(e.filter,function(e,t){if(null==e)return{};var r,n,o,i={};if("u">typeof Reflect&&Reflect.ownKeys){for(o=0,r=Reflect.ownKeys(Object(e));o<r.length;o++)n=r[o],!(t.indexOf(n)>=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n]);return i}if(i=function(e,t){if(null==e)return{};var r,n,o={},i=Object.getOwnPropertyNames(e);for(n=0;n<i.length;n++)r=i[n],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r]);return o}(e,t),Object.getOwnPropertySymbols)for(o=0,r=Object.getOwnPropertySymbols(e);o<r.length;o++)n=r[o],!(t.indexOf(n)>=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n]);return i}(e,["request","filter"])),o=(0,s.useRecord)(),i=d(m({},n),{request:d(m({},r),{params:d(m({disableDefaultAppends:!0},null==r?void 0:r.params),{filter:d(m({},null==r||null==(t=r.params)?void 0:t.filter),{key:o.key})})})});return c().createElement(s.ResourceActionProvider,i)},y=r(5953),b=r(4442),v=r(6072),g=function(){var e=(0,y.useTranslation)().t,t=(0,s.useRecord)().id,r=(0,s.useActionContext)().setVisible,n=(0,s.useGetAriaLabelOfAction)("Configure").getAriaLabel;return c().createElement(b.Link,{"aria-label":n(),to:(0,v.Yz)(t),onClick:function(){return r(!1)}},e("Configure"))};function x(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function h(e){var t,r,n,o=e.component,a=e.children,l=function(e,t){if(null==e)return{};var r,n,o,i={};if("u">typeof Reflect&&Reflect.ownKeys){for(o=0,r=Reflect.ownKeys(Object(e));o<r.length;o++)n=r[o],!(t.indexOf(n)>=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n]);return i}if(i=function(e,t){if(null==e)return{};var r,n,o={},i=Object.getOwnPropertyNames(e);for(n=0;n<i.length;n++)r=i[n],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r]);return o}(e,t),Object.getOwnPropertySymbols)for(o=0,r=Object.getOwnPropertySymbols(e);o<r.length;o++)n=r[o],!(t.indexOf(n)>=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n]);return i}(e,["component","children"]),p=function(e){if(Array.isArray(e))return e}(t=(0,i.useState)(!1))||function(e){var t,r,n=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var o=[],i=!0,c=!1;try{for(n=n.call(e);!(i=(t=n.next()).done)&&(o.push(t.value),2!==o.length);i=!0);}catch(e){c=!0,r=e}finally{try{i||null==n.return||n.return()}finally{if(c)throw r}}return o}}(t)||function(e){if(e){if("string"==typeof e)return x(e,2);var t=Object.prototype.toString.call(e).slice(8,-1);if("Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t)return Array.from(t);if("Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return x(e,2)}}(t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),m=p[0],d=p[1],f=(0,u.useFieldSchema)();return c().createElement(s.ActionContextProvider,{value:{visible:m,setVisible:d,fieldSchema:f}},c().createElement(void 0===o?"div":o,(r=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({},l),n=n={onClick:function(){d(!0)}},Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(n)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(e){Object.defineProperty(r,e,Object.getOwnPropertyDescriptor(n,e))}),r),a),c().createElement(s.SchemaComponent,{schema:f,onlyRenderProperties:!0}))}var O=r(3872),w=r(6481),C=r(7428),A=r(5827),S=r(2662);function P(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}var j={title:{"x-component":"CollectionField","x-decorator":"FormItem"},type:{"x-decorator":"FormItem",title:'{{t("Trigger type", { ns: "'.concat(O.CU,'" })}}'),"x-component":"Select","x-component-props":{optionRender:"{{TriggerOptionRender}}",popupMatchSelectWidth:!0,listHeight:300},enum:"{{useTriggersOptions()}}",required:!0},sync:{type:"boolean",title:'{{ t("Execute mode", { ns: "'.concat(O.CU,'" }) }}'),description:'{{ t("Execute workflow asynchronously or synchronously based on trigger type, and could not be changed after created.", { ns: "'.concat(O.CU,'" }) }}'),"x-decorator":"FormItem","x-component":"SyncOptionSelect","x-component-props":{options:[{label:'{{ t("Asynchronously", { ns: "'.concat(O.CU,'" }) }}'),value:!1,tooltip:'{{ t("Will be executed in the background as a queued task.", { ns: "'.concat(O.CU,'" }) }}')},{label:'{{ t("Synchronously", { ns: "'.concat(O.CU,'" }) }}'),value:!0,tooltip:'{{ t("For user actions that require immediate feedback. Can not use asynchronous nodes in such mode, and it is not recommended to perform time-consuming operations under synchronous mode.", { ns: "'.concat(O.CU,'" }) }}')}]}},triggerPreset:{type:"void","x-component":"TriggerPresetFieldset"},enabled:{"x-component":"CollectionField","x-decorator":"FormItem"},description:{"x-component":"CollectionField","x-decorator":"FormItem"},categories:{type:"array",title:'{{ t("Category", { ns: "'.concat(O.CU,'" }) }}'),"x-decorator":"FormItem","x-component":"CollectionField","x-collection-field":"workflows.categories"},options:{type:"object","x-decorator":"FormItem",title:'{{ t("Advance options", { ns: "'.concat(O.CU,'" }) }}'),"x-component":"Fieldset",properties:{timeout:{type:"number",title:'{{ t("Timeout settings", { ns: "'.concat(O.CU,'" }) }}'),description:'{{ t("0 means unlimited. If you set any other value and the execution is still not completed when the timeout is reached, the execution plan will be terminated and the remaining nodes will not be executed. Time spent in queue is not counted; timing starts only after it first enters a processor.", { ns: "'.concat(O.CU,'" }) }}'),"x-decorator":"FormItem","x-component":"TimeoutInput",default:0},stackLimit:{type:"number",title:'{{ t("Maximum number of cycling triggers", { ns: "'.concat(O.CU,'" }) }}'),description:'{{ t("The triggers of same workflow by some node (create, update and sub-flow etc.) more than this number will be ignored. Large number may cause performance issues. Please use with caution.", { ns: "'.concat(O.CU,'" }) }}'),"x-decorator":"FormItem",default:1,"x-component":"InputNumber","x-component-props":{min:1,precision:0,className:"auto-width"}},deleteExecutionOnStatus:{type:"array",title:'{{ t("Auto delete history when execution is on end status", { ns: "'.concat(O.CU,'" }) }}'),"x-decorator":"FormItem","x-component":"Select","x-component-props":{multiple:!0,optionRender:S.Qg,tagRender:S.lP},enum:C.$A.filter(function(e){return!!e.value})}}}},E={name:"workflow",type:"void",properties:{provider:{type:"void","x-decorator":"ResourceActionProvider","x-decorator-props":{collection:A.A,resourceName:"workflows",request:{resource:"workflows",action:"list",params:{filter:{current:!0},sort:["-createdAt"],except:["config"]}}},"x-component":"CategoryTabs",properties:{main:{type:"void","x-component":"CardItem",properties:{actions:{type:"void","x-component":"ActionBar","x-component-props":{style:{marginBottom:16}},properties:{filter:{type:"void",title:'{{ t("Filter") }}',default:{$and:[{title:{$includes:""}}]},"x-action":"filter","x-component":"Filter.Action","x-use-component-props":"useResourceFilterActionProps","x-component-props":{icon:"FilterOutlined",nonfilterable:["id","description","categories"]},"x-align":"left"},refresher:{type:"void",title:'{{ t("Refresh") }}',"x-component":"Action","x-use-component-props":"useRefreshActionProps","x-component-props":{icon:"ReloadOutlined"}},sync:{type:"void",title:'{{t("Sync", { ns: "'.concat(O.CU,'" })}}'),"x-decorator":"Tooltip","x-decorator-props":{title:'{{ t("Sync enabled status of all workflows from database", { ns: "'.concat(O.CU,'" }) }}')},"x-component":"Action","x-component-props":{icon:"SyncOutlined",useAction:"{{ useSyncAction }}"},"x-reactions":["{{useWorkflowSyncReaction}}"]},delete:{type:"void",title:'{{t("Delete")}}',"x-component":"Action","x-component-props":{icon:"DeleteOutlined",useAction:"{{ cm.useBulkDestroyAction }}",confirm:{title:"{{t('Delete record')}}",content:"{{t('Are you sure you want to delete it?')}}"}}},create:{type:"void",title:'{{t("Add new")}}',"x-component":"Action","x-component-props":{type:"primary",icon:"PlusOutlined"},properties:{drawer:{type:"void","x-component":"Action.Drawer","x-decorator":"Form","x-decorator-props":{initialValue:{current:!0}},title:'{{t("Add new")}}',properties:{title:j.title,type:j.type,triggerPreset:j.triggerPreset,sync:j.sync,categories:j.categories,description:j.description,options:j.options,footer:{type:"void","x-component":"Action.Drawer.Footer",properties:{cancel:{title:'{{ t("Cancel") }}',"x-component":"Action","x-component-props":{useAction:"{{ cm.useCancelAction }}"}},submit:{title:'{{ t("Submit") }}',"x-component":"Action","x-component-props":{type:"primary",useAction:"{{ cm.useCreateAction }}"}}}}}}}}}},table:{type:"array","x-component":"Table.Void","x-component-props":{rowKey:"id",rowSelection:{type:"checkbox"},useDataSource:"{{cm.useDataSourceFromRAC }}"},properties:{title:{type:"void","x-decorator":"Table.Column.Decorator","x-component":"Table.Column",title:'{{ t("Title") }}',properties:{title:{type:"string","x-component":"CollectionField","x-read-pretty":!0}}},categories:{type:"void","x-decorator":"Table.Column.Decorator","x-component":"Table.Column",title:'{{ t("Category", { ns: "'.concat(O.CU,'" }) }}'),properties:{categories:{type:"array","x-component":"EnumerationField","x-component-props":{multiple:!0,fieldNames:{label:"title",value:"id",color:"color"}}}}},type:{type:"void","x-decorator":"Table.Column.Decorator","x-component":"Table.Column",title:'{{ t("Trigger type", { ns: "'.concat(O.CU,'" }) }}'),properties:{type:{type:"string","x-component":"CollectionField","x-read-pretty":!0}}},sync:{type:"void","x-decorator":"Table.Column.Decorator","x-component":"Table.Column",title:'{{ t("Execute mode", { ns: "'.concat(O.CU,'" }) }}'),properties:{sync:{type:"boolean","x-component":"CollectionField","x-read-pretty":!0}}},enabled:{type:"void","x-decorator":"Table.Column.Decorator","x-component":"Table.Column",title:'{{ t("Enabled", { ns: "'.concat(O.CU,'" }) }}'),properties:{enabled:{type:"boolean","x-component":"WorkflowEnabledSwitch",default:!1}}},"stats.executed":{type:"void","x-decorator":"Table.Column.Decorator","x-component":"Table.Column",title:'{{ t("Executed", { ns: "'.concat(O.CU,'" }) }}'),properties:{"stats.executed":{type:"number","x-decorator":"OpenDrawer","x-decorator-props":{component:function(e){var t=(0,s.useCollectionRecordData)();return c().createElement("a",P({"aria-label":"executed-".concat(t.title)},e))}},"x-component":"InputNumber","x-read-pretty":!0,properties:{drawer:w.M}}}},actions:{type:"void",title:'{{ t("Actions") }}',"x-decorator":"Table.Column.Decorator","x-component":"Table.Column",properties:{actions:{type:"void","x-component":"Space","x-component-props":{split:"|"},properties:{configure:{type:"void","x-component":"WorkflowLink"},update:{type:"void",title:'{{ t("Edit") }}',"x-component":"Action.Link","x-component-props":{type:"primary"},properties:{drawer:{type:"void","x-component":"Action.Drawer","x-decorator":"Form","x-decorator-props":{useValues:"{{ cm.useValuesFromRecord }}"},title:'{{ t("Edit") }}',properties:{title:j.title,type:(n=P({},j.type),o=o={"x-disabled":!0},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(o)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(o)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(o,e))}),n),sync:j.sync,categories:j.categories,description:j.description,options:j.options,footer:{type:"void","x-component":"Action.Drawer.Footer",properties:{cancel:{title:'{{ t("Cancel") }}',"x-component":"Action","x-component-props":{useAction:"{{ cm.useCancelAction }}"}},submit:{title:'{{ t("Submit") }}',"x-component":"Action","x-component-props":{type:"primary",useAction:"{{ cm.useUpdateAction }}"}}}}}}}},revision:{type:"void",title:'{{t("Duplicate", { ns: "'.concat(O.CU,'" })}}'),"x-component":"Action.Link","x-component-props":{openSize:"small"},properties:{modal:{type:"void",title:'{{t("Duplicate to new workflow", { ns: "'.concat(O.CU,'" })}}'),"x-decorator":"FormV2","x-component":"Action.Modal",properties:{title:{type:"string",title:'{{t("Title")}}',"x-decorator":"FormItem","x-component":"Input"},footer:{type:"void","x-component":"Action.Modal.Footer",properties:{submit:{type:"void",title:'{{t("Submit")}}',"x-component":"Action","x-component-props":{type:"primary",useAction:"{{ useRevisionAction }}"}},cancel:{type:"void",title:'{{t("Cancel")}}',"x-component":"Action","x-component-props":{useAction:"{{ cm.useCancelAction }}"}}}}}}}},delete:{type:"void",title:'{{ t("Delete") }}',"x-component":"Action.Link","x-component-props":{confirm:{title:"{{t('Delete record')}}",content:"{{t('Are you sure you want to delete it?')}}"},useAction:"{{ cm.useDestroyActionAndRefreshCM }}"}}}}}}}}}}}}}},k=r(5324),F=r(9603),T=r(512);function D(e){var t=e.data,r=t.label,n=t.color,o=t.options,i=(0,s.useCompile)();return c().createElement(a.Space,{direction:"vertical"},c().createElement(a.Tag,{color:n},i(r)),c().createElement(a.Typography.Text,{type:"secondary",style:{whiteSpace:"normal"}},i(o.description)))}var I=r(7375),R=r(6799),U=r(166),V=r(6773);function M(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function N(e,t,r,n,o,i,c){try{var a=e[i](c),l=a.value}catch(e){r(e);return}a.done?t(l):Promise.resolve(l).then(n,o)}function q(e){return function(){var t=this,r=arguments;return new Promise(function(n,o){var i=e.apply(t,r);function c(e){N(i,n,o,c,a,"next",e)}function a(e){N(i,n,o,c,a,"throw",e)}c(void 0)})}}function L(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}function $(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e}function B(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,o=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var i=[],c=!0,a=!1;try{for(o=o.call(e);!(c=(r=o.next()).done)&&(i.push(r.value),!t||i.length!==t);c=!0);}catch(e){a=!0,n=e}finally{try{c||null==o.return||o.return()}finally{if(a)throw n}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return M(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return M(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function W(e,t){var r,n,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},c=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),a=Object.defineProperty;return a(c,"next",{value:l(0)}),a(c,"throw",{value:l(1)}),a(c,"return",{value:l(2)}),"function"==typeof Symbol&&a(c,Symbol.iterator,{value:function(){return this}}),c;function l(a){return function(l){var u=[a,l];if(r)throw TypeError("Generator is already executing.");for(;c&&(c=0,u[0]&&(i=0)),i;)try{if(r=1,n&&(o=2&u[0]?n.return:u[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,u[1])).done)return o;switch(n=0,o&&(u=[2&u[0],o.value]),u[0]){case 0:case 1:o=u;break;case 4:return i.label++,{value:u[1],done:!1};case 5:i.label++,n=u[1],u=[0];continue;case 7:u=i.ops.pop(),i.trys.pop();continue;default:if(!(o=(o=i.trys).length>0&&o[o.length-1])&&(6===u[0]||2===u[0])){i=0;continue}if(3===u[0]&&(!o||u[1]>o[0]&&u[1]<o[3])){i.label=u[1];break}if(6===u[0]&&i.label<o[1]){i.label=o[1],o=u;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(u);break}o[2]&&i.ops.pop(),i.trys.pop();continue}u=t.call(e,i)}catch(e){u=[6,e],n=0}finally{r=o=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}function z(){var e,t,r=(e=["\n .ant-tabs-nav-list > :first-child {\n border: none;\n }\n "],t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}})));return z=function(){return r},r}function K(e){var t=(0,R.useDraggable)({id:e.id,data:e.data}),r=t.attributes,n=t.listeners,o=t.setNodeRef;return c().createElement("div",L({ref:o},n,r),c().createElement("div",null,e.children))}function _(e){var t=(0,R.useDroppable)({id:e.id,data:e.data}),r=t.isOver,n=t.setNodeRef;return c().createElement("div",{ref:n,style:r?{color:"green"}:void 0},e.children)}var G=(0,u.observer)(function(e){var t=e.item;return c().createElement(_,{id:t.id.toString(),data:t},c().createElement("div",null,c().createElement(K,{id:t.id.toString(),data:t},c().createElement(H,{item:t}))))},{displayName:"TabTitle"}),H=function(e){var t=e.item,r=(0,y.useTranslation)().t,n=(0,s.useCompile)();return c().createElement(a.Space,null,c().createElement(a.Badge,{color:t.color}),r(n(t.title)))},Q=(0,u.observer)(function(e){var t=B((0,i.useState)(null),2),r=t[0],n=t[1],o=(0,i.useContext)(Y).refresh,a=(0,s.useAPIClient)(),l=(0,R.useSensor)(R.MouseSensor,{activationConstraint:{distance:10}}),u=(0,R.useSensors)(l);return c().createElement(R.DndContext,{sensors:u,onDragEnd:function(e){return q(function(){var t,r;return W(this,function(i){switch(i.label){case 0:if(t=e.active,r=e.over,setTimeout(function(){n(null)}),!(r&&r.id!==t.id))return[3,2];return[4,a.resource("workflowCategories").move({sourceId:t.id,targetId:r.id})];case 1:i.sent(),o(),i.label=2;case 2:return[2]}})})()},onDragStart:function(e){var t;n(null==(t=e.active)?void 0:t.data.current)}},e.children,c().createElement(R.DragOverlay,null,r?c().createElement("span",{style:{whiteSpace:"nowrap"}},c().createElement(H,{item:r})):null))},{displayName:"DndProvider"}),Y=(0,i.createContext)({});function J(e){var t=e.values,r=e.onEdit,n=e.onRemove,o=(0,s.useCompile)(),l=(0,i.useCallback)(function(e){switch(e.key){case"edit":r(t);break;case"delete":n(t.id)}},[r,n,t]);return c().createElement(a.Dropdown,{menu:{items:[{key:"edit",label:(0,O.vV)("Edit category")},{key:"delete",label:(0,O.vV)("Delete category")}],onClick:l}},c().createElement(I.MenuOutlined,{role:"button","aria-label":o(t.title),style:{padding:8,margin:"-8px"}}))}function X(){var e,t=(0,s.useResourceActionContext)(),r=t.run,n=t.setState,o=t.defaultRequest,p=B((0,i.useState)({tab:"all"}),2),m=p[0],d=p[1],f=B((0,i.useState)(m.tab),2),y=f[0],b=f[1],v=(0,s.useCompile)(),g=(0,s.useAPIClient)(),x=(0,u.useFieldSchema)(),h=a.App.useApp().modal,w=(0,s.useRequest)({resource:"workflowCategories",action:"list",params:{paginate:!1,sort:["sort"]}}),C=w.data,A=w.refresh,S=B((0,i.useState)(!1),2),P=S[0],j=S[1],E=(0,i.useMemo)(function(){return(0,l.createForm)()},[]),k=(0,i.useCallback)(function(e){j(!0);var t=(0,V.cloneDeep)(e);E.setValues(t)},[E]),F=(0,i.useCallback)(function(){j(!1),E.reset()},[E]),T=(0,i.useCallback)(function(e){h.confirm({title:v("{{t('Delete category')}}"),content:v("{{t('Are you sure you want to delete it?')}}"),onOk:function(){return q(function(){return W(this,function(t){switch(t.label){case 0:return[4,g.resource("workflowCategories").destroy({filter:{id:e}})];case 1:return t.sent(),e===+m.tab&&d({tab:"all"}),A(),r(),[2]}})})()}})},[m.tab]),D=(0,i.useMemo)(function(){if(!(null==C?void 0:C.data))return[];var e=C.data.sort(function(e,t){return e.sort-t.sort}).concat().map(function(e){return $(L({},e),{schema:x.properties.main})});return e.find(function(e){return"all"===e.id})||e.unshift({title:'{{t("All", { ns: "'.concat(O.CU,'" })}}'),id:"all",sort:0,closable:!1,schema:x.properties.main}),e.map(function(e){return{label:"all"!==e.id?c().createElement("div",{"data-no-dnd":"true"},c().createElement(G,{item:e})):v(e.title),key:String(e.id),closable:e.closable,closeIcon:c().createElement(J,{values:e,onEdit:k,onRemove:T}),children:c().createElement(a.Card,{variant:"borderless",style:{borderRadius:"0 0.5em 0.5em 0.5em"}},c().createElement(u.RecursionField,{name:y,schema:e.schema,onlyRenderProperties:!0}))}})},[v,null==C?void 0:C.data,y,k,T,x.properties.main]),I=(0,i.useCallback)(function(e){if(d({tab:e}),b((0,U.uid)()),"all"!==e){var t,i={$and:[null==o||null==(t=o.params)?void 0:t.filter,{"categories.id":e}]};r({filter:i}),null==n||n({categories:[+e],params:[{filter:i}]})}else r(),null==n||n({categories:[],params:[]})},[null==o||null==(e=o.params)?void 0:e.filter,r,n]);return((0,i.useEffect)(function(){"all"!==m.tab&&I(m.tab)},[m.tab,I]),C)?c().createElement(Y.Provider,{value:{refresh:A}},c().createElement(Q,null,c().createElement(a.Tabs,{addIcon:c().createElement(s.SchemaComponent,{components:{AddCategory:er},schema:{type:"void",properties:{addCategories:{type:"void",title:'{{ t("Add category", { ns: "'.concat(O.CU,'" }) }}'),"x-component":"AddCategory","x-component-props":{type:"primary"}}}}}),onChange:I,defaultActiveKey:m.tab||"all",type:"editable-card",destroyInactiveTabPane:!0,tabBarStyle:{marginBottom:"0px"},className:(0,s.css)(z()),items:D})),c().createElement(s.ActionContextProvider,{value:{visible:P,setVisible:F,openSize:"small"}},c().createElement(s.SchemaComponent,{scope:{useFormProviderProps:ee,useCancelAction:s.useCancelAction,useEditSubmit:Z},schema:{name:(0,U.uid)(),type:"void","x-decorator":"FormV2","x-decorator-props":{form:E},title:'{{ t("Edit category", { ns: "'.concat(O.CU,'" }) }}'),"x-component":"Action.Modal","x-component-props":{delay:0},properties:{title:{type:"string",title:'{{t("Title")}}',required:!0,"x-decorator":"FormItem","x-component":"Input"},color:{type:"string",title:'{{t("Color")}}',required:!1,"x-decorator":"FormItem","x-component":"ColorSelect"},footer:{type:"void","x-component":"Action.Modal.Footer",properties:{cancel:{title:'{{ t("Cancel") }}',"x-component":"Action","x-component-props":{useAction:"{{ useCancelAction }}"}},submit:{title:'{{ t("Submit") }}',"x-component":"Action","x-component-props":{type:"primary",useAction:"{{ useEditSubmit }}",style:{marginLeft:"8px"}}}}}}}}))):null}function Z(){var e=(0,u.useForm)(),t=(0,s.useActionContext)(),r=(0,s.useResourceActionContext)(),n=(0,i.useContext)(Y).refresh,o=(0,s.useAPIClient)();return{run:function(){return q(function(){var i;return W(this,function(c){switch(c.label){case 0:return[4,e.submit()];case 1:return c.sent(),[4,o.resource("workflowCategories").update({filterByTk:null==(i=e.values)?void 0:i.id,values:e.values})];case 2:return c.sent(),t.setVisible(!1),[4,e.reset()];case 3:return c.sent(),null==n||n(),null==r||r.refresh(),[2]}})})()}}}function ee(){return{form:(0,u.useForm)()}}function et(){var e=(0,u.useForm)(),t=(0,s.useActionContext)().setVisible,r=(0,i.useContext)(Y).refresh,n=(0,s.useAPIClient)();return{run:function(){return q(function(){var o;return W(this,function(i){switch(i.label){case 0:return[4,e.submit()];case 1:return i.sent(),o=(0,V.cloneDeep)(e.values),[4,n.resource("workflowCategories").create({values:o})];case 2:return i.sent(),t(!1),e.reset(),r(),[2]}})})()}}}function er(e){var t=B((0,i.useState)(!1),2),r=t[0],n=t[1],o=(0,y.useTranslation)().t,a=(0,i.useMemo)(function(){return(0,l.createForm)()},[]);return c().createElement(s.ActionContextProvider,{value:{visible:r,setVisible:n,openSize:"small"}},c().createElement("div",{onClick:function(){return n(!0)},title:o("Add category")},c().createElement(I.PlusOutlined,null)),c().createElement(s.SchemaComponent,{schema:{name:"modal",type:"void","x-decorator":"FormV2","x-decorator-props":{form:a},title:'{{ t("Add category") }}',"x-component":"Action.Modal","x-component-props":$(L({},e),{delay:0}),properties:{title:{type:"string",title:'{{t("Title")}}',required:!0,"x-decorator":"FormItem","x-component":"Input"},color:{type:"string",title:'{{t("Color")}}',required:!1,"x-decorator":"FormItem","x-component":"ColorSelect"},footer:{type:"void","x-component":"Action.Modal.Footer",properties:{cancel:{title:'{{ t("Cancel") }}',"x-component":"Action","x-component-props":{useAction:"{{ useCancelAction }}"}},submit:{title:'{{ t("Submit") }}',"x-component":"Action","x-component-props":{type:"primary",useAction:"{{ useCreateSubmit }}",style:{marginLeft:"8px"}}}}}}},scope:{useCancelAction:s.useCancelAction,useCreateSubmit:et}}))}function en(e){var t=e.value,r=e.multiple,n=e.fieldNames,o=void 0===n?s.defaultFieldNames:n,i=(0,s.useCompile)();return(r?null!=t?t:[]:t?[t]:[]).map(function(e){return c().createElement(a.Tag,{key:e[o.value],color:e[o.color]},i(e[o.label]))})}var eo=r(2815);function ei(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var ec=[{value:1e3,label:"Seconds"},{value:6e4,label:"Minutes"},{value:36e5,label:"Hours"},{value:864e5,label:"Days"}];function ea(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:15552e6;return Math.min(Math.max(e,0),t)}function el(e){var t,r,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:6e4;return e&&null!=(t=null==(r=ec.findLast(function(t){return e%t.value==0}))?void 0:r.value)?t:n}var eu=(0,u.connect)(function(e){var t,r,n=ea(Number(null!=(r=e.value)?r:0)),o=function(e){if(Array.isArray(e))return e}(t=c().useState(function(){return el(n)}))||function(e){var t,r,n=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var o=[],i=!0,c=!1;try{for(n=n.call(e);!(i=(t=n.next()).done)&&(o.push(t.value),2!==o.length);i=!0);}catch(e){c=!0,r=e}finally{try{i||null==n.return||n.return()}finally{if(c)throw r}}return o}}(t)||function(e){if(e){if("string"==typeof e)return ei(e,2);var t=Object.prototype.toString.call(e).slice(8,-1);if("Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t)return Array.from(t);if("Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return ei(e,2)}}(t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),i=o[0],l=o[1];c().useEffect(function(){0!==n&&l(function(e){return el(n,e)})},[n]);var u=0===n?0:n/i,s=15552e6/i;return c().createElement(a.Space.Compact,null,c().createElement(a.InputNumber,{min:0,max:s,precision:0,value:u,onChange:function(t){var r;return null==(r=e.onChange)?void 0:r.call(e,ea(Number(t)||0,s)*i)},className:"auto-width"}),c().createElement(a.Select,{value:i,options:ec.map(function(e){var t,r;return t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({},e),r=r={label:(0,O.vV)(e.label)},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t}),onChange:function(t){var r,n,o=ea(Number(null!=(r=e.value)?r:0)),c=0===o?0:o/i;l(t),null==(n=e.onChange)||n.call(e,ea(c*t))},className:"auto-width"}))},(0,u.mapProps)(function(e){return e}),(0,u.mapReadPretty)(function(e){var t,r=Number(null!=(t=e.value)?t:0);if(0===r)return c().createElement(c().Fragment,null,(0,O.vV)("Unlimited"));var n=el(r),o=ec.find(function(e){return e.value===n});return c().createElement(c().Fragment,null,r/n," ",o?(0,O.vV)(o.label):"")}));function es(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function ep(e,t,r,n,o,i,c){try{var a=e[i](c),l=a.value}catch(e){r(e);return}a.done?t(l):Promise.resolve(l).then(n,o)}function em(e){return function(){var t=this,r=arguments;return new Promise(function(n,o){var i=e.apply(t,r);function c(e){ep(i,n,o,c,a,"next",e)}function a(e){ep(i,n,o,c,a,"throw",e)}c(void 0)})}}function ed(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,o=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var i=[],c=!0,a=!1;try{for(o=o.call(e);!(c=(r=o.next()).done)&&(i.push(r.value),!t||i.length!==t);c=!0);}catch(e){a=!0,n=e}finally{try{c||null==o.return||o.return()}finally{if(a)throw n}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return es(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return es(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ef(e,t){var r,n,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},c=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),a=Object.defineProperty;return a(c,"next",{value:l(0)}),a(c,"throw",{value:l(1)}),a(c,"return",{value:l(2)}),"function"==typeof Symbol&&a(c,Symbol.iterator,{value:function(){return this}}),c;function l(a){return function(l){var u=[a,l];if(r)throw TypeError("Generator is already executing.");for(;c&&(c=0,u[0]&&(i=0)),i;)try{if(r=1,n&&(o=2&u[0]?n.return:u[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,u[1])).done)return o;switch(n=0,o&&(u=[2&u[0],o.value]),u[0]){case 0:case 1:o=u;break;case 4:return i.label++,{value:u[1],done:!1};case 5:i.label++,n=u[1],u=[0];continue;case 7:u=i.ops.pop(),i.trys.pop();continue;default:if(!(o=(o=i.trys).length>0&&o[o.length-1])&&(6===u[0]||2===u[0])){i=0;continue}if(3===u[0]&&(!o||u[1]>o[0]&&u[1]<o[3])){i.label=u[1];break}if(6===u[0]&&i.label<o[1]){i.label=o[1],o=u;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(u);break}o[2]&&i.ops.pop(),i.trys.pop();continue}u=t.call(e,i)}catch(e){u=[6,e],n=0}finally{r=o=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}function ey(e){var t=(0,u.useField)(),r=(0,s.useRecord)(),n=(0,s.usePlugin)(k.default);return(0,u.useFormEffects)(function(e){(0,l.onFieldChange)("type",function(e){var o=r.id||!e.value;if(e.value){var i=n.triggers.get(e.value);null!=i.sync?(o=!0,t.setValue(i.sync)):t.setInitialValue(!1)}t.setPattern(o?"disabled":"editable")})}),(0,i.useEffect)(function(){if(r.id){t.setPattern("disabled");var o,i=n.triggers.get(r.type);null!=i.sync?t.setValue(i.sync):t.setInitialValue(null!=(o=e.value)&&o)}},[r.id,t,n.triggers,r.type,e.value]),c().createElement(F.$i,e)}function eb(e){var t=(0,s.useApp)();e.visible=!!((0,s.usePlugin)("multi-app-share-collection")||"main"!==t.name)}function ev(){var e=a.App.useApp().message,t=(0,y.useTranslation)().t,r=(0,s.useResourceContext)().resource;return{run:function(){return em(function(){return ef(this,function(n){switch(n.label){case 0:return[4,r.sync()];case 1:return n.sent(),e.success(t("Operation succeeded")),[2]}})})()}}}function eg(){var e=a.App.useApp().message,t=(0,y.useTranslation)().t,r=(0,s.useResourceActionContext)().refresh,n=(0,s.useResourceContext)(),o=n.resource,i=n.targetKey,c=(0,s.useActionContext)().setVisible,l=(0,s.useRecord)()[i],p=(0,u.useForm)(),m=(0,u.useField)();return{run:function(){return em(function(){return ef(this,function(n){switch(n.label){case 0:return n.trys.push([0,3,4,5]),[4,p.submit()];case 1:return n.sent(),m.data=m.data||{},m.data.loading=!0,[4,o.revision({filterByTk:l,values:p.values})];case 2:return n.sent(),e.success(t("Operation succeeded")),r(),c(!1),[3,5];case 3:return console.error(n.sent()),[3,5];case 4:return m.data&&(m.data.loading=!1),[7];case 5:return[2]}})})()}}}function ex(){var e=(0,s.usePlugin)(k.default),t=ed((0,i.useState)(null),2),r=t[0],n=t[1],o=(0,u.useForm)();(0,u.useFormEffects)(function(){(0,l.onFieldValueChange)("type",function(e){var t;n(null!=(t=e.value)?t:null),o.clearFormGraph("config.*")})});var a=r?e.triggers.get(r):null;return(null==a?void 0:a.presetFieldset)?c().createElement(s.SchemaComponent,{key:r,components:a.components,scope:a.scope,schema:{type:"void",properties:{config:{type:"object","x-decorator":"FormItem",title:'{{t("Trigger configuration", { ns: "'.concat(O.CU,'" })}}'),"x-component":"Fieldset",properties:a.presetFieldset}}}}):null}function eh(){var e=a.App.useApp().message,t=(0,y.useTranslation)().t,r=(0,s.useRecord)(),n=(0,s.useResourceContext)().resource,o=(0,s.useResourceActionContext)().refresh,l=ed((0,i.useState)(!1),2),u=l[0],p=l[1],m=(0,i.useCallback)(function(i){return em(function(){return ef(this,function(c){switch(c.label){case 0:if(!(null==r?void 0:r.id))return[2];p(!0),c.label=1;case 1:return c.trys.push([1,3,4,5]),[4,n.update({filterByTk:r.id,values:{enabled:i}})];case 2:return c.sent(),setTimeout(function(){return null==o?void 0:o()},0),[3,5];case 3:return console.error(c.sent()),e.error(t("Operation failed")),[3,5];case 4:return p(!1),[7];case 5:return[2]}})})()},[e,r,o,n,t]);return c().createElement(a.Switch,{checked:!!(null==r?void 0:r.enabled),size:"small",disabled:u||!(null==r?void 0:r.id),loading:u,onClick:function(e,t){var r;return null==t||null==(r=t.stopPropagation)?void 0:r.call(t)},onChange:m})}function eO(){var e,t,r=(0,i.useContext)(s.SchemaComponentContext),n=(0,s.usePlugin)(k.default).useTriggersOptions;return c().createElement(s.SchemaComponentContext.Provider,{value:(e=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({},r),t=t={designable:!1},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e)},c().createElement(s.SchemaComponent,{schema:E,components:{CollectionProvider:s.CollectionProvider,WorkflowLink:g,ExecutionResourceProvider:f,ExecutionLink:p.d,OpenDrawer:h,SyncOptionSelect:ey,ExecutionStatusColumn:S.t_,Tooltip:a.Tooltip,CategoryTabs:X,EnumerationField:en,WorkflowEnabledSwitch:eh,TriggerPresetFieldset:ex,TimeoutInput:eu},scope:{useTriggersOptions:n,useWorkflowSyncReaction:eb,useSyncAction:ev,useResourceFilterActionProps:eo.A,useRefreshActionProps:T.t,useRevisionAction:eg,TriggerOptionRender:D,ExecutionStatusOptions:C.$A}}))}}}]);
@@ -1,10 +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
- "use strict";(self.webpackChunk_nocobase_plugin_workflow=self.webpackChunk_nocobase_plugin_workflow||[]).push([["67"],{2596:function(e,t,r){r.d(t,{i:function(){return x}});var n=r(2059),o=r(9155),l=r.n(o);let a=(0,o.createContext)(null),i={didCatch:!1,error:null};class c extends o.Component{constructor(e){super(e),this.resetErrorBoundary=this.resetErrorBoundary.bind(this),this.state=i}static getDerivedStateFromError(e){return{didCatch:!0,error:e}}resetErrorBoundary(){let{error:e}=this.state;if(null!==e){for(var t,r,n=arguments.length,o=Array(n),l=0;l<n;l++)o[l]=arguments[l];null==(t=(r=this.props).onReset)||t.call(r,{args:o,reason:"imperative-api"}),this.setState(i)}}componentDidCatch(e,t){var r,n;null==(r=(n=this.props).onError)||r.call(n,e,t)}componentDidUpdate(e,t){let{didCatch:r}=this.state,{resetKeys:n}=this.props;if(r&&null!==t.error&&function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return e.length!==t.length||e.some((e,r)=>!Object.is(e,t[r]))}(e.resetKeys,n)){var o,l;null==(o=(l=this.props).onReset)||o.call(l,{next:n,prev:e.resetKeys,reason:"keys"}),this.setState(i)}}render(){let{children:e,fallbackRender:t,FallbackComponent:r,fallback:n}=this.props,{didCatch:l,error:i}=this.state,c=e;if(l){let e={error:i,resetErrorBoundary:this.resetErrorBoundary};if((0,o.isValidElement)(n))c=n;else if("function"==typeof t)c=t(e);else if(r)c=(0,o.createElement)(r,e);else throw i}return(0,o.createElement)(a.Provider,{value:{didCatch:l,error:i,resetErrorBoundary:this.resetErrorBoundary}},c)}}var s=r(7375),u=r(3342),d=r(5324),p=r(8083),f=r(404),m=r(3872),v=r(6660),y=r(8201),b=r(4562);function h(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function w(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function g(){var e=w(["\n margin-top: 0 !important;\n "]);return g=function(){return e},e}function E(){var e=w(["\n margin-bottom: 1em;\n "]);return E=function(){return e},e}function k(){var e=w(["\n margin-top: 0 !important;\n "]);return k=function(){return e},e}function x(e){var t,r,o=e.entry,a=(0,v.A)().styles,i=(0,b.sD)(),w=(0,f.x)(),x=(0,u.useCompile)(),C=(0,u.usePlugin)(d.default),A=function(e){if(Array.isArray(e))return e}(t=l().useState(100))||function(e){var t,r,n=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var o=[],l=!0,a=!1;try{for(n=n.call(e);!(l=(t=n.next()).done)&&(o.push(t.value),2!==o.length);l=!0);}catch(e){a=!0,r=e}finally{try{l||null==n.return||n.return()}finally{if(a)throw r}}return o}}(t)||function(e){if(e){if("string"==typeof e)return h(e,2);var t=Object.prototype.toString.call(e).slice(8,-1);if("Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t)return Array.from(t);if("Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return h(e,2)}}(t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),O=A[0],S=A[1],j=null==w?void 0:w.clipboard,P=j?C.instructions.get(j.type):null,D=j?P?x(P.title):j.type:"";return l().createElement("div",{className:"workflow-canvas-wrapper"},l().createElement(c,{FallbackComponent:u.ErrorFallback,onError:console.error},l().createElement("div",{className:"workflow-canvas",style:{zoom:O/100}},l().createElement("div",{className:(0,u.cx)(a.branchBlockClass,(0,u.css)(g()))},l().createElement("div",{className:a.branchClass},i?l().createElement(n.Alert,{type:"warning",message:(0,m.vV)("Executed workflow cannot be modified. Could be copied to a new version to modify."),showIcon:!0,className:(0,u.css)(E())}):null,l().createElement(y.Vo,null),l().createElement("div",{className:(0,u.cx)(a.branchBlockClass,(0,u.css)(k()))},l().createElement(p.lg,{entry:o})),l().createElement("div",{className:a.terminalClass},(0,m.vV)("End")))))),j?l().createElement("div",{className:a.clipboardPreviewClass},l().createElement("div",{className:"workflow-clipboard-header"},l().createElement("span",null,(0,m.vV)("Copied node")),l().createElement(n.Button,{type:"text",size:"small",icon:l().createElement(s.CloseOutlined,null),onClick:function(){var e;return null==w||null==(e=w.clearClipboard)?void 0:e.call(w)}})),l().createElement("div",{className:"workflow-clipboard-card"},l().createElement("div",{className:"workflow-clipboard-type"},D),l().createElement("div",{className:"workflow-clipboard-title"},null!=(r=j.title)?r:j.type))):null,l().createElement("div",{className:"workflow-canvas-zoomer"},l().createElement(n.Slider,{vertical:!0,reverse:!0,defaultValue:100,step:10,min:10,value:O,onChange:S})))}},1110:function(e,t,r){r.r(t),r.d(t,{WorkflowPage:function(){return G}});var n=r(3342),o=r(9155),l=r.n(o),a=r(4442),i=r(6660),c=r(5953),s=r(2059),u=r(7375),d=r(5230),p=r(7768),f=r(2596),m=r(2662),v=r(4421),y=r(7846),b=r(3872),h=r(6481),w=r(6072),g=r(6864),E=r(512),k=r(8201),x=r(7428),C=r(7107),A=r(4562),O=r(5433),S=r(3610),j=r(3312),P=r(404),D=r(2815);function V(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function N(e,t,r,n,o,l,a){try{var i=e[l](a),c=i.value}catch(e){r(e);return}i.done?t(c):Promise.resolve(c).then(n,o)}function R(e){return function(){var t=this,r=arguments;return new Promise(function(n,o){var l=e.apply(t,r);function a(e){N(l,n,o,a,i,"next",e)}function i(e){N(l,n,o,a,i,"throw",e)}a(void 0)})}}function B(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}function T(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e}function I(e,t){if(null==e)return{};var r,n,o,l={};if("u">typeof Reflect&&Reflect.ownKeys){for(o=0,r=Reflect.ownKeys(Object(e));o<r.length;o++)n=r[o],!(t.indexOf(n)>=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n]);return l}if(l=function(e,t){if(null==e)return{};var r,n,o={},l=Object.getOwnPropertyNames(e);for(n=0;n<l.length;n++)r=l[n],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r]);return o}(e,t),Object.getOwnPropertySymbols)for(o=0,r=Object.getOwnPropertySymbols(e);o<r.length;o++)n=r[o],!(t.indexOf(n)>=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n]);return l}function F(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,o=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var l=[],a=!0,i=!1;try{for(o=o.call(e);!(a=(r=o.next()).done)&&(l.push(r.value),!t||l.length!==t);a=!0);}catch(e){i=!0,n=e}finally{try{a||null==o.return||o.return()}finally{if(i)throw n}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return V(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return V(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function z(e,t){var r,n,o,l={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(a,"next",{value:c(0)}),i(a,"throw",{value:c(1)}),i(a,"return",{value:c(2)}),"function"==typeof Symbol&&i(a,Symbol.iterator,{value:function(){return this}}),a;function c(i){return function(c){var s=[i,c];if(r)throw TypeError("Generator is already executing.");for(;a&&(a=0,s[0]&&(l=0)),l;)try{if(r=1,n&&(o=2&s[0]?n.return:s[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,s[1])).done)return o;switch(n=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return l.label++,{value:s[1],done:!1};case 5:l.label++,n=s[1],s=[0];continue;case 7:s=l.ops.pop(),l.trys.pop();continue;default:if(!(o=(o=l.trys).length>0&&o[o.length-1])&&(6===s[0]||2===s[0])){l=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){l.label=s[1];break}if(6===s[0]&&l.label<o[1]){l.label=o[1],o=s;break}if(o&&l.label<o[2]){l.label=o[2],l.ops.push(s);break}o[2]&&l.ops.pop(),l.trys.pop();continue}s=t.call(e,l)}catch(e){s=[6,e],n=0}finally{r=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}}}function K(){var e,t,r=(e=["\n margin-bottom: 1em;\n "],t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}})));return K=function(){return r},r}function M(e){var t,r=e.request,o=(e.filter,I(e,["request","filter"])),a=(0,y.$K)().workflow,i=T(B({},o),{request:T(B({},r),{params:T(B({},null==r?void 0:r.params),{filter:T(B({},null==r||null==(t=r.params)?void 0:t.filter),{key:a.key})})})});return l().createElement(n.ResourceActionProvider,i)}function U(e){var t=e.data,r=e.option,o=(0,n.useCompile)()(r.label);return l().createElement(c.Trans,{ns:b.CU,values:{statusText:o}},"Workflow executed, the result status is ",l().createElement(s.Tag,{color:r.color},"{{statusText}}"),l().createElement(a.Link,{to:(0,w.mz)(t.id)},"View the execution"))}function Y(){var e=(0,y.$K)().workflow,t=(0,d.useForm)(),r=(0,n.useResourceContext)().resource,a=(0,n.useActionContext)(),i=(0,n.useNavigateNoUpdate)(),c=s.App.useApp().message,u=(0,A.sD)(),p=F((0,o.useState)(!1),2),f=p[0],m=p[1];return{loading:f,run:function(){return R(function(){var n,o,s,d;return z(this,function(p){switch(p.label){case 0:m(!0),p.label=1;case 1:return p.trys.push([1,,4,5]),o=(n=t.values).autoRevision,s=I(n,["autoRevision"]),[4,t.submit()];case 2:return p.sent(),[4,r.execute(B({filterByTk:e.id,values:s},!u&&o?{autoRevision:1}:{}))];case 3:var f,v,y,b;return d=p.sent().data.data,t.reset(),a.setFormValueChanged(!1),a.setVisible(!1),null==c||c.open((v=(f=d.execution).id,y=f.status,(b=x.$Y[y])?{type:"info",content:l().createElement(U,{data:{id:v},option:b})}:null)),d.newVersionId&&i((0,w.Yz)(d.newVersionId)),[3,5];case 4:return m(!1),[7];case 5:return[2]}})})()}}}function $(e){var t=e.children,r=(0,d.useField)(),n=(0,y.$K)().workflow,o=(0,k.s5)(),a=o.validate(n.config),i="";switch(!0){case!a:i=(0,b.vV)("The trigger is not configured correctly, please check the trigger configuration.");break;case!o.triggerFieldset:i=(0,b.vV)("This type of trigger has not been supported to be executed manually.")}return r.setPattern(i?"disabled":"editable"),i?l().createElement(s.Tooltip,{title:i},t):t}function _(){var e,t=(0,y.$K)().workflow,r=(0,A.sD)(),o=(0,k.s5)();return l().createElement(y.AA.Provider,{value:t},l().createElement(C.Ws.Provider,{value:!0},l().createElement(n.SchemaComponent,{components:B({Alert:s.Alert,Fieldset:g.L,ActionDisabledProvider:$},o.components),scope:B({useCancelAction:n.useCancelAction,useExecuteConfirmAction:Y},o.scope),schema:{name:"trigger-modal-".concat(t.type,"-").concat(t.id),type:"void","x-decorator":"ActionDisabledProvider","x-component":"Action","x-component-props":{openSize:"small"},title:"{{t('Execute manually', { ns: \"".concat(b.CU,'" })}}'),properties:{drawer:{type:"void","x-decorator":"FormV2","x-component":"Action.Modal",title:"{{t('Execute manually', { ns: \"".concat(b.CU,'" })}}'),properties:T(B(T(B({},Object.keys(null!=(e=o.triggerFieldset)?e:{}).length?{alert:{type:"void","x-component":"Alert","x-component-props":{message:"{{t('Trigger variables need to be filled for executing.', { ns: \"".concat(b.CU,'" })}}'),className:(0,n.css)(K())}}}:{description:{type:"void","x-component":"p","x-content":"{{t('This will perform all the actions configured in the workflow. Are you sure you want to continue?', { ns: \"".concat(b.CU,'" })}}')}}),{fieldset:{type:"void","x-decorator":"FormItem","x-component":"Fieldset",title:"{{t('Trigger variables', { ns: \"".concat(b.CU,'" })}}'),properties:o.triggerFieldset}}),r?{}:{autoRevision:{type:"boolean","x-decorator":"FormItem","x-component":"Checkbox","x-content":"{{t('Automatically create a new version after execution', { ns: \"".concat(b.CU,'" })}}'),default:!0}}),{footer:{type:"void","x-component":"Action.Modal.Footer",properties:{cancel:{type:"void",title:"{{t('Cancel')}}","x-component":"Action","x-component-props":{useAction:"{{useCancelAction}}"}},submit:{type:"void",title:"{{t('Confirm')}}","x-component":"Action","x-component-props":{type:"primary",useAction:"{{useExecuteConfirmAction}}"}}}}})}}}})))}function L(){var e=(0,y.$K)(),t=e.workflow,r=e.revisions,i=void 0===r?[]:r,d=F((0,o.useState)(!1),2),f=d[0],g=d[1],k=F((0,o.useState)(!1),2),C=k[0],O=k[1],S=(0,a.useNavigate)(),j=(0,c.useTranslation)().t,P=s.App.useApp().modal,V=(0,n.useApp)(),N=(0,n.useResourceContext)().resource,B=(0,n.useResourceActionContext)().refresh,T=s.App.useApp().message,I=(0,A.Eh)(),K=(0,o.useCallback)(function(){return R(function(){var e;return z(this,function(r){switch(r.label){case 0:return[4,N.revision({filterByTk:t.id,filter:{key:t.key}})];case 1:return e=r.sent().data.data,T.success(j("Operation succeeded")),S((0,w.Yz)(e.id)),[2]}})})()},[N,t.id,t.key,T,j,S]),U=(0,o.useCallback)(function(){return R(function(){var e;return z(this,function(r){return e=t.current?(0,b.vV)("This is a main version, delete it will cause the whole workflow to be deleted (including all other revisions)."):(0,b.vV)("Current version will be deleted (without affecting other versions)."),P.confirm({title:j("Are you sure you want to delete it?"),content:e,onOk:function(){return R(function(){var e,r,n,o;return z(this,function(l){switch(l.label){case 0:return[4,N.destroy({filterByTk:t.id})];case 1:if(l.sent(),T.success(j("Operation succeeded")),e=V.pluginSettingsManager.getRoutePath("workflow"),t.current)return[2,S(e)];return i.length&&S((0,w.Yz)(null==(r=i.find(function(e){return e.current}))?void 0:r.id)),[4,N.list({filter:{key:t.key,current:!0},fields:["id"],pageSize:1})];case 2:if(200!==(n=l.sent()).status)return[2];if(!(o=F(n.data.data,1)[0]))return[2,S(e)];return[2,S((0,w.Yz)(o.id))]}})})()}}),[2]})})()},[t,P,j,N,T,S,V.pluginSettingsManager,i]),Y=(0,o.useCallback)(function(e){switch(e.key){case"details":O(!0);return;case"refresh":B();return;case"history":g(!0);return;case"revision":return K();case"delete":return U()}},[U,K,B]),$=(0,o.useCallback)(function(e){return(null==e?void 0:e.nickname)||(null==e?void 0:e.username)||(null==e?void 0:e.email)||(null==e?void 0:e.id)||"-"},[]),_=(0,o.useCallback)(function(e){return e?(0,p.dayjs)(e).format("YYYY-MM-DD HH:mm:ss"):"-"},[]);return l().createElement(l().Fragment,null,l().createElement(s.Dropdown,{menu:{items:[{role:"button","aria-label":"details",key:"details",label:j("Details")},{type:"divider"},{role:"button","aria-label":"refresh",key:"refresh",label:j("Refresh")},{role:"button","aria-label":"history",key:"history",label:(0,b.vV)("Execution history"),disabled:!I},{role:"button","aria-label":"revision",key:"revision",label:(0,b.vV)("Copy to new version")},{type:"divider"},{role:"button","aria-label":"delete",danger:!0,key:"delete",label:j("Delete")}],onClick:Y}},l().createElement(s.Button,{"aria-label":"more",type:"text",icon:l().createElement(u.EllipsisOutlined,null)})),l().createElement(s.Modal,{open:C,title:j("Details"),width:640,footer:null,onCancel:function(){return O(!1)}},l().createElement(s.Descriptions,{bordered:!0,column:2,size:"small"},l().createElement(s.Descriptions.Item,{label:"Key",span:2},t.key||"-"),l().createElement(s.Descriptions.Item,{label:j("Created by")},$(t.createdBy)),l().createElement(s.Descriptions.Item,{label:j("Created at")},_(t.createdAt)),l().createElement(s.Descriptions.Item,{label:j("Last updated by")},$(t.updatedBy)),l().createElement(s.Descriptions.Item,{label:j("Last updated at")},_(t.updatedAt)),l().createElement(s.Descriptions.Item,{label:j("Description"),span:2},l().createElement("div",{style:{whiteSpace:"pre-wrap",wordBreak:"break-word"}},t.description||"-")))),l().createElement(n.ActionContextProvider,{value:{visible:f,setVisible:g}},l().createElement(n.SchemaComponent,{schema:h.M,components:{ExecutionResourceProvider:M,ExecutionLink:v.d,ExecutionStatusColumn:m.t_},scope:{useRefreshActionProps:E.t,useResourceFilterActionProps:D.A,ExecutionStatusOptions:x.$A}})))}function W(){var e,t=(0,i.A)().styles,r=(0,a.useNavigate)(),c=(0,y.$K)().workflow,d=(0,o.useCallback)(function(e){var t=e.key;t!=c.id&&r((0,w.Yz)(t))},[c.id,r]),f=(0,n.useRequest)({resource:"workflows",action:"list",params:{filter:{key:c.key},fields:["id","createdAt","current","enabled","versionStats.executed"],sort:"-id"}},{refreshDeps:[c.id],manual:!0}),m=f.data,v=f.run,h=(0,o.useCallback)(function(e){e&&v()},[v]),g=null!=(e=null==m?void 0:m.data)?e:[];return l().createElement(s.Dropdown,{className:"workflow-versions",trigger:["click"],onOpenChange:h,menu:{onClick:d,defaultSelectedKeys:["".concat(c.id)],className:(0,n.cx)(t.dropdownClass,t.workflowVersionDropdownClass),items:g.sort(function(e,t){return t.id-e.id}).map(function(e,t){return{role:"button","aria-label":"version-".concat(t),key:"".concat(e.id),icon:e.current?l().createElement(u.RightOutlined,null):null,className:(0,n.cx)({executed:e.versionStats.executed>0,unexecuted:0==e.versionStats.executed,enabled:e.enabled}),label:l().createElement(l().Fragment,null,l().createElement("strong",null,"#".concat(e.id)),l().createElement("time",null,(0,p.dayjs)(e.createdAt).fromNow()))}})}},l().createElement(s.Button,{type:"text","aria-label":"version"},l().createElement("label",null,(0,b.vV)("Version")),l().createElement("span",null,(null==c?void 0:c.id)?"#".concat(c.id):null),l().createElement(u.DownOutlined,null)))}function q(){var e,t,r,i=(0,a.useNavigate)(),c=(0,n.useApp)(),u=(0,n.useResourceActionContext)(),d=u.data,p=u.refresh,m=u.loading,v=(0,n.useResourceContext)().resource,h=(0,n.useDocumentTitle)().setTitle,g=F((0,o.useState)(null!=(e=null==d||null==(r=d.data)?void 0:r.enabled)&&e),2),E=g[0],k=g[1],x=F((0,o.useState)(!1),2),C=x[0],A=x[1],D=null!=(t=null==d?void 0:d.data)?t:{},V=D.nodes,N=void 0===V?[]:V,B=I(D,["nodes"]);(0,w.KD)(N),(0,o.useEffect)(function(){var e,t=null!=(e=null==d?void 0:d.data)?e:{},r=t.title,n=t.enabled;null==h||h("".concat((0,b.vV)("Workflow")).concat(r?": ".concat(r):"")),k(n)},[null==d?void 0:d.data,h]);var T=(0,o.useCallback)(function(e){return R(function(){return z(this,function(t){switch(t.label){case 0:return A(!0),[4,v.update({filterByTk:B.id,values:{enabled:e}})];case 1:return t.sent(),A(!1),k(e),[2]}})})()},[v,B.id]);if(!(null==d?void 0:d.data))return m?l().createElement(s.Spin,null):l().createElement(s.Result,{status:"404",title:"Not found",extra:l().createElement(s.Button,{onClick:function(){return i(-1)}},(0,b.vV)("Go back"))});var K=N.find(function(e){return!e.upstream});return l().createElement(y.cB.Provider,{value:{workflow:B,nodes:N,refresh:p}},l().createElement("div",{className:"workflow-toolbar"},l().createElement("header",null,l().createElement(s.Breadcrumb,{items:[{title:l().createElement(a.Link,{to:c.pluginSettingsManager.getRoutePath("workflow")},(0,b.vV)("Workflow"))},{title:l().createElement(s.Tooltip,{title:"Key: ".concat(B.key)},l().createElement("strong",null,B.title))}]}),B.sync?l().createElement(s.Tag,{color:"orange"},(0,b.vV)("Synchronously")):l().createElement(s.Tag,{color:"cyan"},(0,b.vV)("Asynchronously"))),l().createElement("aside",null,l().createElement(_,null),l().createElement(W,null),l().createElement(s.Switch,{checked:E,onChange:T,checkedChildren:(0,b.vV)("On"),unCheckedChildren:(0,b.vV)("Off"),loading:C}),l().createElement(L,null))),l().createElement(O.yf,null,l().createElement(S.J,null,l().createElement(j.b,null,l().createElement(P.L,null,l().createElement(f.i,{entry:K}))))))}var G=function(){var e,t,r,o=(0,a.useParams)(),c=(0,i.A)().styles;return l().createElement("div",{className:(0,n.cx)(c.workflowPageClass)},l().createElement(n.SchemaComponent,{schema:{type:"void",properties:(e={},t="provider_".concat(o.id),r={type:"void","x-decorator":"ResourceActionProvider","x-decorator-props":{collection:{name:"workflows",fields:[]},resourceName:"workflows",request:{resource:"workflows",action:"get",params:{filter:{id:o.id},appends:["nodes","stats.executed","versionStats.executed","createdBy","updatedBy"]}}},"x-component":"WorkflowCanvas"},t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e)},components:{WorkflowCanvas:q}}))}}}]);
@@ -1,10 +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
- "use strict";(self.webpackChunk_nocobase_plugin_workflow=self.webpackChunk_nocobase_plugin_workflow||[]).push([["964"],{2596:function(e,t,n){n.d(t,{i:function(){return x}});var r=n(2059),o=n(9155),l=n.n(o);let a=(0,o.createContext)(null),i={didCatch:!1,error:null};class c extends o.Component{constructor(e){super(e),this.resetErrorBoundary=this.resetErrorBoundary.bind(this),this.state=i}static getDerivedStateFromError(e){return{didCatch:!0,error:e}}resetErrorBoundary(){let{error:e}=this.state;if(null!==e){for(var t,n,r=arguments.length,o=Array(r),l=0;l<r;l++)o[l]=arguments[l];null==(t=(n=this.props).onReset)||t.call(n,{args:o,reason:"imperative-api"}),this.setState(i)}}componentDidCatch(e,t){var n,r;null==(n=(r=this.props).onError)||n.call(r,e,t)}componentDidUpdate(e,t){let{didCatch:n}=this.state,{resetKeys:r}=this.props;if(n&&null!==t.error&&function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return e.length!==t.length||e.some((e,n)=>!Object.is(e,t[n]))}(e.resetKeys,r)){var o,l;null==(o=(l=this.props).onReset)||o.call(l,{next:r,prev:e.resetKeys,reason:"keys"}),this.setState(i)}}render(){let{children:e,fallbackRender:t,FallbackComponent:n,fallback:r}=this.props,{didCatch:l,error:i}=this.state,c=e;if(l){let e={error:i,resetErrorBoundary:this.resetErrorBoundary};if((0,o.isValidElement)(r))c=r;else if("function"==typeof t)c=t(e);else if(n)c=(0,o.createElement)(n,e);else throw i}return(0,o.createElement)(a.Provider,{value:{didCatch:l,error:i,resetErrorBoundary:this.resetErrorBoundary}},c)}}var s=n(7375),u=n(3342),d=n(5324),m=n(8083),p=n(404),f=n(3872),y=n(6660),b=n(8201),v=n(4562);function E(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function w(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function h(){var e=w(["\n margin-top: 0 !important;\n "]);return h=function(){return e},e}function g(){var e=w(["\n margin-bottom: 1em;\n "]);return g=function(){return e},e}function k(){var e=w(["\n margin-top: 0 !important;\n "]);return k=function(){return e},e}function x(e){var t,n,o=e.entry,a=(0,y.A)().styles,i=(0,v.sD)(),w=(0,p.x)(),x=(0,u.useCompile)(),C=(0,u.usePlugin)(d.default),O=function(e){if(Array.isArray(e))return e}(t=l().useState(100))||function(e){var t,n,r=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var o=[],l=!0,a=!1;try{for(r=r.call(e);!(l=(t=r.next()).done)&&(o.push(t.value),2!==o.length);l=!0);}catch(e){a=!0,n=e}finally{try{l||null==r.return||r.return()}finally{if(a)throw n}}return o}}(t)||function(e){if(e){if("string"==typeof e)return E(e,2);var t=Object.prototype.toString.call(e).slice(8,-1);if("Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t)return Array.from(t);if("Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return E(e,2)}}(t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),j=O[0],S=O[1],A=null==w?void 0:w.clipboard,P=A?C.instructions.get(A.type):null,N=A?P?x(P.title):A.type:"";return l().createElement("div",{className:"workflow-canvas-wrapper"},l().createElement(c,{FallbackComponent:u.ErrorFallback,onError:console.error},l().createElement("div",{className:"workflow-canvas",style:{zoom:j/100}},l().createElement("div",{className:(0,u.cx)(a.branchBlockClass,(0,u.css)(h()))},l().createElement("div",{className:a.branchClass},i?l().createElement(r.Alert,{type:"warning",message:(0,f.vV)("Executed workflow cannot be modified. Could be copied to a new version to modify."),showIcon:!0,className:(0,u.css)(g())}):null,l().createElement(b.Vo,null),l().createElement("div",{className:(0,u.cx)(a.branchBlockClass,(0,u.css)(k()))},l().createElement(m.lg,{entry:o})),l().createElement("div",{className:a.terminalClass},(0,f.vV)("End")))))),A?l().createElement("div",{className:a.clipboardPreviewClass},l().createElement("div",{className:"workflow-clipboard-header"},l().createElement("span",null,(0,f.vV)("Copied node")),l().createElement(r.Button,{type:"text",size:"small",icon:l().createElement(s.CloseOutlined,null),onClick:function(){var e;return null==w||null==(e=w.clearClipboard)?void 0:e.call(w)}})),l().createElement("div",{className:"workflow-clipboard-card"},l().createElement("div",{className:"workflow-clipboard-type"},N),l().createElement("div",{className:"workflow-clipboard-title"},null!=(n=A.title)?n:A.type))):null,l().createElement("div",{className:"workflow-canvas-zoomer"},l().createElement(r.Slider,{vertical:!0,reverse:!0,defaultValue:100,step:10,min:10,value:j,onChange:S})))}},3639:function(e,t,n){n.r(t),n.d(t,{ExecutionPage:function(){return B}});var r=n(3342),o=n(9155),l=n.n(o),a=n(4442),i=n(2059),c=n(7768),s=n(7375),u=n(5953),d=n(5324),m=n(2596),p=n(1958),f=n(7428),y=n(7846),b=n(3872),v=n(7065),E=n(6660),w=n(6072),h=n(6773);function g(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function k(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function x(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){k(e,t,n[t])})}return e}function C(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t.push.apply(t,n)}return t})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function O(e,t){if(null==e)return{};var n,r,o,l={};if("u">typeof Reflect&&Reflect.ownKeys){for(o=0,n=Reflect.ownKeys(Object(e));o<n.length;o++)r=n[o],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(l[r]=e[r]);return l}if(l=function(e,t){if(null==e)return{};var n,r,o={},l=Object.getOwnPropertyNames(e);for(r=0;r<l.length;r++)n=l[r],!(t.indexOf(n)>=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n]);return o}(e,t),Object.getOwnPropertySymbols)for(o=0,n=Object.getOwnPropertySymbols(e);o<n.length;o++)r=n[o],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(l[r]=e[r]);return l}function j(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,o=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var l=[],a=!0,i=!1;try{for(o=o.call(e);!(a=(n=o.next()).done)&&(l.push(n.value),!t||l.length!==t);a=!0);}catch(e){i=!0,r=e}finally{try{a||null==o.return||o.return()}finally{if(i)throw r}}return l}}(e,t)||A(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function S(e){return function(e){if(Array.isArray(e))return g(e)}(e)||function(e){if("u">typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||A(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function A(e,t){if(e){if("string"==typeof e)return g(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return g(e,t)}}function P(e){var t=e.jobData,n=e.loading,o=O(e,["jobData","loading"]);if(n)return l().createElement(i.Spin,null);var a=(0,h.get)(t,"result");return l().createElement(r.Input.JSON,C(x({},o),{value:a,disabled:!0}))}function N(e){var t=e.jobData;if(e.loading)return null;var n=(0,h.get)(t,"log");return l().createElement(v.KV,{value:n})}function D(e){var t,n,o=e.job,a=e.setViewJob,c=(0,r.usePlugin)(d.default).instructions,s=(0,r.useCompile)(),u=(0,E.A)().styles,m=(t=o.id,(0,r.useRequest)({resource:"jobs",action:"get",params:{filterByTk:t}},{cacheKey:"job-".concat(t)})),p=m.data,y=m.loading,v=null!=(n=(0,h.get)(p,"data"))?n:o,w=(null!=o?o:{}).node,g=void 0===w?{}:w,O=c.get(g.type);return l().createElement(r.ActionContextProvider,{value:{visible:!!o,setVisible:a}},l().createElement(r.SchemaComponent,{components:{JobResult:P,JobLog:N},schema:{type:"void",properties:k({},"".concat(v.id,"-").concat(v.updatedAt,"-modal"),{type:"void","x-decorator":"Form","x-decorator-props":{initialValue:C(x({},o,v),{node:g})},"x-component":"Action.Modal",title:l().createElement("div",{className:u.nodeTitleClass},l().createElement(i.Tag,null,s(null==O?void 0:O.title)),l().createElement("strong",null,g.title),l().createElement("span",{className:"workflow-node-id"},"#",g.id)),properties:{status:{type:"number",title:'{{t("Status", { ns: "'.concat(b.CU,'" })}}'),"x-decorator":"FormItem","x-component":"Select",enum:f.ox,"x-read-pretty":!0},updatedAt:{type:"string",title:'{{t("Executed at", { ns: "'.concat(b.CU,'" })}}'),"x-decorator":"FormItem","x-component":"DatePicker","x-component-props":{showTime:!0},"x-read-pretty":!0},result:{type:"object",title:'{{t("Node result", { ns: "'.concat(b.CU,'" })}}'),"x-decorator":"FormItem","x-component":"JobResult","x-component-props":{jobData:v,loading:y,className:u.nodeJobResultClass,autoSize:{minRows:4,maxRows:32}}},log:{type:"string","x-component":"JobLog","x-component-props":{jobData:v,loading:y}}}})}}))}function V(){var e=(0,y.$K)(),t=e.viewJob,n=e.setViewJob;return t?l().createElement(D,{job:t,setViewJob:n}):null}function I(e){var t=(0,y.$K)().execution,n=(0,r.useAPIClient)(),u=(0,a.useNavigate)(),d=(0,E.A)().styles,m=(0,r.useResourceActionContext)().refresh,b=j((0,o.useState)([]),2),v=b[0],h=b[1],g=j((0,o.useState)([]),2),k=g[0],x=g[1],C=j((0,o.useState)(null),2),O=C[0],A=C[1],P=j((0,o.useState)(null),2),N=P[0],D=P[1],V=j((0,o.useState)(null),2),I=V[0],R=V[1],B=(0,o.useCallback)(function(e){t&&e&&(O!==t.id&&n.resource("executions").list({filter:{key:t.key,id:{$lt:t.id}},sort:"-id",pageSize:10,fields:["id","status","createdAt"]}).then(function(e){var n=e.data;A(t.id),h(n.data)}).catch(function(){}),(N!==t.id||I&&Date.now()-Number(I)>6e4&&k.length<10)&&n.resource("executions").list({filter:{key:t.key,id:{$gt:t.id}},sort:"id",pageSize:10,fields:["id","status","createdAt"]}).then(function(e){var n=e.data;D(t.id),R(Date.now()),x(n.data.reverse())}).catch(function(){}))},[t,O,N,I,k.length,n]),T=(0,o.useCallback)(function(e){var n=e.key;n!=t.id&&u((0,w.mz)(n))},[t.id,u]);return t?l().createElement(i.Space,null,l().createElement(i.Dropdown,{onOpenChange:B,menu:{onClick:T,defaultSelectedKeys:["".concat(t.id)],className:(0,r.cx)(d.dropdownClass,d.executionsDropdownRowClass),items:S(k).concat([t],S(v)).map(function(e){return{key:e.id,label:l().createElement(l().Fragment,null,l().createElement("span",{className:"id"},"#".concat(e.id)),l().createElement("time",null,(0,c.str2moment)(e.createdAt).format("YYYY-MM-DD HH:mm:ss"))),icon:l().createElement("span",null,l().createElement(p.p,{statusMap:f.$Y,status:e.status}))}})}},l().createElement(i.Space,null,l().createElement("strong",null,"#".concat(t.id)),l().createElement(s.DownOutlined,null))),l().createElement(i.Button,{type:"link",size:"small",icon:l().createElement(s.ReloadOutlined,null),onClick:m})):null}function R(){var e,t,n,d=(0,u.useTranslation)().t,p=(0,r.useCompile)(),v=(0,r.useResourceActionContext)(),E=v.data,h=v.loading,g=v.refresh,k=(0,r.useDocumentTitle)().setTitle,x=j((0,o.useState)(null),2),C=x[0],S=x[1],A=(0,r.useApp)(),P=(0,r.useAPIClient)();(0,o.useEffect)(function(){var e,t=(null!=(e=null==E?void 0:E.data)?e:{}).workflow;null==k||k("".concat((null==t?void 0:t.title)?"".concat(t.title," - "):"").concat((0,b.vV)("Execution history")))},[null==E?void 0:E.data,k]);var N=(0,o.useCallback)(function(){i.Modal.confirm({title:(0,b.vV)("Cancel the execution"),icon:l().createElement(s.ExclamationCircleFilled,null),content:(0,b.vV)("Are you sure you want to cancel the execution?"),onOk:function(){P.resource("executions").cancel({filterByTk:null==E?void 0:E.data.id}).then(function(){i.message.success(d("Operation succeeded")),g()}).catch(function(e){console.error(e.data.error)})}})},[null==E?void 0:E.data]),D=(0,o.useCallback)(function(){history.back()},[]);if(!(null==E?void 0:E.data))return h?l().createElement(i.Spin,null):l().createElement(i.Result,{status:"404",title:"Not found"});var R=null!=(e=null==E?void 0:E.data)?e:{},B=R.jobs,T=R.workflow,z=O(R,["jobs","workflow"]),J=(T||{}).nodes,K=void 0===J?[]:J;(0,w.KD)(K),function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=new Map;e.forEach(function(e){e.jobs=[],n.set(e.id,e)}),t.forEach(function(e){var t=n.get(e.nodeId);t&&(t.jobs.push(e),e.node={id:t.id,key:t.key,title:t.title,type:t.type})}),e.forEach(function(e){e.jobs=e.jobs.sort(function(e,t){return e.id-t.id})})}(K,void 0===B?[]:B);var M=K.find(function(e){return!e.upstream}),Y=f.$Y[z.status];return T?l().createElement(y.cB.Provider,{value:{workflow:T.type?T:null,nodes:K,execution:z,viewJob:C,setViewJob:S}},l().createElement("div",{className:"workflow-toolbar"},l().createElement("header",null,l().createElement(i.Breadcrumb,{items:[{title:l().createElement(a.Link,{to:A.pluginSettingsManager.getRoutePath("workflow")},(0,b.vV)("Workflow"))},{title:l().createElement(i.Tooltip,{title:"Key: ".concat(T.key)},l().createElement(a.Link,{to:(0,w.Yz)(T.id)},T.title))},{title:l().createElement(I,null)}]})),l().createElement("aside",null,l().createElement(i.Tag,{color:Y.color},l().createElement(i.Space,null,p(Y.label),z.reason?l().createElement(i.Tooltip,{title:p(null!=(t=null==(n=f.BI[z.reason])?void 0:n.label)?t:z.reason),placement:"bottom"},l().createElement(s.QuestionCircleOutlined,null)):null)),z.status?null:l().createElement(i.Tooltip,{title:(0,b.vV)("Cancel the execution")},l().createElement(i.Button,{type:"link",danger:!0,onClick:N,shape:"circle",size:"small",icon:l().createElement(s.StopOutlined,null)})),l().createElement("time",null,(0,c.str2moment)(z.updatedAt).format("YYYY-MM-DD HH:mm:ss")))),l().createElement(m.i,{entry:M}),l().createElement(V,null)):l().createElement(i.Result,{status:"404",title:(0,b.vV)("Not found"),subTitle:(0,b.vV)("Workflow of execution is not existed"),extra:l().createElement(i.Button,{onClick:D},(0,b.vV)("Go back"))})}var B=function(){var e,t,n,o=(0,a.useParams)(),i=(0,E.A)().styles;return l().createElement("div",{className:(0,r.cx)(i.workflowPageClass)},l().createElement(r.SchemaComponent,{schema:{type:"void",properties:(e={},t="execution_".concat(o.id),n={type:"void","x-decorator":"ResourceActionProvider","x-decorator-props":{collection:{name:"executions",fields:[]},resourceName:"executions",request:{resource:"executions",action:"get",params:{filter:o,appends:["jobs","workflow","workflow.nodes","workflow.versionStats","workflow.stats"],except:["jobs.result","workflow.options"]}}},"x-component":"ExecutionCanvas"},t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e)},components:{ExecutionCanvas:R}}))}}}]);