UNPKG

google-maps-drawing-tools

Version:
62 lines 8.08 kB
import Tool, { ToolId } from '../tool'; import overlayToFeature from '../utils/overlay-to-feature'; export default class RectangleTool extends Tool { constructor(options) { super(options); this.id = ToolId.Rectangle; this.data = options.data; // private this.dmId = google.maps.drawing.OverlayType.RECTANGLE; this.dm = new google.maps.drawing.DrawingManager({ drawingControl: false }); this.dmOptions = options.style || { strokeColor: '#374046', fillColor: '#374046', fillOpacity: 0.5, strokeWeight: 2, clickable: false }; // TODO: should we have a temp data layer as well? this.data.setStyle(this.dmOptions); } activate() { let shape = super.activate(); let dm = this.dm; dm.setDrawingMode(this.dmId); dm.setOptions({ [`${this.dmId}Options`]: this.dmOptions }); dm.setMap(this.map); this.setupListeners(); return shape; } deactivate() { super.deactivate(); let dm = this.dm; // "casting" to `any` because the typings are wrong in googlemaps dm.setDrawingMode(null); dm.setMap(null); this.cleanupListeners(); } setupListeners() { let dm = this.dm; let listener = dm.addListener('overlaycomplete', (event) => { let feature = overlayToFeature(event.overlay); if (event.overlay instanceof google.maps.Circle || event.overlay instanceof google.maps.Rectangle) { event.overlay.setMap(null); } this.feature = feature; this.data.add(feature); this.deactivate(); }); this.feature = undefined; this.dmListener = listener; } cleanupListeners() { if (this.dmListener) { google.maps.event.removeListener(this.dmListener); } } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjdGFuZ2xlLmpzIiwic291cmNlUm9vdCI6Ii9Vc2Vycy9pcmFkY2hlbmtvL3dvcmtzcGFjZS9nb29nbGUtbWFwcy1kcmF3aW5nLXRvb2xzLyIsInNvdXJjZXMiOlsidG9vbHMvcmVjdGFuZ2xlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxFQUFFLEVBQVMsTUFBTSxFQUFlLE1BQU0sU0FBUyxDQUFDO0FBQzNELE9BQU8sZ0JBQWdCLE1BQU0sNkJBQTZCLENBQUM7QUFPM0QsTUFBTSxDQUFDLE9BQU8sb0JBQXFCLFNBQVEsSUFBSTtJQVM3QyxZQUFZLE9BQTZCO1FBQ3ZDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVmLElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFFekIsVUFBVTtRQUNWLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQztRQUN0RCxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDO1lBQy9DLGNBQWMsRUFBRSxLQUFLO1NBQ3RCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLEtBQUssSUFBSTtZQUNoQyxXQUFXLEVBQUUsU0FBUztZQUN0QixTQUFTLEVBQUUsU0FBUztZQUNwQixXQUFXLEVBQUUsR0FBRztZQUNoQixZQUFZLEVBQUUsQ0FBQztZQUNmLFNBQVMsRUFBRSxLQUFLO1NBQ2pCLENBQUM7UUFFRixrREFBa0Q7UUFDbEQsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRTdCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7UUFFakIsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsRUFBRSxDQUFDLFVBQVUsQ0FBQztZQUNaLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxTQUFTLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUztTQUN4QyxDQUFDLENBQUM7UUFDSCxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVwQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdEIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsVUFBVTtRQUNSLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUVuQixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBRWpCLGlFQUFpRTtRQUNqRSxFQUFFLENBQUMsY0FBYyxDQUFDLElBQVcsQ0FBQyxDQUFDO1FBQy9CLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFaEIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVPLGNBQWM7UUFDcEIsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNqQixJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLGlCQUFpQixFQUFFLENBQUMsS0FBK0MsRUFBRSxFQUFFO1lBQ25HLElBQUksT0FBTyxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUU5QyxJQUFJLEtBQUssQ0FBQyxPQUFPLFlBQVksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sWUFBWSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDakcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDNUI7WUFFRCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztZQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN2QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQztRQUN6QixJQUFJLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQztJQUM3QixDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ25EO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFRvb2wsIHsgU2hhcGUsIFRvb2xJZCwgVG9vbE9wdGlvbnMgfSBmcm9tICcuLi90b29sJztcbmltcG9ydCBvdmVybGF5VG9GZWF0dXJlIGZyb20gJy4uL3V0aWxzL292ZXJsYXktdG8tZmVhdHVyZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjdGFuZ2xlVG9vbE9wdGlvbnMgZXh0ZW5kcyBUb29sT3B0aW9ucyB7XG4gIGRhdGE6IGdvb2dsZS5tYXBzLkRhdGE7XG4gIHN0eWxlPzogZ29vZ2xlLm1hcHMuQ2lyY2xlT3B0aW9ucztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVjdGFuZ2xlVG9vbCBleHRlbmRzIFRvb2wge1xuICBpZDogVG9vbElkO1xuICBkYXRhOiBnb29nbGUubWFwcy5EYXRhO1xuXG4gIHByaXZhdGUgZG1JZDogZ29vZ2xlLm1hcHMuZHJhd2luZy5PdmVybGF5VHlwZTtcbiAgcHJpdmF0ZSBkbTogZ29vZ2xlLm1hcHMuZHJhd2luZy5EcmF3aW5nTWFuYWdlcjtcbiAgcHJpdmF0ZSBkbU9wdGlvbnM6IGdvb2dsZS5tYXBzLkNpcmNsZU9wdGlvbnM7XG4gIHByaXZhdGUgZG1MaXN0ZW5lcj86IGdvb2dsZS5tYXBzLk1hcHNFdmVudExpc3RlbmVyO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFJlY3RhbmdsZVRvb2xPcHRpb25zKSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG5cbiAgICB0aGlzLmlkID0gVG9vbElkLlJlY3RhbmdsZTtcbiAgICB0aGlzLmRhdGEgPSBvcHRpb25zLmRhdGE7XG5cbiAgICAvLyBwcml2YXRlXG4gICAgdGhpcy5kbUlkID0gZ29vZ2xlLm1hcHMuZHJhd2luZy5PdmVybGF5VHlwZS5SRUNUQU5HTEU7XG4gICAgdGhpcy5kbSA9IG5ldyBnb29nbGUubWFwcy5kcmF3aW5nLkRyYXdpbmdNYW5hZ2VyKHtcbiAgICAgIGRyYXdpbmdDb250cm9sOiBmYWxzZVxuICAgIH0pO1xuICAgIHRoaXMuZG1PcHRpb25zID0gb3B0aW9ucy5zdHlsZSB8fCB7XG4gICAgICBzdHJva2VDb2xvcjogJyMzNzQwNDYnLFxuICAgICAgZmlsbENvbG9yOiAnIzM3NDA0NicsXG4gICAgICBmaWxsT3BhY2l0eTogMC41LFxuICAgICAgc3Ryb2tlV2VpZ2h0OiAyLFxuICAgICAgY2xpY2thYmxlOiBmYWxzZVxuICAgIH07XG5cbiAgICAvLyBUT0RPOiBzaG91bGQgd2UgaGF2ZSBhIHRlbXAgZGF0YSBsYXllciBhcyB3ZWxsP1xuICAgIHRoaXMuZGF0YS5zZXRTdHlsZSh0aGlzLmRtT3B0aW9ucyk7XG4gIH1cblxuICBhY3RpdmF0ZSgpOiBTaGFwZSB7XG4gICAgbGV0IHNoYXBlID0gc3VwZXIuYWN0aXZhdGUoKTtcblxuICAgIGxldCBkbSA9IHRoaXMuZG07XG5cbiAgICBkbS5zZXREcmF3aW5nTW9kZSh0aGlzLmRtSWQpO1xuICAgIGRtLnNldE9wdGlvbnMoe1xuICAgICAgW2Ake3RoaXMuZG1JZH1PcHRpb25zYF06IHRoaXMuZG1PcHRpb25zXG4gICAgfSk7XG4gICAgZG0uc2V0TWFwKHRoaXMubWFwKTtcblxuICAgIHRoaXMuc2V0dXBMaXN0ZW5lcnMoKTtcblxuICAgIHJldHVybiBzaGFwZTtcbiAgfVxuXG4gIGRlYWN0aXZhdGUoKSB7XG4gICAgc3VwZXIuZGVhY3RpdmF0ZSgpO1xuXG4gICAgbGV0IGRtID0gdGhpcy5kbTtcblxuICAgIC8vIFwiY2FzdGluZ1wiIHRvIGBhbnlgIGJlY2F1c2UgdGhlIHR5cGluZ3MgYXJlIHdyb25nIGluIGdvb2dsZW1hcHNcbiAgICBkbS5zZXREcmF3aW5nTW9kZShudWxsIGFzIGFueSk7XG4gICAgZG0uc2V0TWFwKG51bGwpO1xuXG4gICAgdGhpcy5jbGVhbnVwTGlzdGVuZXJzKCk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwTGlzdGVuZXJzKCkge1xuICAgIGxldCBkbSA9IHRoaXMuZG07XG4gICAgbGV0IGxpc3RlbmVyID0gZG0uYWRkTGlzdGVuZXIoJ292ZXJsYXljb21wbGV0ZScsIChldmVudDogZ29vZ2xlLm1hcHMuZHJhd2luZy5PdmVybGF5Q29tcGxldGVFdmVudCkgPT4ge1xuICAgICAgbGV0IGZlYXR1cmUgPSBvdmVybGF5VG9GZWF0dXJlKGV2ZW50Lm92ZXJsYXkpO1xuXG4gICAgICBpZiAoZXZlbnQub3ZlcmxheSBpbnN0YW5jZW9mIGdvb2dsZS5tYXBzLkNpcmNsZSB8fCBldmVudC5vdmVybGF5IGluc3RhbmNlb2YgZ29vZ2xlLm1hcHMuUmVjdGFuZ2xlKSB7XG4gICAgICAgIGV2ZW50Lm92ZXJsYXkuc2V0TWFwKG51bGwpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmZlYXR1cmUgPSBmZWF0dXJlO1xuICAgICAgdGhpcy5kYXRhLmFkZChmZWF0dXJlKTtcbiAgICAgIHRoaXMuZGVhY3RpdmF0ZSgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5mZWF0dXJlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZG1MaXN0ZW5lciA9IGxpc3RlbmVyO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhbnVwTGlzdGVuZXJzKCkge1xuICAgIGlmICh0aGlzLmRtTGlzdGVuZXIpIHtcbiAgICAgIGdvb2dsZS5tYXBzLmV2ZW50LnJlbW92ZUxpc3RlbmVyKHRoaXMuZG1MaXN0ZW5lcik7XG4gICAgfVxuICB9XG59XG4iXX0=