@nocobase/plugin-workflow 1.7.0-alpha.1 → 1.7.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 (75) hide show
  1. package/dist/client/3d24e559cfbba5d8.js +10 -0
  2. package/dist/client/90a4f6d29bd453a7.js +10 -0
  3. package/dist/client/WorkflowTasks.d.ts +11 -11
  4. package/dist/client/a2fc280565d1c746.js +10 -0
  5. package/dist/client/f4370978c40502d7.js +10 -0
  6. package/dist/client/index.d.ts +1 -0
  7. package/dist/client/index.js +1 -1
  8. package/dist/client/locale/index.d.ts +2 -1
  9. package/dist/client/schemas/executions.d.ts +126 -125
  10. package/dist/client/triggers/schedule/RepeatField.d.ts +2 -1
  11. package/dist/common/collections/executions.d.ts +136 -0
  12. package/dist/common/collections/executions.js +125 -0
  13. package/dist/common/collections/flow_nodes.d.ts +44 -0
  14. package/dist/common/collections/flow_nodes.js +88 -0
  15. package/dist/common/collections/jobs.d.ts +37 -0
  16. package/dist/common/collections/jobs.js +74 -0
  17. package/dist/common/collections/workflowStats.d.ts +37 -0
  18. package/dist/common/collections/workflowStats.js +59 -0
  19. package/dist/common/collections/workflowTasks.d.ts +10 -0
  20. package/dist/common/collections/workflowTasks.js +64 -0
  21. package/dist/common/collections/workflowVersionStats.d.ts +37 -0
  22. package/dist/common/collections/workflowVersionStats.js +59 -0
  23. package/dist/common/collections/workflows.d.ts +250 -0
  24. package/dist/common/collections/workflows.js +225 -0
  25. package/dist/common/constants.d.ts +9 -0
  26. package/dist/common/constants.js +36 -0
  27. package/dist/externalVersion.js +13 -13
  28. package/dist/locale/de-DE.json +216 -0
  29. package/dist/locale/it-IT.json +123 -18
  30. package/dist/locale/nl-NL.json +100 -0
  31. package/dist/locale/zh-CN.json +4 -0
  32. package/dist/node_modules/cron-parser/package.json +1 -1
  33. package/dist/node_modules/lru-cache/package.json +1 -1
  34. package/dist/node_modules/nodejs-snowflake/LICENSE +201 -0
  35. package/dist/node_modules/nodejs-snowflake/nodejs_snowflake.d.ts +62 -0
  36. package/dist/node_modules/nodejs-snowflake/nodejs_snowflake.js +1 -0
  37. package/dist/node_modules/nodejs-snowflake/nodejs_snowflake_bg.wasm +0 -0
  38. package/dist/node_modules/nodejs-snowflake/package.json +1 -0
  39. package/dist/server/Dispatcher.d.ts +11 -0
  40. package/dist/server/Dispatcher.js +35 -0
  41. package/dist/server/Plugin.d.ts +8 -1
  42. package/dist/server/Plugin.js +118 -70
  43. package/dist/server/Processor.d.ts +4 -11
  44. package/dist/server/Processor.js +48 -45
  45. package/dist/server/actions/nodes.js +7 -5
  46. package/dist/server/actions/workflowTasks.js +4 -2
  47. package/dist/server/actions/workflows.js +5 -2
  48. package/dist/server/collections/executions.js +12 -44
  49. package/dist/server/collections/flow_nodes.js +12 -57
  50. package/dist/server/collections/jobs.js +12 -36
  51. package/dist/server/collections/workflowStats.d.ts +11 -0
  52. package/dist/server/collections/workflowStats.js +43 -0
  53. package/dist/server/collections/workflowTasks.d.ts +2 -1
  54. package/dist/server/collections/workflowTasks.js +12 -33
  55. package/dist/server/collections/workflowVersionStats.d.ts +11 -0
  56. package/dist/server/collections/workflowVersionStats.js +43 -0
  57. package/dist/server/collections/workflows.d.ts +2 -1
  58. package/dist/server/collections/workflows.js +12 -101
  59. package/dist/server/migrations/20250320223415-stats.d.ts +14 -0
  60. package/dist/server/migrations/20250320223415-stats.js +82 -0
  61. package/dist/server/migrations/20250409164913-remove-jobs-auto-increment.d.ts +14 -0
  62. package/dist/server/migrations/20250409164913-remove-jobs-auto-increment.js +57 -0
  63. package/dist/server/repositories/WorkflowRepository.js +1 -2
  64. package/dist/server/triggers/ScheduleTrigger/DateFieldScheduleTrigger.d.ts +5 -3
  65. package/dist/server/triggers/ScheduleTrigger/DateFieldScheduleTrigger.js +39 -36
  66. package/dist/server/triggers/ScheduleTrigger/StaticScheduleTrigger.d.ts +4 -2
  67. package/dist/server/triggers/ScheduleTrigger/StaticScheduleTrigger.js +26 -24
  68. package/dist/server/types/Workflow.d.ts +0 -2
  69. package/dist/swagger/index.d.ts +0 -14
  70. package/dist/swagger/index.js +0 -14
  71. package/package.json +4 -3
  72. package/dist/client/4d75ef32f02d7285.js +0 -10
  73. package/dist/client/56ce448358002e64.js +0 -10
  74. package/dist/client/58bb427e05b600de.js +0 -10
  75. package/dist/client/739d458621edf81f.js +0 -10
