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 > 0;
|
}
|
|
function includesType(collection, type) {
|
return (
|
exists(collection) &&
|
collection.some((element) => {
|
return is(element, type);
|
})
|
);
|
}
|
|
function anyType(element, types) {
|
return types.some((type) => {
|
return is(element, type);
|
});
|
}
|
|
function isAllowed(propName, propDescriptor, newElement) {
|
const name = propDescriptor.name;
|
const types = ALLOWED_TYPES[name.replace(/flowable:/, '')];
|
|
return name === propName && anyType(newElement, types);
|
}
|
|
function FlowableModdleExtension(eventBus) {
|
eventBus.on(
|
'property.clone',
|
function (context) {
|
const newElement = context.newElement;
|
const propDescriptor = context.propertyDescriptor;
|
|
this.canCloneProperty(newElement, propDescriptor);
|
},
|
this,
|
);
|
}
|
|
FlowableModdleExtension.$inject = ['eventBus'];
|
|
FlowableModdleExtension.prototype.canCloneProperty = function (
|
newElement,
|
propDescriptor,
|
) {
|
if (
|
isAllowed('flowable:FailedJobRetryTimeCycle', propDescriptor, newElement)
|
) {
|
return (
|
includesType(newElement.eventDefinitions, 'bpmn:TimerEventDefinition') ||
|
includesType(newElement.eventDefinitions, 'bpmn:SignalEventDefinition') ||
|
is(
|
newElement.loopCharacteristics,
|
'bpmn:MultiInstanceLoopCharacteristics',
|
)
|
);
|
}
|
|
if (isAllowed('flowable:Connector', propDescriptor, newElement)) {
|
return includesType(
|
newElement.eventDefinitions,
|
'bpmn:MessageEventDefinition',
|
);
|
}
|
|
if (isAllowed('flowable:Field', propDescriptor, newElement)) {
|
return includesType(
|
newElement.eventDefinitions,
|
'bpmn:MessageEventDefinition',
|
);
|
}
|
};
|
|
// module.exports = FlowableModdleExtension;
|
export default FlowableModdleExtension;
|