@processmaker/modeler 1.40.3 → 1.41.0
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/modeler.common.js +421 -233
- package/dist/modeler.common.js.map +1 -1
- package/dist/modeler.umd.js +423 -235
- package/dist/modeler.umd.js.map +1 -1
- package/dist/modeler.umd.min.js +4 -4
- package/dist/modeler.umd.min.js.map +1 -1
- package/package.json +1 -1
- package/src/components/modeler/Modeler.vue +10 -0
- package/src/components/modeler/NodeMigrator.js +15 -6
- package/src/components/modeler/Selection.vue +39 -29
- package/src/components/nodes/subProcess/index.js +12 -4
- package/src/components/topRail/multiplayerViewUsers/MultiplayerViewUsers.vue +7 -1
- package/src/components/topRail/multiplayerViewUsers/avatar/Avatar.vue +11 -5
- package/src/multiplayer/inspector.utils.js +99 -0
- package/src/multiplayer/multiplayer.js +128 -136
package/package.json
CHANGED
|
@@ -497,6 +497,14 @@ export default {
|
|
|
497
497
|
if (source.default && source.default.id === flow.id) {
|
|
498
498
|
flow = null;
|
|
499
499
|
}
|
|
500
|
+
window.ProcessMaker.EventBus.$emit('multiplayer-updateNodes', [
|
|
501
|
+
{
|
|
502
|
+
id: source.id,
|
|
503
|
+
properties: {
|
|
504
|
+
default: flow?.id || null,
|
|
505
|
+
},
|
|
506
|
+
},
|
|
507
|
+
]);
|
|
500
508
|
source.set('default', flow);
|
|
501
509
|
},
|
|
502
510
|
cloneElement(node, copyCount) {
|
|
@@ -1218,7 +1226,9 @@ export default {
|
|
|
1218
1226
|
gatewayDirection: null,
|
|
1219
1227
|
messageRef: null,
|
|
1220
1228
|
signalRef: null,
|
|
1229
|
+
signalPayload: null,
|
|
1221
1230
|
extras: {},
|
|
1231
|
+
default: null,
|
|
1222
1232
|
};
|
|
1223
1233
|
if (node?.pool?.component) {
|
|
1224
1234
|
defaultData['poolId'] = node.pool.component.id;
|
|
@@ -19,13 +19,22 @@ export class NodeMigrator {
|
|
|
19
19
|
const shape = this._graph.getLinks().find(element => {
|
|
20
20
|
return element.component && element.component.node.definition === definition;
|
|
21
21
|
});
|
|
22
|
-
shape.component
|
|
22
|
+
const { node } = shape.component;
|
|
23
|
+
node._modelerId += '_replaced';
|
|
24
|
+
const waypoint = [];
|
|
25
|
+
node.diagram.waypoint?.forEach(point => {
|
|
26
|
+
waypoint.push({
|
|
27
|
+
x: point.x,
|
|
28
|
+
y: point.y,
|
|
29
|
+
});
|
|
30
|
+
});
|
|
23
31
|
flowNodes.push({
|
|
24
|
-
id:
|
|
25
|
-
type:
|
|
26
|
-
name:
|
|
27
|
-
|
|
28
|
-
|
|
32
|
+
id: node.definition.id,
|
|
33
|
+
type: node.type,
|
|
34
|
+
name: node.definition.name,
|
|
35
|
+
waypoint,
|
|
36
|
+
sourceRefId: node.definition.sourceRef.id,
|
|
37
|
+
targetRefId: node.definition.targetRef.id,
|
|
29
38
|
});
|
|
30
39
|
};
|
|
31
40
|
|
|
@@ -599,9 +599,9 @@ export default {
|
|
|
599
599
|
shapes.filter(shape => !shapesToNotTranslate.includes(shape.model.get('type')))
|
|
600
600
|
.forEach(shape => {
|
|
601
601
|
if (shape.model.get('type') === 'processmaker.modeler.bpmn.pool') {
|
|
602
|
-
const
|
|
602
|
+
const children = shape.model.component.getElementsUnderArea(shape.model, this.graph)
|
|
603
603
|
.filter((element) => element.component);
|
|
604
|
-
changed = [...changed, ...this.getContainerProperties(
|
|
604
|
+
changed = [...changed, ...this.getContainerProperties(children, changed)];
|
|
605
605
|
} else {
|
|
606
606
|
const { node } = shape.model.component;
|
|
607
607
|
const defaultData = {
|
|
@@ -623,38 +623,41 @@ export default {
|
|
|
623
623
|
const boundariesChanges = this.getBoundariesChangesForShape(shape);
|
|
624
624
|
changed = changed.concat(boundariesChanges);
|
|
625
625
|
});
|
|
626
|
-
|
|
626
|
+
|
|
627
627
|
return changed;
|
|
628
628
|
},
|
|
629
629
|
/**
|
|
630
630
|
* Get connected link properties
|
|
631
|
-
* @param {Array} links
|
|
631
|
+
* @param {Array} links
|
|
632
632
|
*/
|
|
633
633
|
getConnectedLinkProperties(links) {
|
|
634
634
|
let changed = [];
|
|
635
635
|
links.forEach((linkView) => {
|
|
636
|
-
const
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
const nodeType = linkView.model.component.node.type;
|
|
647
|
-
changed.push(
|
|
648
|
-
{
|
|
649
|
-
id: node.definition.id,
|
|
650
|
-
properties: {
|
|
651
|
-
type: nodeType,
|
|
652
|
-
waypoint,
|
|
653
|
-
sourceRefId,
|
|
654
|
-
targetRefId,
|
|
655
|
-
},
|
|
636
|
+
const vertices = linkView.model.component.shape.vertices();
|
|
637
|
+
if (vertices?.length) {
|
|
638
|
+
const waypoint = [];
|
|
639
|
+
const { node } = linkView.model.component;
|
|
640
|
+
|
|
641
|
+
node.diagram.waypoint?.forEach(point => {
|
|
642
|
+
waypoint.push({
|
|
643
|
+
x: point.x,
|
|
644
|
+
y: point.y,
|
|
645
|
+
});
|
|
656
646
|
});
|
|
657
|
-
|
|
647
|
+
const sourceRefId = linkView.sourceView.model.component.node.definition.id;
|
|
648
|
+
const targetRefId = linkView.targetView.model.component.node.definition.id;
|
|
649
|
+
const nodeType = linkView.model.component.node.type;
|
|
650
|
+
changed.push(
|
|
651
|
+
{
|
|
652
|
+
id: node.definition.id,
|
|
653
|
+
properties: {
|
|
654
|
+
type: nodeType,
|
|
655
|
+
waypoint,
|
|
656
|
+
sourceRefId,
|
|
657
|
+
targetRefId,
|
|
658
|
+
},
|
|
659
|
+
});
|
|
660
|
+
}
|
|
658
661
|
});
|
|
659
662
|
return changed;
|
|
660
663
|
},
|
|
@@ -689,10 +692,11 @@ export default {
|
|
|
689
692
|
});
|
|
690
693
|
return boundariesChanged;
|
|
691
694
|
},
|
|
692
|
-
getContainerProperties(
|
|
695
|
+
getContainerProperties(children) {
|
|
693
696
|
const changed = [];
|
|
694
|
-
|
|
695
|
-
|
|
697
|
+
|
|
698
|
+
children.forEach(model => {
|
|
699
|
+
const defaultData = {
|
|
696
700
|
id: model.component.node.definition.id,
|
|
697
701
|
properties: {
|
|
698
702
|
x: model.get('position').x,
|
|
@@ -701,7 +705,13 @@ export default {
|
|
|
701
705
|
width: model.get('size').width,
|
|
702
706
|
color: model.get('color'),
|
|
703
707
|
},
|
|
704
|
-
}
|
|
708
|
+
};
|
|
709
|
+
|
|
710
|
+
if (model.component.node.definition.$type === 'bpmn:BoundaryEvent') {
|
|
711
|
+
defaultData.properties.attachedToRefId = model.component.node.definition.get('attachedToRef')?.id ?? null;
|
|
712
|
+
}
|
|
713
|
+
|
|
714
|
+
changed.push(defaultData);
|
|
705
715
|
});
|
|
706
716
|
return changed;
|
|
707
717
|
},
|
|
@@ -35,10 +35,18 @@ export default {
|
|
|
35
35
|
});
|
|
36
36
|
},
|
|
37
37
|
inspectorHandler(value, node, setNodeProp) {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
38
|
+
if (node.definition.get('id') !== value['id']) {
|
|
39
|
+
window.ProcessMaker.EventBus.$emit('multiplayer-updateInspectorProperty', {
|
|
40
|
+
id: node.definition.id, key: 'id', value: value.id,
|
|
41
|
+
});
|
|
42
|
+
setNodeProp(node, 'id', value.id);
|
|
43
|
+
}
|
|
44
|
+
if (node.definition.get('name') !== value['name']) {
|
|
45
|
+
window.ProcessMaker.EventBus.$emit('multiplayer-updateInspectorProperty', {
|
|
46
|
+
id: node.definition.id, key: 'name', value: value.name,
|
|
47
|
+
});
|
|
48
|
+
setNodeProp(node, 'name', value.name);
|
|
49
|
+
}
|
|
42
50
|
const currentConfig = JSON.parse(value.config);
|
|
43
51
|
|
|
44
52
|
value['calledElement'] = currentConfig.calledElement;
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<b-avatar-group class="container" v-show="isMultiplayer">
|
|
3
3
|
<template v-for="item in filteredPlayers" >
|
|
4
|
-
<Avatar
|
|
4
|
+
<Avatar
|
|
5
|
+
:badgeBackgroundColor="item.color"
|
|
6
|
+
:imgSrc="item.avatar"
|
|
7
|
+
:userName="item.name"
|
|
8
|
+
:id="item.id"
|
|
9
|
+
:key="item.id"
|
|
10
|
+
/>
|
|
5
11
|
</template>
|
|
6
12
|
</b-avatar-group>
|
|
7
13
|
</template>
|
|
@@ -3,16 +3,18 @@
|
|
|
3
3
|
class="b-avatar rounded-circle"
|
|
4
4
|
:style="{'backgroundColor': generateColorHsl(userName, saturationRange, lightnessRange)}"
|
|
5
5
|
>
|
|
6
|
-
<span v-if="imgSrc" class="b-avatar-img">
|
|
7
|
-
<img :src="imgSrc" :alt=userName>
|
|
6
|
+
<span v-if="imgSrc" class="b-avatar-img" :id="id">
|
|
7
|
+
<img :src="imgSrc" :alt="userName">
|
|
8
8
|
</span>
|
|
9
|
-
<span v-else class="b-avatar-text avatar-initials">
|
|
9
|
+
<span v-else class="b-avatar-text avatar-initials" :id="id">
|
|
10
10
|
<span>
|
|
11
11
|
{{ this.getInitials(userName) }}
|
|
12
12
|
</span>
|
|
13
|
-
|
|
14
13
|
</span>
|
|
15
|
-
<
|
|
14
|
+
<b-tooltip :target="id" triggers="hover">
|
|
15
|
+
{{ userName }}
|
|
16
|
+
</b-tooltip>
|
|
17
|
+
<span v-if="badgeBackgroundColor" class="b-avatar-badge badge-danger"
|
|
16
18
|
:style="{bottom: '0px', right: '0px', backgroundColor: badgeBackgroundColor}"
|
|
17
19
|
/>
|
|
18
20
|
</span>
|
|
@@ -34,6 +36,10 @@ export default {
|
|
|
34
36
|
type: String,
|
|
35
37
|
required: false,
|
|
36
38
|
},
|
|
39
|
+
id: {
|
|
40
|
+
type: String,
|
|
41
|
+
required: true,
|
|
42
|
+
},
|
|
37
43
|
},
|
|
38
44
|
data() {
|
|
39
45
|
return {
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { setEventTimerDefinition } from '@/components/nodes/boundaryTimerEvent';
|
|
2
|
+
|
|
3
|
+
export class InspectorUtils {
|
|
4
|
+
constructor(modeler, store) {
|
|
5
|
+
this.modeler = modeler;
|
|
6
|
+
this.store = store;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
isSpecialProperty(key) {
|
|
10
|
+
const specialProperties = [
|
|
11
|
+
'messageRef', 'signalRef', 'signalPayload', 'gatewayDirection', 'condition', 'allowedUsers', 'allowedGroups',
|
|
12
|
+
];
|
|
13
|
+
return specialProperties.includes(key);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
updateNodeId(oldNodeId, newId) {
|
|
17
|
+
const index = this.getIndex(oldNodeId);
|
|
18
|
+
const yNode = this.yArray.get(index);
|
|
19
|
+
yNode.set('id', newId);
|
|
20
|
+
const node = this.getNodeById(oldNodeId);
|
|
21
|
+
this.store.commit('updateNodeProp', { node, key: 'id', value: newId });
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
handleLoopCharacteristics(node, loopCharacteristics) {
|
|
25
|
+
const parsedLoopCharacteristics = JSON.parse(loopCharacteristics);
|
|
26
|
+
this.modeler.nodeRegistry[node.type].loopCharacteristicsHandler({
|
|
27
|
+
type: node.definition.type,
|
|
28
|
+
'$loopCharactetistics': {
|
|
29
|
+
id: node.id,
|
|
30
|
+
loopCharacteristics: parsedLoopCharacteristics,
|
|
31
|
+
},
|
|
32
|
+
}, node, this.setNodeProp, this.modeler.moddle, this.modeler.definitions, false);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
updateEventCondition(definition, value) {
|
|
36
|
+
definition.get('eventDefinitions')[0].get('condition').body = value;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
updateGatewayDirection(definition, value) {
|
|
40
|
+
definition.set('gatewayDirection', value);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
updateNodeProperty(node, key, value) {
|
|
44
|
+
this.store.commit('updateNodeProp', { node, key, value });
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
updateMessageRef(node, value, extras) {
|
|
48
|
+
let message = this.modeler.definitions.rootElements.find(element => element.id === value);
|
|
49
|
+
|
|
50
|
+
if (!message) {
|
|
51
|
+
message = this.modeler.moddle.create('bpmn:Message', {
|
|
52
|
+
id: value,
|
|
53
|
+
name: extras?.messageName || value,
|
|
54
|
+
});
|
|
55
|
+
this.modeler.definitions.rootElements.push(message);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
node.definition.get('eventDefinitions')[0].messageRef = message;
|
|
59
|
+
|
|
60
|
+
if (extras?.allowedUsers) {
|
|
61
|
+
node.definition.set('allowedUsers', extras.allowedUsers);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if (extras?.allowedGroups) {
|
|
65
|
+
node.definition.set('allowedGroups', extras.allowedGroups);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
updateSignalRef(node, value, extras) {
|
|
70
|
+
let signal = this.modeler.definitions.rootElements.find(element => element.id === value);
|
|
71
|
+
|
|
72
|
+
if (!signal) {
|
|
73
|
+
signal = this.modeler.moddle.create('bpmn:Signal', {
|
|
74
|
+
id: value,
|
|
75
|
+
name: extras?.signalName || value,
|
|
76
|
+
});
|
|
77
|
+
this.modeler.definitions.rootElements.push(signal);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
node.definition.get('eventDefinitions')[0].signalRef = signal;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
updateSignalPayload(node, value) {
|
|
84
|
+
const eventDefinitions = node.definition.get('eventDefinitions');
|
|
85
|
+
const SIGNAL_EVENT_DEFINITION_TYPE = 'bpmn:SignalEventDefinition';
|
|
86
|
+
|
|
87
|
+
eventDefinitions.forEach(definition => {
|
|
88
|
+
if (definition.$type === SIGNAL_EVENT_DEFINITION_TYPE) {
|
|
89
|
+
definition.config = value;
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
updateEventTimerDefinition(node, value) {
|
|
95
|
+
const { type, body } = value;
|
|
96
|
+
const eventDefinitions = setEventTimerDefinition(this.modeler.moddle, node, type, body);
|
|
97
|
+
this.store.commit('updateNodeProp', { node, key: 'eventDefinitions', value: eventDefinitions });
|
|
98
|
+
}
|
|
99
|
+
}
|