Im trying to follow the GitHub - bpmn-io/bpmn-js-example-custom-rendering: An example of creating custom rendering for bpmn-js example.
for some reason the canRender(element) method is not called…
this is the code Im using for the customRender:
import BaseRenderer, { getRoundRectPath, is, isAny } from 'bpmn/dist/bpmn-modeler.development';
import {
append as svgAppend,
attr as svgAttr,
create as svgCreate,
remove as svgRemove
} from '../node_modules/tiny-svg/dist/index.cjs';
// Priority is set higher as 1000(=default) to make our rendercall first
const HIGH_PRIORITY = 1500;
const TASK_BORDER_RADIUS = 2;
// Create custom renderer
// By extending BaseRenderer we make sure our renderer will be called whenever a shape or connection is to be rendered.
export default class CustomRenderer extends BaseRenderer {
constructor(eventBus, bpmnRenderer) {
super(eventBus, HIGH_PRIORITY);
console.log("customrenderer available");
this.bpmnRenderer = bpmnRenderer;
}
canRender(element) {
console.log("canRender available in customrenderer");
// only render tasks and events (ignore labels)
return isAny(element, [ 'bpmn:Task', 'bpmn:Event' ]) && !element.labelTarget;
}
drawShape(parentNode, element) {
const shape = this.bpmnRenderer.drawShape(parentNode, element);
if (is(element, 'bpmn:Task')) {
const rect = drawRect(parentNode, 100, 80, TASK_BORDER_RADIUS, '#52B415');
prependTo(rect, parentNode);
svgRemove(shape);
return shape;
}
const rect = drawRect(parentNode, 30, 20, TASK_BORDER_RADIUS, '#cc0000');
svgAttr(rect, {
transform: 'translate(-20, -10)'
});
return shape;
}
getShapePath(shape) {
if (is(shape, 'bpmn:Task')) {
return getRoundRectPath(shape, TASK_BORDER_RADIUS);
}
return this.bpmnRenderer.getShapePath(shape);
}
}
CustomRenderer.$inject = [ 'eventBus', 'bpmnRenderer' ];
// Helpers
// copied from https://github.com/bpmn-io/bpmn-js/blob/master/lib/draw/BpmnRenderer.js
function drawRect(parentNode, width, height, borderRadius, strokeColor) {
const rect = svgCreate('rect');
svgAttr(rect, {
width: width,
height: height,
rx: borderRadius,
ry: borderRadius,
stroke: strokeColor || '#000',
strokeWidth: 2,
fill: '#fff'
});
svgAppend(parentNode, rect);
return rect;
}
// copied from https://github.com/bpmn-io/diagram-js/blob/master/lib/core/GraphicsFactory.js
function prependTo(newNode, parentNode, siblingNode) {
parentNode.insertBefore(newNode, siblingNode || parentNode.firstChild);
}
Did I forget something to add?