mirror of
https://github.com/sartography/bpmn-js.git
synced 2025-01-17 20:41:32 +00:00
2019c658df
This adds the modeling#updateProperties(element, props) method to the modeler that can be used to set BPMN 2.0 properties on elements. By assigning the properties this way, the modeler is aware of the elements that got changed and can update / redraw the elements accordingly. This hooks up with the modelers undo/redo chain, too. Related to #167
96 lines
2.4 KiB
JavaScript
96 lines
2.4 KiB
JavaScript
'use strict';
|
|
|
|
var _ = require('lodash');
|
|
|
|
var DEFAULT_FLOW = 'default',
|
|
NAME = 'name';
|
|
|
|
/**
|
|
* A handler that implements a BPMN 2.0 property update.
|
|
*
|
|
* This should be used to set simple properties on elements with
|
|
* an underlying BPMN business object.
|
|
*
|
|
* Use respective diagram-js provided handlers if you would
|
|
* like to perform automated modeling.
|
|
*/
|
|
function UpdatePropertiesHandler(elementRegistry) {
|
|
this._elementRegistry = elementRegistry;
|
|
}
|
|
|
|
UpdatePropertiesHandler.$inject = [ 'elementRegistry' ];
|
|
|
|
module.exports = UpdatePropertiesHandler;
|
|
|
|
|
|
////// api /////////////////////////////////////////////
|
|
|
|
/**
|
|
* Updates a BPMN element with a list of new properties
|
|
*
|
|
* @param {Object} context
|
|
* @param {djs.model.Base} context.element the element to update
|
|
* @param {Object} context.properties a list of properties to set on the element's
|
|
* businessObject (the BPMN model element)
|
|
*
|
|
* @return {Array<djs.mode.Base>} the updated element
|
|
*/
|
|
UpdatePropertiesHandler.prototype.execute = function(context) {
|
|
|
|
var element = context.element,
|
|
changed = [ element ];
|
|
|
|
if (!element) {
|
|
throw new Error('element required');
|
|
}
|
|
|
|
var elementRegistry = this._elementRegistry;
|
|
|
|
var businessObject = element.businessObject,
|
|
properties = context.properties,
|
|
oldProperties = context.oldProperties || _.pick(businessObject, _.keys(properties));
|
|
|
|
// correctly indicate visual changes on default flow updates
|
|
if (DEFAULT_FLOW in properties) {
|
|
|
|
if (properties[DEFAULT_FLOW]) {
|
|
changed.push(elementRegistry.get(properties[DEFAULT_FLOW].id));
|
|
}
|
|
|
|
if (businessObject[DEFAULT_FLOW]) {
|
|
changed.push(elementRegistry.get(businessObject[DEFAULT_FLOW].id));
|
|
}
|
|
}
|
|
|
|
if (NAME in properties && element.label) {
|
|
changed.push(element.label);
|
|
}
|
|
|
|
// update properties
|
|
_.assign(businessObject, properties);
|
|
|
|
|
|
// store old values
|
|
context.oldProperties = oldProperties;
|
|
context.changed = changed;
|
|
|
|
// indicate changed on objects affected by the update
|
|
return changed;
|
|
};
|
|
|
|
/**
|
|
* Reverts the update on a BPMN elements properties.
|
|
*
|
|
* @param {Object} context
|
|
*
|
|
* @return {djs.mode.Base} the updated element
|
|
*/
|
|
UpdatePropertiesHandler.prototype.revert = function(context) {
|
|
|
|
var element = context.element,
|
|
businessObject = element.businessObject;
|
|
|
|
_.assign(businessObject, context.oldProperties);
|
|
|
|
return context.changed;
|
|
}; |