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

365 lines
10 KiB
JavaScript

'use strict';
var is = require('bpmn-js/lib/util/ModelUtil').is;
var elementHelper = require('../../../../helper/ElementHelper'),
inputOutputHelper = require('../../../../helper/InputOutputHelper'),
cmdHelper = require('../../../../helper/CmdHelper'),
utils = require('../../../../Utils');
var entryFactory = require('../../../../factory/EntryFactory'),
scriptImplementation = require('./Script');
function createElement(type, parent, factory, properties) {
return elementHelper.createElement(type, properties, parent, factory);
}
function isScript(elem) {
return is(elem, 'activiti:Script');
}
function isList(elem) {
return is(elem, 'activiti:List');
}
function isMap(elem) {
return is(elem, 'activiti:Map');
}
function ensureInputOutputSupported(element, insideConnector) {
return inputOutputHelper.isInputOutputSupported(element, insideConnector);
}
module.exports = function(element, bpmnFactory, options, translate) {
var typeInfo = {
'activiti:Map': {
value: 'map',
label: translate('Map')
},
'activiti:List': {
value: 'list',
label: translate('List')
},
'activiti:Script': {
value: 'script',
label: translate('Script')
}
};
options = options || {};
var insideConnector = !!options.insideConnector,
idPrefix = options.idPrefix || '';
var getSelected = options.getSelectedParameter;
if (!ensureInputOutputSupported(element, insideConnector)) {
return [];
}
var entries = [];
var isSelected = function(element, node) {
return getSelected(element, node);
};
// parameter name ////////////////////////////////////////////////////////
entries.push(entryFactory.validationAwareTextField({
id: idPrefix + 'parameterName',
label: translate('Name'),
modelProperty: 'name',
getProperty: function(element, node) {
return (getSelected(element, node) || {}).name;
},
setProperty: function(element, values, node) {
var param = getSelected(element, node);
return cmdHelper.updateBusinessObject(element, param, values);
},
validate: function(element, values, node) {
var bo = getSelected(element, node);
var validation = {};
if (bo) {
var nameValue = values.name;
if (nameValue) {
if (utils.containsSpace(nameValue)) {
validation.name = translate('Name must not contain spaces');
}
} else {
validation.name = translate('Parameter must have a name');
}
}
return validation;
},
hidden: function(element, node) {
return !isSelected(element, node);
}
}));
// parameter type //////////////////////////////////////////////////////
var selectOptions = [
{ value: 'text', name: translate('Text') },
{ value: 'script', name: translate('Script') },
{ value: 'list', name: translate('List') },
{ value: 'map', name: translate('Map') }
];
entries.push(entryFactory.selectBox({
id : idPrefix + 'parameterType',
label: translate('Type'),
selectOptions: selectOptions,
modelProperty: 'parameterType',
get: function(element, node) {
var bo = getSelected(element, node);
var parameterType = 'text';
if (typeof bo !== 'undefined') {
var definition = bo.get('definition');
if (typeof definition !== 'undefined') {
var type = definition.$type;
parameterType = typeInfo[type].value;
}
}
return {
parameterType: parameterType
};
},
set: function(element, values, node) {
var bo = getSelected(element, node);
var properties = {
value: undefined,
definition: undefined
};
var createParameterTypeElem = function(type) {
return createElement(type, bo, bpmnFactory);
};
var parameterType = values.parameterType;
if (parameterType === 'script') {
properties.definition = createParameterTypeElem('activiti:Script');
}
else if (parameterType === 'list') {
properties.definition = createParameterTypeElem('activiti:List');
}
else if (parameterType === 'map') {
properties.definition = createParameterTypeElem('activiti:Map');
}
return cmdHelper.updateBusinessObject(element, bo, properties);
},
show: function(element, node) {
return isSelected(element, node);
}
}));
// parameter value (type = text) ///////////////////////////////////////////////////////
entries.push(entryFactory.textBox({
id : idPrefix + 'parameterType-text',
label : translate('Value'),
modelProperty: 'value',
get: function(element, node) {
return {
value: (getSelected(element, node) || {}).value
};
},
set: function(element, values, node) {
var param = getSelected(element, node);
values.value = values.value || undefined;
return cmdHelper.updateBusinessObject(element, param, values);
},
show: function(element, node) {
var bo = getSelected(element, node);
return bo && !bo.definition;
}
}));
// parameter value (type = script) ///////////////////////////////////////////////////////
var script = scriptImplementation('scriptFormat', 'value', true, translate);
entries.push({
id: idPrefix + 'parameterType-script',
html: '<div data-show="isScript">' +
script.template +
'</div>',
get: function(element, node) {
var bo = getSelected(element, node);
return bo && isScript(bo.definition) ? script.get(element, bo.definition) : {};
},
set: function(element, values, node) {
var bo = getSelected(element, node);
var update = script.set(element, values);
return cmdHelper.updateBusinessObject(element, bo.definition, update);
},
validate: function(element, values, node) {
var bo = getSelected(element, node);
return bo && isScript(bo.definition) ? script.validate(element, bo.definition) : {};
},
isScript: function(element, node) {
var bo = getSelected(element, node);
return bo && isScript(bo.definition);
},
script: script
});
// parameter value (type = list) ///////////////////////////////////////////////////////
entries.push(entryFactory.table({
id: idPrefix + 'parameterType-list',
modelProperties: [ 'value' ],
labels: [ translate('Value') ],
addLabel: translate('Add Value'),
getElements: function(element, node) {
var bo = getSelected(element, node);
if (bo && isList(bo.definition)) {
return bo.definition.items;
}
return [];
},
updateElement: function(element, values, node, idx) {
var bo = getSelected(element, node);
var item = bo.definition.items[idx];
return cmdHelper.updateBusinessObject(element, item, values);
},
addElement: function(element, node) {
var bo = getSelected(element, node);
var newValue = createElement('activiti:Value', bo.definition, bpmnFactory, { value: undefined });
return cmdHelper.addElementsTolist(element, bo.definition, 'items', [ newValue ]);
},
removeElement: function(element, node, idx) {
var bo = getSelected(element, node);
return cmdHelper.removeElementsFromList(element, bo.definition, 'items', null, [ bo.definition.items[idx] ]);
},
editable: function(element, node, prop, idx) {
var bo = getSelected(element, node);
var item = bo.definition.items[idx];
return !isMap(item) && !isList(item) && !isScript(item);
},
setControlValue: function(element, node, input, prop, value, idx) {
var bo = getSelected(element, node);
var item = bo.definition.items[idx];
if (!isMap(item) && !isList(item) && !isScript(item)) {
input.value = value;
} else {
input.value = typeInfo[item.$type].label;
}
},
show: function(element, node) {
var bo = getSelected(element, node);
return bo && bo.definition && isList(bo.definition);
}
}));
// parameter value (type = map) ///////////////////////////////////////////////////////
entries.push(entryFactory.table({
id: idPrefix + 'parameterType-map',
modelProperties: [ 'key', 'value' ],
labels: [ translate('Key'), translate('Value') ],
addLabel: translate('Add Entry'),
getElements: function(element, node) {
var bo = getSelected(element, node);
if (bo && isMap(bo.definition)) {
return bo.definition.entries;
}
return [];
},
updateElement: function(element, values, node, idx) {
var bo = getSelected(element, node);
var entry = bo.definition.entries[idx];
if (isMap(entry.definition) || isList(entry.definition) || isScript(entry.definition)) {
values = {
key: values.key
};
}
return cmdHelper.updateBusinessObject(element, entry, values);
},
addElement: function(element, node) {
var bo = getSelected(element, node);
var newEntry = createElement('activiti:Entry', bo.definition, bpmnFactory, { key: undefined, value: undefined });
return cmdHelper.addElementsTolist(element, bo.definition, 'entries', [ newEntry ]);
},
removeElement: function(element, node, idx) {
var bo = getSelected(element, node);
return cmdHelper.removeElementsFromList(element, bo.definition, 'entries', null, [ bo.definition.entries[idx] ]);
},
editable: function(element, node, prop, idx) {
var bo = getSelected(element, node);
var entry = bo.definition.entries[idx];
return prop === 'key' || (!isMap(entry.definition) && !isList(entry.definition) && !isScript(entry.definition));
},
setControlValue: function(element, node, input, prop, value, idx) {
var bo = getSelected(element, node);
var entry = bo.definition.entries[idx];
if (prop === 'key' || (!isMap(entry.definition) && !isList(entry.definition) && !isScript(entry.definition))) {
input.value = value;
} else {
input.value = typeInfo[entry.definition.$type].label;
}
},
show: function(element, node) {
var bo = getSelected(element, node);
return bo && bo.definition && isMap(bo.definition);
}
}));
return entries;
};