@nextgis/ngw-map 4.0.0-rc.0 → 4.0.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.d.ts CHANGED
@@ -3,7 +3,7 @@ import NgwConnector, { Credentials, FeatureItem, ResourceDefinition } from '@nex
3
3
  import { MapOptions, RuntimeParams, WebMapEvents, WebMap, MapControls, ControlTargetPosition, AddControlOptions, LayerAdapter, LayerDef, FitOptions, MapClickEvent } from '@nextgis/webmap';
4
4
  export * from '@nextgis/webmap';
5
5
  import { EventEmitter } from 'events';
6
- import { NgwIdentify, IdentifyItem, ResourceAdapter, NgwLayerOptions, CompanyLogoOptions, FetchNgwItemOptions, FetchNgwItemsOptions, NgwFeatureRequestOptions, NgwFeatureItemResponse } from '@nextgis/ngw-kit';
6
+ import { NgwIdentify, IdentifyItem, ResourceAdapter, NgwLayerOptions, CompanyLogoOptions, NgwGeoJsonLayerOptions, NgwGeoJsonLayerAdapter, NgwWebmapLayerAdapter, FetchNgwItemOptions, FetchNgwItemsOptions, NgwFeatureRequestOptions, NgwFeatureItemResponse } from '@nextgis/ngw-kit';
7
7
  import { FeatureProperties, JsonMap } from '@nextgis/utils';
8
8
  import { Geometry, Feature, FeatureCollection } from 'geojson';
9
9
  import StrictEventEmitter from 'strict-event-emitter-types';
@@ -174,6 +174,10 @@ declare class NgwMap<M = unknown, L = unknown, C extends object = any, O extends
174
174
  * });
