@processmaker/modeler 1.32.0 → 1.33.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.
Files changed (84) hide show
  1. package/README.md +7 -0
  2. package/babel.config.js +1 -2
  3. package/dist/img/inclusive-gateway.0f0afffd.svg +4 -0
  4. package/dist/img/inspector.42e5d40d.svg +5 -0
  5. package/dist/modeler.common.js +2827 -2638
  6. package/dist/modeler.common.js.map +1 -1
  7. package/dist/modeler.umd.js +2827 -2638
  8. package/dist/modeler.umd.js.map +1 -1
  9. package/dist/modeler.umd.min.js +4 -4
  10. package/dist/modeler.umd.min.js.map +1 -1
  11. package/package.json +1 -1
  12. package/src/.DS_Store +0 -0
  13. package/src/NodeIdGenerator.js +16 -1
  14. package/src/assets/inspector.svg +5 -0
  15. package/src/assets/toolpanel/inclusive-gateway.svg +2 -2
  16. package/src/components/controls/controls.vue +2 -11
  17. package/src/components/crown/crownButtons/addLaneAboveButton.vue +3 -1
  18. package/src/components/crown/crownButtons/addLaneBelowButton.vue +3 -1
  19. package/src/components/crown/crownButtons/crownBoundaryEventDropdown.vue +2 -1
  20. package/src/components/crown/crownButtons/genericFlowButton.vue +2 -1
  21. package/src/components/crown/crownButtons/icons/faAlignLeft.js +1 -1
  22. package/src/components/crown/crownMultiselect/crownAlign.vue +3 -0
  23. package/src/components/crown/crownMultiselect/crownMultiselect.vue +4 -2
  24. package/src/components/inspectors/InspectorPanel.vue +26 -3
  25. package/src/components/inspectors/inspector.scss +11 -0
  26. package/src/components/inspectors/inspectorButton/InspectorButton.vue +38 -0
  27. package/src/components/inspectors/inspectorButton/inspectorButton.scss +19 -0
  28. package/src/components/inspectors/process.js +1 -1
  29. package/src/components/modeler/Modeler.vue +59 -5
  30. package/src/components/modeler/ModelerReadonly.vue +31 -0
  31. package/src/components/modeler/Selection.vue +9 -1
  32. package/src/components/nodes/association/index.js +1 -1
  33. package/src/components/nodes/baseStartEvent/index.js +1 -1
  34. package/src/components/nodes/boundaryEvent/index.js +1 -1
  35. package/src/components/nodes/dataInputAssociation/index.js +1 -1
  36. package/src/components/nodes/dataObject/index.js +1 -1
  37. package/src/components/nodes/dataOutputAssociation/index.js +1 -1
  38. package/src/components/nodes/dataStore/index.js +1 -1
  39. package/src/components/nodes/endEvent/index.js +1 -1
  40. package/src/components/nodes/eventBasedGateway/index.js +1 -1
  41. package/src/components/nodes/exclusiveGateway/index.js +1 -1
  42. package/src/components/nodes/gateway/index.js +1 -1
  43. package/src/components/nodes/inclusiveGateway/index.js +1 -1
  44. package/src/components/nodes/intermediateEvent/index.js +1 -1
  45. package/src/components/nodes/intermediateMessageEvent/index.js +1 -1
  46. package/src/components/nodes/intermediateTimerEvent/index.js +1 -1
  47. package/src/components/nodes/manualTask/index.js +1 -1
  48. package/src/components/nodes/messageFlow/index.js +1 -1
  49. package/src/components/nodes/parallelGateway/index.js +1 -1
  50. package/src/components/nodes/pool/index.js +1 -1
  51. package/src/components/nodes/pool/pool.vue +10 -4
  52. package/src/components/nodes/poolLane/index.js +1 -1
  53. package/src/components/nodes/scriptTask/index.js +1 -1
  54. package/src/components/nodes/sequenceFlow/index.js +1 -1
  55. package/src/components/nodes/serviceTask/index.js +1 -1
  56. package/src/components/nodes/subProcess/index.js +1 -1
  57. package/src/components/nodes/task/index.js +1 -1
  58. package/src/components/nodes/textAnnotation/index.js +1 -1
  59. package/src/components/railBottom/controls/Controls.vue +8 -0
  60. package/src/components/railBottom/controls/SubmenuPopper/SubmenuPopper.vue +5 -5
  61. package/src/components/rails/explorer-rail/explorer-rail.scss +11 -0
  62. package/src/components/rails/explorer-rail/explorer.vue +12 -3
  63. package/src/components/rails/explorer-rail/filterNodeTypes/filterNodeTypes.vue +15 -3
  64. package/src/components/rails/explorer-rail/nodeTypesLoop/nodeTypesLoop.vue +6 -1
  65. package/src/components/rails/explorer-rail/pmBlocksLoop/pmBlocksLoop.vue +76 -0
  66. package/src/components/shapeStackUtils.js +1 -1
  67. package/src/components/toolbar/ToolBar.vue +42 -44
  68. package/src/components/toolbar/toolbar.scss +55 -15
  69. package/src/components/topRail/TopRail.vue +1 -0
  70. package/src/components/topRail/validateControl/validateButton/ValidateButton.vue +1 -0
  71. package/src/components/topRail/validateControl/validateIssue/ValidateIssue.vue +1 -0
  72. package/src/components/topRail/validateControl/validatePanel/ValidatePanel.vue +4 -1
  73. package/src/components/topRail/validateControl/validatePanel/validatePanel.scss +1 -1
  74. package/src/mixins/clickAndDrop.js +17 -10
  75. package/src/mixins/highlightConfig.js +29 -5
  76. package/src/mixins/linkConfig.js +26 -6
  77. package/src/nodeTypesStore.js +34 -1
  78. package/src/setup/registerPmBlock.js +0 -0
  79. package/vue.config.js +1 -0
  80. package/dist/.DS_Store +0 -0
  81. package/dist/img/distribute-horizontally-icon.5c513cf4.svg +0 -3
  82. package/dist/img/distribute-vertically-icon.a35fb699.svg +0 -3
  83. package/dist/img/inclusive-gateway.754cb36f.svg +0 -4
  84. package/src/components/controls/rankConstants.js +0 -1
