@processmaker/modeler 1.32.0 → 1.34.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/README.md +7 -0
- package/babel.config.js +1 -2
- package/cypress.json +1 -1
- package/dist/img/inclusive-gateway.0f0afffd.svg +4 -0
- package/dist/img/inspector.42e5d40d.svg +5 -0
- package/dist/modeler.common.js +3220 -4350
- package/dist/modeler.common.js.map +1 -1
- package/dist/modeler.umd.js +3220 -4350
- 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/.DS_Store +0 -0
- package/src/ModelerApp.vue +0 -13
- package/src/NodeIdGenerator.js +16 -1
- package/src/assets/inspector.svg +5 -0
- package/src/assets/toolpanel/inclusive-gateway.svg +2 -2
- package/src/components/controls/controls.vue +2 -11
- package/src/components/crown/crownButtons/addLaneAboveButton.vue +3 -1
- package/src/components/crown/crownButtons/addLaneBelowButton.vue +3 -1
- package/src/components/crown/crownButtons/crownBoundaryEventDropdown.vue +2 -1
- package/src/components/crown/crownButtons/genericFlowButton.vue +2 -1
- package/src/components/crown/crownButtons/icons/faAlignBottom.js +3 -3
- package/src/components/crown/crownButtons/icons/faAlignLeft.js +3 -3
- package/src/components/crown/crownButtons/icons/faAlignRight.js +3 -3
- package/src/components/crown/crownButtons/icons/faAlignTop.js +3 -3
- package/src/components/crown/crownButtons/icons/faCenterHorizontally.js +3 -3
- package/src/components/crown/crownButtons/icons/faCenterVertically.js +3 -3
- package/src/components/crown/crownButtons/icons/faDistributeHorizontally.js +3 -3
- package/src/components/crown/crownButtons/icons/faDistributeVertically.js +3 -3
- package/src/components/crown/crownMultiselect/crownAlign.vue +3 -0
- package/src/components/crown/crownMultiselect/crownMultiselect.vue +7 -5
- package/src/components/highlightColors.js +8 -0
- package/src/components/inspectors/InspectorPanel.vue +26 -3
- package/src/components/inspectors/inspector.scss +11 -0
- package/src/components/inspectors/inspectorButton/InspectorButton.vue +38 -0
- package/src/components/inspectors/inspectorButton/inspectorButton.scss +20 -0
- package/src/components/inspectors/process.js +1 -1
- package/src/components/modeler/Modeler.vue +102 -5
- package/src/components/modeler/Selection.vue +9 -1
- package/src/components/nodes/association/index.js +1 -1
- package/src/components/nodes/baseStartEvent/index.js +1 -1
- package/src/components/nodes/boundaryEvent/index.js +1 -1
- package/src/components/nodes/dataInputAssociation/index.js +1 -1
- package/src/components/nodes/dataObject/index.js +1 -1
- package/src/components/nodes/dataOutputAssociation/index.js +1 -1
- package/src/components/nodes/dataStore/index.js +1 -1
- package/src/components/nodes/endEvent/index.js +1 -1
- package/src/components/nodes/eventBasedGateway/index.js +1 -1
- package/src/components/nodes/exclusiveGateway/index.js +1 -1
- package/src/components/nodes/gateway/index.js +1 -1
- package/src/components/nodes/inclusiveGateway/index.js +1 -1
- package/src/components/nodes/index.js +0 -1
- package/src/components/nodes/intermediateEvent/index.js +1 -1
- package/src/components/nodes/intermediateMessageEvent/index.js +1 -1
- package/src/components/nodes/intermediateTimerEvent/index.js +1 -1
- package/src/components/nodes/manualTask/index.js +1 -1
- package/src/components/nodes/messageFlow/index.js +1 -1
- package/src/components/nodes/parallelGateway/index.js +1 -1
- package/src/components/nodes/pool/index.js +1 -1
- package/src/components/nodes/pool/pool.vue +10 -4
- package/src/components/nodes/poolLane/index.js +1 -1
- package/src/components/nodes/scriptTask/index.js +1 -1
- package/src/components/nodes/sequenceFlow/index.js +1 -1
- package/src/components/nodes/serviceTask/index.js +1 -1
- package/src/components/nodes/subProcess/index.js +1 -1
- package/src/components/nodes/task/index.js +1 -1
- package/src/components/nodes/textAnnotation/index.js +1 -1
- package/src/components/railBottom/RailBottom.vue +9 -0
- package/src/components/railBottom/controls/Controls.vue +22 -2
- package/src/components/railBottom/controls/SubmenuPopper/SubmenuPopper.vue +9 -7
- package/src/components/railBottom/controls/controls.scss +2 -0
- package/src/components/railBottom/miniPaperControl/miniPaperControl.scss +1 -0
- package/src/components/railBottom/railBottom.scss +2 -0
- package/src/components/railBottom/zoomControl/ZoomControl.vue +1 -3
- package/src/components/rails/explorer-rail/explorer-rail.scss +11 -0
- package/src/components/rails/explorer-rail/explorer.vue +14 -5
- package/src/components/rails/explorer-rail/filterNodeTypes/filterNodeTypes.vue +18 -3
- package/src/components/rails/explorer-rail/nodeTypesLoop/nodeTypesLoop.vue +6 -1
- package/src/components/rails/explorer-rail/pmBlocksLoop/pmBlocksLoop.vue +86 -0
- package/src/components/shapeStackUtils.js +1 -1
- package/src/components/toolbar/ToolBar.vue +49 -39
- package/src/components/toolbar/toolbar.scss +78 -15
- package/src/components/topRail/TopRail.vue +1 -0
- package/src/components/topRail/validateControl/validateButton/ValidateButton.vue +3 -0
- package/src/components/topRail/validateControl/validateIssue/ValidateIssue.vue +1 -0
- package/src/components/topRail/validateControl/validatePanel/ValidatePanel.vue +4 -1
- package/src/components/topRail/validateControl/validatePanel/validatePanel.scss +1 -1
- package/src/mixins/clickAndDrop.js +17 -10
- package/src/mixins/highlightConfig.js +35 -8
- package/src/mixins/linkConfig.js +33 -6
- package/src/nodeTypesStore.js +36 -1
- package/src/setup/registerPmBlock.js +0 -0
- package/src/store.js +1 -0
- package/vue.config.js +1 -0
- package/dist/.DS_Store +0 -0
- package/dist/img/distribute-horizontally-icon.5c513cf4.svg +0 -3
- package/dist/img/distribute-vertically-icon.a35fb699.svg +0 -3
- package/dist/img/inclusive-gateway.754cb36f.svg +0 -4
- package/src/components/controls/rankConstants.js +0 -1
- package/src/components/modeler/ModelerReadonly.vue +0 -1011
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
:class="['control-item', {'active': selectedItem && (selectedItem.type === item.type)}]"
|
|
9
9
|
:id="item.id"
|
|
10
10
|
:key="item.id"
|
|
11
|
-
@click.stop="
|
|
11
|
+
@click.stop="onClickControlHandler($event, item)"
|
|
12
|
+
:data-test="`${item.type}-main`"
|
|
12
13
|
>
|
|
13
14
|
<SubmenuPopper
|
|
14
15
|
:data="item"
|
|
@@ -22,7 +23,7 @@
|
|
|
22
23
|
<div
|
|
23
24
|
:class="{'control-add': true, 'control-active': explorerOpen}"
|
|
24
25
|
:title="$t('Add')"
|
|
25
|
-
v-b-tooltip.hover
|
|
26
|
+
v-b-tooltip.hover.viewport.d50="{ customClass: 'no-pointer-events' }"
|
|
26
27
|
@click="toggleExplorer"
|
|
27
28
|
>
|
|
28
29
|
<inline-svg :src="plusIcon" />
|
|
@@ -49,6 +50,7 @@ export default ({
|
|
|
49
50
|
data() {
|
|
50
51
|
return {
|
|
51
52
|
plusIcon: require('@/assets/railBottom/plus.svg'),
|
|
53
|
+
currentType: null,
|
|
52
54
|
};
|
|
53
55
|
},
|
|
54
56
|
created() {
|
|
@@ -70,9 +72,27 @@ export default ({
|
|
|
70
72
|
this.selectedSubmenuItem = data.control.type;
|
|
71
73
|
this.onClickHandler(data.event, data.control);
|
|
72
74
|
},
|
|
75
|
+
/**
|
|
76
|
+
* On click on the botton rail control
|
|
77
|
+
* @param {Object} event
|
|
78
|
+
* @param {Object} control
|
|
79
|
+
*/
|
|
80
|
+
onClickControlHandler(event, control) {
|
|
81
|
+
this.selectedSubmenuItem = null;
|
|
82
|
+
this.popperType = this.currentType === control.type ? null : control.type;
|
|
83
|
+
this.onClickHandler(event, control);
|
|
84
|
+
this.currentType = this.popperType;
|
|
85
|
+
},
|
|
73
86
|
toggleExplorer() {
|
|
87
|
+
// Remove control click & drop selection when the Add button is clicked
|
|
88
|
+
this.deselect();
|
|
89
|
+
this.popperType = null;
|
|
90
|
+
this.selectedSubmenuItem = null;
|
|
91
|
+
|
|
92
|
+
// Toggle left explorer
|
|
74
93
|
nodeTypesStore.commit('toggleExplorer');
|
|
75
94
|
nodeTypesStore.commit('clearFilteredNodes');
|
|
95
|
+
nodeTypesStore.commit('clearFilteredPmBlockNodes');
|
|
76
96
|
},
|
|
77
97
|
},
|
|
78
98
|
});
|
|
@@ -4,8 +4,9 @@
|
|
|
4
4
|
trigger="clickToOpen"
|
|
5
5
|
:options="{
|
|
6
6
|
placement: 'top',
|
|
7
|
-
modifiers: { offset: { offset: '0,
|
|
7
|
+
modifiers: { offset: { offset: '0,5px' }, preventOverflow: { escapeWithReference: true } }
|
|
8
8
|
}"
|
|
9
|
+
:append-to-body=true
|
|
9
10
|
:visible-arrow=false
|
|
10
11
|
:force-show="popperType === data.type"
|
|
11
12
|
>
|
|
@@ -15,6 +16,7 @@
|
|
|
15
16
|
:class="['control-submenu-list', {'active': selectedItem === item.type}]"
|
|
16
17
|
:key="key"
|
|
17
18
|
@click="onClickHandler($event, item)"
|
|
19
|
+
:data-test="item.type"
|
|
18
20
|
>
|
|
19
21
|
<inline-svg :src="item.icon" :alt=item.label />
|
|
20
22
|
<div class="control-submenu-list-label">
|
|
@@ -28,7 +30,7 @@
|
|
|
28
30
|
slot="reference"
|
|
29
31
|
:alt=data.label
|
|
30
32
|
:title="$t(data.label)"
|
|
31
|
-
v-b-tooltip.hover
|
|
33
|
+
v-b-tooltip.hover.viewport.d50="{ customClass: 'no-pointer-events' }"
|
|
32
34
|
>
|
|
33
35
|
<div class="control-submenu-options">
|
|
34
36
|
<span />
|
|
@@ -40,7 +42,7 @@
|
|
|
40
42
|
<a v-else class="control-submenu-item"
|
|
41
43
|
:alt=data.label
|
|
42
44
|
:title="$t(data.label)"
|
|
43
|
-
v-b-tooltip.hover
|
|
45
|
+
v-b-tooltip.hover.viewport.d50="{ customClass: 'no-pointer-events' }"
|
|
44
46
|
>
|
|
45
47
|
<inline-svg :src=data.icon />
|
|
46
48
|
</a>
|
|
@@ -87,7 +89,7 @@ export default ({
|
|
|
87
89
|
width: 255px;
|
|
88
90
|
left: 616px;
|
|
89
91
|
background: #FFFFFF;
|
|
90
|
-
box-shadow:
|
|
92
|
+
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.1);
|
|
91
93
|
border-radius: 4px;
|
|
92
94
|
list-style: none;
|
|
93
95
|
&-item {
|
|
@@ -105,12 +107,13 @@ export default ({
|
|
|
105
107
|
align-items: center;
|
|
106
108
|
padding: 12px 5px;
|
|
107
109
|
gap: 8px;
|
|
108
|
-
width: 235px;
|
|
109
110
|
height: 40px;
|
|
110
111
|
flex: none;
|
|
111
112
|
order: 0;
|
|
112
113
|
align-self: stretch;
|
|
113
114
|
flex-grow: 0;
|
|
115
|
+
border-radius: 4px;
|
|
116
|
+
cursor: pointer;
|
|
114
117
|
|
|
115
118
|
&.active {
|
|
116
119
|
background-color: #DEEBFF;
|
|
@@ -128,7 +131,6 @@ export default ({
|
|
|
128
131
|
height: 24px;
|
|
129
132
|
}
|
|
130
133
|
&-label{
|
|
131
|
-
font-family: 'Open Sans';
|
|
132
134
|
font-style: normal;
|
|
133
135
|
font-weight: 400;
|
|
134
136
|
font-size: 14px;
|
|
@@ -166,7 +168,7 @@ export default ({
|
|
|
166
168
|
color: $primary-white;
|
|
167
169
|
position: absolute;
|
|
168
170
|
z-index: 10;
|
|
169
|
-
box-shadow: 5px 5px 8px
|
|
171
|
+
box-shadow: 5px 5px 8px 0 #0000004a;
|
|
170
172
|
padding: 0.5rem;
|
|
171
173
|
pointer-events: none;
|
|
172
174
|
width: 40px;
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.1);
|
|
10
10
|
border-radius: 8px;
|
|
11
11
|
list-style: none;
|
|
12
|
+
overflow-x: auto;
|
|
12
13
|
}
|
|
13
14
|
|
|
14
15
|
&-item {
|
|
@@ -17,6 +18,7 @@
|
|
|
17
18
|
flex-direction: column;
|
|
18
19
|
justify-content: center;
|
|
19
20
|
align-items: center;
|
|
21
|
+
min-width: 40px;
|
|
20
22
|
width: 40px;
|
|
21
23
|
height: 40px;
|
|
22
24
|
margin-right: 12px;
|
|
@@ -4,6 +4,7 @@ import { faTimes } from '@fortawesome/free-solid-svg-icons';
|
|
|
4
4
|
import nodeTypesStore from '@/nodeTypesStore';
|
|
5
5
|
import FilterNodeTypes from '@/components/rails/explorer-rail/filterNodeTypes/filterNodeTypes.vue';
|
|
6
6
|
import NodeTypesLoop from '@/components/rails/explorer-rail/nodeTypesLoop/nodeTypesLoop.vue';
|
|
7
|
+
import PmBlocksLoop from '@/components/rails/explorer-rail/pmBlocksLoop/pmBlocksLoop.vue';
|
|
7
8
|
|
|
8
9
|
export default {
|
|
9
10
|
name: 'ExplorerRail',
|
|
@@ -14,11 +15,15 @@ export default {
|
|
|
14
15
|
nodeTypes: {
|
|
15
16
|
type: Array,
|
|
16
17
|
},
|
|
18
|
+
pmBlockNodes: {
|
|
19
|
+
type: Array,
|
|
20
|
+
},
|
|
17
21
|
},
|
|
18
22
|
components: {
|
|
19
23
|
FontAwesomeIcon,
|
|
20
24
|
FilterNodeTypes,
|
|
21
25
|
NodeTypesLoop,
|
|
26
|
+
PmBlocksLoop,
|
|
22
27
|
},
|
|
23
28
|
data() {
|
|
24
29
|
return {
|
|
@@ -59,13 +64,14 @@ export default {
|
|
|
59
64
|
},
|
|
60
65
|
clearFilteredObjects() {
|
|
61
66
|
nodeTypesStore.commit('clearFilteredNodes');
|
|
67
|
+
nodeTypesStore.commit('clearFilteredPmBlockNodes');
|
|
62
68
|
},
|
|
63
69
|
},
|
|
64
70
|
};
|
|
65
71
|
</script>
|
|
66
72
|
|
|
67
73
|
<template>
|
|
68
|
-
<div id="explorer-rail" data-test="explorer-rail" v-
|
|
74
|
+
<div id="explorer-rail" data-test="explorer-rail" v-show="explorerOpen">
|
|
69
75
|
<div class="rail-menu">
|
|
70
76
|
<b-tabs class="tabs--container" :no-nav-style="true">
|
|
71
77
|
<template v-for="tab in tabs">
|
|
@@ -78,14 +84,17 @@ export default {
|
|
|
78
84
|
<font-awesome-icon :icon="faTimes()"/>
|
|
79
85
|
</div>
|
|
80
86
|
</div>
|
|
81
|
-
<div class="node-types__container" v-
|
|
82
|
-
<filter-node-types />
|
|
87
|
+
<div class="node-types__container" v-show="tabIndex === 0">
|
|
88
|
+
<filter-node-types :type="'object'"/>
|
|
83
89
|
<node-types-loop
|
|
84
90
|
v-on="$listeners"
|
|
85
91
|
/>
|
|
86
92
|
</div>
|
|
87
|
-
<div class="pm-blocks__container">
|
|
88
|
-
|
|
93
|
+
<div class="pm-blocks__container" v-show="tabIndex === 1">
|
|
94
|
+
<filter-node-types :type="'pmBlock'"/>
|
|
95
|
+
<pm-blocks-loop
|
|
96
|
+
v-on="$listeners"
|
|
97
|
+
/>
|
|
89
98
|
</div>
|
|
90
99
|
</div>
|
|
91
100
|
</template>
|
|
@@ -2,16 +2,24 @@
|
|
|
2
2
|
import nodeTypesStore from '@/nodeTypesStore';
|
|
3
3
|
export default {
|
|
4
4
|
name: 'FilterNodeTypes',
|
|
5
|
+
props: ['type'],
|
|
5
6
|
data() {
|
|
6
7
|
return {
|
|
7
8
|
searchTerm: '',
|
|
8
|
-
placeholder: this.$t('Seach Objects'),
|
|
9
9
|
};
|
|
10
10
|
},
|
|
11
11
|
watch: {
|
|
12
12
|
searchTerm(value) {
|
|
13
|
-
if (
|
|
14
|
-
|
|
13
|
+
if (this.type === 'pmBlock') {
|
|
14
|
+
if (value.length === 0) nodeTypesStore.commit('clearFilteredPmBlockNodes');
|
|
15
|
+
if (value.length > 0) nodeTypesStore.commit('setFilteredPmBlockNodeTypes', value);
|
|
16
|
+
} else {
|
|
17
|
+
if (value.length === 0) nodeTypesStore.commit('clearFilteredNodes');
|
|
18
|
+
if (value.length > 0) nodeTypesStore.commit('setFilteredNodeTypes', value);
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
type(newValue, oldValue) {
|
|
22
|
+
this.searchTerm = oldValue === newValue ? this.searchTerm: '';
|
|
15
23
|
},
|
|
16
24
|
},
|
|
17
25
|
computed: {
|
|
@@ -20,6 +28,13 @@ export default {
|
|
|
20
28
|
const nodeTypes = nodeTypesStore.getters.getNodeTypes;
|
|
21
29
|
return [...pinnedNodeTypes, ...nodeTypes];
|
|
22
30
|
},
|
|
31
|
+
pmBlockNodes() {
|
|
32
|
+
const pmBlockNodeTypes = nodeTypesStore.getters.getPmBlockNodeTypes;
|
|
33
|
+
return [...pmBlockNodeTypes];
|
|
34
|
+
},
|
|
35
|
+
placeholder() {
|
|
36
|
+
return this.type === 'pmBlock' ? this.$t('Search PM Blocks') : this.$t('Search Objects');
|
|
37
|
+
},
|
|
23
38
|
},
|
|
24
39
|
};
|
|
25
40
|
</script>
|
|
@@ -22,9 +22,11 @@ export default {
|
|
|
22
22
|
return !!this.pinnedObjects.find(obj => obj.type === type);
|
|
23
23
|
},
|
|
24
24
|
unPin(object) {
|
|
25
|
+
this.deselect();
|
|
25
26
|
return nodeTypesStore.dispatch('removeUserPinnedObject', object);
|
|
26
27
|
},
|
|
27
28
|
addPin(object) {
|
|
29
|
+
this.deselect();
|
|
28
30
|
return nodeTypesStore.dispatch('addUserPinnedObject', object);
|
|
29
31
|
},
|
|
30
32
|
},
|
|
@@ -55,10 +57,11 @@ export default {
|
|
|
55
57
|
<template v-for="object in filteredNodes">
|
|
56
58
|
<div
|
|
57
59
|
class="node-types__item"
|
|
60
|
+
:data-test="object.type"
|
|
58
61
|
:key="object.id"
|
|
59
62
|
@mouseover="showPin = true"
|
|
60
63
|
@mouseleave="showPin = false"
|
|
61
|
-
@click.
|
|
64
|
+
@click.self="onClickHandler($event, object)"
|
|
62
65
|
>
|
|
63
66
|
<img class="node-types__item__icon" :src="object.icon" :alt="$t(object.label)">
|
|
64
67
|
<span>{{ $t(object.label) }}</span>
|
|
@@ -85,6 +88,7 @@ export default {
|
|
|
85
88
|
<template v-for="pinnedObject in pinnedObjects">
|
|
86
89
|
<div
|
|
87
90
|
class="node-types__item"
|
|
91
|
+
:data-test="pinnedObject.type"
|
|
88
92
|
:key="pinnedObject.id"
|
|
89
93
|
@mouseover="showPin = true"
|
|
90
94
|
@mouseleave="showPin = false"
|
|
@@ -106,6 +110,7 @@ export default {
|
|
|
106
110
|
<template v-for="nodeType in unpinnedObjects">
|
|
107
111
|
<div
|
|
108
112
|
class="node-types__item"
|
|
113
|
+
:data-test="nodeType.type"
|
|
109
114
|
:key="nodeType.id"
|
|
110
115
|
@mouseover="showPin = true"
|
|
111
116
|
@mouseleave="showPin = false"
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import nodeTypesStore from '@/nodeTypesStore';
|
|
3
|
+
import clickAndDrop from '@/mixins/clickAndDrop';
|
|
4
|
+
|
|
5
|
+
export default {
|
|
6
|
+
name: 'PmBlocksLoop',
|
|
7
|
+
mixins: [clickAndDrop],
|
|
8
|
+
computed: {
|
|
9
|
+
pmBlockNodeTypes() {
|
|
10
|
+
return nodeTypesStore.getters.getPmBlockNodeTypes;
|
|
11
|
+
},
|
|
12
|
+
filteredPmBlockNodes() {
|
|
13
|
+
return nodeTypesStore.getters.getFilteredPmBlockNodeTypes;
|
|
14
|
+
},
|
|
15
|
+
searchTerm() {
|
|
16
|
+
return nodeTypesStore.getters.getSearchTerm;
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
</script>
|
|
21
|
+
|
|
22
|
+
<template>
|
|
23
|
+
<div id="pmBlockNodeTypesList">
|
|
24
|
+
<div id="filteredPmBlockNodes-container" v-if="filteredPmBlockNodes.length > 0">
|
|
25
|
+
<template v-for="object in filteredPmBlockNodes">
|
|
26
|
+
<div
|
|
27
|
+
class="node-types__item"
|
|
28
|
+
:key="object.id"
|
|
29
|
+
@click.stop="onClickHandler($event, object)"
|
|
30
|
+
>
|
|
31
|
+
<div class="d-flex">
|
|
32
|
+
<i v-if="!object.svgIcon" class="node-types__item__icon" :class="object.customIcon"/>
|
|
33
|
+
<img v-else class="node-types__item__icon" :src="object.svgIcon" :alt="$t(object.label)">
|
|
34
|
+
<label>{{ $t(object.label) }}</label>
|
|
35
|
+
</div>
|
|
36
|
+
</div>
|
|
37
|
+
</template>
|
|
38
|
+
</div>
|
|
39
|
+
<template v-if="filteredPmBlockNodes.length === 0 && !searchTerm">
|
|
40
|
+
<div class="pmBlocksContainer p-2">
|
|
41
|
+
<template v-for="nodeType in pmBlockNodeTypes">
|
|
42
|
+
<div
|
|
43
|
+
class="pm-block-node-types__item p-2 d-block"
|
|
44
|
+
:key="nodeType.id"
|
|
45
|
+
@click.stop="onClickHandler($event, nodeType)"
|
|
46
|
+
>
|
|
47
|
+
<div class="d-flex">
|
|
48
|
+
<i v-if="!nodeType.svgIcon" class="node-types__item__icon" :class="nodeType.customIcon"/>
|
|
49
|
+
<img v-else class="node-types__item__icon" :src="nodeType.svgIcon" :alt="$t(nodeType.label)">
|
|
50
|
+
<label>{{ $t(nodeType.label) }}</label>
|
|
51
|
+
</div>
|
|
52
|
+
</div>
|
|
53
|
+
</template>
|
|
54
|
+
</div>
|
|
55
|
+
</template>
|
|
56
|
+
</div>
|
|
57
|
+
</template>
|
|
58
|
+
|
|
59
|
+
<style lang="scss">
|
|
60
|
+
.pm-block-node-types {
|
|
61
|
+
&__item {
|
|
62
|
+
display: block;
|
|
63
|
+
padding: 0.5rem 0.3rem;
|
|
64
|
+
border-radius: 4px;
|
|
65
|
+
user-select: none;
|
|
66
|
+
margin-bottom: 8px;
|
|
67
|
+
&:hover {
|
|
68
|
+
background-color: #EBEEF2;
|
|
69
|
+
}
|
|
70
|
+
&__icon {
|
|
71
|
+
width: 1.5rem;
|
|
72
|
+
height: 1.5rem;
|
|
73
|
+
}
|
|
74
|
+
label {
|
|
75
|
+
max-width: 225px;
|
|
76
|
+
font-size: 14px;
|
|
77
|
+
line-height: 15px;
|
|
78
|
+
}
|
|
79
|
+
span {
|
|
80
|
+
margin-left: 1.6rem;
|
|
81
|
+
font-size: 13px;
|
|
82
|
+
color:#6C757D;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
</style>
|
|
@@ -26,7 +26,7 @@ function isNotLane(shape) {
|
|
|
26
26
|
function bringPoolToFront(poolShape) {
|
|
27
27
|
bringShapeToFront(poolShape);
|
|
28
28
|
|
|
29
|
-
const hasLanes = poolShape.component.node.definition.processRef.laneSets[0];
|
|
29
|
+
const hasLanes = poolShape.component.node.definition.processRef && poolShape.component.node.definition.processRef.laneSets[0];
|
|
30
30
|
if (!hasLanes) {
|
|
31
31
|
return;
|
|
32
32
|
}
|
|
@@ -8,49 +8,50 @@
|
|
|
8
8
|
<TopRail
|
|
9
9
|
:validation-errors="validationErrors"
|
|
10
10
|
:warnings="warnings"
|
|
11
|
-
|
|
11
|
+
>
|
|
12
|
+
<component
|
|
13
|
+
:is="component.button"
|
|
14
|
+
v-for="(component, index) in validationBar"
|
|
15
|
+
:key="`validation-status-${index}`"
|
|
16
|
+
/>
|
|
17
|
+
</TopRail>
|
|
12
18
|
|
|
13
|
-
<
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
v-b-tooltip.hover
|
|
21
|
-
:title="panelsCompressed ? $t('Show Menus') : $t('Hide Menus')"
|
|
22
|
-
>
|
|
23
|
-
<font-awesome-icon :icon="panelsCompressed ? expandIcon : compressIcon" />
|
|
24
|
-
</b-button>
|
|
25
|
-
</div>
|
|
26
|
-
<div class="btn-group btn-group-sm" role="group" aria-label="Publish controls">
|
|
19
|
+
<div
|
|
20
|
+
class="d-flex align-items-center btn-group btn-group-sm"
|
|
21
|
+
role="group"
|
|
22
|
+
aria-label="Publish controls"
|
|
23
|
+
data-cy="publish-control"
|
|
24
|
+
>
|
|
25
|
+
<div class="divider" />
|
|
27
26
|
<template v-if="isVersionsInstalled">
|
|
28
|
-
<div
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
27
|
+
<div
|
|
28
|
+
class="toolbar-item toolbar-version-status"
|
|
29
|
+
data-cy="publish-version-status"
|
|
30
|
+
>
|
|
31
|
+
{{ versionStatus }}
|
|
32
32
|
</div>
|
|
33
|
-
<div
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
33
|
+
<div
|
|
34
|
+
class="toolbar-item toolbar-loading-status"
|
|
35
|
+
data-cy="publish-loading-status"
|
|
36
|
+
>
|
|
37
37
|
<span>
|
|
38
|
-
|
|
38
|
+
{{ loadingStatus }}
|
|
39
39
|
</span>
|
|
40
|
+
<font-awesome-icon class="text-success" :icon="loadingIcon" :spin="isLoading" />
|
|
40
41
|
</div>
|
|
41
42
|
<a
|
|
42
|
-
class="btn btn-sm btn-primary btn-autosave text-uppercase mx-2"
|
|
43
|
-
data-test="publish-btn"
|
|
44
43
|
:title="$t('Publish')"
|
|
45
44
|
@click="$emit('saveBpmn')"
|
|
45
|
+
class="toolbar-item toolbar-publish"
|
|
46
|
+
data-cy="publish-btn"
|
|
46
47
|
>
|
|
47
48
|
{{ $t('Publish') }}
|
|
48
49
|
</a>
|
|
49
50
|
<a
|
|
50
|
-
class="btn btn-sm btn-link toolbar-item btn-autosave text-black text-uppercase"
|
|
51
|
-
data-test="close-btn"
|
|
52
51
|
:title="$t('Close')"
|
|
53
52
|
@click="$emit('close')"
|
|
53
|
+
class="toolbar-item toolbar-close"
|
|
54
|
+
data-cy="close-btn"
|
|
54
55
|
>
|
|
55
56
|
{{ $t('Close') }}
|
|
56
57
|
</a>
|
|
@@ -60,18 +61,20 @@
|
|
|
60
61
|
@navigate="onNavigate"
|
|
61
62
|
@show="onShow"
|
|
62
63
|
@hide="onHide"
|
|
64
|
+
data-cy="ellipsis-menu"
|
|
63
65
|
/>
|
|
64
66
|
</template>
|
|
65
|
-
<
|
|
67
|
+
<button
|
|
66
68
|
v-else
|
|
67
|
-
class="
|
|
69
|
+
class="save-button"
|
|
68
70
|
data-test="mini-map-btn"
|
|
69
71
|
v-b-tooltip.hover
|
|
70
72
|
:title="$t('Save')"
|
|
71
73
|
@click="$emit('saveBpmn')"
|
|
72
74
|
>
|
|
73
75
|
<font-awesome-icon :icon="saveIcon" />
|
|
74
|
-
|
|
76
|
+
<span class="save-button-label">{{ $t('Save') }}</span>
|
|
77
|
+
</button>
|
|
75
78
|
</div>
|
|
76
79
|
</div>
|
|
77
80
|
</div>
|
|
@@ -83,15 +86,12 @@ import { faCompress, faExpand, faMapMarked, faMinus, faPlus, faRedo, faUndo, faS
|
|
|
83
86
|
import undoRedoStore from '@/undoRedoStore';
|
|
84
87
|
import Breadcrumb from '@/components/toolbar/breadcrumb/Breadcrumb';
|
|
85
88
|
import TopRail from '@/components/topRail/TopRail.vue';
|
|
86
|
-
import AlignButtons from '@/components/toolbar/alignButtons/AlignButtons';
|
|
87
|
-
|
|
88
89
|
export default {
|
|
89
90
|
name: 'tool-bar',
|
|
90
91
|
components: {
|
|
91
92
|
Breadcrumb,
|
|
92
93
|
TopRail,
|
|
93
94
|
FontAwesomeIcon,
|
|
94
|
-
AlignButtons,
|
|
95
95
|
},
|
|
96
96
|
props: [
|
|
97
97
|
'canvasDragPosition',
|
|
@@ -103,6 +103,7 @@ export default {
|
|
|
103
103
|
'validationErrors',
|
|
104
104
|
'warnings',
|
|
105
105
|
'xmlManager',
|
|
106
|
+
'validationBar',
|
|
106
107
|
],
|
|
107
108
|
watch: {
|
|
108
109
|
miniMapOpen(isOpen) {
|
|
@@ -163,13 +164,18 @@ export default {
|
|
|
163
164
|
spinner: faSpinner,
|
|
164
165
|
ellipsisMenuActions: [
|
|
165
166
|
{
|
|
166
|
-
value: '
|
|
167
|
-
content: this.$t('
|
|
167
|
+
value: 'save-template',
|
|
168
|
+
content: this.$t('Save as Template'),
|
|
168
169
|
icon: '',
|
|
169
170
|
},
|
|
170
171
|
{
|
|
171
|
-
value: 'save-
|
|
172
|
-
content: this.$t('Save as
|
|
172
|
+
value: 'save-pm-block',
|
|
173
|
+
content: this.$t('Save as PM Block'),
|
|
174
|
+
icon: '',
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
value: 'discard-draft',
|
|
178
|
+
content: this.$t('Discard Draft'),
|
|
173
179
|
icon: '',
|
|
174
180
|
},
|
|
175
181
|
],
|
|
@@ -202,6 +208,9 @@ export default {
|
|
|
202
208
|
case 'save-template':
|
|
203
209
|
this.$emit('publishTemplate');
|
|
204
210
|
break;
|
|
211
|
+
case 'save-pm-block':
|
|
212
|
+
this.$emit('publishPmBlock');
|
|
213
|
+
break;
|
|
205
214
|
default:
|
|
206
215
|
break;
|
|
207
216
|
}
|
|
@@ -220,7 +229,8 @@ export default {
|
|
|
220
229
|
},
|
|
221
230
|
},
|
|
222
231
|
mounted() {
|
|
223
|
-
|
|
232
|
+
const childProcess = this.$root.$children[0]?.process;
|
|
233
|
+
if (childProcess?.is_template) {
|
|
224
234
|
const indexOfActions = this.ellipsisMenuActions.findIndex(object => {
|
|
225
235
|
return object.value === 'save-template';
|
|
226
236
|
});
|