camunda-bpmn-js 3.4.0 → 3.5.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.
@@ -51905,7 +51905,7 @@
51905
51905
 
51906
51906
  // during connect user might move mouse out of canvas
51907
51907
  // https://github.com/bpmn-io/bpmn-js/issues/1033
51908
- if (getRootElement$4(source) && !getRootElement$4(target)) {
51908
+ if (getRootElement$3(source) && !getRootElement$3(target)) {
51909
51909
  return false;
51910
51910
  }
51911
51911
 
@@ -52017,7 +52017,7 @@
52017
52017
  *
52018
52018
  * @return {Element|null}
52019
52019
  */
52020
- function getRootElement$4(element) {
52020
+ function getRootElement$3(element) {
52021
52021
  return getParent$1(element, 'bpmn:Process') || getParent$1(element, 'bpmn:Collaboration');
52022
52022
  }
52023
52023
 
@@ -110850,7 +110850,7 @@
110850
110850
 
110851
110851
 
110852
110852
  function getVariablesForElement(element, additionalExtractors = []) {
110853
- return getVariablesForScope$1(getScope$2(element), getRootElement$3(element), additionalExtractors);
110853
+ return getVariablesForScope$1(getScope$2(element), getRootElement$2(element), additionalExtractors);
110854
110854
  }
110855
110855
 
110856
110856
  function getScope$2(element) {
@@ -110863,7 +110863,7 @@
110863
110863
  return bo.id;
110864
110864
  }
110865
110865
 
110866
- function getRootElement$3(element) {
110866
+ function getRootElement$2(element) {
110867
110867
  const businessObject = getBusinessObject$1(element);
110868
110868
 
110869
110869
  if (is$4(businessObject, 'bpmn:Participant')) {
@@ -113555,16 +113555,16 @@
113555
113555
  });
113556
113556
  }
113557
113557
  function isMessageSupported$1(element) {
113558
- return is$6(element, 'bpmn:ReceiveTask') || isAny$1(element, ['bpmn:StartEvent', 'bpmn:EndEvent', 'bpmn:IntermediateThrowEvent', 'bpmn:BoundaryEvent', 'bpmn:IntermediateCatchEvent']) && !!getMessageEventDefinition$1(element);
113558
+ return is$6(element, 'bpmn:ReceiveTask') || isAny$1(element, ['bpmn:StartEvent', 'bpmn:EndEvent', 'bpmn:IntermediateThrowEvent', 'bpmn:BoundaryEvent', 'bpmn:IntermediateCatchEvent']) && !!getMessageEventDefinition$2(element);
113559
113559
  }
113560
- function getMessageEventDefinition$1(element) {
113560
+ function getMessageEventDefinition$2(element) {
113561
113561
  if (is$6(element, 'bpmn:ReceiveTask')) {
113562
113562
  return getBusinessObject$2(element);
113563
113563
  }
113564
113564
  return getEventDefinition$1(element, 'bpmn:MessageEventDefinition');
113565
113565
  }
113566
113566
  function getMessage$1(element) {
113567
- const messageEventDefinition = getMessageEventDefinition$1(element);
113567
+ const messageEventDefinition = getMessageEventDefinition$2(element);
113568
113568
  return messageEventDefinition && messageEventDefinition.get('messageRef');
113569
113569
  }
113570
113570
  function getLinkEventDefinition(element) {
@@ -114595,7 +114595,7 @@
114595
114595
  const bpmnFactory = useService('bpmnFactory');
114596
114596
  const commandStack = useService('commandStack');
114597
114597
  const translate = useService('translate');
114598
- const messageEventDefinition = getMessageEventDefinition$1(element);
114598
+ const messageEventDefinition = getMessageEventDefinition$2(element);
114599
114599
  const getValue = () => {
114600
114600
  const message = getMessage$1(element);
114601
114601
  if (message) {
@@ -116102,7 +116102,7 @@
116102
116102
  function isZeebeServiceTask(element) {
116103
116103
  if (!is$6(element, 'zeebe:ZeebeServiceTask')) return false;
116104
116104
  if (is$6(element, 'bpmn:EndEvent') || is$6(element, 'bpmn:IntermediateThrowEvent')) {
116105
- return !!getMessageEventDefinition$1(element);
116105
+ return !!getMessageEventDefinition$2(element);
116106
116106
  }
116107
116107
 
116108
116108
  // BusinessRuleTask and ScriptTask are ServiceTasks only if they have a TaskDefinition
@@ -116113,10 +116113,10 @@
116113
116113
  return true;
116114
116114
  }
116115
116115
  function isMessageEndEvent(element) {
116116
- return is$6(element, 'bpmn:EndEvent') && !!getMessageEventDefinition$1(element);
116116
+ return is$6(element, 'bpmn:EndEvent') && !!getMessageEventDefinition$2(element);
116117
116117
  }
116118
116118
  function isMessageThrowEvent(element) {
116119
- return is$6(element, 'bpmn:IntermediateThrowEvent') && !!getMessageEventDefinition$1(element);
116119
+ return is$6(element, 'bpmn:IntermediateThrowEvent') && !!getMessageEventDefinition$2(element);
116120
116120
  }
116121
116121
 
116122
116122
  // helper ////////////////
@@ -116796,7 +116796,7 @@
116796
116796
  debounce
116797
116797
  });
116798
116798
  }
116799
- const USER_TASK_FORM_PREFIX$1 = 'userTaskForm_';
116799
+ const USER_TASK_FORM_PREFIX = 'userTaskForm_';
116800
116800
  function FormHelper(bpmnFactory, commandStack) {
116801
116801
  function getFormDefinition(element) {
116802
116802
  const businessObject = getBusinessObject$2(element);
@@ -116944,7 +116944,7 @@
116944
116944
  return 'camunda-forms:bpmn:' + formId;
116945
116945
  }
116946
116946
  function createFormId() {
116947
- return nextId$1(USER_TASK_FORM_PREFIX$1);
116947
+ return nextId$1(USER_TASK_FORM_PREFIX);
116948
116948
  }
116949
116949
  function resolveFormId(formKey) {
116950
116950
  return formKey.split(':')[2];
@@ -117729,7 +117729,7 @@
117729
117729
  }
117730
117730
 
117731
117731
  // (2) ensure subscription
117732
- let subscription = getSubscription(element);
117732
+ let subscription = getSubscription$1(element);
117733
117733
  if (!subscription) {
117734
117734
  subscription = createElement$3('zeebe:Subscription', {}, extensionElements, bpmnFactory);
117735
117735
  commands.push({
@@ -117790,10 +117790,10 @@
117790
117790
  return false;
117791
117791
  }
117792
117792
  function getCorrelationKey(element) {
117793
- const subscription = getSubscription(element);
117793
+ const subscription = getSubscription$1(element);
117794
117794
  return subscription ? subscription.get('correlationKey') : '';
117795
117795
  }
117796
- function getSubscription(element) {
117796
+ function getSubscription$1(element) {
117797
117797
  const message = getMessage$1(element);
117798
117798
  const subscriptions = getSubscriptions(message);
117799
117799
  return subscriptions[0];
@@ -120527,6 +120527,83 @@
120527
120527
  return find$2(values, value => is$6(value, 'zeebe:IoMapping'));
120528
120528
  }
120529
120529
 
120530
+ /**
120531
+ * Zeebe BPMN behavior ensuring that zeebe:subscription is removed from bpmn:Message
120532
+ * when it has no properties anymore.
120533
+ */
120534
+ class CleanUpSubscriptionBehavior extends CommandInterceptor$1 {
120535
+ constructor(eventBus, commandStack) {
120536
+ super(eventBus);
120537
+
120538
+ this.postExecuted([
120539
+ 'element.updateProperties',
120540
+ 'element.updateModdleProperties'
120541
+ ], context => {
120542
+ const element = context.shape || context.newShape || context.element;
120543
+
120544
+ if (element.labelTarget) {
120545
+ return;
120546
+ }
120547
+
120548
+ if (!is$6(element, 'bpmn:Event')) {
120549
+ return;
120550
+ }
120551
+
120552
+ const messageEventDefinition = getMessageEventDefinition$1(element);
120553
+
120554
+ if (!messageEventDefinition) {
120555
+ return;
120556
+ }
120557
+
120558
+ const message = messageEventDefinition.get('messageRef');
120559
+
120560
+ if (!message) {
120561
+ return;
120562
+ }
120563
+
120564
+ const subscription = getSubscription(message);
120565
+
120566
+ if (!subscription) {
120567
+ return;
120568
+ }
120569
+
120570
+ if (!hasNoProperties(subscription)) {
120571
+ return;
120572
+ }
120573
+
120574
+ removeExtensionElements(element, message, subscription, commandStack);
120575
+ }, true);
120576
+ }
120577
+ }
120578
+
120579
+ CleanUpSubscriptionBehavior.$inject = [
120580
+ 'eventBus',
120581
+ 'commandStack'
120582
+ ];
120583
+
120584
+
120585
+ // helpers //////////
120586
+
120587
+ function getMessageEventDefinition$1(event) {
120588
+ const businessObject = getBusinessObject$2(event);
120589
+
120590
+ return businessObject.get('eventDefinitions').find(eventDefinition => {
120591
+ return is$6(eventDefinition, 'bpmn:MessageEventDefinition');
120592
+ });
120593
+ }
120594
+
120595
+ function getSubscription(message) {
120596
+ return getExtensionElementsList$1(message, 'zeebe:Subscription')[ 0 ];
120597
+ }
120598
+
120599
+ function hasNoProperties(element) {
120600
+ const descriptor = element.$descriptor;
120601
+
120602
+ return descriptor.properties.every(property => {
120603
+ return element.get(property.name) === undefined;
120604
+ });
120605
+ }
120606
+
120530
120607
  function getTimerEventDefinition(element) {
120531
120608
  const businessObject = getBusinessObject$2(element);
120532
120609
 
@@ -121039,56 +121116,58 @@
121039
121116
  return ids.nextPrefixed(prefix);
121040
121117
  }
121041
121118
 
121042
- const USER_TASK_FORM_PREFIX = 'UserTaskForm_';
121119
+ const FORM_KEY_PREFIX = 'camunda-forms:bpmn:',
121120
+ USER_TASK_FORM_ID_PREFIX = 'UserTaskForm_';
121121
+
121122
+ function getFormDefinition(element) {
121123
+ const businessObject = getBusinessObject$2(element);
121043
121124
 
121125
+ const formDefinitions = getExtensionElementsList$1(businessObject, 'zeebe:FormDefinition');
121044
121126
 
121045
- function createFormDefinition(properties, extensionElements, bpmnFactory) {
121046
- return createElement$2(
121047
- 'zeebe:FormDefinition',
121048
- properties,
121049
- extensionElements,
121050
- bpmnFactory
121051
- );
121127
+ return formDefinitions[ 0 ];
121052
121128
  }
121053
121129
 
121054
- function createFormId() {
121055
- return getPrefixedId(USER_TASK_FORM_PREFIX);
121056
- }
121130
+ function getUserTaskForm(element, options = {}) {
121131
+ let {
121132
+ formKey,
121133
+ rootElement
121134
+ } = options;
121057
121135
 
121058
- function createFormKey(formId) {
121059
- return `camunda-forms:bpmn:${ formId }`;
121060
- }
121136
+ rootElement = rootElement || getRootElement$1(element);
121061
121137
 
121062
- function createUserTaskForm(properties, extensionElements, bpmnFactory) {
121063
- return createElement$2(
121064
- 'zeebe:UserTaskForm',
121065
- properties,
121066
- extensionElements,
121067
- bpmnFactory
121068
- );
121069
- }
121138
+ if (!formKey) {
121139
+ const formDefinition = getFormDefinition(element);
121070
121140
 
121071
- function findUserTaskForm(formKey, rootElement) {
121072
- const userTaskForms = getExtensionElementsList$1(rootElement, 'zeebe:UserTaskForm');
121141
+ if (!formDefinition) {
121142
+ return;
121143
+ }
121144
+
121145
+ formKey = formDefinition.get('formKey');
121146
+ }
121073
121147
 
121074
- return find$2(userTaskForms, (userTaskForm) => {
121075
- const id = userTaskForm.get('zeebe:id');
121148
+ const userTaskForms = getExtensionElementsList$1(rootElement, 'zeebe:UserTaskForm');
121076
121149
 
121077
- return createFormKey(id) === formKey;
121150
+ return userTaskForms.find(userTaskForm => {
121151
+ return userTaskFormIdToFormKey(userTaskForm.get('id')) === formKey;
121078
121152
  });
121079
121153
  }
121080
121154
 
121081
- function getFormDefinition(element) {
121082
- const businessObject = getBusinessObject$2(element);
121155
+ function userTaskFormIdToFormKey(userTaskFormId) {
121156
+ return `${ FORM_KEY_PREFIX }${ userTaskFormId }`;
121157
+ }
121083
121158
 
121084
- const formDefinitions = getExtensionElementsList$1(businessObject, 'zeebe:FormDefinition');
121159
+ function isUserTaskFormKey(formKey) {
121160
+ return formKey && formKey.startsWith(FORM_KEY_PREFIX);
121161
+ }
121085
121162
 
121086
- return formDefinitions[ 0 ];
121163
+ function createUserTaskFormId() {
121164
+ return getPrefixedId(USER_TASK_FORM_ID_PREFIX);
121087
121165
  }
121088
121166
 
121089
- function getRootElement$2(element) {
121090
- var businessObject = getBusinessObject$2(element),
121091
- parent = businessObject;
121167
+ function getRootElement$1(element) {
121168
+ const businessObject = getBusinessObject$2(element);
121169
+
121170
+ let parent = businessObject;
121092
121171
 
121093
121172
  while (parent.$parent && !is$6(parent, 'bpmn:Process')) {
121094
121173
  parent = parent.$parent;
@@ -121097,27 +121176,29 @@
121097
121176
  return parent;
121098
121177
  }
121099
121178
 
121100
- function getUserTaskForm(element, parent) {
121101
- const rootElement = parent || getRootElement$2(element);
121102
-
121103
- const formDefinition = getFormDefinition(element);
121104
-
121105
- if (!formDefinition) {
121106
- return;
121107
- }
121108
-
121109
- const formKey = formDefinition.get('zeebe:formKey');
121110
-
121111
- return findUserTaskForm(formKey, rootElement);
121112
- }
121113
-
121114
121179
  /**
121115
- * Zeebe BPMN specific form definition behavior.
121180
+ * Zeebe BPMN specific forms behavior.
121116
121181
  */
121117
- class FormDefinitionBehavior extends CommandInterceptor$1 {
121182
+ class FormsBehavior extends CommandInterceptor$1 {
121118
121183
  constructor(bpmnFactory, eventBus, modeling) {
121119
121184
  super(eventBus);
121120
121185
 
121186
+ function removeUserTaskForm(element, moddleElement, userTaskForm) {
121187
+ const extensionElements = moddleElement.get('extensionElements');
121188
+
121189
+ const values = without(extensionElements.get('values'), userTaskForm);
121190
+
121191
+ modeling.updateModdleProperties(element, extensionElements, {
121192
+ values
121193
+ });
121194
+
121195
+ if (!values.length) {
121196
+ modeling.updateModdleProperties(element, moddleElement, {
121197
+ extensionElements: undefined
121198
+ });
121199
+ }
121200
+ }
121201
+
121121
121202
  /**
121122
121203
  * Remove zeebe:UserTaskForm on user task removed.
121123
121204
  */
@@ -121129,19 +121210,13 @@
121129
121210
 
121130
121211
  const rootElement = getRootElement$1(oldParent);
121131
121212
 
121132
- const userTaskForm = getUserTaskForm(shape, rootElement);
121213
+ const userTaskForm = getUserTaskForm(shape, { rootElement });
121133
121214
 
121134
121215
  if (!is$6(shape, 'bpmn:UserTask') || !userTaskForm) {
121135
121216
  return;
121136
121217
  }
121137
121218
 
121138
- const rootExtensionElements = rootElement.get('extensionElements');
121139
-
121140
- const values = rootExtensionElements.get('values').filter((element) => {
121141
- return element !== userTaskForm;
121142
- });
121143
-
121144
- modeling.updateModdleProperties(shape, rootExtensionElements, { values });
121219
+ removeUserTaskForm(shape, rootElement, userTaskForm);
121145
121220
  }, true);
121146
121221
 
121147
121222
 
@@ -121180,9 +121255,11 @@
121180
121255
  });
121181
121256
 
121182
121257
  // (3) create new form definition
121183
- const formId = createFormId();
121258
+ const userTaskFormId = createUserTaskFormId();
121184
121259
 
121185
- const newFormDefinition = createFormDefinition({ formKey: createFormKey(formId) }, extensionElements, bpmnFactory);
121260
+ const newFormDefinition = createElement$2('zeebe:FormDefinition', {
121261
+ formKey: userTaskFormIdToFormKey(userTaskFormId)
121262
+ }, extensionElements, bpmnFactory);
121186
121263
 
121187
121264
  values = [
121188
121265
  ...values,
@@ -121194,8 +121271,8 @@
121194
121271
  });
121195
121272
 
121196
121273
  // (4) create new user task form
121197
- const userTaskForm = createUserTaskForm({
121198
- id: formId,
121274
+ const userTaskForm = createElement$2('zeebe:UserTaskForm', {
121275
+ id: userTaskFormId,
121199
121276
  body: oldUserTaskForm ? oldUserTaskForm.get('body') : ''
121200
121277
  }, rootExtensionElements, bpmnFactory);
121201
121278
 
@@ -121207,27 +121284,88 @@
121207
121284
  });
121208
121285
  }, true);
121209
121286
 
121287
+
121288
+ /**
121289
+ * Ensure that a user task only has one of the following:
121290
+ *
121291
+ * 1. zeebe:FormDefinition with zeebe:formId (linked Camunda form)
121292
+ * 2. zeebe:FormDefinition with zeebe:formKey in the format of camunda-forms:bpmn:UserTaskForm_1 (embedded Camunda form)
121293
+ * 3. zeebe:FormDefinition with zeebe:formKey (custom form)
121294
+ */
121295
+ this.preExecute('element.updateModdleProperties', function(context) {
121296
+ const {
121297
+ moddleElement,
121298
+ properties
121299
+ } = context;
121300
+
121301
+ if (is$6(moddleElement, 'zeebe:FormDefinition')) {
121302
+ if ('formId' in properties) {
121303
+ properties.formKey = undefined;
121304
+ } else if ('formKey' in properties) {
121305
+ properties.formId = undefined;
121306
+ }
121307
+ }
121308
+ }, true);
121309
+
121310
+ /**
121311
+ * Clean up user task form after form key or definition is removed. Clean up
121312
+ * empty extension elements after form definition is removed.
121313
+ */
121314
+ this.postExecute('element.updateModdleProperties', function(context) {
121315
+ const {
121316
+ element,
121317
+ moddleElement,
121318
+ oldProperties
121319
+ } = context;
121320
+
121321
+ if (is$6(moddleElement, 'zeebe:FormDefinition')) {
121322
+ const formKey = moddleElement.get('formKey');
121323
+
121324
+ if (!formKey || !isUserTaskFormKey(formKey)) {
121325
+ const userTaskForm = getUserTaskForm(element, { formKey: oldProperties.formKey });
121326
+
121327
+ if (userTaskForm) {
121328
+ removeUserTaskForm(element, getRootElement$1(element), userTaskForm);
121329
+ }
121330
+ }
121331
+ } else if (isExtensionElementRemoved(context, 'zeebe:FormDefinition')) {
121332
+ const formDefinition = oldProperties.values.find(value => is$6(value, 'zeebe:FormDefinition'));
121333
+
121334
+ const userTaskForm = getUserTaskForm(element, { formKey: formDefinition.get('formKey') });
121335
+
121336
+ if (userTaskForm) {
121337
+ removeUserTaskForm(element, getRootElement$1(element), userTaskForm);
121338
+ }
121339
+
121340
+ if (!moddleElement.get('values').length) {
121341
+ modeling.updateProperties(element, {
121342
+ extensionElements: undefined
121343
+ });
121344
+ }
121345
+ }
121346
+ }, true);
121347
+
121210
121348
  }
121211
121349
  }
121212
121350
 
121213
- FormDefinitionBehavior.$inject = [
121351
+ FormsBehavior.$inject = [
121214
121352
  'bpmnFactory',
121215
121353
  'eventBus',
121216
121354
  'modeling'
121217
121355
  ];
121218
121356
 
121357
+ function isExtensionElementRemoved(context, type) {
121358
+ const {
121359
+ moddleElement,
121360
+ oldProperties,
121361
+ properties
121362
+ } = context;
121219
121363
 
121220
- // helpers //////////////
121221
-
121222
- function getRootElement$1(element) {
121223
- var businessObject = getBusinessObject$2(element),
121224
- parent = businessObject;
121225
-
121226
- while (parent.$parent && !is$6(parent, 'bpmn:Process')) {
121227
- parent = parent.$parent;
121228
- }
121229
-
121230
- return parent;
121364
+ return is$6(moddleElement, 'bpmn:ExtensionElements')
121365
+ && 'values' in oldProperties
121366
+ && 'values' in properties
121367
+ && oldProperties.values.find(value => is$6(value, type))
121368
+ && !properties.values.find(value => is$6(value, type));
121231
121369
  }
121232
121370
 
121233
121371
  const HIGH_PRIORITY$5 = 5000;
@@ -121434,22 +121572,24 @@
121434
121572
  __init__: [
121435
121573
  'cleanUpBusinessRuleTaskBehavior',
121436
121574
  'cleanUpEndEventBehavior',
121575
+ 'cleanUpSubscriptionBehavior',
121437
121576
  'cleanUpTimerExpressionBehavior',
121438
121577
  'copyPasteBehavior',
121439
121578
  'createZeebeCallActivityBehavior',
121440
121579
  'deleteParticipantBehaviour',
121441
- 'formDefinitionBehavior',
121580
+ 'formsBehavior',
121442
121581
  'removeAssignmentDefinitionBehavior',
121443
121582
  'removeTaskScheduleBehavior',
121444
121583
  'updatePropagateAllChildVariablesBehavior'
121445
121584
  ],
121446
121585
  cleanUpBusinessRuleTaskBehavior: [ 'type', CleanUpBusinessRuleTaskBehavior ],
121447
121586
  cleanUpEndEventBehavior: [ 'type', CleanUpEndEventBehavior ],
121587
+ cleanUpSubscriptionBehavior: [ 'type', CleanUpSubscriptionBehavior ],
121448
121588
  cleanUpTimerExpressionBehavior: [ 'type', CleanUpTimerExpressionBehavior ],
121449
121589
  copyPasteBehavior: [ 'type', ZeebeModdleExtension ],
121450
121590
  createZeebeCallActivityBehavior: [ 'type', CreateZeebeCallActivityBehavior ],
121451
121591
  deleteParticipantBehaviour: [ 'type', DeleteParticipantBehaviour ],
121452
- formDefinitionBehavior: [ 'type', FormDefinitionBehavior ],
121592
+ formsBehavior: [ 'type', FormsBehavior ],
121453
121593
  removeAssignmentDefinitionBehavior: [ 'type', RemoveAssignmentDefinitionBehavior ],
121454
121594
  removeTaskScheduleBehavior: [ 'type', RemoveTaskScheduleBehavior ],
121455
121595
  updatePropagateAllChildVariablesBehavior: [ 'type', UpdatePropagateAllChildVariablesBehavior ]