UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

213 lines (211 loc) 7.1 kB
/** * DevExtreme (cjs/__internal/ui/map/m_provider.dynamic.js) * Version: 24.2.6 * Build date: Mon Mar 17 2025 * * Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/ */ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _class = _interopRequireDefault(require("../../../core/class")); var _renderer = _interopRequireDefault(require("../../../core/renderer")); var _extend = require("../../../core/utils/extend"); var _iterator = require("../../../core/utils/iterator"); var _m_provider = _interopRequireDefault(require("./m_provider")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e } } const MAP_MARKER_CLASS = "dx-map-marker"; class DynamicProvider extends _m_provider.default { ctor(map, $container) { this._geocodedLocations = {}; super.ctor(map, $container) } _geocodeLocation(location) { return new Promise((resolve => { const cache = this._geocodedLocations; const cachedLocation = cache[location]; if (cachedLocation) { resolve(cachedLocation) } else { this._geocodeLocationImpl(location).then((geocodedLocation => { cache[location] = geocodedLocation; resolve(geocodedLocation) })) } })) } _renderImpl() { return this._load().then((() => this._init())).then((() => Promise.all([this.updateMapType(), this._areBoundsSet() ? this.updateBounds() : this.updateCenter()]))).then((() => { this._attachHandlers(); return new Promise((resolve => { const timeout = setTimeout((() => { clearTimeout(timeout); resolve() })) })) })) } _load() { if (!this._mapsLoader) { this._mapsLoader = this._loadImpl() } this._markers = []; this._routes = []; return this._mapsLoader } _loadImpl() { _class.default.abstract() } _init() { _class.default.abstract() } _attachHandlers() { _class.default.abstract() } addMarkers(options) { return Promise.all((0, _iterator.map)(options, (options => this._addMarker(options)))).then((markerObjects => { this._fitBounds(); return [false, (0, _iterator.map)(markerObjects, (markerObject => markerObject.marker))] })) } _addMarker(options) { return this._renderMarker(options).then((markerObject => { this._markers.push((0, _extend.extend)({ options: options }, markerObject)); this._fireMarkerAddedAction({ options: options, originalMarker: markerObject.marker }); return markerObject })) } _renderMarker(options) { _class.default.abstract() } _createIconTemplate(iconSrc) { const $img = (0, _renderer.default)("<img>"); $img.attr("src", iconSrc); $img.attr("alt", "Marker icon"); $img.addClass("dx-map-marker"); return $img[0] } removeMarkers(markersOptionsToRemove) { const that = this; (0, _iterator.each)(markersOptionsToRemove, ((_, markerOptionToRemove) => { that._removeMarker(markerOptionToRemove) })); return Promise.resolve() } _removeMarker(markersOptionToRemove) { const that = this; (0, _iterator.each)(this._markers, ((markerIndex, markerObject) => { if (markerObject.options !== markersOptionToRemove) { return true } that._destroyMarker(markerObject); that._markers.splice(markerIndex, 1); that._fireMarkerRemovedAction({ options: markerObject.options }); return false })) } _destroyMarker(marker) { _class.default.abstract() } _clearMarkers() { while (this._markers.length > 0) { this._removeMarker(this._markers[0].options) } } addRoutes(options) { return Promise.all((0, _iterator.map)(options, (options => this._addRoute(options)))).then((routeObjects => { this._fitBounds(); return [false, (0, _iterator.map)(routeObjects, (routeObject => routeObject.instance))] })) } _addRoute(options) { return this._renderRoute(options).then((routeObject => { this._routes.push((0, _extend.extend)({ options: options }, routeObject)); this._fireRouteAddedAction({ options: options, originalRoute: routeObject.instance }); return routeObject })) } _renderRoute(options) { _class.default.abstract() } removeRoutes(options) { const that = this; (0, _iterator.each)(options, ((routeIndex, options) => { that._removeRoute(options) })); return Promise.resolve() } _removeRoute(options) { const that = this; (0, _iterator.each)(this._routes, ((routeIndex, routeObject) => { if (routeObject.options !== options) { return true } that._destroyRoute(routeObject); that._routes.splice(routeIndex, 1); that._fireRouteRemovedAction({ options: options }); return false })) } _destroyRoute(routeObject) { _class.default.abstract() } _geocodeLocationImpl(location) { _class.default.abstract() } _clearRoutes() { while (this._routes.length > 0) { this._removeRoute(this._routes[0].options) } } adjustViewport() { return this._fitBounds() } isEventsCanceled(e) { return true } _fitBounds() { _class.default.abstract() } _updateBounds() { const that = this; this._clearBounds(); if (!this._option("autoAdjust")) { return }(0, _iterator.each)(this._markers, ((_, markerObject) => { that._extendBounds(markerObject.location) })); (0, _iterator.each)(this._routes, ((_, routeObject) => { routeObject.northEast && that._extendBounds(routeObject.northEast); routeObject.southWest && that._extendBounds(routeObject.southWest) })) } _clearBounds() { this._bounds = null } _extendBounds(location) { _class.default.abstract() } } var _default = exports.default = DynamicProvider;