ruoyi-vue-nocode/ruoyi-ui/ruoyi-bpmnjs/resources/properties-panel/provider/activiti/parts/implementation/AsyncContinuation.js
2022-08-11 16:10:41 +08:00

131 lines
3.5 KiB
JavaScript

'use strict';
var assign = require('lodash/assign');
var entryFactory = require('../../../../factory/EntryFactory');
var asyncCapableHelper = require('../../../../helper/AsyncCapableHelper'),
eventDefinitionHelper = require('../../../../helper/EventDefinitionHelper'),
cmdHelper = require('../../../../helper/CmdHelper');
function isAsyncBefore(bo) {
return asyncCapableHelper.isAsyncBefore(bo);
}
function isAsyncAfter(bo) {
return asyncCapableHelper.isAsyncAfter(bo);
}
function isExclusive(bo) {
return asyncCapableHelper.isExclusive(bo);
}
function removeFailedJobRetryTimeCycle(bo, element) {
return asyncCapableHelper.removeFailedJobRetryTimeCycle(bo, element);
}
function canRemoveFailedJobRetryTimeCycle(element) {
return !eventDefinitionHelper.getTimerEventDefinition(element);
}
module.exports = function(element, bpmnFactory, options, translate) {
var getBusinessObject = options.getBusinessObject;
var idPrefix = options.idPrefix || '',
labelPrefix = options.labelPrefix || '';
var asyncBeforeEntry = entryFactory.checkbox({
id: idPrefix + 'asyncBefore',
label: labelPrefix + translate('Asynchronous Before'),
modelProperty: 'asyncBefore',
get: function(element, node) {
var bo = getBusinessObject(element);
return {
asyncBefore: isAsyncBefore(bo)
};
},
set: function(element, values) {
var bo = getBusinessObject(element);
var asyncBefore = !!values.asyncBefore;
var props = {
'activiti:asyncBefore': asyncBefore,
'activiti:async': false
};
var commands = [];
if (!isAsyncAfter(bo) && !asyncBefore) {
props = assign({ 'activiti:exclusive' : true }, props);
if (canRemoveFailedJobRetryTimeCycle(element)) {
commands.push(removeFailedJobRetryTimeCycle(bo, element));
}
}
commands.push(cmdHelper.updateBusinessObject(element, bo, props));
return commands;
}
});
var asyncAfterEntry = entryFactory.checkbox({
id: idPrefix + 'asyncAfter',
label: labelPrefix + translate('Asynchronous After'),
modelProperty: 'asyncAfter',
get: function(element, node) {
var bo = getBusinessObject(element);
return {
asyncAfter: isAsyncAfter(bo)
};
},
set: function(element, values) {
var bo = getBusinessObject(element);
var asyncAfter = !!values.asyncAfter;
var props = {
'activiti:asyncAfter': asyncAfter
};
var commands = [];
if (!isAsyncBefore(bo) && !asyncAfter) {
props = assign({ 'activiti:exclusive' : true }, props);
if (canRemoveFailedJobRetryTimeCycle(element)) {
commands.push(removeFailedJobRetryTimeCycle(bo, element));
}
}
commands.push(cmdHelper.updateBusinessObject(element, bo, props));
return commands;
}
});
var exclusiveEntry = entryFactory.checkbox({
id: idPrefix + 'exclusive',
label: labelPrefix + translate('Exclusive'),
modelProperty: 'exclusive',
get: function(element, node) {
var bo = getBusinessObject(element);
return { exclusive: isExclusive(bo) };
},
set: function(element, values) {
var bo = getBusinessObject(element);
return cmdHelper.updateBusinessObject(element, bo, { 'activiti:exclusive': !!values.exclusive });
},
hidden: function(element) {
var bo = getBusinessObject(element);
return bo && !isAsyncAfter(bo) && !isAsyncBefore(bo);
}
});
return [ asyncBeforeEntry, asyncAfterEntry, exclusiveEntry ];
};