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

114 lines
3.3 KiB
JavaScript

'use strict';
var is = require('bpmn-js/lib/util/ModelUtil').is;
var entryFactory = require('../../../../factory/EntryFactory');
var asyncCapableHelper = require('../../../../helper/AsyncCapableHelper');
var elementHelper = require('../../../../helper/ElementHelper'),
eventDefinitionHelper = require('../../../../helper/EventDefinitionHelper'),
cmdHelper = require('../../../../helper/CmdHelper');
function isAsyncBefore(bo) {
return asyncCapableHelper.isAsyncBefore(bo);
}
function isAsyncAfter(bo) {
return asyncCapableHelper.isAsyncAfter(bo);
}
function getFailedJobRetryTimeCycle(bo) {
return asyncCapableHelper.getFailedJobRetryTimeCycle(bo);
}
function removeFailedJobRetryTimeCycle(bo, element) {
return asyncCapableHelper.removeFailedJobRetryTimeCycle(bo, element);
}
function createExtensionElements(parent, bpmnFactory) {
return elementHelper.createElement('bpmn:ExtensionElements', { values: [] }, parent, bpmnFactory);
}
function createFailedJobRetryTimeCycle(parent, bpmnFactory, cycle) {
return elementHelper.createElement('activiti:FailedJobRetryTimeCycle', { body: cycle }, parent, bpmnFactory);
}
module.exports = function(element, bpmnFactory, options, translate) {
var getBusinessObject = options.getBusinessObject;
var idPrefix = options.idPrefix || '',
labelPrefix = options.labelPrefix || '';
var retryTimeCycleEntry = entryFactory.textField({
id: idPrefix + 'retryTimeCycle',
label: labelPrefix + translate('Retry Time Cycle'),
modelProperty: 'cycle',
get: function(element, node) {
var retryTimeCycle = getFailedJobRetryTimeCycle(getBusinessObject(element));
var value = retryTimeCycle && retryTimeCycle.get('body');
return {
cycle: value
};
},
set: function(element, values, node) {
var newCycle = values.cycle;
var bo = getBusinessObject(element);
if (newCycle === '' || typeof newCycle === 'undefined') {
// remove retry time cycle element(s)
return removeFailedJobRetryTimeCycle(bo, element);
}
var retryTimeCycle = getFailedJobRetryTimeCycle(bo);
if (!retryTimeCycle) {
// add new retry time cycle element
var commands = [];
var extensionElements = bo.get('extensionElements');
if (!extensionElements) {
extensionElements = createExtensionElements(bo, bpmnFactory);
commands.push(cmdHelper.updateBusinessObject(element, bo, { extensionElements: extensionElements }));
}
retryTimeCycle = createFailedJobRetryTimeCycle(extensionElements, bpmnFactory, newCycle);
commands.push(cmdHelper.addAndRemoveElementsFromList(
element,
extensionElements,
'values',
'extensionElements',
[ retryTimeCycle ],
[]
));
return commands;
}
// update existing retry time cycle element
return cmdHelper.updateBusinessObject(element, retryTimeCycle, { body: newCycle });
},
hidden: function(element) {
var bo = getBusinessObject(element);
if (bo && (isAsyncBefore(bo) || isAsyncAfter(bo))) {
return false;
}
if (is(element, 'bpmn:Event')) {
return !eventDefinitionHelper.getTimerEventDefinition(element);
}
return true;
}
});
return [ retryTimeCycleEntry ];
};