@processmaker/modeler 1.18.6 → 1.21.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 (29) hide show
  1. package/dist/modeler.common.js +301 -80
  2. package/dist/modeler.common.js.map +1 -1
  3. package/dist/modeler.umd.js +301 -80
  4. package/dist/modeler.umd.js.map +1 -1
  5. package/dist/modeler.umd.min.js +2 -2
  6. package/dist/modeler.umd.min.js.map +1 -1
  7. package/package-lock.json +16 -29
  8. package/package.json +4 -4
  9. package/public/js/css/vendors~tinymce.3fb13796.css +1 -0
  10. package/public/js/css/vendors~tinymce.4353f1df.css +1 -0
  11. package/public/js/vue-form-elements.common.tinymce.js +36 -0
  12. package/public/js/vue-form-elements.common.tinymce.js.map +1 -0
  13. package/public/js/vue-form-elements.common.vendors~tinymce.js +67057 -0
  14. package/public/js/vue-form-elements.common.vendors~tinymce.js.map +1 -0
  15. package/public/js/vue-form-elements.umd.min.tinymce.js +2 -0
  16. package/public/js/vue-form-elements.umd.min.tinymce.js.map +1 -0
  17. package/public/js/vue-form-elements.umd.min.vendors~tinymce.js +2 -0
  18. package/public/js/vue-form-elements.umd.min.vendors~tinymce.js.map +1 -0
  19. package/public/js/vue-form-elements.umd.tinymce.js +36 -0
  20. package/public/js/vue-form-elements.umd.tinymce.js.map +1 -0
  21. package/public/js/vue-form-elements.umd.vendors~tinymce.js +67057 -0
  22. package/public/js/vue-form-elements.umd.vendors~tinymce.js.map +1 -0
  23. package/src/components/crown/utils.js +122 -0
  24. package/src/components/nodes/dataInputAssociation/dataInputAssociation.vue +4 -1
  25. package/src/components/nodes/subProcess/SubProcessFormSelect.vue +57 -8
  26. package/src/mixins/linkConfig.js +4 -3
  27. package/src/setup/globals.js +6 -1
  28. package/public/.DS_Store +0 -0
  29. package/src/.DS_Store +0 -0
@@ -99,3 +99,125 @@ export function removeSourceDefault(node) {
99
99
  node.definition.sourceRef.set('default', null);
100
100
  }
101
101
  }
