@nocobase/plugin-workflow 3.0.0-alpha.6 → 3.0.0-alpha.8

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.
@@ -76,8 +76,8 @@ var jobs_default = {
76
76
  name: "result"
77
77
  },
78
78
  {
79
- type: "json",
80
- name: "meta"
79
+ type: "datetime",
80
+ name: "startedAt"
81
81
  },
82
82
  /**
83
83
  * @experimental
@@ -11,33 +11,33 @@ module.exports = {
11
11
  "react": "18.2.0",
12
12
  "@formily/core": "2.3.7",
13
13
  "@formily/react": "2.3.7",
14
- "@nocobase/client": "3.0.0-alpha.6",
15
- "@nocobase/utils": "3.0.0-alpha.6",
14
+ "@nocobase/client": "3.0.0-alpha.8",
15
+ "@nocobase/utils": "3.0.0-alpha.8",
16
16
  "antd": "5.24.2",
17
17
  "@ant-design/icons": "5.6.1",
18
- "@nocobase/flow-engine": "3.0.0-alpha.6",
18
+ "@nocobase/flow-engine": "3.0.0-alpha.8",
19
19
  "ahooks": "3.7.8",
20
20
  "react-router-dom": "6.30.1",
21
21
  "react-i18next": "11.18.6",
22
22
  "lodash": "4.18.1",
23
23
  "@dnd-kit/core": "6.1.0",
24
24
  "@formily/shared": "2.3.7",
25
- "@nocobase/plugin-mobile": "3.0.0-alpha.6",
26
- "@nocobase/client-v2": "3.0.0-alpha.6",
25
+ "@nocobase/plugin-mobile": "3.0.0-alpha.8",
26
+ "@nocobase/client-v2": "3.0.0-alpha.8",
27
27
  "sequelize": "6.35.2",
28
- "@nocobase/server": "3.0.0-alpha.6",
29
- "@nocobase/database": "3.0.0-alpha.6",
30
- "@nocobase/data-source-manager": "3.0.0-alpha.6",
31
- "@nocobase/logger": "3.0.0-alpha.6",
32
- "@nocobase/evaluators": "3.0.0-alpha.6",
28
+ "@nocobase/server": "3.0.0-alpha.8",
29
+ "@nocobase/database": "3.0.0-alpha.8",
30
+ "@nocobase/data-source-manager": "3.0.0-alpha.8",
31
+ "@nocobase/logger": "3.0.0-alpha.8",
32
+ "@nocobase/evaluators": "3.0.0-alpha.8",
33
33
  "@formily/antd-v5": "1.2.3",
34
34
  "@formily/reactive": "2.3.7",
35
35
  "@emotion/css": "11.13.0",
36
36
  "@formily/json-schema": "2.3.7",
37
37
  "antd-style": "3.7.1",
38
38
  "dayjs": "1.11.13",
39
- "@nocobase/actions": "3.0.0-alpha.6",
40
- "@nocobase/plugin-workflow-test": "3.0.0-alpha.6",
41
- "@nocobase/test": "3.0.0-alpha.6",
39
+ "@nocobase/actions": "3.0.0-alpha.8",
40
+ "@nocobase/plugin-workflow-test": "3.0.0-alpha.8",
41
+ "@nocobase/test": "3.0.0-alpha.8",
42
42
  "@dnd-kit/sortable": "7.0.2"
43
43
  };
@@ -1 +1 @@
1
- {"name":"cron-parser","version":"4.4.0","description":"Node.js library for parsing crontab instructions","main":"lib/parser.js","types":"index.d.ts","typesVersions":{"<4.1":{"*":["types/ts3/*"]}},"directories":{"test":"test"},"scripts":{"test:tsd":"tsd","test:unit":"TZ=UTC tap ./test/*.js","test:cover":"TZ=UTC tap --coverage-report=html ./test/*.js","lint":"eslint .","lint:fix":"eslint --fix .","test":"npm run lint && npm run test:unit && npm run test:tsd"},"repository":{"type":"git","url":"https://github.com/harrisiirak/cron-parser.git"},"keywords":["cron","crontab","parser"],"author":"Harri Siirak","contributors":["Nicholas Clawson","Daniel Prentis <daniel@salsitasoft.com>","Renault John Lecoultre","Richard Astbury <richard.astbury@gmail.com>","Meaglin Wasabi <Meaglin.wasabi@gmail.com>","Mike Kusold <hello@mikekusold.com>","Alex Kit <alex.kit@atmajs.com>","Santiago Gimeno <santiago.gimeno@gmail.com>","Daniel <darc.tec@gmail.com>","Christian Steininger <christian.steininger.cs@gmail.com>","Mykola Piskovyi <m.piskovyi@gmail.com>","Brian Vaughn <brian.david.vaughn@gmail.com>","Nicholas Clawson <nickclaw@gmail.com>","Yasuhiroki <yasuhiroki.duck@gmail.com>","Nicholas Clawson <nickclaw@gmail.com>","Brendan Warkentin <faazshift@gmail.com>","Charlie Fish <fishcharlie.code@gmail.com>","Ian Graves <ian+diskimage@iangrav.es>","Andy Thompson <me@andytson.com>","Regev Brody <regevbr@gmail.com>"],"license":"MIT","dependencies":{"luxon":"^1.28.0"},"devDependencies":{"eslint":"^8.2.0","sinon":"^10.0.0","tap":"^16.0.1","tsd":"^0.19.0"},"engines":{"node":">=0.8"},"browser":{"fs":false},"tap":{"check-coverage":false},"tsd":{"directory":"test","compilerOptions":{"lib":["es2017","dom"]}},"_lastModified":"2026-08-03T08:01:35.430Z"}
1
+ {"name":"cron-parser","version":"4.4.0","description":"Node.js library for parsing crontab instructions","main":"lib/parser.js","types":"index.d.ts","typesVersions":{"<4.1":{"*":["types/ts3/*"]}},"directories":{"test":"test"},"scripts":{"test:tsd":"tsd","test:unit":"TZ=UTC tap ./test/*.js","test:cover":"TZ=UTC tap --coverage-report=html ./test/*.js","lint":"eslint .","lint:fix":"eslint --fix .","test":"npm run lint && npm run test:unit && npm run test:tsd"},"repository":{"type":"git","url":"https://github.com/harrisiirak/cron-parser.git"},"keywords":["cron","crontab","parser"],"author":"Harri Siirak","contributors":["Nicholas Clawson","Daniel Prentis <daniel@salsitasoft.com>","Renault John Lecoultre","Richard Astbury <richard.astbury@gmail.com>","Meaglin Wasabi <Meaglin.wasabi@gmail.com>","Mike Kusold <hello@mikekusold.com>","Alex Kit <alex.kit@atmajs.com>","Santiago Gimeno <santiago.gimeno@gmail.com>","Daniel <darc.tec@gmail.com>","Christian Steininger <christian.steininger.cs@gmail.com>","Mykola Piskovyi <m.piskovyi@gmail.com>","Brian Vaughn <brian.david.vaughn@gmail.com>","Nicholas Clawson <nickclaw@gmail.com>","Yasuhiroki <yasuhiroki.duck@gmail.com>","Nicholas Clawson <nickclaw@gmail.com>","Brendan Warkentin <faazshift@gmail.com>","Charlie Fish <fishcharlie.code@gmail.com>","Ian Graves <ian+diskimage@iangrav.es>","Andy Thompson <me@andytson.com>","Regev Brody <regevbr@gmail.com>"],"license":"MIT","dependencies":{"luxon":"^1.28.0"},"devDependencies":{"eslint":"^8.2.0","sinon":"^10.0.0","tap":"^16.0.1","tsd":"^0.19.0"},"engines":{"node":">=0.8"},"browser":{"fs":false},"tap":{"check-coverage":false},"tsd":{"directory":"test","compilerOptions":{"lib":["es2017","dom"]}},"_lastModified":"2026-08-10T06:32:50.318Z"}
@@ -1 +1 @@
1
- {"name":"joi","description":"Object schema validation","version":"17.13.3","repository":"git://github.com/hapijs/joi","main":"lib/index.js","types":"lib/index.d.ts","browser":"dist/joi-browser.min.js","files":["lib/**/*","dist/*"],"keywords":["schema","validation"],"dependencies":{"@hapi/hoek":"^9.3.0","@hapi/topo":"^5.1.0","@sideway/address":"^4.1.5","@sideway/formula":"^3.0.1","@sideway/pinpoint":"^2.0.0"},"devDependencies":{"@hapi/bourne":"2.x.x","@hapi/code":"8.x.x","@hapi/joi-legacy-test":"npm:@hapi/joi@15.x.x","@hapi/lab":"^25.1.3","@types/node":"^14.18.63","typescript":"4.3.x"},"scripts":{"prepublishOnly":"cd browser && npm install && npm run build","test":"lab -t 100 -a @hapi/code -L -Y","test-cov-html":"lab -r html -o coverage.html -a @hapi/code"},"license":"BSD-3-Clause","_lastModified":"2026-08-03T08:01:35.155Z"}
1
+ {"name":"joi","description":"Object schema validation","version":"17.13.3","repository":"git://github.com/hapijs/joi","main":"lib/index.js","types":"lib/index.d.ts","browser":"dist/joi-browser.min.js","files":["lib/**/*","dist/*"],"keywords":["schema","validation"],"dependencies":{"@hapi/hoek":"^9.3.0","@hapi/topo":"^5.1.0","@sideway/address":"^4.1.5","@sideway/formula":"^3.0.1","@sideway/pinpoint":"^2.0.0"},"devDependencies":{"@hapi/bourne":"2.x.x","@hapi/code":"8.x.x","@hapi/joi-legacy-test":"npm:@hapi/joi@15.x.x","@hapi/lab":"^25.1.3","@types/node":"^14.18.63","typescript":"4.3.x"},"scripts":{"prepublishOnly":"cd browser && npm install && npm run build","test":"lab -t 100 -a @hapi/code -L -Y","test-cov-html":"lab -r html -o coverage.html -a @hapi/code"},"license":"BSD-3-Clause","_lastModified":"2026-08-10T06:32:50.013Z"}
@@ -1 +1 @@
1
- {"name":"lru-cache","description":"A cache object that deletes the least-recently-used items.","version":"11.3.5","author":"Isaac Z. Schlueter <i@izs.me>","keywords":["mru","lru","cache"],"sideEffects":false,"scripts":{"build":"npm run prepare","prepare":"tshy && bash scripts/build.sh","pretest":"npm run prepare","presnap":"npm run prepare","test":"tap","snap":"tap","preversion":"npm test","postversion":"npm publish","prepublishOnly":"git push origin --follow-tags","format":"prettier --write .","typedoc":"typedoc --tsconfig ./.tshy/esm.json ./src/*.ts","benchmark-results-typedoc":"bash scripts/benchmark-results-typedoc.sh","prebenchmark":"npm run prepare","benchmark":"make -C benchmark","preprofile":"npm run prepare","profile":"make -C benchmark profile","lint":"oxlint --fix src test","postsnap":"npm run lint","postlint":"npm run format"},"main":"./dist/commonjs/index.min.js","types":"./dist/commonjs/index.d.ts","tshy":{"esmDialects":["node","browser"],"exports":{"./raw":"./src/index.ts",".":{"import":{"node":{"types":"./dist/esm/node/index.d.ts","default":"./dist/esm/node/index.min.js"},"browser":{"types":"./dist/esm/browser/index.d.ts","default":"./dist/esm/browser/index.min.js"},"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.min.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.min.js"}}},"selfLink":false},"repository":{"type":"git","url":"git+ssh://git@github.com/isaacs/node-lru-cache.git"},"devDependencies":{"benchmark":"^2.1.4","esbuild":"^0.25.9","marked":"^4.2.12","mkdirp":"^3.0.1","oxlint":"^1.58.0","oxlint-tsgolint":"^0.19.0","prettier":"^3.8.1","tap":"^21.6.3","tshy":"^4.1.1","typedoc":"^0.28.18"},"license":"BlueOak-1.0.0","files":["dist"],"engines":{"node":"20 || >=22"},"exports":{"./raw":{"import":{"node":{"types":"./dist/esm/node/index.d.ts","default":"./dist/esm/node/index.js"},"browser":{"types":"./dist/esm/browser/index.d.ts","default":"./dist/esm/browser/index.js"},"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}},".":{"import":{"node":{"types":"./dist/esm/node/index.d.ts","default":"./dist/esm/node/index.min.js"},"browser":{"types":"./dist/esm/browser/index.d.ts","default":"./dist/esm/browser/index.min.js"},"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.min.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.min.js"}}},"type":"module","module":"./dist/esm/index.min.js","_lastModified":"2026-08-03T08:01:34.368Z"}
1
+ {"name":"lru-cache","description":"A cache object that deletes the least-recently-used items.","version":"11.3.5","author":"Isaac Z. Schlueter <i@izs.me>","keywords":["mru","lru","cache"],"sideEffects":false,"scripts":{"build":"npm run prepare","prepare":"tshy && bash scripts/build.sh","pretest":"npm run prepare","presnap":"npm run prepare","test":"tap","snap":"tap","preversion":"npm test","postversion":"npm publish","prepublishOnly":"git push origin --follow-tags","format":"prettier --write .","typedoc":"typedoc --tsconfig ./.tshy/esm.json ./src/*.ts","benchmark-results-typedoc":"bash scripts/benchmark-results-typedoc.sh","prebenchmark":"npm run prepare","benchmark":"make -C benchmark","preprofile":"npm run prepare","profile":"make -C benchmark profile","lint":"oxlint --fix src test","postsnap":"npm run lint","postlint":"npm run format"},"main":"./dist/commonjs/index.min.js","types":"./dist/commonjs/index.d.ts","tshy":{"esmDialects":["node","browser"],"exports":{"./raw":"./src/index.ts",".":{"import":{"node":{"types":"./dist/esm/node/index.d.ts","default":"./dist/esm/node/index.min.js"},"browser":{"types":"./dist/esm/browser/index.d.ts","default":"./dist/esm/browser/index.min.js"},"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.min.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.min.js"}}},"selfLink":false},"repository":{"type":"git","url":"git+ssh://git@github.com/isaacs/node-lru-cache.git"},"devDependencies":{"benchmark":"^2.1.4","esbuild":"^0.25.9","marked":"^4.2.12","mkdirp":"^3.0.1","oxlint":"^1.58.0","oxlint-tsgolint":"^0.19.0","prettier":"^3.8.1","tap":"^21.6.3","tshy":"^4.1.1","typedoc":"^0.28.18"},"license":"BlueOak-1.0.0","files":["dist"],"engines":{"node":"20 || >=22"},"exports":{"./raw":{"import":{"node":{"types":"./dist/esm/node/index.d.ts","default":"./dist/esm/node/index.js"},"browser":{"types":"./dist/esm/browser/index.d.ts","default":"./dist/esm/browser/index.js"},"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}},".":{"import":{"node":{"types":"./dist/esm/node/index.d.ts","default":"./dist/esm/node/index.min.js"},"browser":{"types":"./dist/esm/browser/index.d.ts","default":"./dist/esm/browser/index.min.js"},"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.min.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.min.js"}}},"type":"module","module":"./dist/esm/index.min.js","_lastModified":"2026-08-10T06:32:49.224Z"}
@@ -1 +1 @@
1
- {"name":"nodejs-snowflake","collaborators":["Utkarsh Srivastava <utkarsh@sagacious.dev>"],"description":"Generate time sortable 64 bits unique ids for distributed systems (inspired from twitter snowflake)","version":"2.0.1","license":"Apache 2.0","repository":{"type":"git","url":"https://github.com/utkarsh-pro/nodejs-snowflake.git"},"files":["nodejs_snowflake_bg.wasm","nodejs_snowflake.js","nodejs_snowflake.d.ts"],"main":"nodejs_snowflake.js","types":"nodejs_snowflake.d.ts","_lastModified":"2026-08-03T08:01:34.196Z"}
1
+ {"name":"nodejs-snowflake","collaborators":["Utkarsh Srivastava <utkarsh@sagacious.dev>"],"description":"Generate time sortable 64 bits unique ids for distributed systems (inspired from twitter snowflake)","version":"2.0.1","license":"Apache 2.0","repository":{"type":"git","url":"https://github.com/utkarsh-pro/nodejs-snowflake.git"},"files":["nodejs_snowflake_bg.wasm","nodejs_snowflake.js","nodejs_snowflake.d.ts"],"main":"nodejs_snowflake.js","types":"nodejs_snowflake.d.ts","_lastModified":"2026-08-10T06:32:49.051Z"}
@@ -70,7 +70,7 @@ export default class PluginWorkflowServer extends Plugin {
70
70
  abortExecutionIfExpired(execution: ExecutionModel, options?: {
71
71
  transaction?: Transaction;
72
72
  }): Promise<boolean>;
73
- registerRunningExecution(executionId: number | string, abort: (reason?: string) => void): void;
73
+ registerRunningExecution(executionId: number | string, abort: (reason?: string) => void): () => void;
74
74
  unregisterRunningExecution(executionId: number | string): void;
75
75
  abortRunningExecution(executionId: number | string, reason?: string): boolean;
76
76
  /**
@@ -225,7 +225,7 @@ class PluginWorkflowServer extends import_server.Plugin {
225
225
  return this.timeoutManager.abortExecutionIfExpired(execution, options);
226
226
  }
227
227
  registerRunningExecution(executionId, abort) {
228
- this.runningExecutionRegistry.register(executionId, { abort });
228
+ return this.runningExecutionRegistry.register(executionId, { abort });
229
229
  }
230
230
  unregisterRunningExecution(executionId) {
231
231
  this.runningExecutionRegistry.unregister(executionId);
@@ -73,6 +73,7 @@ export default class Processor {
73
73
  abortController: AbortController;
74
74
  timeoutGuard: NodeJS.Timeout | null;
75
75
  private runningRegistered;
76
+ private unregisterRunningExecution?;
76
77
  private abortReason;
77
78
  private aborted;
78
79
  constructor(execution: ExecutionModel, options: ProcessorOptions);
@@ -90,6 +90,7 @@ class Processor {
90
90
  abortController = new AbortController();
91
91
  timeoutGuard = null;
92
92
  runningRegistered = false;
93
+ unregisterRunningExecution;
93
94
  abortReason = null;
94
95
  aborted = false;
95
96
  get abortSignal() {
@@ -461,34 +462,40 @@ class Processor {
461
462
  }
462
463
  if (this.jobsToSave.size) {
463
464
  const newJobs = [];
465
+ const JobCollection = this.options.plugin.db.getCollection("jobs");
466
+ const JobsModel = this.options.plugin.db.getModel("jobs");
464
467
  for (const job of this.jobsToSave.values()) {
465
468
  if (job.isNewRecord) {
466
469
  newJobs.push(job);
467
470
  } else {
468
- const JobCollection = this.options.plugin.db.getCollection("jobs");
469
471
  const changes = [];
470
472
  if (job.changed("status")) {
471
- changes.push([`status`, job.status]);
472
- job.changed("status", false);
473
+ changes.push(["status", job.status]);
473
474
  }
474
475
  if (job.changed("meta")) {
475
- changes.push([`meta`, JSON.stringify(job.meta ?? null)]);
476
- job.changed("meta", false);
476
+ changes.push(["meta", JSON.stringify(job.meta ?? null)]);
477
477
  }
478
478
  if (job.changed("result")) {
479
- changes.push([`result`, JSON.stringify(job.result ?? null)]);
480
- job.changed("result", false);
479
+ changes.push(["result", JSON.stringify(job.result ?? null)]);
480
+ }
481
+ if (job.changed("startedAt")) {
482
+ changes.push(["startedAt", job.startedAt]);
481
483
  }
482
484
  if (changes.length) {
485
+ const idColumn = JobsModel.rawAttributes.id.field || "id";
483
486
  await this.options.plugin.db.sequelize.query(
484
- `UPDATE ${JobCollection.quotedTableName()} SET ${changes.map(([key]) => `${key} = ?`)} WHERE id='${job.id}'`,
487
+ `UPDATE ${JobCollection.quotedTableName()} SET ${changes.map(
488
+ ([field]) => `${this.options.plugin.db.quoteIdentifier(JobsModel.rawAttributes[field].field || field)} = ?`
489
+ )} WHERE ${this.options.plugin.db.quoteIdentifier(idColumn)}='${job.id}'`,
485
490
  { replacements: changes.map(([, value]) => value) }
486
491
  );
492
+ for (const [field] of changes) {
493
+ job.changed(field, false);
494
+ }
487
495
  }
488
496
  }
489
497
  }
490
498
  if (newJobs.length) {
491
- const JobsModel = this.options.plugin.db.getModel("jobs");
492
499
  for (let offset = 0; offset < newJobs.length; offset += JOB_SAVE_BATCH_SIZE) {
493
500
  const batch = newJobs.slice(offset, offset + JOB_SAVE_BATCH_SIZE);
494
501
  await JobsModel.bulkCreate(
@@ -644,6 +651,7 @@ class Processor {
644
651
  const { database } = this.execution.constructor;
645
652
  const model = database.getModel("jobs");
646
653
  let job;
654
+ const startedAt = Object.prototype.hasOwnProperty.call(payload, "startedAt") ? payload.startedAt : /* @__PURE__ */ new Date();
647
655
  if (payload instanceof model) {
648
656
  job = payload;
649
657
  job.set("updatedAt", /* @__PURE__ */ new Date());
@@ -653,6 +661,7 @@ class Processor {
653
661
  status: payload.status,
654
662
  result: Object.prototype.hasOwnProperty.call(payload, "result") ? payload.result : null,
655
663
  meta: Object.prototype.hasOwnProperty.call(payload, "meta") ? payload.meta : null,
664
+ startedAt,
656
665
  updatedAt: /* @__PURE__ */ new Date()
657
666
  });