175
175
  * ```
176
176
  */
177
+ addNgwLayer<P extends FeatureProperties = FeatureProperties>(options: NgwGeoJsonLayerOptions<NoInfer<P>>): Promise<NgwGeoJsonLayerAdapter<P, M, L> | undefined>;
178
+ addNgwLayer(options: NgwLayerOptions<'NGW:WEBMAP'> & {
179
+ adapter: 'NGW:WEBMAP';
180
+ }): Promise<NgwWebmapLayerAdapter<M> | undefined>;
177
181
  addNgwLayer(options: NgwLayerOptions): Promise<ResourceAdapter | undefined>;
178
182
  /**
179
183
  * Pans and zooms the map to the initial position specified in the options
@@ -207,7 +211,7 @@ declare class NgwMap<M = unknown, L = unknown, C extends object = any, O extends
207
211
  fitLayer(layerDef: LayerDef | number, options?: FitOptions): Promise<void>;
208
212
  fitResource(resource: ResourceDefinition, options?: FitOptions): Promise<void>;
209
213
  /** @deprecated use {@link fitLayer} instead */
210
- zoomToLayer(layerDef: string | ResourceAdapter): Promise<void>;
214
+ zoomToLayer(layerDef: LayerDef): Promise<void>;
211
215
  onLoad(event?: keyof NgwMapEvents): Promise<this>;
212
216
  removeLayer(layerDef: LayerDef): void;
213
217
  enableSelection(): void;
@@ -1,4 +1,4 @@
1
- /** Bundle of @nextgis/ngw-map; version: 4.0.0-rc.0; author: NextGIS */
1
+ /** Bundle of @nextgis/ngw-map; version: 4.0.0-rc.1; author: NextGIS */
2
2
  'use strict';
3
3
 
4
4
  Object.defineProperty(exports, '__esModule', { value: true });
@@ -129,22 +129,6 @@ class NgwMap extends webmap.WebMap {
129
129
  await this.onLoad("controls:create");
130
130
  return super.addControl(controlDef, position, options);
131
131
  }
132
- /**
133
- * Add any (style, vector, webmap) NGW layer by resource definition.
134
- * @param options - set layer identification parameters and render method.
135
- *
136
- * @example
137
- * ```javascript
138
- * // Add raster layer resourceId is the style of 4004 layer
139
- * ngwMap.addNgwLayer({ resource: 4005 });
140
- * // Add vector data from layer GEOJSON source
141
- * ngwMap.addNgwLayer({
142
- * resource: 4038,
143
- * adapter: 'GEOJSON',
144
- * adapterOptions: { paint: { color: 'red' } }
145
- * });
146
- * ```
147
- */
148
132
  async addNgwLayer(options) {
149
133
  await this.onMapLoad();
150
134
  const { keyname, resourceId, filters } = options;
@@ -1 +1 @@
1
- {"version":3,"file":"ngw-map.cjs.js","sources":["../src/utils/appendNgwResources.ts","../src/utils/prepareWebMapOptions.ts","../src/NgwMap.ts","../src/index.ts"],"sourcesContent":["import type { NgwLayerOptions } from '@nextgis/ngw-kit';\n\nimport type { NgwResourceDefinition } from '../interfaces';\n\nexport function appendNgwResources(\n options: NgwLayerOptions[],\n resource?: NgwResourceDefinition,\n defOptions?: Partial<NgwLayerOptions>,\n overwriteOptions?: Partial<NgwLayerOptions>,\n): void {\n if (typeof resource === 'number' || typeof resource === 'string') {\n resource = Number(resource);\n options.push({\n ...defOptions,\n resource,\n });\n } else if (Array.isArray(resource)) {\n const [resourceId, id] = resource;\n options.push({\n ...defOptions,\n resource: resourceId,\n id,\n ...overwriteOptions,\n });\n } else if (typeof resource === 'object') {\n options.push({ ...defOptions, ...resource, ...overwriteOptions });\n }\n}\n","import NgwConnector from '@nextgis/ngw-connector';\nimport { NgwKit } from '@nextgis/ngw-kit';\nimport { QmsKit } from '@nextgis/qms-kit';\nimport { deepmerge } from '@nextgis/utils';\nimport { getDefaultControls } from '@nextgis/webmap';\n\nimport type { MapOptions, StarterKit } from '@nextgis/webmap';\n\nimport type { NgwMapOptions } from '../interfaces';\n\nexport const OPTIONS: NgwMapOptions = {\n target: 'map',\n baseUrl: '',\n whitlabel: false,\n controls: getDefaultControls(),\n controlsOptions: {\n ZOOM: { position: 'top-left' },\n ATTRIBUTION: {\n position: 'bottom-right',\n customAttribution: [\n '<a href=\"https://nextgis.com\" target=\"_blank\">©NextGIS</a>',\n ],\n },\n },\n pixelRadius: 10,\n};\n\nexport function prepareWebMapOptions(options: NgwMapOptions): MapOptions {\n const kits: StarterKit[] = [new QmsKit()];\n if (options.starterKits) {\n options.starterKits.forEach((x) => {\n kits.push(x);\n });\n }\n\n if (!options.connector) {\n options.connector = new NgwConnector({\n baseUrl: options.baseUrl || '',\n auth: options.auth,\n withCredentials: options.withCredentials,\n });\n } else if (options.connector) {\n options.baseUrl = options.connector.options.baseUrl;\n }\n options = deepmerge(OPTIONS, options);\n\n if (!options.center && !options.bounds) {\n options.bounds = [-179, -90, 180, 90];\n // options.maxBounds = options.bounds;\n }\n\n if (options.connector) {\n kits.push(\n new NgwKit({\n connector: options.connector,\n auth: options.auth,\n }),\n );\n }\n options = {\n ...options,\n starterKits: kits,\n create: false,\n };\n return options;\n}\n","import { getIcon } from '@nextgis/icons';\nimport NgwConnector from '@nextgis/ngw-connector';\nimport {\n createIdentifyItem,\n createNgwLayerAdapter,\n fetchIdentifyGeoJson,\n fetchIdentifyItem,\n fetchNgwExtent,\n fetchNgwLayerFeature,\n fetchNgwLayerFeatureCollection,\n fetchNgwLayerItem,\n fetchNgwLayerItems,\n getCompanyLogo,\n getIdentifyItems,\n sendIdentifyRequest,\n} from '@nextgis/ngw-kit';\nimport {\n defined,\n getCirclePolygonCoordinates,\n getIdentifyRadius,\n isObject,\n} from '@nextgis/utils';\nimport { deprecatedWarn } from '@nextgis/utils';\nimport { WebMap } from '@nextgis/webmap';\nimport { EventEmitter } from 'events';\n\nimport { appendNgwResources } from './utils/appendNgwResources';\nimport { prepareWebMapOptions } from './utils/prepareWebMapOptions';\n\nimport type {\n FeatureItem,\n FeatureLayersIdentify,\n FeatureLayersIdentifyItems,\n LayerFeature,\n ResourceDefinition,\n} from '@nextgis/ngw-connector';\nimport type {\n FetchNgwItemsOptions,\n NgwFeatureItemResponse,\n NgwFeatureRequestOptions,\n NgwIdentify,\n NgwWebmapItem,\n ResourceAdapter,\n} from '@nextgis/ngw-kit';\nimport type { NgwLayerOptions } from '@nextgis/ngw-kit';\nimport type { FetchNgwItemOptions } from '@nextgis/ngw-kit';\nimport type { QmsAdapterOptions } from '@nextgis/qms-kit';\nimport type { FeatureProperties, JsonMap } from '@nextgis/utils';\nimport type {\n AdapterOptions,\n AddControlOptions,\n ControlTargetPosition,\n FitOptions,\n LayerAdapter,\n LayerDef,\n MapClickEvent,\n MapControls,\n OnLayerMouseOptions,\n WebMapEvents,\n} from '@nextgis/webmap';\nimport type { CompositeRead } from '@nextgisweb/resource/type/api';\nimport type { Feature, FeatureCollection, Geometry, Polygon } from 'geojson';\nimport type StrictEventEmitter from 'strict-event-emitter-types';\n\nimport type {\n NgwIdentifyEvent,\n NgwLayers,\n NgwMapEvents,\n NgwMapOptions,\n} from './interfaces';\n\ntype PromiseGroup = 'select' | 'identify';\n\n/**\n * Base class containing the logic of interaction WebMap with NextGIS services.\n *\n * @example\n * ```javascript\n * import { NgwMap } from '@nextgis/ngw-map';\n * import MapAdapter from '@nextgis/leaflet-map-adapter';\n * // styles are not included in the leaflet-map-adapter\n * import 'leaflet/dist/leaflet.css';\n *\n * const ngwMap = new NgwMap({\n * mapAdapter: new MapAdapter(),\n * target: 'map',\n * qmsId: 448,\n * baseUrl: 'https://demo.nextgis.com',\n * webmapId: 3985\n * });\n * ```\n */\nexport class NgwMap<\n M = unknown,\n L = unknown,\n C extends object = any,\n O extends NgwMapOptions<M, C> = NgwMapOptions<M, C>,\n> extends WebMap<M, L, C, NgwMapEvents, O> {\n static getIcon = getIcon;\n\n readonly emitter: StrictEventEmitter<EventEmitter, NgwMapEvents> =\n new EventEmitter();\n connector!: NgwConnector;\n\n protected _ngwLayers: NgwLayers = {};\n private $$selectFromNgwRaster?: (ev: MapClickEvent) => void;\n private $$selectFromNgwVector?: (ev: OnLayerMouseOptions) => void;\n private _promises: Record<\n PromiseGroup,\n [Promise<unknown>, AbortController][]\n > = {\n select: [],\n identify: [],\n };\n\n constructor(options: O) {\n super(prepareWebMapOptions(options) as O);\n if (options.connector) {\n this.connector = options.connector;\n }\n this._createWebMap().then(() => {\n const container = this.getContainer();\n if (container) {\n container.classList.add('ngw-map-container');\n }\n if (this.options.whitlabel) {\n this._whiteLabel();\n }\n });\n }\n\n /**\n * Organized addition to the map design and controls elements,\n * calling `control.onAdd(this.webMap.mapAdapter)`\n * @param control - object with onAdd and onRemove methods\n * or a string value indicating the name of the control installed in the map adapter\n * @param position - position relative to the map angles\n * @param options - initialization parameters if the control is set as a string value\n *\n * @example\n * ```javascript\n * ngwMap.addControl(new CustomControl(), 'bottom-left');\n * ngwMap.addControl('ZOOM', 'top-right')\n * ```\n */\n async addControl<K extends keyof MapControls>(\n controlDef: K | C,\n position: ControlTargetPosition,\n options?: MapControls[K] & AddControlOptions,\n ): Promise<any> {\n await this.onLoad('controls:create');\n return super.addControl(controlDef, position, options);\n }\n\n /**\n * Add any (style, vector, webmap) NGW layer by resource definition.\n * @param options - set layer identification parameters and render method.\n *\n * @example\n * ```javascript\n * // Add raster layer resourceId is the style of 4004 layer\n * ngwMap.addNgwLayer({ resource: 4005 });\n * // Add vector data from layer GEOJSON source\n * ngwMap.addNgwLayer({\n * resource: 4038,\n * adapter: 'GEOJSON',\n * adapterOptions: { paint: { color: 'red' } }\n * });\n * ```\n */\n async addNgwLayer(\n options: NgwLayerOptions,\n ): Promise<ResourceAdapter | undefined> {\n await this.onMapLoad();\n // @ts-expect-error for backward compatibility\n const { keyname, resourceId, filters } = options;\n\n if (keyname || resourceId !== undefined) {\n deprecatedWarn(\n 'set `resource` options instead of `keyname` or `resourceId`',\n );\n }\n\n const resource = options.resource;\n if (!keyname && !resourceId && !resource) {\n throw new Error(\n 'resource, resourceId or keyname is required parameter to add NGW layer',\n );\n }\n if (defined(this.options.baseUrl)) {\n try {\n options.adapterOptions = options.adapterOptions || {};\n if (defined(this.options.setViewDelay)) {\n if (!defined(options.adapterOptions.setViewDelay)) {\n options.adapterOptions.setViewDelay = this.options.setViewDelay;\n }\n }\n if (defined(filters)) {\n options.adapterOptions.propertiesFilter = filters;\n }\n\n const adapter = createNgwLayerAdapter(options, this, this.connector);\n const adapterOpts = {\n visibility: true,\n // TODO: do not merge options, use only `adapterOptions`\n ...options,\n ...options.adapterOptions,\n } as AdapterOptions;\n const layer = (await this.addLayer(\n adapter,\n adapterOpts,\n )) as ResourceAdapter<M, L, AdapterOptions>;\n const id = layer && this.getLayerId(layer);\n if (layer && id) {\n this._ngwLayers[id] = { layer, resourceId: layer.resourceId };\n layer.options.name =\n layer.options.name ||\n (layer.item && layer.item.resource.display_name);\n if (layer.options.baselayer) {\n const visibleLayerBaseLayer = this.getActiveBaseLayer();\n if (visibleLayerBaseLayer) {\n return layer;\n }\n }\n }\n return layer;\n } catch (er) {\n const resId =\n isObject(resource) && 'id' in resource\n ? resource.id\n : keyname || resourceId || resource;\n console.error(`Can't add NGW layer ${resId}.`, er);\n }\n }\n }\n\n /**\n * Pans and zooms the map to the initial position specified in the options\n */\n fit(): void {\n const { center, zoom, bounds } = this.options;\n if (center) {\n this.setCenter(center);\n if (zoom) {\n this.setZoom(zoom);\n }\n } else if (bounds) {\n this.fitBounds(bounds);\n }\n }\n\n fetchNgwLayerItem<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(options: Omit<FetchNgwItemOptions<P>, 'connector'>): Promise<FeatureItem> {\n return fetchNgwLayerItem<G, P>({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchNgwLayerItems<\n F extends FeatureProperties = FeatureProperties,\n G extends Geometry = Geometry,\n >(\n options: Omit<FetchNgwItemsOptions<F>, 'connector'>,\n ): Promise<FeatureItem<F, G>[]> {\n return fetchNgwLayerItems<G, F>({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchNgwLayerFeature<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n options: Omit<FetchNgwItemOptions<P>, 'connector'>,\n ): Promise<Feature<G, P>> {\n return fetchNgwLayerFeature<G, P>({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchNgwLayerFeatures<\n G extends Geometry | null = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n options: Omit<FetchNgwItemsOptions<P>, 'connector'>,\n ): Promise<FeatureCollection<G, P>> {\n return fetchNgwLayerFeatureCollection({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchIdentifyItem<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n identify: NgwIdentify,\n requestOptions?: NgwFeatureRequestOptions,\n // multiple = false\n ): Promise<NgwFeatureItemResponse<P, G> | undefined> {\n const abortController = new AbortController();\n const abortSignal = abortController.signal;\n\n if (requestOptions?.signal) {\n requestOptions.signal.addEventListener('abort', abortController.abort);\n }\n requestOptions = requestOptions || {};\n requestOptions.signal = abortSignal;\n\n const promise = fetchIdentifyItem<G, P>({\n identify,\n connector: this.connector,\n requestOptions,\n // multiple,\n });\n this._addPromise('identify', promise, abortController);\n return promise;\n }\n\n fetchIdentifyGeoJson(\n identify: NgwIdentify,\n { multiple, signal }: { multiple?: boolean; signal?: AbortSignal } = {},\n ): Promise<Feature | undefined> {\n const abortController = new AbortController();\n\n if (signal) {\n if (signal.aborted) {\n return Promise.reject(new NgwConnector.errors.AbortError());\n }\n signal.addEventListener('abort', () => {\n abortController.abort('AbortError');\n });\n }\n\n const promise = fetchIdentifyGeoJson({\n identify,\n connector: this.connector,\n multiple,\n requestOptions: { signal: abortController.signal },\n });\n if (promise && 'then' in promise) {\n this._addPromise('identify', promise, abortController);\n return promise;\n } else {\n return Promise.resolve(promise);\n }\n }\n\n /**\n * @deprecated use {@link fetchIdentifyGeoJson} instead\n */\n getIdentifyGeoJson(\n identify: NgwIdentify,\n multiple = false,\n ): Promise<Feature | undefined> {\n return this.fetchIdentifyGeoJson(identify, { multiple });\n }\n\n async getNgwLayers(): Promise<NgwLayers> {\n await this.onLoad();\n return this._ngwLayers;\n }\n\n async getNgwLayerByResourceId(id: number): Promise<LayerAdapter | undefined> {\n for (const n in this._ngwLayers) {\n const mem = this._ngwLayers[n];\n if (mem.resourceId === id) {\n return mem && mem.layer;\n } else if (mem.layer.getIdentificationIds) {\n const ids = await mem.layer.getIdentificationIds();\n if (ids && ids.some((x) => x === id)) {\n return mem.layer;\n }\n }\n if (mem.layer.getDependLayers) {\n const dependLayers = mem.layer.getDependLayers() as NgwWebmapItem[];\n const dependFit = dependLayers.find((x) => {\n return (\n x.item &&\n 'style_parent_id' in x.item &&\n x.item.style_parent_id !== undefined &&\n x.item.style_parent_id === id\n );\n });\n if (dependFit) {\n return dependFit.layer;\n }\n }\n }\n }\n\n /**\n * Move map to layer. If the layer is NGW resource, extent will be received from the server\n *\n * @example\n * ```javascript\n * const ngwLayer = ngwMap.addNgwLayer({ id: 'ngw_layer_name', resource: 4005 });\n * ngwMap.fitLayer(ngwLayer);\n * ngwMap.fitLayer('ngw_layer_name');\n * ```\n */\n async fitLayer(\n layerDef: LayerDef | number,\n options?: FitOptions,\n ): Promise<void> {\n let id: string | undefined;\n if (typeof layerDef === 'string' || typeof layerDef === 'number') {\n id = String(id);\n } else {\n id = layerDef.id;\n }\n const ngwLayer = id && this._ngwLayers[id];\n if (ngwLayer) {\n if (ngwLayer.layer.getBounds) {\n const bounds = await ngwLayer.layer.getBounds();\n if (bounds) {\n this.fitBounds(bounds, options);\n }\n } else {\n let item: CompositeRead | undefined;\n if (ngwLayer.layer.item) {\n item = ngwLayer.layer.item;\n } else {\n const resourceId = ngwLayer.resourceId;\n item = await this.connector.getResource(resourceId);\n }\n if (item) {\n this.fitResource(item.resource.id);\n }\n }\n } else {\n super.fitLayer(\n typeof layerDef === 'number' ? String(layerDef) : layerDef,\n options,\n );\n }\n }\n\n async fitResource(\n resource: ResourceDefinition,\n options?: FitOptions,\n ): Promise<void> {\n const resourceId = await this.connector.resources.getIdOrFail(resource);\n\n const extent = await fetchNgwExtent({\n resourceId,\n connector: this.connector,\n });\n\n if (extent) {\n this.fitBounds(extent, options);\n }\n }\n\n /** @deprecated use {@link fitLayer} instead */\n async zoomToLayer(layerDef: string | ResourceAdapter): Promise<void> {\n return this.fitLayer(layerDef);\n }\n\n onLoad(event: keyof NgwMapEvents = 'ngw-map:create'): Promise<this> {\n return super.onLoad(event as keyof WebMapEvents);\n }\n\n removeLayer(layerDef: LayerDef): void {\n const layer = this.getLayer(layerDef);\n if (layer) {\n const layerId = this.getLayerId(layer);\n if (layerId) {\n delete this._ngwLayers[layerId];\n }\n super.removeLayer(layer);\n }\n }\n\n enableSelection(): void {\n if (!this.$$selectFromNgwRaster) {\n this.$$selectFromNgwRaster = (ev: MapClickEvent) => {\n const count = this._getSelectListenersCount();\n if (count) {\n this.selectFromNgwRaster(ev);\n }\n };\n this.$$selectFromNgwVector = (ev: OnLayerMouseOptions) => {\n const count = this._getSelectListenersCount();\n if (count) {\n this._selectFromNgwVector(ev);\n }\n };\n this.emitter.on('click', this.$$selectFromNgwRaster);\n this.emitter.on('layer:click', this.$$selectFromNgwVector);\n }\n }\n\n disableSelection(): void {\n if (this.$$selectFromNgwRaster) {\n this.emitter.removeListener('click', this.$$selectFromNgwRaster);\n this.$$selectFromNgwRaster = undefined;\n }\n if (this.$$selectFromNgwVector) {\n this.emitter.removeListener('layer:click', this.$$selectFromNgwVector);\n\n this.$$selectFromNgwVector = undefined;\n }\n }\n\n /**\n * @deprecated use {@link fetchNgwLayerItem} instead\n */\n getNgwLayerItem<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(options: Omit<FetchNgwItemOptions<P>, 'connector'>): Promise<FeatureItem> {\n return this.fetchNgwLayerItem<G, P>(options);\n }\n\n /**\n * @deprecated use {@link fetchNgwLayerItems} instead\n */\n getNgwLayerItems<\n F extends FeatureProperties = FeatureProperties,\n G extends Geometry = Geometry,\n >(\n options: Omit<FetchNgwItemsOptions<F>, 'connector'>,\n ): Promise<FeatureItem<F, G>[]> {\n return this.fetchNgwLayerItems<F, G>(options);\n }\n\n /**\n * @deprecated use {@link fetchNgwLayerFeature} instead\n */\n getNgwLayerFeature<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n options: Omit<FetchNgwItemOptions<P>, 'connector'>,\n ): Promise<Feature<G, P>> {\n return this.fetchNgwLayerFeature<G, P>(options);\n }\n\n /**\n * @deprecated use {@link fetchNgwLayerFeatures} instead\n */\n getNgwLayerFeatures<\n G extends Geometry | null = Geometry,\n P extends JsonMap = JsonMap,\n >(options: FetchNgwItemsOptions<P>): Promise<FeatureCollection<G, P>> {\n return this.fetchNgwLayerFeatures(options);\n }\n\n /** @deprecated use {@link cancelPromises} instead */\n cancelPromise(...args: PromiseGroup[]): void {\n this.cancelPromises(...args);\n }\n\n cancelPromises(...args: PromiseGroup[]): void {\n if (!args.length) {\n args = Object.keys(this._promises) as PromiseGroup[];\n }\n args.forEach((name) => {\n const group = this._promises[name];\n if (group) {\n group.forEach((x) => x[1].abort());\n this._promises[name] = [];\n }\n });\n }\n\n async selectFromNgwRaster(\n ev: MapClickEvent,\n ): Promise<NgwIdentifyEvent | undefined> {\n this._emitStatusEvent('ngw:preselect');\n\n const promises: Promise<number[] | undefined>[] = [];\n const layers = Object.values(this._ngwLayers);\n layers.sort((a, b) => {\n if (a.layer.order && b.layer.order) {\n return b.layer.order - a.layer.order;\n }\n return 1;\n });\n for (const l of layers) {\n const layer = l.layer;\n const identFunc =\n typeof layer.getIdentificationIds === 'function'\n ? layer.getIdentificationIds\n : false;\n const interactive = layer.options.interactive ?? true;\n if (\n identFunc &&\n layer.options.selectable &&\n interactive &&\n this.isLayerVisible(layer)\n ) {\n const layerIds = identFunc.call(layer);\n promises.push(layerIds);\n }\n }\n const getIdsPromise = Promise.all(promises);\n const getIds = await getIdsPromise;\n const ids: number[] = [];\n for (const x of getIds) {\n if (x) {\n ids.push(...x);\n }\n }\n\n if (!ids.length) {\n this._emitStatusEvent('ngw:select', null);\n return;\n }\n\n const pixelRadius = this.options.pixelRadius || 10;\n const center = this.getCenter();\n let zoom = this.getZoom();\n zoom = zoom !== undefined ? zoom : 20;\n if (!center || !zoom) {\n this._emitStatusEvent('ngw:select', null);\n return;\n }\n const radius = getIdentifyRadius(center, zoom, pixelRadius);\n\n let geom: Polygon | undefined;\n if (this.options.highlightIdentification) {\n const highlightOptions = this.options.highlightIdentification;\n const highlightDuration =\n typeof highlightOptions === 'number' ? highlightOptions : 1000;\n const [lng, lat] = ev.lngLat;\n geom = {\n type: 'Polygon',\n coordinates: [getCirclePolygonCoordinates(lng, lat, radius)],\n };\n\n const highlightIdentificationLayer = await this.addGeoJsonLayer({\n data: {\n type: 'Feature',\n geometry: geom,\n },\n });\n if (highlightDuration !== Infinity) {\n setTimeout(() => {\n this.removeLayer(highlightIdentificationLayer);\n }, highlightDuration);\n }\n }\n const abortController = new AbortController();\n const selectPromise = sendIdentifyRequest(ev, {\n layers: ids,\n connector: this.connector,\n radius,\n geom,\n signal: abortController.signal,\n }).then((resp) => {\n const identify: NgwIdentify = {\n ...resp,\n resources: ids,\n sourceType: 'raster',\n event: ev,\n };\n const identifyEvent: NgwIdentifyEvent = this._prepareToIdentify(identify);\n this._emitStatusEvent('ngw:select', identifyEvent);\n return identifyEvent;\n });\n this._addPromise('select', selectPromise, abortController);\n return selectPromise;\n }\n\n private _addPromise(\n groupName: PromiseGroup,\n promise: Promise<unknown>,\n abortController: AbortController,\n ) {\n const group = this._promises[groupName];\n if (group && group.findIndex((g) => g[0] === promise) === -1) {\n const removeFromGroup = () => {\n const index = group.findIndex((g) => g[0] === promise);\n if (index !== -1) {\n group.splice(index, 1);\n }\n };\n promise.then(removeFromGroup, removeFromGroup);\n\n group.push([promise, abortController]);\n }\n }\n\n private _isFitFromResource() {\n const params = this._initMapState;\n if (params.zoom && params.center) {\n return false;\n }\n return true;\n }\n\n private async _createWebMap() {\n await this.create();\n if (this.options.qmsId) {\n this._addQmsBaseLayer();\n }\n if (this.options.osm) {\n this._addOsmBaseLayer();\n }\n\n const resources: NgwLayerOptions[] = [];\n const layerFitAllowed = this._isFitFromResource();\n if (this.options.webmapId) {\n appendNgwResources(resources, this.options.webmapId, {\n fit: layerFitAllowed,\n });\n }\n if (this.options.resources && Array.isArray(this.options.resources)) {\n for (const x of this.options.resources) {\n const overwriteOptions: Partial<NgwLayerOptions> = {};\n if (!layerFitAllowed) {\n overwriteOptions.fit = false;\n }\n appendNgwResources(resources, x, {}, overwriteOptions);\n }\n }\n for (const r of resources) {\n try {\n await this.addNgwLayer(r);\n } catch (er) {\n console.warn(er);\n }\n }\n this._emitStatusEvent('ngw-map:create', this);\n this.enableSelection();\n }\n\n private _addOsmBaseLayer() {\n this.addBaseLayer('OSM');\n }\n\n private _addQmsBaseLayer() {\n let qmsId: number;\n let qmsLayerName: string | undefined;\n if (Array.isArray(this.options.qmsId)) {\n qmsId = this.options.qmsId[0];\n qmsLayerName = this.options.qmsId[1];\n } else {\n qmsId = Number(this.options.qmsId);\n }\n const qmsLayerOptions: Partial<QmsAdapterOptions> = {\n qmsId,\n };\n if (qmsLayerName) {\n qmsLayerOptions.id = qmsLayerName;\n }\n\n this.addBaseLayer('QMS', qmsLayerOptions);\n }\n\n private _selectFromNgwVector(\n ev: OnLayerMouseOptions,\n ): FeatureLayersIdentify | undefined {\n const layer: ResourceAdapter = ev.layer as ResourceAdapter;\n const selectable = layer.options.selectable && this.isLayerVisible(layer);\n if (!selectable) {\n return undefined;\n }\n // Item property means layer is NgwResource\n const id = layer.item && layer.item.resource.id;\n const feature = ev.feature;\n\n if (id !== undefined && feature) {\n const featureId = feature.id;\n if (featureId) {\n const identifyFeature: LayerFeature = {\n id: Number(featureId),\n fields: feature.properties || {},\n label: `#${id}`,\n layerId: Number(id),\n parent: '',\n geom: feature.geometry,\n };\n const items: FeatureLayersIdentifyItems = {\n featureCount: 1,\n features: [identifyFeature],\n };\n const identify: FeatureLayersIdentify = {\n featureCount: 1,\n [id]: items,\n };\n this._emitStatusEvent(\n 'ngw:select',\n this._prepareToIdentify({\n ...identify,\n resources: [id],\n sourceType: 'vector',\n } as NgwIdentify),\n );\n return identify;\n }\n }\n }\n\n private _prepareToIdentify<\n F extends FeatureProperties = FeatureProperties,\n G extends Geometry = Geometry,\n >(identify: NgwIdentify): NgwIdentifyEvent {\n const getIdentifyItems_ = () => {\n return getIdentifyItems(identify, true).map((x) => {\n return createIdentifyItem<F, G>({\n feature: x.feature,\n connector: this.connector,\n });\n });\n };\n return {\n ...identify,\n getIdentifyItems: getIdentifyItems_,\n };\n }\n\n private _getSelectListenersCount() {\n return this.emitter.listenerCount('ngw:select');\n }\n\n private async _whiteLabel() {\n const container = this.getContainer();\n if (container) {\n const logo = await getCompanyLogo(\n this.connector,\n this.options.companyLogoOptions,\n );\n if (logo) {\n container.appendChild(logo);\n }\n }\n }\n}\n","import { NgwMap } from './NgwMap';\n\nimport type { NgwMapOptions } from './interfaces';\n\nexport * from './interfaces';\nexport * from '@nextgis/webmap';\n\nexport { NgwMap };\n\nexport async function createNgwMap(options: NgwMapOptions): Promise<NgwMap> {\n const ngwMap = new NgwMap(options);\n return ngwMap.onLoad();\n}\n"],"names":["getDefaultControls","QmsKit","deepmerge","NgwKit","WebMap","EventEmitter","deprecatedWarn","defined","createNgwLayerAdapter","isObject","fetchNgwLayerItem","fetchNgwLayerItems","fetchNgwLayerFeature","fetchNgwLayerFeatureCollection","fetchIdentifyItem","fetchIdentifyGeoJson","fetchNgwExtent","getIdentifyRadius","getCirclePolygonCoordinates","sendIdentifyRequest","getIdentifyItems","createIdentifyItem","getCompanyLogo","getIcon"],"mappings":"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"}
1
+ {"version":3,"file":"ngw-map.cjs.js","sources":["../src/utils/appendNgwResources.ts","../src/utils/prepareWebMapOptions.ts","../src/NgwMap.ts","../src/index.ts"],"sourcesContent":["import type { NgwLayerOptions } from '@nextgis/ngw-kit';\n\nimport type { NgwResourceDefinition } from '../interfaces';\n\nexport function appendNgwResources(\n options: NgwLayerOptions[],\n resource?: NgwResourceDefinition,\n defOptions?: Partial<NgwLayerOptions>,\n overwriteOptions?: Partial<NgwLayerOptions>,\n): void {\n if (typeof resource === 'number' || typeof resource === 'string') {\n resource = Number(resource);\n options.push({\n ...defOptions,\n resource,\n });\n } else if (Array.isArray(resource)) {\n const [resourceId, id] = resource;\n options.push({\n ...defOptions,\n resource: resourceId,\n id,\n ...overwriteOptions,\n });\n } else if (typeof resource === 'object') {\n options.push({ ...defOptions, ...resource, ...overwriteOptions });\n }\n}\n","import NgwConnector from '@nextgis/ngw-connector';\nimport { NgwKit } from '@nextgis/ngw-kit';\nimport { QmsKit } from '@nextgis/qms-kit';\nimport { deepmerge } from '@nextgis/utils';\nimport { getDefaultControls } from '@nextgis/webmap';\n\nimport type { MapOptions, StarterKit } from '@nextgis/webmap';\n\nimport type { NgwMapOptions } from '../interfaces';\n\nexport const OPTIONS: NgwMapOptions = {\n target: 'map',\n baseUrl: '',\n whitlabel: false,\n controls: getDefaultControls(),\n controlsOptions: {\n ZOOM: { position: 'top-left' },\n ATTRIBUTION: {\n position: 'bottom-right',\n customAttribution: [\n '<a href=\"https://nextgis.com\" target=\"_blank\">©NextGIS</a>',\n ],\n },\n },\n pixelRadius: 10,\n};\n\nexport function prepareWebMapOptions(options: NgwMapOptions): MapOptions {\n const kits: StarterKit[] = [new QmsKit()];\n if (options.starterKits) {\n options.starterKits.forEach((x) => {\n kits.push(x);\n });\n }\n\n if (!options.connector) {\n options.connector = new NgwConnector({\n baseUrl: options.baseUrl || '',\n auth: options.auth,\n withCredentials: options.withCredentials,\n });\n } else if (options.connector) {\n options.baseUrl = options.connector.options.baseUrl;\n }\n options = deepmerge(OPTIONS, options);\n\n if (!options.center && !options.bounds) {\n options.bounds = [-179, -90, 180, 90];\n // options.maxBounds = options.bounds;\n }\n\n if (options.connector) {\n kits.push(\n new NgwKit({\n connector: options.connector,\n auth: options.auth,\n }),\n );\n }\n options = {\n ...options,\n starterKits: kits,\n create: false,\n };\n return options;\n}\n","import { getIcon } from '@nextgis/icons';\nimport NgwConnector from '@nextgis/ngw-connector';\nimport {\n createIdentifyItem,\n createNgwLayerAdapter,\n fetchIdentifyGeoJson,\n fetchIdentifyItem,\n fetchNgwExtent,\n fetchNgwLayerFeature,\n fetchNgwLayerFeatureCollection,\n fetchNgwLayerItem,\n fetchNgwLayerItems,\n getCompanyLogo,\n getIdentifyItems,\n sendIdentifyRequest,\n} from '@nextgis/ngw-kit';\nimport {\n defined,\n getCirclePolygonCoordinates,\n getIdentifyRadius,\n isObject,\n} from '@nextgis/utils';\nimport { deprecatedWarn } from '@nextgis/utils';\nimport { WebMap } from '@nextgis/webmap';\nimport { EventEmitter } from 'events';\n\nimport { appendNgwResources } from './utils/appendNgwResources';\nimport { prepareWebMapOptions } from './utils/prepareWebMapOptions';\n\nimport type {\n FeatureItem,\n FeatureLayersIdentify,\n FeatureLayersIdentifyItems,\n LayerFeature,\n ResourceDefinition,\n} from '@nextgis/ngw-connector';\nimport type {\n FetchNgwItemsOptions,\n NgwFeatureItemResponse,\n NgwFeatureRequestOptions,\n NgwGeoJsonLayerAdapter,\n NgwGeoJsonLayerOptions,\n NgwIdentify,\n NgwWebmapItem,\n NgwWebmapLayerAdapter,\n ResourceAdapter,\n} from '@nextgis/ngw-kit';\nimport type { NgwLayerOptions } from '@nextgis/ngw-kit';\nimport type { FetchNgwItemOptions } from '@nextgis/ngw-kit';\nimport type { QmsAdapterOptions } from '@nextgis/qms-kit';\nimport type { FeatureProperties, JsonMap } from '@nextgis/utils';\nimport type {\n AdapterOptions,\n AddControlOptions,\n ControlTargetPosition,\n FitOptions,\n LayerAdapter,\n LayerDef,\n MapClickEvent,\n MapControls,\n OnLayerMouseOptions,\n WebMapEvents,\n} from '@nextgis/webmap';\nimport type { CompositeRead } from '@nextgisweb/resource/type/api';\nimport type { Feature, FeatureCollection, Geometry, Polygon } from 'geojson';\nimport type StrictEventEmitter from 'strict-event-emitter-types';\n\nimport type {\n NgwIdentifyEvent,\n NgwLayers,\n NgwMapEvents,\n NgwMapOptions,\n} from './interfaces';\n\ntype PromiseGroup = 'select' | 'identify';\n\n/**\n * Base class containing the logic of interaction WebMap with NextGIS services.\n *\n * @example\n * ```javascript\n * import { NgwMap } from '@nextgis/ngw-map';\n * import MapAdapter from '@nextgis/leaflet-map-adapter';\n * // styles are not included in the leaflet-map-adapter\n * import 'leaflet/dist/leaflet.css';\n *\n * const ngwMap = new NgwMap({\n * mapAdapter: new MapAdapter(),\n * target: 'map',\n * qmsId: 448,\n * baseUrl: 'https://demo.nextgis.com',\n * webmapId: 3985\n * });\n * ```\n */\nexport class NgwMap<\n M = unknown,\n L = unknown,\n C extends object = any,\n O extends NgwMapOptions<M, C> = NgwMapOptions<M, C>,\n> extends WebMap<M, L, C, NgwMapEvents, O> {\n static getIcon = getIcon;\n\n readonly emitter: StrictEventEmitter<EventEmitter, NgwMapEvents> =\n new EventEmitter();\n connector!: NgwConnector;\n\n protected _ngwLayers: NgwLayers = {};\n private $$selectFromNgwRaster?: (ev: MapClickEvent) => void;\n private $$selectFromNgwVector?: (ev: OnLayerMouseOptions) => void;\n private _promises: Record<\n PromiseGroup,\n [Promise<unknown>, AbortController][]\n > = {\n select: [],\n identify: [],\n };\n\n constructor(options: O) {\n super(prepareWebMapOptions(options) as O);\n if (options.connector) {\n this.connector = options.connector;\n }\n this._createWebMap().then(() => {\n const container = this.getContainer();\n if (container) {\n container.classList.add('ngw-map-container');\n }\n if (this.options.whitlabel) {\n this._whiteLabel();\n }\n });\n }\n\n /**\n * Organized addition to the map design and controls elements,\n * calling `control.onAdd(this.webMap.mapAdapter)`\n * @param control - object with onAdd and onRemove methods\n * or a string value indicating the name of the control installed in the map adapter\n * @param position - position relative to the map angles\n * @param options - initialization parameters if the control is set as a string value\n *\n * @example\n * ```javascript\n * ngwMap.addControl(new CustomControl(), 'bottom-left');\n * ngwMap.addControl('ZOOM', 'top-right')\n * ```\n */\n async addControl<K extends keyof MapControls>(\n controlDef: K | C,\n position: ControlTargetPosition,\n options?: MapControls[K] & AddControlOptions,\n ): Promise<any> {\n await this.onLoad('controls:create');\n return super.addControl(controlDef, position, options);\n }\n\n /**\n * Add any (style, vector, webmap) NGW layer by resource definition.\n * @param options - set layer identification parameters and render method.\n *\n * @example\n * ```javascript\n * // Add raster layer resourceId is the style of 4004 layer\n * ngwMap.addNgwLayer({ resource: 4005 });\n * // Add vector data from layer GEOJSON source\n * ngwMap.addNgwLayer({\n * resource: 4038,\n * adapter: 'GEOJSON',\n * adapterOptions: { paint: { color: 'red' } }\n * });\n * ```\n */\n addNgwLayer<P extends FeatureProperties = FeatureProperties>(\n options: NgwGeoJsonLayerOptions<NoInfer<P>>,\n ): Promise<NgwGeoJsonLayerAdapter<P, M, L> | undefined>;\n addNgwLayer(\n options: NgwLayerOptions<'NGW:WEBMAP'> & { adapter: 'NGW:WEBMAP' },\n ): Promise<NgwWebmapLayerAdapter<M> | undefined>;\n addNgwLayer(options: NgwLayerOptions): Promise<ResourceAdapter | undefined>;\n async addNgwLayer(\n options: NgwLayerOptions,\n ): Promise<ResourceAdapter | undefined> {\n await this.onMapLoad();\n // @ts-expect-error for backward compatibility\n const { keyname, resourceId, filters } = options;\n\n if (keyname || resourceId !== undefined) {\n deprecatedWarn(\n 'set `resource` options instead of `keyname` or `resourceId`',\n );\n }\n\n const resource = options.resource;\n if (!keyname && !resourceId && !resource) {\n throw new Error(\n 'resource, resourceId or keyname is required parameter to add NGW layer',\n );\n }\n if (defined(this.options.baseUrl)) {\n try {\n options.adapterOptions = options.adapterOptions || {};\n if (defined(this.options.setViewDelay)) {\n if (!defined(options.adapterOptions.setViewDelay)) {\n options.adapterOptions.setViewDelay = this.options.setViewDelay;\n }\n }\n if (defined(filters)) {\n options.adapterOptions.propertiesFilter = filters;\n }\n\n const adapter = createNgwLayerAdapter(options, this, this.connector);\n const adapterOpts = {\n visibility: true,\n // TODO: do not merge options, use only `adapterOptions`\n ...options,\n ...options.adapterOptions,\n } as AdapterOptions;\n const layer = (await this.addLayer(\n adapter,\n adapterOpts,\n )) as ResourceAdapter<M, L, AdapterOptions>;\n const id = layer && this.getLayerId(layer);\n if (layer && id) {\n this._ngwLayers[id] = { layer, resourceId: layer.resourceId };\n layer.options.name =\n layer.options.name ||\n (layer.item && layer.item.resource.display_name);\n if (layer.options.baselayer) {\n const visibleLayerBaseLayer = this.getActiveBaseLayer();\n if (visibleLayerBaseLayer) {\n return layer;\n }\n }\n }\n return layer;\n } catch (er) {\n const resId =\n isObject(resource) && 'id' in resource\n ? resource.id\n : keyname || resourceId || resource;\n console.error(`Can't add NGW layer ${resId}.`, er);\n }\n }\n }\n\n /**\n * Pans and zooms the map to the initial position specified in the options\n */\n fit(): void {\n const { center, zoom, bounds } = this.options;\n if (center) {\n this.setCenter(center);\n if (zoom) {\n this.setZoom(zoom);\n }\n } else if (bounds) {\n this.fitBounds(bounds);\n }\n }\n\n fetchNgwLayerItem<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(options: Omit<FetchNgwItemOptions<P>, 'connector'>): Promise<FeatureItem> {\n return fetchNgwLayerItem<G, P>({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchNgwLayerItems<\n F extends FeatureProperties = FeatureProperties,\n G extends Geometry = Geometry,\n >(\n options: Omit<FetchNgwItemsOptions<F>, 'connector'>,\n ): Promise<FeatureItem<F, G>[]> {\n return fetchNgwLayerItems<G, F>({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchNgwLayerFeature<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n options: Omit<FetchNgwItemOptions<P>, 'connector'>,\n ): Promise<Feature<G, P>> {\n return fetchNgwLayerFeature<G, P>({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchNgwLayerFeatures<\n G extends Geometry | null = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n options: Omit<FetchNgwItemsOptions<P>, 'connector'>,\n ): Promise<FeatureCollection<G, P>> {\n return fetchNgwLayerFeatureCollection({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchIdentifyItem<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n identify: NgwIdentify,\n requestOptions?: NgwFeatureRequestOptions,\n // multiple = false\n ): Promise<NgwFeatureItemResponse<P, G> | undefined> {\n const abortController = new AbortController();\n const abortSignal = abortController.signal;\n\n if (requestOptions?.signal) {\n requestOptions.signal.addEventListener('abort', abortController.abort);\n }\n requestOptions = requestOptions || {};\n requestOptions.signal = abortSignal;\n\n const promise = fetchIdentifyItem<G, P>({\n identify,\n connector: this.connector,\n requestOptions,\n // multiple,\n });\n this._addPromise('identify', promise, abortController);\n return promise;\n }\n\n fetchIdentifyGeoJson(\n identify: NgwIdentify,\n { multiple, signal }: { multiple?: boolean; signal?: AbortSignal } = {},\n ): Promise<Feature | undefined> {\n const abortController = new AbortController();\n\n if (signal) {\n if (signal.aborted) {\n return Promise.reject(new NgwConnector.errors.AbortError());\n }\n signal.addEventListener('abort', () => {\n abortController.abort('AbortError');\n });\n }\n\n const promise = fetchIdentifyGeoJson({\n identify,\n connector: this.connector,\n multiple,\n requestOptions: { signal: abortController.signal },\n });\n if (promise && 'then' in promise) {\n this._addPromise('identify', promise, abortController);\n return promise;\n } else {\n return Promise.resolve(promise);\n }\n }\n\n /**\n * @deprecated use {@link fetchIdentifyGeoJson} instead\n */\n getIdentifyGeoJson(\n identify: NgwIdentify,\n multiple = false,\n ): Promise<Feature | undefined> {\n return this.fetchIdentifyGeoJson(identify, { multiple });\n }\n\n async getNgwLayers(): Promise<NgwLayers> {\n await this.onLoad();\n return this._ngwLayers;\n }\n\n async getNgwLayerByResourceId(id: number): Promise<LayerAdapter | undefined> {\n for (const n in this._ngwLayers) {\n const mem = this._ngwLayers[n];\n if (mem.resourceId === id) {\n return mem && mem.layer;\n } else if (mem.layer.getIdentificationIds) {\n const ids = await mem.layer.getIdentificationIds();\n if (ids && ids.some((x) => x === id)) {\n return mem.layer;\n }\n }\n if (mem.layer.getDependLayers) {\n const dependLayers = mem.layer.getDependLayers() as NgwWebmapItem[];\n const dependFit = dependLayers.find((x) => {\n return (\n x.item &&\n 'style_parent_id' in x.item &&\n x.item.style_parent_id !== undefined &&\n x.item.style_parent_id === id\n );\n });\n if (dependFit) {\n return dependFit.layer;\n }\n }\n }\n }\n\n /**\n * Move map to layer. If the layer is NGW resource, extent will be received from the server\n *\n * @example\n * ```javascript\n * const ngwLayer = ngwMap.addNgwLayer({ id: 'ngw_layer_name', resource: 4005 });\n * ngwMap.fitLayer(ngwLayer);\n * ngwMap.fitLayer('ngw_layer_name');\n * ```\n */\n async fitLayer(\n layerDef: LayerDef | number,\n options?: FitOptions,\n ): Promise<void> {\n let id: string | undefined;\n if (typeof layerDef === 'string' || typeof layerDef === 'number') {\n id = String(id);\n } else {\n id = layerDef.id;\n }\n const ngwLayer = id && this._ngwLayers[id];\n if (ngwLayer) {\n if (ngwLayer.layer.getBounds) {\n const bounds = await ngwLayer.layer.getBounds();\n if (bounds) {\n this.fitBounds(bounds, options);\n }\n } else {\n let item: CompositeRead | undefined;\n if (ngwLayer.layer.item) {\n item = ngwLayer.layer.item;\n } else {\n const resourceId = ngwLayer.resourceId;\n item = await this.connector.getResource(resourceId);\n }\n if (item) {\n this.fitResource(item.resource.id);\n }\n }\n } else {\n super.fitLayer(\n typeof layerDef === 'number' ? String(layerDef) : layerDef,\n options,\n );\n }\n }\n\n async fitResource(\n resource: ResourceDefinition,\n options?: FitOptions,\n ): Promise<void> {\n const resourceId = await this.connector.resources.getIdOrFail(resource);\n\n const extent = await fetchNgwExtent({\n resourceId,\n connector: this.connector,\n });\n\n if (extent) {\n this.fitBounds(extent, options);\n }\n }\n\n /** @deprecated use {@link fitLayer} instead */\n async zoomToLayer(layerDef: LayerDef): Promise<void> {\n return this.fitLayer(layerDef);\n }\n\n onLoad(event: keyof NgwMapEvents = 'ngw-map:create'): Promise<this> {\n return super.onLoad(event as keyof WebMapEvents);\n }\n\n removeLayer(layerDef: LayerDef): void {\n const layer = this.getLayer(layerDef);\n if (layer) {\n const layerId = this.getLayerId(layer);\n if (layerId) {\n delete this._ngwLayers[layerId];\n }\n super.removeLayer(layer);\n }\n }\n\n enableSelection(): void {\n if (!this.$$selectFromNgwRaster) {\n this.$$selectFromNgwRaster = (ev: MapClickEvent) => {\n const count = this._getSelectListenersCount();\n if (count) {\n this.selectFromNgwRaster(ev);\n }\n };\n this.$$selectFromNgwVector = (ev: OnLayerMouseOptions) => {\n const count = this._getSelectListenersCount();\n if (count) {\n this._selectFromNgwVector(ev);\n }\n };\n this.emitter.on('click', this.$$selectFromNgwRaster);\n this.emitter.on('layer:click', this.$$selectFromNgwVector);\n }\n }\n\n disableSelection(): void {\n if (this.$$selectFromNgwRaster) {\n this.emitter.removeListener('click', this.$$selectFromNgwRaster);\n this.$$selectFromNgwRaster = undefined;\n }\n if (this.$$selectFromNgwVector) {\n this.emitter.removeListener('layer:click', this.$$selectFromNgwVector);\n\n this.$$selectFromNgwVector = undefined;\n }\n }\n\n /**\n * @deprecated use {@link fetchNgwLayerItem} instead\n */\n getNgwLayerItem<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(options: Omit<FetchNgwItemOptions<P>, 'connector'>): Promise<FeatureItem> {\n return this.fetchNgwLayerItem<G, P>(options);\n }\n\n /**\n * @deprecated use {@link fetchNgwLayerItems} instead\n */\n getNgwLayerItems<\n F extends FeatureProperties = FeatureProperties,\n G extends Geometry = Geometry,\n >(\n options: Omit<FetchNgwItemsOptions<F>, 'connector'>,\n ): Promise<FeatureItem<F, G>[]> {\n return this.fetchNgwLayerItems<F, G>(options);\n }\n\n /**\n * @deprecated use {@link fetchNgwLayerFeature} instead\n */\n getNgwLayerFeature<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n options: Omit<FetchNgwItemOptions<P>, 'connector'>,\n ): Promise<Feature<G, P>> {\n return this.fetchNgwLayerFeature<G, P>(options);\n }\n\n /**\n * @deprecated use {@link fetchNgwLayerFeatures} instead\n */\n getNgwLayerFeatures<\n G extends Geometry | null = Geometry,\n P extends JsonMap = JsonMap,\n >(options: FetchNgwItemsOptions<P>): Promise<FeatureCollection<G, P>> {\n return this.fetchNgwLayerFeatures(options);\n }\n\n /** @deprecated use {@link cancelPromises} instead */\n cancelPromise(...args: PromiseGroup[]): void {\n this.cancelPromises(...args);\n }\n\n cancelPromises(...args: PromiseGroup[]): void {\n if (!args.length) {\n args = Object.keys(this._promises) as PromiseGroup[];\n }\n args.forEach((name) => {\n const group = this._promises[name];\n if (group) {\n group.forEach((x) => x[1].abort());\n this._promises[name] = [];\n }\n });\n }\n\n async selectFromNgwRaster(\n ev: MapClickEvent,\n ): Promise<NgwIdentifyEvent | undefined> {\n this._emitStatusEvent('ngw:preselect');\n\n const promises: Promise<number[] | undefined>[] = [];\n const layers = Object.values(this._ngwLayers);\n layers.sort((a, b) => {\n if (a.layer.order && b.layer.order) {\n return b.layer.order - a.layer.order;\n }\n return 1;\n });\n for (const l of layers) {\n const layer = l.layer;\n const identFunc =\n typeof layer.getIdentificationIds === 'function'\n ? layer.getIdentificationIds\n : false;\n const interactive = layer.options.interactive ?? true;\n if (\n identFunc &&\n layer.options.selectable &&\n interactive &&\n this.isLayerVisible(layer)\n ) {\n const layerIds = identFunc.call(layer);\n promises.push(layerIds);\n }\n }\n const getIdsPromise = Promise.all(promises);\n const getIds = await getIdsPromise;\n const ids: number[] = [];\n for (const x of getIds) {\n if (x) {\n ids.push(...x);\n }\n }\n\n if (!ids.length) {\n this._emitStatusEvent('ngw:select', null);\n return;\n }\n\n const pixelRadius = this.options.pixelRadius || 10;\n const center = this.getCenter();\n let zoom = this.getZoom();\n zoom = zoom !== undefined ? zoom : 20;\n if (!center || !zoom) {\n this._emitStatusEvent('ngw:select', null);\n return;\n }\n const radius = getIdentifyRadius(center, zoom, pixelRadius);\n\n let geom: Polygon | undefined;\n if (this.options.highlightIdentification) {\n const highlightOptions = this.options.highlightIdentification;\n const highlightDuration =\n typeof highlightOptions === 'number' ? highlightOptions : 1000;\n const [lng, lat] = ev.lngLat;\n geom = {\n type: 'Polygon',\n coordinates: [getCirclePolygonCoordinates(lng, lat, radius)],\n };\n\n const highlightIdentificationLayer = await this.addGeoJsonLayer({\n data: {\n type: 'Feature',\n geometry: geom,\n },\n });\n if (highlightDuration !== Infinity) {\n setTimeout(() => {\n this.removeLayer(highlightIdentificationLayer);\n }, highlightDuration);\n }\n }\n const abortController = new AbortController();\n const selectPromise = sendIdentifyRequest(ev, {\n layers: ids,\n connector: this.connector,\n radius,\n geom,\n signal: abortController.signal,\n }).then((resp) => {\n const identify: NgwIdentify = {\n ...resp,\n resources: ids,\n sourceType: 'raster',\n event: ev,\n };\n const identifyEvent: NgwIdentifyEvent = this._prepareToIdentify(identify);\n this._emitStatusEvent('ngw:select', identifyEvent);\n return identifyEvent;\n });\n this._addPromise('select', selectPromise, abortController);\n return selectPromise;\n }\n\n private _addPromise(\n groupName: PromiseGroup,\n promise: Promise<unknown>,\n abortController: AbortController,\n ) {\n const group = this._promises[groupName];\n if (group && group.findIndex((g) => g[0] === promise) === -1) {\n const removeFromGroup = () => {\n const index = group.findIndex((g) => g[0] === promise);\n if (index !== -1) {\n group.splice(index, 1);\n }\n };\n promise.then(removeFromGroup, removeFromGroup);\n\n group.push([promise, abortController]);\n }\n }\n\n private _isFitFromResource() {\n const params = this._initMapState;\n if (params.zoom && params.center) {\n return false;\n }\n return true;\n }\n\n private async _createWebMap() {\n await this.create();\n if (this.options.qmsId) {\n this._addQmsBaseLayer();\n }\n if (this.options.osm) {\n this._addOsmBaseLayer();\n }\n\n const resources: NgwLayerOptions[] = [];\n const layerFitAllowed = this._isFitFromResource();\n if (this.options.webmapId) {\n appendNgwResources(resources, this.options.webmapId, {\n fit: layerFitAllowed,\n });\n }\n if (this.options.resources && Array.isArray(this.options.resources)) {\n for (const x of this.options.resources) {\n const overwriteOptions: Partial<NgwLayerOptions> = {};\n if (!layerFitAllowed) {\n overwriteOptions.fit = false;\n }\n appendNgwResources(resources, x, {}, overwriteOptions);\n }\n }\n for (const r of resources) {\n try {\n await this.addNgwLayer(r);\n } catch (er) {\n console.warn(er);\n }\n }\n this._emitStatusEvent('ngw-map:create', this);\n this.enableSelection();\n }\n\n private _addOsmBaseLayer() {\n this.addBaseLayer('OSM');\n }\n\n private _addQmsBaseLayer() {\n let qmsId: number;\n let qmsLayerName: string | undefined;\n if (Array.isArray(this.options.qmsId)) {\n qmsId = this.options.qmsId[0];\n qmsLayerName = this.options.qmsId[1];\n } else {\n qmsId = Number(this.options.qmsId);\n }\n const qmsLayerOptions: Partial<QmsAdapterOptions> = {\n qmsId,\n };\n if (qmsLayerName) {\n qmsLayerOptions.id = qmsLayerName;\n }\n\n this.addBaseLayer('QMS', qmsLayerOptions);\n }\n\n private _selectFromNgwVector(\n ev: OnLayerMouseOptions,\n ): FeatureLayersIdentify | undefined {\n const layer: ResourceAdapter = ev.layer as ResourceAdapter;\n const selectable = layer.options.selectable && this.isLayerVisible(layer);\n if (!selectable) {\n return undefined;\n }\n // Item property means layer is NgwResource\n const id = layer.item && layer.item.resource.id;\n const feature = ev.feature;\n\n if (id !== undefined && feature) {\n const featureId = feature.id;\n if (featureId) {\n const identifyFeature: LayerFeature = {\n id: Number(featureId),\n fields: feature.properties || {},\n label: `#${id}`,\n layerId: Number(id),\n parent: '',\n geom: feature.geometry,\n };\n const items: FeatureLayersIdentifyItems = {\n featureCount: 1,\n features: [identifyFeature],\n };\n const identify: FeatureLayersIdentify = {\n featureCount: 1,\n [id]: items,\n };\n this._emitStatusEvent(\n 'ngw:select',\n this._prepareToIdentify({\n ...identify,\n resources: [id],\n sourceType: 'vector',\n } as NgwIdentify),\n );\n return identify;\n }\n }\n }\n\n private _prepareToIdentify<\n F extends FeatureProperties = FeatureProperties,\n G extends Geometry = Geometry,\n >(identify: NgwIdentify): NgwIdentifyEvent {\n const getIdentifyItems_ = () => {\n return getIdentifyItems(identify, true).map((x) => {\n return createIdentifyItem<F, G>({\n feature: x.feature,\n connector: this.connector,\n });\n });\n };\n return {\n ...identify,\n getIdentifyItems: getIdentifyItems_,\n };\n }\n\n private _getSelectListenersCount() {\n return this.emitter.listenerCount('ngw:select');\n }\n\n private async _whiteLabel() {\n const container = this.getContainer();\n if (container) {\n const logo = await getCompanyLogo(\n this.connector,\n this.options.companyLogoOptions,\n );\n if (logo) {\n container.appendChild(logo);\n }\n }\n }\n}\n","import { NgwMap } from './NgwMap';\n\nimport type { NgwMapOptions } from './interfaces';\n\nexport * from './interfaces';\nexport * from '@nextgis/webmap';\n\nexport { NgwMap };\n\nexport async function createNgwMap(options: NgwMapOptions): Promise<NgwMap> {\n const ngwMap = new NgwMap(options);\n return ngwMap.onLoad();\n}\n"],"names":["getDefaultControls","QmsKit","deepmerge","NgwKit","WebMap","EventEmitter","deprecatedWarn","defined","createNgwLayerAdapter","isObject","fetchNgwLayerItem","fetchNgwLayerItems","fetchNgwLayerFeature","fetchNgwLayerFeatureCollection","fetchIdentifyItem","fetchIdentifyGeoJson","fetchNgwExtent","getIdentifyRadius","getCirclePolygonCoordinates","sendIdentifyRequest","getIdentifyItems","createIdentifyItem","getCompanyLogo","getIcon"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ngw-map.cjs.prod.js","sources":["../src/utils/appendNgwResources.ts","../src/utils/prepareWebMapOptions.ts","../src/NgwMap.ts","../src/index.ts"],"sourcesContent":["import type { NgwLayerOptions } from '@nextgis/ngw-kit';\n\nimport type { NgwResourceDefinition } from '../interfaces';\n\nexport function appendNgwResources(\n options: NgwLayerOptions[],\n resource?: NgwResourceDefinition,\n defOptions?: Partial<NgwLayerOptions>,\n overwriteOptions?: Partial<NgwLayerOptions>,\n): void {\n if (typeof resource === 'number' || typeof resource === 'string') {\n resource = Number(resource);\n options.push({\n ...defOptions,\n resource,\n });\n } else if (Array.isArray(resource)) {\n const [resourceId, id] = resource;\n options.push({\n ...defOptions,\n resource: resourceId,\n id,\n ...overwriteOptions,\n });\n } else if (typeof resource === 'object') {\n options.push({ ...defOptions, ...resource, ...overwriteOptions });\n }\n}\n","import NgwConnector from '@nextgis/ngw-connector';\nimport { NgwKit } from '@nextgis/ngw-kit';\nimport { QmsKit } from '@nextgis/qms-kit';\nimport { deepmerge } from '@nextgis/utils';\nimport { getDefaultControls } from '@nextgis/webmap';\n\nimport type { MapOptions, StarterKit } from '@nextgis/webmap';\n\nimport type { NgwMapOptions } from '../interfaces';\n\nexport const OPTIONS: NgwMapOptions = {\n target: 'map',\n baseUrl: '',\n whitlabel: false,\n controls: getDefaultControls(),\n controlsOptions: {\n ZOOM: { position: 'top-left' },\n ATTRIBUTION: {\n position: 'bottom-right',\n customAttribution: [\n '<a href=\"https://nextgis.com\" target=\"_blank\">©NextGIS</a>',\n ],\n },\n },\n pixelRadius: 10,\n};\n\nexport function prepareWebMapOptions(options: NgwMapOptions): MapOptions {\n const kits: StarterKit[] = [new QmsKit()];\n if (options.starterKits) {\n options.starterKits.forEach((x) => {\n kits.push(x);\n });\n }\n\n if (!options.connector) {\n options.connector = new NgwConnector({\n baseUrl: options.baseUrl || '',\n auth: options.auth,\n withCredentials: options.withCredentials,\n });\n } else if (options.connector) {\n options.baseUrl = options.connector.options.baseUrl;\n }\n options = deepmerge(OPTIONS, options);\n\n if (!options.center && !options.bounds) {\n options.bounds = [-179, -90, 180, 90];\n // options.maxBounds = options.bounds;\n }\n\n if (options.connector) {\n kits.push(\n new NgwKit({\n connector: options.connector,\n auth: options.auth,\n }),\n );\n }\n options = {\n ...options,\n starterKits: kits,\n create: false,\n };\n return options;\n}\n","import { getIcon } from '@nextgis/icons';\nimport NgwConnector from '@nextgis/ngw-connector';\nimport {\n createIdentifyItem,\n createNgwLayerAdapter,\n fetchIdentifyGeoJson,\n fetchIdentifyItem,\n fetchNgwExtent,\n fetchNgwLayerFeature,\n fetchNgwLayerFeatureCollection,\n fetchNgwLayerItem,\n fetchNgwLayerItems,\n getCompanyLogo,\n getIdentifyItems,\n sendIdentifyRequest,\n} from '@nextgis/ngw-kit';\nimport {\n defined,\n getCirclePolygonCoordinates,\n getIdentifyRadius,\n isObject,\n} from '@nextgis/utils';\nimport { deprecatedWarn } from '@nextgis/utils';\nimport { WebMap } from '@nextgis/webmap';\nimport { EventEmitter } from 'events';\n\nimport { appendNgwResources } from './utils/appendNgwResources';\nimport { prepareWebMapOptions } from './utils/prepareWebMapOptions';\n\nimport type {\n FeatureItem,\n FeatureLayersIdentify,\n FeatureLayersIdentifyItems,\n LayerFeature,\n ResourceDefinition,\n} from '@nextgis/ngw-connector';\nimport type {\n FetchNgwItemsOptions,\n NgwFeatureItemResponse,\n NgwFeatureRequestOptions,\n NgwIdentify,\n NgwWebmapItem,\n ResourceAdapter,\n} from '@nextgis/ngw-kit';\nimport type { NgwLayerOptions } from '@nextgis/ngw-kit';\nimport type { FetchNgwItemOptions } from '@nextgis/ngw-kit';\nimport type { QmsAdapterOptions } from '@nextgis/qms-kit';\nimport type { FeatureProperties, JsonMap } from '@nextgis/utils';\nimport type {\n AdapterOptions,\n AddControlOptions,\n ControlTargetPosition,\n FitOptions,\n LayerAdapter,\n LayerDef,\n MapClickEvent,\n MapControls,\n OnLayerMouseOptions,\n WebMapEvents,\n} from '@nextgis/webmap';\nimport type { CompositeRead } from '@nextgisweb/resource/type/api';\nimport type { Feature, FeatureCollection, Geometry, Polygon } from 'geojson';\nimport type StrictEventEmitter from 'strict-event-emitter-types';\n\nimport type {\n NgwIdentifyEvent,\n NgwLayers,\n NgwMapEvents,\n NgwMapOptions,\n} from './interfaces';\n\ntype PromiseGroup = 'select' | 'identify';\n\n/**\n * Base class containing the logic of interaction WebMap with NextGIS services.\n *\n * @example\n * ```javascript\n * import { NgwMap } from '@nextgis/ngw-map';\n * import MapAdapter from '@nextgis/leaflet-map-adapter';\n * // styles are not included in the leaflet-map-adapter\n * import 'leaflet/dist/leaflet.css';\n *\n * const ngwMap = new NgwMap({\n * mapAdapter: new MapAdapter(),\n * target: 'map',\n * qmsId: 448,\n * baseUrl: 'https://demo.nextgis.com',\n * webmapId: 3985\n * });\n * ```\n */\nexport class NgwMap<\n M = unknown,\n L = unknown,\n C extends object = any,\n O extends NgwMapOptions<M, C> = NgwMapOptions<M, C>,\n> extends WebMap<M, L, C, NgwMapEvents, O> {\n static getIcon = getIcon;\n\n readonly emitter: StrictEventEmitter<EventEmitter, NgwMapEvents> =\n new EventEmitter();\n connector!: NgwConnector;\n\n protected _ngwLayers: NgwLayers = {};\n private $$selectFromNgwRaster?: (ev: MapClickEvent) => void;\n private $$selectFromNgwVector?: (ev: OnLayerMouseOptions) => void;\n private _promises: Record<\n PromiseGroup,\n [Promise<unknown>, AbortController][]\n > = {\n select: [],\n identify: [],\n };\n\n constructor(options: O) {\n super(prepareWebMapOptions(options) as O);\n if (options.connector) {\n this.connector = options.connector;\n }\n this._createWebMap().then(() => {\n const container = this.getContainer();\n if (container) {\n container.classList.add('ngw-map-container');\n }\n if (this.options.whitlabel) {\n this._whiteLabel();\n }\n });\n }\n\n /**\n * Organized addition to the map design and controls elements,\n * calling `control.onAdd(this.webMap.mapAdapter)`\n * @param control - object with onAdd and onRemove methods\n * or a string value indicating the name of the control installed in the map adapter\n * @param position - position relative to the map angles\n * @param options - initialization parameters if the control is set as a string value\n *\n * @example\n * ```javascript\n * ngwMap.addControl(new CustomControl(), 'bottom-left');\n * ngwMap.addControl('ZOOM', 'top-right')\n * ```\n */\n async addControl<K extends keyof MapControls>(\n controlDef: K | C,\n position: ControlTargetPosition,\n options?: MapControls[K] & AddControlOptions,\n ): Promise<any> {\n await this.onLoad('controls:create');\n return super.addControl(controlDef, position, options);\n }\n\n /**\n * Add any (style, vector, webmap) NGW layer by resource definition.\n * @param options - set layer identification parameters and render method.\n *\n * @example\n * ```javascript\n * // Add raster layer resourceId is the style of 4004 layer\n * ngwMap.addNgwLayer({ resource: 4005 });\n * // Add vector data from layer GEOJSON source\n * ngwMap.addNgwLayer({\n * resource: 4038,\n * adapter: 'GEOJSON',\n * adapterOptions: { paint: { color: 'red' } }\n * });\n * ```\n */\n async addNgwLayer(\n options: NgwLayerOptions,\n ): Promise<ResourceAdapter | undefined> {\n await this.onMapLoad();\n // @ts-expect-error for backward compatibility\n const { keyname, resourceId, filters } = options;\n\n if (keyname || resourceId !== undefined) {\n deprecatedWarn(\n 'set `resource` options instead of `keyname` or `resourceId`',\n );\n }\n\n const resource = options.resource;\n if (!keyname && !resourceId && !resource) {\n throw new Error(\n 'resource, resourceId or keyname is required parameter to add NGW layer',\n );\n }\n if (defined(this.options.baseUrl)) {\n try {\n options.adapterOptions = options.adapterOptions || {};\n if (defined(this.options.setViewDelay)) {\n if (!defined(options.adapterOptions.setViewDelay)) {\n options.adapterOptions.setViewDelay = this.options.setViewDelay;\n }\n }\n if (defined(filters)) {\n options.adapterOptions.propertiesFilter = filters;\n }\n\n const adapter = createNgwLayerAdapter(options, this, this.connector);\n const adapterOpts = {\n visibility: true,\n // TODO: do not merge options, use only `adapterOptions`\n ...options,\n ...options.adapterOptions,\n } as AdapterOptions;\n const layer = (await this.addLayer(\n adapter,\n adapterOpts,\n )) as ResourceAdapter<M, L, AdapterOptions>;\n const id = layer && this.getLayerId(layer);\n if (layer && id) {\n this._ngwLayers[id] = { layer, resourceId: layer.resourceId };\n layer.options.name =\n layer.options.name ||\n (layer.item && layer.item.resource.display_name);\n if (layer.options.baselayer) {\n const visibleLayerBaseLayer = this.getActiveBaseLayer();\n if (visibleLayerBaseLayer) {\n return layer;\n }\n }\n }\n return layer;\n } catch (er) {\n const resId =\n isObject(resource) && 'id' in resource\n ? resource.id\n : keyname || resourceId || resource;\n console.error(`Can't add NGW layer ${resId}.`, er);\n }\n }\n }\n\n /**\n * Pans and zooms the map to the initial position specified in the options\n */\n fit(): void {\n const { center, zoom, bounds } = this.options;\n if (center) {\n this.setCenter(center);\n if (zoom) {\n this.setZoom(zoom);\n }\n } else if (bounds) {\n this.fitBounds(bounds);\n }\n }\n\n fetchNgwLayerItem<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(options: Omit<FetchNgwItemOptions<P>, 'connector'>): Promise<FeatureItem> {\n return fetchNgwLayerItem<G, P>({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchNgwLayerItems<\n F extends FeatureProperties = FeatureProperties,\n G extends Geometry = Geometry,\n >(\n options: Omit<FetchNgwItemsOptions<F>, 'connector'>,\n ): Promise<FeatureItem<F, G>[]> {\n return fetchNgwLayerItems<G, F>({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchNgwLayerFeature<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n options: Omit<FetchNgwItemOptions<P>, 'connector'>,\n ): Promise<Feature<G, P>> {\n return fetchNgwLayerFeature<G, P>({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchNgwLayerFeatures<\n G extends Geometry | null = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n options: Omit<FetchNgwItemsOptions<P>, 'connector'>,\n ): Promise<FeatureCollection<G, P>> {\n return fetchNgwLayerFeatureCollection({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchIdentifyItem<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n identify: NgwIdentify,\n requestOptions?: NgwFeatureRequestOptions,\n // multiple = false\n ): Promise<NgwFeatureItemResponse<P, G> | undefined> {\n const abortController = new AbortController();\n const abortSignal = abortController.signal;\n\n if (requestOptions?.signal) {\n requestOptions.signal.addEventListener('abort', abortController.abort);\n }\n requestOptions = requestOptions || {};\n requestOptions.signal = abortSignal;\n\n const promise = fetchIdentifyItem<G, P>({\n identify,\n connector: this.connector,\n requestOptions,\n // multiple,\n });\n this._addPromise('identify', promise, abortController);\n return promise;\n }\n\n fetchIdentifyGeoJson(\n identify: NgwIdentify,\n { multiple, signal }: { multiple?: boolean; signal?: AbortSignal } = {},\n ): Promise<Feature | undefined> {\n const abortController = new AbortController();\n\n if (signal) {\n if (signal.aborted) {\n return Promise.reject(new NgwConnector.errors.AbortError());\n }\n signal.addEventListener('abort', () => {\n abortController.abort('AbortError');\n });\n }\n\n const promise = fetchIdentifyGeoJson({\n identify,\n connector: this.connector,\n multiple,\n requestOptions: { signal: abortController.signal },\n });\n if (promise && 'then' in promise) {\n this._addPromise('identify', promise, abortController);\n return promise;\n } else {\n return Promise.resolve(promise);\n }\n }\n\n /**\n * @deprecated use {@link fetchIdentifyGeoJson} instead\n */\n getIdentifyGeoJson(\n identify: NgwIdentify,\n multiple = false,\n ): Promise<Feature | undefined> {\n return this.fetchIdentifyGeoJson(identify, { multiple });\n }\n\n async getNgwLayers(): Promise<NgwLayers> {\n await this.onLoad();\n return this._ngwLayers;\n }\n\n async getNgwLayerByResourceId(id: number): Promise<LayerAdapter | undefined> {\n for (const n in this._ngwLayers) {\n const mem = this._ngwLayers[n];\n if (mem.resourceId === id) {\n return mem && mem.layer;\n } else if (mem.layer.getIdentificationIds) {\n const ids = await mem.layer.getIdentificationIds();\n if (ids && ids.some((x) => x === id)) {\n return mem.layer;\n }\n }\n if (mem.layer.getDependLayers) {\n const dependLayers = mem.layer.getDependLayers() as NgwWebmapItem[];\n const dependFit = dependLayers.find((x) => {\n return (\n x.item &&\n 'style_parent_id' in x.item &&\n x.item.style_parent_id !== undefined &&\n x.item.style_parent_id === id\n );\n });\n if (dependFit) {\n return dependFit.layer;\n }\n }\n }\n }\n\n /**\n * Move map to layer. If the layer is NGW resource, extent will be received from the server\n *\n * @example\n * ```javascript\n * const ngwLayer = ngwMap.addNgwLayer({ id: 'ngw_layer_name', resource: 4005 });\n * ngwMap.fitLayer(ngwLayer);\n * ngwMap.fitLayer('ngw_layer_name');\n * ```\n */\n async fitLayer(\n layerDef: LayerDef | number,\n options?: FitOptions,\n ): Promise<void> {\n let id: string | undefined;\n if (typeof layerDef === 'string' || typeof layerDef === 'number') {\n id = String(id);\n } else {\n id = layerDef.id;\n }\n const ngwLayer = id && this._ngwLayers[id];\n if (ngwLayer) {\n if (ngwLayer.layer.getBounds) {\n const bounds = await ngwLayer.layer.getBounds();\n if (bounds) {\n this.fitBounds(bounds, options);\n }\n } else {\n let item: CompositeRead | undefined;\n if (ngwLayer.layer.item) {\n item = ngwLayer.layer.item;\n } else {\n const resourceId = ngwLayer.resourceId;\n item = await this.connector.getResource(resourceId);\n }\n if (item) {\n this.fitResource(item.resource.id);\n }\n }\n } else {\n super.fitLayer(\n typeof layerDef === 'number' ? String(layerDef) : layerDef,\n options,\n );\n }\n }\n\n async fitResource(\n resource: ResourceDefinition,\n options?: FitOptions,\n ): Promise<void> {\n const resourceId = await this.connector.resources.getIdOrFail(resource);\n\n const extent = await fetchNgwExtent({\n resourceId,\n connector: this.connector,\n });\n\n if (extent) {\n this.fitBounds(extent, options);\n }\n }\n\n /** @deprecated use {@link fitLayer} instead */\n async zoomToLayer(layerDef: string | ResourceAdapter): Promise<void> {\n return this.fitLayer(layerDef);\n }\n\n onLoad(event: keyof NgwMapEvents = 'ngw-map:create'): Promise<this> {\n return super.onLoad(event as keyof WebMapEvents);\n }\n\n removeLayer(layerDef: LayerDef): void {\n const layer = this.getLayer(layerDef);\n if (layer) {\n const layerId = this.getLayerId(layer);\n if (layerId) {\n delete this._ngwLayers[layerId];\n }\n super.removeLayer(layer);\n }\n }\n\n enableSelection(): void {\n if (!this.$$selectFromNgwRaster) {\n this.$$selectFromNgwRaster = (ev: MapClickEvent) => {\n const count = this._getSelectListenersCount();\n if (count) {\n this.selectFromNgwRaster(ev);\n }\n };\n this.$$selectFromNgwVector = (ev: OnLayerMouseOptions) => {\n const count = this._getSelectListenersCount();\n if (count) {\n this._selectFromNgwVector(ev);\n }\n };\n this.emitter.on('click', this.$$selectFromNgwRaster);\n this.emitter.on('layer:click', this.$$selectFromNgwVector);\n }\n }\n\n disableSelection(): void {\n if (this.$$selectFromNgwRaster) {\n this.emitter.removeListener('click', this.$$selectFromNgwRaster);\n this.$$selectFromNgwRaster = undefined;\n }\n if (this.$$selectFromNgwVector) {\n this.emitter.removeListener('layer:click', this.$$selectFromNgwVector);\n\n this.$$selectFromNgwVector = undefined;\n }\n }\n\n /**\n * @deprecated use {@link fetchNgwLayerItem} instead\n */\n getNgwLayerItem<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(options: Omit<FetchNgwItemOptions<P>, 'connector'>): Promise<FeatureItem> {\n return this.fetchNgwLayerItem<G, P>(options);\n }\n\n /**\n * @deprecated use {@link fetchNgwLayerItems} instead\n */\n getNgwLayerItems<\n F extends FeatureProperties = FeatureProperties,\n G extends Geometry = Geometry,\n >(\n options: Omit<FetchNgwItemsOptions<F>, 'connector'>,\n ): Promise<FeatureItem<F, G>[]> {\n return this.fetchNgwLayerItems<F, G>(options);\n }\n\n /**\n * @deprecated use {@link fetchNgwLayerFeature} instead\n */\n getNgwLayerFeature<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n options: Omit<FetchNgwItemOptions<P>, 'connector'>,\n ): Promise<Feature<G, P>> {\n return this.fetchNgwLayerFeature<G, P>(options);\n }\n\n /**\n * @deprecated use {@link fetchNgwLayerFeatures} instead\n */\n getNgwLayerFeatures<\n G extends Geometry | null = Geometry,\n P extends JsonMap = JsonMap,\n >(options: FetchNgwItemsOptions<P>): Promise<FeatureCollection<G, P>> {\n return this.fetchNgwLayerFeatures(options);\n }\n\n /** @deprecated use {@link cancelPromises} instead */\n cancelPromise(...args: PromiseGroup[]): void {\n this.cancelPromises(...args);\n }\n\n cancelPromises(...args: PromiseGroup[]): void {\n if (!args.length) {\n args = Object.keys(this._promises) as PromiseGroup[];\n }\n args.forEach((name) => {\n const group = this._promises[name];\n if (group) {\n group.forEach((x) => x[1].abort());\n this._promises[name] = [];\n }\n });\n }\n\n async selectFromNgwRaster(\n ev: MapClickEvent,\n ): Promise<NgwIdentifyEvent | undefined> {\n this._emitStatusEvent('ngw:preselect');\n\n const promises: Promise<number[] | undefined>[] = [];\n const layers = Object.values(this._ngwLayers);\n layers.sort((a, b) => {\n if (a.layer.order && b.layer.order) {\n return b.layer.order - a.layer.order;\n }\n return 1;\n });\n for (const l of layers) {\n const layer = l.layer;\n const identFunc =\n typeof layer.getIdentificationIds === 'function'\n ? layer.getIdentificationIds\n : false;\n const interactive = layer.options.interactive ?? true;\n if (\n identFunc &&\n layer.options.selectable &&\n interactive &&\n this.isLayerVisible(layer)\n ) {\n const layerIds = identFunc.call(layer);\n promises.push(layerIds);\n }\n }\n const getIdsPromise = Promise.all(promises);\n const getIds = await getIdsPromise;\n const ids: number[] = [];\n for (const x of getIds) {\n if (x) {\n ids.push(...x);\n }\n }\n\n if (!ids.length) {\n this._emitStatusEvent('ngw:select', null);\n return;\n }\n\n const pixelRadius = this.options.pixelRadius || 10;\n const center = this.getCenter();\n let zoom = this.getZoom();\n zoom = zoom !== undefined ? zoom : 20;\n if (!center || !zoom) {\n this._emitStatusEvent('ngw:select', null);\n return;\n }\n const radius = getIdentifyRadius(center, zoom, pixelRadius);\n\n let geom: Polygon | undefined;\n if (this.options.highlightIdentification) {\n const highlightOptions = this.options.highlightIdentification;\n const highlightDuration =\n typeof highlightOptions === 'number' ? highlightOptions : 1000;\n const [lng, lat] = ev.lngLat;\n geom = {\n type: 'Polygon',\n coordinates: [getCirclePolygonCoordinates(lng, lat, radius)],\n };\n\n const highlightIdentificationLayer = await this.addGeoJsonLayer({\n data: {\n type: 'Feature',\n geometry: geom,\n },\n });\n if (highlightDuration !== Infinity) {\n setTimeout(() => {\n this.removeLayer(highlightIdentificationLayer);\n }, highlightDuration);\n }\n }\n const abortController = new AbortController();\n const selectPromise = sendIdentifyRequest(ev, {\n layers: ids,\n connector: this.connector,\n radius,\n geom,\n signal: abortController.signal,\n }).then((resp) => {\n const identify: NgwIdentify = {\n ...resp,\n resources: ids,\n sourceType: 'raster',\n event: ev,\n };\n const identifyEvent: NgwIdentifyEvent = this._prepareToIdentify(identify);\n this._emitStatusEvent('ngw:select', identifyEvent);\n return identifyEvent;\n });\n this._addPromise('select', selectPromise, abortController);\n return selectPromise;\n }\n\n private _addPromise(\n groupName: PromiseGroup,\n promise: Promise<unknown>,\n abortController: AbortController,\n ) {\n const group = this._promises[groupName];\n if (group && group.findIndex((g) => g[0] === promise) === -1) {\n const removeFromGroup = () => {\n const index = group.findIndex((g) => g[0] === promise);\n if (index !== -1) {\n group.splice(index, 1);\n }\n };\n promise.then(removeFromGroup, removeFromGroup);\n\n group.push([promise, abortController]);\n }\n }\n\n private _isFitFromResource() {\n const params = this._initMapState;\n if (params.zoom && params.center) {\n return false;\n }\n return true;\n }\n\n private async _createWebMap() {\n await this.create();\n if (this.options.qmsId) {\n this._addQmsBaseLayer();\n }\n if (this.options.osm) {\n this._addOsmBaseLayer();\n }\n\n const resources: NgwLayerOptions[] = [];\n const layerFitAllowed = this._isFitFromResource();\n if (this.options.webmapId) {\n appendNgwResources(resources, this.options.webmapId, {\n fit: layerFitAllowed,\n });\n }\n if (this.options.resources && Array.isArray(this.options.resources)) {\n for (const x of this.options.resources) {\n const overwriteOptions: Partial<NgwLayerOptions> = {};\n if (!layerFitAllowed) {\n overwriteOptions.fit = false;\n }\n appendNgwResources(resources, x, {}, overwriteOptions);\n }\n }\n for (const r of resources) {\n try {\n await this.addNgwLayer(r);\n } catch (er) {\n console.warn(er);\n }\n }\n this._emitStatusEvent('ngw-map:create', this);\n this.enableSelection();\n }\n\n private _addOsmBaseLayer() {\n this.addBaseLayer('OSM');\n }\n\n private _addQmsBaseLayer() {\n let qmsId: number;\n let qmsLayerName: string | undefined;\n if (Array.isArray(this.options.qmsId)) {\n qmsId = this.options.qmsId[0];\n qmsLayerName = this.options.qmsId[1];\n } else {\n qmsId = Number(this.options.qmsId);\n }\n const qmsLayerOptions: Partial<QmsAdapterOptions> = {\n qmsId,\n };\n if (qmsLayerName) {\n qmsLayerOptions.id = qmsLayerName;\n }\n\n this.addBaseLayer('QMS', qmsLayerOptions);\n }\n\n private _selectFromNgwVector(\n ev: OnLayerMouseOptions,\n ): FeatureLayersIdentify | undefined {\n const layer: ResourceAdapter = ev.layer as ResourceAdapter;\n const selectable = layer.options.selectable && this.isLayerVisible(layer);\n if (!selectable) {\n return undefined;\n }\n // Item property means layer is NgwResource\n const id = layer.item && layer.item.resource.id;\n const feature = ev.feature;\n\n if (id !== undefined && feature) {\n const featureId = feature.id;\n if (featureId) {\n const identifyFeature: LayerFeature = {\n id: Number(featureId),\n fields: feature.properties || {},\n label: `#${id}`,\n layerId: Number(id),\n parent: '',\n geom: feature.geometry,\n };\n const items: FeatureLayersIdentifyItems = {\n featureCount: 1,\n features: [identifyFeature],\n };\n const identify: FeatureLayersIdentify = {\n featureCount: 1,\n [id]: items,\n };\n this._emitStatusEvent(\n 'ngw:select',\n this._prepareToIdentify({\n ...identify,\n resources: [id],\n sourceType: 'vector',\n } as NgwIdentify),\n );\n return identify;\n }\n }\n }\n\n private _prepareToIdentify<\n F extends FeatureProperties = FeatureProperties,\n G extends Geometry = Geometry,\n >(identify: NgwIdentify): NgwIdentifyEvent {\n const getIdentifyItems_ = () => {\n return getIdentifyItems(identify, true).map((x) => {\n return createIdentifyItem<F, G>({\n feature: x.feature,\n connector: this.connector,\n });\n });\n };\n return {\n ...identify,\n getIdentifyItems: getIdentifyItems_,\n };\n }\n\n private _getSelectListenersCount() {\n return this.emitter.listenerCount('ngw:select');\n }\n\n private async _whiteLabel() {\n const container = this.getContainer();\n if (container) {\n const logo = await getCompanyLogo(\n this.connector,\n this.options.companyLogoOptions,\n );\n if (logo) {\n container.appendChild(logo);\n }\n }\n }\n}\n","import { NgwMap } from './NgwMap';\n\nimport type { NgwMapOptions } from './interfaces';\n\nexport * from './interfaces';\nexport * from '@nextgis/webmap';\n\nexport { NgwMap };\n\nexport async function createNgwMap(options: NgwMapOptions): Promise<NgwMap> {\n const ngwMap = new NgwMap(options);\n return ngwMap.onLoad();\n}\n"],"names":["appendNgwResources","options","resource","defOptions","overwriteOptions","Number","push","Array","isArray","resourceId","id","OPTIONS","target","baseUrl","whitlabel","controls","getDefaultControls","controlsOptions","ZOOM","position","ATTRIBUTION","customAttribution","pixelRadius","NgwMap","WebMap","constructor","super","kits","QmsKit","starterKits","forEach","x","connector","NgwConnector","auth","withCredentials","deepmerge","center","bounds","NgwKit","create","prepareWebMapOptions","__publicField","this","EventEmitter","select","identify","_createWebMap","then","container","getContainer","classList","add","_whiteLabel","addControl","controlDef","onLoad","addNgwLayer","onMapLoad","keyname","filters","deprecatedWarn","Error","defined","adapterOptions","setViewDelay","propertiesFilter","adapter","createNgwLayerAdapter","adapterOpts","visibility","layer","addLayer","getLayerId","_ngwLayers","name","item","display_name","baselayer","getActiveBaseLayer","er","resId","isObject","console","error","fit","zoom","setCenter","setZoom","fitBounds","fetchNgwLayerItem","fetchNgwLayerItems","fetchNgwLayerFeature","fetchNgwLayerFeatures","fetchNgwLayerFeatureCollection","fetchIdentifyItem","requestOptions","abortController","AbortController","abortSignal","signal","addEventListener","abort","promise","_addPromise","fetchIdentifyGeoJson","multiple","aborted","Promise","reject","errors","AbortError","resolve","getIdentifyGeoJson","getNgwLayers","getNgwLayerByResourceId","n","mem","getIdentificationIds","ids","some","getDependLayers","dependFit","find","style_parent_id","fitLayer","layerDef","String","ngwLayer","getBounds","getResource","fitResource","resources","getIdOrFail","extent","fetchNgwExtent","zoomToLayer","event","removeLayer","getLayer","layerId","enableSelection","$$selectFromNgwRaster","ev","_getSelectListenersCount","selectFromNgwRaster","$$selectFromNgwVector","_selectFromNgwVector","emitter","on","disableSelection","removeListener","getNgwLayerItem","getNgwLayerItems","getNgwLayerFeature","getNgwLayerFeatures","cancelPromise","args","cancelPromises","length","Object","keys","_promises","group","_a","_emitStatusEvent","promises","layers","values","sort","a","b","order","l","identFunc","interactive","selectable","isLayerVisible","layerIds","call","getIdsPromise","all","getIds","getCenter","getZoom","radius","getIdentifyRadius","geom","highlightIdentification","highlightOptions","highlightDuration","lng","lat","lngLat","type","coordinates","getCirclePolygonCoordinates","highlightIdentificationLayer","addGeoJsonLayer","data","geometry","Infinity","setTimeout","selectPromise","sendIdentifyRequest","resp","sourceType","identifyEvent","_prepareToIdentify","groupName","findIndex","g","removeFromGroup","index","splice","_isFitFromResource","params","_initMapState","qmsId","_addQmsBaseLayer","osm","_addOsmBaseLayer","layerFitAllowed","webmapId","r","warn","addBaseLayer","qmsLayerName","qmsLayerOptions","feature","featureId","items","featureCount","features","fields","properties","label","parent","getIdentifyItems","map","createIdentifyItem","listenerCount","logo","getCompanyLogo","companyLogoOptions","appendChild","getIcon","async"],"mappings":"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"}
1
+ {"version":3,"file":"ngw-map.cjs.prod.js","sources":["../src/utils/appendNgwResources.ts","../src/utils/prepareWebMapOptions.ts","../src/NgwMap.ts","../src/index.ts"],"sourcesContent":["import type { NgwLayerOptions } from '@nextgis/ngw-kit';\n\nimport type { NgwResourceDefinition } from '../interfaces';\n\nexport function appendNgwResources(\n options: NgwLayerOptions[],\n resource?: NgwResourceDefinition,\n defOptions?: Partial<NgwLayerOptions>,\n overwriteOptions?: Partial<NgwLayerOptions>,\n): void {\n if (typeof resource === 'number' || typeof resource === 'string') {\n resource = Number(resource);\n options.push({\n ...defOptions,\n resource,\n });\n } else if (Array.isArray(resource)) {\n const [resourceId, id] = resource;\n options.push({\n ...defOptions,\n resource: resourceId,\n id,\n ...overwriteOptions,\n });\n } else if (typeof resource === 'object') {\n options.push({ ...defOptions, ...resource, ...overwriteOptions });\n }\n}\n","import NgwConnector from '@nextgis/ngw-connector';\nimport { NgwKit } from '@nextgis/ngw-kit';\nimport { QmsKit } from '@nextgis/qms-kit';\nimport { deepmerge } from '@nextgis/utils';\nimport { getDefaultControls } from '@nextgis/webmap';\n\nimport type { MapOptions, StarterKit } from '@nextgis/webmap';\n\nimport type { NgwMapOptions } from '../interfaces';\n\nexport const OPTIONS: NgwMapOptions = {\n target: 'map',\n baseUrl: '',\n whitlabel: false,\n controls: getDefaultControls(),\n controlsOptions: {\n ZOOM: { position: 'top-left' },\n ATTRIBUTION: {\n position: 'bottom-right',\n customAttribution: [\n '<a href=\"https://nextgis.com\" target=\"_blank\">©NextGIS</a>',\n ],\n },\n },\n pixelRadius: 10,\n};\n\nexport function prepareWebMapOptions(options: NgwMapOptions): MapOptions {\n const kits: StarterKit[] = [new QmsKit()];\n if (options.starterKits) {\n options.starterKits.forEach((x) => {\n kits.push(x);\n });\n }\n\n if (!options.connector) {\n options.connector = new NgwConnector({\n baseUrl: options.baseUrl || '',\n auth: options.auth,\n withCredentials: options.withCredentials,\n });\n } else if (options.connector) {\n options.baseUrl = options.connector.options.baseUrl;\n }\n options = deepmerge(OPTIONS, options);\n\n if (!options.center && !options.bounds) {\n options.bounds = [-179, -90, 180, 90];\n // options.maxBounds = options.bounds;\n }\n\n if (options.connector) {\n kits.push(\n new NgwKit({\n connector: options.connector,\n auth: options.auth,\n }),\n );\n }\n options = {\n ...options,\n starterKits: kits,\n create: false,\n };\n return options;\n}\n","import { getIcon } from '@nextgis/icons';\nimport NgwConnector from '@nextgis/ngw-connector';\nimport {\n createIdentifyItem,\n createNgwLayerAdapter,\n fetchIdentifyGeoJson,\n fetchIdentifyItem,\n fetchNgwExtent,\n fetchNgwLayerFeature,\n fetchNgwLayerFeatureCollection,\n fetchNgwLayerItem,\n fetchNgwLayerItems,\n getCompanyLogo,\n getIdentifyItems,\n sendIdentifyRequest,\n} from '@nextgis/ngw-kit';\nimport {\n defined,\n getCirclePolygonCoordinates,\n getIdentifyRadius,\n isObject,\n} from '@nextgis/utils';\nimport { deprecatedWarn } from '@nextgis/utils';\nimport { WebMap } from '@nextgis/webmap';\nimport { EventEmitter } from 'events';\n\nimport { appendNgwResources } from './utils/appendNgwResources';\nimport { prepareWebMapOptions } from './utils/prepareWebMapOptions';\n\nimport type {\n FeatureItem,\n FeatureLayersIdentify,\n FeatureLayersIdentifyItems,\n LayerFeature,\n ResourceDefinition,\n} from '@nextgis/ngw-connector';\nimport type {\n FetchNgwItemsOptions,\n NgwFeatureItemResponse,\n NgwFeatureRequestOptions,\n NgwGeoJsonLayerAdapter,\n NgwGeoJsonLayerOptions,\n NgwIdentify,\n NgwWebmapItem,\n NgwWebmapLayerAdapter,\n ResourceAdapter,\n} from '@nextgis/ngw-kit';\nimport type { NgwLayerOptions } from '@nextgis/ngw-kit';\nimport type { FetchNgwItemOptions } from '@nextgis/ngw-kit';\nimport type { QmsAdapterOptions } from '@nextgis/qms-kit';\nimport type { FeatureProperties, JsonMap } from '@nextgis/utils';\nimport type {\n AdapterOptions,\n AddControlOptions,\n ControlTargetPosition,\n FitOptions,\n LayerAdapter,\n LayerDef,\n MapClickEvent,\n MapControls,\n OnLayerMouseOptions,\n WebMapEvents,\n} from '@nextgis/webmap';\nimport type { CompositeRead } from '@nextgisweb/resource/type/api';\nimport type { Feature, FeatureCollection, Geometry, Polygon } from 'geojson';\nimport type StrictEventEmitter from 'strict-event-emitter-types';\n\nimport type {\n NgwIdentifyEvent,\n NgwLayers,\n NgwMapEvents,\n NgwMapOptions,\n} from './interfaces';\n\ntype PromiseGroup = 'select' | 'identify';\n\n/**\n * Base class containing the logic of interaction WebMap with NextGIS services.\n *\n * @example\n * ```javascript\n * import { NgwMap } from '@nextgis/ngw-map';\n * import MapAdapter from '@nextgis/leaflet-map-adapter';\n * // styles are not included in the leaflet-map-adapter\n * import 'leaflet/dist/leaflet.css';\n *\n * const ngwMap = new NgwMap({\n * mapAdapter: new MapAdapter(),\n * target: 'map',\n * qmsId: 448,\n * baseUrl: 'https://demo.nextgis.com',\n * webmapId: 3985\n * });\n * ```\n */\nexport class NgwMap<\n M = unknown,\n L = unknown,\n C extends object = any,\n O extends NgwMapOptions<M, C> = NgwMapOptions<M, C>,\n> extends WebMap<M, L, C, NgwMapEvents, O> {\n static getIcon = getIcon;\n\n readonly emitter: StrictEventEmitter<EventEmitter, NgwMapEvents> =\n new EventEmitter();\n connector!: NgwConnector;\n\n protected _ngwLayers: NgwLayers = {};\n private $$selectFromNgwRaster?: (ev: MapClickEvent) => void;\n private $$selectFromNgwVector?: (ev: OnLayerMouseOptions) => void;\n private _promises: Record<\n PromiseGroup,\n [Promise<unknown>, AbortController][]\n > = {\n select: [],\n identify: [],\n };\n\n constructor(options: O) {\n super(prepareWebMapOptions(options) as O);\n if (options.connector) {\n this.connector = options.connector;\n }\n this._createWebMap().then(() => {\n const container = this.getContainer();\n if (container) {\n container.classList.add('ngw-map-container');\n }\n if (this.options.whitlabel) {\n this._whiteLabel();\n }\n });\n }\n\n /**\n * Organized addition to the map design and controls elements,\n * calling `control.onAdd(this.webMap.mapAdapter)`\n * @param control - object with onAdd and onRemove methods\n * or a string value indicating the name of the control installed in the map adapter\n * @param position - position relative to the map angles\n * @param options - initialization parameters if the control is set as a string value\n *\n * @example\n * ```javascript\n * ngwMap.addControl(new CustomControl(), 'bottom-left');\n * ngwMap.addControl('ZOOM', 'top-right')\n * ```\n */\n async addControl<K extends keyof MapControls>(\n controlDef: K | C,\n position: ControlTargetPosition,\n options?: MapControls[K] & AddControlOptions,\n ): Promise<any> {\n await this.onLoad('controls:create');\n return super.addControl(controlDef, position, options);\n }\n\n /**\n * Add any (style, vector, webmap) NGW layer by resource definition.\n * @param options - set layer identification parameters and render method.\n *\n * @example\n * ```javascript\n * // Add raster layer resourceId is the style of 4004 layer\n * ngwMap.addNgwLayer({ resource: 4005 });\n * // Add vector data from layer GEOJSON source\n * ngwMap.addNgwLayer({\n * resource: 4038,\n * adapter: 'GEOJSON',\n * adapterOptions: { paint: { color: 'red' } }\n * });\n * ```\n */\n addNgwLayer<P extends FeatureProperties = FeatureProperties>(\n options: NgwGeoJsonLayerOptions<NoInfer<P>>,\n ): Promise<NgwGeoJsonLayerAdapter<P, M, L> | undefined>;\n addNgwLayer(\n options: NgwLayerOptions<'NGW:WEBMAP'> & { adapter: 'NGW:WEBMAP' },\n ): Promise<NgwWebmapLayerAdapter<M> | undefined>;\n addNgwLayer(options: NgwLayerOptions): Promise<ResourceAdapter | undefined>;\n async addNgwLayer(\n options: NgwLayerOptions,\n ): Promise<ResourceAdapter | undefined> {\n await this.onMapLoad();\n // @ts-expect-error for backward compatibility\n const { keyname, resourceId, filters } = options;\n\n if (keyname || resourceId !== undefined) {\n deprecatedWarn(\n 'set `resource` options instead of `keyname` or `resourceId`',\n );\n }\n\n const resource = options.resource;\n if (!keyname && !resourceId && !resource) {\n throw new Error(\n 'resource, resourceId or keyname is required parameter to add NGW layer',\n );\n }\n if (defined(this.options.baseUrl)) {\n try {\n options.adapterOptions = options.adapterOptions || {};\n if (defined(this.options.setViewDelay)) {\n if (!defined(options.adapterOptions.setViewDelay)) {\n options.adapterOptions.setViewDelay = this.options.setViewDelay;\n }\n }\n if (defined(filters)) {\n options.adapterOptions.propertiesFilter = filters;\n }\n\n const adapter = createNgwLayerAdapter(options, this, this.connector);\n const adapterOpts = {\n visibility: true,\n // TODO: do not merge options, use only `adapterOptions`\n ...options,\n ...options.adapterOptions,\n } as AdapterOptions;\n const layer = (await this.addLayer(\n adapter,\n adapterOpts,\n )) as ResourceAdapter<M, L, AdapterOptions>;\n const id = layer && this.getLayerId(layer);\n if (layer && id) {\n this._ngwLayers[id] = { layer, resourceId: layer.resourceId };\n layer.options.name =\n layer.options.name ||\n (layer.item && layer.item.resource.display_name);\n if (layer.options.baselayer) {\n const visibleLayerBaseLayer = this.getActiveBaseLayer();\n if (visibleLayerBaseLayer) {\n return layer;\n }\n }\n }\n return layer;\n } catch (er) {\n const resId =\n isObject(resource) && 'id' in resource\n ? resource.id\n : keyname || resourceId || resource;\n console.error(`Can't add NGW layer ${resId}.`, er);\n }\n }\n }\n\n /**\n * Pans and zooms the map to the initial position specified in the options\n */\n fit(): void {\n const { center, zoom, bounds } = this.options;\n if (center) {\n this.setCenter(center);\n if (zoom) {\n this.setZoom(zoom);\n }\n } else if (bounds) {\n this.fitBounds(bounds);\n }\n }\n\n fetchNgwLayerItem<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(options: Omit<FetchNgwItemOptions<P>, 'connector'>): Promise<FeatureItem> {\n return fetchNgwLayerItem<G, P>({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchNgwLayerItems<\n F extends FeatureProperties = FeatureProperties,\n G extends Geometry = Geometry,\n >(\n options: Omit<FetchNgwItemsOptions<F>, 'connector'>,\n ): Promise<FeatureItem<F, G>[]> {\n return fetchNgwLayerItems<G, F>({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchNgwLayerFeature<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n options: Omit<FetchNgwItemOptions<P>, 'connector'>,\n ): Promise<Feature<G, P>> {\n return fetchNgwLayerFeature<G, P>({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchNgwLayerFeatures<\n G extends Geometry | null = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n options: Omit<FetchNgwItemsOptions<P>, 'connector'>,\n ): Promise<FeatureCollection<G, P>> {\n return fetchNgwLayerFeatureCollection({\n connector: this.connector,\n ...options,\n });\n }\n\n fetchIdentifyItem<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n identify: NgwIdentify,\n requestOptions?: NgwFeatureRequestOptions,\n // multiple = false\n ): Promise<NgwFeatureItemResponse<P, G> | undefined> {\n const abortController = new AbortController();\n const abortSignal = abortController.signal;\n\n if (requestOptions?.signal) {\n requestOptions.signal.addEventListener('abort', abortController.abort);\n }\n requestOptions = requestOptions || {};\n requestOptions.signal = abortSignal;\n\n const promise = fetchIdentifyItem<G, P>({\n identify,\n connector: this.connector,\n requestOptions,\n // multiple,\n });\n this._addPromise('identify', promise, abortController);\n return promise;\n }\n\n fetchIdentifyGeoJson(\n identify: NgwIdentify,\n { multiple, signal }: { multiple?: boolean; signal?: AbortSignal } = {},\n ): Promise<Feature | undefined> {\n const abortController = new AbortController();\n\n if (signal) {\n if (signal.aborted) {\n return Promise.reject(new NgwConnector.errors.AbortError());\n }\n signal.addEventListener('abort', () => {\n abortController.abort('AbortError');\n });\n }\n\n const promise = fetchIdentifyGeoJson({\n identify,\n connector: this.connector,\n multiple,\n requestOptions: { signal: abortController.signal },\n });\n if (promise && 'then' in promise) {\n this._addPromise('identify', promise, abortController);\n return promise;\n } else {\n return Promise.resolve(promise);\n }\n }\n\n /**\n * @deprecated use {@link fetchIdentifyGeoJson} instead\n */\n getIdentifyGeoJson(\n identify: NgwIdentify,\n multiple = false,\n ): Promise<Feature | undefined> {\n return this.fetchIdentifyGeoJson(identify, { multiple });\n }\n\n async getNgwLayers(): Promise<NgwLayers> {\n await this.onLoad();\n return this._ngwLayers;\n }\n\n async getNgwLayerByResourceId(id: number): Promise<LayerAdapter | undefined> {\n for (const n in this._ngwLayers) {\n const mem = this._ngwLayers[n];\n if (mem.resourceId === id) {\n return mem && mem.layer;\n } else if (mem.layer.getIdentificationIds) {\n const ids = await mem.layer.getIdentificationIds();\n if (ids && ids.some((x) => x === id)) {\n return mem.layer;\n }\n }\n if (mem.layer.getDependLayers) {\n const dependLayers = mem.layer.getDependLayers() as NgwWebmapItem[];\n const dependFit = dependLayers.find((x) => {\n return (\n x.item &&\n 'style_parent_id' in x.item &&\n x.item.style_parent_id !== undefined &&\n x.item.style_parent_id === id\n );\n });\n if (dependFit) {\n return dependFit.layer;\n }\n }\n }\n }\n\n /**\n * Move map to layer. If the layer is NGW resource, extent will be received from the server\n *\n * @example\n * ```javascript\n * const ngwLayer = ngwMap.addNgwLayer({ id: 'ngw_layer_name', resource: 4005 });\n * ngwMap.fitLayer(ngwLayer);\n * ngwMap.fitLayer('ngw_layer_name');\n * ```\n */\n async fitLayer(\n layerDef: LayerDef | number,\n options?: FitOptions,\n ): Promise<void> {\n let id: string | undefined;\n if (typeof layerDef === 'string' || typeof layerDef === 'number') {\n id = String(id);\n } else {\n id = layerDef.id;\n }\n const ngwLayer = id && this._ngwLayers[id];\n if (ngwLayer) {\n if (ngwLayer.layer.getBounds) {\n const bounds = await ngwLayer.layer.getBounds();\n if (bounds) {\n this.fitBounds(bounds, options);\n }\n } else {\n let item: CompositeRead | undefined;\n if (ngwLayer.layer.item) {\n item = ngwLayer.layer.item;\n } else {\n const resourceId = ngwLayer.resourceId;\n item = await this.connector.getResource(resourceId);\n }\n if (item) {\n this.fitResource(item.resource.id);\n }\n }\n } else {\n super.fitLayer(\n typeof layerDef === 'number' ? String(layerDef) : layerDef,\n options,\n );\n }\n }\n\n async fitResource(\n resource: ResourceDefinition,\n options?: FitOptions,\n ): Promise<void> {\n const resourceId = await this.connector.resources.getIdOrFail(resource);\n\n const extent = await fetchNgwExtent({\n resourceId,\n connector: this.connector,\n });\n\n if (extent) {\n this.fitBounds(extent, options);\n }\n }\n\n /** @deprecated use {@link fitLayer} instead */\n async zoomToLayer(layerDef: LayerDef): Promise<void> {\n return this.fitLayer(layerDef);\n }\n\n onLoad(event: keyof NgwMapEvents = 'ngw-map:create'): Promise<this> {\n return super.onLoad(event as keyof WebMapEvents);\n }\n\n removeLayer(layerDef: LayerDef): void {\n const layer = this.getLayer(layerDef);\n if (layer) {\n const layerId = this.getLayerId(layer);\n if (layerId) {\n delete this._ngwLayers[layerId];\n }\n super.removeLayer(layer);\n }\n }\n\n enableSelection(): void {\n if (!this.$$selectFromNgwRaster) {\n this.$$selectFromNgwRaster = (ev: MapClickEvent) => {\n const count = this._getSelectListenersCount();\n if (count) {\n this.selectFromNgwRaster(ev);\n }\n };\n this.$$selectFromNgwVector = (ev: OnLayerMouseOptions) => {\n const count = this._getSelectListenersCount();\n if (count) {\n this._selectFromNgwVector(ev);\n }\n };\n this.emitter.on('click', this.$$selectFromNgwRaster);\n this.emitter.on('layer:click', this.$$selectFromNgwVector);\n }\n }\n\n disableSelection(): void {\n if (this.$$selectFromNgwRaster) {\n this.emitter.removeListener('click', this.$$selectFromNgwRaster);\n this.$$selectFromNgwRaster = undefined;\n }\n if (this.$$selectFromNgwVector) {\n this.emitter.removeListener('layer:click', this.$$selectFromNgwVector);\n\n this.$$selectFromNgwVector = undefined;\n }\n }\n\n /**\n * @deprecated use {@link fetchNgwLayerItem} instead\n */\n getNgwLayerItem<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(options: Omit<FetchNgwItemOptions<P>, 'connector'>): Promise<FeatureItem> {\n return this.fetchNgwLayerItem<G, P>(options);\n }\n\n /**\n * @deprecated use {@link fetchNgwLayerItems} instead\n */\n getNgwLayerItems<\n F extends FeatureProperties = FeatureProperties,\n G extends Geometry = Geometry,\n >(\n options: Omit<FetchNgwItemsOptions<F>, 'connector'>,\n ): Promise<FeatureItem<F, G>[]> {\n return this.fetchNgwLayerItems<F, G>(options);\n }\n\n /**\n * @deprecated use {@link fetchNgwLayerFeature} instead\n */\n getNgwLayerFeature<\n G extends Geometry = Geometry,\n P extends FeatureProperties = FeatureProperties,\n >(\n options: Omit<FetchNgwItemOptions<P>, 'connector'>,\n ): Promise<Feature<G, P>> {\n return this.fetchNgwLayerFeature<G, P>(options);\n }\n\n /**\n * @deprecated use {@link fetchNgwLayerFeatures} instead\n */\n getNgwLayerFeatures<\n G extends Geometry | null = Geometry,\n P extends JsonMap = JsonMap,\n >(options: FetchNgwItemsOptions<P>): Promise<FeatureCollection<G, P>> {\n return this.fetchNgwLayerFeatures(options);\n }\n\n /** @deprecated use {@link cancelPromises} instead */\n cancelPromise(...args: PromiseGroup[]): void {\n this.cancelPromises(...args);\n }\n\n cancelPromises(...args: PromiseGroup[]): void {\n if (!args.length) {\n args = Object.keys(this._promises) as PromiseGroup[];\n }\n args.forEach((name) => {\n const group = this._promises[name];\n if (group) {\n group.forEach((x) => x[1].abort());\n this._promises[name] = [];\n }\n });\n }\n\n async selectFromNgwRaster(\n ev: MapClickEvent,\n ): Promise<NgwIdentifyEvent | undefined> {\n this._emitStatusEvent('ngw:preselect');\n\n const promises: Promise<number[] | undefined>[] = [];\n const layers = Object.values(this._ngwLayers);\n layers.sort((a, b) => {\n if (a.layer.order && b.layer.order) {\n return b.layer.order - a.layer.order;\n }\n return 1;\n });\n for (const l of layers) {\n const layer = l.layer;\n const identFunc =\n typeof layer.getIdentificationIds === 'function'\n ? layer.getIdentificationIds\n : false;\n const interactive = layer.options.interactive ?? true;\n if (\n identFunc &&\n layer.options.selectable &&\n interactive &&\n this.isLayerVisible(layer)\n ) {\n const layerIds = identFunc.call(layer);\n promises.push(layerIds);\n }\n }\n const getIdsPromise = Promise.all(promises);\n const getIds = await getIdsPromise;\n const ids: number[] = [];\n for (const x of getIds) {\n if (x) {\n ids.push(...x);\n }\n }\n\n if (!ids.length) {\n this._emitStatusEvent('ngw:select', null);\n return;\n }\n\n const pixelRadius = this.options.pixelRadius || 10;\n const center = this.getCenter();\n let zoom = this.getZoom();\n zoom = zoom !== undefined ? zoom : 20;\n if (!center || !zoom) {\n this._emitStatusEvent('ngw:select', null);\n return;\n }\n const radius = getIdentifyRadius(center, zoom, pixelRadius);\n\n let geom: Polygon | undefined;\n if (this.options.highlightIdentification) {\n const highlightOptions = this.options.highlightIdentification;\n const highlightDuration =\n typeof highlightOptions === 'number' ? highlightOptions : 1000;\n const [lng, lat] = ev.lngLat;\n geom = {\n type: 'Polygon',\n coordinates: [getCirclePolygonCoordinates(lng, lat, radius)],\n };\n\n const highlightIdentificationLayer = await this.addGeoJsonLayer({\n data: {\n type: 'Feature',\n geometry: geom,\n },\n });\n if (highlightDuration !== Infinity) {\n setTimeout(() => {\n this.removeLayer(highlightIdentificationLayer);\n }, highlightDuration);\n }\n }\n const abortController = new AbortController();\n const selectPromise = sendIdentifyRequest(ev, {\n layers: ids,\n connector: this.connector,\n radius,\n geom,\n signal: abortController.signal,\n }).then((resp) => {\n const identify: NgwIdentify = {\n ...resp,\n resources: ids,\n sourceType: 'raster',\n event: ev,\n };\n const identifyEvent: NgwIdentifyEvent = this._prepareToIdentify(identify);\n this._emitStatusEvent('ngw:select', identifyEvent);\n return identifyEvent;\n });\n this._addPromise('select', selectPromise, abortController);\n return selectPromise;\n }\n\n private _addPromise(\n groupName: PromiseGroup,\n promise: Promise<unknown>,\n abortController: AbortController,\n ) {\n const group = this._promises[groupName];\n if (group && group.findIndex((g) => g[0] === promise) === -1) {\n const removeFromGroup = () => {\n const index = group.findIndex((g) => g[0] === promise);\n if (index !== -1) {\n group.splice(index, 1);\n }\n };\n promise.then(removeFromGroup, removeFromGroup);\n\n group.push([promise, abortController]);\n }\n }\n\n private _isFitFromResource() {\n const params = this._initMapState;\n if (params.zoom && params.center) {\n return false;\n }\n return true;\n }\n\n private async _createWebMap() {\n await this.create();\n if (this.options.qmsId) {\n this._addQmsBaseLayer();\n }\n if (this.options.osm) {\n this._addOsmBaseLayer();\n }\n\n const resources: NgwLayerOptions[] = [];\n const layerFitAllowed = this._isFitFromResource();\n if (this.options.webmapId) {\n appendNgwResources(resources, this.options.webmapId, {\n fit: layerFitAllowed,\n });\n }\n if (this.options.resources && Array.isArray(this.options.resources)) {\n for (const x of this.options.resources) {\n const overwriteOptions: Partial<NgwLayerOptions> = {};\n if (!layerFitAllowed) {\n overwriteOptions.fit = false;\n }\n appendNgwResources(resources, x, {}, overwriteOptions);\n }\n }\n for (const r of resources) {\n try {\n await this.addNgwLayer(r);\n } catch (er) {\n console.warn(er);\n }\n }\n this._emitStatusEvent('ngw-map:create', this);\n this.enableSelection();\n }\n\n private _addOsmBaseLayer() {\n this.addBaseLayer('OSM');\n }\n\n private _addQmsBaseLayer() {\n let qmsId: number;\n let qmsLayerName: string | undefined;\n if (Array.isArray(this.options.qmsId)) {\n qmsId = this.options.qmsId[0];\n qmsLayerName = this.options.qmsId[1];\n } else {\n qmsId = Number(this.options.qmsId);\n }\n const qmsLayerOptions: Partial<QmsAdapterOptions> = {\n qmsId,\n };\n if (qmsLayerName) {\n qmsLayerOptions.id = qmsLayerName;\n }\n\n this.addBaseLayer('QMS', qmsLayerOptions);\n }\n\n private _selectFromNgwVector(\n ev: OnLayerMouseOptions,\n ): FeatureLayersIdentify | undefined {\n const layer: ResourceAdapter = ev.layer as ResourceAdapter;\n const selectable = layer.options.selectable && this.isLayerVisible(layer);\n if (!selectable) {\n return undefined;\n }\n // Item property means layer is NgwResource\n const id = layer.item && layer.item.resource.id;\n const feature = ev.feature;\n\n if (id !== undefined && feature) {\n const featureId = feature.id;\n if (featureId) {\n const identifyFeature: LayerFeature = {\n id: Number(featureId),\n fields: feature.properties || {},\n label: `#${id}`,\n layerId: Number(id),\n parent: '',\n geom: feature.geometry,\n };\n const items: FeatureLayersIdentifyItems = {\n featureCount: 1,\n features: [identifyFeature],\n };\n const identify: FeatureLayersIdentify = {\n featureCount: 1,\n [id]: items,\n };\n this._emitStatusEvent(\n 'ngw:select',\n this._prepareToIdentify({\n ...identify,\n resources: [id],\n sourceType: 'vector',\n } as NgwIdentify),\n );\n return identify;\n }\n }\n }\n\n private _prepareToIdentify<\n F extends FeatureProperties = FeatureProperties,\n G extends Geometry = Geometry,\n >(identify: NgwIdentify): NgwIdentifyEvent {\n const getIdentifyItems_ = () => {\n return getIdentifyItems(identify, true).map((x) => {\n return createIdentifyItem<F, G>({\n feature: x.feature,\n connector: this.connector,\n });\n });\n };\n return {\n ...identify,\n getIdentifyItems: getIdentifyItems_,\n };\n }\n\n private _getSelectListenersCount() {\n return this.emitter.listenerCount('ngw:select');\n }\n\n private async _whiteLabel() {\n const container = this.getContainer();\n if (container) {\n const logo = await getCompanyLogo(\n this.connector,\n this.options.companyLogoOptions,\n );\n if (logo) {\n container.appendChild(logo);\n }\n }\n }\n}\n","import { NgwMap } from './NgwMap';\n\nimport type { NgwMapOptions } from './interfaces';\n\nexport * from './interfaces';\nexport * from '@nextgis/webmap';\n\nexport { NgwMap };\n\nexport async function createNgwMap(options: NgwMapOptions): Promise<NgwMap> {\n const ngwMap = new NgwMap(options);\n return ngwMap.onLoad();\n}\n"],"names":["appendNgwResources","options","resource","defOptions","overwriteOptions","Number","push","Array","isArray","resourceId","id","OPTIONS","target","baseUrl","whitlabel","controls","getDefaultControls","controlsOptions","ZOOM","position","ATTRIBUTION","customAttribution","pixelRadius","NgwMap","WebMap","constructor","super","kits","QmsKit","starterKits","forEach","x","connector","NgwConnector","auth","withCredentials","deepmerge","center","bounds","NgwKit","create","prepareWebMapOptions","__publicField","this","EventEmitter","select","identify","_createWebMap","then","container","getContainer","classList","add","_whiteLabel","addControl","controlDef","onLoad","addNgwLayer","onMapLoad","keyname","filters","deprecatedWarn","Error","defined","adapterOptions","setViewDelay","propertiesFilter","adapter","createNgwLayerAdapter","adapterOpts","visibility","layer","addLayer","getLayerId","_ngwLayers","name","item","display_name","baselayer","getActiveBaseLayer","er","resId","isObject","console","error","fit","zoom","setCenter","setZoom","fitBounds","fetchNgwLayerItem","fetchNgwLayerItems","fetchNgwLayerFeature","fetchNgwLayerFeatures","fetchNgwLayerFeatureCollection","fetchIdentifyItem","requestOptions","abortController","AbortController","abortSignal","signal","addEventListener","abort","promise","_addPromise","fetchIdentifyGeoJson","multiple","aborted","Promise","reject","errors","AbortError","resolve","getIdentifyGeoJson","getNgwLayers","getNgwLayerByResourceId","n","mem","getIdentificationIds","ids","some","getDependLayers","dependFit","find","style_parent_id","fitLayer","layerDef","String","ngwLayer","getBounds","getResource","fitResource","resources","getIdOrFail","extent","fetchNgwExtent","zoomToLayer","event","removeLayer","getLayer","layerId","enableSelection","$$selectFromNgwRaster","ev","_getSelectListenersCount","selectFromNgwRaster","$$selectFromNgwVector","_selectFromNgwVector","emitter","on","disableSelection","removeListener","getNgwLayerItem","getNgwLayerItems","getNgwLayerFeature","getNgwLayerFeatures","cancelPromise","args","cancelPromises","length","Object","keys","_promises","group","_a","_emitStatusEvent","promises","layers","values","sort","a","b","order","l","identFunc","interactive","selectable","isLayerVisible","layerIds","call","getIdsPromise","all","getIds","getCenter","getZoom","radius","getIdentifyRadius","geom","highlightIdentification","highlightOptions","highlightDuration","lng","lat","lngLat","type","coordinates","getCirclePolygonCoordinates","highlightIdentificationLayer","addGeoJsonLayer","data","geometry","Infinity","setTimeout","selectPromise","sendIdentifyRequest","resp","sourceType","identifyEvent","_prepareToIdentify","groupName","findIndex","g","removeFromGroup","index","splice","_isFitFromResource","params","_initMapState","qmsId","_addQmsBaseLayer","osm","_addOsmBaseLayer","layerFitAllowed","webmapId","r","warn","addBaseLayer","qmsLayerName","qmsLayerOptions","feature","featureId","items","featureCount","features","fields","properties","label","parent","getIdentifyItems","map","createIdentifyItem","listenerCount","logo","getCompanyLogo","companyLogoOptions","appendChild","getIcon","async"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /** Bundle of @nextgis/ngw-map; version: 4.0.0-rc.0; author: NextGIS */
1
+ /** Bundle of @nextgis/ngw-map; version: 4.0.0-rc.1; author: NextGIS */
2
2
  const svgPath = {
3
3
  brill: '<path d="m6 0-5 6 5 6 5-6z"/>',
4
4
  circle: '<circle cx="6" cy="6" r="6"/>',
@@ -1077,7 +1077,7 @@ function unwrapListeners(arr) {
1077
1077
  }
1078
1078
 
1079
1079
  var pkg = {
1080
- version: "4.0.0-rc.0"};
1080
+ version: "4.0.0-rc.1"};
1081
1081
 
1082
1082
  class AbortError extends Error {
1083
1083
  constructor(message = "AbortError") {
@@ -5545,7 +5545,7 @@ function createBasemapLayerAdapter(_0) {
5545
5545
  if (qms) {
5546
5546
  const qms_ = JSON.parse(qms);
5547
5547
  const adapter = Promise.resolve(
5548
- QmsKit.utils.createQmsAdapter(webMap, {
5548
+ createQmsAdapter(webMap, {
5549
5549
  qms: qms_,
5550
5550
  baselayer: true
5551
5551
  })
@@ -5909,6 +5909,9 @@ function createGeoJsonAdapter(props) {
5909
5909
  abort();
5910
5910
  if (this.filter && _fullDataLoad) {
5911
5911
  this.filter((e) => {
5912
+ if (!filters) {
5913
+ return true;
5914
+ }
5912
5915
  const props_ = e.feature && e.feature.properties && prepareNgwFieldsToPropertiesFilter(__spreadValues$e({}, e.feature.properties));
5913
5916
  if (props_) {
5914
5917
  return propertiesFilter(props_, filters);
@@ -5919,7 +5922,7 @@ function createGeoJsonAdapter(props) {
5919
5922
  if (this.clearLayer) {
5920
5923
  this.clearLayer();
5921
5924
  }
5922
- const data = yield getData(filters, __spreadProps$9(__spreadValues$e({}, opt), {
5925
+ const data = yield getData(filters != null ? filters : void 0, __spreadProps$9(__spreadValues$e({}, opt), {
5923
5926
  srs: this.options.srs
5924
5927
  }));
5925
5928
  this.setData(data);
@@ -6152,7 +6155,11 @@ function createRasterAdapter(_0) {
6152
6155
  return __async$c(this, null, function* () {
6153
6156
  var _a;
6154
6157
  const opt = this.options;
6155
- const params = __spreadValues$d(__spreadValues$d({}, opt.params || {}), createLayerFilterParam(this.resourceId, filters));
6158
+ const filterName = `filter[${this.resourceId}]`;
6159
+ const params = __spreadValues$d(__spreadValues$d({}, opt.params || {}), createLayerFilterParam(this.resourceId, filters != null ? filters : void 0));
6160
+ if (!filters) {
6161
+ delete params[filterName];
6162
+ }
6156
6163
  opt.params = params;
6157
6164
  (_a = this.updateLayer) == null ? void 0 : _a.call(this, { params });
6158
6165
  });
@@ -9408,6 +9415,9 @@ class WebMapLayers extends WebMapMain {
9408
9415
  return adapter.propertiesFilter(filters, options);
9409
9416
  } else if (adapter.filter) {
9410
9417
  this.filterLayer(adapter, (e) => {
9418
+ if (!filters) {
9419
+ return true;
9420
+ }
9411
9421
  if (e.feature && e.feature.properties) {
9412
9422
  return propertiesFilter(e.feature.properties, filters);
9413
9423
  }
@@ -10268,22 +10278,6 @@ const _NgwMap = class _NgwMap extends WebMap {
10268
10278
  return __superGet(_NgwMap.prototype, this, "addControl").call(this, controlDef, position, options);
10269
10279
  });
10270
10280
  }
10271
- /**
10272
- * Add any (style, vector, webmap) NGW layer by resource definition.
10273
- * @param options - set layer identification parameters and render method.
10274
- *
10275
- * @example
10276
- * ```javascript
10277
- * // Add raster layer resourceId is the style of 4004 layer
10278
- * ngwMap.addNgwLayer({ resource: 4005 });
10279
- * // Add vector data from layer GEOJSON source
10280
- * ngwMap.addNgwLayer({
10281
- * resource: 4038,
10282
- * adapter: 'GEOJSON',
10283
- * adapterOptions: { paint: { color: 'red' } }
10284
- * });
10285
- * ```
10286
- */
10287
10281
  addNgwLayer(options) {
10288
10282
  return __async$1(this, null, function* () {
10289
10283
  yield this.onMapLoad();