UNPKG

hslayers-ng

Version:
1 lines 17.2 kB
{"version":3,"file":"hslayers-ng-services-panel-constructor.mjs","sources":["../../../projects/hslayers/services/panel-constructor/panel-constructor.service.ts","../../../projects/hslayers/services/panel-constructor/overlay-constructor.service.ts","../../../projects/hslayers/services/panel-constructor/hslayers-ng-services-panel-constructor.ts"],"sourcesContent":["import {HsConfig} from 'hslayers-ng/config';\nimport {Injectable, Type, inject} from '@angular/core';\n\nimport {HsButton} from 'hslayers-ng/types';\nimport {HsPanelContainerService} from 'hslayers-ng/services/panels';\nimport {HsSidebarService} from 'hslayers-ng/services/sidebar';\nimport {capitalizeFirstLetter} from 'hslayers-ng/services/utils';\nimport {skip} from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class HsPanelConstructorService {\n private hsConfig = inject(HsConfig);\n private hsPanelContainerService = inject(HsPanelContainerService);\n private hsSidebarService = inject(HsSidebarService);\n\n constructor() {\n this.hsConfig.configChanges.pipe(skip(1)).subscribe(async () => {\n /**\n * Create panels activated after app init. Buttons are handled in sidebarService\n */\n const activePanels = Object.entries(this.hsConfig.panelsEnabled).reduce(\n (acc, [panel, isEnabled]) => (isEnabled ? [...acc, panel] : acc),\n [],\n );\n const created = this.hsPanelContainerService.panels().map((p) => p.name);\n const toBeCreated = activePanels.filter((p) => !created.includes(p));\n for (const panel of toBeCreated) {\n await this._createPanel(panel);\n }\n });\n }\n\n /**\n * Create HSLayers panel component based on name string\n */\n private async _createPanel(name: string, data?: any) {\n const cName = `Hs${capitalizeFirstLetter(name)}Component`;\n let i;\n switch (name) {\n case 'layerManager':\n i = await import('hslayers-ng/components/layer-manager');\n break;\n case 'draw':\n i = await import('hslayers-ng/components/draw');\n break;\n case 'addData':\n i = await import('hslayers-ng/components/add-data');\n break;\n case 'compositions':\n i = await import('hslayers-ng/components/compositions');\n break;\n case 'featureTable':\n i = await import('hslayers-ng/components/feature-table');\n break;\n case 'language':\n i = await import('hslayers-ng/components/language');\n break;\n case 'legend':\n i = await import('hslayers-ng/components/legend');\n break;\n case 'mapSwipe':\n i = await import('hslayers-ng/components/map-swipe');\n break;\n case 'measure':\n i = await import('hslayers-ng/components/measure');\n break;\n case 'print':\n i = await import('hslayers-ng/components/print');\n break;\n case 'query':\n i = await import('hslayers-ng/components/query');\n break;\n case 'saveMap':\n i = await import('hslayers-ng/components/save-map');\n break;\n case 'search':\n i = await import('hslayers-ng/components/search');\n break;\n case 'styler':\n i = await import('hslayers-ng/components/styler');\n break;\n case 'share':\n i = await import('hslayers-ng/components/share');\n break;\n case 'tripPlanner':\n i = await import('hslayers-ng/components/trip-planner');\n break;\n case 'wfsFilter':\n i = await import('hslayers-ng/components/wfs-filter');\n break;\n\n default:\n break;\n }\n this.hsPanelContainerService.create(i[cName], data || {});\n }\n\n /**\n * INTERNAL. You most likely want to use 'createPanelAndButton' to create additional panel\n * @param name - Name of panel used in panelsEnabled config\n * @param data - Extra misc data object to be stored in panel\n * @param buttonDefinition - HS Button definition object\n */\n async _createPanelAndButton(\n name: string,\n data?: any,\n buttonDefinition?: HsButton,\n ): Promise<void> {\n this._createPanel(name, data);\n /**Create styler component automatically in case LM is present */\n if (name == 'layerManager') {\n this._createPanel('styler', data);\n }\n this.hsSidebarService.addButton(\n this.hsSidebarService.buttonDefinition[name] || buttonDefinition,\n );\n }\n\n /**\n * Creates additional panel and sidebar button\n * @param name - Name of panel used in panelsEnabled config\n * @param buttonDefinition - HS Button definition object\n * @param data - Extra misc data object to be stored in panel\n */\n createPanelAndButton(\n component: Type<any>,\n buttonDefinition: HsButton,\n data?: any,\n ) {\n this.hsPanelContainerService.create(component, data || {});\n this.hsSidebarService.addButton(buttonDefinition);\n }\n\n /**\n * Wrapper function which creates panels and corresponding sidebar buttons\n * for panels which are set to be active in config.panelsEnabled\n */\n createActivePanels() {\n const activePanels = Object.entries(this.hsConfig.panelsEnabled).reduce(\n (acc, [panel, isEnabled]) => (isEnabled ? [...acc, panel] : acc),\n [],\n );\n for (const panel of activePanels) {\n if (\n this.hsSidebarService.buttonDefinition[panel] &&\n this.hsConfig.panelsEnabled[panel]\n ) {\n this._createPanelAndButton(panel, {});\n }\n }\n }\n}\n","import {\n Injectable,\n Injector,\n inject,\n runInInjectionContext,\n} from '@angular/core';\nimport {filter, firstValueFrom, map, take} from 'rxjs';\nimport {toObservable} from '@angular/core/rxjs-interop';\n\nimport {HsConfig} from 'hslayers-ng/config';\nimport {\n HsOverlayContainerService,\n HsPanelContainerService,\n HsToolbarPanelContainerService,\n} from 'hslayers-ng/services/panels';\nimport {HsQueryPopupService} from 'hslayers-ng/common/query-popup';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class HsOverlayConstructorService extends HsPanelContainerService {\n private hsConfig = inject(HsConfig);\n private hsToolbarPanelContainerService = inject(\n HsToolbarPanelContainerService,\n );\n private hsOverlayContainerService = inject(HsOverlayContainerService);\n private hsQueryPopupService = inject(HsQueryPopupService);\n\n private injector = inject(Injector);\n\n panels$ = toObservable(this.hsToolbarPanelContainerService.panels);\n\n /**\n * Create GUI component based on name string.\n */\n private async _createGuiComponent(\n name: string,\n service: HsPanelContainerService = this.hsOverlayContainerService,\n ) {\n const cName = `Hs${this.capitalizeFirstLetter(name)}Component`;\n const data =\n name == 'queryPopup' ? {service: this.hsQueryPopupService} : {};\n let i;\n switch (name) {\n case 'queryPopup':\n i = await import('hslayers-ng/common/query-popup');\n break;\n case 'toolbar':\n i = await import('hslayers-ng/components/toolbar');\n break;\n case 'measureToolbar':\n i = await import('hslayers-ng/components/measure');\n break;\n case 'searchToolbar':\n i = await import('hslayers-ng/components/search');\n break;\n case 'drawToolbar':\n i = await import('hslayers-ng/components/draw');\n break;\n case 'layerManagerGallery':\n i = await import('hslayers-ng/components/layer-manager');\n break;\n case 'info':\n i = await import('hslayers-ng/components/info');\n break;\n case 'geolocation':\n i = await import('hslayers-ng/components/geolocation');\n break;\n default:\n console.warn(`Trying to create unidentified GUI component ${name}`);\n break;\n }\n service.create(i[cName], data);\n }\n\n /**\n * Wrapper function which creates GUI overlay components based on value\n * provided in config.componentsEnabled\n */\n createGuiOverlay() {\n if (this.hsConfig.componentsEnabled.guiOverlay) {\n /**\n * TOOLBAR\n */\n if (this.hsConfig.componentsEnabled.toolbar) {\n this._createGuiComponent('toolbar');\n const enabledToolbarParts = Object.entries(\n this.hsConfig.componentsEnabled,\n ).reduce(\n (acc, [component, isEnabled]) =>\n isEnabled && component.includes('Toolbar')\n ? [...acc, component]\n : acc,\n [],\n );\n\n //Imitate toolbar queue\n runInInjectionContext(this.injector, async () => {\n for (const [index, toolbar] of enabledToolbarParts.entries()) {\n /**\n * Wait for previous toolbar to be created before creating the next one\n * First one is created immediately\n */\n if (index > 0) {\n await firstValueFrom(\n this.panels$.pipe(\n map((panels) => panels.map((p) => p.name)),\n filter((panels) =>\n panels.includes(enabledToolbarParts[index - 1]),\n ),\n take(1),\n ),\n );\n }\n\n this._createGuiComponent(\n toolbar,\n this.hsToolbarPanelContainerService,\n );\n }\n });\n }\n /**\n * GUI OVERLAY\n */\n if (this.hsConfig.componentsEnabled.queryPopup) {\n this._createGuiComponent('queryPopup');\n }\n if (this.hsConfig.componentsEnabled.basemapGallery) {\n this._createGuiComponent('layerManagerGallery');\n }\n if (this.hsConfig.componentsEnabled.info) {\n this._createGuiComponent('info');\n }\n if (this.hsConfig.componentsEnabled.geolocationButton) {\n this._createGuiComponent('geolocation');\n }\n }\n }\n\n /**\n * NOTE: Duplicity but compiler keeps complaining about circular dependency\n */\n private capitalizeFirstLetter(target: string): string {\n return target.charAt(0).toUpperCase() + target.slice(1);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}