@@ -27,10 +27,12 @@ export default class DateFieldScheduleTrigger {
27
27
  private timer;
28
28
  private cache;
29
29
  cacheCycle: number;
30
+ onAfterStart: () => void;
31
+ onBeforeStop: () => void;
30
32
  constructor(workflow: Plugin);
31
- reload(): Promise<void>;
32
- inspect(workflows: WorkflowModel[]): void;
33
- loadRecordsToSchedule({ id, config: { collection, limit, startsOn, repeat, endsOn }, allExecuted }: WorkflowModel, currentDate: Date): Promise<import("@nocobase/database").Model<any, any>[]>;
33
+ reload(): void;
34
+ inspect(workflow: WorkflowModel): Promise<void>;
35
+ loadRecordsToSchedule({ id, config: { collection, limit, startsOn, repeat, endsOn }, stats }: WorkflowModel, currentDate: Date): Promise<import("@nocobase/database").Model<any, any>[]>;
34
36
  getRecordNextTime(workflow: WorkflowModel, record: any, nextSecond?: boolean): any;
35
37
  schedule(workflow: WorkflowModel, record: any, nextTime: any, toggle?: boolean, options?: {}): Promise<void>;
36
38
  trigger(workflow: WorkflowModel, record: any, nextTime: any, { transaction }?: Transactionable): Promise<void>;
@@ -99,44 +99,49 @@ function getHookId(workflow, type) {
99
99
  class DateFieldScheduleTrigger {
100
100
  constructor(workflow) {
101
101
  this.workflow = workflow;
102
- workflow.app.on("afterStart", async () => {
103
- if (this.timer) {
104
- return;
105
- }
106
- this.timer = setInterval(() => this.reload(), this.cacheCycle);
107
- this.reload();
108
- });
109
- workflow.app.on("beforeStop", () => {
110
- if (this.timer) {
111
- clearInterval(this.timer);
112
- }
113
- for (const [key, timer] of this.cache.entries()) {
114
- clearTimeout(timer);
115
- this.cache.delete(key);
116
- }
117
- });
102
+ workflow.app.on("afterStart", this.onAfterStart);
103
+ workflow.app.on("beforeStop", this.onBeforeStop);
118
104
  }
119
105
  events = /* @__PURE__ */ new Map();
120
106
  timer = null;
121
107
  cache = /* @__PURE__ */ new Map();
122
108
  // caching workflows in range, default to 5min
123
109
  cacheCycle = 3e5;
124
- async reload() {
110
+ onAfterStart = () => {
111
+ if (this.timer) {
112
+ return;
113
+ }
114
+ this.timer = setInterval(() => this.reload(), this.cacheCycle);
115
+ this.reload();
116
+ };
117
+ onBeforeStop = () => {
118
+ if (this.timer) {
119
+ clearInterval(this.timer);
120
+ }
121
+ for (const [key, timer] of this.cache.entries()) {
122
+ clearTimeout(timer);
123
+ this.cache.delete(key);
124
+ }
125
+ };
126
+ reload() {
127
+ for (const [key, timer] of this.cache.entries()) {
128
+ clearTimeout(timer);
129
+ this.cache.delete(key);
130
+ }
125
131
  const workflows = Array.from(this.workflow.enabledCache.values()).filter(
126
132
  (item) => item.type === "schedule" && item.config.mode === import_utils.SCHEDULE_MODE.DATE_FIELD
127
133
  );
128
- this.cache = /* @__PURE__ */ new Map();
129
- this.inspect(workflows);
134
+ workflows.forEach((workflow) => {
135
+ this.inspect(workflow);
136
+ });
130
137
  }
131
- inspect(workflows) {
138
+ async inspect(workflow) {
132
139
  const now = /* @__PURE__ */ new Date();
133
- workflows.forEach(async (workflow) => {
134
- const records = await this.loadRecordsToSchedule(workflow, now);
135
- this.workflow.getLogger(workflow.id).info(`[Schedule on date field] ${records.length} records to schedule`);
136
- records.forEach((record) => {
137
- const nextTime = this.getRecordNextTime(workflow, record);
138
- this.schedule(workflow, record, nextTime, Boolean(nextTime));
139
- });
140
+ const records = await this.loadRecordsToSchedule(workflow, now);
141
+ this.workflow.getLogger(workflow.id).info(`[Schedule on date field] ${records.length} records to schedule`);
142
+ records.forEach((record) => {
143
+ const nextTime = this.getRecordNextTime(workflow, record);
144
+ this.schedule(workflow, record, nextTime, Boolean(nextTime));
140
145
  });
141
146
  }
142
147
  // 1. startsOn in range -> yes
@@ -146,10 +151,10 @@ class DateFieldScheduleTrigger {
146
151
  // b. repeat in range (number or cron):
147
152
  // i. endsOn after now -> yes
148
153
  // ii. endsOn before now -> no
149
- async loadRecordsToSchedule({ id, config: { collection, limit, startsOn, repeat, endsOn }, allExecuted }, currentDate) {
154
+ async loadRecordsToSchedule({ id, config: { collection, limit, startsOn, repeat, endsOn }, stats }, currentDate) {
150
155
  const { dataSourceManager } = this.workflow.app;
151
- if (limit && allExecuted >= limit) {
152
- this.workflow.getLogger(id).warn(`[Schedule on date field] limit reached (all executed ${allExecuted})`);
156
+ if (limit && stats.executed >= limit) {
157
+ this.workflow.getLogger(id).warn(`[Schedule on date field] limit reached (all executed ${stats.executed})`);
153
158
  return [];
154
159
  }
155
160
  if (!startsOn) {
@@ -210,8 +215,6 @@ class DateFieldScheduleTrigger {
210
215
  [import_database.Op.gte]: new Date(endTimestamp)
211
216
  }
212
217
  });
213
- } else {
214
- this.workflow.getLogger(id).warn(`[Schedule on date field] "endsOn.field" is not configured`);
215
218
  }
216
219
  }
217
220
  }
@@ -232,9 +235,9 @@ class DateFieldScheduleTrigger {
232
235
  getRecordNextTime(workflow, record, nextSecond = false) {
233
236
  const {
234
237
  config: { startsOn, endsOn, repeat, limit },
235
- allExecuted
238
+ stats
236
239
  } = workflow;
237
- if (limit && allExecuted >= limit) {
240
+ if (limit && stats.executed >= limit) {
238
241
  return null;
239
242
  }
240
243
  const range = this.cacheCycle;
@@ -324,7 +327,7 @@ class DateFieldScheduleTrigger {
324
327
  eventKey
325
328
  }
326
329
  );
327
- if (!workflow.config.repeat || workflow.config.limit && workflow.allExecuted >= workflow.config.limit - 1) {
330
+ if (!workflow.config.repeat || workflow.config.limit && workflow.stats.executed >= workflow.config.limit - 1) {
328
331
  return;
329
332
  }
330
333
  const n = this.getRecordNextTime(workflow, data, true);
@@ -333,7 +336,7 @@ class DateFieldScheduleTrigger {
333
336
  }
334
337
  }
335
338
  on(workflow) {
336
- this.inspect([workflow]);
339
+ this.inspect(workflow);
337
340
  const { collection } = workflow.config;
338
341
  const [dataSourceName, collectionName] = (0, import_data_source_manager.parseCollectionName)(collection);
339
342
  const event = `${collectionName}.afterSaveWithAssociations`;
@@ -11,9 +11,11 @@ import { WorkflowModel } from '../../types';
11
11
  export default class StaticScheduleTrigger {
12
12
  workflow: Plugin;
13
13
  private timers;
14
+ onAfterStart: () => void;
15
+ onBeforeStop: () => void;
14
16
  constructor(workflow: Plugin);
15
- inspect(workflows: WorkflowModel[]): void;
16
- getNextTime({ config, allExecuted }: WorkflowModel, currentDate: Date, nextSecond?: boolean): number;
17
+ inspect(workflow: WorkflowModel): void;
18
+ getNextTime({ config, stats }: WorkflowModel, currentDate: Date, nextSecond?: boolean): number;
17
19
  schedule(workflow: WorkflowModel, nextTime: number, toggle?: boolean): void;
18
20
  trigger(workflow: WorkflowModel, time: number): Promise<void>;
19
21
  on(workflow: any): void;
@@ -45,33 +45,35 @@ const MAX_SAFE_INTERVAL = 2147483647;
45
45
  class StaticScheduleTrigger {
46
46
  constructor(workflow) {
47
47
  this.workflow = workflow;
48
- workflow.app.on("afterStart", async () => {
49
- const workflows = Array.from(this.workflow.enabledCache.values()).filter(
50
- (item) => item.type === "schedule" && item.config.mode === import_utils.SCHEDULE_MODE.STATIC
51
- );
52
- this.inspect(workflows);
53
- });
54
- workflow.app.on("beforeStop", () => {
55
- for (const timer of this.timers.values()) {
56
- clearInterval(timer);
57
- }
58
- });
48
+ workflow.app.on("afterStart", this.onAfterStart);
49
+ workflow.app.on("beforeStop", this.onBeforeStop);
59
50
  }
60
51
  timers = /* @__PURE__ */ new Map();
61
- inspect(workflows) {
62
- const now = /* @__PURE__ */ new Date();
52
+ onAfterStart = () => {
53
+ const workflows = Array.from(this.workflow.enabledCache.values()).filter(
54
+ (item) => item.type === "schedule" && item.config.mode === import_utils.SCHEDULE_MODE.STATIC
55
+ );
63
56
  workflows.forEach((workflow) => {
64
- const nextTime = this.getNextTime(workflow, now);
65
- if (nextTime) {
66
- this.workflow.getLogger(workflow.id).info(`caching scheduled workflow will run at: ${new Date(nextTime).toISOString()}`);
67
- } else {
68
- this.workflow.getLogger(workflow.id).info("workflow will not be scheduled");
69
- }
70
- this.schedule(workflow, nextTime, nextTime >= now.getTime());
57
+ this.inspect(workflow);
71
58
  });
59
+ };
60
+ onBeforeStop = () => {
61
+ for (const timer of this.timers.values()) {
62
+ clearInterval(timer);
63
+ }
64
+ };
65
+ inspect(workflow) {
66
+ const now = /* @__PURE__ */ new Date();
67
+ const nextTime = this.getNextTime(workflow, now);
68
+ if (nextTime) {
69
+ this.workflow.getLogger(workflow.id).info(`caching scheduled workflow will run at: ${new Date(nextTime).toISOString()}`);
70
+ } else {
71
+ this.workflow.getLogger(workflow.id).info("workflow will not be scheduled");
72
+ }
73
+ this.schedule(workflow, nextTime, nextTime >= now.getTime());
72
74
  }
73
- getNextTime({ config, allExecuted }, currentDate, nextSecond = false) {
74
- if (config.limit && allExecuted >= config.limit) {
75
+ getNextTime({ config, stats }, currentDate, nextSecond = false) {
76
+ if (config.limit && stats.executed >= config.limit) {
75
77
  return null;
76
78
  }
77
79
  if (!config.startsOn) {
@@ -135,7 +137,7 @@ class StaticScheduleTrigger {
135
137
  const eventKey = `${workflow.id}@${time}`;
136
138
  this.timers.delete(eventKey);
137
139
  this.workflow.trigger(workflow, { date: new Date(time) }, { eventKey });
138
- if (!workflow.config.repeat || workflow.config.limit && workflow.allExecuted >= workflow.config.limit - 1) {
140
+ if (!workflow.config.repeat || workflow.config.limit && workflow.stats.executed >= workflow.config.limit - 1) {
139
141
  return;
140
142
  }
141
143
  const nextTime = this.getNextTime(workflow, /* @__PURE__ */ new Date(), true);
@@ -144,7 +146,7 @@ class StaticScheduleTrigger {
144
146
  }
145
147
  }
146
148
  on(workflow) {
147
- this.inspect([workflow]);
149
+ this.inspect(workflow);
148
150
  }
149
151
  off(workflow) {
150
152
  this.schedule(workflow, null, false);
@@ -20,8 +20,6 @@ export default class WorkflowModel extends Model {
20
20
  type: string;
21
21
  config: any;
22
22
  options: any;
23
- executed: number;
24
- allExecuted: number;
25
23
  sync: boolean;
26
24
  createdAt: Date;
27
25
  updatedAt: Date;
@@ -553,14 +553,6 @@ declare const _default: {
553
553
  type: string;
554
554
  description: string;
555
555
  };
556
- executed: {
557
- type: string;
558
- description: string;
559
- };
560
- allExecuted: {
561
- type: string;
562
- description: string;
563
- };
564
556
  };
565
557
  };
566
558
  filterByTk: {
@@ -597,12 +589,6 @@ declare const _default: {
597
589
  key: {
598
590
  $ref: string;
599
591
  };
600
- executed: {
601
- $ref: string;
602
- };
603
- allExecuted: {
604
- $ref: string;
605
- };
606
592
  };
607
593
  };
608
594
  };
@@ -598,14 +598,6 @@ var swagger_default = {
598
598
  revisions: {
599
599
  type: "array",
600
600
  description: "Revisions"
601
- },
602
- executed: {
603
- type: "integer",
604
- description: "Executed count for a single version"
605
- },
606
- allExecuted: {
607
- type: "integer",
608
- description: "Executed count for all versions of the same workflow"
609
601
  }
610
602
  }
611
603
  },
@@ -642,12 +634,6 @@ var swagger_default = {
642
634
  },
643
635
  key: {
644
636
  $ref: "#/components/schemas/workflow/model/properties/key"
645
- },
646
- executed: {
647
- $ref: "#/components/schemas/workflow/model/properties/executed"
648
- },
649
- allExecuted: {
650
- $ref: "#/components/schemas/workflow/model/properties/allExecuted"
651
637
  }
652
638
  }
653
639
  }
package/package.json CHANGED
@@ -4,13 +4,13 @@
4
4
  "displayName.zh-CN": "工作流",
5
5
  "description": "A powerful BPM tool that provides foundational support for business automation, with the capability to extend unlimited triggers and nodes.",
6
6
  "description.zh-CN": "一个强大的 BPM 工具,为业务自动化提供基础支持,并且可任意扩展更多的触发器和节点。",
7
- "version": "1.7.0-alpha.1",
7
+ "version": "1.7.0-alpha.11",
8
8
  "license": "AGPL-3.0",
9
9
  "main": "./dist/server/index.js",
10
10
  "homepage": "https://docs.nocobase.com/handbook/workflow",
11
11
  "homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/workflow",
12
12
  "dependencies": {
13
- "@nocobase/plugin-workflow-test": "1.7.0-alpha.1"
13
+ "@nocobase/plugin-workflow-test": "1.7.0-alpha.11"
14
14
  },
15
15
  "devDependencies": {
16
16
  "@ant-design/icons": "5.x",
@@ -24,6 +24,7 @@
24
24
  "dayjs": "^1.11.8",
25
25
  "lodash": "4.17.21",
26
26
  "lru-cache": "8.0.5",
27
+ "nodejs-snowflake": "2.0.1",
27
28
  "react": "18.x",
28
29
  "react-i18next": "^11.15.1",
29
30
  "react-js-cron": "^3.1.0",
@@ -44,7 +45,7 @@
44
45
  "@nocobase/test": "1.x",
45
46
  "@nocobase/utils": "1.x"
46
47
  },
47
- "gitHead": "e411c9728b4d1f16b0beac16e40dd3499352b052",
48
+ "gitHead": "41830f1b20f8f5f7aae0699042a10135f1f8cf30",
48
49
  "keywords": [
49
50
  "Workflow"
50
51
  ]
@@ -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([["999"],{458:function(e,t,r){r.d(t,{g:function(){return g}});var n=r("2721"),o=r("8156"),a=r.n(o);let l=(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),a=0;a<n;a++)o[a]=arguments[a];null===(t=(r=this.props).onReset)||void 0===t||t.call(r,{args:o,reason:"imperative-api"}),this.setState(i)}}componentDidCatch(e,t){var r,n;null===(r=(n=this.props).onError)||void 0===r||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,a;null===(o=(a=this.props).onReset)||void 0===o||o.call(a,{next:n,prev:e.resetKeys,reason:"keys"}),this.setState(i)}}render(){let{children:e,fallbackRender:t,FallbackComponent:r,fallback:n}=this.props,{didCatch:a,error:i}=this.state,c=e;if(a){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)(l.Provider,{value:{didCatch:a,error:i,resetErrorBoundary:this.resetErrorBoundary}},c)}}var s=r("3772"),u=r("2708"),d=r("8018"),m=r("573"),f=r("8378"),p=r("336"),y=r("5071");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 b(e,t){return!t&&(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function E(){var e=b(["\n margin-top: 0 !important;\n "]);return E=function(){return e},e}function h(){var e=b(["\n margin-bottom: 1em;\n "]);return h=function(){return e},e}function w(){var e=b(["\n margin-top: 0 !important;\n "]);return w=function(){return e},e}function g(e){var t,r,o=e.entry,l=(0,f.Z)().styles,i=(0,d.G2)().workflow;var b=(t=a().useState(100),r=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var r,n,o=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var a=[],l=!0,i=!1;try{for(o=o.call(e);!(l=(r=o.next()).done)&&(a.push(r.value),!t||a.length!==t);l=!0);}catch(e){i=!0,n=e}finally{try{!l&&null!=o.return&&o.return()}finally{if(i)throw n}}return a}}(t,2)||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)}}(t,r)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),g=b[0],k=b[1];return a().createElement("div",{className:"workflow-canvas-wrapper"},a().createElement(c,{FallbackComponent:s.ErrorFallback,onError:console.error},a().createElement(y.E1,null,a().createElement("div",{className:"workflow-canvas",style:{zoom:g/100}},a().createElement("div",{className:(0,s.cx)(l.branchBlockClass,(0,s.css)(E()))},a().createElement("div",{className:l.branchClass},(null==i?void 0:i.executed)?a().createElement(n.Alert,{type:"warning",message:(0,m.KQ)("Executed workflow cannot be modified. Could be copied to a new version to modify."),showIcon:!0,className:(0,s.css)(h())}):null,a().createElement(p.Gk,null),a().createElement("div",{className:(0,s.cx)(l.branchBlockClass,(0,s.css)(w()))},a().createElement(u.I,{entry:o})),a().createElement("div",{className:l.terminalClass},(0,m.KQ)("End"))))))),a().createElement("div",{className:"workflow-canvas-zoomer"},a().createElement(n.Slider,{vertical:!0,reverse:!0,defaultValue:100,step:10,min:10,value:g,onChange:k})))}},5625:function(e,t,r){r.r(t),r.d(t,{ExecutionPage:function(){return N}});var n=r("3772"),o=r("8156"),a=r.n(o),l=r("6128"),i=r("2721"),c=r("7584"),s=r("482"),u=r("3238"),d=r("2748"),m=r("458"),f=r("6594"),p=r("9144"),y=r("8018"),v=r("573"),b=r("8378"),E=r("7893"),h=r("467");function w(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 g(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function k(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],!(t.indexOf(r)>=0)&&(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++){if(r=a[n],!(t.indexOf(r)>=0))Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}}return o}function x(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,o=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var a=[],l=!0,i=!1;try{for(o=o.call(e);!(l=(r=o.next()).done)&&(a.push(r.value),!t||a.length!==t);l=!0);}catch(e){i=!0,n=e}finally{try{!l&&null!=o.return&&o.return()}finally{if(i)throw n}}return a}}(e,t)||S(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 O(e){return function(e){if(Array.isArray(e))return w(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||S(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 S(e,t){if(e){if("string"==typeof e)return w(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 w(e,t)}}function j(e){var t,r,o=(0,y.G2)().viewJob,l=(0,n.useRequest)({resource:"jobs",action:"get",params:{filterByTk:o.id}}),c=l.data;if(l.loading)return a().createElement(i.Spin,null);var s=(0,h.get)(c,"data.result");return a().createElement(n.Input.JSON,(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){g(e,t,r[t])})}return e}({},e),r=(r={value:s,disabled:!0},r),Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))}function C(){var e=(0,n.usePlugin)(d.default).instructions,t=(0,n.useCompile)(),r=(0,y.G2)(),o=r.viewJob,l=r.setViewJob,c=(0,b.Z)().styles,s=(null!=o?o:{}).node,u=void 0===s?{}:s,m=e.get(u.type);return a().createElement(n.ActionContextProvider,{value:{visible:!!o,setVisible:l}},a().createElement(n.SchemaComponent,{components:{JobResult:j},schema:{type:"void",properties:g({},"".concat(null==o?void 0:o.id,"-").concat(null==o?void 0:o.updatedAt,"-modal"),{type:"void","x-decorator":"Form","x-decorator-props":{initialValue:o},"x-component":"Action.Modal",title:a().createElement("div",{className:c.nodeTitleClass},a().createElement(i.Tag,null,t(null==m?void 0:m.title)),a().createElement("strong",null,u.title),a().createElement("span",{className:"workflow-node-id"},"#",u.id)),properties:{status:{type:"number",title:'{{t("Status", { ns: "'.concat(v.A7,'" })}}'),"x-decorator":"FormItem","x-component":"Select",enum:p.Vh,"x-read-pretty":!0},updatedAt:{type:"string",title:'{{t("Executed at", { ns: "'.concat(v.A7,'" })}}'),"x-decorator":"FormItem","x-component":"DatePicker","x-component-props":{showTime:!0},"x-read-pretty":!0},result:{type:"object",title:'{{t("Node result", { ns: "'.concat(v.A7,'" })}}'),"x-decorator":"FormItem","x-component":"JobResult","x-component-props":{className:c.nodeJobResultClass,autoSize:{minRows:4,maxRows:32}}}}})}}))}function A(e){var t=(0,y.G2)().execution,r=(0,n.useAPIClient)(),u=(0,l.useNavigate)(),d=(0,b.Z)().styles,m=x((0,o.useState)([]),2),v=m[0],h=m[1],w=x((0,o.useState)([]),2),g=w[0],k=w[1];(0,o.useEffect)(function(){if(!!t)r.resource("executions").list({filter:{key:t.key,id:{$lt:t.id}},sort:"-createdAt",pageSize:10,fields:["id","status","createdAt"]}).then(function(e){h(e.data.data)}).catch(function(){})},[t.id]),(0,o.useEffect)(function(){if(!!t)r.resource("executions").list({filter:{key:t.key,id:{$gt:t.id}},sort:"createdAt",pageSize:10,fields:["id","status","createdAt"]}).then(function(e){k(e.data.data.reverse())}).catch(function(){})},[t.id]);var S=(0,o.useCallback)(function(e){var r=e.key;r!=t.id&&u((0,E.s_)(r))},[t.id]);return t?a().createElement(i.Dropdown,{menu:{onClick:S,defaultSelectedKeys:["".concat(t.id)],className:(0,n.cx)(d.dropdownClass,d.executionsDropdownRowClass),items:O(g).concat([t],O(v)).map(function(e){return{key:e.id,label:a().createElement(a().Fragment,null,a().createElement("span",{className:"id"},"#".concat(e.id)),a().createElement("time",null,(0,c.str2moment)(e.createdAt).format("YYYY-MM-DD HH:mm:ss"))),icon:a().createElement("span",null,a().createElement(f.Y,{statusMap:p.uy,status:e.status}))}})}},a().createElement(i.Space,null,a().createElement("strong",null,"#".concat(t.id)),a().createElement(s.DownOutlined,null))):null}function P(){var e,t=(0,u.useTranslation)().t,r=(0,n.useCompile)(),d=(0,n.useResourceActionContext)(),f=d.data,b=d.loading,h=d.refresh,w=(0,n.useDocumentTitle)().setTitle,g=x((0,o.useState)(null),2),O=g[0],S=g[1],j=(0,n.useApp)(),P=(0,n.useAPIClient)();(0,o.useEffect)(function(){var e,t=(null!==(e=null==f?void 0:f.data)&&void 0!==e?e:{}).workflow;null==w||w("".concat((null==t?void 0:t.title)?"".concat(t.title," - "):"").concat((0,v.KQ)("Execution history")))},[null==f?void 0:f.data,w]);var N=(0,o.useCallback)(function(){i.Modal.confirm({title:(0,v.KQ)("Cancel the execution"),icon:a().createElement(s.ExclamationCircleFilled,null),content:(0,v.KQ)("Are you sure you want to cancel the execution?"),onOk:function(){P.resource("executions").cancel({filterByTk:null==f?void 0:f.data.id}).then(function(){i.message.success(t("Operation succeeded")),h()}).catch(function(e){console.error(e.data.error)})}})},[null==f?void 0:f.data]);if(!(null==f?void 0:f.data))return b?a().createElement(i.Spin,null):a().createElement(i.Result,{status:"404",title:"Not found"});var I=null!==(e=null==f?void 0:f.data)&&void 0!==e?e:{},D=I.jobs,T=I.workflow,B=void 0===T?{}:T,R=B.nodes,K=void 0===R?[]:R,M=(B.revisions,k(I.workflow,["nodes","revisions"])),Y=k(I,["jobs","workflow"]);(0,E.Yc)(K),!function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r=new Map;e.forEach(function(e){e.jobs=[],r.set(e.id,e)}),t.forEach(function(e){var t=r.get(e.nodeId);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===D?[]:D);var F=K.find(function(e){return!e.upstream}),J=p.uy[Y.status];return a().createElement(y.iT.Provider,{value:{workflow:M.type?M:null,nodes:K,execution:Y,viewJob:O,setViewJob:S}},a().createElement("div",{className:"workflow-toolbar"},a().createElement("header",null,a().createElement(i.Breadcrumb,{items:[{title:a().createElement(l.Link,{to:j.pluginSettingsManager.getRoutePath("workflow")},(0,v.KQ)("Workflow"))},{title:a().createElement(i.Tooltip,{title:"Key: ".concat(M.key)},a().createElement(l.Link,{to:(0,E.SI)(M.id)},M.title))},{title:a().createElement(A,null)}]})),a().createElement("aside",null,a().createElement(i.Tag,{color:J.color},r(J.label)),Y.status?null:a().createElement(i.Tooltip,{title:(0,v.KQ)("Cancel the execution")},a().createElement(i.Button,{type:"link",danger:!0,onClick:N,shape:"circle",size:"small",icon:a().createElement(s.StopOutlined,null)})),a().createElement("time",null,(0,c.str2moment)(Y.updatedAt).format("YYYY-MM-DD HH:mm:ss")))),a().createElement(m.g,{entry:F}),a().createElement(C,null))}var N=function(){var e,t,r,o=(0,l.useParams)(),i=(0,b.Z)().styles;return a().createElement("div",{className:(0,n.cx)(i.workflowPageClass)},a().createElement(n.SchemaComponent,{schema:{type:"void",properties:(e={},t="execution_".concat(o.id),r={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"],except:["jobs.result","workflow.options"]}}},"x-component":"ExecutionCanvas"},t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e)},components:{ExecutionCanvas:P}}))}}}]);
@@ -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([["929"],{458:function(e,t,r){r.d(t,{g:function(){return k}});var n=r("2721"),o=r("8156"),a=r.n(o);let l=(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),a=0;a<n;a++)o[a]=arguments[a];null===(t=(r=this.props).onReset)||void 0===t||t.call(r,{args:o,reason:"imperative-api"}),this.setState(i)}}componentDidCatch(e,t){var r,n;null===(r=(n=this.props).onError)||void 0===r||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,a;null===(o=(a=this.props).onReset)||void 0===o||o.call(a,{next:n,prev:e.resetKeys,reason:"keys"}),this.setState(i)}}render(){let{children:e,fallbackRender:t,FallbackComponent:r,fallback:n}=this.props,{didCatch:a,error:i}=this.state,c=e;if(a){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)(l.Provider,{value:{didCatch:a,error:i,resetErrorBoundary:this.resetErrorBoundary}},c)}}var s=r("3772"),u=r("2708"),d=r("8018"),f=r("573"),p=r("8378"),m=r("336"),v=r("5071");function y(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 b(e,t){return!t&&(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function h(){var e=b(["\n margin-top: 0 !important;\n "]);return h=function(){return e},e}function w(){var e=b(["\n margin-bottom: 1em;\n "]);return w=function(){return e},e}function g(){var e=b(["\n margin-top: 0 !important;\n "]);return g=function(){return e},e}function k(e){var t,r,o=e.entry,l=(0,p.Z)().styles,i=(0,d.G2)().workflow;var b=(t=a().useState(100),r=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var r,n,o=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var a=[],l=!0,i=!1;try{for(o=o.call(e);!(l=(r=o.next()).done)&&(a.push(r.value),!t||a.length!==t);l=!0);}catch(e){i=!0,n=e}finally{try{!l&&null!=o.return&&o.return()}finally{if(i)throw n}}return a}}(t,2)||function(e,t){if(e){if("string"==typeof e)return y(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 y(e,t)}}(t,r)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),k=b[0],E=b[1];return a().createElement("div",{className:"workflow-canvas-wrapper"},a().createElement(c,{FallbackComponent:s.ErrorFallback,onError:console.error},a().createElement(v.E1,null,a().createElement("div",{className:"workflow-canvas",style:{zoom:k/100}},a().createElement("div",{className:(0,s.cx)(l.branchBlockClass,(0,s.css)(h()))},a().createElement("div",{className:l.branchClass},(null==i?void 0:i.executed)?a().createElement(n.Alert,{type:"warning",message:(0,f.KQ)("Executed workflow cannot be modified. Could be copied to a new version to modify."),showIcon:!0,className:(0,s.css)(w())}):null,a().createElement(m.Gk,null),a().createElement("div",{className:(0,s.cx)(l.branchBlockClass,(0,s.css)(g()))},a().createElement(u.I,{entry:o})),a().createElement("div",{className:l.terminalClass},(0,f.KQ)("End"))))))),a().createElement("div",{className:"workflow-canvas-zoomer"},a().createElement(n.Slider,{vertical:!0,reverse:!0,defaultValue:100,step:10,min:10,value:k,onChange:E})))}},5437:function(e,t,r){r.r(t),r.d(t,{WorkflowPage:function(){return z}});var n=r("3772"),o=r("8156"),a=r.n(o),l=r("6128"),i=r("8378"),c=r("3238"),s=r("2721"),u=r("482"),d=r("3505"),f=r("7584"),p=r("2748"),m=r("458"),v=r("2266"),y=r("8958"),b=r("8018"),h=r("573"),w=r("2659"),g=r("7893"),k=r("1188"),E=r("8327"),x=r("336"),A=r("9144"),C=r("6805");function O(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 S(e,t,r,n,o,a,l){try{var i=e[a](l),c=i.value}catch(e){r(e);return}i.done?t(c):Promise.resolve(c).then(n,o)}function P(e){return function(){var t=this,r=arguments;return new Promise(function(n,o){var a=e.apply(t,r);function l(e){S(a,n,o,l,i,"next",e)}function i(e){S(a,n,o,l,i,"throw",e)}l(void 0)})}}function j(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,o,a;n=e,o=t,a=r[t],o in n?Object.defineProperty(n,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):n[o]=a})}return e}function T(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e}function N(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],!(t.indexOf(r)>=0)&&(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++){if(r=a[n],!(t.indexOf(r)>=0))Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}}return o}function K(e,t){var r,n,o,a,l={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return a={next:i(0),throw:i(1),return:i(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function i(a){return function(i){return function(a){if(r)throw TypeError("Generator is already executing.");for(;l;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return l.label++,{value:a[1],done:!1};case 5:l.label++,n=a[1],a=[0];continue;case 7:a=l.ops.pop(),l.trys.pop();continue;default:if(!(o=(o=l.trys).length>0&&o[o.length-1])&&(6===a[0]||2===a[0])){l=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){l.label=a[1];break}if(6===a[0]&&l.label<o[1]){l.label=o[1],o=a;break}if(o&&l.label<o[2]){l.label=o[2],l.ops.push(a);break}o[2]&&l.ops.pop(),l.trys.pop();continue}a=t.call(e,l)}catch(e){a=[6,e],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,i])}}}function D(){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 D=function(){return r},r}function R(e){var t,r=e.request,o=(e.filter,N(e,["request","filter"])),l=(0,b.G2)().workflow,i=T(j({},o),{request:T(j({},r),{params:T(j({},null==r?void 0:r.params),{filter:T(j({},null==r?void 0:null===(t=r.params)||void 0===t?void 0:t.filter),{key:l.key})})})});return a().createElement(n.ResourceActionProvider,i)}function B(e){var t=e.data,r=e.option,o=(0,n.useCompile)()(r.label);return a().createElement(c.Trans,{ns:h.A7,values:{statusText:o}},"Workflow executed, the result status is ",a().createElement(s.Tag,{color:r.color},"{{statusText}}"),a().createElement(l.Link,{to:"/admin/workflow/executions/".concat(t.id)},"View the execution"))}function F(){var e=(0,b.G2)().workflow,t=(0,d.useForm)(),r=(0,n.useResourceContext)().resource,o=(0,n.useActionContext)(),l=(0,n.useNavigateNoUpdate)(),i=s.App.useApp().message;return{run:function(){return P(function(){var n,c,s,u;return K(this,function(d){switch(d.label){case 0:return c=(n=t.values).autoRevision,s=N(n,["autoRevision"]),[4,t.submit()];case 1:return d.sent(),[4,r.execute(j({filterByTk:e.id,values:s},!e.executed&&c?{autoRevision:1}:{}))];case 2:var f,p,m,v;return u=d.sent().data.data,t.reset(),o.setFormValueChanged(!1),o.setVisible(!1),null==i||i.open((p=(f=u.execution).id,m=f.status,(v=A.uy[m])?{type:"info",content:a().createElement(B,{data:{id:p},option:v})}:null)),u.newVersionId&&l("/admin/workflow/workflows/".concat(u.newVersionId)),[2]}})})()}}}function Q(e){var t=e.children,r=(0,d.useField)(),n=(0,b.G2)().workflow,o=(0,x.cC)(),l=o.validate(n.config),i="";switch(!0){case!l:i=(0,h.KQ)("The trigger is not configured correctly, please check the trigger configuration.");break;case!o.triggerFieldset:i=(0,h.KQ)("This type of trigger has not been supported to be executed manually.")}return r.setPattern(i?"disabled":"editable"),i?a().createElement(s.Tooltip,{title:i},t):t}function I(){var e,t=(0,b.G2)().workflow,r=(0,x.cC)();return a().createElement(b.zQ.Provider,{value:t},a().createElement(C.XA.Provider,{value:!0},a().createElement(n.SchemaComponent,{components:j({Alert:s.Alert,Fieldset:k.p,ActionDisabledProvider:Q},r.components),scope:j({useCancelAction:n.useCancelAction,useExecuteConfirmAction:F},r.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(h.A7,'" })}}'),properties:{drawer:{type:"void","x-decorator":"FormV2","x-component":"Action.Modal",title:"{{t('Execute manually', { ns: \"".concat(h.A7,'" })}}'),properties:T(j(T(j({},Object.keys(null!==(e=r.triggerFieldset)&&void 0!==e?e:{}).length?{alert:{type:"void","x-component":"Alert","x-component-props":{message:"{{t('Trigger variables need to be filled for executing.', { ns: \"".concat(h.A7,'" })}}'),className:(0,n.css)(D())}}}:{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(h.A7,'" })}}')}}),{fieldset:{type:"void","x-decorator":"FormItem","x-component":"Fieldset",title:"{{t('Trigger variables', { ns: \"".concat(h.A7,'" })}}'),properties:r.triggerFieldset}}),t.executed?{}:{autoRevision:{type:"boolean","x-decorator":"FormItem","x-component":"Checkbox","x-content":"{{t('Automatically create a new version after execution', { ns: \"".concat(h.A7,'" })}}'),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 V(){var e,t,r=(0,b.G2)(),i=r.workflow,d=r.revisions;var f=(e=(0,o.useState)(!1),t=2,function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,o=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var a=[],l=!0,i=!1;try{for(o=o.call(e);!(l=(r=o.next()).done)&&(a.push(r.value),!t||a.length!==t);l=!0);}catch(e){i=!0,n=e}finally{try{!l&&null!=o.return&&o.return()}finally{if(i)throw n}}return a}}(e,2)||function(e,t){if(e){if("string"==typeof e)return O(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 O(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.")}()),p=f[0],m=f[1],k=(0,l.useNavigate)(),x=(0,c.useTranslation)().t,A=s.App.useApp().modal,C=(0,n.useApp)(),S=(0,n.useResourceContext)().resource,j=s.App.useApp().message,T=(0,o.useCallback)(P(function(){var e;return K(this,function(t){switch(t.label){case 0:return[4,S.revision({filterByTk:i.id,filter:{key:i.key}})];case 1:return e=t.sent().data.data,j.success(x("Operation succeeded")),k("/admin/workflow/workflows/".concat(e.id)),[2]}})}),[S,i.id,i.key,j,x,k]),N=(0,o.useCallback)(P(function(){var e;return K(this,function(t){return e=i.current?(0,h.KQ)("Delete a main version will cause all other revisions to be deleted too."):"",A.confirm({title:x("Are you sure you want to delete it?"),content:e,onOk:function(){return P(function(){var e;return K(this,function(t){switch(t.label){case 0:return[4,S.destroy({filterByTk:i.id})];case 1:return t.sent(),j.success(x("Operation succeeded")),k(i.current?C.pluginSettingsManager.getRoutePath("workflow"):(0,g.SI)(null===(e=d.find(function(e){return e.current}))||void 0===e?void 0:e.id)),[2]}})})()}}),[2]})}),[i,A,x,S,j,k,C.pluginSettingsManager,d]),D=(0,o.useCallback)(function(e){switch(e.key){case"history":m(!0);return;case"revision":return T();case"delete":return N()}},[N,T]),B=i.executed&&!d.find(function(e){return!e.executed&&new Date(e.createdAt)>new Date(i.createdAt)});return a().createElement(a().Fragment,null,a().createElement(s.Dropdown,{menu:{items:[{key:"key",label:"Key: ".concat(i.key),disabled:!0},{type:"divider"},{role:"button","aria-label":"history",key:"history",label:(0,h.KQ)("Execution history"),disabled:!i.allExecuted},{role:"button","aria-label":"revision",key:"revision",label:(0,h.KQ)("Copy to new version"),disabled:!B},{type:"divider"},{role:"button","aria-label":"delete",danger:!0,key:"delete",label:x("Delete")}],onClick:D}},a().createElement(s.Button,{"aria-label":"more",type:"text",icon:a().createElement(u.EllipsisOutlined,null)})),a().createElement(n.ActionContextProvider,{value:{visible:p,setVisible:m}},a().createElement(n.SchemaComponent,{schema:w.V,components:{ExecutionResourceProvider:R,ExecutionLink:y.a,ExecutionStatusColumn:v.r},scope:{useRefreshActionProps:E.X}})))}function G(){var e,t,r=(0,l.useNavigate)(),c=(0,n.useApp)(),d=(0,n.useResourceActionContext)(),v=d.data,y=d.refresh,w=d.loading,k=(0,n.useResourceContext)().resource,E=(0,n.useDocumentTitle)().setTitle,x=(0,i.Z)().styles;(0,n.usePlugin)(p.default);var A=null!==(t=null==v?void 0:v.data)&&void 0!==t?t:{},C=A.nodes,O=void 0===C?[]:C,S=A.revisions,j=void 0===S?[]:S,T=N(A,["nodes","revisions"]);(0,g.Yc)(O),(0,o.useEffect)(function(){var e,t=(null!==(e=null==v?void 0:v.data)&&void 0!==e?e:{}).title;null==E||E("".concat((0,h.KQ)("Workflow")).concat(t?": ".concat(t):""))},[null==v?void 0:v.data,E]);var D=(0,o.useCallback)(function(e){var t=e.key;t!=T.id&&r((0,g.SI)(t))},[T.id,r]);var R=(0,o.useCallback)((e=P(function(e){return K(this,function(t){switch(t.label){case 0:return[4,k.update({filterByTk:T.id,values:{enabled:e}})];case 1:return t.sent(),y(),[2]}})}),function(t){return e.apply(this,arguments)}),[k,T.id,y]);if(!(null==v?void 0:v.data))return w?a().createElement(s.Spin,null):a().createElement(s.Result,{status:"404",title:"Not found",extra:a().createElement(s.Button,{onClick:function(){return r(-1)}},(0,h.KQ)("Go back"))});var B=O.find(function(e){return!e.upstream});return a().createElement(b.iT.Provider,{value:{workflow:T,revisions:j,nodes:O,refresh:y}},a().createElement("div",{className:"workflow-toolbar"},a().createElement("header",null,a().createElement(s.Breadcrumb,{items:[{title:a().createElement(l.Link,{to:c.pluginSettingsManager.getRoutePath("workflow")},(0,h.KQ)("Workflow"))},{title:a().createElement(s.Tooltip,{title:"Key: ".concat(T.key)},a().createElement("strong",null,T.title))}]}),T.sync?a().createElement(s.Tag,{color:"orange"},(0,h.KQ)("Synchronously")):a().createElement(s.Tag,{color:"cyan"},(0,h.KQ)("Asynchronously"))),a().createElement("aside",null,a().createElement(I,null),a().createElement(s.Dropdown,{className:"workflow-versions",trigger:["click"],menu:{onClick:D,defaultSelectedKeys:["".concat(T.id)],className:(0,n.cx)(x.dropdownClass,x.workflowVersionDropdownClass),items:j.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?a().createElement(u.RightOutlined,null):null,className:(0,n.cx)({executed:e.executed,unexecuted:!e.executed,enabled:e.enabled}),label:a().createElement(a().Fragment,null,a().createElement("strong",null,"#".concat(e.id)),a().createElement("time",null,(0,f.dayjs)(e.createdAt).fromNow()))}})}},a().createElement(s.Button,{type:"text","aria-label":"version"},a().createElement("label",null,(0,h.KQ)("Version")),a().createElement("span",null,(null==T?void 0:T.id)?"#".concat(T.id):null),a().createElement(u.DownOutlined,null))),a().createElement(s.Switch,{checked:T.enabled,onChange:R,checkedChildren:(0,h.KQ)("On"),unCheckedChildren:(0,h.KQ)("Off")}),a().createElement(V,null))),a().createElement(m.g,{entry:B}))}var z=function(){var e,t,r,o=(0,l.useParams)(),c=(0,i.Z)().styles;return a().createElement("div",{className:(0,n.cx)(c.workflowPageClass)},a().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","revisions.id","revisions.createdAt","revisions.current","revisions.executed","revisions.enabled"]}}},"x-component":"WorkflowCanvas"},t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e)},components:{WorkflowCanvas:G}}))}}}]);
@@ -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([["923"],{1837:function(e,t,o){o.r(t),o.d(t,{WorkflowPane:function(){return I}});var n=o("8156"),r=o.n(n),c=o("2721"),i=o("8563"),a=o("3505"),l=o("3772"),p=o("8958");function s(e){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{},n=Object.keys(o);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(o).filter(function(e){return Object.getOwnPropertyDescriptor(o,e).enumerable}))),n.forEach(function(t){var n,r,c;n=e,r=t,c=o[t],r in n?Object.defineProperty(n,r,{value:c,enumerable:!0,configurable:!0,writable:!0}):n[r]=c})}return e}function u(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);o.push.apply(o,n)}return o})(Object(t)).forEach(function(o){Object.defineProperty(e,o,Object.getOwnPropertyDescriptor(t,o))}),e}var m=function(e){var t,o=e.request,n=(e.filter,function(e,t){if(null==e)return{};var o,n,r=function(e,t){if(null==e)return{};var o,n,r={},c=Object.keys(e);for(n=0;n<c.length;n++)o=c[n],!(t.indexOf(o)>=0)&&(r[o]=e[o]);return r}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++){if(o=c[n],!(t.indexOf(o)>=0))Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}}return r}(e,["request","filter"])),c=(0,l.useRecord)(),i=u(s({},n),{request:u(s({},o),{params:u(s({},null==o?void 0:o.params),{filter:u(s({},null==o?void 0:null===(t=o.params)||void 0===t?void 0:t.filter),{key:c.key})})})});return r().createElement(l.ResourceActionProvider,i)},d=o("3238"),y=o("6128"),f=o("7893"),b=function(){var e=(0,d.useTranslation)().t,t=(0,l.useRecord)().id,o=(0,l.useActionContext)().setVisible,n=(0,l.useGetAriaLabelOfAction)("Configure").getAriaLabel;return r().createElement(y.Link,{"aria-label":n(),to:(0,f.SI)(t),onClick:function(){return o(!1)}},e("Configure"))};function x(e,t){(null==t||t>e.length)&&(t=e.length);for(var o=0,n=Array(t);o<t;o++)n[o]=e[o];return n}function v(e){var t,o,c,i,p=e.component,s=e.children,u=function(e,t){if(null==e)return{};var o,n,r=function(e,t){if(null==e)return{};var o,n,r={},c=Object.keys(e);for(n=0;n<c.length;n++)o=c[n],!(t.indexOf(o)>=0)&&(r[o]=e[o]);return r}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++){if(o=c[n],!(t.indexOf(o)>=0))Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}}return r}(e,["component","children"]);var m=(t=(0,n.useState)(!1),o=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var o,n,r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var c=[],i=!0,a=!1;try{for(r=r.call(e);!(i=(o=r.next()).done)&&(c.push(o.value),!t||c.length!==t);i=!0);}catch(e){a=!0,n=e}finally{try{!i&&null!=r.return&&r.return()}finally{if(a)throw n}}return c}}(t,2)||function(e,t){if(e){if("string"==typeof e)return x(e,t);var o=Object.prototype.toString.call(e).slice(8,-1);if("Object"===o&&e.constructor&&(o=e.constructor.name),"Map"===o||"Set"===o)return Array.from(o);if("Arguments"===o||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o))return x(e,t)}}(t,o)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),d=m[0],y=m[1],f=(0,a.useFieldSchema)();return r().createElement(l.ActionContextProvider,{value:{visible:d,setVisible:y,fieldSchema:f}},r().createElement(void 0===p?"div":p,(c=function(e){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{},n=Object.keys(o);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(o).filter(function(e){return Object.getOwnPropertyDescriptor(o,e).enumerable}))),n.forEach(function(t){var n,r,c;n=e,r=t,c=o[t],r in n?Object.defineProperty(n,r,{value:c,enumerable:!0,configurable:!0,writable:!0}):n[r]=c})}return e}({},u),i=(i={onClick:function(){y(!0)}},i),Object.getOwnPropertyDescriptors?Object.defineProperties(c,Object.getOwnPropertyDescriptors(i)):(function(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);o.push.apply(o,n)}return o})(Object(i)).forEach(function(e){Object.defineProperty(c,e,Object.getOwnPropertyDescriptor(i,e))}),c),s),r().createElement(l.SchemaComponent,{schema:f,onlyRenderProperties:!0}))}var g=o("573"),O=o("2659"),h={name:"workflows",fields:[{type:"string",name:"title",interface:"input",uiSchema:{title:'{{t("Name")}}',type:"string","x-component":"Input",required:!0}},{type:"string",name:"type",interface:"select",uiSchema:{title:'{{t("Trigger type", { ns: "'.concat(g.A7,'" })}}'),type:"string","x-decorator":"FormItem","x-component":"Select",enum:"{{useTriggersOptions()}}","x-component-props":{optionRender:function(e){var t=e.data,o=t.label,n=t.color,i=t.options,a=(0,l.useCompile)();return r().createElement(c.Space,{direction:"vertical"},r().createElement(c.Tag,{color:n},a(o)),r().createElement(c.Typography.Text,{type:"secondary",style:{whiteSpace:"normal"}},a(i.description)))},popupMatchSelectWidth:!0,listHeight:300},required:!0}},{type:"boolean",name:"sync",interface:"radioGroup",uiSchema:{title:'{{t("Mode", { ns: "'.concat(g.A7,'" })}}'),type:"boolean","x-decorator":"FormItem","x-component":"Radio.Group",enum:[{label:'{{ t("Asynchronously", { ns: "'.concat(g.A7,'" }) }}'),value:!1,color:"cyan"},{label:'{{ t("Synchronously", { ns: "'.concat(g.A7,'" }) }}'),value:!0,color:"orange"}],required:!0}},{type:"string",name:"description",interface:"textarea",uiSchema:{title:'{{t("Description")}}',type:"string","x-component":"Input.TextArea"}},{type:"boolean",name:"enabled",interface:"radioGroup",uiSchema:{title:'{{t("Status", { ns: "'.concat(g.A7,'" })}}'),type:"string",enum:[{label:'{{t("On", { ns: "'.concat(g.A7,'" })}}'),value:!0,color:"#52c41a"},{label:'{{t("Off", { ns: "'.concat(g.A7,'" })}}'),value:!1}],"x-component":"Radio.Group","x-decorator":"FormItem",default:!1}},{type:"number",name:"allExecuted",interface:"integer",uiSchema:{title:'{{t("Executed", { ns: "'.concat(g.A7,'" })}}'),type:"number","x-component":"InputNumber","x-decorator":"FormItem"}},{type:"object",name:"options"}]},A={title:{"x-component":"CollectionField","x-decorator":"FormItem"},type:{"x-component":"CollectionField","x-decorator":"FormItem"},sync:{type:"boolean",title:'{{ t("Execute mode", { ns: "'.concat(g.A7,'" }) }}'),description:'{{ t("Execute workflow asynchronously or synchronously based on trigger type, and could not be changed after created.", { ns: "'.concat(g.A7,'" }) }}'),"x-decorator":"FormItem","x-component":"SyncOptionSelect","x-component-props":{options:[{label:'{{ t("Asynchronously", { ns: "'.concat(g.A7,'" }) }}'),value:!1,tooltip:'{{ t("Will be executed in the background as a queued task.", { ns: "'.concat(g.A7,'" }) }}')},{label:'{{ t("Synchronously", { ns: "'.concat(g.A7,'" }) }}'),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(g.A7,'" }) }}')}]}},enabled:{"x-component":"CollectionField","x-decorator":"FormItem"},description:{"x-component":"CollectionField","x-decorator":"FormItem"},options:{type:"object","x-component":"fieldset",properties:{deleteExecutionOnStatus:{type:"array",title:'{{ t("Auto delete history when execution is on end status", { ns: "'.concat(g.A7,'" }) }}'),"x-decorator":"FormItem","x-component":"ExecutionStatusSelect","x-component-props":{multiple:!0}},stackLimit:{type:"number",title:'{{ t("Maximum number of cycling triggers", { ns: "'.concat(g.A7,'" }) }}'),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(g.A7,'" }) }}'),"x-decorator":"FormItem",default:1,"x-component":"InputNumber","x-component-props":{min:1,precision:0}}}}},w={name:"workflow",type:"void",properties:{provider:{type:"void","x-decorator":"ResourceActionProvider","x-decorator-props":{collection:h,resourceName:"workflows",request:{resource:"workflows",action:"list",params:{filter:{current:!0},sort:["-createdAt"],except:["config"]}}},"x-component":"CollectionProvider_deprecated","x-component-props":{collection:h},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":"cm.useFilterActionProps","x-component-props":{icon:"FilterOutlined"},"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(g.A7,'" })}}'),"x-decorator":"Tooltip","x-decorator-props":{title:'{{ t("Sync enabled status of all workflows from database", { ns: "'.concat(g.A7,'" }) }}')},"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:A.title,type:A.type,sync:A.sync,description:A.description,options:A.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:"void","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",properties:{title:{type:"string","x-component":"CollectionField","x-read-pretty":!0}}},type:{type:"void","x-decorator":"Table.Column.Decorator","x-component":"Table.Column",properties:{type:{type:"string","x-component":"CollectionField","x-read-pretty":!0}}},sync:{type:"void","x-decorator":"Table.Column.Decorator","x-component":"Table.Column",properties:{sync:{type:"boolean","x-component":"CollectionField","x-read-pretty":!0}}},enabled:{type:"void","x-decorator":"Table.Column.Decorator","x-component":"Table.Column",properties:{enabled:{type:"boolean","x-component":"CollectionField","x-read-pretty":!0,default:!1}}},allExecuted:{type:"void","x-decorator":"Table.Column.Decorator","x-component":"Table.Column",properties:{allExecuted:{type:"number","x-decorator":"OpenDrawer","x-decorator-props":{component:function(e){var t=(0,l.useRecord)();return r().createElement("a",function(e){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{},n=Object.keys(o);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(o).filter(function(e){return Object.getOwnPropertyDescriptor(o,e).enumerable}))),n.forEach(function(t){var n,r,c;n=e,r=t,c=o[t],r in n?Object.defineProperty(n,r,{value:c,enumerable:!0,configurable:!0,writable:!0}):n[r]=c})}return e}({"aria-label":"executed-".concat(t.title)},e))}},"x-component":"CollectionField","x-read-pretty":!0,properties:{drawer:O.V}}}},actions:{type:"void",title:'{{ t("Actions") }}',"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:A.title,enabled:A.enabled,sync:A.sync,description:A.description,options:A.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(g.A7,'" })}}'),"x-component":"Action.Link","x-component-props":{openSize:"small"},properties:{modal:{type:"void",title:'{{t("Duplicate to new workflow", { ns: "'.concat(g.A7,'" })}}'),"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 }}"}}}}}}}}}}}},S=o("2266"),P=o("2748"),j=o("8327");function C(e,t,o,n,r,c,i){try{var a=e[c](i),l=a.value}catch(e){o(e);return}a.done?t(l):Promise.resolve(l).then(n,r)}function k(e){return function(){var t=this,o=arguments;return new Promise(function(n,r){var c=e.apply(t,o);function i(e){C(c,n,r,i,a,"next",e)}function a(e){C(c,n,r,i,a,"throw",e)}i(void 0)})}}function E(e,t){var o,n,r,c,i={label:0,sent:function(){if(1&r[0])throw r[1];return r[1]},trys:[],ops:[]};return c={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(c[Symbol.iterator]=function(){return this}),c;function a(c){return function(a){return function(c){if(o)throw TypeError("Generator is already executing.");for(;i;)try{if(o=1,n&&(r=2&c[0]?n.return:c[0]?n.throw||((r=n.return)&&r.call(n),0):n.next)&&!(r=r.call(n,c[1])).done)return r;switch(n=0,r&&(c=[2&c[0],r.value]),c[0]){case 0:case 1:r=c;break;case 4:return i.label++,{value:c[1],done:!1};case 5:i.label++,n=c[1],c=[0];continue;case 7:c=i.ops.pop(),i.trys.pop();continue;default:if(!(r=(r=i.trys).length>0&&r[r.length-1])&&(6===c[0]||2===c[0])){i=0;continue}if(3===c[0]&&(!r||c[1]>r[0]&&c[1]<r[3])){i.label=c[1];break}if(6===c[0]&&i.label<r[1]){i.label=r[1],r=c;break}if(r&&i.label<r[2]){i.label=r[2],i.ops.push(c);break}r[2]&&i.ops.pop(),i.trys.pop();continue}c=t.call(e,i)}catch(e){c=[6,e],n=0}finally{o=r=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}([c,a])}}}function F(e){var t=(0,a.useField)(),o=(0,l.useRecord)(),c=(0,l.usePlugin)(P.default);return(0,a.useFormEffects)(function(e){(0,i.onFieldChange)("type",function(e){var n=o.id||!e.value;if(e.value){var r=c.triggers.get(e.value);null!=r.sync?(n=!0,t.setValue(r.sync)):t.setInitialValue(!1)}t.setPattern(n?"disabled":"editable")})}),(0,n.useEffect)(function(){if(o.id){t.setPattern("disabled");var e=c.triggers.get(o.type);null!=e.sync?t.setValue(e.sync):t.setInitialValue(!1)}},[o.id,t,c.triggers]),r().createElement(P.RadioWithTooltip,e)}function D(e){var t=(0,l.useApp)();e.visible=!!((0,l.usePlugin)("multi-app-share-collection")||"main"!==t.name)}function T(){var e=c.App.useApp().message,t=(0,d.useTranslation)().t,o=(0,l.useResourceContext)().resource;return{run:function(){return k(function(){return E(this,function(n){switch(n.label){case 0:return[4,o.sync()];case 1:return n.sent(),e.success(t("Operation succeeded")),[2]}})})()}}}function R(){var e=c.App.useApp().message,t=(0,d.useTranslation)().t,o=(0,l.useResourceActionContext)().refresh,n=(0,l.useResourceContext)(),r=n.resource,i=n.targetKey,p=(0,l.useActionContext)().setVisible,s=(0,l.useRecord)()[i],u=(0,a.useForm)(),m=(0,a.useField)();return{run:function(){return k(function(){return E(this,function(n){switch(n.label){case 0:return n.trys.push([0,3,4,5]),[4,u.submit()];case 1:return n.sent(),m.data=m.data||{},m.data.loading=!0,[4,r.revision({filterByTk:s,values:u.values})];case 2:return n.sent(),e.success(t("Operation succeeded")),o(),p(!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 I(){var e,t,o=(0,n.useContext)(l.SchemaComponentContext),i=(0,l.usePlugin)(P.default).useTriggersOptions;return r().createElement(c.Card,{bordered:!1},r().createElement(l.SchemaComponentContext.Provider,{value:(e=function(e){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{},n=Object.keys(o);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(o).filter(function(e){return Object.getOwnPropertyDescriptor(o,e).enumerable}))),n.forEach(function(t){var n,r,c;n=e,r=t,c=o[t],r in n?Object.defineProperty(n,r,{value:c,enumerable:!0,configurable:!0,writable:!0}):n[r]=c})}return e}({},o),t=(t={designable:!1},t),Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);o.push.apply(o,n)}return o})(Object(t)).forEach(function(o){Object.defineProperty(e,o,Object.getOwnPropertyDescriptor(t,o))}),e)},r().createElement(l.SchemaComponent,{schema:w,components:{WorkflowLink:b,ExecutionResourceProvider:m,ExecutionLink:p.a,OpenDrawer:v,ExecutionStatusSelect:S.P,SyncOptionSelect:F,ExecutionStatusColumn:S.r,Tooltip:c.Tooltip},scope:{useTriggersOptions:i,useWorkflowSyncReaction:D,useSyncAction:T,useRefreshActionProps:j.X,useRevisionAction:R}})))}}}]);
@@ -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([["383"],{8958:function(e,t,n){n.d(t,{a:function(){return u}});var o=n(8156),r=n.n(o),c=n(3238),i=n(6128),l=n(3772),a=n(7893),u=function(){var e=(0,c.useTranslation)().t,t=(0,l.useRecord)().id,n=(0,l.useActionContext)().setVisible;return r().createElement(i.Link,{to:(0,a.s_)(t),onClick:function(){return n(!1)}},e("View"))}},2266:function(e,t,n){n.d(t,{P:function(){return b},r:function(){return x}});var o=n(8156),r=n.n(o),c=n(2721),i=n(482),l=n(3238),a=n(3772),u=n(9144),s=n(573);function p(){return(p=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e}).apply(this,arguments)}function f(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},o=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(o=o.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),o.forEach(function(t){var o,r,c;o=e,r=t,c=n[t],r in o?Object.defineProperty(o,r,{value:c,enumerable:!0,configurable:!0,writable:!0}):o[r]=c})}return e}function d(){var e,t,n=(e=["\n display: flex;\n "],!t&&(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}})));return d=function(){return n},n}function m(e){var t,n=(0,a.useCompile)()(e.label),i=(0,o.useCallback)(function(e){e.preventDefault(),e.stopPropagation()},[]),l=(null!==(t=u.uy[e.value])&&void 0!==t?t:{}).color;return r().createElement(c.Tag,{color:l,onMouseDown:i,closable:e.closable,onClose:e.onClose},n)}function y(e){var t=(0,a.useCompile)();return r().createElement(r().Fragment,null,r().createElement(m,e),e.description?r().createElement("span",null,t(e.description)):null)}function b(e){var t,n,o=p({},function(e){if(null==e)throw TypeError("Cannot destructure "+e);return e}(e)),i=o.multiple?"multiple":null;return r().createElement(c.Select,(t=f({role:"button","data-testid":"select-".concat(i||"single")},o),n=(n={mode:i,optionLabelProp:"label",tagRender:m},n),Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n.push.apply(n,o)}return n})(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}),t),u.C6.filter(function(e){return!!e.value&&e.value!==u.r9.ABORTED}).map(function(e){return r().createElement(c.Select.Option,f({key:e.value},e),r().createElement(y,e))}))}function x(e){var t=(0,l.useTranslation)().t,n=(0,a.useResourceActionContext)().refresh,u=(0,a.useResourceContext)().resource,p=(0,a.useRecord)(),f=(0,o.useCallback)(function(){c.Modal.confirm({title:(0,s.KQ)("Cancel the execution"),icon:r().createElement(i.ExclamationCircleFilled,null),content:(0,s.KQ)("Are you sure you want to cancel the execution?"),onOk:function(){u.cancel({filterByTk:p.id}).then(function(){c.message.success(t("Operation succeeded")),n()}).catch(function(e){console.error(e.data.error)})}})},[p]);return r().createElement("div",{className:(0,a.css)(d())},e.children,p.status?null:r().createElement(c.Tooltip,{title:(0,s.KQ)("Cancel the execution")},r().createElement(c.Button,{type:"link",danger:!0,onClick:f,shape:"circle",size:"small",icon:r().createElement(i.StopOutlined,null)})))}},2659:function(e,t,n){n.d(t,{V:function(){return x}});var o,r,c,i=n(8156),l=n.n(i),a=n(6128),u=n(3238),s=n(2721),p=n(3772),f=n(9144),d=n(573),m=n(7893);function y(e,t,n,o,r,c,i){try{var l=e[c](i),a=l.value}catch(e){n(e);return}l.done?t(a):Promise.resolve(a).then(o,r)}var b={name:"execution-executions",fields:[{interface:"id",type:"bigInt",name:"id",uiSchema:{type:"number",title:'{{t("ID")}}',"x-component":"Input","x-component-props":{},"x-read-pretty":!0}},{interface:"createdAt",type:"datetime",name:"createdAt",uiSchema:{type:"datetime",title:'{{t("Triggered at", { ns: "'.concat(d.A7,'" })}}'),"x-component":"DatePicker","x-component-props":{},"x-read-pretty":!0}},{interface:"m2o",type:"belongsTo",name:"workflowId",uiSchema:(o={type:"number",title:'{{t("Version", { ns: "'.concat(d.A7,'" })}}')},r="x-component",c=function(e){var t=e.value,n=(0,p.useActionContext)().setVisible;return l().createElement(a.Link,{to:(0,m.SI)(t),onClick:function(){return n(!1)}},"#".concat(t))},r in o?Object.defineProperty(o,r,{value:c,enumerable:!0,configurable:!0,writable:!0}):o[r]=c,o)},{type:"number",name:"status",interface:"select",uiSchema:{title:'{{t("Status", { ns: "'.concat(d.A7,'" })}}'),type:"string","x-component":"Select","x-decorator":"FormItem",enum:f.C6}}]},x={type:"void",name:"executionHistoryDrawer",title:'{{t("Execution history", { ns: "'.concat(d.A7,'" })}}'),"x-component":"Action.Drawer",properties:{content:{type:"void","x-decorator":"ExecutionResourceProvider","x-decorator-props":{collection:b,resourceName:"executions",request:{resource:"executions",action:"list",params:{appends:["workflow.id","workflow.title"],pageSize:20,sort:["-createdAt"],filter:{}}}},properties:{actions:{type:"void","x-component":"ActionBar","x-component-props":{style:{marginBottom:16}},properties:{refresher:{type:"void",title:'{{ t("Refresh") }}',"x-component":"Action","x-use-component-props":"useRefreshActionProps","x-component-props":{icon:"ReloadOutlined"}},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?')}}"}}},clear:{type:"void",title:'{{t("Clear")}}',"x-component":"Action","x-component-props":{useAction:function(){var e=(0,u.useTranslation)().t,t=(0,p.useResourceActionContext)(),n=t.refresh,o=t.defaultRequest,r=(0,p.useResourceContext)().resource,c=(0,p.useActionContext)().setVisible;return{run:function(){var t;return(t=function(){var t;return function(e,t){var n,o,r,c,i={label:0,sent:function(){if(1&r[0])throw r[1];return r[1]},trys:[],ops:[]};return c={next:l(0),throw:l(1),return:l(2)},"function"==typeof Symbol&&(c[Symbol.iterator]=function(){return this}),c;function l(c){return function(l){return function(c){if(n)throw TypeError("Generator is already executing.");for(;i;)try{if(n=1,o&&(r=2&c[0]?o.return:c[0]?o.throw||((r=o.return)&&r.call(o),0):o.next)&&!(r=r.call(o,c[1])).done)return r;switch(o=0,r&&(c=[2&c[0],r.value]),c[0]){case 0:case 1:r=c;break;case 4:return i.label++,{value:c[1],done:!1};case 5:i.label++,o=c[1],c=[0];continue;case 7:c=i.ops.pop(),i.trys.pop();continue;default:if(!(r=(r=i.trys).length>0&&r[r.length-1])&&(6===c[0]||2===c[0])){i=0;continue}if(3===c[0]&&(!r||c[1]>r[0]&&c[1]<r[3])){i.label=c[1];break}if(6===c[0]&&i.label<r[1]){i.label=r[1],r=c;break}if(r&&i.label<r[2]){i.label=r[2],i.ops.push(c);break}r[2]&&i.ops.pop(),i.trys.pop();continue}c=t.call(e,i)}catch(e){c=[6,e],o=0}finally{n=r=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}([c,l])}}}(this,function(i){switch(i.label){case 0:return[4,r.destroy({filter:null===(t=o.params)||void 0===t?void 0:t.filter})];case 1:return i.sent(),s.message.success(e("Operation succeeded")),n(),c(!1),[2]}})},function(){var e=this,n=arguments;return new Promise(function(o,r){var c=t.apply(e,n);function i(e){y(c,o,r,i,l,"next",e)}function l(e){y(c,o,r,i,l,"throw",e)}i(void 0)})})()}}},confirm:{title:'{{t("Clear all executions", { ns: "'.concat(d.A7,'" })}}'),content:'{{t("Clear executions will not reset executed count, and started executions will not be deleted, are you sure you want to delete them all?", { ns: "'.concat(d.A7,'" })}}')}}}}},table:{type:"void","x-component":"Table.Void","x-component-props":{rowKey:"id",rowSelection:{type:"checkbox"},useDataSource:"{{ cm.useDataSourceFromRAC }}"},properties:{id:{type:"void","x-decorator":"Table.Column.Decorator","x-component":"Table.Column",properties:{id:{type:"number","x-component":"CollectionField","x-read-pretty":!0}}},createdAt:{type:"void","x-decorator":"Table.Column.Decorator","x-component":"Table.Column",properties:{createdAt:{type:"datetime","x-component":"CollectionField","x-component-props":{showTime:!0},"x-read-pretty":!0}}},workflowId:{type:"void","x-decorator":"Table.Column.Decorator","x-component":"Table.Column",properties:{workflowId:{type:"number","x-component":"CollectionField","x-read-pretty":!0}}},status:{type:"void","x-decorator":"Table.Column.Decorator","x-component":"Table.Column",title:'{{t("Status", { ns: "'.concat(d.A7,'" })}}'),properties:{status:{type:"number","x-decorator":"ExecutionStatusColumn","x-component":"CollectionField","x-read-pretty":!0}}},actions:{type:"void",title:'{{ t("Actions") }}',"x-component":"Table.Column",properties:{actions:{type:"void","x-component":"Space","x-component-props":{split:"|"},properties:{link:{type:"void","x-component":"ExecutionLink"},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 }}"},"x-reactions":[{dependencies:["..status"],fulfill:{state:{visible:"{{ $deps[0] !== ".concat(f.r9.STARTED," }}")}}}]}}}}}}}}}}}},8327:function(e,t,n){n.d(t,{X:function(){return c}});var o=n(3772);function r(e,t,n,o,r,c,i){try{var l=e[c](i),a=l.value}catch(e){n(e);return}l.done?t(a):Promise.resolve(a).then(o,r)}function c(){var e=(0,o.useResourceActionContext)();return{onClick:function(){var t;return(t=function(){var t;return function(e,t){var n,o,r,c,i={label:0,sent:function(){if(1&r[0])throw r[1];return r[1]},trys:[],ops:[]};return c={next:l(0),throw:l(1),return:l(2)},"function"==typeof Symbol&&(c[Symbol.iterator]=function(){return this}),c;function l(c){return function(l){return function(c){if(n)throw TypeError("Generator is already executing.");for(;i;)try{if(n=1,o&&(r=2&c[0]?o.return:c[0]?o.throw||((r=o.return)&&r.call(o),0):o.next)&&!(r=r.call(o,c[1])).done)return r;switch(o=0,r&&(c=[2&c[0],r.value]),c[0]){case 0:case 1:r=c;break;case 4:return i.label++,{value:c[1],done:!1};case 5:i.label++,o=c[1],c=[0];continue;case 7:c=i.ops.pop(),i.trys.pop();continue;default:if(!(r=(r=i.trys).length>0&&r[r.length-1])&&(6===c[0]||2===c[0])){i=0;continue}if(3===c[0]&&(!r||c[1]>r[0]&&c[1]<r[3])){i.label=c[1];break}if(6===c[0]&&i.label<r[1]){i.label=r[1],r=c;break}if(r&&i.label<r[2]){i.label=r[2],i.ops.push(c);break}r[2]&&i.ops.pop(),i.trys.pop();continue}c=t.call(e,i)}catch(e){c=[6,e],o=0}finally{n=r=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}([c,l])}}}(this,function(n){return null==e||null===(t=e.refresh)||void 0===t||t.call(e),[2]})},function(){var e=this,n=arguments;return new Promise(function(o,c){var i=t.apply(e,n);function l(e){r(i,o,c,l,a,"next",e)}function a(e){r(i,o,c,l,a,"throw",e)}l(void 0)})})()}}}}}]);