ngx-diagrams
Version:
> Light Weight, Modular, Typed Diagram Engine for Angular
122 lines • 14.8 kB
JavaScript
import { createEntityState, createValueState } from '../state/state';
import { isString } from '../utils';
import { BaseModel } from './base.model';
import { LinkModel } from './link.model';
export class PortModel extends BaseModel {
constructor(name, type, id, maximumLinks, linkType, magnetic = true, logPrefix = '[Port]') {
super(type, id, logPrefix);
this.links$ = createEntityState([], this.entityPipe('links'));
this.x$ = createValueState(0, this.entityPipe('x'));
this.y$ = createValueState(0, this.entityPipe('y'));
this.width$ = createValueState(0, this.entityPipe('y'));
this.height$ = createValueState(0, this.entityPipe('y'));
this.magnetic$ = createValueState(true, this.entityPipe('magnetic'));
this.canCreateLinks$ = createValueState(true, this.entityPipe('magnetic'));
this.name = name;
this.maximumLinks = maximumLinks;
this.linkType = linkType;
this.setMagnetic(magnetic);
}
serialize() {
return Object.assign(Object.assign(Object.assign({}, super.serialize()), { name: this.getName(), linkType: this.getLinkType(), maximumLinks: this.getMaximumLinks(), type: this.getType(), magnetic: this.getMagnetic(), height: this.getHeight(), width: this.getWidth(), canCreateLinks: this.getCanCreateLinks() }), this.getCoords());
}
getNode() {
return this.getParent();
}
getName() {
return this.name;
}
getCanCreateLinks() {
const numberOfLinks = this.getLinks().size;
if (this.maximumLinks && numberOfLinks >= this.maximumLinks) {
return false;
}
return this.canCreateLinks$.value;
}
getCoords() {
return { x: this.getX(), y: this.getY() };
}
selectCanCreateLinks() {
return this.canCreateLinks$.value$;
}
setCanCreateLinks(value) {
this.canCreateLinks$.set(value).emit();
}
getMagnetic() {
return this.magnetic$.value;
}
selectMagnetic() {
return this.magnetic$.value$;
}
setMagnetic(magnetic) {
this.magnetic$.set(magnetic).emit();
}
selectX() {
return this.x$.value$;
}
selectY() {
return this.y$.value$;
}
getY() {
return this.y$.value;
}
getX() {
return this.x$.value;
}
getHeight() {
return this.height$.value;
}
getWidth() {
return this.width$.value;
}
getMaximumLinks() {
return this.maximumLinks;
}
setMaximumLinks(maximumLinks) {
this.maximumLinks = maximumLinks;
}
getLinkType() {
return this.linkType;
}
setLinkType(type) {
this.linkType = type;
}
removeLink(linkOrId) {
const linkId = isString(linkOrId) ? linkOrId : linkOrId.id;
this.links$.remove(linkId, false).emit();
}
addLink(link) {
this.links$.add(link).emit();
}
getLinks() {
return this.links$.value;
}
getLinksArray() {
return this.links$.array();
}
selectLinks() {
return this.links$.value$;
}
updateCoords({ x, y, width, height }) {
this.x$.set(x).emit();
this.y$.set(y).emit();
this.width$.set(width).emit();
this.height$.set(height).emit();
}
canLinkToPort(port) {
return true;
}
isLocked() {
return super.getLocked();
}
createLinkModel() {
if (this.getCanCreateLinks()) {
return new LinkModel();
}
}
destroy() {
super.destroy();
this.links$.clear().emit();
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9ydC5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi9saWJzL25neC1kaWFncmFtcy9zcmMvIiwic291cmNlcyI6WyJsaWIvbW9kZWxzL3BvcnQubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckUsT0FBTyxFQUFpQixRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBR3pDLE1BQU0sT0FBTyxTQUFVLFNBQVEsU0FBb0I7SUFjakQsWUFDRSxJQUFZLEVBQ1osSUFBYSxFQUNiLEVBQVcsRUFDWCxZQUFxQixFQUNyQixRQUFpQixFQUNqQixRQUFRLEdBQUcsSUFBSSxFQUNmLFNBQVMsR0FBRyxRQUFRO1FBRXBCLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBakJuQixXQUFNLEdBQUcsaUJBQWlCLENBQVksRUFBRSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNwRSxPQUFFLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMvQyxPQUFFLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMvQyxXQUFNLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNuRCxZQUFPLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FB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QyxJQUFJLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsYUFBYSxDQUFDLElBQWU7UUFDM0IsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRTtZQUM1QixPQUFPLElBQUksU0FBUyxFQUFFLENBQUM7U0FDeEI7SUFDSCxDQUFDO0lBRUQsT0FBTztRQUNMLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzdCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNyZWF0ZUVudGl0eVN0YXRlLCBjcmVhdGVWYWx1ZVN0YXRlIH0gZnJvbSAnLi4vc3RhdGUvc3RhdGUnO1xuaW1wb3J0IHsgRW50aXR5TWFwLCBJRCwgaXNTdHJpbmcgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBCYXNlTW9kZWwgfSBmcm9tICcuL2Jhc2UubW9kZWwnO1xuaW1wb3J0IHsgTGlua01vZGVsIH0gZnJvbSAnLi9saW5rLm1vZGVsJztcbmltcG9ydCB7IE5vZGVNb2RlbCB9IGZyb20gJy4vbm9kZS5tb2RlbCc7XG5cbmV4cG9ydCBjbGFzcyBQb3J0TW9kZWwgZXh0ZW5kcyBCYXNlTW9kZWw8Tm9kZU1vZGVsPiB7XG4gIC8vIFRPRE86IGNvbnZlcnQgYWxsIHByaW1pdGl2ZXMgdG8gc3ViamVjdHNcbiAgcHJvdGVjdGVkIG5hbWU6IHN0cmluZztcbiAgcHJvdGVjdGVkIG1heGltdW1MaW5rczogbnVtYmVyO1xuICBwcm90ZWN0ZWQgbGlua1R5cGU6IHN0cmluZztcblxuICBwcm90ZWN0ZWQgbGlua3MkID0gY3JlYXRlRW50aXR5U3RhdGU8TGlua01vZGVsPihbXSwgdGhpcy5lbnRpdHlQaXBlKCdsaW5rcycpKTtcbiAgcHJvdGVjdGVkIHgkID0gY3JlYXRlVmFsdWVTdGF0ZSgwLCB0aGlzLmVudGl0eVBpcGUoJ3gnKSk7XG4gIHByb3RlY3RlZCB5JCA9IGNyZWF0ZVZhbHVlU3RhdGUoMCwgdGhpcy5lbnRpdHlQaXBlKCd5JykpO1xuICBwcm90ZWN0ZWQgd2lkdGgkID0gY3JlYXRlVmFsdWVTdGF0ZSgwLCB0aGlzLmVudGl0eVBpcGUoJ3knKSk7XG4gIHByb3RlY3RlZCBoZWlnaHQkID0gY3JlYXRlVmFsdWVTdGF0ZSgwLCB0aGlzLmVudGl0eVBpcGUoJ3knKSk7XG4gIHByb3RlY3RlZCBtYWduZXRpYyQgPSBjcmVhdGVWYWx1ZVN0YXRlKHRydWUsIHRoaXMuZW50aXR5UGlwZSgnbWFnbmV0aWMnKSk7XG4gIHByb3RlY3RlZCBjYW5DcmVhdGVMaW5rcyQgPSBjcmVhdGVWYWx1ZVN0YXRlKHRydWUsIHRoaXMuZW50aXR5UGlwZSgnbWFnbmV0aWMnKSk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHR5cGU/OiBzdHJpbmcsXG4gICAgaWQ/OiBzdHJpbmcsXG4gICAgbWF4aW11bUxpbmtzPzogbnVtYmVyLFxuICAgIGxpbmtUeXBlPzogc3RyaW5nLFxuICAgIG1hZ25ldGljID0gdHJ1ZSxcbiAgICBsb2dQcmVmaXggPSAnW1BvcnRdJ1xuICApIHtcbiAgICBzdXBlcih0eXBlLCBpZCwgbG9nUHJlZml4KTtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMubWF4aW11bUxpbmtzID0gbWF4aW11bUxpbmtzO1xuICAgIHRoaXMubGlua1R5cGUgPSBsaW5rVHlwZTtcbiAgICB0aGlzLnNldE1hZ25ldGljKG1hZ25ldGljKTtcbiAgfVxuXG4gIHNlcmlhbGl6ZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3VwZXIuc2VyaWFsaXplKCksXG4gICAgICBuYW1lOiB0aGlzLmdldE5hbWUoKSxcbiAgICAgIGxpbmtUeXBlOiB0aGlzLmdldExpbmtUeXBlKCksXG4gICAgICBtYXhpbXVtTGlua3M6IHRoaXMuZ2V0TWF4aW11bUxpbmtzKCksXG4gICAgICB0eXBlOiB0aGlzLmdldFR5cGUoKSxcbiAgICAgIG1hZ25ldGljOiB0aGlzLmdldE1hZ25ldGljKCksXG4gICAgICBoZWlnaHQ6IHRoaXMuZ2V0SGVpZ2h0KCksXG4gICAgICB3aWR0aDogdGhpcy5nZXRXaWR0aCgpLFxuICAgICAgY2FuQ3JlYXRlTGlua3M6IHRoaXMuZ2V0Q2FuQ3JlYXRlTGlua3MoKSxcbiAgICAgIC4uLnRoaXMuZ2V0Q29vcmRzKClcbiAgICB9O1xuICB9XG5cbiAgZ2V0Tm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQYXJlbnQoKTtcbiAgfVxuXG4gIGdldE5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgfVxuXG4gIGdldENhbkNyZWF0ZUxpbmtzKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG51bWJlck9mTGlua3MgPSB0aGlzLmdldExpbmtzKCkuc2l6ZTtcblxuICAgIGlmICh0aGlzLm1heGltdW1MaW5rcyAmJiBudW1iZXJPZkxpbmtzID49IHRoaXMubWF4aW11bUxpbmtzKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY2FuQ3JlYXRlTGlua3MkLnZhbHVlO1xuICB9XG5cbiAgZ2V0Q29vcmRzKCkge1xuICAgIHJldHVybiB7IHg6IHRoaXMuZ2V0WCgpLCB5OiB0aGlzLmdldFkoKSB9O1xuICB9XG5cbiAgc2VsZWN0Q2FuQ3JlYXRlTGlua3MoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuY2FuQ3JlYXRlTGlua3MkLnZhbHVlJDtcbiAgfVxuXG4gIHNldENhbkNyZWF0ZUxpbmtzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5jYW5DcmVhdGVMaW5rcyQuc2V0KHZhbHVlKS5lbWl0KCk7XG4gIH1cblxuICBnZXRNYWduZXRpYygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tYWduZXRpYyQudmFsdWU7XG4gIH1cblxuICBzZWxlY3RNYWduZXRpYygpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5tYWduZXRpYyQudmFsdWUkO1xuICB9XG5cbiAgc2V0TWFnbmV0aWMobWFnbmV0aWM6IGJvb2xlYW4pIHtcbiAgICB0aGlzLm1hZ25ldGljJC5zZXQobWFnbmV0aWMpLmVtaXQoKTtcbiAgfVxuXG4gIHNlbGVjdFgoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy54JC52YWx1ZSQ7XG4gIH1cblxuICBzZWxlY3RZKCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMueSQudmFsdWUkO1xuICB9XG5cbiAgZ2V0WSgpIHtcbiAgICByZXR1cm4gdGhpcy55JC52YWx1ZTtcbiAgfVxuXG4gIGdldFgoKSB7XG4gICAgcmV0dXJuIHRoaXMueCQudmFsdWU7XG4gIH1cblxuICBnZXRIZWlnaHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGVpZ2h0JC52YWx1ZTtcbiAgfVxuXG4gIGdldFdpZHRoKCkge1xuICAgIHJldHVybiB0aGlzLndpZHRoJC52YWx1ZTtcbiAgfVxuXG4gIGdldE1heGltdW1MaW5rcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm1heGltdW1MaW5rcztcbiAgfVxuXG4gIHNldE1heGltdW1MaW5rcyhtYXhpbXVtTGlua3M6IG51bWJlcikge1xuICAgIHRoaXMubWF4aW11bUxpbmtzID0gbWF4aW11bUxpbmtzO1xuICB9XG5cbiAgZ2V0TGlua1R5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubGlua1R5cGU7XG4gIH1cblxuICBzZXRMaW5rVHlwZSh0eXBlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmxpbmtUeXBlID0gdHlwZTtcbiAgfVxuXG4gIHJlbW92ZUxpbmsobGlua09ySWQ6IElEIHwgTGlua01vZGVsKSB7XG4gICAgY29uc3QgbGlua0lkID0gaXNTdHJpbmcobGlua09ySWQpID8gbGlua09ySWQgOiBsaW5rT3JJZC5pZDtcbiAgICB0aGlzLmxpbmtzJC5yZW1vdmUobGlua0lkLCBmYWxzZSkuZW1pdCgpO1xuICB9XG5cbiAgYWRkTGluayhsaW5rOiBMaW5rTW9kZWwpIHtcbiAgICB0aGlzLmxpbmtzJC5hZGQobGluaykuZW1pdCgpO1xuICB9XG5cbiAgZ2V0TGlua3MoKTogRW50aXR5TWFwPExpbmtNb2RlbD4ge1xuICAgIHJldHVybiB0aGlzLmxpbmtzJC52YWx1ZTtcbiAgfVxuXG4gIGdldExpbmtzQXJyYXkoKTogTGlua01vZGVsW10ge1xuICAgIHJldHVybiB0aGlzLmxpbmtzJC5hcnJheSgpO1xuICB9XG5cbiAgc2VsZWN0TGlua3MoKTogT2JzZXJ2YWJsZTxFbnRpdHlNYXA8TGlua01vZGVsPj4ge1xuICAgIHJldHVybiB0aGlzLmxpbmtzJC52YWx1ZSQ7XG4gIH1cblxuICB1cGRhdGVDb29yZHMoeyB4LCB5LCB3aWR0aCwgaGVpZ2h0IH06IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0pIHtcbiAgICB0aGlzLngkLnNldCh4KS5lbWl0KCk7XG4gICAgdGhpcy55JC5zZXQoeSkuZW1pdCgpO1xuICAgIHRoaXMud2lkdGgkLnNldCh3aWR0aCkuZW1pdCgpO1xuICAgIHRoaXMuaGVpZ2h0JC5zZXQoaGVpZ2h0KS5lbWl0KCk7XG4gIH1cblxuICBjYW5MaW5rVG9Qb3J0KHBvcnQ6IFBvcnRNb2RlbCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaXNMb2NrZWQoKSB7XG4gICAgcmV0dXJuIHN1cGVyLmdldExvY2tlZCgpO1xuICB9XG5cbiAgY3JlYXRlTGlua01vZGVsKCkge1xuICAgIGlmICh0aGlzLmdldENhbkNyZWF0ZUxpbmtzKCkpIHtcbiAgICAgIHJldHVybiBuZXcgTGlua01vZGVsKCk7XG4gICAgfVxuICB9XG5cbiAgZGVzdHJveSgpIHtcbiAgICBzdXBlci5kZXN0cm95KCk7XG4gICAgdGhpcy5saW5rcyQuY2xlYXIoKS5lbWl0KCk7XG4gIH1cbn1cbiJdfQ==