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.
Files changed (79) hide show
  1. package/dist/base-modeler.development.js +294 -147
  2. package/dist/base-modeler.production.min.js +2 -2
  3. package/dist/base-navigated-viewer.development.js +92 -41
  4. package/dist/base-navigated-viewer.production.min.js +1 -1
  5. package/dist/base-viewer.development.js +92 -41
  6. package/dist/base-viewer.production.min.js +1 -1
  7. package/dist/camunda-cloud-modeler.development.js +1578 -403
  8. package/dist/camunda-cloud-modeler.production.min.js +6 -6
  9. package/dist/camunda-cloud-navigated-viewer.development.js +92 -41
  10. package/dist/camunda-cloud-navigated-viewer.production.min.js +1 -1
  11. package/dist/camunda-cloud-viewer.development.js +92 -41
  12. package/dist/camunda-cloud-viewer.production.min.js +1 -1
  13. package/dist/camunda-platform-modeler.development.js +294 -147
  14. package/dist/camunda-platform-modeler.production.min.js +5 -5
  15. package/dist/camunda-platform-navigated-viewer.development.js +92 -41
  16. package/dist/camunda-platform-navigated-viewer.production.min.js +1 -1
  17. package/dist/camunda-platform-viewer.development.js +92 -41
  18. package/dist/camunda-platform-viewer.production.min.js +1 -1
  19. package/lib/camunda-cloud/Modeler.js +4 -1
  20. package/lib/camunda-cloud/features/external-resources/README.md +14 -0
  21. package/lib/camunda-cloud/features/external-resources/ResourceLoader.d.ts +6 -0
  22. package/lib/camunda-cloud/features/external-resources/ResourceLoader.js +24 -0
  23. package/lib/camunda-cloud/features/external-resources/Resources.d.ts +7 -0
  24. package/lib/camunda-cloud/features/external-resources/Resources.js +19 -0
  25. package/lib/camunda-cloud/features/external-resources/cmd/ComposedCommandHandler.d.ts +12 -0
  26. package/lib/camunda-cloud/features/external-resources/cmd/ComposedCommandHandler.js +16 -0
  27. package/lib/camunda-cloud/features/external-resources/cmd/index.d.ts +4 -0
  28. package/lib/camunda-cloud/features/external-resources/cmd/index.js +21 -0
  29. package/lib/camunda-cloud/features/external-resources/handlers/decision/AppendMenuProvider.d.ts +5 -0
  30. package/lib/camunda-cloud/features/external-resources/handlers/decision/AppendMenuProvider.js +19 -0
  31. package/lib/camunda-cloud/features/external-resources/handlers/decision/CreateMenuProvider.d.ts +5 -0
  32. package/lib/camunda-cloud/features/external-resources/handlers/decision/CreateMenuProvider.js +19 -0
  33. package/lib/camunda-cloud/features/external-resources/handlers/decision/ReplaceMenuProvider.d.ts +5 -0
  34. package/lib/camunda-cloud/features/external-resources/handlers/decision/ReplaceMenuProvider.js +19 -0
  35. package/lib/camunda-cloud/features/external-resources/handlers/decision/createElement.d.ts +13 -0
  36. package/lib/camunda-cloud/features/external-resources/handlers/decision/createElement.js +35 -0
  37. package/lib/camunda-cloud/features/external-resources/handlers/decision/index.d.ts +8 -0
  38. package/lib/camunda-cloud/features/external-resources/handlers/decision/index.js +14 -0
  39. package/lib/camunda-cloud/features/external-resources/handlers/decision/replaceElement.d.ts +15 -0
  40. package/lib/camunda-cloud/features/external-resources/handlers/decision/replaceElement.js +77 -0
  41. package/lib/camunda-cloud/features/external-resources/handlers/decision/searchTerms.d.ts +1 -0
  42. package/lib/camunda-cloud/features/external-resources/handlers/decision/searchTerms.js +6 -0
  43. package/lib/camunda-cloud/features/external-resources/handlers/form/AppendMenuProvider.d.ts +5 -0
  44. package/lib/camunda-cloud/features/external-resources/handlers/form/AppendMenuProvider.js +19 -0
  45. package/lib/camunda-cloud/features/external-resources/handlers/form/CreateMenuProvider.d.ts +5 -0
  46. package/lib/camunda-cloud/features/external-resources/handlers/form/CreateMenuProvider.js +19 -0
  47. package/lib/camunda-cloud/features/external-resources/handlers/form/ReplaceMenuProvider.d.ts +5 -0
  48. package/lib/camunda-cloud/features/external-resources/handlers/form/ReplaceMenuProvider.js +19 -0
  49. package/lib/camunda-cloud/features/external-resources/handlers/form/createElement.d.ts +9 -0
  50. package/lib/camunda-cloud/features/external-resources/handlers/form/createElement.js +39 -0
  51. package/lib/camunda-cloud/features/external-resources/handlers/form/index.d.ts +8 -0
  52. package/lib/camunda-cloud/features/external-resources/handlers/form/index.js +14 -0
  53. package/lib/camunda-cloud/features/external-resources/handlers/form/replaceElement.d.ts +15 -0
  54. package/lib/camunda-cloud/features/external-resources/handlers/form/replaceElement.js +82 -0
  55. package/lib/camunda-cloud/features/external-resources/handlers/form/searchTerms.d.ts +1 -0
  56. package/lib/camunda-cloud/features/external-resources/handlers/form/searchTerms.js +6 -0
  57. package/lib/camunda-cloud/features/external-resources/handlers/process/AppendMenuProvider.d.ts +5 -0
  58. package/lib/camunda-cloud/features/external-resources/handlers/process/AppendMenuProvider.js +19 -0
  59. package/lib/camunda-cloud/features/external-resources/handlers/process/CreateMenuProvider.d.ts +5 -0
  60. package/lib/camunda-cloud/features/external-resources/handlers/process/CreateMenuProvider.js +19 -0
  61. package/lib/camunda-cloud/features/external-resources/handlers/process/ReplaceMenuProvider.d.ts +5 -0
  62. package/lib/camunda-cloud/features/external-resources/handlers/process/ReplaceMenuProvider.js +19 -0
  63. package/lib/camunda-cloud/features/external-resources/handlers/process/createElement.d.ts +14 -0
  64. package/lib/camunda-cloud/features/external-resources/handlers/process/createElement.js +36 -0
  65. package/lib/camunda-cloud/features/external-resources/handlers/process/index.d.ts +8 -0
  66. package/lib/camunda-cloud/features/external-resources/handlers/process/index.js +14 -0
  67. package/lib/camunda-cloud/features/external-resources/handlers/process/replaceElement.d.ts +16 -0
  68. package/lib/camunda-cloud/features/external-resources/handlers/process/replaceElement.js +78 -0
  69. package/lib/camunda-cloud/features/external-resources/handlers/process/searchTerms.d.ts +1 -0
  70. package/lib/camunda-cloud/features/external-resources/handlers/process/searchTerms.js +6 -0
  71. package/lib/camunda-cloud/features/external-resources/handlers/util/BaseAppendMenuProvider.d.ts +18 -0
  72. package/lib/camunda-cloud/features/external-resources/handlers/util/BaseAppendMenuProvider.js +103 -0
  73. package/lib/camunda-cloud/features/external-resources/handlers/util/BaseCreateMenuProvider.d.ts +17 -0
  74. package/lib/camunda-cloud/features/external-resources/handlers/util/BaseCreateMenuProvider.js +84 -0
  75. package/lib/camunda-cloud/features/external-resources/handlers/util/BaseReplaceMenuProvider.d.ts +22 -0
  76. package/lib/camunda-cloud/features/external-resources/handlers/util/BaseReplaceMenuProvider.js +82 -0
  77. package/lib/camunda-cloud/features/external-resources/index.d.ts +23 -0
  78. package/lib/camunda-cloud/features/external-resources/index.js +27 -0
  79. 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,6 @@
