@nocobase/plugin-workflow 2.1.0-beta.36 → 2.1.0-beta.38
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.
- package/dist/client/618.19af7f84261c815d.js +10 -0
- package/dist/client/964.ffbf5b47ed12bbdc.js +10 -0
- package/dist/client/Branch.d.ts +7 -3
- package/dist/client/BranchContext.d.ts +18 -0
- package/dist/client/components/TimeoutInput.d.ts +11 -0
- package/dist/client/constants.d.ts +13 -0
- package/dist/client/index.js +1 -1
- package/dist/client/nodes/index.d.ts +2 -0
- package/dist/client/schemas/executions.d.ts +42 -0
- package/dist/client/utils.d.ts +17 -0
- package/dist/common/collections/executions.d.ts +42 -0
- package/dist/common/collections/executions.js +50 -1
- package/dist/common/collections/workflows.d.ts +6 -2
- package/dist/common/collections/workflows.js +3 -1
- package/dist/common/constants.d.ts +5 -0
- package/dist/common/constants.js +7 -0
- package/dist/externalVersion.js +12 -12
- package/dist/locale/de-DE.json +4 -0
- package/dist/locale/en-US.json +7 -0
- package/dist/locale/es-ES.json +4 -0
- package/dist/locale/fr-FR.json +4 -0
- package/dist/locale/hu-HU.json +7 -3
- package/dist/locale/id-ID.json +4 -0
- package/dist/locale/it-IT.json +4 -0
- package/dist/locale/ja-JP.json +5 -1
- package/dist/locale/ko-KR.json +4 -0
- package/dist/locale/nl-NL.json +7 -3
- package/dist/locale/pt-BR.json +4 -0
- package/dist/locale/ru-RU.json +4 -0
- package/dist/locale/tr-TR.json +4 -0
- package/dist/locale/uk-UA.json +7 -3
- package/dist/locale/vi-VN.json +7 -3
- package/dist/locale/zh-CN.json +8 -0
- package/dist/locale/zh-TW.json +7 -3
- package/dist/node_modules/cron-parser/package.json +1 -1
- package/dist/node_modules/joi/package.json +1 -1
- package/dist/node_modules/lru-cache/package.json +1 -1
- package/dist/node_modules/nodejs-snowflake/package.json +1 -1
- package/dist/server/Dispatcher.d.ts +9 -7
- package/dist/server/Dispatcher.js +190 -122
- package/dist/server/ExecutionTimeoutManager.d.ts +45 -0
- package/dist/server/ExecutionTimeoutManager.js +312 -0
- package/dist/server/Plugin.d.ts +12 -0
- package/dist/server/Plugin.js +21 -1
- package/dist/server/Processor.d.ts +65 -9
- package/dist/server/Processor.js +285 -33
- package/dist/server/RunningExecutionRegistry.d.ts +18 -0
- package/dist/server/RunningExecutionRegistry.js +48 -0
- package/dist/server/actions/executions.d.ts +4 -3
- package/dist/server/actions/executions.js +42 -21
- package/dist/server/actions/jobs.d.ts +2 -1
- package/dist/server/actions/jobs.js +28 -1
- package/dist/server/constants.d.ts +2 -0
- package/dist/server/constants.js +3 -0
- package/dist/server/index.d.ts +2 -0
- package/dist/server/index.js +2 -0
- package/dist/server/instructions/index.d.ts +10 -3
- package/dist/server/migrations/20260501120000-workflow-timeout.d.ts +13 -0
- package/dist/server/migrations/20260501120000-workflow-timeout.js +63 -0
- package/dist/server/timeout-errors.d.ts +13 -0
- package/dist/server/timeout-errors.js +47 -0
- package/dist/server/types/Execution.d.ts +6 -0
- package/dist/server/types/Job.d.ts +3 -3
- package/dist/server/types/Workflow.d.ts +6 -1
- package/dist/server/utils.d.ts +11 -1
- package/dist/server/utils.js +92 -5
- package/dist/swagger/index.d.ts +22 -0
- package/dist/swagger/index.js +22 -0
- package/package.json +2 -2
- package/dist/client/261.7722d7400942730e.js +0 -10
- package/dist/client/964.6251d37b35710747.js +0 -10
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
7
|
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
8
|
*/
|
|
9
|
+
import { EXECUTION_REASON } from '../common/constants';
|
|
9
10
|
export declare const EXECUTION_STATUS: {
|
|
10
11
|
readonly QUEUEING: any;
|
|
11
12
|
readonly STARTED: 0;
|
|
@@ -17,6 +18,7 @@ export declare const EXECUTION_STATUS: {
|
|
|
17
18
|
readonly REJECTED: -5;
|
|
18
19
|
readonly RETRY_NEEDED: -6;
|
|
19
20
|
};
|
|
21
|
+
export { EXECUTION_REASON };
|
|
20
22
|
export declare const JOB_STATUS: {
|
|
21
23
|
readonly PENDING: 0;
|
|
22
24
|
readonly RESOLVED: 1;
|
package/dist/server/constants.js
CHANGED
|
@@ -26,10 +26,12 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
26
26
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
27
27
|
var constants_exports = {};
|
|
28
28
|
__export(constants_exports, {
|
|
29
|
+
EXECUTION_REASON: () => import_constants.EXECUTION_REASON,
|
|
29
30
|
EXECUTION_STATUS: () => EXECUTION_STATUS,
|
|
30
31
|
JOB_STATUS: () => JOB_STATUS
|
|
31
32
|
});
|
|
32
33
|
module.exports = __toCommonJS(constants_exports);
|
|
34
|
+
var import_constants = require("../common/constants");
|
|
33
35
|
const EXECUTION_STATUS = {
|
|
34
36
|
QUEUEING: null,
|
|
35
37
|
STARTED: 0,
|
|
@@ -53,6 +55,7 @@ const JOB_STATUS = {
|
|
|
53
55
|
};
|
|
54
56
|
// Annotate the CommonJS export names for ESM import in node:
|
|
55
57
|
0 && (module.exports = {
|
|
58
|
+
EXECUTION_REASON,
|
|
56
59
|
EXECUTION_STATUS,
|
|
57
60
|
JOB_STATUS
|
|
58
61
|
});
|
package/dist/server/index.d.ts
CHANGED
|
@@ -11,8 +11,10 @@ export * from './constants';
|
|
|
11
11
|
export * from './instructions';
|
|
12
12
|
export * from './functions';
|
|
13
13
|
export * from './logicCalculate';
|
|
14
|
+
export * from './timeout-errors';
|
|
14
15
|
export { Trigger } from './triggers';
|
|
15
16
|
export type { EventOptions } from './Dispatcher';
|
|
16
17
|
export { default as Processor } from './Processor';
|
|
18
|
+
export type { BackgroundAbortHandle, ProcessorOptions } from './Processor';
|
|
17
19
|
export { default } from './Plugin';
|
|
18
20
|
export * from './types';
|
package/dist/server/index.js
CHANGED
|
@@ -47,6 +47,7 @@ __reExport(server_exports, require("./constants"), module.exports);
|
|
|
47
47
|
__reExport(server_exports, require("./instructions"), module.exports);
|
|
48
48
|
__reExport(server_exports, require("./functions"), module.exports);
|
|
49
49
|
__reExport(server_exports, require("./logicCalculate"), module.exports);
|
|
50
|
+
__reExport(server_exports, require("./timeout-errors"), module.exports);
|
|
50
51
|
var import_triggers = require("./triggers");
|
|
51
52
|
var import_Processor = __toESM(require("./Processor"));
|
|
52
53
|
var import_Plugin = __toESM(require("./Plugin"));
|
|
@@ -60,5 +61,6 @@ __reExport(server_exports, require("./types"), module.exports);
|
|
|
60
61
|
...require("./instructions"),
|
|
61
62
|
...require("./functions"),
|
|
62
63
|
...require("./logicCalculate"),
|
|
64
|
+
...require("./timeout-errors"),
|
|
63
65
|
...require("./types")
|
|
64
66
|
});
|
|
@@ -14,6 +14,7 @@ import type { FlowNodeModel, WorkflowModel } from '../types';
|
|
|
14
14
|
export interface IJob {
|
|
15
15
|
status: number;
|
|
16
16
|
result?: unknown;
|
|
17
|
+
log?: string;
|
|
17
18
|
[key: string]: unknown;
|
|
18
19
|
}
|
|
19
20
|
/**
|
|
@@ -24,8 +25,11 @@ export interface IJob {
|
|
|
24
25
|
* 2. `null` | Promise<null>: processor will do exit process.
|
|
25
26
|
* 3. `void` | Promise<void>: processor will do nothing, and terminate the current execution without any action.
|
|
26
27
|
*/
|
|
27
|
-
export type InstructionResult = IJob |
|
|
28
|
-
export type Runner = (node: FlowNodeModel, input: any, processor: Processor
|
|
28
|
+
export type InstructionResult = IJob | null | void;
|
|
29
|
+
export type Runner = (node: FlowNodeModel, input: any, processor: Processor, options?: {
|
|
30
|
+
rerun?: true;
|
|
31
|
+
signal?: AbortSignal;
|
|
32
|
+
}) => InstructionResult | Promise<InstructionResult>;
|
|
29
33
|
export type InstructionInterface = {
|
|
30
34
|
run: Runner;
|
|
31
35
|
resume?: Runner;
|
|
@@ -42,6 +46,9 @@ export declare abstract class Instruction implements InstructionInterface {
|
|
|
42
46
|
configSchema?: Joi.ObjectSchema;
|
|
43
47
|
constructor(workflow: Plugin);
|
|
44
48
|
validateConfig(config: Record<string, any>): Record<string, string> | null;
|
|
45
|
-
abstract run(node: FlowNodeModel, input: any, processor: Processor
|
|
49
|
+
abstract run(node: FlowNodeModel, input: any, processor: Processor, options?: {
|
|
50
|
+
rerun?: true;
|
|
51
|
+
signal?: AbortSignal;
|
|
52
|
+
}): InstructionResult | Promise<InstructionResult>;
|
|
46
53
|
}
|
|
47
54
|
export default Instruction;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
import { Migration } from '@nocobase/server';
|
|
10
|
+
export default class extends Migration {
|
|
11
|
+
appVersion: string;
|
|
12
|
+
up(): Promise<void>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
var __defProp = Object.defineProperty;
|
|
11
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
12
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
13
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
14
|
+
var __export = (target, all) => {
|
|
15
|
+
for (var name in all)
|
|
16
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
17
|
+
};
|
|
18
|
+
var __copyProps = (to, from, except, desc) => {
|
|
19
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
20
|
+
for (let key of __getOwnPropNames(from))
|
|
21
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
22
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
23
|
+
}
|
|
24
|
+
return to;
|
|
25
|
+
};
|
|
26
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
27
|
+
var workflow_timeout_exports = {};
|
|
28
|
+
__export(workflow_timeout_exports, {
|
|
29
|
+
default: () => workflow_timeout_default
|
|
30
|
+
});
|
|
31
|
+
module.exports = __toCommonJS(workflow_timeout_exports);
|
|
32
|
+
var import_server = require("@nocobase/server");
|
|
33
|
+
class workflow_timeout_default extends import_server.Migration {
|
|
34
|
+
appVersion = "<2.1.0-beta.26";
|
|
35
|
+
async up() {
|
|
36
|
+
const { db } = this.context;
|
|
37
|
+
const executionCollection = db.getCollection("executions");
|
|
38
|
+
const tableInfo = executionCollection.getTableNameWithSchema();
|
|
39
|
+
const statusColumn = executionCollection.getField("status").columnName();
|
|
40
|
+
const expiresAtColumn = executionCollection.getField("expiresAt").columnName();
|
|
41
|
+
const parentExecutionIdColumn = executionCollection.getField("parentExecutionId").columnName();
|
|
42
|
+
await db.sequelize.transaction(async (transaction) => {
|
|
43
|
+
const tableExists = await this.queryInterface.tableExists(tableInfo, { transaction });
|
|
44
|
+
if (!tableExists) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
const indexes = await this.queryInterface.showIndex(tableInfo, { transaction });
|
|
48
|
+
const indexNames = new Set(indexes.map((index) => index.name));
|
|
49
|
+
if (!indexNames.has("executions_status_expires_at")) {
|
|
50
|
+
await this.queryInterface.addIndex(tableInfo, [statusColumn, expiresAtColumn], {
|
|
51
|
+
name: "executions_status_expires_at",
|
|
52
|
+
transaction
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
if (!indexNames.has("executions_parent_execution_status")) {
|
|
56
|
+
await this.queryInterface.addIndex(tableInfo, [parentExecutionIdColumn, statusColumn], {
|
|
57
|
+
name: "executions_parent_execution_status",
|
|
58
|
+
transaction
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
export declare class WorkflowTimeoutError extends Error {
|
|
10
|
+
code: string;
|
|
11
|
+
constructor(message?: string);
|
|
12
|
+
}
|
|
13
|
+
export declare function isWorkflowTimeoutError(error: any): boolean;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
var __defProp = Object.defineProperty;
|
|
11
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
12
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
13
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
14
|
+
var __export = (target, all) => {
|
|
15
|
+
for (var name in all)
|
|
16
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
17
|
+
};
|
|
18
|
+
var __copyProps = (to, from, except, desc) => {
|
|
19
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
20
|
+
for (let key of __getOwnPropNames(from))
|
|
21
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
22
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
23
|
+
}
|
|
24
|
+
return to;
|
|
25
|
+
};
|
|
26
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
27
|
+
var timeout_errors_exports = {};
|
|
28
|
+
__export(timeout_errors_exports, {
|
|
29
|
+
WorkflowTimeoutError: () => WorkflowTimeoutError,
|
|
30
|
+
isWorkflowTimeoutError: () => isWorkflowTimeoutError
|
|
31
|
+
});
|
|
32
|
+
module.exports = __toCommonJS(timeout_errors_exports);
|
|
33
|
+
class WorkflowTimeoutError extends Error {
|
|
34
|
+
code = "WORKFLOW_TIMEOUT";
|
|
35
|
+
constructor(message = "Workflow execution timed out") {
|
|
36
|
+
super(message);
|
|
37
|
+
this.name = "WorkflowTimeoutError";
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function isWorkflowTimeoutError(error) {
|
|
41
|
+
return error instanceof WorkflowTimeoutError || (error == null ? void 0 : error.name) === "WorkflowTimeoutError" || (error == null ? void 0 : error.code) === "WORKFLOW_TIMEOUT";
|
|
42
|
+
}
|
|
43
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
44
|
+
0 && (module.exports = {
|
|
45
|
+
WorkflowTimeoutError,
|
|
46
|
+
isWorkflowTimeoutError
|
|
47
|
+
});
|
|
@@ -15,7 +15,13 @@ export default class ExecutionModel extends Model {
|
|
|
15
15
|
title: string;
|
|
16
16
|
context: any;
|
|
17
17
|
status: number;
|
|
18
|
+
reason?: string | null;
|
|
18
19
|
dispatched: boolean;
|
|
20
|
+
parentExecutionId?: number | null;
|
|
21
|
+
stack?: Array<number | string>;
|
|
22
|
+
startedAt?: Date | null;
|
|
23
|
+
expiresAt?: Date | null;
|
|
24
|
+
output?: any;
|
|
19
25
|
createdAt: Date;
|
|
20
26
|
updatedAt: Date;
|
|
21
27
|
key: string;
|
|
@@ -11,12 +11,12 @@ import FlowNodeModel from './FlowNode';
|
|
|
11
11
|
export default class JobModel extends Model {
|
|
12
12
|
id: number;
|
|
13
13
|
status: number;
|
|
14
|
-
result
|
|
15
|
-
meta
|
|
14
|
+
result?: any;
|
|
15
|
+
meta?: any;
|
|
16
16
|
createdAt: Date;
|
|
17
17
|
updatedAt: Date;
|
|
18
18
|
upstreamId: number;
|
|
19
|
-
upstream
|
|
19
|
+
upstream?: JobModel;
|
|
20
20
|
nodeId: number;
|
|
21
21
|
node?: FlowNodeModel;
|
|
22
22
|
getNode: BelongsToGetAssociationMixin<FlowNodeModel>;
|
|
@@ -19,7 +19,12 @@ export default class WorkflowModel extends Model {
|
|
|
19
19
|
description?: string;
|
|
20
20
|
type: string;
|
|
21
21
|
config: any;
|
|
22
|
-
options:
|
|
22
|
+
options: {
|
|
23
|
+
timeout?: number;
|
|
24
|
+
stackLimit?: number;
|
|
25
|
+
deleteExecutionOnStatus?: number[];
|
|
26
|
+
[key: string]: any;
|
|
27
|
+
};
|
|
23
28
|
sync: boolean;
|
|
24
29
|
createdAt: Date;
|
|
25
30
|
updatedAt: Date;
|
package/dist/server/utils.d.ts
CHANGED
|
@@ -6,9 +6,17 @@
|
|
|
6
6
|
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
7
|
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
8
|
*/
|
|
9
|
+
import { Transactionable } from '@nocobase/database';
|
|
9
10
|
import type { DataSourceManager } from '@nocobase/data-source-manager';
|
|
10
|
-
import type
|
|
11
|
+
import type PluginWorkflowServer from './Plugin';
|
|
12
|
+
import { EXECUTION_REASON } from './constants';
|
|
13
|
+
import type { ExecutionModel, WorkflowModel } from './types';
|
|
11
14
|
import Processor from './Processor';
|
|
15
|
+
type AbortOptions = Transactionable & {
|
|
16
|
+
reason?: (typeof EXECUTION_REASON)[keyof typeof EXECUTION_REASON];
|
|
17
|
+
};
|
|
18
|
+
export declare function getExecutionLockKey(executionId: number | string): string;
|
|
19
|
+
export declare function isLockAcquireError(error: unknown): boolean;
|
|
12
20
|
export declare function validateCollectionField(collection: string, dataSourceManager: DataSourceManager): Record<string, string> | null;
|
|
13
21
|
export declare function getExecutionStatusName(status: number | null | undefined): string;
|
|
14
22
|
export declare function getWorkflowExecutionLogMeta(workflow: WorkflowModel, processor?: Processor): {
|
|
@@ -23,4 +31,6 @@ export declare function getWorkflowExecutionLogMeta(workflow: WorkflowModel, pro
|
|
|
23
31
|
lastJobId: number;
|
|
24
32
|
lastJobStatus: number;
|
|
25
33
|
};
|
|
34
|
+
export declare function abortExecution(plugin: PluginWorkflowServer, execution: ExecutionModel, options?: AbortOptions): Promise<boolean>;
|
|
26
35
|
export declare function toJSON(data: any): any;
|
|
36
|
+
export {};
|
package/dist/server/utils.js
CHANGED
|
@@ -26,8 +26,11 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
26
26
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
27
27
|
var utils_exports = {};
|
|
28
28
|
__export(utils_exports, {
|
|
29
|
+
abortExecution: () => abortExecution,
|
|
30
|
+
getExecutionLockKey: () => getExecutionLockKey,
|
|
29
31
|
getExecutionStatusName: () => getExecutionStatusName,
|
|
30
32
|
getWorkflowExecutionLogMeta: () => getWorkflowExecutionLogMeta,
|
|
33
|
+
isLockAcquireError: () => isLockAcquireError,
|
|
31
34
|
toJSON: () => toJSON,
|
|
32
35
|
validateCollectionField: () => validateCollectionField
|
|
33
36
|
});
|
|
@@ -35,13 +38,23 @@ module.exports = __toCommonJS(utils_exports);
|
|
|
35
38
|
var import_database = require("@nocobase/database");
|
|
36
39
|
var import_data_source_manager = require("@nocobase/data-source-manager");
|
|
37
40
|
var import_constants = require("./constants");
|
|
41
|
+
function getExecutionLockKey(executionId) {
|
|
42
|
+
return `workflow:execution:${executionId}`;
|
|
43
|
+
}
|
|
44
|
+
function isLockAcquireError(error) {
|
|
45
|
+
return error instanceof Error && error.constructor.name === "LockAcquireError";
|
|
46
|
+
}
|
|
47
|
+
function afterTransactionCommit(transaction, callback) {
|
|
48
|
+
if (typeof transaction.afterCommit === "function") {
|
|
49
|
+
transaction.afterCommit(callback);
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
callback();
|
|
53
|
+
}
|
|
38
54
|
function validateCollectionField(collection, dataSourceManager) {
|
|
39
55
|
const [dataSourceName, collectionName] = (0, import_data_source_manager.parseCollectionName)(collection);
|
|
40
|
-
if (
|
|
41
|
-
|
|
42
|
-
if (parts.length !== 2 || !parts[0] || !parts[1]) {
|
|
43
|
-
return { collection: `"collection" must be in the format "dataSourceName:collectionName"` };
|
|
44
|
-
}
|
|
56
|
+
if (!dataSourceName || !collectionName) {
|
|
57
|
+
return { collection: `"collection" must be in the format "dataSourceName:collectionName"` };
|
|
45
58
|
}
|
|
46
59
|
const dataSource = dataSourceManager.dataSources.get(dataSourceName);
|
|
47
60
|
if (!dataSource) {
|
|
@@ -76,6 +89,77 @@ function getWorkflowExecutionLogMeta(workflow, processor) {
|
|
|
76
89
|
lastJobStatus: (lastSavedJob == null ? void 0 : lastSavedJob.status) ?? null
|
|
77
90
|
};
|
|
78
91
|
}
|
|
92
|
+
async function abortExecution(plugin, execution, options = {}) {
|
|
93
|
+
const logger = plugin.getLogger(execution.workflowId);
|
|
94
|
+
const ownTransaction = !options.transaction;
|
|
95
|
+
const transaction = options.transaction ?? await plugin.useDataSourceTransaction("main", null, true);
|
|
96
|
+
const ExecutionRepo = plugin.db.getRepository("executions");
|
|
97
|
+
const JobRepo = plugin.db.getRepository("jobs");
|
|
98
|
+
try {
|
|
99
|
+
const lockedExecution = await ExecutionRepo.findOne({
|
|
100
|
+
filterByTk: execution.id,
|
|
101
|
+
transaction,
|
|
102
|
+
lock: transaction.LOCK.UPDATE
|
|
103
|
+
});
|
|
104
|
+
if (!lockedExecution || lockedExecution.status !== import_constants.EXECUTION_STATUS.STARTED) {
|
|
105
|
+
if (ownTransaction) {
|
|
106
|
+
await transaction.commit();
|
|
107
|
+
}
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
await lockedExecution.update(
|
|
111
|
+
{
|
|
112
|
+
status: import_constants.EXECUTION_STATUS.ABORTED,
|
|
113
|
+
...options.reason ? {
|
|
114
|
+
reason: options.reason
|
|
115
|
+
} : {}
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
transaction
|
|
119
|
+
}
|
|
120
|
+
);
|
|
121
|
+
const updated = await JobRepo.update({
|
|
122
|
+
values: {
|
|
123
|
+
status: import_constants.JOB_STATUS.ABORTED
|
|
124
|
+
},
|
|
125
|
+
filter: {
|
|
126
|
+
executionId: execution.id,
|
|
127
|
+
status: import_constants.JOB_STATUS.PENDING
|
|
128
|
+
},
|
|
129
|
+
individualHooks: false,
|
|
130
|
+
transaction
|
|
131
|
+
});
|
|
132
|
+
const childExecutions = await plugin.db.getRepository("executions").find({
|
|
133
|
+
filter: {
|
|
134
|
+
parentExecutionId: execution.id,
|
|
135
|
+
status: import_constants.EXECUTION_STATUS.STARTED
|
|
136
|
+
},
|
|
137
|
+
transaction
|
|
138
|
+
});
|
|
139
|
+
for (const child of childExecutions) {
|
|
140
|
+
await abortExecution(plugin, child, { transaction, reason: import_constants.EXECUTION_REASON.PARENT_ABORTED });
|
|
141
|
+
}
|
|
142
|
+
afterTransactionCommit(transaction, () => {
|
|
143
|
+
execution.set("status", import_constants.EXECUTION_STATUS.ABORTED);
|
|
144
|
+
execution.set("reason", options.reason ?? null);
|
|
145
|
+
plugin.timeoutManager.clear(execution.id);
|
|
146
|
+
plugin.abortRunningExecution(execution.id, options.reason);
|
|
147
|
+
});
|
|
148
|
+
logger.info(`execution (${execution.id}) aborted`, {
|
|
149
|
+
workflowId: execution.workflowId,
|
|
150
|
+
pendingJobs: Array.isArray(updated) ? updated.length : updated
|
|
151
|
+
});
|
|
152
|
+
if (ownTransaction) {
|
|
153
|
+
await transaction.commit();
|
|
154
|
+
}
|
|
155
|
+
return true;
|
|
156
|
+
} catch (error) {
|
|
157
|
+
if (ownTransaction && !transaction.finished) {
|
|
158
|
+
await transaction.rollback();
|
|
159
|
+
}
|
|
160
|
+
throw error;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
79
163
|
function toJSON(data) {
|
|
80
164
|
if (Array.isArray(data)) {
|
|
81
165
|
return data.map(toJSON);
|
|
@@ -93,8 +177,11 @@ function toJSON(data) {
|
|
|
93
177
|
}
|
|
94
178
|
// Annotate the CommonJS export names for ESM import in node:
|
|
95
179
|
0 && (module.exports = {
|
|
180
|
+
abortExecution,
|
|
181
|
+
getExecutionLockKey,
|
|
96
182
|
getExecutionStatusName,
|
|
97
183
|
getWorkflowExecutionLogMeta,
|
|
184
|
+
isLockAcquireError,
|
|
98
185
|
toJSON,
|
|
99
186
|
validateCollectionField
|
|
100
187
|
});
|
package/dist/swagger/index.d.ts
CHANGED
|
@@ -1239,6 +1239,11 @@ declare const _default: {
|
|
|
1239
1239
|
description: string;
|
|
1240
1240
|
default: number;
|
|
1241
1241
|
};
|
|
1242
|
+
timeout: {
|
|
1243
|
+
type: string;
|
|
1244
|
+
description: string;
|
|
1245
|
+
default: number;
|
|
1246
|
+
};
|
|
1242
1247
|
};
|
|
1243
1248
|
};
|
|
1244
1249
|
categories: {
|
|
@@ -1386,6 +1391,23 @@ declare const _default: {
|
|
|
1386
1391
|
type: string;
|
|
1387
1392
|
description: string;
|
|
1388
1393
|
};
|
|
1394
|
+
parentExecutionId: {
|
|
1395
|
+
type: string;
|
|
1396
|
+
nullable: boolean;
|
|
1397
|
+
description: string;
|
|
1398
|
+
};
|
|
1399
|
+
startedAt: {
|
|
1400
|
+
type: string;
|
|
1401
|
+
format: string;
|
|
1402
|
+
nullable: boolean;
|
|
1403
|
+
description: string;
|
|
1404
|
+
};
|
|
1405
|
+
expiresAt: {
|
|
1406
|
+
type: string;
|
|
1407
|
+
format: string;
|
|
1408
|
+
nullable: boolean;
|
|
1409
|
+
description: string;
|
|
1410
|
+
};
|
|
1389
1411
|
jobs: {
|
|
1390
1412
|
type: string;
|
|
1391
1413
|
description: string;
|
package/dist/swagger/index.js
CHANGED
|
@@ -1283,6 +1283,11 @@ var swagger_default = {
|
|
|
1283
1283
|
type: "integer",
|
|
1284
1284
|
description: "Maximum recursive trigger depth. Executions beyond this limit are skipped. Default: 1.",
|
|
1285
1285
|
default: 1
|
|
1286
|
+
},
|
|
1287
|
+
timeout: {
|
|
1288
|
+
type: "integer",
|
|
1289
|
+
description: "Execution timeout in milliseconds. `0` means unlimited.",
|
|
1290
|
+
default: 0
|
|
1286
1291
|
}
|
|
1287
1292
|
}
|
|
1288
1293
|
},
|
|
@@ -1440,6 +1445,23 @@ var swagger_default = {
|
|
|
1440
1445
|
type: "object",
|
|
1441
1446
|
description: "Output node results"
|
|
1442
1447
|
},
|
|
1448
|
+
parentExecutionId: {
|
|
1449
|
+
type: "integer",
|
|
1450
|
+
nullable: true,
|
|
1451
|
+
description: "Direct parent execution ID when triggered by a subflow."
|
|
1452
|
+
},
|
|
1453
|
+
startedAt: {
|
|
1454
|
+
type: "string",
|
|
1455
|
+
format: "date-time",
|
|
1456
|
+
nullable: true,
|
|
1457
|
+
description: "Time when the execution really entered processor execution."
|
|
1458
|
+
},
|
|
1459
|
+
expiresAt: {
|
|
1460
|
+
type: "string",
|
|
1461
|
+
format: "date-time",
|
|
1462
|
+
nullable: true,
|
|
1463
|
+
description: "Execution timeout deadline. `null` means unlimited."
|
|
1464
|
+
},
|
|
1443
1465
|
jobs: {
|
|
1444
1466
|
type: "array",
|
|
1445
1467
|
description: 'Node job results (included when `appends: ["jobs"]`)',
|
package/package.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"description": "A powerful BPM tool that provides foundational support for business automation, with the capability to extend unlimited triggers and nodes.",
|
|
7
7
|
"description.zh-CN": "一个强大的 BPM 工具,为业务自动化提供基础支持,并且可任意扩展更多的触发器和节点。",
|
|
8
8
|
"description.ru-RU": "Мощный инструмент BPM, обеспечивающий базовую поддержку автоматизации бизнес-процессов с возможностью неограниченного расширения триггеров и узлов.",
|
|
9
|
-
"version": "2.1.0-beta.
|
|
9
|
+
"version": "2.1.0-beta.38",
|
|
10
10
|
"license": "Apache-2.0",
|
|
11
11
|
"main": "./dist/server/index.js",
|
|
12
12
|
"homepage": "https://docs.nocobase.com/handbook/workflow",
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
"@nocobase/test": "2.x",
|
|
50
50
|
"@nocobase/utils": "2.x"
|
|
51
51
|
},
|
|
52
|
-
"gitHead": "
|
|
52
|
+
"gitHead": "d1c585108ff6e51c17b0b52bacb1a2d621d9c119",
|
|
53
53
|
"keywords": [
|
|
54
54
|
"Workflow"
|
|
55
55
|
]
|
|
@@ -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([["261"],{7924:function(e,t,r){r.r(t),r.d(t,{WorkflowPane:function(){return eb}});var o,n,i=r(9155),c=r.n(i),a=r(2059),l=r(9452),s=r(5230),u=r(3342),p=r(4421);function m(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},o=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(o=o.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),o.forEach(function(t){var o;o=r[t],t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o})}return e}function d(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e}var f=function(e){var t,r=e.request,o=(e.filter,function(e,t){if(null==e)return{};var r,o,n,i={};if("u">typeof Reflect&&Reflect.ownKeys){for(n=0,r=Reflect.ownKeys(Object(e));n<r.length;n++)o=r[n],!(t.indexOf(o)>=0)&&Object.prototype.propertyIsEnumerable.call(e,o)&&(i[o]=e[o]);return i}if(i=function(e,t){if(null==e)return{};var r,o,n={},i=Object.getOwnPropertyNames(e);for(o=0;o<i.length;o++)r=i[o],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r]);return n}(e,t),Object.getOwnPropertySymbols)for(n=0,r=Object.getOwnPropertySymbols(e);n<r.length;n++)o=r[n],!(t.indexOf(o)>=0)&&Object.prototype.propertyIsEnumerable.call(e,o)&&(i[o]=e[o]);return i}(e,["request","filter"])),n=(0,u.useRecord)(),i=d(m({},o),{request:d(m({},r),{params:d(m({disableDefaultAppends:!0},null==r?void 0:r.params),{filter:d(m({},null==r||null==(t=r.params)?void 0:t.filter),{key:n.key})})})});return c().createElement(u.ResourceActionProvider,i)},y=r(5953),b=r(4442),v=r(6072),g=function(){var e=(0,y.useTranslation)().t,t=(0,u.useRecord)().id,r=(0,u.useActionContext)().setVisible,o=(0,u.useGetAriaLabelOfAction)("Configure").getAriaLabel;return c().createElement(b.Link,{"aria-label":o(),to:(0,v.Yz)(t),onClick:function(){return r(!1)}},e("Configure"))};function x(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,o=Array(t);r<t;r++)o[r]=e[r];return o}function h(e){var t,r,o,n=e.component,a=e.children,l=function(e,t){if(null==e)return{};var r,o,n,i={};if("u">typeof Reflect&&Reflect.ownKeys){for(n=0,r=Reflect.ownKeys(Object(e));n<r.length;n++)o=r[n],!(t.indexOf(o)>=0)&&Object.prototype.propertyIsEnumerable.call(e,o)&&(i[o]=e[o]);return i}if(i=function(e,t){if(null==e)return{};var r,o,n={},i=Object.getOwnPropertyNames(e);for(o=0;o<i.length;o++)r=i[o],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r]);return n}(e,t),Object.getOwnPropertySymbols)for(n=0,r=Object.getOwnPropertySymbols(e);n<r.length;n++)o=r[n],!(t.indexOf(o)>=0)&&Object.prototype.propertyIsEnumerable.call(e,o)&&(i[o]=e[o]);return i}(e,["component","children"]),p=function(e){if(Array.isArray(e))return e}(t=(0,i.useState)(!1))||function(e){var t,r,o=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var n=[],i=!0,c=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(n.push(t.value),2!==n.length);i=!0);}catch(e){c=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(c)throw r}}return n}}(t)||function(e){if(e){if("string"==typeof e)return x(e,2);var t=Object.prototype.toString.call(e).slice(8,-1);if("Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t)return Array.from(t);if("Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return x(e,2)}}(t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),m=p[0],d=p[1],f=(0,s.useFieldSchema)();return c().createElement(u.ActionContextProvider,{value:{visible:m,setVisible:d,fieldSchema:f}},c().createElement(void 0===n?"div":n,(r=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},o=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(o=o.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),o.forEach(function(t){var o;o=r[t],t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o})}return e}({},l),o=o={onClick:function(){d(!0)}},Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(o)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(o)).forEach(function(e){Object.defineProperty(r,e,Object.getOwnPropertyDescriptor(o,e))}),r),a),c().createElement(u.SchemaComponent,{schema:f,onlyRenderProperties:!0}))}var O=r(3872),w=r(6481),C=r(7428),A=r(5827),S=r(2662);function P(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},o=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(o=o.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),o.forEach(function(t){var o;o=r[t],t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o})}return e}var j={title:{"x-component":"CollectionField","x-decorator":"FormItem"},type:{"x-decorator":"FormItem",title:'{{t("Trigger type", { ns: "'.concat(O.CU,'" })}}'),"x-component":"Select","x-component-props":{optionRender:"{{TriggerOptionRender}}",popupMatchSelectWidth:!0,listHeight:300},enum:"{{useTriggersOptions()}}",required:!0},sync:{type:"boolean",title:'{{ t("Execute mode", { ns: "'.concat(O.CU,'" }) }}'),description:'{{ t("Execute workflow asynchronously or synchronously based on trigger type, and could not be changed after created.", { ns: "'.concat(O.CU,'" }) }}'),"x-decorator":"FormItem","x-component":"SyncOptionSelect","x-component-props":{options:[{label:'{{ t("Asynchronously", { ns: "'.concat(O.CU,'" }) }}'),value:!1,tooltip:'{{ t("Will be executed in the background as a queued task.", { ns: "'.concat(O.CU,'" }) }}')},{label:'{{ t("Synchronously", { ns: "'.concat(O.CU,'" }) }}'),value:!0,tooltip:'{{ t("For user actions that require immediate feedback. Can not use asynchronous nodes in such mode, and it is not recommended to perform time-consuming operations under synchronous mode.", { ns: "'.concat(O.CU,'" }) }}')}]}},triggerPreset:{type:"void","x-component":"TriggerPresetFieldset"},enabled:{"x-component":"CollectionField","x-decorator":"FormItem"},description:{"x-component":"CollectionField","x-decorator":"FormItem"},categories:{type:"array",title:'{{ t("Category", { ns: "'.concat(O.CU,'" }) }}'),"x-decorator":"FormItem","x-component":"CollectionField","x-collection-field":"workflows.categories"},options:{type:"object","x-decorator":"FormItem","x-component":"Fieldset",properties:{deleteExecutionOnStatus:{type:"array",title:'{{ t("Auto delete history when execution is on end status", { ns: "'.concat(O.CU,'" }) }}'),"x-decorator":"FormItem","x-component":"Select","x-component-props":{multiple:!0,optionRender:S.Qg,tagRender:S.lP},enum:C.$A.filter(function(e){return!!e.value})},stackLimit:{type:"number",title:'{{ t("Maximum number of cycling triggers", { ns: "'.concat(O.CU,'" }) }}'),description:'{{ t("The triggers of same workflow by some node (create, update and sub-flow etc.) more than this number will be ignored. Large number may cause performance issues. Please use with caution.", { ns: "'.concat(O.CU,'" }) }}'),"x-decorator":"FormItem",default:1,"x-component":"InputNumber","x-component-props":{min:1,precision:0,className:"auto-width"}}}}},E={name:"workflow",type:"void",properties:{provider:{type:"void","x-decorator":"ResourceActionProvider","x-decorator-props":{collection:A.A,resourceName:"workflows",request:{resource:"workflows",action:"list",params:{filter:{current:!0},sort:["-createdAt"],except:["config"]}}},"x-component":"CategoryTabs",properties:{main:{type:"void","x-component":"CardItem",properties:{actions:{type:"void","x-component":"ActionBar","x-component-props":{style:{marginBottom:16}},properties:{filter:{type:"void",title:'{{ t("Filter") }}',default:{$and:[{title:{$includes:""}}]},"x-action":"filter","x-component":"Filter.Action","x-use-component-props":"useResourceFilterActionProps","x-component-props":{icon:"FilterOutlined",nonfilterable:["id","description","categories"]},"x-align":"left"},refresher:{type:"void",title:'{{ t("Refresh") }}',"x-component":"Action","x-use-component-props":"useRefreshActionProps","x-component-props":{icon:"ReloadOutlined"}},sync:{type:"void",title:'{{t("Sync", { ns: "'.concat(O.CU,'" })}}'),"x-decorator":"Tooltip","x-decorator-props":{title:'{{ t("Sync enabled status of all workflows from database", { ns: "'.concat(O.CU,'" }) }}')},"x-component":"Action","x-component-props":{icon:"SyncOutlined",useAction:"{{ useSyncAction }}"},"x-reactions":["{{useWorkflowSyncReaction}}"]},delete:{type:"void",title:'{{t("Delete")}}',"x-component":"Action","x-component-props":{icon:"DeleteOutlined",useAction:"{{ cm.useBulkDestroyAction }}",confirm:{title:"{{t('Delete record')}}",content:"{{t('Are you sure you want to delete it?')}}"}}},create:{type:"void",title:'{{t("Add new")}}',"x-component":"Action","x-component-props":{type:"primary",icon:"PlusOutlined"},properties:{drawer:{type:"void","x-component":"Action.Drawer","x-decorator":"Form","x-decorator-props":{initialValue:{current:!0}},title:'{{t("Add new")}}',properties:{title:j.title,type:j.type,triggerPreset:j.triggerPreset,sync:j.sync,categories:j.categories,description:j.description,options:j.options,footer:{type:"void","x-component":"Action.Drawer.Footer",properties:{cancel:{title:'{{ t("Cancel") }}',"x-component":"Action","x-component-props":{useAction:"{{ cm.useCancelAction }}"}},submit:{title:'{{ t("Submit") }}',"x-component":"Action","x-component-props":{type:"primary",useAction:"{{ cm.useCreateAction }}"}}}}}}}}}},table:{type:"array","x-component":"Table.Void","x-component-props":{rowKey:"id",rowSelection:{type:"checkbox"},useDataSource:"{{cm.useDataSourceFromRAC }}"},properties:{title:{type:"void","x-decorator":"Table.Column.Decorator","x-component":"Table.Column",title:'{{ t("Title") }}',properties:{title:{type:"string","x-component":"CollectionField","x-read-pretty":!0}}},categories:{type:"void","x-decorator":"Table.Column.Decorator","x-component":"Table.Column",title:'{{ t("Category", { ns: "'.concat(O.CU,'" }) }}'),properties:{categories:{type:"array","x-component":"EnumerationField","x-component-props":{multiple:!0,fieldNames:{label:"title",value:"id",color:"color"}}}}},type:{type:"void","x-decorator":"Table.Column.Decorator","x-component":"Table.Column",title:'{{ t("Trigger type", { ns: "'.concat(O.CU,'" }) }}'),properties:{type:{type:"string","x-component":"CollectionField","x-read-pretty":!0}}},sync:{type:"void","x-decorator":"Table.Column.Decorator","x-component":"Table.Column",title:'{{ t("Execute mode", { ns: "'.concat(O.CU,'" }) }}'),properties:{sync:{type:"boolean","x-component":"CollectionField","x-read-pretty":!0}}},enabled:{type:"void","x-decorator":"Table.Column.Decorator","x-component":"Table.Column",title:'{{ t("Enabled", { ns: "'.concat(O.CU,'" }) }}'),properties:{enabled:{type:"boolean","x-component":"WorkflowEnabledSwitch",default:!1}}},"stats.executed":{type:"void","x-decorator":"Table.Column.Decorator","x-component":"Table.Column",title:'{{ t("Executed", { ns: "'.concat(O.CU,'" }) }}'),properties:{"stats.executed":{type:"number","x-decorator":"OpenDrawer","x-decorator-props":{component:function(e){var t=(0,u.useCollectionRecordData)();return c().createElement("a",P({"aria-label":"executed-".concat(t.title)},e))}},"x-component":"InputNumber","x-read-pretty":!0,properties:{drawer:w.M}}}},actions:{type:"void",title:'{{ t("Actions") }}',"x-decorator":"Table.Column.Decorator","x-component":"Table.Column",properties:{actions:{type:"void","x-component":"Space","x-component-props":{split:"|"},properties:{configure:{type:"void","x-component":"WorkflowLink"},update:{type:"void",title:'{{ t("Edit") }}',"x-component":"Action.Link","x-component-props":{type:"primary"},properties:{drawer:{type:"void","x-component":"Action.Drawer","x-decorator":"Form","x-decorator-props":{useValues:"{{ cm.useValuesFromRecord }}"},title:'{{ t("Edit") }}',properties:{title:j.title,type:(o=P({},j.type),n=n={"x-disabled":!0},Object.getOwnPropertyDescriptors?Object.defineProperties(o,Object.getOwnPropertyDescriptors(n)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(e){Object.defineProperty(o,e,Object.getOwnPropertyDescriptor(n,e))}),o),sync:j.sync,categories:j.categories,description:j.description,options:j.options,footer:{type:"void","x-component":"Action.Drawer.Footer",properties:{cancel:{title:'{{ t("Cancel") }}',"x-component":"Action","x-component-props":{useAction:"{{ cm.useCancelAction }}"}},submit:{title:'{{ t("Submit") }}',"x-component":"Action","x-component-props":{type:"primary",useAction:"{{ cm.useUpdateAction }}"}}}}}}}},revision:{type:"void",title:'{{t("Duplicate", { ns: "'.concat(O.CU,'" })}}'),"x-component":"Action.Link","x-component-props":{openSize:"small"},properties:{modal:{type:"void",title:'{{t("Duplicate to new workflow", { ns: "'.concat(O.CU,'" })}}'),"x-decorator":"FormV2","x-component":"Action.Modal",properties:{title:{type:"string",title:'{{t("Title")}}',"x-decorator":"FormItem","x-component":"Input"},footer:{type:"void","x-component":"Action.Modal.Footer",properties:{submit:{type:"void",title:'{{t("Submit")}}',"x-component":"Action","x-component-props":{type:"primary",useAction:"{{ useRevisionAction }}"}},cancel:{type:"void",title:'{{t("Cancel")}}',"x-component":"Action","x-component-props":{useAction:"{{ cm.useCancelAction }}"}}}}}}}},delete:{type:"void",title:'{{ t("Delete") }}',"x-component":"Action.Link","x-component-props":{confirm:{title:"{{t('Delete record')}}",content:"{{t('Are you sure you want to delete it?')}}"},useAction:"{{ cm.useDestroyActionAndRefreshCM }}"}}}}}}}}}}}}}},k=r(5324),F=r(9603),T=r(512);function D(e){var t=e.data,r=t.label,o=t.color,n=t.options,i=(0,u.useCompile)();return c().createElement(a.Space,{direction:"vertical"},c().createElement(a.Tag,{color:o},i(r)),c().createElement(a.Typography.Text,{type:"secondary",style:{whiteSpace:"normal"}},i(n.description)))}var I=r(7375),R=r(6799),U=r(166),V=r(6773);function M(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,o=Array(t);r<t;r++)o[r]=e[r];return o}function N(e,t,r,o,n,i,c){try{var a=e[i](c),l=a.value}catch(e){r(e);return}a.done?t(l):Promise.resolve(l).then(o,n)}function q(e){return function(){var t=this,r=arguments;return new Promise(function(o,n){var i=e.apply(t,r);function c(e){N(i,o,n,c,a,"next",e)}function a(e){N(i,o,n,c,a,"throw",e)}c(void 0)})}}function L(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},o=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(o=o.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),o.forEach(function(t){var o;o=r[t],t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o})}return e}function B(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e}function W(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,o,n=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var i=[],c=!0,a=!1;try{for(n=n.call(e);!(c=(r=n.next()).done)&&(i.push(r.value),!t||i.length!==t);c=!0);}catch(e){a=!0,o=e}finally{try{c||null==n.return||n.return()}finally{if(a)throw o}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return M(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return M(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function $(e,t){var r,o,n,i={label:0,sent:function(){if(1&n[0])throw n[1];return n[1]},trys:[],ops:[]},c=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),a=Object.defineProperty;return a(c,"next",{value:l(0)}),a(c,"throw",{value:l(1)}),a(c,"return",{value:l(2)}),"function"==typeof Symbol&&a(c,Symbol.iterator,{value:function(){return this}}),c;function l(a){return function(l){var s=[a,l];if(r)throw TypeError("Generator is already executing.");for(;c&&(c=0,s[0]&&(i=0)),i;)try{if(r=1,o&&(n=2&s[0]?o.return:s[0]?o.throw||((n=o.return)&&n.call(o),0):o.next)&&!(n=n.call(o,s[1])).done)return n;switch(o=0,n&&(s=[2&s[0],n.value]),s[0]){case 0:case 1:n=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,o=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(n=(n=i.trys).length>0&&n[n.length-1])&&(6===s[0]||2===s[0])){i=0;continue}if(3===s[0]&&(!n||s[1]>n[0]&&s[1]<n[3])){i.label=s[1];break}if(6===s[0]&&i.label<n[1]){i.label=n[1],n=s;break}if(n&&i.label<n[2]){i.label=n[2],i.ops.push(s);break}n[2]&&i.ops.pop(),i.trys.pop();continue}s=t.call(e,i)}catch(e){s=[6,e],o=0}finally{r=n=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}}}function z(){var e,t,r=(e=["\n .ant-tabs-nav-list > :first-child {\n border: none;\n }\n "],t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}})));return z=function(){return r},r}function K(e){var t=(0,R.useDraggable)({id:e.id,data:e.data}),r=t.attributes,o=t.listeners,n=t.setNodeRef;return c().createElement("div",L({ref:n},o,r),c().createElement("div",null,e.children))}function _(e){var t=(0,R.useDroppable)({id:e.id,data:e.data}),r=t.isOver,o=t.setNodeRef;return c().createElement("div",{ref:o,style:r?{color:"green"}:void 0},e.children)}var G=(0,s.observer)(function(e){var t=e.item;return c().createElement(_,{id:t.id.toString(),data:t},c().createElement("div",null,c().createElement(K,{id:t.id.toString(),data:t},c().createElement(H,{item:t}))))},{displayName:"TabTitle"}),H=function(e){var t=e.item,r=(0,y.useTranslation)().t,o=(0,u.useCompile)();return c().createElement(a.Space,null,c().createElement(a.Badge,{color:t.color}),r(o(t.title)))},Q=(0,s.observer)(function(e){var t=W((0,i.useState)(null),2),r=t[0],o=t[1],n=(0,i.useContext)(Y).refresh,a=(0,u.useAPIClient)(),l=(0,R.useSensor)(R.MouseSensor,{activationConstraint:{distance:10}}),s=(0,R.useSensors)(l);return c().createElement(R.DndContext,{sensors:s,onDragEnd:function(e){return q(function(){var t,r;return $(this,function(i){switch(i.label){case 0:if(t=e.active,r=e.over,setTimeout(function(){o(null)}),!(r&&r.id!==t.id))return[3,2];return[4,a.resource("workflowCategories").move({sourceId:t.id,targetId:r.id})];case 1:i.sent(),n(),i.label=2;case 2:return[2]}})})()},onDragStart:function(e){var t;o(null==(t=e.active)?void 0:t.data.current)}},e.children,c().createElement(R.DragOverlay,null,r?c().createElement("span",{style:{whiteSpace:"nowrap"}},c().createElement(H,{item:r})):null))},{displayName:"DndProvider"}),Y=(0,i.createContext)({});function J(e){var t=e.values,r=e.onEdit,o=e.onRemove,n=(0,u.useCompile)(),l=(0,i.useCallback)(function(e){switch(e.key){case"edit":r(t);break;case"delete":o(t.id)}},[r,o,t]);return c().createElement(a.Dropdown,{menu:{items:[{key:"edit",label:(0,O.vV)("Edit category")},{key:"delete",label:(0,O.vV)("Delete category")}],onClick:l}},c().createElement(I.MenuOutlined,{role:"button","aria-label":n(t.title),style:{padding:8,margin:"-8px"}}))}function X(){var e,t=(0,u.useResourceActionContext)(),r=t.run,o=t.setState,n=t.defaultRequest,p=W((0,i.useState)({tab:"all"}),2),m=p[0],d=p[1],f=W((0,i.useState)(m.tab),2),y=f[0],b=f[1],v=(0,u.useCompile)(),g=(0,u.useAPIClient)(),x=(0,s.useFieldSchema)(),h=a.App.useApp().modal,w=(0,u.useRequest)({resource:"workflowCategories",action:"list",params:{paginate:!1,sort:["sort"]}}),C=w.data,A=w.refresh,S=W((0,i.useState)(!1),2),P=S[0],j=S[1],E=(0,i.useMemo)(function(){return(0,l.createForm)()},[]),k=(0,i.useCallback)(function(e){j(!0);var t=(0,V.cloneDeep)(e);E.setValues(t)},[E]),F=(0,i.useCallback)(function(){j(!1),E.reset()},[E]),T=(0,i.useCallback)(function(e){h.confirm({title:v("{{t('Delete category')}}"),content:v("{{t('Are you sure you want to delete it?')}}"),onOk:function(){return q(function(){return $(this,function(t){switch(t.label){case 0:return[4,g.resource("workflowCategories").destroy({filter:{id:e}})];case 1:return t.sent(),e===+m.tab&&d({tab:"all"}),A(),r(),[2]}})})()}})},[m.tab]),D=(0,i.useMemo)(function(){if(!(null==C?void 0:C.data))return[];var e=C.data.sort(function(e,t){return e.sort-t.sort}).concat().map(function(e){return B(L({},e),{schema:x.properties.main})});return e.find(function(e){return"all"===e.id})||e.unshift({title:'{{t("All", { ns: "'.concat(O.CU,'" })}}'),id:"all",sort:0,closable:!1,schema:x.properties.main}),e.map(function(e){return{label:"all"!==e.id?c().createElement("div",{"data-no-dnd":"true"},c().createElement(G,{item:e})):v(e.title),key:String(e.id),closable:e.closable,closeIcon:c().createElement(J,{values:e,onEdit:k,onRemove:T}),children:c().createElement(a.Card,{variant:"borderless",style:{borderRadius:"0 0.5em 0.5em 0.5em"}},c().createElement(s.RecursionField,{name:y,schema:e.schema,onlyRenderProperties:!0}))}})},[v,null==C?void 0:C.data,y,k,T,x.properties.main]),I=(0,i.useCallback)(function(e){if(d({tab:e}),b((0,U.uid)()),"all"!==e){var t,i={$and:[null==n||null==(t=n.params)?void 0:t.filter,{"categories.id":e}]};r({filter:i}),null==o||o({categories:[+e],params:[{filter:i}]})}else r(),null==o||o({categories:[],params:[]})},[null==n||null==(e=n.params)?void 0:e.filter,r,o]);return((0,i.useEffect)(function(){"all"!==m.tab&&I(m.tab)},[m.tab,I]),C)?c().createElement(Y.Provider,{value:{refresh:A}},c().createElement(Q,null,c().createElement(a.Tabs,{addIcon:c().createElement(u.SchemaComponent,{components:{AddCategory:er},schema:{type:"void",properties:{addCategories:{type:"void",title:'{{ t("Add category", { ns: "'.concat(O.CU,'" }) }}'),"x-component":"AddCategory","x-component-props":{type:"primary"}}}}}),onChange:I,defaultActiveKey:m.tab||"all",type:"editable-card",destroyInactiveTabPane:!0,tabBarStyle:{marginBottom:"0px"},className:(0,u.css)(z()),items:D})),c().createElement(u.ActionContextProvider,{value:{visible:P,setVisible:F,openSize:"small"}},c().createElement(u.SchemaComponent,{scope:{useFormProviderProps:ee,useCancelAction:u.useCancelAction,useEditSubmit:Z},schema:{name:(0,U.uid)(),type:"void","x-decorator":"FormV2","x-decorator-props":{form:E},title:'{{ t("Edit category", { ns: "'.concat(O.CU,'" }) }}'),"x-component":"Action.Modal","x-component-props":{delay:0},properties:{title:{type:"string",title:'{{t("Title")}}',required:!0,"x-decorator":"FormItem","x-component":"Input"},color:{type:"string",title:'{{t("Color")}}',required:!1,"x-decorator":"FormItem","x-component":"ColorSelect"},footer:{type:"void","x-component":"Action.Modal.Footer",properties:{cancel:{title:'{{ t("Cancel") }}',"x-component":"Action","x-component-props":{useAction:"{{ useCancelAction }}"}},submit:{title:'{{ t("Submit") }}',"x-component":"Action","x-component-props":{type:"primary",useAction:"{{ useEditSubmit }}",style:{marginLeft:"8px"}}}}}}}}))):null}function Z(){var e=(0,s.useForm)(),t=(0,u.useActionContext)(),r=(0,u.useResourceActionContext)(),o=(0,i.useContext)(Y).refresh,n=(0,u.useAPIClient)();return{run:function(){return q(function(){var i;return $(this,function(c){switch(c.label){case 0:return[4,e.submit()];case 1:return c.sent(),[4,n.resource("workflowCategories").update({filterByTk:null==(i=e.values)?void 0:i.id,values:e.values})];case 2:return c.sent(),t.setVisible(!1),[4,e.reset()];case 3:return c.sent(),null==o||o(),null==r||r.refresh(),[2]}})})()}}}function ee(){return{form:(0,s.useForm)()}}function et(){var e=(0,s.useForm)(),t=(0,u.useActionContext)().setVisible,r=(0,i.useContext)(Y).refresh,o=(0,u.useAPIClient)();return{run:function(){return q(function(){var n;return $(this,function(i){switch(i.label){case 0:return[4,e.submit()];case 1:return i.sent(),n=(0,V.cloneDeep)(e.values),[4,o.resource("workflowCategories").create({values:n})];case 2:return i.sent(),t(!1),e.reset(),r(),[2]}})})()}}}function er(e){var t=W((0,i.useState)(!1),2),r=t[0],o=t[1],n=(0,y.useTranslation)().t,a=(0,i.useMemo)(function(){return(0,l.createForm)()},[]);return c().createElement(u.ActionContextProvider,{value:{visible:r,setVisible:o,openSize:"small"}},c().createElement("div",{onClick:function(){return o(!0)},title:n("Add category")},c().createElement(I.PlusOutlined,null)),c().createElement(u.SchemaComponent,{schema:{name:"modal",type:"void","x-decorator":"FormV2","x-decorator-props":{form:a},title:'{{ t("Add category") }}',"x-component":"Action.Modal","x-component-props":B(L({},e),{delay:0}),properties:{title:{type:"string",title:'{{t("Title")}}',required:!0,"x-decorator":"FormItem","x-component":"Input"},color:{type:"string",title:'{{t("Color")}}',required:!1,"x-decorator":"FormItem","x-component":"ColorSelect"},footer:{type:"void","x-component":"Action.Modal.Footer",properties:{cancel:{title:'{{ t("Cancel") }}',"x-component":"Action","x-component-props":{useAction:"{{ useCancelAction }}"}},submit:{title:'{{ t("Submit") }}',"x-component":"Action","x-component-props":{type:"primary",useAction:"{{ useCreateSubmit }}",style:{marginLeft:"8px"}}}}}}},scope:{useCancelAction:u.useCancelAction,useCreateSubmit:et}}))}function eo(e){var t=e.value,r=e.multiple,o=e.fieldNames,n=void 0===o?u.defaultFieldNames:o,i=(0,u.useCompile)();return(r?null!=t?t:[]:t?[t]:[]).map(function(e){return c().createElement(a.Tag,{key:e[n.value],color:e[n.color]},i(e[n.label]))})}var en=r(2815);function ei(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,o=Array(t);r<t;r++)o[r]=e[r];return o}function ec(e,t,r,o,n,i,c){try{var a=e[i](c),l=a.value}catch(e){r(e);return}a.done?t(l):Promise.resolve(l).then(o,n)}function ea(e){return function(){var t=this,r=arguments;return new Promise(function(o,n){var i=e.apply(t,r);function c(e){ec(i,o,n,c,a,"next",e)}function a(e){ec(i,o,n,c,a,"throw",e)}c(void 0)})}}function el(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,o,n=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var i=[],c=!0,a=!1;try{for(n=n.call(e);!(c=(r=n.next()).done)&&(i.push(r.value),!t||i.length!==t);c=!0);}catch(e){a=!0,o=e}finally{try{c||null==n.return||n.return()}finally{if(a)throw o}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return ei(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return ei(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 es(e,t){var r,o,n,i={label:0,sent:function(){if(1&n[0])throw n[1];return n[1]},trys:[],ops:[]},c=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),a=Object.defineProperty;return a(c,"next",{value:l(0)}),a(c,"throw",{value:l(1)}),a(c,"return",{value:l(2)}),"function"==typeof Symbol&&a(c,Symbol.iterator,{value:function(){return this}}),c;function l(a){return function(l){var s=[a,l];if(r)throw TypeError("Generator is already executing.");for(;c&&(c=0,s[0]&&(i=0)),i;)try{if(r=1,o&&(n=2&s[0]?o.return:s[0]?o.throw||((n=o.return)&&n.call(o),0):o.next)&&!(n=n.call(o,s[1])).done)return n;switch(o=0,n&&(s=[2&s[0],n.value]),s[0]){case 0:case 1:n=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,o=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(n=(n=i.trys).length>0&&n[n.length-1])&&(6===s[0]||2===s[0])){i=0;continue}if(3===s[0]&&(!n||s[1]>n[0]&&s[1]<n[3])){i.label=s[1];break}if(6===s[0]&&i.label<n[1]){i.label=n[1],n=s;break}if(n&&i.label<n[2]){i.label=n[2],i.ops.push(s);break}n[2]&&i.ops.pop(),i.trys.pop();continue}s=t.call(e,i)}catch(e){s=[6,e],o=0}finally{r=n=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}}}function eu(e){var t=(0,s.useField)(),r=(0,u.useRecord)(),o=(0,u.usePlugin)(k.default);return(0,s.useFormEffects)(function(e){(0,l.onFieldChange)("type",function(e){var n=r.id||!e.value;if(e.value){var i=o.triggers.get(e.value);null!=i.sync?(n=!0,t.setValue(i.sync)):t.setInitialValue(!1)}t.setPattern(n?"disabled":"editable")})}),(0,i.useEffect)(function(){if(r.id){t.setPattern("disabled");var n,i=o.triggers.get(r.type);null!=i.sync?t.setValue(i.sync):t.setInitialValue(null!=(n=e.value)&&n)}},[r.id,t,o.triggers,r.type,e.value]),c().createElement(F.$i,e)}function ep(e){var t=(0,u.useApp)();e.visible=!!((0,u.usePlugin)("multi-app-share-collection")||"main"!==t.name)}function em(){var e=a.App.useApp().message,t=(0,y.useTranslation)().t,r=(0,u.useResourceContext)().resource;return{run:function(){return ea(function(){return es(this,function(o){switch(o.label){case 0:return[4,r.sync()];case 1:return o.sent(),e.success(t("Operation succeeded")),[2]}})})()}}}function ed(){var e=a.App.useApp().message,t=(0,y.useTranslation)().t,r=(0,u.useResourceActionContext)().refresh,o=(0,u.useResourceContext)(),n=o.resource,i=o.targetKey,c=(0,u.useActionContext)().setVisible,l=(0,u.useRecord)()[i],p=(0,s.useForm)(),m=(0,s.useField)();return{run:function(){return ea(function(){return es(this,function(o){switch(o.label){case 0:return o.trys.push([0,3,4,5]),[4,p.submit()];case 1:return o.sent(),m.data=m.data||{},m.data.loading=!0,[4,n.revision({filterByTk:l,values:p.values})];case 2:return o.sent(),e.success(t("Operation succeeded")),r(),c(!1),[3,5];case 3:return console.error(o.sent()),[3,5];case 4:return m.data&&(m.data.loading=!1),[7];case 5:return[2]}})})()}}}function ef(){var e=(0,u.usePlugin)(k.default),t=el((0,i.useState)(null),2),r=t[0],o=t[1],n=(0,s.useForm)();(0,s.useFormEffects)(function(){(0,l.onFieldValueChange)("type",function(e){var t;o(null!=(t=e.value)?t:null),n.clearFormGraph("config.*")})});var a=r?e.triggers.get(r):null;return(null==a?void 0:a.presetFieldset)?c().createElement(u.SchemaComponent,{key:r,components:a.components,scope:a.scope,schema:{type:"void",properties:{config:{type:"object","x-decorator":"FormItem",title:'{{t("Trigger configuration", { ns: "'.concat(O.CU,'" })}}'),"x-component":"Fieldset",properties:a.presetFieldset}}}}):null}function ey(){var e=a.App.useApp().message,t=(0,y.useTranslation)().t,r=(0,u.useRecord)(),o=(0,u.useResourceContext)().resource,n=(0,u.useResourceActionContext)().refresh,l=el((0,i.useState)(!1),2),s=l[0],p=l[1],m=(0,i.useCallback)(function(i){return ea(function(){return es(this,function(c){switch(c.label){case 0:if(!(null==r?void 0:r.id))return[2];p(!0),c.label=1;case 1:return c.trys.push([1,3,4,5]),[4,o.update({filterByTk:r.id,values:{enabled:i}})];case 2:return c.sent(),setTimeout(function(){return null==n?void 0:n()},0),[3,5];case 3:return console.error(c.sent()),e.error(t("Operation failed")),[3,5];case 4:return p(!1),[7];case 5:return[2]}})})()},[e,r,n,o,t]);return c().createElement(a.Switch,{checked:!!(null==r?void 0:r.enabled),size:"small",disabled:s||!(null==r?void 0:r.id),loading:s,onClick:function(e,t){var r;return null==t||null==(r=t.stopPropagation)?void 0:r.call(t)},onChange:m})}function eb(){var e,t,r=(0,i.useContext)(u.SchemaComponentContext),o=(0,u.usePlugin)(k.default).useTriggersOptions;return c().createElement(u.SchemaComponentContext.Provider,{value:(e=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},o=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(o=o.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),o.forEach(function(t){var o;o=r[t],t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o})}return e}({},r),t=t={designable:!1},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e)},c().createElement(u.SchemaComponent,{schema:E,components:{CollectionProvider:u.CollectionProvider,WorkflowLink:g,ExecutionResourceProvider:f,ExecutionLink:p.d,OpenDrawer:h,SyncOptionSelect:eu,ExecutionStatusColumn:S.t_,Tooltip:a.Tooltip,CategoryTabs:X,EnumerationField:eo,WorkflowEnabledSwitch:ey,TriggerPresetFieldset:ef},scope:{useTriggersOptions:o,useWorkflowSyncReaction:ep,useSyncAction:em,useResourceFilterActionProps:en.A,useRefreshActionProps:T.t,useRevisionAction:ed,TriggerOptionRender:D,ExecutionStatusOptions:C.$A}}))}}}]);
|