@@ -33,7 +33,7 @@ export default {
33
33
  container: true,
34
34
  config: {
35
35
  initiallyOpen: true,
36
- label: 'Configuration',
36
+ label: 'Properties',
37
37
  icon: 'cog',
38
38
  name: 'inspector-accordion-start-event',
39
39
  },
@@ -34,7 +34,7 @@ export default {
34
34
  container: true,
35
35
  config: {
36
36
  initiallyOpen: true,
37
- label: 'Configuration',
37
+ label: 'Properties',
38
38
  icon: 'cog',
39
39
  name: 'inspector-accordion-boundary-event',
40
40
  },
@@ -15,7 +15,7 @@ export default {
15
15
  container: true,
16
16
  config: {
17
17
  initiallyOpen: true,
18
- label: 'Configuration',
18
+ label: 'Properties',
19
19
  icon: 'cog',
20
20
  name: 'inspector-accordion-data-input-association',
21
21
  },
@@ -40,7 +40,7 @@ export default {
40
40
  container: true,
41
41
  config: {
42
42
  initiallyOpen: true,
43
- label: 'Configuration',
43
+ label: 'Properties',
44
44
  icon: 'cog',
45
45
  name: 'inspector-accordion-data-object',
46
46
  },
@@ -15,7 +15,7 @@ export default {
15
15
  container: true,
16
16
  config: {
17
17
  initiallyOpen: true,
18
- label: 'Configuration',
18
+ label: 'Properties',
19
19
  icon: 'cog',
20
20
  name: 'inspector-accordion-data-output-association',
21
21
  },
@@ -40,7 +40,7 @@ export default {
40
40
  container: true,
41
41
  config: {
42
42
  initiallyOpen: true,
43
- label: 'Configuration',
43
+ label: 'Properties',
44
44
  icon: 'cog',
45
45
  name: 'inspector-accordion-data-store',
46
46
  },
@@ -76,7 +76,7 @@ export default {
76
76
  container: true,
77
77
  config: {
78
78
  initiallyOpen: true,
79
- label: 'Configuration',
79
+ label: 'Properties',
80
80
  icon: 'cog',
81
81
  name: 'inspector-accordion-end-event',
82
82
  },
@@ -34,7 +34,7 @@ export default {
34
34
  container: true,
35
35
  config: {
36
36
  initiallyOpen: true,
37
- label: 'Configuration',
37
+ label: 'Properties',
38
38
  icon: 'cog',
39
39
  name: 'inspector-accordion-event-based-gateway',
40
40
  },
@@ -67,7 +67,7 @@ export default {
67
67
  container: true,
68
68
  config: {
69
69
  initiallyOpen: true,
70
- label: 'Configuration',
70
+ label: 'Properties',
71
71
  icon: 'cog',
72
72
  name: 'inspector-accordion-exlcusive-gateway',
73
73
  },
@@ -32,7 +32,7 @@ export default {
32
32
  container: true,
33
33
  config: {
34
34
  initiallyOpen: true,
35
- label: 'Configuration',
35
+ label: 'Properties',
36
36
  icon: 'cog',
37
37
  name: 'inspector-accordion-gateway',
38
38
  },
@@ -37,7 +37,7 @@ export default {
37
37
  container: true,
38
38
  config: {
39
39
  initiallyOpen: true,
40
- label: 'Configuration',
40
+ label: 'Properties',
41
41
  icon: 'cog',
42
42
  name: 'inspector-accordion-inclusive-gateway-config',
43
43
  },
@@ -34,7 +34,7 @@ export default {
34
34
  container: true,
35
35
  config: {
36
36
  initiallyOpen: true,
37
- label: 'Configuration',
37
+ label: 'Properties',
38
38
  icon: 'cog',
39
39
  name: 'inspector-accordion-intermediate-gateway-config',
40
40
  },
@@ -37,7 +37,7 @@ export default {
37
37
  container: true,
38
38
  config: {
39
39
  initiallyOpen: true,
40
- label: 'Configuration',
40
+ label: 'Properties',
41
41
  icon: 'cog',
42
42
  name: 'inspector-accordion-intermediate-message-event',
43
43
  },
@@ -135,7 +135,7 @@ export default {
135
135
  container: true,
136
136
  config: {
137
137
  initiallyOpen: true,
138
- label: 'Configuration',
138
+ label: 'Properties',
139
139
  icon: 'cog',
140
140
  name: 'inspector-accordion-intermediate-timer-config',
141
141
  },
@@ -41,7 +41,7 @@ export default {
41
41
  container: true,
42
42
  config: {
43
43
  initiallyOpen: true,
44
- label: 'Configuration',
44
+ label: 'Properties',
45
45
  icon: 'cog',
46
46
  name: 'inspector-accordion-manual-task',
47
47
  },
@@ -26,7 +26,7 @@ export default {
26
26
  container: true,
27
27
  config: {
28
28
  initiallyOpen: true,
29
- label: 'Configuration',
29
+ label: 'Properties',
30
30
  icon: 'cog',
31
31
  name: 'inspector-accordion-message-flow',
32
32
  },
@@ -34,7 +34,7 @@ export default {
34
34
  container: true,
35
35
  config: {
36
36
  initiallyOpen: true,
37
- label: 'Configuration',
37
+ label: 'Properties',
38
38
  icon: 'cog',
39
39
  name: 'inspector-accordion-parallel-gateway-config',
40
40
  },
@@ -36,7 +36,7 @@ export default {
36
36
  container: true,
37
37
  config: {
38
38
  initiallyOpen: true,
39
- label: 'Configuration',
39
+ label: 'Properties',
40
40
  icon: 'cog',
41
41
  name: 'inspector-accordion-pool',
42
42
  },
@@ -121,12 +121,18 @@ export default {
121
121
  moveEmbeddedElements(currentElement, toPool) {
122
122
  this.getElementsUnderArea(currentElement, this.graph)
123
123
  .filter(element => element.isEmbeddedIn(currentElement))
124
- .map(element => element.component.node.definition)
125
- .forEach((elementDefinition) => {
126
- pull(this.containingProcess.get('flowElements'), elementDefinition);
127
- toPool.component.containingProcess.get('flowElements').push(elementDefinition);
124
+ .forEach((child) => {
125
+ child.component.node.pool = toPool;
126
+ pull(this.containingProcess.get('flowElements'), child.component.node.definition);
127
+ toPool.component.containingProcess.get('flowElements').push(child.component.node.definition);
128
128
  });
129
129
  },
130
+ moveFlow(element, toPool){
131
+ const elementDefinition = element.component.node.definition;
132
+ /* Remove references to the element from the current process */
133
+ pull(this.containingProcess.get('flowElements'), elementDefinition);
134
+ toPool.component.containingProcess.get('flowElements').push(elementDefinition);
135
+ },
130
136
  moveElement(element, toPool) {
131
137
  const elementDefinition = element.component.node.definition;
132
138
 
@@ -33,7 +33,7 @@ export default {
33
33
  container: true,
34
34
  config: {
35
35
  initiallyOpen: true,
36
- label: 'Configuration',
36
+ label: 'Properties',
37
37
  icon: 'cog',
38
38
  name: 'inspector-accordion-pool-lane',
39
39
  },
@@ -40,7 +40,7 @@ export default {
40
40
  container: true,
41
41
  config: {
42
42
  initiallyOpen: true,
43
- label: 'Configuration',
43
+ label: 'Properties',
44
44
  icon: 'cog',
45
45
  name: 'inspector-accordion-script-task',
46
46
  },
@@ -66,7 +66,7 @@ export default {
66
66
  container: true,
67
67
  config: {
68
68
  initiallyOpen: true,
69
- label: 'Configuration',
69
+ label: 'Properties',
70
70
  icon: 'cog',
71
71
  name: 'inspector-accordion-sequence-flow',
72
72
  },
@@ -23,7 +23,7 @@ export default {
23
23
  container: true,
24
24
  config: {
25
25
  initiallyOpen: true,
26
- label: 'Configuration',
26
+ label: 'Properties',
27
27
  icon: 'cog',
28
28
  name: 'inspector-accordion-service-task',
29
29
  },
@@ -59,7 +59,7 @@ export default {
59
59
  container: true,
60
60
  config: {
61
61
  initiallyOpen: true,
62
- label: 'Configuration',
62
+ label: 'Properties',
63
63
  icon: 'cog',
64
64
  name: 'inspector-accordion-subprocess',
65
65
  },
@@ -87,7 +87,7 @@ export default {
87
87
  container: true,
88
88
  config: {
89
89
  initiallyOpen: true,
90
- label: 'Configuration',
90
+ label: 'Properties',
91
91
  icon: 'cog',
92
92
  name: 'inspector-accordion-task',
93
93
  },
@@ -51,7 +51,7 @@ export default {
51
51
  container: true,
52
52
  config: {
53
53
  initiallyOpen: true,
54
- label: 'Configuration',
54
+ label: 'Properties',
55
55
  icon: 'cog',
56
56
  name: 'inspector-accordion-text-annotation',
57
57
  },
@@ -9,6 +9,7 @@
9
9
  :id="item.id"
10
10
  :key="item.id"
11
11
  @click.stop="onClickHandler($event, item)"
12
+ :data-test="`${item.type}-main`"
12
13
  >
13
14
  <SubmenuPopper
14
15
  :data="item"
@@ -71,8 +72,15 @@ export default ({
71
72
  this.onClickHandler(data.event, data.control);
72
73
  },
73
74
  toggleExplorer() {
75
+ // Remove control click & drop selection when the Add button is clicked
76
+ this.deselect();
77
+ this.popperType = null;
78
+ this.selectedSubmenuItem = null;
79
+
80
+ // Toggle left explorer
74
81
  nodeTypesStore.commit('toggleExplorer');
75
82
  nodeTypesStore.commit('clearFilteredNodes');
83
+ nodeTypesStore.commit('clearFilteredPmBlockNodes');
76
84
  },
77
85
  },
78
86
  });
@@ -15,6 +15,7 @@
15
15
  :class="['control-submenu-list', {'active': selectedItem === item.type}]"
16
16
  :key="key"
17
17
  @click="onClickHandler($event, item)"
18
+ :data-test="item.type"
18
19
  >
19
20
  <inline-svg :src="item.icon" :alt=item.label />
20
21
  <div class="control-submenu-list-label">
@@ -84,10 +85,10 @@ export default ({
84
85
  flex-direction: column;
85
86
  align-items: flex-start;
86
87
  padding: 10px;
87
- width: 255px;
88
+ width: max-content;
88
89
  left: 616px;
89
90
  background: #FFFFFF;
90
- box-shadow: 0px 6px 12px rgba(0, 0, 0, 0.1);
91
+ box-shadow: 0 6px 12px rgba(0, 0, 0, 0.1);
91
92
  border-radius: 4px;
92
93
  list-style: none;
93
94
  &-item {
@@ -105,12 +106,12 @@ export default ({
105
106
  align-items: center;
106
107
  padding: 12px 5px;
107
108
  gap: 8px;
108
- width: 235px;
109
109
  height: 40px;
110
110
  flex: none;
111
111
  order: 0;
112
112
  align-self: stretch;
113
113
  flex-grow: 0;
114
+ border-radius: 4px;
114
115
 
115
116
  &.active {
116
117
  background-color: #DEEBFF;
@@ -128,7 +129,6 @@ export default ({
128
129
  height: 24px;
129
130
  }
130
131
  &-label{
131
- font-family: 'Open Sans';
132
132
  font-style: normal;
133
133
  font-weight: 400;
134
134
  font-size: 14px;
@@ -166,7 +166,7 @@ export default ({
166
166
  color: $primary-white;
167
167
  position: absolute;
168
168
  z-index: 10;
169
- box-shadow: 5px 5px 8px 0px #0000004a;
169
+ box-shadow: 5px 5px 8px 0 #0000004a;
170
170
  padding: 0.5rem;
171
171
  pointer-events: none;
172
172
  width: 40px;
@@ -53,3 +53,14 @@ $secondary-color-nav: #6c757d;
53
53
  }
54
54
  }
55
55
 
56
+ .pm-blocks {
57
+ &__container {
58
+ padding: 0.5rem 1rem;
59
+ p {
60
+ font-size: 13px;
61
+ line-height: 19px;
62
+ color: #000;
63
+ }
64
+ }
65
+ }
66
+
@@ -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,6 +64,7 @@ export default {
59
64
  },
60
65
  clearFilteredObjects() {
61
66
  nodeTypesStore.commit('clearFilteredNodes');
67
+ nodeTypesStore.commit('clearFilteredPmBlockNodes');
62
68
  },
63
69
  },
64
70
  };
@@ -79,13 +85,16 @@ export default {
79
85
  </div>
80
86
  </div>
81
87
  <div class="node-types__container" v-if="tabIndex === 0">
82
- <filter-node-types />
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
- <!-- Here goes the PM Blocks -->
93
+ <div class="pm-blocks__container" v-if="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,21 @@
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 (value.length === 0) nodeTypesStore.commit('clearFilteredNodes');
14
- if (value.length > 0) nodeTypesStore.commit('setFilteredNodeTypes', value);
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
+ }
15
20
  },
16
21
  },
17
22
  computed: {
@@ -20,6 +25,13 @@ export default {
20
25
  const nodeTypes = nodeTypesStore.getters.getNodeTypes;
21
26
  return [...pinnedNodeTypes, ...nodeTypes];
22
27
  },
28
+ pmBlockNodes() {
29
+ const pmBlockNodeTypes = nodeTypesStore.getters.getPmBlockNodeTypes;
30
+ return [...pmBlockNodeTypes];
31
+ },
32
+ placeholder() {
33
+ return this.type === 'pmBlock' ? this.$t('Search PM Blocks') : this.$t('Search Objects');
34
+ },
23
35
  },
24
36
  };
25
37
  </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.stop="onClickHandler($event, object)"
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,76 @@
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
+ <img class="node-types__item__icon" :src="object.icon" :alt="$t(object.label)">
32
+ <span>{{ $t(object.label) }}</span>
33
+ </div>
34
+ </template>
35
+ </div>
36
+ <template v-if="filteredPmBlockNodes.length === 0 && !searchTerm">
37
+ <div class="pmBlocksContainer p-2">
38
+ <template v-for="nodeType in pmBlockNodeTypes">
39
+ <div
40
+ class="pm-block-node-types__item p-2 d-block"
41
+ :key="nodeType.id"
42
+ @click.stop="onClickHandler($event, nodeType)"
43
+ >
44
+ <label>{{ $t(nodeType.label) }}</label>
45
+ <span class="d-block">{{ nodeType.description }}</span>
46
+ </div>
47
+ </template>
48
+ </div>
49
+ </template>
50
+ </div>
51
+ </template>
52
+
53
+ <style lang="scss">
54
+ .pm-block-node-types {
55
+ &__item {
56
+ display: block;
57
+ border-radius: 4px;
58
+ user-select: none;
59
+ margin-bottom: 8px;
60
+ border: 1px solid #b6bfc6;
61
+ &:hover {
62
+ background-color: #EBEEF2;
63
+ }
64
+ label {
65
+ font-size: 14px;
66
+ line-height: 8px;
67
+ font-weight: 600;
68
+ color: #104A75;
69
+ }
70
+ span {
71
+ font-size: 12px;
72
+ color:#6C757D;
73
+ }
74
+ }
75
+ }
76
+ </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
  }