'use strict'
|
|
import { some } from 'min-dash'
|
|
// const some = require('min-dash').some
|
// const some = some
|
|
const ALLOWED_TYPES = {
|
FailedJobRetryTimeCycle: [
|
'bpmn:StartEvent',
|
'bpmn:BoundaryEvent',
|
'bpmn:IntermediateCatchEvent',
|
'bpmn:Activity'
|
],
|
Connector: ['bpmn:EndEvent', 'bpmn:IntermediateThrowEvent'],
|
Field: ['bpmn:EndEvent', 'bpmn:IntermediateThrowEvent']
|
}
|
|
function is(element, type) {
|
return element && typeof element.$instanceOf === 'function' && element.$instanceOf(type)
|
}
|
|
function exists(element) {
|
return element && element.length
|
}
|
|
function includesType(collection, type) {
|
return (
|
exists(collection) &&
|
some(collection, function (element) {
|
return is(element, type)
|
})
|
)
|
}
|
|
function anyType(element, types) {
|
return some(types, function (type) {
|
return is(element, type)
|
})
|
}
|
|
function isAllowed(propName, propDescriptor, newElement) {
|
const name = propDescriptor.name,
|
types = ALLOWED_TYPES[name.replace(/activiti:/, '')]
|
|
return name === propName && anyType(newElement, types)
|
}
|
|
function ActivitiModdleExtension(eventBus) {
|
eventBus.on(
|
'property.clone',
|
function (context) {
|
const newElement = context.newElement,
|
propDescriptor = context.propertyDescriptor
|
|
this.canCloneProperty(newElement, propDescriptor)
|
},
|
this
|
)
|
}
|
|
ActivitiModdleExtension.$inject = ['eventBus']
|
|
ActivitiModdleExtension.prototype.canCloneProperty = function (newElement, propDescriptor) {
|
if (isAllowed('activiti:FailedJobRetryTimeCycle', propDescriptor, newElement)) {
|
return (
|
includesType(newElement.eventDefinitions, 'bpmn:TimerEventDefinition') ||
|
includesType(newElement.eventDefinitions, 'bpmn:SignalEventDefinition') ||
|
is(newElement.loopCharacteristics, 'bpmn:MultiInstanceLoopCharacteristics')
|
)
|
}
|
|
if (isAllowed('activiti:Connector', propDescriptor, newElement)) {
|
return includesType(newElement.eventDefinitions, 'bpmn:MessageEventDefinition')
|
}
|
|
if (isAllowed('activiti:Field', propDescriptor, newElement)) {
|
return includesType(newElement.eventDefinitions, 'bpmn:MessageEventDefinition')
|
}
|
}
|
|
// module.exports = ActivitiModdleExtension;
|
export default ActivitiModdleExtension
|