import { JsonObject, JsonProperty } from 'typescript-json-serializer'; import Style from 'ol/style/Style' import Feature from 'ol/Feature' import CircleStyle from 'ol/style/Circle' import Point from 'ol/geom/Point' import Fill from 'ol/style/Fill' import Stroke from 'ol/style/Stroke' import InterfaceManager from '@burguillosinfo/conquer/interface-manager' import NodeView from '@burguillosinfo/conquer/interface/node-view' @JsonObject() export default class MapNode { private feature: Feature | null = null; private callbacks: Record void>> = {} constructor( @JsonProperty() private uuid: string, @JsonProperty() private coordinate_1: number, @JsonProperty() private coordinate_2: number, @JsonProperty() private type: string, @JsonProperty() private name: string, @JsonProperty() private description: string, @JsonProperty() private kind: string, ) { } public click(interfaceManager: InterfaceManager): void { const viewNodeInterface = new NodeView(this); viewNodeInterface.on('close', () => { interfaceManager.remove(viewNodeInterface); }); interfaceManager.push(viewNodeInterface); this.runCallbacks('click'); } public on(eventName: string, callback: () => void): void { if (this.callbacks[eventName] === undefined) { this.callbacks[eventName] = [] } this.callbacks[eventName].push(callback) } protected runCallbacks(eventName: string) { const callbacks = this.callbacks[eventName]; if (callbacks === undefined) { return } for (const callback of callbacks) { callback() } } public getType(): string { return this.type; } public getName(): string { return this.name; } public getDescription(): string { return this.description; } public getId(): string { return 'node-' + this.uuid; } public getFeature(): Feature { if (this.feature === null) { console.log(this.coordinate_1); console.log(this.coordinate_2); this.feature = new Feature({ geometry: new Point([this.coordinate_1, this.coordinate_2]), type: 'node-' + this.uuid, }) } return this.feature; } public getStyle(): Style { return new Style({ image: new CircleStyle({ radius: 14, fill: new Fill({color: 'white'}), stroke: new Stroke({ color: 'gray', width: 2, }) }) }); } }