UNPKG

ngx-diagrams

Version:

> Light Weight, Modular, Typed Diagram Engine for Angular

122 lines 14.8 kB
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==