@acorex-platform/module-task-management-client 0.0.56 → 0.0.58
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/fesm2022/{acorex-platform-module-task-management-client-acorex-platform-module-task-management-client-DcrxLUEb.mjs → acorex-platform-module-task-management-client-acorex-platform-module-task-management-client-5zHpZCXa.mjs} +33 -16
- package/fesm2022/acorex-platform-module-task-management-client-acorex-platform-module-task-management-client-5zHpZCXa.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-task-management-client-contracts.mjs +2 -0
- package/fesm2022/acorex-platform-module-task-management-client-contracts.mjs.map +1 -1
- package/fesm2022/{acorex-platform-module-task-management-client-list-task-board-assignees.query-B4AWJplx.mjs → acorex-platform-module-task-management-client-list-task-board-assignees.query-m6EMYMGX.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-task-management-client-list-task-board-assignees.query-B4AWJplx.mjs.map → acorex-platform-module-task-management-client-list-task-board-assignees.query-m6EMYMGX.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-task-management-client-list-task-types.query-BHKIiUSV.mjs → acorex-platform-module-task-management-client-list-task-types.query-aSPzB4oy.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-task-management-client-list-task-types.query-BHKIiUSV.mjs.map → acorex-platform-module-task-management-client-list-task-types.query-aSPzB4oy.mjs.map} +1 -1
- package/fesm2022/acorex-platform-module-task-management-client-start-task-flow.command-CR1JXr5r.mjs +114 -0
- package/fesm2022/acorex-platform-module-task-management-client-start-task-flow.command-CR1JXr5r.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-task-management-client-task-board.page-Cl249xyY.mjs → acorex-platform-module-task-management-client-task-board.page-1Qq2hK0A.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-task-management-client-task-board.page-Cl249xyY.mjs.map → acorex-platform-module-task-management-client-task-board.page-1Qq2hK0A.mjs.map} +1 -1
- package/fesm2022/acorex-platform-module-task-management-client.mjs +1 -1
- package/i18n/en-AU/task-management.json +14 -0
- package/i18n/en-US/task-management.json +14 -0
- package/i18n/fa-IR/task-management.json +14 -0
- package/package.json +3 -3
- package/types/acorex-platform-module-task-management-client-contracts.d.ts +2 -0
- package/fesm2022/acorex-platform-module-task-management-client-acorex-platform-module-task-management-client-DcrxLUEb.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-task-management-client-start-task-flow.command-XleVbaRI.mjs +0 -130
- package/fesm2022/acorex-platform-module-task-management-client-start-task-flow.command-XleVbaRI.mjs.map +0 -1
package/fesm2022/acorex-platform-module-task-management-client-start-task-flow.command-XleVbaRI.mjs
DELETED
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
import { AXToastService } from '@acorex/components/toast';
|
|
2
|
-
import { AXTranslationService } from '@acorex/core/translation';
|
|
3
|
-
import { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';
|
|
4
|
-
import { AXPWorkflowManager } from '@acorex-platform/framework-client/workflow';
|
|
5
|
-
import { defaultTo, get, merge, isEmpty } from 'lodash';
|
|
6
|
-
import * as i0 from '@angular/core';
|
|
7
|
-
import { inject, Injectable } from '@angular/core';
|
|
8
|
-
import { AXPTaskManagementCommandKeys, RootConfig } from '@acorex-platform/module-task-management-client/contracts';
|
|
9
|
-
|
|
10
|
-
const I18N = '@task-management:tasks.commands.start-flow';
|
|
11
|
-
//#endregion
|
|
12
|
-
/**
|
|
13
|
-
* Starts a workflow for a {@link TaskManagement.Task} when the task type defines {@link workflowConfig}.
|
|
14
|
-
*/
|
|
15
|
-
class StartTaskFlowCommand {
|
|
16
|
-
constructor() {
|
|
17
|
-
//#region ---- Services & Dependencies ----
|
|
18
|
-
this.toastService = inject(AXToastService);
|
|
19
|
-
this.entityService = inject(AXPEntityService);
|
|
20
|
-
this.workflowManager = inject(AXPWorkflowManager);
|
|
21
|
-
this.translationService = inject(AXTranslationService);
|
|
22
|
-
}
|
|
23
|
-
//#endregion
|
|
24
|
-
//#region ---- Command Implementation ----
|
|
25
|
-
async execute(input) {
|
|
26
|
-
const options = (input?.options ?? input);
|
|
27
|
-
const flowInput = defaultTo(options?.input, {});
|
|
28
|
-
const workflowId = (options?.workflowId ?? input?.workflowId)?.trim();
|
|
29
|
-
const taskTypeId = flowInput?.taskTypeId?.trim();
|
|
30
|
-
const subjectRef = flowInput?.subjectRef ?? input?.subjectRef;
|
|
31
|
-
const projectTypeId = flowInput?.projectTypeId?.trim() ?? input?.projectTypeId?.trim();
|
|
32
|
-
if (!workflowId || !taskTypeId || !subjectRef?.id || !subjectRef?.type) {
|
|
33
|
-
return {
|
|
34
|
-
success: false,
|
|
35
|
-
message: { text: await this.translationService.translateAsync(`${I18N}.errors.missing-input`) },
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
try {
|
|
39
|
-
const taskType = await this.loadTaskType(taskTypeId);
|
|
40
|
-
if (!taskType) {
|
|
41
|
-
return {
|
|
42
|
-
success: false,
|
|
43
|
-
message: { text: await this.translationService.translateAsync(`${I18N}.errors.task-type-not-found`) },
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
if (projectTypeId) {
|
|
47
|
-
const allowed = await this.isTaskTypeAllowedForProjectType(projectTypeId, taskTypeId);
|
|
48
|
-
if (!allowed) {
|
|
49
|
-
return {
|
|
50
|
-
success: false,
|
|
51
|
-
message: {
|
|
52
|
-
text: await this.translationService.translateAsync(`${I18N}.errors.task-type-not-allowed`),
|
|
53
|
-
},
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
const defaultInput = defaultTo(get(taskType, 'workflowConfig.defaultInput'), {});
|
|
58
|
-
const startResult = await this.workflowManager.start(workflowId, merge(defaultInput, {
|
|
59
|
-
taskTypeId,
|
|
60
|
-
taskTypeTitle: flowInput.taskTypeTitle ?? taskType.title,
|
|
61
|
-
subjectRef,
|
|
62
|
-
...(projectTypeId ? { projectTypeId } : {}),
|
|
63
|
-
refId: subjectRef.id,
|
|
64
|
-
refType: subjectRef.type,
|
|
65
|
-
correlationId: this.buildCorrelationId(subjectRef.id, taskTypeId, workflowId),
|
|
66
|
-
}, flowInput));
|
|
67
|
-
if (!startResult.success) {
|
|
68
|
-
const unknownError = await this.translationService.translateAsync(`${I18N}.errors.unknown`);
|
|
69
|
-
this.toastService.show({
|
|
70
|
-
color: 'danger',
|
|
71
|
-
title: await this.translationService.translateAsync(`${I18N}.errors.execution-failed-title`),
|
|
72
|
-
content: startResult.error ?? unknownError,
|
|
73
|
-
closeButton: true,
|
|
74
|
-
timeOut: 5000,
|
|
75
|
-
});
|
|
76
|
-
return { success: false, message: { text: startResult.error ?? unknownError } };
|
|
77
|
-
}
|
|
78
|
-
return { success: true, kind: 'object', data: undefined };
|
|
79
|
-
}
|
|
80
|
-
catch (error) {
|
|
81
|
-
const unknownError = await this.translationService.translateAsync(`${I18N}.errors.unknown`);
|
|
82
|
-
const message = error instanceof Error ? error.message : unknownError;
|
|
83
|
-
console.error('[StartTaskFlowCommand]', error);
|
|
84
|
-
this.toastService.show({
|
|
85
|
-
color: 'danger',
|
|
86
|
-
title: await this.translationService.translateAsync(`${I18N}.errors.execution-error-title`),
|
|
87
|
-
content: message,
|
|
88
|
-
closeButton: true,
|
|
89
|
-
timeOut: 5000,
|
|
90
|
-
});
|
|
91
|
-
return { success: false, message: { text: message } };
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
//#endregion
|
|
95
|
-
//#region ---- Helpers ----
|
|
96
|
-
async loadTaskType(taskTypeId) {
|
|
97
|
-
const row = await this.entityService
|
|
98
|
-
.withEntity(RootConfig.module.name, RootConfig.entities.taskType.name)
|
|
99
|
-
.data()
|
|
100
|
-
.byKey(taskTypeId);
|
|
101
|
-
return (row ?? null);
|
|
102
|
-
}
|
|
103
|
-
async isTaskTypeAllowedForProjectType(projectTypeId, taskTypeId) {
|
|
104
|
-
const projectType = (await this.entityService
|
|
105
|
-
.withEntity('ProjectManagement', 'ProjectType')
|
|
106
|
-
.data()
|
|
107
|
-
.byKey(projectTypeId));
|
|
108
|
-
if (!projectType) {
|
|
109
|
-
return false;
|
|
110
|
-
}
|
|
111
|
-
const allowedIds = (projectType.allowedTaskTypesList ?? projectType.allowedTaskTypes)?.map((row) => row.id).filter(Boolean) ?? [];
|
|
112
|
-
if (!isEmpty(allowedIds)) {
|
|
113
|
-
return allowedIds.includes(taskTypeId);
|
|
114
|
-
}
|
|
115
|
-
return defaultTo(projectType.allowedTaskTypeIds, []).includes(taskTypeId);
|
|
116
|
-
}
|
|
117
|
-
buildCorrelationId(subjectId, taskTypeId, workflowId) {
|
|
118
|
-
return `${subjectId}:${taskTypeId}:${workflowId}`;
|
|
119
|
-
}
|
|
120
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: StartTaskFlowCommand, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
121
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: StartTaskFlowCommand, providedIn: 'root' }); }
|
|
122
|
-
}
|
|
123
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: StartTaskFlowCommand, decorators: [{
|
|
124
|
-
type: Injectable,
|
|
125
|
-
args: [{ providedIn: 'root' }]
|
|
126
|
-
}] });
|
|
127
|
-
const START_TASK_FLOW_COMMAND_KEY = AXPTaskManagementCommandKeys.Task.StartFlow;
|
|
128
|
-
|
|
129
|
-
export { START_TASK_FLOW_COMMAND_KEY, StartTaskFlowCommand };
|
|
130
|
-
//# sourceMappingURL=acorex-platform-module-task-management-client-start-task-flow.command-XleVbaRI.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-module-task-management-client-start-task-flow.command-XleVbaRI.mjs","sources":["../../../../libs/modules/task-management/client/src/lib/features/task/commands/start-task-flow.command.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { type AXPEntityReference, AXPRuntimeCommandResult } from '@acorex-platform/framework-shared/core';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\n\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\n\nimport { AXPWorkflowManager } from '@acorex-platform/framework-client/workflow';\nimport { defaultTo, get, isEmpty, merge } from 'lodash';\nimport { inject, Injectable } from '@angular/core';\nimport { AXPTaskManagementCommandKeys } from '@acorex-platform/module-task-management-client/contracts';\nimport { RootConfig } from '@acorex-platform/module-task-management-client/contracts';\nimport type { AXMTaskManagementTaskTypeEntityModel } from '@acorex-platform/module-task-management-client/contracts';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface StartTaskFlowInput {\n workflowId?: string;\n taskTypeId?: string;\n subjectRef?: AXPEntityReference;\n projectTypeId?: string;\n input?: Record<string, unknown>;\n options?: StartTaskFlowOptions;\n}\n\nexport interface StartTaskFlowOptions {\n workflowId: string;\n input: {\n taskTypeId: string;\n subjectRef: AXPEntityReference;\n projectTypeId?: string;\n taskTypeTitle?: string;\n } & Record<string, unknown>;\n}\n\nconst I18N = '@task-management:tasks.commands.start-flow';\n\n//#endregion\n\n/**\n * Starts a workflow for a {@link TaskManagement.Task} when the task type defines {@link workflowConfig}.\n */\n@Injectable({ providedIn: 'root' })\nexport class StartTaskFlowCommand implements AXPCommand<StartTaskFlowInput, void> {\n //#region ---- Services & Dependencies ----\n\n private readonly toastService = inject(AXToastService);\n private readonly entityService = inject(AXPEntityService);\n private readonly workflowManager = inject(AXPWorkflowManager);\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Command Implementation ----\n\n async execute(input: StartTaskFlowInput): AXPCommandExecuteResultPromise<void> {\n const options = (input?.options ?? input) as StartTaskFlowOptions;\n const flowInput = defaultTo(options?.input, {} as StartTaskFlowOptions['input']);\n const workflowId = (options?.workflowId ?? input?.workflowId)?.trim();\n const taskTypeId = flowInput?.taskTypeId?.trim();\n const subjectRef = flowInput?.subjectRef ?? input?.subjectRef;\n const projectTypeId = flowInput?.projectTypeId?.trim() ?? input?.projectTypeId?.trim();\n\n if (!workflowId || !taskTypeId || !subjectRef?.id || !subjectRef?.type) {\n return {\n success: false,\n message: { text: await this.translationService.translateAsync(`${I18N}.errors.missing-input`) },\n };\n }\n\n try {\n const taskType = await this.loadTaskType(taskTypeId);\n if (!taskType) {\n return {\n success: false,\n message: { text: await this.translationService.translateAsync(`${I18N}.errors.task-type-not-found`) },\n };\n }\n\n if (projectTypeId) {\n const allowed = await this.isTaskTypeAllowedForProjectType(projectTypeId, taskTypeId);\n if (!allowed) {\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync(`${I18N}.errors.task-type-not-allowed`),\n },\n };\n }\n }\n\n const defaultInput = defaultTo(get(taskType, 'workflowConfig.defaultInput'), {});\n const startResult = await this.workflowManager.start(workflowId, merge(\n defaultInput,\n {\n taskTypeId,\n taskTypeTitle: flowInput.taskTypeTitle ?? taskType.title,\n subjectRef,\n ...(projectTypeId ? { projectTypeId } : {}),\n refId: subjectRef.id,\n refType: subjectRef.type,\n correlationId: this.buildCorrelationId(subjectRef.id, taskTypeId, workflowId),\n },\n flowInput,\n ));\n\n if (!startResult.success) {\n const unknownError = await this.translationService.translateAsync(`${I18N}.errors.unknown`);\n this.toastService.show({\n color: 'danger',\n title: await this.translationService.translateAsync(`${I18N}.errors.execution-failed-title`),\n content: startResult.error ?? unknownError,\n closeButton: true,\n timeOut: 5000,\n });\n return { success: false, message: { text: startResult.error ?? unknownError } };\n }\n\n return { success: true, kind: 'object', data: undefined };\n } catch (error: unknown) {\n const unknownError = await this.translationService.translateAsync(`${I18N}.errors.unknown`);\n const message = error instanceof Error ? error.message : unknownError;\n console.error('[StartTaskFlowCommand]', error);\n this.toastService.show({\n color: 'danger',\n title: await this.translationService.translateAsync(`${I18N}.errors.execution-error-title`),\n content: message,\n closeButton: true,\n timeOut: 5000,\n });\n return { success: false, message: { text: message } };\n }\n }\n\n //#endregion\n\n //#region ---- Helpers ----\n\n private async loadTaskType(taskTypeId: string): Promise<AXMTaskManagementTaskTypeEntityModel | null> {\n const row = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.taskType.name)\n .data()\n .byKey(taskTypeId);\n return (row ?? null) as AXMTaskManagementTaskTypeEntityModel | null;\n }\n\n private async isTaskTypeAllowedForProjectType(projectTypeId: string, taskTypeId: string): Promise<boolean> {\n const projectType = (await this.entityService\n .withEntity('ProjectManagement', 'ProjectType')\n .data()\n .byKey(projectTypeId)) as {\n allowedTaskTypeIds?: string[];\n allowedTaskTypes?: Array<{ id: string }>;\n allowedTaskTypesList?: Array<{ id: string }>;\n } | null;\n\n if (!projectType) {\n return false;\n }\n\n const allowedIds =\n (projectType.allowedTaskTypesList ?? projectType.allowedTaskTypes)?.map((row) => row.id).filter(Boolean) ?? [];\n if (!isEmpty(allowedIds)) {\n return allowedIds.includes(taskTypeId);\n }\n\n return defaultTo(projectType.allowedTaskTypeIds, []).includes(taskTypeId);\n }\n\n private buildCorrelationId(subjectId: string, taskTypeId: string, workflowId: string): string {\n return `${subjectId}:${taskTypeId}:${workflowId}`;\n }\n\n //#endregion\n}\n\nexport const START_TASK_FLOW_COMMAND_KEY = AXPTaskManagementCommandKeys.Task.StartFlow;\n"],"names":[],"mappings":"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"}
|