123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310 |
- '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;
- };
|