@projectstorm/react-canvas-core
Version:
76 lines • 3.02 kB
JavaScript
import * as React from 'react';
import { TransformLayerWidget } from '../layer/TransformLayerWidget';
import styled from '@emotion/styled';
import { SmartLayerWidget } from '../layer/SmartLayerWidget';
var S;
(function (S) {
S.Canvas = styled.div `
position: relative;
cursor: move;
overflow: hidden;
`;
})(S || (S = {}));
export class CanvasWidget extends React.Component {
constructor(props) {
super(props);
this.ref = React.createRef();
this.state = {
action: null,
diagramEngineListener: null
};
}
componentWillUnmount() {
this.props.engine.deregisterListener(this.canvasListener);
this.props.engine.setCanvas(null);
document.removeEventListener('keyup', this.keyUp);
document.removeEventListener('keydown', this.keyDown);
}
registerCanvas() {
this.props.engine.setCanvas(this.ref.current);
this.props.engine.iterateListeners((list) => {
list.rendered && list.rendered();
});
}
componentDidUpdate() {
this.registerCanvas();
}
componentDidMount() {
this.canvasListener = this.props.engine.registerListener({
repaintCanvas: () => {
this.forceUpdate();
}
});
this.keyDown = (event) => {
this.props.engine.getActionEventBus().fireAction({ event });
};
this.keyUp = (event) => {
this.props.engine.getActionEventBus().fireAction({ event });
};
document.addEventListener('keyup', this.keyUp);
document.addEventListener('keydown', this.keyDown);
this.registerCanvas();
}
render() {
const engine = this.props.engine;
const model = engine.getModel();
return (React.createElement(S.Canvas, { className: this.props.className, ref: this.ref, onWheel: (event) => {
this.props.engine.getActionEventBus().fireAction({ event });
}, onMouseDown: (event) => {
this.props.engine.getActionEventBus().fireAction({ event });
}, onMouseUp: (event) => {
this.props.engine.getActionEventBus().fireAction({ event });
}, onMouseMove: (event) => {
this.props.engine.getActionEventBus().fireAction({ event });
}, onTouchStart: (event) => {
this.props.engine.getActionEventBus().fireAction({ event });
}, onTouchEnd: (event) => {
this.props.engine.getActionEventBus().fireAction({ event });
}, onTouchMove: (event) => {
this.props.engine.getActionEventBus().fireAction({ event });
} }, model.getLayers().map((layer) => {
return (React.createElement(TransformLayerWidget, { layer: layer, key: layer.getID() },
React.createElement(SmartLayerWidget, { layer: layer, engine: this.props.engine, key: layer.getID() })));
})));
}
}
//# sourceMappingURL=CanvasWidget.js.map