1
+ export const searchTerms = [
2
+ 'resource',
3
+ 'form',
4
+ 'user task',
5
+ 'human'
6
+ ].join(' ');
@@ -0,0 +1,5 @@
1
+ export class AppendMenuProvider extends BaseAppendMenuProvider {
2
+ static $inject: string[];
3
+ constructor(injector: any);
4
+ }
5
+ import { BaseAppendMenuProvider } from '../util/BaseAppendMenuProvider.js';
@@ -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,5 @@
1
+ export class CreateMenuProvider extends BaseCreateMenuProvider {
2
+ static $inject: string[];
3
+ constructor(injector: any);
4
+ }
5
+ import { BaseCreateMenuProvider } from '../util/BaseCreateMenuProvider.js';
@@ -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,5 @@
1
+ export class ReplaceMenuProvider extends BaseReplaceMenuProvider {
2
+ static $inject: string[];
3
+ constructor(injector: any);
4
+ }
5
+ import { BaseReplaceMenuProvider } from '../util/BaseReplaceMenuProvider.js';
@@ -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;
@@ -0,0 +1,6 @@
1
+ export const searchTerms = [
2
+ 'resource',
3
+ 'bpmn',
4
+ 'call activity',
5
+ 'child process'
6
+ ].join(' ');
@@ -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
+ }
@@ -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
+ }
@@ -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
+ };
@@ -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
+ }