UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

183 lines (182 loc) 6.5 kB
/** * DevExtreme (ui/map/provider.dynamic.js) * Version: 18.1.3 * Build date: Tue May 15 2018 * * Copyright (c) 2012 - 2018 Developer Express Inc. ALL RIGHTS RESERVED * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/ */ "use strict"; var Promise = require("../../core/polyfills/promise"), extend = require("../../core/utils/extend").extend, iteratorUtils = require("../../core/utils/iterator"), Provider = require("./provider"), abstract = Provider.abstract; var DynamicProvider = Provider.inherit({ _geocodeLocation: function(location) { return new Promise(function(resolve) { var cache = this._geocodedLocations, cachedLocation = cache[location]; if (cachedLocation) { resolve(cachedLocation) } else { this._geocodeLocationImpl(location).then(function(geocodedLocation) { cache[location] = geocodedLocation; resolve(geocodedLocation) }) } }.bind(this)) }, _renderImpl: function() { return this._load().then(function() { return this._init() }.bind(this)).then(function() { return Promise.all([this.updateMapType(), this._areBoundsSet() ? this.updateBounds() : this.updateCenter()]) }.bind(this)).then(function() { this._attachHandlers(); return new Promise(function(resolve) { var timeout = setTimeout(function() { clearTimeout(timeout); resolve() }) }) }.bind(this)) }, _load: function() { if (!this._mapsLoader) { this._mapsLoader = this._loadImpl() } this._markers = []; this._routes = []; return this._mapsLoader }, _loadImpl: abstract, _init: abstract, _attachHandlers: abstract, addMarkers: function(options) { return Promise.all(iteratorUtils.map(options, function(options) { return this._addMarker(options) }.bind(this))).then(function(markerObjects) { this._fitBounds(); return [false, iteratorUtils.map(markerObjects, function(markerObject) { return markerObject.marker })] }.bind(this)) }, _addMarker: function(options) { return this._renderMarker(options).then(function(markerObject) { this._markers.push(extend({ options: options }, markerObject)); this._fireMarkerAddedAction({ options: options, originalMarker: markerObject.marker }); return markerObject }.bind(this)) }, _renderMarker: abstract, removeMarkers: function(markersOptionsToRemove) { var that = this; iteratorUtils.each(markersOptionsToRemove, function(_, markerOptionToRemove) { that._removeMarker(markerOptionToRemove) }); return Promise.resolve() }, _removeMarker: function(markersOptionToRemove) { var that = this; iteratorUtils.each(this._markers, function(markerIndex, markerObject) { if (markerObject.options !== markersOptionToRemove) { return true } that._destroyMarker(markerObject); that._markers.splice(markerIndex, 1); that._fireMarkerRemovedAction({ options: markerObject.options }); return false }) }, _destroyMarker: abstract, _clearMarkers: function() { while (this._markers.length > 0) { this._removeMarker(this._markers[0].options) } }, addRoutes: function(options) { return Promise.all(iteratorUtils.map(options, function(options) { return this._addRoute(options) }.bind(this))).then(function(routeObjects) { this._fitBounds(); return [false, iteratorUtils.map(routeObjects, function(routeObject) { return routeObject.instance })] }.bind(this)) }, _addRoute: function(options) { return this._renderRoute(options).then(function(routeObject) { this._routes.push(extend({ options: options }, routeObject)); this._fireRouteAddedAction({ options: options, originalRoute: routeObject.instance }); return routeObject }.bind(this)) }, _renderRoute: abstract, removeRoutes: function(options) { var that = this; iteratorUtils.each(options, function(routeIndex, options) { that._removeRoute(options) }); return Promise.resolve() }, _removeRoute: function(options) { var that = this; iteratorUtils.each(this._routes, function(routeIndex, routeObject) { if (routeObject.options !== options) { return true } that._destroyRoute(routeObject); that._routes.splice(routeIndex, 1); that._fireRouteRemovedAction({ options: options }); return false }) }, _destroyRoute: abstract, _clearRoutes: function() { while (this._routes.length > 0) { this._removeRoute(this._routes[0].options) } }, adjustViewport: function() { return this._fitBounds() }, isEventsCanceled: function() { return true }, _fitBounds: abstract, _updateBounds: function() { var that = this; this._clearBounds(); if (!this._option("autoAdjust")) { return } iteratorUtils.each(this._markers, function(_, markerObject) { that._extendBounds(markerObject.location) }); iteratorUtils.each(this._routes, function(_, routeObject) { routeObject.northEast && that._extendBounds(routeObject.northEast); routeObject.southWest && that._extendBounds(routeObject.southWest) }) }, _clearBounds: function() { this._bounds = null }, _extendBounds: abstract }); module.exports = DynamicProvider;