diff --git a/src/map/controls/screenshotcontrol.js b/src/map/controls/screenshotcontrol.js index dd3ae3251..8bff2e900 100644 --- a/src/map/controls/screenshotcontrol.js +++ b/src/map/controls/screenshotcontrol.js @@ -33,14 +33,18 @@ export class ScreenshotControl extends InteractionControl { clickmap: true, enabled: true, layers: [], + onclick: saveBlob, ...opts }); - this.types = []; + this.types = []; - (opts.types || []).forEach(type => this.addType(type)); + //add disabled property for avoid to click on capture button many times + this.disabled = false; - this.layers= opts.layers; + (opts.types || []).forEach(t => this.addType(t)); + + this.layers = opts.layers; //set visibility based on layers this.setVisible(this.checkVisible(this.layers)); @@ -48,7 +52,7 @@ export class ScreenshotControl extends InteractionControl { //only if is visible (no CORS issue) need to listen to add/remove layer if (this.isVisible()) { //listen to add/remove External Layer event to check visibility of the control - GUI.getService('map').onafter('loadExternalLayer', this._addLayer.bind(this)); + GUI.getService('map').onafter('loadExternalLayer', this._addLayer.bind(this)); GUI.getService('map').onafter('unloadExternalLayer', this._removeLayer.bind(this)); } } @@ -64,22 +68,22 @@ export class ScreenshotControl extends InteractionControl { this.toggledTool = this.toggledTool || { __title: 'sdk.mapcontrols.screenshot.title', __iconClass: 'camera', - data: () => ({ types: this.types, type: this.types[0] }), + data: () => ({ types: this.types, type: this.types[0], disabled: this.disabled }), template: /* html */ `
- +
`, methods: { - async download(e) { + download: async (type) => { const map = GUI.getService('map'); // Start download ApplicationState.download = true; - e.target.disabled = true; + this.disabled = true; try { - const blob = 'screenshot' === this.type + const blob = 'screenshot' === type ? await map.createMapImage() // PNG : await (await fetch(`/${map.project.getType()}/api/asgeotiff/${map.project.getId()}/`, { // GeoTIFF method: 'POST', @@ -89,8 +93,8 @@ export class ScreenshotControl extends InteractionControl { bbox: map.getMapBBOX().toString(), }).reduce((a, k) => { a.append(k[0], k[1]); return a; }, new FormData()) })).blob(); - - saveBlob(blob, `map_${Date.now()}`); + //Call onclik method + this._onclick(blob, `map_${Date.now()}`); } catch (e) { GUI.showUserMessage({ type: 'SecurityError' === e.name ? 'warning' : 'alert', @@ -101,7 +105,7 @@ export class ScreenshotControl extends InteractionControl { } // End download ApplicationState.download = false; - e.target.disabled = false; + this.disabled = false; return true; } }, diff --git a/src/services/iframe.js b/src/services/iframe.js index 5beaf63c5..1fb56ca92 100644 --- a/src/services/iframe.js +++ b/src/services/iframe.js @@ -474,10 +474,11 @@ class AppService extends BaseIframeService { return; } - this.mapControls.screenshot.control.overwriteOnClickEvent(async() => { + this.mapControls.screenshot.control.overwriteOnClickEvent((blob) => { let response; + alert(blob) try { - response = { result: true, data: await this.mapService.createMapImage() }; + response = { result: true, data: blob }; } catch(e) { console.warn(e); response = { result: false, data: e };