102
+
103
+ export function getOrFindDataInput(moddle, task, sourceNode) {
104
+ if (sourceNode.$type !== 'bpmn:DataObjectReference' && sourceNode.$type !== 'bpmn:DataStoreReference') {
105
+ throw 'Source node must be a DataObjectReference or bpmn:DataStoreReference, got ' + sourceNode.$type;
106
+ }
107
+ const sourceNodeId = sourceNode.id;
108
+ const dataInputId = `data_input_${sourceNodeId}`;
109
+ // Check if ioSpecification exists
110
+ if (!task.definition.ioSpecification) {
111
+ task.definition.ioSpecification = moddle.create('bpmn:InputOutputSpecification', {
112
+ dataInputs: [],
113
+ dataOutputs: [],
114
+ inputSets: [],
115
+ outputSets: [],
116
+ });
117
+ }
118
+ // Check if dataInput exists
119
+ if (!task.definition.ioSpecification.dataInputs) {
120
+ task.definition.ioSpecification.set('dataInputs', []);
121
+ }
122
+ let dataInput = task.definition.ioSpecification.dataInputs.find(input => input.id === dataInputId);
123
+ if (!dataInput) {
124
+ task.definition.ioSpecification.dataInputs.push(moddle.create('bpmn:DataInput', {
125
+ id: dataInputId,
126
+ isCollection: 'false',
127
+ name: sourceNode.name,
128
+ }));
129
+ task.definition.ioSpecification.set('dataInputs', task.definition.ioSpecification.dataInputs);
130
+ }
131
+ dataInput = task.definition.ioSpecification.dataInputs.find(input => input.id === dataInputId);
132
+ // Check if outputSet exists
133
+ if (!task.definition.ioSpecification.outputSets) {
134
+ task.definition.ioSpecification.set('outputSets', [
135
+ moddle.create('bpmn:OutputSet', {
136
+ dataOutputRefs: [],
137
+ }),
138
+ ]);
139
+ }
140
+ let outputSet = task.definition.ioSpecification.outputSets[0];
141
+ if (!outputSet) {
142
+ task.definition.ioSpecification.set('outputSets', [
143
+ moddle.create('bpmn:OutputSet', {
144
+ dataOutputRefs: [],
145
+ }),
146
+ ]);
147
+ }
148
+ outputSet = task.definition.ioSpecification.outputSets[0];
149
+ // Check if inputSet exists
150
+ if (!task.definition.ioSpecification.inputSets) {
151
+ task.definition.ioSpecification.set('inputSets', [
152
+ moddle.create('bpmn:InputSet', {
153
+ dataInputRefs: [],
154
+ }),
155
+ ]);
156
+ }
157
+ let inputSet = task.definition.ioSpecification.inputSets[0];
158
+ if (!inputSet) {
159
+ task.definition.ioSpecification.set('inputSets', [
160
+ moddle.create('bpmn:InputSet', {
161
+ dataInputRefs: [],
162
+ }),
163
+ ]);
164
+ }
165
+ inputSet = task.definition.ioSpecification.inputSets[0];
166
+ // Check if dataInputRef exists
167
+ const dataInputRef = inputSet.dataInputRefs.find(ref => ref.id === dataInputId);
168
+ if (!dataInputRef) {
169
+ inputSet.dataInputRefs.push(dataInput);
170
+ }
171
+ return dataInput;
172
+ }
173
+
174
+
175
+ export function removeDataInput(task, sourceNode) {
176
+ if (sourceNode.$type !== 'bpmn:DataObjectReference' && sourceNode.$type !== 'bpmn:DataStoreReference') {
177
+ throw 'Source node must be a DataObjectReference or bpmn:DataStoreReference, got ' + sourceNode.$type;
178
+ }
179
+ const sourceNodeId = sourceNode.id;
180
+ const dataInputId = `data_input_${sourceNodeId}`;
181
+ // Check if ioSpecification exists
182
+ if (!task.definition.ioSpecification) {
183
+ return;
184
+ }
185
+ // Check if dataInput exists
186
+ if (!task.definition.ioSpecification.dataInputs) {
187
+ return;
188
+ }
189
+ let dataInput = task.definition.ioSpecification.dataInputs.find(input => input.id === dataInputId);
190
+ if (!dataInput) {
191
+ return;
192
+ }
193
+ // remove dataInput from dataInputs
194
+ pull(task.definition.ioSpecification.dataInputs, dataInput);
195
+ // Check if inputSet exists
196
+ if (!task.definition.ioSpecification.inputSets) {
197
+ return;
198
+ }
199
+ let inputSet = task.definition.ioSpecification.inputSets[0];
200
+ if (!inputSet) {
201
+ return;
202
+ }
203
+ // Check if dataInputRef exists
204
+ const dataInputRef = inputSet.dataInputRefs.find(ref => ref.id === dataInputId);
205
+ if (dataInputRef) {
206
+ pull(inputSet.dataInputRefs, dataInputRef);
207
+ }
208
+ // Remove inputSets if it is empty (without any dataInputRefs)
209
+ if (inputSet.dataInputRefs.length === 0) {
210
+ delete task.definition.ioSpecification.inputSets;
211
+ }
212
+ // Remove outputSets if it is empty (without any dataOutputRefs)
213
+ if (task.definition.ioSpecification.outputSets) {
214
+ let outputSet = task.definition.ioSpecification.outputSets[0];
215
+ if (outputSet && (!outputSet.dataOutputRefs || outputSet.dataOutputRefs.length === 0)) {
216
+ delete task.definition.ioSpecification.outputSets;
217
+ }
218
+ }
219
+ // Remove ioSpecification if it is empty (without outputSets and inputSets)
220
+ if (!task.definition.ioSpecification.inputSets && !task.definition.ioSpecification.outputSets) {
221
+ delete task.definition.ioSpecification;
222
+ }
223
+ }
@@ -21,6 +21,7 @@ import linkConfig from '@/mixins/linkConfig';
21
21
  import get from 'lodash/get';
