camunda-bpmn-js 0.12.1 → 0.13.0-alpha.2

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 (61) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/assets/base-modeler.css +2 -1
  3. package/dist/assets/bpmn-js.css +113 -0
  4. package/dist/assets/camunda-platform-modeler.css +2 -1
  5. package/dist/assets/diagram-js.css +82 -78
  6. package/dist/assets/element-templates.css +75 -0
  7. package/dist/assets/properties-panel.css +115 -18
  8. package/dist/base-modeler.development.js +37213 -40850
  9. package/dist/base-modeler.production.min.js +8 -3
  10. package/dist/camunda-cloud-modeler.development.js +39107 -40889
  11. package/dist/camunda-cloud-modeler.production.min.js +8 -3
  12. package/dist/camunda-platform-modeler.development.js +50489 -54168
  13. package/dist/camunda-platform-modeler.production.min.js +8 -3
  14. package/lib/base/Modeler.js +5 -9
  15. package/lib/camunda-cloud/Modeler.js +16 -3
  16. package/lib/camunda-cloud/features/drilldown/index.js +3 -0
  17. package/lib/camunda-cloud/features/modeling/behavior/CleanUpBusinessRuleTaskBehavior.js +60 -57
  18. package/lib/camunda-cloud/features/modeling/behavior/CreateZeebeCallActivityBehavior.js +3 -3
  19. package/lib/camunda-cloud/features/modeling/behavior/FormDefinitionBehavior.js +2 -2
  20. package/lib/camunda-cloud/features/modeling/behavior/RemoveAssignmentDefinitionBehavior.js +51 -0
  21. package/lib/camunda-cloud/features/modeling/behavior/UpdatePropagateAllChildVariablesBehavior.js +60 -33
  22. package/lib/camunda-cloud/features/modeling/behavior/index.js +8 -5
  23. package/lib/camunda-cloud/helper/CalledElementHelper.js +5 -5
  24. package/lib/camunda-cloud/helper/ElementHelper.js +18 -0
  25. package/lib/camunda-cloud/helper/FormsHelper.js +8 -8
  26. package/lib/camunda-cloud/helper/InputOutputHelper.js +2 -6
  27. package/lib/camunda-cloud/helper/Utils.js +10 -0
  28. package/lib/camunda-cloud/helper/ZeebeServiceTaskHelper.js +22 -5
  29. package/lib/camunda-platform/Modeler.js +7 -3
  30. package/lib/camunda-platform/features/modeling/behavior/DeleteErrorEventDefinitionBehavior.js +23 -36
  31. package/lib/camunda-platform/features/modeling/behavior/DeleteRetryTimeCycleBehavior.js +33 -21
  32. package/lib/camunda-platform/features/modeling/behavior/UpdateCamundaExclusiveBehavior.js +14 -11
  33. package/lib/camunda-platform/features/modeling/behavior/UpdateInputOutputBehavior.js +20 -30
  34. package/lib/camunda-platform/features/modeling/behavior/UpdateResultVariableBehavior.js +15 -12
  35. package/lib/camunda-platform/features/modeling/behavior/UserTaskFormsBehavior.js +9 -8
  36. package/lib/camunda-platform/features/modeling/behavior/UserTaskGeneratedFormsBehavior.js +32 -33
  37. package/lib/util/ExtensionElementsUtil.js +59 -0
  38. package/package.json +10 -10
  39. package/styles/base-modeler.css +2 -1
  40. package/styles/camunda-platform-modeler.css +2 -1
  41. package/lib/camunda-cloud/features/properties-provider/ZeebePropertiesProvider.js +0 -201
  42. package/lib/camunda-cloud/features/properties-provider/index.js +0 -11
  43. package/lib/camunda-cloud/features/properties-provider/parts/CallActivityProps.js +0 -90
  44. package/lib/camunda-cloud/features/properties-provider/parts/ErrorProps.js +0 -13
  45. package/lib/camunda-cloud/features/properties-provider/parts/FormProps.js +0 -14
  46. package/lib/camunda-cloud/features/properties-provider/parts/HeadersProps.js +0 -52
  47. package/lib/camunda-cloud/features/properties-provider/parts/InputOutputProps.js +0 -8
  48. package/lib/camunda-cloud/features/properties-provider/parts/MessageProps.js +0 -51
  49. package/lib/camunda-cloud/features/properties-provider/parts/MultiInstanceProps.js +0 -25
  50. package/lib/camunda-cloud/features/properties-provider/parts/SequenceFlowProps.js +0 -149
  51. package/lib/camunda-cloud/features/properties-provider/parts/TaskDefinitionProps.js +0 -135
  52. package/lib/camunda-cloud/features/properties-provider/parts/TimerEventProps.js +0 -77
  53. package/lib/camunda-cloud/features/properties-provider/parts/implementation/ElementReferenceExtensionElementProperty.js +0 -110
  54. package/lib/camunda-cloud/features/properties-provider/parts/implementation/FormDefinition.js +0 -207
  55. package/lib/camunda-cloud/features/properties-provider/parts/implementation/Headers.js +0 -208
  56. package/lib/camunda-cloud/features/properties-provider/parts/implementation/InputOutput.js +0 -274
  57. package/lib/camunda-cloud/features/properties-provider/parts/implementation/InputOutputParameter.js +0 -147
  58. package/lib/camunda-cloud/features/properties-provider/parts/implementation/MultiInstanceLoopCharacteristics.js +0 -176
  59. package/lib/camunda-cloud/features/properties-provider/parts/implementation/OutputParameterToggle.js +0 -97
  60. package/lib/camunda-cloud/features/properties-provider/parts/implementation/TimerDurationDefinition.js +0 -69
  61. package/lib/camunda-cloud/features/properties-provider/parts/implementation/TimerEventDefinition.js +0 -132
