/
Util.js
101 lines (93 loc) · 3.08 KB
/
Util.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
export const setExpressionValue = (elem, value, bpmnFactory) => {
delete elem.string;
delete elem.expression;
let valueToSet = value
if (value === undefined) {
valueToSet = ""
}
if (typeof value === "string" && value.includes("${")) {
elem.expression = bpmnFactory.create("activiti:Expression", {
text: "" + valueToSet,
});
} else {
elem.string = bpmnFactory.create("activiti:String", {
text: "" + valueToSet,
});
}
}
export const getExpression = (businessObject, field) => {
const property = field.id;
const defaultValue = field.default;
if (field.directProperty) {
const moduleProperty = businessObject[property]
if (moduleProperty) {
return moduleProperty;
}
return defaultValue;
}
const elem = businessObject.extensionElements?.values.find((e) => {
return e.$type === "activiti:Field" && e.name === property;
});
if (!elem) {
return defaultValue;
}
if (elem.expression) {
return elem.expression.text;
} else if (elem.string) {
return elem.string.text;
} else {
return defaultValue;
}
}
export const setExpression = (bpmnFactory, businessObject, field, value) => {
const property = field.id;
if (field.directProperty) {
return {
[property]: value
}
}
let extensionElements = getExtensionElements(bpmnFactory, businessObject);
let elem = extensionElements.values.find((e) => {
return e.$type === "activiti:Field" && e.name === property;
});
if (!elem) {
elem = bpmnFactory.create("activiti:Field", {
name: property,
});
extensionElements.values.push(elem);
}
setExpressionValue(elem, value, bpmnFactory)
return extensionElements
}
export const createListener = (businessObject, bpmnFactory) => {
let extensionElements = getExtensionElements(bpmnFactory, businessObject);
let listener = extensionElements.values.find((e) => {
return e.$type === "activiti:ExecutionListener";
});
if (!listener) {
listener = bpmnFactory.create("activiti:ExecutionListener");
extensionElements.values.push(listener);
}
return {extensionElements, listener}
}
export const getExtensionElements = (bpmnFactory, businessObject) => {
const extensionElements = businessObject.extensionElements;
let preexistingValues = extensionElements ? extensionElements.values : [];
preexistingValues = preexistingValues.map(preValue => bpmnFactory.create(
preValue.$type,
{
"name": preValue.name,
"string": bpmnFactory.create(
preValue.string.$type,
{
"text": preValue.string.text
}
)
}
))
return bpmnFactory.create('bpmn:ExtensionElements', { values: [ ...preexistingValues ] });
}
export const updateElement = (element, modeling, extensionElements) => {
element = element.labelTarget || element;
return modeling.updateProperties(element, { extensionElements });
}