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

311 lines
7.7 KiB
JavaScript

'use strict';
var extensionElementsHelper = require('../../../../helper/ExtensionElementsHelper'),
elementHelper = require('../../../../helper/ElementHelper'),
cmdHelper = require('../../../../helper/CmdHelper');
var utils = require('../../../../Utils');
var entryFactory = require('../../../../factory/EntryFactory');
var extensionElementsEntry = require('./ExtensionElements');
var ModelUtil = require('bpmn-js/lib/util/ModelUtil'),
getBusinessObject = ModelUtil.getBusinessObject;
var assign = require('lodash/assign');
var DEFAULT_PROPS = {
'stringValue': undefined,
'string': undefined,
'expression': undefined
};
var ACTIVITI_FIELD_EXTENSION_ELEMENT = 'activiti:Field';
module.exports = function(element, bpmnFactory, translate, options) {
options = options || {};
var insideListener = !!options.insideListener,
idPrefix = options.idPrefix || '',
getSelectedListener = options.getSelectedListener,
businessObject = options.businessObject || getBusinessObject(element);
var entries = [];
var isSelected = function(element, node) {
return getSelectedField(element, node);
};
function getSelectedField(element, node) {
var selected = fieldEntry.getSelected(element, node.parentNode);
if (selected.idx === -1) {
return;
}
var fields = getActivitiFields(element, node);
return fields[selected.idx];
}
function getActivitiFields(element, node) {
if (!insideListener) {
return (
businessObject &&
extensionElementsHelper.getExtensionElements(businessObject, ACTIVITI_FIELD_EXTENSION_ELEMENT)
) || [];
}
return getActivitiListenerFields(element, node);
}
function getActivitiListenerFields(element, node) {
var selectedListener = getSelectedListener(element, node);
return selectedListener && selectedListener.fields || [];
}
function getFieldType(bo) {
var fieldType = 'string';
var expressionValue = bo && bo.expression;
var stringValue = bo && (bo.string || bo.stringValue);
if (typeof stringValue !== 'undefined') {
fieldType = 'string';
} else if (typeof expressionValue !== 'undefined') {
fieldType = 'expression';
}
return fieldType;
}
var setOptionLabelValue = function() {
return function(element, node, option, property, value, idx) {
var activitiFields = getActivitiFields(element, node);
var field = activitiFields[idx];
value = (field.name) ? field.name : '<empty>';
var label = idx + ' : ' + value;
option.text = label;
};
};
var newElement = function() {
return function(element, extensionElements, value, node) {
var props = {
name: '',
string: ''
};
var newFieldElem;
if (!insideListener) {
newFieldElem = elementHelper.createElement(ACTIVITI_FIELD_EXTENSION_ELEMENT, props, extensionElements, bpmnFactory);
return cmdHelper.addElementsTolist(element, extensionElements, 'values', [ newFieldElem ]);
} else {
var selectedListener = getSelectedListener(element, node);
newFieldElem = elementHelper.createElement(ACTIVITI_FIELD_EXTENSION_ELEMENT, props, selectedListener, bpmnFactory);
return cmdHelper.addElementsTolist(element, selectedListener, 'fields', [ newFieldElem ]);
}
};
};
var removeElement = function() {
return function(element, extensionElements, value, idx, node) {
var activitiFields= getActivitiFields(element, node);
var field = activitiFields[idx];
if (field) {
if (!insideListener) {
return extensionElementsHelper.removeEntry(businessObject, element, field);
}
var selectedListener = getSelectedListener(element, node);
return cmdHelper.removeElementsFromList(element, selectedListener, 'fields', null, [ field ]);
}
};
};
var fieldEntry = extensionElementsEntry(element, bpmnFactory, {
id : idPrefix + 'fields',
label : translate('Fields'),
modelProperty: 'fieldName',
idGeneration: 'false',
businessObject: businessObject,
createExtensionElement: newElement(),
removeExtensionElement: removeElement(),
getExtensionElements: function(element, node) {
return getActivitiFields(element, node);
},
setOptionLabelValue: setOptionLabelValue()
});
entries.push(fieldEntry);
entries.push(entryFactory.validationAwareTextField({
id: idPrefix + 'field-name',
label: translate('Name'),
modelProperty: 'fieldName',
getProperty: function(element, node) {
return (getSelectedField(element, node) || {}).name;
},
setProperty: function(element, values, node) {
var selectedField = getSelectedField(element, node);
return cmdHelper.updateBusinessObject(element, selectedField, { name : values.fieldName });
},
validate: function(element, values, node) {
var bo = getSelectedField(element, node);
var validation = {};
if (bo) {
var nameValue = values.fieldName;
if (nameValue) {
if (utils.containsSpace(nameValue)) {
validation.fieldName = translate('Name must not contain spaces');
}
} else {
validation.fieldName = translate('Parameter must have a name');
}
}
return validation;
},
hidden: function(element, node) {
return !isSelected(element, node);
}
}));
var fieldTypeOptions = [
{
name: translate('String'),
value: 'string'
},
{
name: translate('Expression'),
value: 'expression'
}
];
entries.push(entryFactory.selectBox({
id: idPrefix + 'field-type',
label: translate('Type'),
selectOptions: fieldTypeOptions,
modelProperty: 'fieldType',
get: function(element, node) {
var bo = getSelectedField(element, node);
var fieldType = getFieldType(bo);
return {
fieldType: fieldType
};
},
set: function(element, values, node) {
var props = assign({}, DEFAULT_PROPS);
var fieldType = values.fieldType;
if (fieldType === 'string') {
props.string = '';
}
else if (fieldType === 'expression') {
props.expression = '';
}
return cmdHelper.updateBusinessObject(element, getSelectedField(element, node), props);
},
hidden: function(element, node) {
return !isSelected(element, node);
}
}));
entries.push(entryFactory.textBox({
id: idPrefix + 'field-value',
label: translate('Value'),
modelProperty: 'fieldValue',
get: function(element, node) {
var bo = getSelectedField(element, node);
var fieldType = getFieldType(bo);
var fieldValue;
if (fieldType === 'string') {
fieldValue = bo && (bo.string || bo.stringValue);
}
else if (fieldType === 'expression') {
fieldValue = bo && bo.expression;
}
return {
fieldValue: fieldValue
};
},
set: function(element, values, node) {
var bo = getSelectedField(element, node);
var fieldType = getFieldType(bo);
var props = assign({}, DEFAULT_PROPS);
var fieldValue = values.fieldValue || undefined;
if (fieldType === 'string') {
props.string = fieldValue;
}
else if (fieldType === 'expression') {
props.expression = fieldValue;
}
return cmdHelper.updateBusinessObject(element, bo, props);
},
validate: function(element, values, node) {
var bo = getSelectedField(element, node);
var validation = {};
if (bo) {
if (!values.fieldValue) {
validation.fieldValue = translate('Must provide a value');
}
}
return validation;
},
show: function(element, node) {
return isSelected(element, node);
}
}));
return entries;
};