@@ -1,149 +0,0 @@
1
- import {
2
- isAny
3
- } from 'bpmn-js/lib/features/modeling/util/ModelingUtil';
4
-
5
- import {
6
- getBusinessObject
7
- } from 'bpmn-js/lib/util/ModelUtil';
8
-
9
- import {
10
- escapeHTML
11
- } from 'bpmn-js-properties-panel/lib/Utils';
12
-
13
- import {
14
- query as domQuery
15
- } from 'min-dom';
16
-
17
- import cmdHelper from 'bpmn-js-properties-panel/lib/helper/CmdHelper';
18
-
19
- import elementHelper from 'bpmn-js-properties-panel/lib/helper/ElementHelper';
20
-
21
- export default function(group, element, bpmnFactory, translate) {
22
- const bo = getBusinessObject(element);
23
-
24
- if (!bo) {
25
- return;
26
- }
27
-
28
- if (!isConditionalSource(element.source)) {
29
- return;
30
- }
31
-
32
- group.entries.push({
33
- id: 'condition',
34
- label: translate('Condition expression'),
35
- html: // expression
36
- `<div class="bpp-row">
37
- <label for="zeebe-condition">
38
- ${escapeHTML(translate('Condition expression'))}
39
- </label>
40
- <div class="bpp-field-wrapper">
41
- <input id="zeebe-condition" type="text" name="condition" />
42
- <button class="action-button clear" data-action="clear" data-show="canClear">
43
- <span>X</span>
44
- </button>
45
- </div>
46
- </div>`,
47
-
48
- get: function(element, propertyName) {
49
-
50
- // read values from xml:
51
- const conditionExpression = bo.conditionExpression;
52
-
53
- const values = {};
54
- let conditionType = '';
55
-
56
- if (conditionExpression) {
57
- conditionType = 'expression';
58
- values.condition = conditionExpression.get('body');
59
- }
60
-
61
- values.conditionType = conditionType;
62
-
63
- return values;
64
- },
65
-
66
- set: function(element, values, containerElement) {
67
- const conditionType = 'expression';
68
- const commands = [];
69
-
70
- const conditionProps = {
71
- body: undefined
72
- };
73
-
74
- const condition = values.condition;
75
- conditionProps.body = condition;
76
-
77
- const update = {
78
- 'conditionExpression': undefined
79
- };
80
-
81
- if (conditionType) {
82
- update.conditionExpression = elementHelper.createElement(
83
- 'bpmn:FormalExpression',
84
- conditionProps,
85
- bo,
86
- bpmnFactory
87
- );
88
-
89
- const source = element.source;
90
-
91
- // if default-flow, remove default-property from source
92
- if (source.businessObject.default === bo) {
93
- commands.push(cmdHelper.updateProperties(source, { 'default': undefined }));
94
- }
95
- }
96
-
97
- commands.push(cmdHelper.updateBusinessObject(element, bo, update));
98
-
99
- return commands;
100
- },
101
-
102
- validate: function(element, values) {
103
- const validationResult = {};
104
-
105
- if (!values.condition && values.conditionType === 'expression') {
106
- validationResult.condition = 'Must provide a value';
107
- }
108
-
109
- return validationResult;
110
- },
111
-
112
- isExpression: function(element, inputNode) {
113
- const conditionType = domQuery('select[name=conditionType]', inputNode);
114
- if (conditionType.selectedIndex >= 0) {
115
- return conditionType.options[conditionType.selectedIndex].value === 'expression';
116
- }
117
- },
118
-
119
- clear: function(element, inputNode) {
120
-
121
- // clear text input
122
- domQuery('input[name=condition]', inputNode).value = '';
123
-
124
- return true;
125
- },
126
-
127
- canClear: function(element, inputNode) {
128
- const input = domQuery('input[name=condition]', inputNode);
129
-
130
- return input.value !== '';
131
- },
132
-
133
- cssClasses: ['bpp-textfield']
134
- });
135
- }
136
-
137
-
138
- // helper //////////////////////////
139
-
140
- const CONDITIONAL_SOURCES = [
141
- 'bpmn:Activity',
142
- 'bpmn:ExclusiveGateway',
143
- 'bpmn:InclusiveGateway',
144
- 'bpmn:ComplexGateway'
145
- ];
146
-
147
- function isConditionalSource(element) {
148
- return isAny(element, CONDITIONAL_SOURCES);
149
- }
@@ -1,135 +0,0 @@
1
- import elementHelper from 'bpmn-js-properties-panel/lib/helper/ElementHelper';
2
-
3
- import cmdHelper from 'bpmn-js-properties-panel/lib/helper/CmdHelper';
4
-
5
- import {
6
- getBusinessObject
7
- } from 'bpmn-js/lib/util/ModelUtil';
8
-
9
- import {
10
- isZeebeServiceTask
11
- } from '../../../helper/ZeebeServiceTaskHelper.js';
12
-
13
- import entryFactory from 'bpmn-js-properties-panel/lib/factory/EntryFactory';
14
-
15
- import extensionElementsHelper from 'bpmn-js-properties-panel/lib/helper/ExtensionElementsHelper';
16
-
17
-
18
- export default function(group, element, bpmnFactory, translate) {
19
-
20
- if (!isZeebeServiceTask(element)) {
21
- return;
22
- }
23
-
24
- function getElements(bo, type, prop) {
25
- const elems = extensionElementsHelper.getExtensionElements(bo, type);
26
- return !prop ? elems : (elems[0] || {})[prop] || [];
27
- }
28
-
29
- function getTaskDefinition(element) {
30
- const bo = getBusinessObject(element);
31
- return (getElements(bo, 'zeebe:TaskDefinition') || [])[0];
32
- }
33
-
34
- group.entries.push(entryFactory.validationAwareTextField(translate, {
35
- id: 'taskDefinitionType',
36
- label: translate('Type'),
37
- modelProperty: 'type',
38
-
39
- getProperty: function(element, node) {
40
- return (getTaskDefinition(element) || {}).type;
41
- },
42
-
43
- setProperty: function(element, values, node) {
44
- const bo = getBusinessObject(element);
45
- const commands = [];
46
-
47
- // create extensionElements
48
- let extensionElements = bo.get('extensionElements');
49
- if (!extensionElements) {
50
- extensionElements = elementHelper.createElement('bpmn:ExtensionElements', { values: [] }, bo, bpmnFactory);
51
- commands.push(cmdHelper.updateProperties(element, { extensionElements: extensionElements }));
52
- }
53
-
54
- // create taskDefinition
55
- let taskDefinition = getTaskDefinition(element);
56
-
57
- if (!taskDefinition) {
58
- taskDefinition = elementHelper.createElement('zeebe:TaskDefinition', { }, extensionElements, bpmnFactory);
59
- commands.push(cmdHelper.addAndRemoveElementsFromList(
60
- element,
61
- extensionElements,
62
- 'values',
63
- 'extensionElements',
64
- [ taskDefinition ],
65
- []
66
- ));
67
- }
68
-
69
- commands.push(cmdHelper.updateBusinessObject(element, taskDefinition, values));
70
- return commands;
71
- },
72
-
73
- validate: function(element, values) {
74
- const bo = getTaskDefinition(element);
75
- let validation = {};
76
- if (bo) {
77
- const {
78
- type
79
- } = values;
80
-
81
- if (!type) {
82
- validation = {
83
- type: translate('Must have a type')
84
- };
85
- }
86
-
87
- }
88
- return validation;
89
- }
90
- }));
91
-
92
- group.entries.push(entryFactory.textField(translate, {
93
- id: 'taskDefinitionRetries',
94
- label: translate('Retries'),
95
- modelProperty: 'retries',
96
-
97
- get: function(element) {
98
- return {
99
- retries: (getTaskDefinition(element) || {}).retries
100
- };
101
- },
102
-
103
- set: function(element, values) {
104
- const bo = getBusinessObject(element);
105
- const commands = [];
106
-
107
- // create extensionElements
108
- let extensionElements = bo.get('extensionElements');
109
- if (!extensionElements) {
110
- extensionElements = elementHelper.createElement('bpmn:ExtensionElements', { values: [] }, bo, bpmnFactory);
111
- commands.push(cmdHelper.updateProperties(element, { extensionElements: extensionElements }));
112
- }
113
-
114
- // create taskDefinition
115
- let taskDefinition = getTaskDefinition(element);
116
-
117
- if (!taskDefinition) {
118
- taskDefinition = elementHelper.createElement('zeebe:TaskDefinition', { }, extensionElements, bpmnFactory);
119
- commands.push(cmdHelper.addAndRemoveElementsFromList(
120
- element,
121
- extensionElements,
122
- 'values',
123
- 'extensionElements',
124
- [ taskDefinition ],
125
- []
126
- ));
127
- }
128
-
129
- commands.push(cmdHelper.updateBusinessObject(element, taskDefinition, values));
130
- return commands;
131
- }
132
-
133
- }));
134
-
135
- }
@@ -1,77 +0,0 @@
1
- import eventDefinitionHelper from 'bpmn-js-properties-panel/lib/helper/EventDefinitionHelper';
2
-
3
- import {
4
- getBusinessObject,
5
- is
6
- } from 'bpmn-js/lib/util/ModelUtil';
7
-
8
- import {
9
- isEventSubProcess
10
- } from 'bpmn-js/lib/util/DiUtil';
11
-
12
- import timerEventDefinitionImpl from './implementation/TimerEventDefinition';
13
-
14
- import timerDurationDefinitionImpl from './implementation/TimerDurationDefinition';
15
-
16
- export default function(group, element, bpmnFactory, translate) {
17
-
18
- const timerEventDefinition = eventDefinitionHelper.getTimerEventDefinition(element);
19
-
20
- const timerOptions = getTimerOptions(element);
21
-
22
- if (!timerEventDefinition) {
23
- return;
24
- }
25
-
26
- if (!timerOptions.length) {
27
- return timerDurationDefinitionImpl(group, bpmnFactory, timerEventDefinition, translate);
28
- }
29
-
30
- timerEventDefinitionImpl(group, bpmnFactory, timerEventDefinition, timerOptions, translate);
31
- }
32
-
33
-
34
- // helper //////////
35
-
36
- const cancelActivity = (element) => {
37
- const bo = getBusinessObject(element);
38
- return bo.cancelActivity;
39
- };
40
-
41
- const isInterrupting = (element) => {
42
- const bo = getBusinessObject(element);
43
- return bo.isInterrupting !== false;
44
- };
45
-
46
- const getTimerOptions = (element) => {
47
- let timerOptions = [];
48
-
49
- const isStartEvent = is(element, 'bpmn:StartEvent');
50
- const isBoundaryEvent = is(element, 'bpmn:BoundaryEvent');
51
-
52
- const hasEventSubprocessParent = isEventSubProcess(element.parent);
53
-
54
- if (isBoundaryEvent || hasEventSubprocessParent) {
55
- timerOptions = [
56
- ...timerOptions,
57
- { value: 'timeDuration', name: 'Duration' }
58
- ];
59
-
60
- if (!cancelActivity(element) && !(hasEventSubprocessParent && isInterrupting(element))) {
61
- timerOptions = [
62
- ...timerOptions,
63
- { value: 'timeCycle', name: 'Cycle' }
64
- ];
65
- }
66
- }
67
-
68
- if (isStartEvent && !hasEventSubprocessParent) {
69
- timerOptions = [
70
- ...timerOptions,
71
- { value: 'timeDate', name: 'Date' },
72
- { value: 'timeCycle', name: 'Cycle' }
73
- ];
74
- }
75
-
76
- return timerOptions;
77
- };
@@ -1,110 +0,0 @@
1
- import entryFactory from 'bpmn-js-properties-panel/lib/factory/EntryFactory';
2
-
3
- import cmdHelper from 'bpmn-js-properties-panel/lib/helper/CmdHelper';
4
-
5
- import elementHelper from 'bpmn-js-properties-panel/lib/helper/ElementHelper';
6
-
7
- import extensionElementsHelper from 'bpmn-js-properties-panel/lib/helper/ExtensionElementsHelper';
8
-
9
- import {
10
- getBusinessObject
11
- } from 'bpmn-js/lib/util/ModelUtil';
12
-
13
- /**
14
- * Create an entry to modify a property of an element which
15
- * is referenced by a event definition.
16
- *
17
- * @param {djs.model.Base} element
18
- * @param {ModdleElement} definition
19
- * @param {BpmnFactory} bpmnFactory
20
- * @param {Function} translate
21
- * @param {Object} options
22
- * @param {string} options.id the id of the entry
23
- * @param {string} options.label the label of the entry
24
- * @param {string} options.referenceProperty the name of referencing property
25
- * @param {string} options.modelProperty the name of property to modify
26
- * @param {string} options.extensionElement the name of the extensionElement to modify
27
- * @param {string} options.shouldValidate a flag indicate whether to validate or not
28
- *
29
- * @return {Array<Object>} return an array containing the entries
30
- */
31
- export default function(element, definition, bpmnFactory, translate, options) {
32
-
33
- const id = options.id || 'element-property';
34
- const label = options.label;
35
- const referenceProperty = options.referenceProperty;
36
- const modelProperty = options.modelProperty || 'name';
37
- const extensionElementKey = options.extensionElement || 'zeebe:Subscription';
38
- const shouldValidate = options.shouldValidate || false;
39
-
40
-
41
- function getElements(bo, type, prop) {
42
- const elems = extensionElementsHelper.getExtensionElements(bo, type);
43
- return !prop ? elems : (elems[0] || {})[prop] || [];
44
- }
45
-
46
- function getExtensionElement(element) {
47
- const bo = getBusinessObject(element);
48
- return (getElements(bo, extensionElementKey) || [])[0];
49
- }
50
-
51
- const entry = entryFactory.textField(translate, {
52
- id: id,
53
- label: label,
54
- modelProperty: modelProperty,
55
-
56
- get: function(element, node) {
57
- const reference = definition.get(referenceProperty);
58
- const props = {};
59
- props[modelProperty] = reference && (getExtensionElement(reference) || {})[modelProperty];
60
- return props;
61
- },
62
-
63
- set: function(element, values, node) {
64
-
65
- const reference = definition.get(referenceProperty);
66
- const bo = getBusinessObject(reference);
67
- reference.businessObject = bo;
68
- const commands = [];
69
- let extensionElements = bo.get('extensionElements');
70
- if (!extensionElements) {
71
- extensionElements = elementHelper.createElement('bpmn:ExtensionElements', { values: [] }, bo, bpmnFactory);
72
- commands.push(cmdHelper.updateProperties(reference, { extensionElements: extensionElements }));
73
- }
74
-
75
- let extensionElement = getExtensionElement(reference);
76
-
77
- if (!extensionElement) {
78
- extensionElement = elementHelper.createElement(extensionElementKey, { }, extensionElements, bpmnFactory);
79
- commands.push(cmdHelper.addAndRemoveElementsFromList(
80
- element,
81
- extensionElements,
82
- 'values',
83
- 'extensionElements',
84
- [ extensionElement ],
85
- []
86
- ));
87
- }
88
-
89
- commands.push(cmdHelper.updateBusinessObject(element, extensionElement, values));
90
- return commands;
91
- },
92
-
93
- hidden: function(element, node) {
94
- return !definition.get(referenceProperty);
95
- }
96
- });
97
-
98
- if (shouldValidate) {
99
- entry.validate = (element, values, node) => {
100
- const reference = definition.get(referenceProperty);
101
- if (reference && !values[modelProperty]) {
102
- const validationErrors = {};
103
- validationErrors[modelProperty] = 'Must provide a value';
104
- return validationErrors;
105
- }
106
- };
107
- }
108
-
109
- return [ entry ];
110
- }
@@ -1,207 +0,0 @@
1
- import entryFactory from 'bpmn-js-properties-panel/lib/factory/EntryFactory';
2
-
3
- import {
4
- getBusinessObject,
5
- is
6
- } from 'bpmn-js/lib/util/ModelUtil';
7
-
8
- import elementHelper from 'bpmn-js-properties-panel/lib/helper/ElementHelper';
9
-
10
- import cmdHelper from 'bpmn-js-properties-panel/lib/helper/CmdHelper';
11
-
12
- import {
13
- createFormDefinition,
14
- createFormId,
15
- createFormKey,
16
- createUserTaskForm,
17
- getFormDefinition,
18
- getUserTaskForm
19
- } from '../../../../helper/FormsHelper';
20
-
21
-
22
- export default function(element, bpmnFactory, translate) {
23
- let entries = [];
24
-
25
- function cleanupUserTaskForm(element) {
26
-
27
- const businessObject = getBusinessObject(element),
28
- rootElement = getRootElement(element),
29
- extensionElements = businessObject.get('extensionElements'),
30
- rootExtensionElements = rootElement.get('extensionElements');
31
-
32
- let commands = [];
33
-
34
- // (1) remove form definition
35
- const formDefinition = getFormDefinition(element);
36
-
37
- if (!formDefinition) {
38
- return commands;
39
- }
40
-
41
- commands.push(cmdHelper.removeElementsFromList(
42
- element,
43
- extensionElements,
44
- 'values',
45
- 'extensionElements',
46
- [ formDefinition ]
47
- ));
48
-
49
- // (2) remove referenced user task form
50
- const userTaskForm = getUserTaskForm(element);
51
-
52
- if (!userTaskForm) {
53
- return commands;
54
- }
55
-
56
- commands.push(cmdHelper.removeElementsFromList(
57
- element,
58
- rootExtensionElements,
59
- 'values',
60
- 'extensionElements',
61
- [ userTaskForm ]
62
- ));
63
-
64
- return commands;
65
- }
66
-
67
- entries.push(entryFactory.textField(translate, {
68
- id: 'form-json',
69
- label: translate('Form JSON Configuration'),
70
- modelProperty: 'formJSON',
71
- get: function(element) {
72
- const userTaskForm = getUserTaskForm(element);
73
-
74
- return {
75
- formJSON: userTaskForm ? userTaskForm.get('body') : ''
76
- };
77
- },
78
- set: function(element, values) {
79
-
80
- const businessObject = getBusinessObject(element),
81
- rootElement = getRootElement(element),
82
- body = values.formJSON;
83
-
84
- let commands = [],
85
- userTaskForm,
86
- formId;
87
-
88
- // (0) cleanup user task form + form definition on empty body
89
- if (!body || body === '') {
90
- return cleanupUserTaskForm(element);
91
- }
92
-
93
- // (1) ensure extension elements
94
- let extensionElements = businessObject.get('extensionElements');
95
-
96
- if (!extensionElements) {
97
- extensionElements = elementHelper.createElement(
98
- 'bpmn:ExtensionElements',
99
- { values: [] },
100
- businessObject,
101
- bpmnFactory
102
- );
103
-
104
- commands.push(
105
- cmdHelper.updateBusinessObject(element, businessObject, {
106
- extensionElements: extensionElements,
107
- })
108
- );
109
- }
110
-
111
- // (2) ensure root element extension elements
112
- let rootExtensionElements = rootElement.get('extensionElements');
113
-
114
- if (!rootExtensionElements) {
115
- rootExtensionElements = elementHelper.createElement(
116
- 'bpmn:ExtensionElements',
117
- { values: [] },
118
- rootElement,
119
- bpmnFactory
120
- );
121
-
122
- commands.push(
123
- cmdHelper.updateBusinessObject(element, rootElement, {
124
- extensionElements: rootExtensionElements,
125
- })
126
- );
127
- }
128
-
129
- // (3) ensure form definition
130
- let formDefinition = getFormDefinition(element);
131
-
132
- if (!formDefinition) {
133
- formId = createFormId();
134
-
135
- formDefinition = createFormDefinition(
136
- {
137
- formKey: createFormKey(formId)
138
- },
139
- extensionElements,
140
- bpmnFactory
141
- );
142
-
143
- commands.push(cmdHelper.addAndRemoveElementsFromList(
144
- element,
145
- extensionElements,
146
- 'values',
147
- 'extensionElements',
148
- [ formDefinition ],
149
- []
150
- ));
151
- }
152
-
153
- formId = resolveFormId(formDefinition.get('formKey'));
154
-
155
- // (4) ensure user task form
156
- userTaskForm = getUserTaskForm(element);
157
-
158
- if (!userTaskForm) {
159
- userTaskForm = createUserTaskForm(
160
- {
161
- id: formId,
162
- body: body
163
- },
164
- rootExtensionElements,
165
- bpmnFactory
166
- );
167
-
168
- commands.push(cmdHelper.addAndRemoveElementsFromList(
169
- element,
170
- rootExtensionElements,
171
- 'values',
172
- 'extensionElements',
173
- [ userTaskForm ],
174
- []
175
- ));
176
- }
177
-
178
- // (5) update user task form
179
- commands.push(cmdHelper.updateBusinessObject(element, userTaskForm, {
180
- body: values.formJSON
181
- }));
182
-
183
- return commands;
184
-
185
- }
186
- }));
187
-
188
- return entries;
189
- }
190
-
191
-
192
- // helpers //////////////////////
193
-
194
- function getRootElement(element) {
195
- var businessObject = getBusinessObject(element),
196
- parent = businessObject;
197
-
198
- while (parent.$parent && !is(parent, 'bpmn:Process')) {
199
- parent = parent.$parent;
200
- }
201
-
202
- return parent;
203
- }
204
-
205
- function resolveFormId(formKey) {
206
- return formKey.split(':')[2];
207
- }