22
22
  import associationHead from '!!url-loader!@/assets/association-head.svg';
23
23
  import CrownConfig from '@/components/crown/crownConfig/crownConfig';
24
+ import { getOrFindDataInput, removeDataInput } from '@/components/crown/utils';
24
25
  import { pull } from 'lodash';
25
26
 
26
27
  export default {
@@ -99,8 +100,9 @@ export default {
99
100
  },
100
101
  updateDefinitionLinks() {
101
102
  const targetShape = this.shape.getTargetElement();
103
+ const dataInput = getOrFindDataInput(this.moddle, targetShape.component.node, this.sourceNode.definition);
104
+ this.node.definition.set('targetRef', dataInput);
102
105
  this.node.definition.set('sourceRef', [this.sourceNode.definition]);
103
- this.node.definition.set('targetRef', null);
104
106
  targetShape.component.node.definition.set('dataInputAssociations', [this.node.definition]);
105
107
  },
106
108
  },
@@ -127,6 +129,7 @@ export default {
127
129
  this.shape.component = this;
128
130
  },
129
131
  destroyed() {
132
+ removeDataInput(this.targetNode, this.sourceNode.definition);
130
133
  pull(this.targetNode.definition.get('dataInputAssociations'), this.node.definition);
131
134
  },
132
135
  };
@@ -12,7 +12,11 @@
12
12
  optionContent="name"
13
13
  class="p-0 mb-2"
14
14
  validation="required"
15
- @open="loadProcesses"
15
+ @search-change="searchChange"
16
+ :searchable="true"
17
+ :internal-search="false"
18
+ :preserve-search="true"
19
+ :clear-on-select="false"
16
20
  />
17
21
 
18
22
  <form-multi-select
@@ -41,7 +45,6 @@
41
45
  </template>
42
46
 
43
47
  <script>
44
- import store from '@/store';
45
48
  import uniqBy from 'lodash/uniqBy';
46
49
 
47
50
  export default {
@@ -52,18 +55,31 @@ export default {
52
55
  config: {},
53
56
  name: '',
54
57
  loading: false ,
58
+ processes: [],
59
+ selectedProcessInfo: null,
55
60
  };
56
61
  },
57
62
  inheritAttrs: false,
58
63
  props: ['value'],
59
64
  computed: {
60
65
  processList() {
61
- return this.filterValidProcesses(store.getters.globalProcesses) || [];
66
+ const list = this.filterValidProcesses(this.processes) || [];
67
+ if (this.selectedProcessInfo && !list.find(p => p.id === this.selectedProcessInfo.id)) {
68
+ list.push(this.selectedProcessInfo);
69
+ }
70
+ return list;
62
71
  },
63
72
  startEventList() {
64
73
  if (!this.selectedProcess) { return []; }
65
74
  return this.filterValidStartEvents(this.selectedProcess.events);
66
75
  },
76
+ currentProcessId() {
77
+ const match = window.location.href.match(/modeler\/(\d+)/);
78
+ if (match && match[1]) {
79
+ return parseInt(match[1]);
80
+ }
81
+ return null;
82
+ },
67
83
  },
