ruoyi-vue-nocode/ruoyi-ui/ruoyi-bpmnjs/resources/properties-panel/factory/EntryFactory.js
2022-08-11 16:10:41 +08:00

164 lines
4.2 KiB
JavaScript

'use strict';
var getBusinessObject = require('bpmn-js/lib/util/ModelUtil').getBusinessObject;
// input entities
var textInputField = require('./TextInputEntryFactory'),
checkboxField = require('./CheckboxEntryFactory'),
selectBoxField = require('./SelectEntryFactory'),
comboBoxField = require('./ComboEntryFactory'),
textBoxField = require('./TextBoxEntryFactory'),
validationAwareTextInputField = require('./ValidationAwareTextInput'),
tableField = require('./TableEntryFactory'),
labelEntry = require('./LabelFactory'),
link = require('./LinkEntryFactory');
var cmdHelper = require('../helper/CmdHelper');
// helpers ////////////////////////////////////////
function ensureNotNull(prop) {
if (!prop) {
throw new Error(prop + ' must be set.');
}
return prop;
}
/**
* sets the default parameters which are needed to create an entry
*
* @param options
* @returns {{id: *, description: (*|string), get: (*|Function), set: (*|Function),
* validate: (*|Function), html: string}}
*/
var setDefaultParameters = function(options) {
// default method to fetch the current value of the input field
var defaultGet = function(element) {
var bo = getBusinessObject(element),
res = {},
prop = ensureNotNull(options.modelProperty);
res[prop] = bo.get(prop);
return res;
};
// default method to set a new value to the input field
var defaultSet = function(element, values) {
var res = {},
prop = ensureNotNull(options.modelProperty);
if (values[prop] !== '') {
res[prop] = values[prop];
} else {
res[prop] = undefined;
}
return cmdHelper.updateProperties(element, res);
};
// default validation method
var defaultValidate = function() {
return {};
};
return {
id : options.id,
description : (options.description || ''),
get : (options.get || defaultGet),
set : (options.set || defaultSet),
validate : (options.validate || defaultValidate),
html: ''
};
};
function EntryFactory() {
}
/**
* Generates an text input entry object for a property panel.
* options are:
* - id: id of the entry - String
*
* - description: description of the property - String
*
* - label: label for the input field - String
*
* - set: setter method - Function
*
* - get: getter method - Function
*
* - validate: validation mehtod - Function
*
* - modelProperty: name of the model property - String
*
* - buttonAction: Object which contains the following properties: - Object
* ---- name: name of the [data-action] callback - String
* ---- method: callback function for [data-action] - Function
*
* - buttonShow: Object which contains the following properties: - Object
* ---- name: name of the [data-show] callback - String
* ---- method: callback function for [data-show] - Function
*
* @param options
* @returns the propertyPanel entry resource object
*/
EntryFactory.textField = function(options) {
return textInputField(options, setDefaultParameters(options));
};
EntryFactory.validationAwareTextField = function(options) {
return validationAwareTextInputField(options, setDefaultParameters(options));
};
/**
* Generates a checkbox input entry object for a property panel.
* options are:
* - id: id of the entry - String
*
* - description: description of the property - String
*
* - label: label for the input field - String
*
* - set: setter method - Function
*
* - get: getter method - Function
*
* - validate: validation method - Function
*
* - modelProperty: name of the model property - String
*
* @param options
* @returns the propertyPanel entry resource object
*/
EntryFactory.checkbox = function(options) {
return checkboxField(options, setDefaultParameters(options));
};
EntryFactory.textBox = function(options) {
return textBoxField(options, setDefaultParameters(options));
};
EntryFactory.selectBox = function(options) {
return selectBoxField(options, setDefaultParameters(options));
};
EntryFactory.comboBox = function(options) {
return comboBoxField(options);
};
EntryFactory.table = function(options) {
return tableField(options);
};
EntryFactory.label = function(options) {
return labelEntry(options);
};
EntryFactory.link = function(options) {
return link(options);
};
module.exports = EntryFactory;