ruoyi-vue-nocode/ruoyi-ui/ruoyi-bpmnjs/resources/properties-panel/provider/activiti/parts/implementation/InputOutput.js

226 lines
6.9 KiB
JavaScript
Raw Normal View History

2022-08-11 16:10:41 +08:00
'use strict';
var getBusinessObject = require('bpmn-js/lib/util/ModelUtil').getBusinessObject;
var elementHelper = require('../../../../helper/ElementHelper'),
extensionElementsHelper = require('../../../../helper/ExtensionElementsHelper'),
inputOutputHelper = require('../../../../helper/InputOutputHelper'),
cmdHelper = require('../../../../helper/CmdHelper');
var extensionElementsEntry = require('./ExtensionElements');
function getInputOutput(element, insideConnector) {
return inputOutputHelper.getInputOutput(element, insideConnector);
}
function getConnector(element) {
return inputOutputHelper.getConnector(element);
}
function getInputParameters(element, insideConnector) {
return inputOutputHelper.getInputParameters(element, insideConnector);
}
function getOutputParameters(element, insideConnector) {
return inputOutputHelper.getOutputParameters(element, insideConnector);
}
function getInputParameter(element, insideConnector, idx) {
return inputOutputHelper.getInputParameter(element, insideConnector, idx);
}
function getOutputParameter(element, insideConnector, idx) {
return inputOutputHelper.getOutputParameter(element, insideConnector, idx);
}
function createElement(type, parent, factory, properties) {
return elementHelper.createElement(type, properties, parent, factory);
}
function createInputOutput(parent, bpmnFactory, properties) {
return createElement('activiti:InputOutput', parent, bpmnFactory, properties);
}
function createParameter(type, parent, bpmnFactory, properties) {
return createElement(type, parent, bpmnFactory, properties);
}
function ensureInputOutputSupported(element, insideConnector) {
return inputOutputHelper.isInputOutputSupported(element, insideConnector);
}
function ensureOutparameterSupported(element, insideConnector) {
return inputOutputHelper.areOutputParametersSupported(element, insideConnector);
}
module.exports = function(element, bpmnFactory, options, translate) {
var TYPE_LABEL = {
'activiti:Map': translate('Map'),
'activiti:List': translate('List'),
'activiti:Script': translate('Script')
};
options = options || {};
var insideConnector = !!options.insideConnector,
idPrefix = options.idPrefix || '';
var getSelected = function(element, node) {
var selection = (inputEntry && inputEntry.getSelected(element, node)) || { idx: -1 };
var parameter = getInputParameter(element, insideConnector, selection.idx);
if (!parameter && outputEntry) {
selection = outputEntry.getSelected(element, node);
parameter = getOutputParameter(element, insideConnector, selection.idx);
}
return parameter;
};
var result = {
getSelectedParameter: getSelected
};
var entries = result.entries = [];
if (!ensureInputOutputSupported(element)) {
return result;
}
var newElement = function(type, prop, factory) {
return function(element, extensionElements, value) {
var commands = [];
var inputOutput = getInputOutput(element, insideConnector);
if (!inputOutput) {
var parent = !insideConnector ? extensionElements : getConnector(element);
inputOutput = createInputOutput(parent, bpmnFactory, {
inputParameters: [],
outputParameters: []
});
if (!insideConnector) {
commands.push(cmdHelper.addAndRemoveElementsFromList(
element,
extensionElements,
'values',
'extensionElements',
[ inputOutput ],
[]
));
} else {
commands.push(cmdHelper.updateBusinessObject(element, parent, { inputOutput: inputOutput }));
}
}
var newElem = createParameter(type, inputOutput, bpmnFactory, { name: value });
commands.push(cmdHelper.addElementsTolist(element, inputOutput, prop, [ newElem ]));
return commands;
};
};
var removeElement = function(getter, prop, otherProp) {
return function(element, extensionElements, value, idx) {
var inputOutput = getInputOutput(element, insideConnector);
var parameter = getter(element, insideConnector, idx);
var commands = [];
commands.push(cmdHelper.removeElementsFromList(element, inputOutput, prop, null, [ parameter ]));
var firstLength = inputOutput.get(prop).length-1;
var secondLength = (inputOutput.get(otherProp) || []).length;
if (!firstLength && !secondLength) {
if (!insideConnector) {
commands.push(extensionElementsHelper.removeEntry(getBusinessObject(element), element, inputOutput));
} else {
var connector = getConnector(element);
commands.push(cmdHelper.updateBusinessObject(element, connector, { inputOutput: undefined }));
}
}
return commands;
};
};
var setOptionLabelValue = function(getter) {
return function(element, node, option, property, value, idx) {
var parameter = getter(element, insideConnector, idx);
var suffix = 'Text';
var definition = parameter.get('definition');
if (typeof definition !== 'undefined') {
var type = definition.$type;
suffix = TYPE_LABEL[type];
}
option.text = (value || '') + ' : ' + suffix;
};
};
// input parameters ///////////////////////////////////////////////////////////////
var inputEntry = extensionElementsEntry(element, bpmnFactory, {
id: idPrefix + 'inputs',
label: translate('Input Parameters'),
modelProperty: 'name',
prefix: 'Input',
resizable: true,
createExtensionElement: newElement('activiti:InputParameter', 'inputParameters'),
removeExtensionElement: removeElement(getInputParameter, 'inputParameters', 'outputParameters'),
getExtensionElements: function(element) {
return getInputParameters(element, insideConnector);
},
onSelectionChange: function(element, node, event, scope) {
outputEntry && outputEntry.deselect(element, node);
},
setOptionLabelValue: setOptionLabelValue(getInputParameter)
});
entries.push(inputEntry);
// output parameters ///////////////////////////////////////////////////////
if (ensureOutparameterSupported(element, insideConnector)) {
var outputEntry = extensionElementsEntry(element, bpmnFactory, {
id: idPrefix + 'outputs',
label: translate('Output Parameters'),
modelProperty: 'name',
prefix: 'Output',
resizable: true,
createExtensionElement: newElement('activiti:OutputParameter', 'outputParameters'),
removeExtensionElement: removeElement(getOutputParameter, 'outputParameters', 'inputParameters'),
getExtensionElements: function(element) {
return getOutputParameters(element, insideConnector);
},
onSelectionChange: function(element, node, event, scope) {
inputEntry.deselect(element, node);
},
setOptionLabelValue: setOptionLabelValue(getOutputParameter)
});
entries.push(outputEntry);
}
return result;
};