68
84
  watch: {
69
85
  selectedProcess() {
@@ -84,16 +100,19 @@ export default {
84
100
  value: {
85
101
  handler() {
86
102
  this.config = JSON.parse(this.value);
103
+ this.loadSelectedProcessInfo();
87
104
  },
88
105
  immediate: true,
89
106
  },
90
107
  },
91
108
  methods: {
109
+ searchChange(filter) {
110
+ this.loadProcesses(filter);
111
+ },
92
112
  filterValidProcesses(processes) {
93
113
  return processes.filter(process => {
94
- return process.category.is_system == false
95
- && this.filterValidStartEvents(process.events).length > 0;
96
- });
114
+ return this.filterValidStartEvents(process.events).length > 0;
115
+ }).filter(process => process.id !== this.currentProcessId);
97
116
  },
98
117
  filterValidStartEvents(events) {
99
118
  return events.filter(event => {
@@ -151,8 +170,38 @@ export default {
151
170
  containsMultipleProcesses(process) {
152
171
  return uniqBy(process.events, 'ownerProcessId').length > 1;
153
172
  },
154
- loadProcesses() {
155
- store.dispatch('fetchGlobalProcesses');
173
+ loadProcesses(filter) {
174
+ this.loading = true;
175
+
176
+ const params = {
177
+ order_direction: 'asc',
178
+ per_page: 20,
179
+ status: 'all',
180
+ include: 'events,category',
181
+ };
182
+
183
+ if (filter) {
184
+ params.filter = filter;
185
+ }
186
+
187
+ window.ProcessMaker.apiClient.get('processes', {
188
+ params,
189
+ }).then(response => {
190
+ this.loading = false;
191
+ this.processes = response.data.data;
192
+ })
193
+ .catch(() => {
194
+ this.loading = false;
195
+ });
196
+ },
197
+ loadSelectedProcessInfo() {
198
+ if (this.config.processId) {
199
+ window.ProcessMaker.apiClient.get('processes/' + this.config.processId, { params: {
200
+ include: 'events,category',
201
+ } }).then(response => {
202
+ this.selectedProcessInfo = response.data;
203
+ });
204
+ }
156
205
  },
157
206
  },
158
207
  created() {
@@ -214,9 +214,8 @@ export default {
214
214
 
215
215
  const sourceAnchorTool = new linkTools.SourceAnchor({ snap: this.getAnchorPointFunction('source') });
216
216
  const targetAnchorTool = new linkTools.TargetAnchor({ snap: this.getAnchorPointFunction('target') });
217
- const segmentsTool = new linkTools.Segments();
218
217
  const toolsView = new dia.ToolsView({
219
- tools: [verticesTool, segmentsTool, sourceAnchorTool, targetAnchorTool],
218
+ tools: [verticesTool, sourceAnchorTool, targetAnchorTool],
220
219
  });
221
220
 
222
221
  this.shapeView.addTools(toolsView);
@@ -245,7 +244,9 @@ export default {
245
244
  this.setSource(this.sourceShape);
246
245
 
247
246
  this.$once('click', () => {
248
- this.setupLinkTools();
247
+ this.$nextTick(() => {
248
+ this.setupLinkTools();
249
+ });
249
250
  });
250
251
 
251
252
  const targetRef = this.getTargetRef
@@ -19,8 +19,13 @@ mock.onGet(/\/processes\/\d+/).reply((config) => {
19
19
  });
20
20
  }
21
21
 
22
+ const regex = /processes\/(\d+)/g;
23
+ const matches = regex.exec(config.url);
24
+ const requestedId = matches[1];
25
+ const process = mockProcesses.data.find(p => p.id === parseInt(requestedId));
26
+
22
27
  return new Promise((resolve) => {
23
- setTimeout(() => resolve([200, { svg: mockProcessSvg }]), 1000);
28
+ setTimeout(() => resolve([200, { svg: mockProcessSvg, ...process }]), 1000);
24
29
  });
25
30
  });
26
31
 
package/public/.DS_Store DELETED
Binary file
package/src/.DS_Store DELETED
Binary file