import { getType as getElementType } from '../../util/Elements'; /** * Adds change support to the diagram, including * * * * @param {EventBus} eventBus * @param {Canvas} canvas * @param {ElementRegistry} elementRegistry * @param {GraphicsFactory} graphicsFactory */ export default function ChangeSupport( eventBus, canvas, elementRegistry, graphicsFactory) { // redraw shapes / connections on change eventBus.on('element.changed', function(event) { var element = event.element; // element might have been deleted and replaced by new element with same ID // thus check for parent of element except for root element if (element.parent || element === canvas.getRootElement()) { event.gfx = elementRegistry.getGraphics(element); } // shape + gfx may have been deleted if (!event.gfx) { return; } eventBus.fire(getElementType(element) + '.changed', event); }); eventBus.on('elements.changed', function(event) { var elements = event.elements; elements.forEach(function(e) { eventBus.fire('element.changed', { element: e }); }); graphicsFactory.updateContainments(elements); }); eventBus.on('shape.changed', function(event) { graphicsFactory.update('shape', event.element, event.gfx); }); eventBus.on('connection.changed', function(event) { graphicsFactory.update('connection', event.element, event.gfx); }); } ChangeSupport.$inject = [ 'eventBus', 'canvas', 'elementRegistry', 'graphicsFactory' ];