camunda-bpmn-js 5.6.2 → 5.7.1
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/base-modeler.development.js +294 -147
- package/dist/base-modeler.production.min.js +2 -2
- package/dist/base-navigated-viewer.development.js +92 -41
- package/dist/base-navigated-viewer.production.min.js +1 -1
- package/dist/base-viewer.development.js +92 -41
- package/dist/base-viewer.production.min.js +1 -1
- package/dist/camunda-cloud-modeler.development.js +1578 -403
- package/dist/camunda-cloud-modeler.production.min.js +6 -6
- package/dist/camunda-cloud-navigated-viewer.development.js +92 -41
- package/dist/camunda-cloud-navigated-viewer.production.min.js +1 -1
- package/dist/camunda-cloud-viewer.development.js +92 -41
- package/dist/camunda-cloud-viewer.production.min.js +1 -1
- package/dist/camunda-platform-modeler.development.js +294 -147
- package/dist/camunda-platform-modeler.production.min.js +5 -5
- package/dist/camunda-platform-navigated-viewer.development.js +92 -41
- package/dist/camunda-platform-navigated-viewer.production.min.js +1 -1
- package/dist/camunda-platform-viewer.development.js +92 -41
- package/dist/camunda-platform-viewer.production.min.js +1 -1
- package/lib/camunda-cloud/Modeler.js +4 -1
- package/lib/camunda-cloud/features/external-resources/README.md +14 -0
- package/lib/camunda-cloud/features/external-resources/ResourceLoader.d.ts +6 -0
- package/lib/camunda-cloud/features/external-resources/ResourceLoader.js +24 -0
- package/lib/camunda-cloud/features/external-resources/Resources.d.ts +7 -0
- package/lib/camunda-cloud/features/external-resources/Resources.js +19 -0
- package/lib/camunda-cloud/features/external-resources/cmd/ComposedCommandHandler.d.ts +12 -0
- package/lib/camunda-cloud/features/external-resources/cmd/ComposedCommandHandler.js +16 -0
- package/lib/camunda-cloud/features/external-resources/cmd/index.d.ts +4 -0
- package/lib/camunda-cloud/features/external-resources/cmd/index.js +21 -0
- package/lib/camunda-cloud/features/external-resources/handlers/decision/AppendMenuProvider.d.ts +5 -0
- package/lib/camunda-cloud/features/external-resources/handlers/decision/AppendMenuProvider.js +19 -0
- package/lib/camunda-cloud/features/external-resources/handlers/decision/CreateMenuProvider.d.ts +5 -0
- package/lib/camunda-cloud/features/external-resources/handlers/decision/CreateMenuProvider.js +19 -0
- package/lib/camunda-cloud/features/external-resources/handlers/decision/ReplaceMenuProvider.d.ts +5 -0
- package/lib/camunda-cloud/features/external-resources/handlers/decision/ReplaceMenuProvider.js +19 -0
- package/lib/camunda-cloud/features/external-resources/handlers/decision/createElement.d.ts +13 -0
- package/lib/camunda-cloud/features/external-resources/handlers/decision/createElement.js +35 -0
- package/lib/camunda-cloud/features/external-resources/handlers/decision/index.d.ts +8 -0
- package/lib/camunda-cloud/features/external-resources/handlers/decision/index.js +14 -0
- package/lib/camunda-cloud/features/external-resources/handlers/decision/replaceElement.d.ts +15 -0
- package/lib/camunda-cloud/features/external-resources/handlers/decision/replaceElement.js +77 -0
- package/lib/camunda-cloud/features/external-resources/handlers/decision/searchTerms.d.ts +1 -0
- package/lib/camunda-cloud/features/external-resources/handlers/decision/searchTerms.js +6 -0
- package/lib/camunda-cloud/features/external-resources/handlers/form/AppendMenuProvider.d.ts +5 -0
- package/lib/camunda-cloud/features/external-resources/handlers/form/AppendMenuProvider.js +19 -0
- package/lib/camunda-cloud/features/external-resources/handlers/form/CreateMenuProvider.d.ts +5 -0
- package/lib/camunda-cloud/features/external-resources/handlers/form/CreateMenuProvider.js +19 -0
- package/lib/camunda-cloud/features/external-resources/handlers/form/ReplaceMenuProvider.d.ts +5 -0
- package/lib/camunda-cloud/features/external-resources/handlers/form/ReplaceMenuProvider.js +19 -0
- package/lib/camunda-cloud/features/external-resources/handlers/form/createElement.d.ts +9 -0
- package/lib/camunda-cloud/features/external-resources/handlers/form/createElement.js +39 -0
- package/lib/camunda-cloud/features/external-resources/handlers/form/index.d.ts +8 -0
- package/lib/camunda-cloud/features/external-resources/handlers/form/index.js +14 -0
- package/lib/camunda-cloud/features/external-resources/handlers/form/replaceElement.d.ts +15 -0
- package/lib/camunda-cloud/features/external-resources/handlers/form/replaceElement.js +82 -0
- package/lib/camunda-cloud/features/external-resources/handlers/form/searchTerms.d.ts +1 -0
- package/lib/camunda-cloud/features/external-resources/handlers/form/searchTerms.js +6 -0
- package/lib/camunda-cloud/features/external-resources/handlers/process/AppendMenuProvider.d.ts +5 -0
- package/lib/camunda-cloud/features/external-resources/handlers/process/AppendMenuProvider.js +19 -0
- package/lib/camunda-cloud/features/external-resources/handlers/process/CreateMenuProvider.d.ts +5 -0
- package/lib/camunda-cloud/features/external-resources/handlers/process/CreateMenuProvider.js +19 -0
- package/lib/camunda-cloud/features/external-resources/handlers/process/ReplaceMenuProvider.d.ts +5 -0
- package/lib/camunda-cloud/features/external-resources/handlers/process/ReplaceMenuProvider.js +19 -0
- package/lib/camunda-cloud/features/external-resources/handlers/process/createElement.d.ts +14 -0
- package/lib/camunda-cloud/features/external-resources/handlers/process/createElement.js +36 -0
- package/lib/camunda-cloud/features/external-resources/handlers/process/index.d.ts +8 -0
- package/lib/camunda-cloud/features/external-resources/handlers/process/index.js +14 -0
- package/lib/camunda-cloud/features/external-resources/handlers/process/replaceElement.d.ts +16 -0
- package/lib/camunda-cloud/features/external-resources/handlers/process/replaceElement.js +78 -0
- package/lib/camunda-cloud/features/external-resources/handlers/process/searchTerms.d.ts +1 -0
- package/lib/camunda-cloud/features/external-resources/handlers/process/searchTerms.js +6 -0
- package/lib/camunda-cloud/features/external-resources/handlers/util/BaseAppendMenuProvider.d.ts +18 -0
- package/lib/camunda-cloud/features/external-resources/handlers/util/BaseAppendMenuProvider.js +103 -0
- package/lib/camunda-cloud/features/external-resources/handlers/util/BaseCreateMenuProvider.d.ts +17 -0
- package/lib/camunda-cloud/features/external-resources/handlers/util/BaseCreateMenuProvider.js +84 -0
- package/lib/camunda-cloud/features/external-resources/handlers/util/BaseReplaceMenuProvider.d.ts +22 -0
- package/lib/camunda-cloud/features/external-resources/handlers/util/BaseReplaceMenuProvider.js +82 -0
- package/lib/camunda-cloud/features/external-resources/index.d.ts +23 -0
- package/lib/camunda-cloud/features/external-resources/index.js +27 -0
- package/package.json +4 -4
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { getBusinessObject, is } from 'bpmn-js/lib/util/ModelUtil';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @typedef {{
|
|
5
|
+
* type: 'form',
|
|
6
|
+
* name: string,
|
|
7
|
+
* formId: string
|
|
8
|
+
* }} Form
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @param {import('diagram-js/lib/model').Element} element
|
|
13
|
+
* @param {Form} resource
|
|
14
|
+
* @param {import('didi').Injector} injector
|
|
15
|
+
*/
|
|
16
|
+
export function replaceElement(element, resource, injector) {
|
|
17
|
+
const bpmnFactory = injector.get('bpmnFactory'),
|
|
18
|
+
bpmnReplace = injector.get('bpmnReplace'),
|
|
19
|
+
modeling = injector.get('modeling'),
|
|
20
|
+
commandStack = injector.get('commandStack');
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
commandStack.execute('external-resources.composed-command', {
|
|
24
|
+
command: replace
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
function replace() {
|
|
29
|
+
const replacedElement = bpmnReplace.replaceElement(element, { type: 'bpmn:UserTask' });
|
|
30
|
+
modeling.updateProperties(replacedElement, {
|
|
31
|
+
name: resource.name
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
const bo = getBusinessObject(replacedElement);
|
|
35
|
+
|
|
36
|
+
const extensionElements = bo.get('extensionElements');
|
|
37
|
+
|
|
38
|
+
if (!extensionElements) {
|
|
39
|
+
modeling.updateProperties(replacedElement, {
|
|
40
|
+
extensionElements: bpmnFactory.create('bpmn:ExtensionElements', {
|
|
41
|
+
values: [
|
|
42
|
+
createZeebeUserTask(bpmnFactory),
|
|
43
|
+
createFormDefinition(resource, bpmnFactory)
|
|
44
|
+
]
|
|
45
|
+
})
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const formDefinition = getFormDefinition(replacedElement);
|
|
52
|
+
|
|
53
|
+
if (!formDefinition) {
|
|
54
|
+
modeling.updateModdleProperties(replacedElement, extensionElements, {
|
|
55
|
+
values: [
|
|
56
|
+
...extensionElements.values,
|
|
57
|
+
createFormDefinition(resource, bpmnFactory)
|
|
58
|
+
]
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
modeling.updateModdleProperties(replacedElement, formDefinition, {
|
|
65
|
+
formId: resource.formId
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function getFormDefinition(element) {
|
|
71
|
+
return element.businessObject?.extensionElements?.values.find(value => is(value, 'zeebe:FormDefinition'));
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function createFormDefinition(resource, bpmnFactory) {
|
|
75
|
+
return bpmnFactory.create('zeebe:FormDefinition', {
|
|
76
|
+
formId: resource.formId
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function createZeebeUserTask(bpmnFactory) {
|
|
81
|
+
return bpmnFactory.create('zeebe:UserTask');
|
|
82
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const searchTerms: string;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { createElement } from './createElement.js';
|
|
2
|
+
import { searchTerms } from './searchTerms.js';
|
|
3
|
+
import { BaseAppendMenuProvider } from '../util/BaseAppendMenuProvider.js';
|
|
4
|
+
|
|
5
|
+
export class AppendMenuProvider extends BaseAppendMenuProvider {
|
|
6
|
+
static $inject = [
|
|
7
|
+
'injector'
|
|
8
|
+
];
|
|
9
|
+
|
|
10
|
+
constructor(injector) {
|
|
11
|
+
super(injector, {
|
|
12
|
+
resourceType: 'bpmnProcess',
|
|
13
|
+
groupName: 'Processes',
|
|
14
|
+
className: 'bpmn-icon-call-activity',
|
|
15
|
+
createElement: (resource, bpmnFactory) => createElement(resource, bpmnFactory),
|
|
16
|
+
search: searchTerms
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { createElement } from './createElement.js';
|
|
2
|
+
import { searchTerms } from './searchTerms.js';
|
|
3
|
+
import { BaseCreateMenuProvider } from '../util/BaseCreateMenuProvider.js';
|
|
4
|
+
|
|
5
|
+
export class CreateMenuProvider extends BaseCreateMenuProvider {
|
|
6
|
+
static $inject = [
|
|
7
|
+
'injector'
|
|
8
|
+
];
|
|
9
|
+
|
|
10
|
+
constructor(injector) {
|
|
11
|
+
super(injector, {
|
|
12
|
+
resourceType: 'bpmnProcess',
|
|
13
|
+
groupName: 'Processes',
|
|
14
|
+
className: 'bpmn-icon-call-activity',
|
|
15
|
+
createElement: (resource, bpmnFactory) => createElement(resource, bpmnFactory),
|
|
16
|
+
search: searchTerms
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { replaceElement } from './replaceElement.js';
|
|
2
|
+
import { searchTerms } from './searchTerms.js';
|
|
3
|
+
import { BaseReplaceMenuProvider } from '../util/BaseReplaceMenuProvider.js';
|
|
4
|
+
|
|
5
|
+
export class ReplaceMenuProvider extends BaseReplaceMenuProvider {
|
|
6
|
+
static $inject = [
|
|
7
|
+
'injector'
|
|
8
|
+
];
|
|
9
|
+
|
|
10
|
+
constructor(injector) {
|
|
11
|
+
super(injector, {
|
|
12
|
+
resourceType: 'bpmnProcess',
|
|
13
|
+
groupName: 'Processes',
|
|
14
|
+
className: 'bpmn-icon-call-activity',
|
|
15
|
+
replaceElement: (element, resource, injector) => replaceElement(element, resource, injector),
|
|
16
|
+
search: searchTerms
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* @param resource
|
|
4
|
+
* @param bpmnFactory
|
|
5
|
+
*/
|
|
6
|
+
export function createElement(
|
|
7
|
+
resource: CallActivity,
|
|
8
|
+
bpmnFactory: import("bpmn-js/lib/features/modeling/BpmnFactory").default
|
|
9
|
+
): any;
|
|
10
|
+
export type CallActivity = {
|
|
11
|
+
type: "bpmnProcess";
|
|
12
|
+
name: string;
|
|
13
|
+
processId: string;
|
|
14
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @typedef {{
|
|
3
|
+
* type: 'bpmnProcess',
|
|
4
|
+
* name: string,
|
|
5
|
+
* processId: string
|
|
6
|
+
* }} CallActivity
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
*
|
|
11
|
+
* @param {CallActivity} resource
|
|
12
|
+
* @param {import('bpmn-js/lib/features/modeling/BpmnFactory').default} bpmnFactory
|
|
13
|
+
*/
|
|
14
|
+
export function createElement(resource, bpmnFactory) {
|
|
15
|
+
return createCallActivity(resource, bpmnFactory);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function createCallActivity(resource, bpmnFactory) {
|
|
19
|
+
const calledElement = createCalledElement(resource, bpmnFactory);
|
|
20
|
+
const extensionElements = bpmnFactory.create('bpmn:ExtensionElements', {
|
|
21
|
+
values: [
|
|
22
|
+
calledElement
|
|
23
|
+
]
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
return bpmnFactory.create('bpmn:CallActivity', {
|
|
27
|
+
name: resource.name,
|
|
28
|
+
extensionElements
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function createCalledElement(resource, bpmnFactory) {
|
|
33
|
+
return bpmnFactory.create('zeebe:CalledElement', {
|
|
34
|
+
processId: resource.processId
|
|
35
|
+
});
|
|
36
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export const ProcessHandlerModule: {
|
|
2
|
+
'resources.processHandler.create': (string | typeof CreateMenuProvider)[];
|
|
3
|
+
'resources.processHandler.append': (string | typeof AppendMenuProvider)[];
|
|
4
|
+
'resources.processHandler.replace': (string | typeof ReplaceMenuProvider)[];
|
|
5
|
+
};
|
|
6
|
+
import { CreateMenuProvider } from './CreateMenuProvider';
|
|
7
|
+
import { AppendMenuProvider } from './AppendMenuProvider';
|
|
8
|
+
import { ReplaceMenuProvider } from './ReplaceMenuProvider';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { CreateMenuProvider } from './CreateMenuProvider';
|
|
2
|
+
import { AppendMenuProvider } from './AppendMenuProvider';
|
|
3
|
+
import { ReplaceMenuProvider } from './ReplaceMenuProvider';
|
|
4
|
+
|
|
5
|
+
export const ProcessHandlerModule = {
|
|
6
|
+
__init__: [
|
|
7
|
+
'resources.processHandler.create',
|
|
8
|
+
'resources.processHandler.append',
|
|
9
|
+
'resources.processHandler.replace'
|
|
10
|
+
],
|
|
11
|
+
'resources.processHandler.create': [ 'type', CreateMenuProvider ],
|
|
12
|
+
'resources.processHandler.append': [ 'type', AppendMenuProvider ],
|
|
13
|
+
'resources.processHandler.replace': [ 'type', ReplaceMenuProvider ]
|
|
14
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* @param element
|
|
4
|
+
* @param resource
|
|
5
|
+
* @param injector
|
|
6
|
+
*/
|
|
7
|
+
export function replaceElement(
|
|
8
|
+
element: import("diagram-js/lib/model").Element,
|
|
9
|
+
resource: CallActivity,
|
|
10
|
+
injector: import("didi").Injector
|
|
11
|
+
): void;
|
|
12
|
+
export type CallActivity = {
|
|
13
|
+
type: "bpmnProcess";
|
|
14
|
+
name: string;
|
|
15
|
+
processId: string;
|
|
16
|
+
};
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { getBusinessObject, is } from 'bpmn-js/lib/util/ModelUtil';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @typedef {{
|
|
5
|
+
* type: 'bpmnProcess',
|
|
6
|
+
* name: string,
|
|
7
|
+
* processId: string
|
|
8
|
+
* }} CallActivity
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
*
|
|
13
|
+
* @param {import('diagram-js/lib/model').Element} element
|
|
14
|
+
* @param {CallActivity} resource
|
|
15
|
+
* @param {import('didi').Injector} injector
|
|
16
|
+
*/
|
|
17
|
+
export function replaceElement(element, resource, injector) {
|
|
18
|
+
const bpmnFactory = injector.get('bpmnFactory'),
|
|
19
|
+
bpmnReplace = injector.get('bpmnReplace'),
|
|
20
|
+
modeling = injector.get('modeling'),
|
|
21
|
+
commandStack = injector.get('commandStack');
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
commandStack.execute('external-resources.composed-command', {
|
|
25
|
+
command: replace
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
function replace() {
|
|
30
|
+
const replacedElement = bpmnReplace.replaceElement(element, { type: 'bpmn:CallActivity' });
|
|
31
|
+
modeling.updateProperties(replacedElement, {
|
|
32
|
+
name: resource.name
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
const bo = getBusinessObject(replacedElement);
|
|
36
|
+
|
|
37
|
+
const extensionElements = bo.get('extensionElements');
|
|
38
|
+
|
|
39
|
+
if (!extensionElements) {
|
|
40
|
+
modeling.updateProperties(replacedElement, {
|
|
41
|
+
extensionElements: bpmnFactory.create('bpmn:ExtensionElements', {
|
|
42
|
+
values: [
|
|
43
|
+
createCalledElement(resource, bpmnFactory)
|
|
44
|
+
]
|
|
45
|
+
})
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const calledElement = getCalledElement(replacedElement);
|
|
52
|
+
|
|
53
|
+
if (!calledElement) {
|
|
54
|
+
modeling.updateModdleProperties(replacedElement, extensionElements, {
|
|
55
|
+
values: [
|
|
56
|
+
...extensionElements.values,
|
|
57
|
+
createCalledElement(resource, bpmnFactory)
|
|
58
|
+
]
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
modeling.updateModdleProperties(replacedElement, calledElement, {
|
|
65
|
+
processId: resource.processId
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function getCalledElement(element) {
|
|
71
|
+
return element.businessObject?.extensionElements?.values.find(value => is(value, 'zeebe:CalledElement'));
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function createCalledElement(resource, bpmnFactory) {
|
|
75
|
+
return bpmnFactory.create('zeebe:CalledElement', {
|
|
76
|
+
processId: resource.processId
|
|
77
|
+
});
|
|
78
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const searchTerms: string;
|
package/lib/camunda-cloud/features/external-resources/handlers/util/BaseAppendMenuProvider.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export class BaseAppendMenuProvider {
|
|
2
|
+
/**
|
|
3
|
+
*
|
|
4
|
+
* @param injector
|
|
5
|
+
* @param config
|
|
6
|
+
*/
|
|
7
|
+
constructor(injector: import("didi").Injector, config: Config);
|
|
8
|
+
|
|
9
|
+
/** @returns */
|
|
10
|
+
getPopupMenuEntries(element: any): import("diagram-js/lib/features/popup-menu/PopupMenuProvider").PopupMenuEntries;
|
|
11
|
+
}
|
|
12
|
+
export type Config = {
|
|
13
|
+
resourceType: string;
|
|
14
|
+
className: string;
|
|
15
|
+
groupName: string;
|
|
16
|
+
createElement: Function;
|
|
17
|
+
search?: string;
|
|
18
|
+
};
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @typedef {object} Config
|
|
3
|
+
* @property {string} resourceType
|
|
4
|
+
* @property {string} className
|
|
5
|
+
* @property {string} groupName
|
|
6
|
+
* @property {Function} createElement
|
|
7
|
+
* @property {string} [search]
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
export class BaseAppendMenuProvider {
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
*
|
|
14
|
+
* @param {import('didi').Injector} injector
|
|
15
|
+
* @param {Config} config
|
|
16
|
+
*/
|
|
17
|
+
constructor(injector, config) {
|
|
18
|
+
this._elementFactory = injector.get('elementFactory');
|
|
19
|
+
this._bpmnFactory = injector.get('bpmnFactory');
|
|
20
|
+
this._popupMenu = injector.get('popupMenu');
|
|
21
|
+
this._create = injector.get('create');
|
|
22
|
+
this._autoPlace = injector.get('autoPlace');
|
|
23
|
+
this._rules = injector.get('rules');
|
|
24
|
+
this._translate = injector.get('translate');
|
|
25
|
+
this._resources = injector.get('resources');
|
|
26
|
+
|
|
27
|
+
this._config = config;
|
|
28
|
+
|
|
29
|
+
this._register();
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
_register() {
|
|
33
|
+
this._popupMenu.registerProvider('bpmn-append', this);
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
/** @returns {import('diagram-js/lib/features/popup-menu/PopupMenuProvider').PopupMenuEntries} */
|
|
37
|
+
getPopupMenuEntries(element) {
|
|
38
|
+
const rules = this._rules;
|
|
39
|
+
|
|
40
|
+
if (!rules.allowed('shape.append', { element: element })) {
|
|
41
|
+
return [];
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const {
|
|
45
|
+
resourceType,
|
|
46
|
+
className,
|
|
47
|
+
groupName,
|
|
48
|
+
createElement,
|
|
49
|
+
search
|
|
50
|
+
} = this._config;
|
|
51
|
+
|
|
52
|
+
const resources = this._resources.filter(r => r.type === resourceType);
|
|
53
|
+
const entries = {};
|
|
54
|
+
|
|
55
|
+
resources.forEach((resource, index) => {
|
|
56
|
+
const getTarget = () => createElement(resource, this._bpmnFactory);
|
|
57
|
+
entries[`resources-append-${resourceType}-${index}`] = {
|
|
58
|
+
label: resource.name,
|
|
59
|
+
action: this._createEntryAction(element, getTarget),
|
|
60
|
+
group: {
|
|
61
|
+
id: groupName.toLowerCase(),
|
|
62
|
+
name: this._translate(groupName)
|
|
63
|
+
},
|
|
64
|
+
className,
|
|
65
|
+
search
|
|
66
|
+
};
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
return entries;
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
_createEntryAction(element, targetFactory) {
|
|
73
|
+
const elementFactory = this._elementFactory;
|
|
74
|
+
const autoPlace = this._autoPlace;
|
|
75
|
+
const create = this._create;
|
|
76
|
+
|
|
77
|
+
const createElement = () => {
|
|
78
|
+
const businessObject = targetFactory();
|
|
79
|
+
|
|
80
|
+
return elementFactory.createShape({
|
|
81
|
+
type: businessObject.$type,
|
|
82
|
+
businessObject: businessObject
|
|
83
|
+
});
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
const autoPlaceElement = () => {
|
|
87
|
+
const newElement = createElement();
|
|
88
|
+
autoPlace.append(element, newElement);
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
const manualPlaceElement = (event) => {
|
|
92
|
+
const newElement = createElement();
|
|
93
|
+
return create.start(event, newElement, {
|
|
94
|
+
source: element
|
|
95
|
+
});
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
return {
|
|
99
|
+
click: autoPlaceElement,
|
|
100
|
+
dragstart: manualPlaceElement
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
}
|
package/lib/camunda-cloud/features/external-resources/handlers/util/BaseCreateMenuProvider.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export class BaseCreateMenuProvider {
|
|
2
|
+
/**
|
|
3
|
+
*
|
|
4
|
+
* @param injector
|
|
5
|
+
* @param config
|
|
6
|
+
*/
|
|
7
|
+
constructor(injector: import("didi").Injector, config: Config);
|
|
8
|
+
|
|
9
|
+
getPopupMenuEntries(): {};
|
|
10
|
+
}
|
|
11
|
+
export type Config = {
|
|
12
|
+
resourceType: string;
|
|
13
|
+
className: string;
|
|
14
|
+
groupName: string;
|
|
15
|
+
createElement: Function;
|
|
16
|
+
search?: string;
|
|
17
|
+
};
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @typedef {object} Config
|
|
3
|
+
* @property {string} resourceType
|
|
4
|
+
* @property {string} className
|
|
5
|
+
* @property {string} groupName
|
|
6
|
+
* @property {Function} createElement
|
|
7
|
+
* @property {string} [search]
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
export class BaseCreateMenuProvider {
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
*
|
|
14
|
+
* @param {import('didi').Injector} injector
|
|
15
|
+
* @param {Config} config
|
|
16
|
+
*/
|
|
17
|
+
constructor(injector, config) {
|
|
18
|
+
this._elementFactory = injector.get('elementFactory');
|
|
19
|
+
this._bpmnFactory = injector.get('bpmnFactory');
|
|
20
|
+
this._popupMenu = injector.get('popupMenu');
|
|
21
|
+
this._create = injector.get('create');
|
|
22
|
+
this._autoPlace = injector.get('autoPlace');
|
|
23
|
+
this._mouse = injector.get('mouse');
|
|
24
|
+
this._translate = injector.get('translate');
|
|
25
|
+
this._resources = injector.get('resources');
|
|
26
|
+
|
|
27
|
+
injector.get('popupMenu').registerProvider('bpmn-create', this);
|
|
28
|
+
|
|
29
|
+
this._config = config;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
getPopupMenuEntries() {
|
|
33
|
+
const {
|
|
34
|
+
resourceType,
|
|
35
|
+
className,
|
|
36
|
+
groupName,
|
|
37
|
+
createElement,
|
|
38
|
+
search
|
|
39
|
+
} = this._config;
|
|
40
|
+
|
|
41
|
+
const resources = this._resources.filter(r => r.type === resourceType);
|
|
42
|
+
const entries = {};
|
|
43
|
+
|
|
44
|
+
resources.forEach((resource, index) => {
|
|
45
|
+
const getTarget = () => createElement(resource, this._bpmnFactory);
|
|
46
|
+
entries[`resources-create-${resourceType}-${index}`] = {
|
|
47
|
+
label: resource.name,
|
|
48
|
+
action: this._createEntryAction(getTarget),
|
|
49
|
+
group: {
|
|
50
|
+
id: groupName.toLowerCase(),
|
|
51
|
+
name: this._translate(groupName)
|
|
52
|
+
},
|
|
53
|
+
className,
|
|
54
|
+
search
|
|
55
|
+
};
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
return entries;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
_createEntryAction(getTarget) {
|
|
62
|
+
const create = this._create;
|
|
63
|
+
const mouse = this._mouse;
|
|
64
|
+
const popupMenu = this._popupMenu;
|
|
65
|
+
const elementFactory = this._elementFactory;
|
|
66
|
+
|
|
67
|
+
return (event) => {
|
|
68
|
+
popupMenu.close();
|
|
69
|
+
|
|
70
|
+
const businessObject = getTarget();
|
|
71
|
+
const element = elementFactory.createShape({
|
|
72
|
+
type: businessObject.$type,
|
|
73
|
+
businessObject: businessObject
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
// use last mouse event if triggered via keyboard
|
|
77
|
+
if (event instanceof KeyboardEvent) {
|
|
78
|
+
event = mouse.getLastMoveEvent();
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
return create.start(event, element);
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
}
|
package/lib/camunda-cloud/features/external-resources/handlers/util/BaseReplaceMenuProvider.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export class BaseReplaceMenuProvider {
|
|
2
|
+
/**
|
|
3
|
+
*
|
|
4
|
+
* @param injector
|
|
5
|
+
* @param config
|
|
6
|
+
*/
|
|
7
|
+
constructor(injector: import("didi").Injector, config: Config);
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @param element
|
|
11
|
+
*
|
|
12
|
+
* @return
|
|
13
|
+
*/
|
|
14
|
+
getPopupMenuEntries(element: PopupMenuTarget): PopupMenuEntries;
|
|
15
|
+
}
|
|
16
|
+
export type Config = {
|
|
17
|
+
resourceType: string;
|
|
18
|
+
className: string;
|
|
19
|
+
groupName: string;
|
|
20
|
+
replaceElement: Function;
|
|
21
|
+
search?: string;
|
|
22
|
+
};
|
package/lib/camunda-cloud/features/external-resources/handlers/util/BaseReplaceMenuProvider.js
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import {
|
|
2
|
+
is
|
|
3
|
+
} from 'bpmn-js/lib/util/ModelUtil';
|
|
4
|
+
|
|
5
|
+
import {
|
|
6
|
+
isArray
|
|
7
|
+
} from 'min-dash';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @typedef {object} Config
|
|
11
|
+
* @property {string} resourceType
|
|
12
|
+
* @property {string} className
|
|
13
|
+
* @property {string} groupName
|
|
14
|
+
* @property {Function} replaceElement
|
|
15
|
+
* @property {string} [search]
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
export class BaseReplaceMenuProvider {
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
*
|
|
22
|
+
* @param {import('didi').Injector} injector
|
|
23
|
+
* @param {Config} config
|
|
24
|
+
*/
|
|
25
|
+
constructor(injector, config) {
|
|
26
|
+
|
|
27
|
+
this._injector = injector;
|
|
28
|
+
this._popupMenu = injector.get('popupMenu');
|
|
29
|
+
this._rules = injector.get('rules');
|
|
30
|
+
this._translate = injector.get('translate');
|
|
31
|
+
this._resources = injector.get('resources');
|
|
32
|
+
|
|
33
|
+
this._popupMenu.registerProvider('bpmn-replace', this);
|
|
34
|
+
|
|
35
|
+
this._config = config;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* @param {PopupMenuTarget} element
|
|
41
|
+
*
|
|
42
|
+
* @return {PopupMenuEntries}
|
|
43
|
+
*/
|
|
44
|
+
getPopupMenuEntries(element) {
|
|
45
|
+
const rules = this._rules;
|
|
46
|
+
|
|
47
|
+
if (isArray(element) || !rules.allowed('shape.replace', { element })) {
|
|
48
|
+
return {};
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if (!is(element, 'bpmn:Activity')) {
|
|
52
|
+
return {};
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const {
|
|
56
|
+
resourceType,
|
|
57
|
+
className,
|
|
58
|
+
groupName,
|
|
59
|
+
replaceElement,
|
|
60
|
+
search
|
|
61
|
+
} = this._config;
|
|
62
|
+
|
|
63
|
+
const resources = this._resources.filter(r => r.type === resourceType);
|
|
64
|
+
const entries = {};
|
|
65
|
+
|
|
66
|
+
resources.forEach((resource, index) => {
|
|
67
|
+
const replace = () => replaceElement(element, resource, this._injector);
|
|
68
|
+
entries[`resources-replace-${resourceType}-${index}`] = {
|
|
69
|
+
label: resource.name,
|
|
70
|
+
action: replace,
|
|
71
|
+
group: {
|
|
72
|
+
id: groupName.toLowerCase(),
|
|
73
|
+
name: this._translate(groupName)
|
|
74
|
+
},
|
|
75
|
+
className,
|
|
76
|
+
search
|
|
77
|
+
};
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
return entries;
|
|
81
|
+
}
|
|
82
|
+
}
|