658
667
  } else {
@@ -660,6 +669,7 @@ class Processor {
660
669
  {
661
670
  ...payload,
662
671
  id: this.options.plugin.snowflake.getUniqueID().toString(),
672
+ startedAt,
663
673
  createdAt: /* @__PURE__ */ new Date(),
664
674
  updatedAt: /* @__PURE__ */ new Date(),
665
675
  executionId: this.execution.id
@@ -688,7 +698,10 @@ class Processor {
688
698
  this.options.plugin.timeoutManager.clear(this.execution.id);
689
699
  this.abortReason = null;
690
700
  this.aborted = false;
691
- this.options.plugin.registerRunningExecution(this.execution.id, (reason) => this.abortExecution(reason));
701
+ this.unregisterRunningExecution = this.options.plugin.registerRunningExecution(
702
+ this.execution.id,
703
+ (reason) => this.abortExecution(reason)
704
+ );
692
705
  this.runningRegistered = true;
693
706
  const remaining = this.execution.expiresAt ? this.execution.expiresAt.getTime() - Date.now() : null;
694
707
  if (remaining == null) {
@@ -704,6 +717,7 @@ class Processor {
704
717
  return this.options.plugin.timeoutManager.shouldContinue(this.execution);
705
718
  }
706
719
  leaveRunningState() {
720
+ var _a;
707
721
  if (this.timeoutGuard) {
708
722
  clearTimeout(this.timeoutGuard);
709
723
  this.timeoutGuard = null;
@@ -711,7 +725,8 @@ class Processor {
711
725
  if (!this.runningRegistered) {
712
726
  return;
713
727
  }
714
- this.options.plugin.unregisterRunningExecution(this.execution.id);
728
+ (_a = this.unregisterRunningExecution) == null ? void 0 : _a.call(this);
729
+ this.unregisterRunningExecution = void 0;
715
730
  this.runningRegistered = false;
716
731
  }
717
732
  /**
@@ -11,8 +11,8 @@ type AbortHandler = {
11
11
  };
12
12
  export default class RunningExecutionRegistry {
13
13
  private readonly executions;
14
- register(executionId: number | string, handler: AbortHandler): void;
15
- unregister(executionId: number | string): void;
14
+ register(executionId: number | string, handler: AbortHandler): () => void;
15
+ unregister(executionId: number | string, handler?: AbortHandler): void;
16
16
  abort(executionId: number | string, reason?: string): boolean;
17
17
  }
18
18
  export {};
@@ -32,17 +32,32 @@ module.exports = __toCommonJS(RunningExecutionRegistry_exports);
32
32
  class RunningExecutionRegistry {
33
33
  executions = /* @__PURE__ */ new Map();
34
34
  register(executionId, handler) {
35
- this.executions.set(String(executionId), handler);
35
+ const key = String(executionId);
36
+ const handlers = this.executions.get(key) ?? /* @__PURE__ */ new Set();
37
+ handlers.add(handler);
38
+ this.executions.set(key, handlers);
39
+ return () => this.unregister(executionId, handler);
36
40
  }
37
- unregister(executionId) {
38
- this.executions.delete(String(executionId));
41
+ unregister(executionId, handler) {
42
+ const key = String(executionId);
43
+ if (!handler) {
44
+ this.executions.delete(key);
45
+ return;
46
+ }
47
+ const handlers = this.executions.get(key);
48
+ handlers == null ? void 0 : handlers.delete(handler);
49
+ if (!(handlers == null ? void 0 : handlers.size)) {
50
+ this.executions.delete(key);
51
+ }
39
52
  }
40
53
  abort(executionId, reason) {
41
- const handler = this.executions.get(String(executionId));
42
- if (!handler) {
54
+ const handlers = this.executions.get(String(executionId));
55
+ if (!(handlers == null ? void 0 : handlers.size)) {
43
56
  return false;
44
57
  }
45
- handler.abort(reason);
58
+ for (const handler of handlers) {
59
+ handler.abort(reason);
60
+ }
46
61
  return true;
47
62
  }
48
63
  }
@@ -16,6 +16,7 @@ export default class JobModel extends Model {
16
16
  status: number;
17
17
  result?: any;
18
18
  meta?: any;
19
+ startedAt?: Date | null;
19
20
  createdAt: Date;
20
21
  updatedAt: Date;
21
22
  upstreamId: number;
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": "3.0.0-alpha.6",
9
+ "version": "3.0.0-alpha.8",
10
10
  "license": "Apache-2.0",
11
11
  "main": "./dist/server/index.js",
12
12
  "homepage": "https://docs.nocobase.com/handbook/workflow",
@@ -51,7 +51,7 @@
51
51
  "@nocobase/test": "2.x",
52
52
  "@nocobase/utils": "2.x"
53
53
  },
54
- "gitHead": "3508eabe683b9a47a28d0f3425098eb58873a9d7",
54
+ "gitHead": "ce017f3deb8b2414c6b13818042c4187270d1d8a",
55
55
  "keywords": [
56
56
  "Workflow"
57
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([["509"],{5764:function(e,t,n){n.r(t),n.d(t,{default:function(){return el}});var r=n(7375),o=n(3485),a=n(5477),l=n(7694),i=n(2625),u=n(2059),c=n(9155),s=n.n(c),d=n(5827),f=n(7541),m=n(5927),p=n(7001),y=n(9488),b=n(2697),v=n(1652),h=n(5953);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 w(e,t,n,r,o,a,l){try{var i=e[a](l),u=i.value}catch(e){n(e);return}i.done?t(u):Promise.resolve(u).then(r,o)}function E(e){return function(){var t=this,n=arguments;return new Promise(function(r,o){var a=e.apply(t,n);function l(e){w(a,r,o,l,i,"next",e)}function i(e){w(a,r,o,l,i,"throw",e)}l(void 0)})}}function S(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 a=[],l=!0,i=!1;try{for(o=o.call(e);!(l=(n=o.next()).done)&&(a.push(n.value),!t||a.length!==t);l=!0);}catch(e){i=!0,r=e}finally{try{l||null==o.return||o.return()}finally{if(i)throw r}}return a}}(e,t)||k(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 k(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 x(e,t){var n,r,o,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},l=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(l,"next",{value:u(0)}),i(l,"throw",{value:u(1)}),i(l,"return",{value:u(2)}),"function"==typeof Symbol&&i(l,Symbol.iterator,{value:function(){return this}}),l;function u(i){return function(u){var c=[i,u];if(n)throw TypeError("Generator is already executing.");for(;l&&(l=0,c[0]&&(a=0)),a;)try{if(n=1,r&&(o=2&c[0]?r.return:c[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,c[1])).done)return o;switch(r=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return a.label++,{value:c[1],done:!1};case 5:a.label++,r=c[1],c=[0];continue;case 7:c=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===c[0]||2===c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(6===c[0]&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=t.call(e,a)}catch(e){c=[6,e],r=0}finally{n=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}var C=["red","magenta","volcano","orange","gold","lime","green","cyan","blue","geekblue","purple","default"];function A(e){var t=(0,h.useTranslation)().t,n=C.map(function(e){return{value:e,label:s().createElement(u.Tag,{color:"default"===e?void 0:e},t(e.charAt(0).toUpperCase()+e.slice(1)))}});return s().createElement(u.Select,{allowClear:!0,value:e.value,options:n,onChange:e.onChange})}function F(e){var t=e.activeKey,n=e.onChange,r=e.categories,a=e.refreshCategories,d=e.className,f=(0,y.ec)().t,m=(0,y.kj)(),p=(0,l.useFlowContext)(),b=u.App.useApp().modal,v=p.api.resource("workflowCategories"),h=S((0,c.useState)(null),2),w=h[0],C=h[1],F=S((0,c.useState)(!1),2),O=F[0],T=F[1],I=S((0,c.useState)(!1),2),j=I[0],M=I[1],z=S(u.Form.useForm(),1)[0],P=(0,c.useMemo)(function(){return((function(e){if(Array.isArray(e))return g(e)})(r)||function(e){if("u">typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(r)||k(r)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()).sort(function(e,t){var n,r;return(null!=(n=e.sort)?n:0)-(null!=(r=t.sort)?r:0)}).map(function(e){return{id:e.id,label:m(e.title),color:e.color}})},[r,m]),D=(0,i.useMemoizedFn)(function(e){return r.find(function(t){return String(t.id)===String(e)})}),L=(0,i.useMemoizedFn)(function(){C(null),z.resetFields(),T(!0)}),B=(0,i.useMemoizedFn)(function(e){var t=D(e);t&&(C(t),z.setFieldsValue({title:t.title,color:t.color}),T(!0))}),W=(0,i.useMemoizedFn)(function(e){var r=D(e);r&&b.confirm({title:f("Delete category"),content:f("Are you sure you want to delete it?"),onOk:function(){return E(function(){return x(this,function(e){switch(e.label){case 0:return[4,v.destroy({filterByTk:r.id})];case 1:return e.sent(),String(r.id)===t&&n("all"),a(),[2]}})})()}})}),R=(0,i.useMemoizedFn)(function(e,t){return E(function(){return x(this,function(n){switch(n.label){case 0:return[4,v.move({sourceId:e,targetId:t})];case 1:return n.sent(),a(),[2]}})})()}),N=(0,i.useMemoizedFn)(function(){return E(function(){var e;return x(this,function(t){switch(t.label){case 0:return[4,z.validateFields()];case 1:e=t.sent(),M(!0),t.label=2;case 2:if(t.trys.push([2,,7,8]),!w)return[3,4];return[4,v.update({filterByTk:w.id,values:e})];case 3:return t.sent(),[3,6];case 4:return[4,v.create({values:e})];case 5:t.sent(),t.label=6;case 6:return T(!1),a(),[3,8];case 7:return M(!1),[7];case 8:return[2]}})})()});return s().createElement(s().Fragment,null,s().createElement(o.SortableCategoryTabs,{className:d,activeKey:t,onChange:n,allTab:{key:"all",label:f("All")},categories:P,onAdd:L,onEdit:B,onDelete:W,onSort:R,menuLabels:{edit:f("Edit category"),delete:f("Delete category")}}),s().createElement(u.Modal,{title:w?f("Edit category"):f("Add category"),open:O,confirmLoading:j,onOk:N,onCancel:function(){return T(!1)},okText:f("Submit"),cancelText:f("Cancel"),destroyOnClose:!0},s().createElement(u.Form,{form:z,layout:"vertical"},s().createElement(u.Form.Item,{name:"title",label:f("Title"),rules:[{required:!0}]},s().createElement(u.Input,null)),s().createElement(u.Form.Item,{name:"color",label:f("Color")},s().createElement(A,null)))))}var O=n(9239);function T(e){var t=e.value,n=e.onChange,o=e.disabled,a=(0,y.ec)().t,l=[{value:!1,label:a("Asynchronously"),tooltip:a("Will be executed in the background as a queued task.")},{value:!0,label:a("Synchronously"),tooltip:a("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.")}];return s().createElement(u.Radio.Group,{value:t,disabled:o,onChange:function(e){return null==n?void 0:n(e.target.value)}},l.map(function(e){return s().createElement(u.Radio,{key:String(e.value),value:e.value},s().createElement(u.Space,{size:"small"},e.label,s().createElement(u.Tooltip,{title:e.tooltip},s().createElement(r.QuestionCircleOutlined,null))))}))}function I(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}var j=[{value:1e3,label:"Seconds"},{value:6e4,label:"Minutes"},{value:36e5,label:"Hours"},{value:864e5,label:"Days"}];function M(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:15552e6;return Math.min(Math.max(e,0),t)}function z(e){var t,n,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:6e4;return e&&null!=(t=null==(n=j.findLast(function(t){return e%t.value==0}))?void 0:n.value)?t:r}function P(e){var t,n=e.value,r=e.onChange,o=(0,y.ec)().t,a=M(Number(null!=n?n:0)),l=function(e){if(Array.isArray(e))return e}(t=(0,c.useState)(function(){return z(a)}))||function(e){var t,n,r=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var o=[],a=!0,l=!1;try{for(r=r.call(e);!(a=(t=r.next()).done)&&(o.push(t.value),2!==o.length);a=!0);}catch(e){l=!0,n=e}finally{try{a||null==r.return||r.return()}finally{if(l)throw n}}return o}}(t)||function(e){if(e){if("string"==typeof e)return I(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 I(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=l[0],d=l[1];(0,c.useEffect)(function(){0!==a&&d(function(e){return z(a,e)})},[a]);var f=0===a?0:a/i,m=15552e6/i;return s().createElement(u.Space.Compact,{style:{width:"50%"}},s().createElement(u.InputNumber,{min:0,max:m,precision:0,value:f,onChange:function(e){return null==r?void 0:r(M(Number(e)||0,m)*i)},style:{width:"70%"}}),s().createElement(u.Select,{value:i,style:{width:"30%"},options:j.map(function(e){return{value:e.value,label:o(e.label)}}),onChange:function(e){var t=M(Number(null!=n?n:0)),o=0===t?0:t/i;d(e),null==r||r(M(o*e))}}))}function D(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 L(e,t,n,r,o,a,l){try{var i=e[a](l),u=i.value}catch(e){n(e);return}i.done?t(u):Promise.resolve(u).then(r,o)}function B(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 a=[],l=!0,i=!1;try{for(o=o.call(e);!(l=(n=o.next()).done)&&(a.push(n.value),!t||a.length!==t);l=!0);}catch(e){i=!0,r=e}finally{try{l||null==o.return||o.return()}finally{if(i)throw r}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return D(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 D(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){var t,n=e.mode,r=e.plugin,a=e.record,d=e.categoryOptions,f=e.onSubmitted,m=(0,y.ec)().t,p=(0,y.kj)(),b=(0,l.useFlowContext)(),v=u.theme.useToken().token,h=b.api.resource("workflows"),g=B(u.Form.useForm(),1)[0],w=B((0,c.useState)(!1),2),E=w[0],S=w[1],k=(0,c.useMemo)(function(){var e=Array.from(r.triggers.getEntities()).map(function(e){var t=B(e,2),n=t[0],r=t[1];return{value:n,label:(null==r?void 0:r.title)?p(r.title):String(n),description:(null==r?void 0:r.description)?p(r.description):void 0}});return"edit"===n&&(null==a?void 0:a.type)&&!e.some(function(e){return e.value===a.type})&&e.push({value:a.type,label:a.type,description:void 0}),e.sort(function(e,t){return String(e.label).localeCompare(String(t.label))})},[r,p,n,a]),x=(0,c.useMemo)(function(){return O.hi.filter(function(e){return!!e.value}).map(function(e){return{value:e.value,label:p(e.label),color:e.color,description:e.description?p(e.description):void 0}})},[p]),C=(0,c.useMemo)(function(){if("edit"===n){var t,r,o;return{title:null==a?void 0:a.title,type:null==a?void 0:a.type,sync:null!=(t=null==a?void 0:a.sync)&&t,description:null==a?void 0:a.description,categories:(null!=(r=null==a?void 0:a.categories)?r:[]).map(function(e){return e.id}),options:null!=(o=null==a?void 0:a.options)?o:{}}}return{type:e.type,sync:!1,options:{},config:{}}},[n,a,e.type]);(0,c.useEffect)(function(){g.setFieldsValue(C)},[g,C]);var A=null!=(t=u.Form.useWatch("type",g))?t:e.type,F=(0,c.useMemo)(function(){return r.getTriggerOptions(A)},[r,A]),I=(null==F?void 0:F.sync)!=null;(0,c.useEffect)(function(){I&&g.setFieldValue("sync",F.sync)},[I,F,g]);var j=(0,c.useMemo)(function(){if("create"!==n)return null;var e=null==F?void 0:F.PresetFieldsetLoader;return e?(0,c.lazy)(e):null},[n,F]),M=(0,i.useMemoizedFn)(function(){g.setFieldValue("config",{})}),z=(0,i.useMemoizedFn)(function(){var e;return(e=function(){var e,t,r,o,l,i;return function(e,t){var n,r,o,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},l=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(l,"next",{value:u(0)}),i(l,"throw",{value:u(1)}),i(l,"return",{value:u(2)}),"function"==typeof Symbol&&i(l,Symbol.iterator,{value:function(){return this}}),l;function u(i){return function(u){var c=[i,u];if(n)throw TypeError("Generator is already executing.");for(;l&&(l=0,c[0]&&(a=0)),a;)try{if(n=1,r&&(o=2&c[0]?r.return:c[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,c[1])).done)return o;switch(r=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return a.label++,{value:c[1],done:!1};case 5:a.label++,r=c[1],c=[0];continue;case 7:c=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===c[0]||2===c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(6===c[0]&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=t.call(e,a)}catch(e){c=[6,e],r=0}finally{n=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}(this,function(u){switch(u.label){case 0:return[4,g.validateFields()];case 1:e=u.sent(),S(!0),u.label=2;case 2:if(u.trys.push([2,,7,8]),"create"!==n)return[3,4];return[4,h.create({values:{title:e.title,type:e.type,sync:!!e.sync,current:!0,config:null!=(t=e.config)?t:{},description:e.description,categories:null!=(r=e.categories)?r:[],options:null!=(o=e.options)?o:{}}})];case 3:return u.sent(),[3,6];case 4:return[4,h.update({filterByTk:a.id,values:{title:e.title,sync:!!e.sync,description:e.description,categories:null!=(l=e.categories)?l:[],options:null!=(i=e.options)?i:{}}})];case 5:u.sent(),u.label=6;case 6:return f(),[3,8];case 7:return S(!1),[7];case 8:return[2]}})},function(){var t=this,n=arguments;return new Promise(function(r,o){var a=e.apply(t,n);function l(e){L(a,r,o,l,i,"next",e)}function i(e){L(a,r,o,l,i,"throw",e)}l(void 0)})})()});return s().createElement(o.DrawerFormLayout,{title:m("create"===n?"Add new":"Edit"),onSubmit:z,submitting:E,submitText:m("Submit"),cancelText:m("Cancel")},s().createElement(u.Form,{form:g,layout:"vertical",initialValues:C},s().createElement(u.Form.Item,{name:"title",label:m("Title"),rules:[{required:!0}]},s().createElement(u.Input,null)),s().createElement(u.Form.Item,{name:"type",label:m("Trigger type"),rules:[{required:!0}]},s().createElement(u.Select,{options:k,disabled:"edit"===n,onChange:M,showSearch:!0,optionFilterProp:"label",popupMatchSelectWidth:!0,optionRender:function(e){var t,n;return s().createElement(u.Space,{direction:"vertical"},s().createElement(u.Tag,{color:"gold"},null==(t=e.data)?void 0:t.label),(null==(n=e.data)?void 0:n.description)?s().createElement(u.Typography.Text,{type:"secondary",style:{whiteSpace:"normal"}},e.data.description):null)}})),j?s().createElement("div",{style:{marginBottom:v.marginLG}},s().createElement("div",{style:{marginBottom:v.marginXS,fontWeight:600}},"".concat(m("Trigger configuration"),":")),s().createElement("div",{style:{padding:v.padding,border:"".concat(v.lineWidth,"px solid ").concat(v.colorBorderSecondary),borderRadius:v.borderRadiusLG}},s().createElement(c.Suspense,{fallback:s().createElement(u.Spin,null)},s().createElement(j,null)))):null,s().createElement(u.Form.Item,{name:"sync",label:m("Execute mode"),extra:m("Execute workflow asynchronously or synchronously based on trigger type, and could not be changed after created.")},s().createElement(T,{disabled:I||"edit"===n})),s().createElement(u.Form.Item,{name:"categories",label:m("Category")},s().createElement(u.Select,{mode:"multiple",allowClear:!0,options:d,optionFilterProp:"label"})),s().createElement(u.Form.Item,{name:"description",label:m("Description")},s().createElement(u.Input.TextArea,{autoSize:{minRows:2}})),s().createElement(u.Form.Item,{label:m("Advance options")},s().createElement(u.Card,{size:"small"},s().createElement(u.Form.Item,{name:["options","timeout"],label:m("Timeout settings"),extra:m("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."),initialValue:0},s().createElement(P,null)),s().createElement(u.Form.Item,{name:["options","stackLimit"],label:m("Maximum number of cycling triggers"),extra:m("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."),initialValue:1},s().createElement(u.InputNumber,{min:1,precision:0,style:{width:"50%"}})),s().createElement(u.Form.Item,{name:["options","deleteExecutionOnStatus"],label:m("Auto delete history when execution is on end status")},s().createElement(u.Select,{mode:"multiple",allowClear:!0,options:x,optionFilterProp:"label",optionRender:function(e){var t,n,r;return s().createElement(u.Space,null,s().createElement(u.Tag,{color:null==(t=e.data)?void 0:t.color},null==(n=e.data)?void 0:n.label),(null==(r=e.data)?void 0:r.description)?s().createElement("span",null,e.data.description):null)},tagRender:function(e){var t,n=e.value,r=e.label,o=e.closable,a=e.onClose;return s().createElement(u.Tag,{color:null==(t=O.m2[String(n)])?void 0:t.color,closable:o,onClose:a,onMouseDown:function(e){e.preventDefault(),e.stopPropagation()}},r)}}))))))}function R(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 N(e,t,n,r,o,a,l){try{var i=e[a](l),u=i.value}catch(e){n(e);return}i.done?t(u):Promise.resolve(u).then(r,o)}function G(e){return function(){var t=this,n=arguments;return new Promise(function(r,o){var a=e.apply(t,n);function l(e){N(a,r,o,l,i,"next",e)}function i(e){N(a,r,o,l,i,"throw",e)}l(void 0)})}}function q(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){var r;r=n[t],t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r})}return e}function V(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 $(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 a=[],l=!0,i=!1;try{for(o=o.call(e);!(l=(n=o.next()).done)&&(a.push(n.value),!t||a.length!==t);l=!0);}catch(e){i=!0,r=e}finally{try{l||null==o.return||o.return()}finally{if(i)throw r}}return a}}(e,t)||U(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 _(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function K(e){return function(e){if(Array.isArray(e))return R(e)}(e)||function(e){if("u">typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||U(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 U(e,t){if(e){if("string"==typeof e)return R(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 R(e,t)}}function X(e,t){var n,r,o,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},l=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(l,"next",{value:u(0)}),i(l,"throw",{value:u(1)}),i(l,"return",{value:u(2)}),"function"==typeof Symbol&&i(l,Symbol.iterator,{value:function(){return this}}),l;function u(i){return function(u){var c=[i,u];if(n)throw TypeError("Generator is already executing.");for(;l&&(l=0,c[0]&&(a=0)),a;)try{if(n=1,r&&(o=2&c[0]?r.return:c[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,c[1])).done)return o;switch(r=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return a.label++,{value:c[1],done:!1};case 5:a.label++,r=c[1],c=[0];continue;case 7:c=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===c[0]||2===c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(6===c[0]&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=t.call(e,a)}catch(e){c=[6,e],r=0}finally{n=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}function H(){var e=_(["\n background: ",";\n padding: 0;\n "]);return H=function(){return e},e}function Q(){var e=_(["\n margin-left: -1px;\n background: ",";\n\n .ant-tabs {\n margin-bottom: 0;\n }\n\n .ant-tabs-nav {\n margin-bottom: 0;\n }\n\n .ant-tabs-content-holder {\n display: none;\n }\n "]);return Q=function(){return e},e}function Z(){var e=_(["\n margin: 0;\n padding: ","px;\n background: ",";\n border-radius: 0 ","px ","px ","px;\n "]);return Z=function(){return e},e}var J=["id","description","categories"],Y={position:"absolute",width:1,height:1,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",border:0};function ee(e){var t,n=e.notice,o=u.theme.useToken().token,a=s().useId();return s().createElement(u.Tooltip,{title:null!=(t=n.description)?t:n.message,trigger:["hover","focus"]},s().createElement("span",{"aria-labelledby":a,role:"img",tabIndex:0,style:{alignItems:"center",color:function(e){switch(e){case"error":return o.colorErrorTextActive;case"success":return o.colorSuccessTextActive;case"warning":default:return o.colorWarningTextActive;case"info":return o.colorInfoTextActive}}(n.type),cursor:"help",display:"inline-flex",fontSize:o.fontSize,justifyContent:"center",lineHeight:1}},function(e){switch(e){case"error":return s().createElement(r.CloseCircleOutlined,{"aria-hidden":!0});case"info":return s().createElement(r.InfoCircleOutlined,{"aria-hidden":!0});case"success":return s().createElement(r.CheckCircleOutlined,{"aria-hidden":!0});default:return s().createElement(r.ExclamationCircleOutlined,{"aria-hidden":!0})}}(n.type||"warning"),s().createElement("span",{id:a,style:Y},n.message)))}function et(e){var t=e.notices;return t.length?s().createElement(s().Fragment,null,t.map(function(e,t){return s().createElement(ee,{key:"".concat(e.key,"-").concat(t),notice:e})})):null}function en(e){var t=e.maxWidth,n=e.notices,r=e.title,o=u.theme.useToken().token;return s().createElement("span",{style:{display:"inline-block",width:"max-content",maxWidth:t,overflowWrap:"anywhere",whiteSpace:"normal",wordBreak:"break-word"}},r,n.length?s().createElement("span",{style:{display:"inline-flex",flexWrap:"wrap",gap:o.marginXS,marginInlineStart:o.marginXS}},s().createElement(et,{notices:n})):null)}function er(e){var t=e.record,n=e.resource,r=e.onChanged,o=(0,y.ec)().t,a=u.App.useApp().message,l=$((0,c.useState)(!1),2),d=l[0],f=l[1],m=(0,i.useMemoizedFn)(function(e){return G(function(){return X(this,function(l){switch(l.label){case 0:if((null==t?void 0:t.id)==null)return[2];f(!0),l.label=1;case 1:return l.trys.push([1,3,4,5]),[4,n.update({filterByTk:t.id,values:{enabled:e}})];case 2:return l.sent(),setTimeout(function(){return r()},0),[3,5];case 3:return l.sent(),a.error(o("Operation failed")),[3,5];case 4:return f(!1),[7];case 5:return[2]}})})()});return s().createElement(u.Switch,{checked:!!(null==t?void 0:t.enabled),size:"small",disabled:d,loading:d,onClick:function(e,t){var n;return null==t||null==(n=t.stopPropagation)?void 0:n.call(t)},onChange:m})}function eo(e){var t=e.record,n=e.resource,r=e.onSubmitted,a=(0,y.ec)().t,l=$(u.Form.useForm(),1)[0],d=$((0,c.useState)(!1),2),f=d[0],m=d[1],p=(0,i.useMemoizedFn)(function(){return G(function(){var e;return X(this,function(o){switch(o.label){case 0:return[4,l.validateFields()];case 1:e=o.sent(),m(!0),o.label=2;case 2:return o.trys.push([2,,4,5]),[4,n.revision({filterByTk:t.id,values:e})];case 3:return o.sent(),r(),[3,5];case 4:return m(!1),[7];case 5:return[2]}})})()});return s().createElement(o.DialogFormLayout,{title:a("Duplicate to new workflow"),onSubmit:p,submitting:f,submitText:a("Submit"),cancelText:a("Cancel")},s().createElement(u.Form,{form:l,layout:"vertical"},s().createElement(u.Form.Item,{name:"title",label:a("Title")},s().createElement(u.Input,null))))}function ea(){var e,t=(0,y.ec)().t,n=(0,y.kj)(),d=(0,l.useFlowContext)(),h=(0,p.TD)().getWorkflowCanvasPath,g=u.theme.useToken().token,w=g.screenXS-3*g.paddingXL,E=w+2*g.padding,S=u.App.useApp(),k=S.modal,x=S.message,C=d.api.resource("workflows"),A=d.app.pm.get(b.A),O=(0,a.css)(H(),g.colorBgLayout),T=(0,a.css)(Q(),g.colorBgLayout),I=(0,a.css)(Z(),g.paddingLG,g.colorBgContainer,g.borderRadiusLG,g.borderRadiusLG,g.borderRadiusLG),j=(0,c.useMemo)(function(){var e,t,n,r;return null==(r=d.dataSourceManager)||null==(n=r.getDataSource)||null==(t=n.call(r,"main"))||null==(e=t.getCollection)?void 0:e.call(t,"workflows")},[d]),M=$((0,c.useState)("all"),2),z=M[0],P=M[1],D=$((0,c.useState)(1),2),L=D[0],B=D[1],R=$((0,c.useState)(o.DEFAULT_PAGE_SIZE),2),N=R[0],q=R[1],V=$((0,c.useState)([]),2),_=V[0],U=V[1],Y=$((0,c.useState)(void 0),2),ee=Y[0],et=Y[1],ea=$((0,c.useState)({}),2),el=ea[0],ei=ea[1],eu=(0,i.useMemoizedFn)(function(e){et(e),B(1)}),ec=(0,i.useRequest)(function(){return G(function(){var e,t,n;return X(this,function(r){switch(r.label){case 0:return[4,d.api.resource("workflowCategories").list({paginate:!1,sort:["sort"]})];case 1:return[2,null!=(e=null==(n=r.sent())||null==(t=n.data)?void 0:t.data)?e:[]]}})})()}),es=ec.data,ed=ec.refresh,ef=(0,c.useMemo)(function(){return es||[]},[es]),em=(0,c.useMemo)(function(){return ef.map(function(e){var t;return{value:e.id,label:n(null!=(t=e.title)?t:"")}})},[ef,n]),ep=(0,i.useRequest)(function(){return G(function(){var e,t;return X(this,function(n){switch(n.label){case 0:return e={current:!0},"all"!==z&&(e["categories.id"]=z),t=ee?{$and:[e,ee]}:e,[4,C.list({page:L,pageSize:N,sort:["-createdAt"],appends:["categories","stats"],except:["config"],filter:t})];case 1:var r,o,a,l,i;return[2,{records:l=Array.isArray(a=null==(o=null==(r=n.sent())?void 0:r.data)?void 0:o.data)?a:Array.isArray(null==a?void 0:a.data)?a.data:[],total:(i=(null==o?void 0:o.meta)||(null==a?void 0:a.meta)||{}).count||i.total||l.length}]}})})()},{refreshDeps:[L,N,z,ee]}),ey=ep.data,eb=ep.loading,ev=ep.refresh,eh=(0,c.useMemo)(function(){return(null==ey?void 0:ey.records)||[]},[null==ey?void 0:ey.records]);(0,c.useEffect)(function(){var e=!1;return G(function(){var t;return X(this,function(n){switch(n.label){case 0:if(!eh.length)return ei({}),[2];return ei({}),[4,A.loadWorkflowListNotices({api:d.api,surface:"workflow-list-row",workflows:eh})];case 1:return t=n.sent(),e||ei(t),[2]}})})().catch(function(){e||ei({})}),function(){e=!0}},[d.api,A,eh]);var eg=(0,i.useMemoizedFn)(function(e,t){if(t!==N){q(t),B(1);return}B(e)}),ew=(0,i.useMemoizedFn)(function(e){var t=e?A.getTriggerOptions(e):void 0;return(null==t?void 0:t.title)?n(t.title):e}),eE=(0,i.useMemoizedFn)(function(e,t){d.viewer.drawer({width:"50%",closable:!0,content:function(){return s().createElement(W,{mode:e,plugin:A,record:t,categoryOptions:em,onSubmitted:function(){return ev()}})}})}),eS=(0,i.useMemoizedFn)(function(e){d.viewer.dialog({width:520,closable:!0,content:function(){return s().createElement(eo,{record:e,resource:C,onSubmitted:function(){return ev()}})}})}),ek=(0,i.useMemoizedFn)(function(e){d.router.navigate(h(e.id))}),ex=(0,i.useMemoizedFn)(function(e){d.viewer.drawer({width:"60%",closable:!0,title:t("Execution history"),content:function(){return s().createElement(v.S,{workflowKey:e.key})}})}),eC=(0,i.useMemoizedFn)(function(e){k.confirm({title:t("Delete record"),content:t("Are you sure you want to delete it?"),onOk:function(){return G(function(){return X(this,function(t){switch(t.label){case 0:return[4,C.destroy({filterByTk:e})];case 1:return t.sent(),U([]),ev(),[2]}})})()}})}),eA=(0,i.useMemoizedFn)(function(){return G(function(){return X(this,function(e){switch(e.label){case 0:return[4,C.sync()];case 1:return e.sent(),x.success(t("Operation succeeded")),ev(),[2]}})})()}),eF=!!((null==(e=d.app)?void 0:e.name)&&"main"!==d.app.name||d.app.pm.get("multi-app-share-collection")),eO=(0,c.useMemo)(function(){return[{title:t("Title"),dataIndex:"title",width:1,onHeaderCell:function(){return{style:{maxWidth:E,whiteSpace:"nowrap"}}},onCell:function(){return{style:{maxWidth:E,overflowWrap:"anywhere",whiteSpace:"normal",wordBreak:"break-word"}}},render:function(e,n){var r=!0===n.invalid?[{key:"workflow-invalid",message:t("This workflow has configuration issues and may not work properly."),type:"warning"}]:[],o=A.getWorkflowNotices({surface:"workflow-list-row",workflow:n}),a=el[String(n.id)]||[],l=K(r).concat(K(o),K(a));return s().createElement(en,{title:e,notices:l,maxWidth:w})}},{title:t("Category"),dataIndex:"categories",render:function(e){return s().createElement(u.Space,{size:[0,4],wrap:!0},(null!=e?e:[]).map(function(e){return s().createElement(u.Tag,{key:e.id,color:"default"===e.color?void 0:e.color},n(e.title))}))}},{title:t("Trigger type"),dataIndex:"type",render:function(e){return e?s().createElement(u.Tag,{color:"gold"},ew(e)):null}},{title:t("Execute mode"),dataIndex:"sync",width:140,render:function(e){return s().createElement(m.t,{value:e})}},{title:t("Enabled"),dataIndex:"enabled",width:100,render:function(e,t){return s().createElement(er,{record:t,resource:C,onChanged:ev})}},{title:t("Executed"),dataIndex:["stats","executed"],width:100,render:function(e,t){var n,r;return s().createElement("a",{"aria-label":"executed-".concat(t.title),onClick:function(){return ex(t)}},null!=(n=null==(r=t.stats)?void 0:r.executed)?n:0)}},{title:t("Actions"),width:260,render:function(e,n){return s().createElement(u.Space,{size:"middle",wrap:!1,style:{whiteSpace:"nowrap"}},s().createElement("a",{onClick:function(){return ek(n)}},t("Configure")),s().createElement("a",{onClick:function(){return eE("edit",n)}},t("Edit")),s().createElement("a",{onClick:function(){return eS(n)}},t("Duplicate")),s().createElement("a",{onClick:function(){return eC(n.id)}},t("Delete")))}}]},[eC,ek,eS,ex,eE,A,ev,C,t,ew,E,w,el]);return s().createElement("div",{className:O},s().createElement(F,{className:T,activeKey:z,onChange:function(e){P(e),B(1)},categories:ef,refreshCategories:ed}),s().createElement("div",{className:I},s().createElement(u.Flex,{justify:"space-between",align:"center",style:{marginBottom:g.margin}},s().createElement(o.CollectionFilter,{collection:j,defaultValue:f.d,nonfilterableFieldNames:J,onChange:eu,t:n}),s().createElement(u.Space,null,s().createElement(u.Button,{icon:s().createElement(r.ReloadOutlined,null),onClick:function(){return ev()}},t("Refresh")),eF?s().createElement(u.Tooltip,{title:t("Sync enabled status of all workflows from database")},s().createElement(u.Button,{icon:s().createElement(r.SyncOutlined,null),onClick:eA},t("Sync"))):null,s().createElement(u.Button,{icon:s().createElement(r.DeleteOutlined,null),disabled:!_.length,onClick:function(){return eC(_)}},t("Delete")),s().createElement(u.Button,{type:"primary",icon:s().createElement(r.PlusOutlined,null),onClick:function(){return eE("create")}},t("Add new")))),s().createElement(o.Table,{rowKey:"id",loading:eb,columns:eO,dataSource:(null==ey?void 0:ey.records)||[],rowSelection:{selectedRowKeys:_,onChange:U},pagination:{current:L,pageSize:N,total:(null==ey?void 0:ey.total)||0,onChange:eg},tableLayout:"auto"})))}function el(){var e=(0,y.kj)(),t=(0,l.useFlowContext)().app.pm.get(b.A),n=(0,c.useMemo)(function(){var n=Array.from(t.triggers.getEntities()).map(function(t){var n=$(t,2),r=n[0],o=n[1];return{value:r,label:(null==o?void 0:o.title)?e(o.title):String(r)}}).sort(function(e,t){return String(e.label).localeCompare(String(t.label))});return[V(q({},d.A),{hidden:!0,fields:d.A.fields.map(function(e){return(null==e?void 0:e.name)==="type"&&e.uiSchema?V(q({},e),{uiSchema:V(q({},e.uiSchema),{enum:n})}):e})})]},[t,e]);return s().createElement(o.ExtendCollectionsProvider,{collections:n},s().createElement(ea,null))}},7541:function(e,t,n){n.d(t,{d:function(){return r}});var r={$and:[{title:{$includes:""}},{type:{$eq:void 0}}]}}}]);
@@ -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_client_v2=self.webpackChunk_nocobase_plugin_workflow_client_v2||[]).push([["677"],{3420:function(e,t,n){n.r(t),n.d(t,{default:function(){return ei}});var r=n(7375),o=n(3485),a=n(5477),l=n(7694),i=n(2625),u=n(2059),c=n(9155),s=n.n(c),d=n(358),f={dumpRules:"required",migrationRules:["overwrite","schema-only"],name:"workflows",dataCategory:"system",shared:!0,repository:"WorkflowRepository",createdBy:!0,updatedBy:!0,createdAt:!0,updatedAt:!0,fields:[{name:"id",type:"snowflakeId",primaryKey:!0,allowNull:!1,interface:"id",uiSchema:{type:"number",title:'{{t("ID")}}',"x-component":"InputNumber","x-component-props":{},"x-read-pretty":!0}},{name:"key",type:"uid"},{type:"string",name:"title",interface:"input",uiSchema:{title:'{{t("Name")}}',type:"string","x-component":"Input",required:!0}},{type:"boolean",name:"enabled",defaultValue:!1,interface:"radioGroup",uiSchema:{title:'{{t("Status", { ns: "'.concat(d.C,'" })}}'),type:"string",enum:[{label:'{{t("On", { ns: "'.concat(d.C,'" })}}'),value:!0,color:"#52c41a"},{label:'{{t("Off", { ns: "'.concat(d.C,'" })}}'),value:!1}],"x-component":"Radio.Group",default:!1}},{type:"text",name:"description",interface:"textarea",uiSchema:{title:'{{t("Description")}}',type:"string","x-component":"Input.TextArea"}},{type:"string",name:"type",required:!0,interface:"select",uiSchema:{title:'{{t("Trigger type", { ns: "'.concat(d.C,'" })}}'),type:"string","x-component":"Select",enum:"{{useTriggersOptions()}}",required:!0}},{type:"string",name:"triggerTitle"},{type:"jsonb",name:"config",required:!0,defaultValue:{}},{type:"boolean",name:"invalid",defaultValue:!1},{type:"hasMany",name:"nodes",target:"flow_nodes",onDelete:"CASCADE"},{type:"hasMany",name:"executions"},{type:"integer",name:"executed",defaultValue:0},{type:"integer",name:"allExecuted",defaultValue:0},{type:"boolean",name:"current"},{type:"boolean",name:"sync",defaultValue:!1,interface:"radioGroup",uiSchema:{title:'{{t("Mode", { ns: "'.concat(d.C,'" })}}'),type:"boolean","x-component":"Radio.Group",enum:[{label:'{{ t("Asynchronously", { ns: "'.concat(d.C,'" }) }}'),value:!1,color:"cyan"},{label:'{{ t("Synchronously", { ns: "'.concat(d.C,'" }) }}'),value:!0,color:"orange"}],required:!0}},{type:"hasMany",name:"revisions",target:"workflows",foreignKey:"key",sourceKey:"key",constraints:!1,onDelete:"NO ACTION"},{type:"jsonb",name:"options",defaultValue:{timeout:0}},{type:"hasOne",name:"stats",target:"workflowStats",foreignKey:"key",sourceKey:"key",constraints:!1},{type:"hasOne",name:"versionStats",target:"workflowVersionStats",foreignKey:"id",sourceKey:"id",constraints:!1,onDelete:"CASCADE"},{type:"belongsToMany",name:"categories",target:"workflowCategories",through:"workflowCategoryRelations",foreignKey:"workflowId",otherKey:"categoryId",sourceKey:"id",constraints:!1,interface:"m2m",uiSchema:{type:"array",title:'{{t("Category", { ns: "'.concat(d.C,'" })}}'),"x-component":"AssociationField","x-component-props":{multiple:!0,fieldNames:{label:"title",value:"id",color:"color"},mode:"Tag"},"x-read-pretty":!0}},{type:"belongsTo",name:"createdBy",target:"users",foreignKey:"createdById",interface:"m2o",uiSchema:{type:"number",title:'{{t("Created by")}}',"x-component":"AssociationField","x-component-props":{fieldNames:{label:"nickname",value:"id"}}}}],indexes:[{unique:!0,fields:["key","current"]}]},m={$and:[{title:{$includes:""}},{type:{$eq:void 0}}]},p=n(5927),y=n(7001),b=n(9488),g=n(5030),v=n(4315),h=n(5953);function w(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 E(e,t,n,r,o,a,l){try{var i=e[a](l),u=i.value}catch(e){n(e);return}i.done?t(u):Promise.resolve(u).then(r,o)}function S(e){return function(){var t=this,n=arguments;return new Promise(function(r,o){var a=e.apply(t,n);function l(e){E(a,r,o,l,i,"next",e)}function i(e){E(a,r,o,l,i,"throw",e)}l(void 0)})}}function C(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 a=[],l=!0,i=!1;try{for(o=o.call(e);!(l=(n=o.next()).done)&&(a.push(n.value),!t||a.length!==t);l=!0);}catch(e){i=!0,r=e}finally{try{l||null==o.return||o.return()}finally{if(i)throw r}}return a}}(e,t)||k(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 k(e,t){if(e){if("string"==typeof e)return w(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 w(e,t)}}function x(e,t){var n,r,o,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},l=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(l,"next",{value:u(0)}),i(l,"throw",{value:u(1)}),i(l,"return",{value:u(2)}),"function"==typeof Symbol&&i(l,Symbol.iterator,{value:function(){return this}}),l;function u(i){return function(u){var c=[i,u];if(n)throw TypeError("Generator is already executing.");for(;l&&(l=0,c[0]&&(a=0)),a;)try{if(n=1,r&&(o=2&c[0]?r.return:c[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,c[1])).done)return o;switch(r=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return a.label++,{value:c[1],done:!1};case 5:a.label++,r=c[1],c=[0];continue;case 7:c=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===c[0]||2===c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(6===c[0]&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=t.call(e,a)}catch(e){c=[6,e],r=0}finally{n=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}var A=["red","magenta","volcano","orange","gold","lime","green","cyan","blue","geekblue","purple","default"];function T(e){var t=(0,h.useTranslation)().t,n=A.map(function(e){return{value:e,label:s().createElement(u.Tag,{color:"default"===e?void 0:e},t(e.charAt(0).toUpperCase()+e.slice(1)))}});return s().createElement(u.Select,{allowClear:!0,value:e.value,options:n,onChange:e.onChange})}function O(e){var t=e.activeKey,n=e.onChange,r=e.categories,a=e.refreshCategories,d=e.className,f=(0,b.ec)().t,m=(0,b.kj)(),p=(0,l.useFlowContext)(),y=u.App.useApp().modal,g=p.api.resource("workflowCategories"),v=C((0,c.useState)(null),2),h=v[0],E=v[1],A=C((0,c.useState)(!1),2),O=A[0],F=A[1],I=C((0,c.useState)(!1),2),M=I[0],j=I[1],R=C(u.Form.useForm(),1)[0],D=(0,c.useMemo)(function(){return((function(e){if(Array.isArray(e))return w(e)})(r)||function(e){if("u">typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(r)||k(r)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()).sort(function(e,t){var n,r;return(null!=(n=e.sort)?n:0)-(null!=(r=t.sort)?r:0)}).map(function(e){return{id:e.id,label:m(e.title),color:e.color}})},[r,m]),P=(0,i.useMemoizedFn)(function(e){return r.find(function(t){return String(t.id)===String(e)})}),z=(0,i.useMemoizedFn)(function(){E(null),R.resetFields(),F(!0)}),N=(0,i.useMemoizedFn)(function(e){var t=P(e);t&&(E(t),R.setFieldsValue({title:t.title,color:t.color}),F(!0))}),L=(0,i.useMemoizedFn)(function(e){var r=P(e);r&&y.confirm({title:f("Delete category"),content:f("Are you sure you want to delete it?"),onOk:function(){return S(function(){return x(this,function(e){switch(e.label){case 0:return[4,g.destroy({filterByTk:r.id})];case 1:return e.sent(),String(r.id)===t&&n("all"),a(),[2]}})})()}})}),B=(0,i.useMemoizedFn)(function(e,t){return S(function(){return x(this,function(n){switch(n.label){case 0:return[4,g.move({sourceId:e,targetId:t})];case 1:return n.sent(),a(),[2]}})})()}),G=(0,i.useMemoizedFn)(function(){return S(function(){var e;return x(this,function(t){switch(t.label){case 0:return[4,R.validateFields()];case 1:e=t.sent(),j(!0),t.label=2;case 2:if(t.trys.push([2,,7,8]),!h)return[3,4];return[4,g.update({filterByTk:h.id,values:e})];case 3:return t.sent(),[3,6];case 4:return[4,g.create({values:e})];case 5:t.sent(),t.label=6;case 6:return F(!1),a(),[3,8];case 7:return j(!1),[7];case 8:return[2]}})})()});return s().createElement(s().Fragment,null,s().createElement(o.SortableCategoryTabs,{className:d,activeKey:t,onChange:n,allTab:{key:"all",label:f("All")},categories:D,onAdd:z,onEdit:N,onDelete:L,onSort:B,menuLabels:{edit:f("Edit category"),delete:f("Delete category")}}),s().createElement(u.Modal,{title:h?f("Edit category"):f("Add category"),open:O,confirmLoading:M,onOk:G,onCancel:function(){return F(!1)},okText:f("Submit"),cancelText:f("Cancel"),destroyOnClose:!0},s().createElement(u.Form,{form:R,layout:"vertical"},s().createElement(u.Form.Item,{name:"title",label:f("Title"),rules:[{required:!0}]},s().createElement(u.Input,null)),s().createElement(u.Form.Item,{name:"color",label:f("Color")},s().createElement(T,null)))))}var F=n(9239);function I(e){var t=e.value,n=e.onChange,o=e.disabled,a=(0,b.ec)().t,l=[{value:!1,label:a("Asynchronously"),tooltip:a("Will be executed in the background as a queued task.")},{value:!0,label:a("Synchronously"),tooltip:a("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.")}];return s().createElement(u.Radio.Group,{value:t,disabled:o,onChange:function(e){return null==n?void 0:n(e.target.value)}},l.map(function(e){return s().createElement(u.Radio,{key:String(e.value),value:e.value},s().createElement(u.Space,{size:"small"},e.label,s().createElement(u.Tooltip,{title:e.tooltip},s().createElement(r.QuestionCircleOutlined,null))))}))}function M(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}var j=[{value:1e3,label:"Seconds"},{value:6e4,label:"Minutes"},{value:36e5,label:"Hours"},{value:864e5,label:"Days"}];function R(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:15552e6;return Math.min(Math.max(e,0),t)}function D(e){var t,n,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:6e4;return e&&null!=(t=null==(n=j.findLast(function(t){return e%t.value==0}))?void 0:n.value)?t:r}function P(e){var t,n=e.value,r=e.onChange,o=(0,b.ec)().t,a=R(Number(null!=n?n:0)),l=function(e){if(Array.isArray(e))return e}(t=(0,c.useState)(function(){return D(a)}))||function(e){var t,n,r=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var o=[],a=!0,l=!1;try{for(r=r.call(e);!(a=(t=r.next()).done)&&(o.push(t.value),2!==o.length);a=!0);}catch(e){l=!0,n=e}finally{try{a||null==r.return||r.return()}finally{if(l)throw n}}return o}}(t)||function(e){if(e){if("string"==typeof e)return M(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 M(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=l[0],d=l[1];(0,c.useEffect)(function(){0!==a&&d(function(e){return D(a,e)})},[a]);var f=0===a?0:a/i,m=15552e6/i;return s().createElement(u.Space.Compact,{style:{width:"50%"}},s().createElement(u.InputNumber,{min:0,max:m,precision:0,value:f,onChange:function(e){return null==r?void 0:r(R(Number(e)||0,m)*i)},style:{width:"70%"}}),s().createElement(u.Select,{value:i,style:{width:"30%"},options:j.map(function(e){return{value:e.value,label:o(e.label)}}),onChange:function(e){var t=R(Number(null!=n?n:0)),o=0===t?0:t/i;d(e),null==r||r(R(o*e))}}))}function z(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 N(e,t,n,r,o,a,l){try{var i=e[a](l),u=i.value}catch(e){n(e);return}i.done?t(u):Promise.resolve(u).then(r,o)}function L(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 a=[],l=!0,i=!1;try{for(o=o.call(e);!(l=(n=o.next()).done)&&(a.push(n.value),!t||a.length!==t);l=!0);}catch(e){i=!0,r=e}finally{try{l||null==o.return||o.return()}finally{if(i)throw r}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return z(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 z(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 B(e){var t,n=e.mode,r=e.plugin,a=e.record,d=e.categoryOptions,f=e.onSubmitted,m=(0,b.ec)().t,p=(0,b.kj)(),y=(0,l.useFlowContext)(),g=u.theme.useToken().token,v=y.api.resource("workflows"),h=L(u.Form.useForm(),1)[0],w=L((0,c.useState)(!1),2),E=w[0],S=w[1],C=(0,c.useMemo)(function(){var e=Array.from(r.triggers.getEntities()).map(function(e){var t=L(e,2),n=t[0],r=t[1];return{value:n,label:(null==r?void 0:r.title)?p(r.title):String(n),description:(null==r?void 0:r.description)?p(r.description):void 0}});return"edit"===n&&(null==a?void 0:a.type)&&!e.some(function(e){return e.value===a.type})&&e.push({value:a.type,label:a.type,description:void 0}),e.sort(function(e,t){return String(e.label).localeCompare(String(t.label))})},[r,p,n,a]),k=(0,c.useMemo)(function(){return F.hi.filter(function(e){return!!e.value}).map(function(e){return{value:e.value,label:p(e.label),color:e.color,description:e.description?p(e.description):void 0}})},[p]),x=(0,c.useMemo)(function(){if("edit"===n){var t,r,o;return{title:null==a?void 0:a.title,type:null==a?void 0:a.type,sync:null!=(t=null==a?void 0:a.sync)&&t,description:null==a?void 0:a.description,categories:(null!=(r=null==a?void 0:a.categories)?r:[]).map(function(e){return e.id}),options:null!=(o=null==a?void 0:a.options)?o:{}}}return{type:e.type,sync:!1,options:{},config:{}}},[n,a,e.type]);(0,c.useEffect)(function(){h.setFieldsValue(x)},[h,x]);var A=null!=(t=u.Form.useWatch("type",h))?t:e.type,T=(0,c.useMemo)(function(){return r.getTriggerOptions(A)},[r,A]),O=(null==T?void 0:T.sync)!=null;(0,c.useEffect)(function(){O&&h.setFieldValue("sync",T.sync)},[O,T,h]);var M=(0,c.useMemo)(function(){if("create"!==n)return null;var e=null==T?void 0:T.PresetFieldsetLoader;return e?(0,c.lazy)(e):null},[n,T]),j=(0,i.useMemoizedFn)(function(){h.setFieldValue("config",{})}),R=(0,i.useMemoizedFn)(function(){var e;return(e=function(){var e,t,r,o,l,i;return function(e,t){var n,r,o,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},l=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(l,"next",{value:u(0)}),i(l,"throw",{value:u(1)}),i(l,"return",{value:u(2)}),"function"==typeof Symbol&&i(l,Symbol.iterator,{value:function(){return this}}),l;function u(i){return function(u){var c=[i,u];if(n)throw TypeError("Generator is already executing.");for(;l&&(l=0,c[0]&&(a=0)),a;)try{if(n=1,r&&(o=2&c[0]?r.return:c[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,c[1])).done)return o;switch(r=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return a.label++,{value:c[1],done:!1};case 5:a.label++,r=c[1],c=[0];continue;case 7:c=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===c[0]||2===c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(6===c[0]&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=t.call(e,a)}catch(e){c=[6,e],r=0}finally{n=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}(this,function(u){switch(u.label){case 0:return[4,h.validateFields()];case 1:e=u.sent(),S(!0),u.label=2;case 2:if(u.trys.push([2,,7,8]),"create"!==n)return[3,4];return[4,v.create({values:{title:e.title,type:e.type,sync:!!e.sync,current:!0,config:null!=(t=e.config)?t:{},description:e.description,categories:null!=(r=e.categories)?r:[],options:null!=(o=e.options)?o:{}}})];case 3:return u.sent(),[3,6];case 4:return[4,v.update({filterByTk:a.id,values:{title:e.title,sync:!!e.sync,description:e.description,categories:null!=(l=e.categories)?l:[],options:null!=(i=e.options)?i:{}}})];case 5:u.sent(),u.label=6;case 6:return f(),[3,8];case 7:return S(!1),[7];case 8:return[2]}})},function(){var t=this,n=arguments;return new Promise(function(r,o){var a=e.apply(t,n);function l(e){N(a,r,o,l,i,"next",e)}function i(e){N(a,r,o,l,i,"throw",e)}l(void 0)})})()});return s().createElement(o.DrawerFormLayout,{title:m("create"===n?"Add new":"Edit"),onSubmit:R,submitting:E,submitText:m("Submit"),cancelText:m("Cancel")},s().createElement(u.Form,{form:h,layout:"vertical",initialValues:x},s().createElement(u.Form.Item,{name:"title",label:m("Title"),rules:[{required:!0}]},s().createElement(u.Input,null)),s().createElement(u.Form.Item,{name:"type",label:m("Trigger type"),rules:[{required:!0}]},s().createElement(u.Select,{options:C,disabled:"edit"===n,onChange:j,showSearch:!0,optionFilterProp:"label",popupMatchSelectWidth:!0,optionRender:function(e){var t,n;return s().createElement(u.Space,{direction:"vertical"},s().createElement(u.Tag,{color:"gold"},null==(t=e.data)?void 0:t.label),(null==(n=e.data)?void 0:n.description)?s().createElement(u.Typography.Text,{type:"secondary",style:{whiteSpace:"normal"}},e.data.description):null)}})),M?s().createElement("div",{style:{marginBottom:g.marginLG}},s().createElement("div",{style:{marginBottom:g.marginXS,fontWeight:600}},"".concat(m("Trigger configuration"),":")),s().createElement("div",{style:{padding:g.padding,border:"".concat(g.lineWidth,"px solid ").concat(g.colorBorderSecondary),borderRadius:g.borderRadiusLG}},s().createElement(c.Suspense,{fallback:s().createElement(u.Spin,null)},s().createElement(M,null)))):null,s().createElement(u.Form.Item,{name:"sync",label:m("Execute mode"),extra:m("Execute workflow asynchronously or synchronously based on trigger type, and could not be changed after created.")},s().createElement(I,{disabled:O||"edit"===n})),s().createElement(u.Form.Item,{name:"categories",label:m("Category")},s().createElement(u.Select,{mode:"multiple",allowClear:!0,options:d,optionFilterProp:"label"})),s().createElement(u.Form.Item,{name:"description",label:m("Description")},s().createElement(u.Input.TextArea,{autoSize:{minRows:2}})),s().createElement(u.Form.Item,{label:m("Advance options")},s().createElement(u.Card,{size:"small"},s().createElement(u.Form.Item,{name:["options","timeout"],label:m("Timeout settings"),extra:m("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."),initialValue:0},s().createElement(P,null)),s().createElement(u.Form.Item,{name:["options","stackLimit"],label:m("Maximum number of cycling triggers"),extra:m("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."),initialValue:1},s().createElement(u.InputNumber,{min:1,precision:0,style:{width:"50%"}})),s().createElement(u.Form.Item,{name:["options","deleteExecutionOnStatus"],label:m("Auto delete history when execution is on end status")},s().createElement(u.Select,{mode:"multiple",allowClear:!0,options:k,optionFilterProp:"label",optionRender:function(e){var t,n,r;return s().createElement(u.Space,null,s().createElement(u.Tag,{color:null==(t=e.data)?void 0:t.color},null==(n=e.data)?void 0:n.label),(null==(r=e.data)?void 0:r.description)?s().createElement("span",null,e.data.description):null)},tagRender:function(e){var t,n=e.value,r=e.label,o=e.closable,a=e.onClose;return s().createElement(u.Tag,{color:null==(t=F.m2[String(n)])?void 0:t.color,closable:o,onClose:a,onMouseDown:function(e){e.preventDefault(),e.stopPropagation()}},r)}}))))))}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,r,o,a,l){try{var i=e[a](l),u=i.value}catch(e){n(e);return}i.done?t(u):Promise.resolve(u).then(r,o)}function V(e){return function(){var t=this,n=arguments;return new Promise(function(r,o){var a=e.apply(t,n);function l(e){K(a,r,o,l,i,"next",e)}function i(e){K(a,r,o,l,i,"throw",e)}l(void 0)})}}function W(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){var r;r=n[t],t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r})}return e}function q(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 _(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 a=[],l=!0,i=!1;try{for(o=o.call(e);!(l=(n=o.next()).done)&&(a.push(n.value),!t||a.length!==t);l=!0);}catch(e){i=!0,r=e}finally{try{l||null==o.return||o.return()}finally{if(i)throw r}}return a}}(e,t)||Q(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 U(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function $(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)||Q(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 Q(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 X(e,t){var n,r,o,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},l=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(l,"next",{value:u(0)}),i(l,"throw",{value:u(1)}),i(l,"return",{value:u(2)}),"function"==typeof Symbol&&i(l,Symbol.iterator,{value:function(){return this}}),l;function u(i){return function(u){var c=[i,u];if(n)throw TypeError("Generator is already executing.");for(;l&&(l=0,c[0]&&(a=0)),a;)try{if(n=1,r&&(o=2&c[0]?r.return:c[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,c[1])).done)return o;switch(r=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return a.label++,{value:c[1],done:!1};case 5:a.label++,r=c[1],c=[0];continue;case 7:c=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===c[0]||2===c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(6===c[0]&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=t.call(e,a)}catch(e){c=[6,e],r=0}finally{n=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}function H(){var e=U(["\n background: ",";\n padding: 0;\n "]);return H=function(){return e},e}function J(){var e=U(["\n margin-left: -1px;\n background: ",";\n\n .ant-tabs {\n margin-bottom: 0;\n }\n\n .ant-tabs-nav {\n margin-bottom: 0;\n }\n\n .ant-tabs-content-holder {\n display: none;\n }\n "]);return J=function(){return e},e}function Y(){var e=U(["\n margin: 0;\n padding: ","px;\n background: ",";\n border-radius: 0 ","px ","px ","px;\n "]);return Y=function(){return e},e}var Z=["id","description","categories"],ee={position:"absolute",width:1,height:1,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",border:0};function et(e){var t,n=e.notice,o=u.theme.useToken().token,a=s().useId();return s().createElement(u.Tooltip,{title:null!=(t=n.description)?t:n.message,trigger:["hover","focus"]},s().createElement("span",{"aria-labelledby":a,role:"img",tabIndex:0,style:{alignItems:"center",color:function(e){switch(e){case"error":return o.colorErrorTextActive;case"success":return o.colorSuccessTextActive;case"warning":default:return o.colorWarningTextActive;case"info":return o.colorInfoTextActive}}(n.type),cursor:"help",display:"inline-flex",fontSize:o.fontSize,justifyContent:"center",lineHeight:1}},function(e){switch(e){case"error":return s().createElement(r.CloseCircleOutlined,{"aria-hidden":!0});case"info":return s().createElement(r.InfoCircleOutlined,{"aria-hidden":!0});case"success":return s().createElement(r.CheckCircleOutlined,{"aria-hidden":!0});default:return s().createElement(r.ExclamationCircleOutlined,{"aria-hidden":!0})}}(n.type||"warning"),s().createElement("span",{id:a,style:ee},n.message)))}function en(e){var t=e.notices;return t.length?s().createElement(s().Fragment,null,t.map(function(e,t){return s().createElement(et,{key:"".concat(e.key,"-").concat(t),notice:e})})):null}function er(e){var t=e.maxWidth,n=e.notices,r=e.title,o=u.theme.useToken().token;return s().createElement("span",{style:{display:"inline-block",width:"max-content",maxWidth:t,overflowWrap:"anywhere",whiteSpace:"normal",wordBreak:"break-word"}},r,n.length?s().createElement("span",{style:{display:"inline-flex",flexWrap:"wrap",gap:o.marginXS,marginInlineStart:o.marginXS}},s().createElement(en,{notices:n})):null)}function eo(e){var t=e.record,n=e.resource,r=e.onChanged,o=(0,b.ec)().t,a=u.App.useApp().message,l=_((0,c.useState)(!1),2),d=l[0],f=l[1],m=(0,i.useMemoizedFn)(function(e){return V(function(){return X(this,function(l){switch(l.label){case 0:if((null==t?void 0:t.id)==null)return[2];f(!0),l.label=1;case 1:return l.trys.push([1,3,4,5]),[4,n.update({filterByTk:t.id,values:{enabled:e}})];case 2:return l.sent(),setTimeout(function(){return r()},0),[3,5];case 3:return l.sent(),a.error(o("Operation failed")),[3,5];case 4:return f(!1),[7];case 5:return[2]}})})()});return s().createElement(u.Switch,{checked:!!(null==t?void 0:t.enabled),size:"small",disabled:d,loading:d,onClick:function(e,t){var n;return null==t||null==(n=t.stopPropagation)?void 0:n.call(t)},onChange:m})}function ea(e){var t=e.record,n=e.resource,r=e.onSubmitted,a=(0,b.ec)().t,l=_(u.Form.useForm(),1)[0],d=_((0,c.useState)(!1),2),f=d[0],m=d[1],p=(0,i.useMemoizedFn)(function(){return V(function(){var e;return X(this,function(o){switch(o.label){case 0:return[4,l.validateFields()];case 1:e=o.sent(),m(!0),o.label=2;case 2:return o.trys.push([2,,4,5]),[4,n.revision({filterByTk:t.id,values:e})];case 3:return o.sent(),r(),[3,5];case 4:return m(!1),[7];case 5:return[2]}})})()});return s().createElement(o.DialogFormLayout,{title:a("Duplicate to new workflow"),onSubmit:p,submitting:f,submitText:a("Submit"),cancelText:a("Cancel")},s().createElement(u.Form,{form:l,layout:"vertical"},s().createElement(u.Form.Item,{name:"title",label:a("Title")},s().createElement(u.Input,null))))}function el(){var e,t=(0,b.ec)().t,n=(0,b.kj)(),d=(0,l.useFlowContext)(),f=(0,y.TD)().getWorkflowCanvasPath,h=u.theme.useToken().token,w=h.screenXS-3*h.paddingXL,E=w+2*h.padding,S=u.App.useApp(),C=S.modal,k=S.message,x=d.api.resource("workflows"),A=d.app.pm.get(g.A),T=(0,a.css)(H(),h.colorBgLayout),F=(0,a.css)(J(),h.colorBgLayout),I=(0,a.css)(Y(),h.paddingLG,h.colorBgContainer,h.borderRadiusLG,h.borderRadiusLG,h.borderRadiusLG),M=(0,c.useMemo)(function(){var e,t,n,r;return null==(r=d.dataSourceManager)||null==(n=r.getDataSource)||null==(t=n.call(r,"main"))||null==(e=t.getCollection)?void 0:e.call(t,"workflows")},[d]),j=_((0,c.useState)("all"),2),R=j[0],D=j[1],P=_((0,c.useState)(1),2),z=P[0],N=P[1],L=_((0,c.useState)(o.DEFAULT_PAGE_SIZE),2),G=L[0],K=L[1],W=_((0,c.useState)([]),2),q=W[0],U=W[1],Q=_((0,c.useState)(void 0),2),ee=Q[0],et=Q[1],en=_((0,c.useState)({}),2),el=en[0],ei=en[1],eu=(0,i.useMemoizedFn)(function(e){et(e),N(1)}),ec=(0,i.useRequest)(function(){return V(function(){var e,t,n;return X(this,function(r){switch(r.label){case 0:return[4,d.api.resource("workflowCategories").list({paginate:!1,sort:["sort"]})];case 1:return[2,null!=(e=null==(n=r.sent())||null==(t=n.data)?void 0:t.data)?e:[]]}})})()}),es=ec.data,ed=ec.refresh,ef=(0,c.useMemo)(function(){return es||[]},[es]),em=(0,c.useMemo)(function(){return ef.map(function(e){var t;return{value:e.id,label:n(null!=(t=e.title)?t:"")}})},[ef,n]),ep=(0,i.useRequest)(function(){return V(function(){var e,t;return X(this,function(n){switch(n.label){case 0:return e={current:!0},"all"!==R&&(e["categories.id"]=R),t=ee?{$and:[e,ee]}:e,[4,x.list({page:z,pageSize:G,sort:["-createdAt"],appends:["categories","stats"],except:["config"],filter:t})];case 1:var r,o,a,l,i;return[2,{records:l=Array.isArray(a=null==(o=null==(r=n.sent())?void 0:r.data)?void 0:o.data)?a:Array.isArray(null==a?void 0:a.data)?a.data:[],total:(i=(null==o?void 0:o.meta)||(null==a?void 0:a.meta)||{}).count||i.total||l.length}]}})})()},{refreshDeps:[z,G,R,ee]}),ey=ep.data,eb=ep.loading,eg=ep.refresh,ev=(0,c.useMemo)(function(){return(null==ey?void 0:ey.records)||[]},[null==ey?void 0:ey.records]);(0,c.useEffect)(function(){var e=!1;return V(function(){var t;return X(this,function(n){switch(n.label){case 0:if(!ev.length)return ei({}),[2];return ei({}),[4,A.loadWorkflowListNotices({api:d.api,surface:"workflow-list-row",workflows:ev})];case 1:return t=n.sent(),e||ei(t),[2]}})})().catch(function(){e||ei({})}),function(){e=!0}},[d.api,A,ev]);var eh=(0,i.useMemoizedFn)(function(e,t){if(t!==G){K(t),N(1);return}N(e)}),ew=(0,i.useMemoizedFn)(function(e){var t=e?A.getTriggerOptions(e):void 0;return(null==t?void 0:t.title)?n(t.title):e}),eE=(0,i.useMemoizedFn)(function(e,t){d.viewer.drawer({width:"50%",closable:!0,content:function(){return s().createElement(B,{mode:e,plugin:A,record:t,categoryOptions:em,onSubmitted:function(){return eg()}})}})}),eS=(0,i.useMemoizedFn)(function(e){d.viewer.dialog({width:520,closable:!0,content:function(){return s().createElement(ea,{record:e,resource:x,onSubmitted:function(){return eg()}})}})}),eC=(0,i.useMemoizedFn)(function(e){d.router.navigate(f(e.id))}),ek=(0,i.useMemoizedFn)(function(e){d.viewer.drawer({width:"60%",closable:!0,title:t("Execution history"),content:function(){return s().createElement(v.S,{workflowKey:e.key})}})}),ex=(0,i.useMemoizedFn)(function(e){C.confirm({title:t("Delete record"),content:t("Are you sure you want to delete it?"),onOk:function(){return V(function(){return X(this,function(t){switch(t.label){case 0:return[4,x.destroy({filterByTk:e})];case 1:return t.sent(),U([]),eg(),[2]}})})()}})}),eA=(0,i.useMemoizedFn)(function(){return V(function(){return X(this,function(e){switch(e.label){case 0:return[4,x.sync()];case 1:return e.sent(),k.success(t("Operation succeeded")),eg(),[2]}})})()}),eT=!!((null==(e=d.app)?void 0:e.name)&&"main"!==d.app.name||d.app.pm.get("multi-app-share-collection")),eO=(0,c.useMemo)(function(){return[{title:t("Title"),dataIndex:"title",width:1,onHeaderCell:function(){return{style:{maxWidth:E,whiteSpace:"nowrap"}}},onCell:function(){return{style:{maxWidth:E,overflowWrap:"anywhere",whiteSpace:"normal",wordBreak:"break-word"}}},render:function(e,n){var r=!0===n.invalid?[{key:"workflow-invalid",message:t("This workflow has configuration issues and may not work properly."),type:"warning"}]:[],o=A.getWorkflowNotices({surface:"workflow-list-row",workflow:n}),a=el[String(n.id)]||[],l=$(r).concat($(o),$(a));return s().createElement(er,{title:e,notices:l,maxWidth:w})}},{title:t("Category"),dataIndex:"categories",render:function(e){return s().createElement(u.Space,{size:[0,4],wrap:!0},(null!=e?e:[]).map(function(e){return s().createElement(u.Tag,{key:e.id,color:"default"===e.color?void 0:e.color},n(e.title))}))}},{title:t("Trigger type"),dataIndex:"type",render:function(e){return e?s().createElement(u.Tag,{color:"gold"},ew(e)):null}},{title:t("Execute mode"),dataIndex:"sync",width:140,render:function(e){return s().createElement(p.t,{value:e})}},{title:t("Enabled"),dataIndex:"enabled",width:100,render:function(e,t){return s().createElement(eo,{record:t,resource:x,onChanged:eg})}},{title:t("Executed"),dataIndex:["stats","executed"],width:100,render:function(e,t){var n,r;return s().createElement("a",{"aria-label":"executed-".concat(t.title),onClick:function(){return ek(t)}},null!=(n=null==(r=t.stats)?void 0:r.executed)?n:0)}},{title:t("Actions"),width:260,render:function(e,n){return s().createElement(u.Space,{size:"middle",wrap:!1,style:{whiteSpace:"nowrap"}},s().createElement("a",{onClick:function(){return eC(n)}},t("Configure")),s().createElement("a",{onClick:function(){return eE("edit",n)}},t("Edit")),s().createElement("a",{onClick:function(){return eS(n)}},t("Duplicate")),s().createElement("a",{onClick:function(){return ex(n.id)}},t("Delete")))}}]},[ex,eC,eS,ek,eE,A,eg,x,t,ew,E,w,el]);return s().createElement("div",{className:T},s().createElement(O,{className:F,activeKey:R,onChange:function(e){D(e),N(1)},categories:ef,refreshCategories:ed}),s().createElement("div",{className:I},s().createElement(u.Flex,{justify:"space-between",align:"center",style:{marginBottom:h.margin}},s().createElement(o.CollectionFilter,{collection:M,defaultValue:m,nonfilterableFieldNames:Z,onChange:eu,t:n}),s().createElement(u.Space,null,s().createElement(u.Button,{icon:s().createElement(r.ReloadOutlined,null),onClick:function(){return eg()}},t("Refresh")),eT?s().createElement(u.Tooltip,{title:t("Sync enabled status of all workflows from database")},s().createElement(u.Button,{icon:s().createElement(r.SyncOutlined,null),onClick:eA},t("Sync"))):null,s().createElement(u.Button,{icon:s().createElement(r.DeleteOutlined,null),disabled:!q.length,onClick:function(){return ex(q)}},t("Delete")),s().createElement(u.Button,{type:"primary",icon:s().createElement(r.PlusOutlined,null),onClick:function(){return eE("create")}},t("Add new")))),s().createElement(o.Table,{rowKey:"id",loading:eb,columns:eO,dataSource:(null==ey?void 0:ey.records)||[],rowSelection:{selectedRowKeys:q,onChange:U},pagination:{current:z,pageSize:G,total:(null==ey?void 0:ey.total)||0,onChange:eh},tableLayout:"auto"})))}function ei(){var e=(0,b.kj)(),t=(0,l.useFlowContext)().app.pm.get(g.A),n=(0,c.useMemo)(function(){var n=Array.from(t.triggers.getEntities()).map(function(t){var n=_(t,2),r=n[0],o=n[1];return{value:r,label:(null==o?void 0:o.title)?e(o.title):String(r)}}).sort(function(e,t){return String(e.label).localeCompare(String(t.label))});return[q(W({},f),{hidden:!0,fields:f.fields.map(function(e){return(null==e?void 0:e.name)==="type"&&e.uiSchema?q(W({},e),{uiSchema:q(W({},e.uiSchema),{enum:n})}):e})})]},[t,e]);return s().createElement(o.ExtendCollectionsProvider,{collections:n},s().createElement(el,null))}},7001:function(e,t,n){n.d(t,{TD:function(){return l}});var r=n(2625),o=n(3485),a=n(8401);function l(){var e=(0,o.useApp)(),t="settings."===e.pluginSettingsManager.getRouteName(""),n=e.pluginSettingsManager.getRoutePath("").replace(/\/+$/,""),l=t||"modern"===(0,o.getRouteRuntimeVersion)(),i=(0,r.useMemoizedFn)(function(e){return t?"".concat(n,"/workflow/workflows/").concat(e):l?(0,a.JG)(e):"/admin/settings/workflow/workflows/".concat(e)}),u=(0,r.useMemoizedFn)(function(e){return t?"".concat(n,"/workflow/executions/").concat(e):l?(0,a.Pq)(e):"/admin/settings/workflow/executions/".concat(e)});return{isV2Runtime:l,getWorkflowCanvasPath:i,getWorkflowExecutionPath:u}}},9239:function(e,t,n){n.d(t,{GO:function(){return a},QQ:function(){return u},hi:function(){return l},m2:function(){return i}});var r=n(358);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var a={QUEUEING:null,STARTED:0,RESOLVED:1,FAILED:-1,ERROR:-2,ABORTED:-3,CANCELED:-4,REJECTED:-5,RETRY_NEEDED:-6},l=[{value:a.QUEUEING,label:'{{t("Queueing", { ns: "'.concat(r.C,'" })}}'),color:"blue",description:'{{t("Triggered but still waiting in queue to execute.", { ns: "'.concat(r.C,'" })}}')},{value:a.STARTED,label:'{{t("On going", { ns: "'.concat(r.C,'" })}}'),color:"gold",description:'{{t("Started and executing, maybe waiting for an async callback (manual, delay etc.).", { ns: "'.concat(r.C,'" })}}')},{value:a.RESOLVED,label:'{{t("Resolved", { ns: "'.concat(r.C,'" })}}'),color:"green",description:'{{t("Successfully finished.", { ns: "'.concat(r.C,'" })}}')},{value:a.FAILED,label:'{{t("Failed", { ns: "'.concat(r.C,'" })}}'),color:"red",description:'{{t("Failed to satisfy node configurations.", { ns: "'.concat(r.C,'" })}}')},{value:a.ERROR,label:'{{t("Error", { ns: "'.concat(r.C,'" })}}'),color:"red",description:'{{t("Some node meets error.", { ns: "'.concat(r.C,'" })}}')},{value:a.ABORTED,label:'{{t("Aborted", { ns: "'.concat(r.C,'" })}}'),color:"red",description:'{{t("Running of some node was aborted by program flow.", { ns: "'.concat(r.C,'" })}}')},{value:a.CANCELED,label:'{{t("Canceled", { ns: "'.concat(r.C,'" })}}'),color:"volcano",description:'{{t("Manually canceled whole execution when waiting.", { ns: "'.concat(r.C,'" })}}')},{value:a.REJECTED,label:'{{t("Rejected", { ns: "'.concat(r.C,'" })}}'),color:"volcano",description:'{{t("Rejected from a manual node.", { ns: "'.concat(r.C,'" })}}')},{value:a.RETRY_NEEDED,label:'{{t("Retry needed", { ns: "'.concat(r.C,'" })}}'),color:"volcano",description:'{{t("General failed but should do another try.", { ns: "'.concat(r.C,'" })}}')}],i=l.reduce(function(e,t){return Object.assign(e,o({},t.value,t))},{}),u=[{value:r.K.TIMEOUT,label:'{{t("Timed out", { ns: "'.concat(r.C,'" })}}')},{value:r.K.MANUAL_CANCEL,label:'{{t("Canceled manually", { ns: "'.concat(r.C,'" })}}')},{value:r.K.PARENT_ABORTED,label:'{{t("Aborted with parent execution", { ns: "'.concat(r.C,'" })}}')}].reduce(function(e,t){return Object.assign(e,o({},t.value,t))},{})}}]);