@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.
- package/dist/modeler.common.js +301 -80
- package/dist/modeler.common.js.map +1 -1
- package/dist/modeler.umd.js +301 -80
- package/dist/modeler.umd.js.map +1 -1
- package/dist/modeler.umd.min.js +2 -2
- package/dist/modeler.umd.min.js.map +1 -1
- package/package-lock.json +16 -29
- package/package.json +4 -4
- package/public/js/css/vendors~tinymce.3fb13796.css +1 -0
- package/public/js/css/vendors~tinymce.4353f1df.css +1 -0
- package/public/js/vue-form-elements.common.tinymce.js +36 -0
- package/public/js/vue-form-elements.common.tinymce.js.map +1 -0
- package/public/js/vue-form-elements.common.vendors~tinymce.js +67057 -0
- package/public/js/vue-form-elements.common.vendors~tinymce.js.map +1 -0
- package/public/js/vue-form-elements.umd.min.tinymce.js +2 -0
- package/public/js/vue-form-elements.umd.min.tinymce.js.map +1 -0
- package/public/js/vue-form-elements.umd.min.vendors~tinymce.js +2 -0
- package/public/js/vue-form-elements.umd.min.vendors~tinymce.js.map +1 -0
- package/public/js/vue-form-elements.umd.tinymce.js +36 -0
- package/public/js/vue-form-elements.umd.tinymce.js.map +1 -0
- package/public/js/vue-form-elements.umd.vendors~tinymce.js +67057 -0
- package/public/js/vue-form-elements.umd.vendors~tinymce.js.map +1 -0
- package/src/components/crown/utils.js +122 -0
- package/src/components/nodes/dataInputAssociation/dataInputAssociation.vue +4 -1
- package/src/components/nodes/subProcess/SubProcessFormSelect.vue +57 -8
- package/src/mixins/linkConfig.js +4 -3
- package/src/setup/globals.js +6 -1
- package/public/.DS_Store +0 -0
- 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
|
-
@
|
|
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
|
-
|
|
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.
|
|
95
|
-
|
|
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
|
-
|
|
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() {
|
package/src/mixins/linkConfig.js
CHANGED
|
@@ -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,
|
|
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
|
|
247
|
+
this.$nextTick(() => {
|
|
248
|
+
this.setupLinkTools();
|
|
249
|
+
});
|
|
249
250
|
});
|
|
250
251
|
|
|
251
252
|
const targetRef = this.getTargetRef
|
package/src/setup/globals.js
CHANGED
|
@@ -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
|