@projectstorm/react-diagrams-core
Version:
This workspace houses the default models
85 lines • 3.12 kB
JavaScript
import * as React from 'react';
import _map from 'lodash/map';
import { LabelWidget } from '../label/LabelWidget';
import { PeformanceWidget } from '@projectstorm/react-canvas-core';
export class LinkWidget extends React.Component {
constructor(props) {
super(props);
this.state = {
sourcePort: null,
targetPort: null
};
}
componentWillUnmount() {
if (this.sourceListener) {
this.sourceListener.deregister();
}
if (this.targetListener) {
this.targetListener.deregister();
}
}
static getDerivedStateFromProps(nextProps, prevState) {
return {
sourcePort: nextProps.link.getSourcePort(),
targetPort: nextProps.link.getTargetPort()
};
}
installTarget() {
this.targetListener && this.targetListener.deregister();
if (!this.props.link.getTargetPort())
return;
this.targetListener = this.props.link.getTargetPort().registerListener({
reportInitialPosition: (event) => {
this.forceUpdate();
}
});
}
installSource() {
this.sourceListener && this.sourceListener.deregister();
if (!this.props.link.getSourcePort())
return;
this.sourceListener = this.props.link.getSourcePort().registerListener({
reportInitialPosition: (event) => {
this.forceUpdate();
}
});
}
componentDidUpdate(prevProps, prevState, snapshot) {
if (prevState.sourcePort !== this.state.sourcePort) {
this.installSource();
}
if (prevState.targetPort !== this.state.targetPort) {
this.installTarget();
}
}
static generateLinePath(firstPoint, lastPoint) {
return `M${firstPoint.getX()},${firstPoint.getY()} L ${lastPoint.getX()},${lastPoint.getY()}`;
}
componentDidMount() {
if (this.props.link.getSourcePort()) {
this.installSource();
}
if (this.props.link.getTargetPort()) {
this.installTarget();
}
}
render() {
const { link } = this.props;
// only draw the link when we have reported positions
if (link.getSourcePort() && !link.getSourcePort().reportedPosition) {
return null;
}
if (link.getTargetPort() && !link.getTargetPort().reportedPosition) {
return null;
}
//generate links
return (React.createElement(PeformanceWidget, { model: this.props.link, serialized: this.props.link.serialize() }, () => {
return (React.createElement("g", { "data-linkid": this.props.link.getID() },
this.props.diagramEngine.generateWidgetForLink(link),
_map(this.props.link.getLabels(), (labelModel, index) => {
return (React.createElement(LabelWidget, { key: labelModel.getID(), engine: this.props.diagramEngine, label: labelModel, index: index }));
})));
}));
}
}
//# sourceMappingURL=LinkWidget.js.map