UNPKG

hslayers-ng

Version:
1 lines 22.3 kB
{"version":3,"file":"hslayers-ng-common-remove-multiple.mjs","sources":["../../../projects/hslayers/common/remove-multiple/remove-layer-dialog.service.ts","../../../projects/hslayers/common/remove-multiple/remove-layer-dialog.component.ts","../../../projects/hslayers/common/remove-multiple/remove-layer-dialog.component.html","../../../projects/hslayers/common/remove-multiple/remove-layer-dialog.module.ts","../../../projects/hslayers/common/remove-multiple/hslayers-ng-common-remove-multiple.ts"],"sourcesContent":["import {Injectable, inject} from '@angular/core';\n\nimport {Layer} from 'ol/layer';\nimport {Source} from 'ol/source';\n\nimport {HsCommonLaymanService} from 'hslayers-ng/common/layman';\nimport {HsDialogContainerService} from 'hslayers-ng/common/dialogs';\nimport {HsLanguageService} from 'hslayers-ng/services/language';\nimport {HsLaymanService} from 'hslayers-ng/services/save-map';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {\n HsRmLayerDialogComponent,\n HsRmLayerDialogDeleteOptions,\n HsRmLayerDialogResponse,\n} from './remove-layer-dialog.component';\nimport {HsToastService} from 'hslayers-ng/common/toast';\nimport {getDefinition, getName} from 'hslayers-ng/common/extensions';\n\nexport type RemoveLayerWrapper = {\n layer: Layer<Source> | string;\n toRemove: boolean;\n displayTitle: string;\n};\n\n@Injectable({\n providedIn: 'root',\n})\nexport class HsRemoveLayerDialogService {\n private hsMapService = inject(HsMapService);\n private hsToastService = inject(HsToastService);\n private hsLanguageService = inject(HsLanguageService);\n private hsLaymanService = inject(HsLaymanService);\n private hsCommonLaymanService = inject(HsCommonLaymanService);\n private hsDialogContainerService = inject(HsDialogContainerService);\n\n /**\n * Create a remove layer wrapper\n */\n wrapLayer(layer: Layer<Source> | string): RemoveLayerWrapper {\n return {\n layer,\n toRemove: false,\n displayTitle: undefined,\n };\n }\n\n /**\n * Removes selected drawing layer from both Layermanager and Layman\n * @param layer - Layer to be deleted - use when trying to delete layer other than hsDrawService.selectedLayer\n * @param deleteFromOptions - From where the layer should be deleted, defaults to map, map&catalogue\n */\n async removeLayer(\n layer: Layer<Source> | string,\n deleteFromOptions?: HsRmLayerDialogDeleteOptions[],\n ): Promise<boolean> {\n const dialog = this.hsDialogContainerService.create(\n HsRmLayerDialogComponent,\n {\n multiple: false,\n message: 'DRAW.reallyDeleteThisLayer',\n note: this.getDeleteNote(),\n title: 'COMMON.confirmDelete',\n items: [this.wrapLayer(layer)],\n deleteFromOptions,\n },\n );\n const confirmed: HsRmLayerDialogResponse = await dialog.waitResult();\n if (confirmed.value == 'yes') {\n const mapLayers = confirmed.type.includes('catalogue')\n ? this.hsMapService.getLayersArray()\n : undefined;\n await this.completeLayerRemoval(layer, confirmed.type, mapLayers);\n }\n return confirmed.value == 'yes';\n }\n\n /**\n * Overload for when delete options is 'catalogue'\n * ['catalogue'] delete option is expected\n */\n async removeMultipleLayers(\n layers: string[],\n deleteFromOptions: ['catalogue'],\n ): Promise<boolean>;\n\n // Overload for other delete options with Layer<Source>[] type\n async removeMultipleLayers(\n layers: Layer<Source>[],\n deleteFromOptions:\n | Exclude<HsRmLayerDialogDeleteOptions, 'catalogue'>[]\n | ['map'],\n ): Promise<boolean>;\n\n /**\n * Removes multiple selected layers from both Layermanager and Layman\n * @param layer - Layers to be deleted - use when trying to remove other than drawableLayers\n * @param deleteFromOptions - From where the layer should be deleted defaults to map, map&catalogue\n */\n async removeMultipleLayers(\n layersToRemove: Layer<Source>[] | string[],\n deleteFromOptions?: HsRmLayerDialogDeleteOptions[],\n ): Promise<boolean> {\n const items = layersToRemove.map((l) => this.wrapLayer(l));\n\n const dialog = this.hsDialogContainerService.create(\n HsRmLayerDialogComponent,\n {\n multiple: true,\n message: 'DRAW.pleaseCheckTheLayers',\n note: this.getDeleteNote(true),\n title: 'COMMON.selectAndConfirmToDeleteMultiple',\n items: items,\n deleteFromOptions,\n },\n );\n const confirmed: HsRmLayerDialogResponse = await dialog.waitResult();\n if (confirmed.value == 'yes') {\n this.hsToastService.createToastPopupMessage(\n 'LAYMAN.deleteLayersRequest',\n 'LAYMAN.deletionInProgress',\n {\n type: 'info',\n serviceCalledFrom: 'HsDrawService',\n customDelay: 600000,\n },\n );\n\n const drawablesToRemove = items.filter((l) => l.toRemove);\n /**\n * Remove checked layers, may be either - from layman and/or map\n */\n const mapLayers = confirmed.type.includes('catalogue')\n ? this.hsMapService.getLayersArray()\n : undefined;\n for (const l of drawablesToRemove) {\n await this.completeLayerRemoval(l.layer, confirmed.type, mapLayers);\n }\n this.hsToastService.removeByText(\n this.hsLanguageService.getTranslation(\n 'LAYMAN.deletionInProgress',\n undefined,\n ),\n );\n }\n return confirmed.value == 'yes';\n }\n\n /**\n * Remove layer from map and Layman if desirable and possible\n */\n private async completeLayerRemoval(\n layerToRemove: Layer<Source> | string,\n deleteFrom: HsRmLayerDialogDeleteOptions,\n mapLayers?: Layer<Source>[],\n ): Promise<void> {\n if (deleteFrom !== 'map') {\n await this.removeFromCatalogue(layerToRemove);\n }\n if (deleteFrom.includes('map')) {\n this.hsMapService.getMap().removeLayer(layerToRemove as Layer<Source>);\n } else {\n this.tryRemovingFromMap(layerToRemove as string, mapLayers);\n }\n }\n\n /**\n * Once layer is removed from catalogue try to find it in the map by name and remove it as well\n */\n private tryRemovingFromMap(layer: string, layers: Layer<Source>[]): void {\n const lyr = layers.find((l) => getName(l) === layer);\n if (lyr) {\n this.hsMapService.getMap().removeLayer(lyr);\n }\n }\n\n private async removeFromCatalogue(layerToRemove: Layer<Source> | string) {\n const isLayer = layerToRemove instanceof Layer;\n if (isLayer) {\n const definition = getDefinition(layerToRemove);\n if (\n definition?.format?.toLowerCase().includes('wfs') &&\n definition?.url\n ) {\n await this.hsLaymanService.removeLayer(layerToRemove);\n }\n } else {\n //Remove layer which is not in map from catalogue based on name\n await this.hsLaymanService.removeLayer(layerToRemove);\n }\n }\n\n getDeleteNote(plural?: boolean): string {\n return this.hsCommonLaymanService.isAuthenticated()\n ? plural\n ? 'DRAW.deleteNotePlural'\n : 'DRAW.deleteNote'\n : '';\n }\n}\n","import {Component, OnInit, ViewRef, inject} from '@angular/core';\n\nimport {Layer} from 'ol/layer';\n\nimport {HsCommonLaymanService} from 'hslayers-ng/common/layman';\nimport {\n HsDialogComponent,\n HsDialogContainerService,\n HsDialogItem,\n} from 'hslayers-ng/common/dialogs';\nimport {HsLanguageService} from 'hslayers-ng/services/language';\nimport {\n HsRemoveLayerDialogService,\n RemoveLayerWrapper,\n} from './remove-layer-dialog.service';\nimport {getName, getTitle} from 'hslayers-ng/common/extensions';\n\n/**\n * Both catalogue and mapcatalogue will remove layer from map as well.\n * Difference is with layer 'form' - string vs Layer<Source> (see service removeMultipleLayers overloads)\n * string - Name param from Layman layer descriptor. Not all layers are guaranteed to be in map\n * Layer<Source> - OL layer. Layers already in map\n */\nexport type HsRmLayerDialogDeleteOptions = 'map' | 'catalogue' | 'mapcatalogue';\n\nexport type HsRmLayerDialogResponse = {\n value: 'yes' | 'no';\n type?: HsRmLayerDialogDeleteOptions;\n};\n\n@Component({\n selector: 'hs-rm-layer-dialog',\n templateUrl: './remove-layer-dialog.component.html',\n styles: `\n .modal-title {\n white-space: nowrap;\n width: 100%;\n }\n .modal-title span {\n max-width: 18ch;\n }\n `,\n standalone: false,\n})\nexport class HsRmLayerDialogComponent implements HsDialogComponent, OnInit {\n hsDialogContainerService = inject(HsDialogContainerService);\n service = inject(HsRemoveLayerDialogService);\n private hsLanguageService = inject(HsLanguageService);\n private commonLaymanService = inject(HsCommonLaymanService);\n\n dialogItem: HsDialogItem;\n _selectAll = false;\n isAuthenticated: boolean;\n\n deleteFrom: (typeof this.data)['deleteFromOptions'][number];\n\n deleteAllowed = false;\n viewRef: ViewRef;\n /**\n * @param deleteFromOptions - From where the layer should be deleted eg. map, catalogue map&catalogue\n */\n data: {\n multiple: boolean;\n title: string;\n deleteFromOptions?: HsRmLayerDialogDeleteOptions[];\n message: string;\n note?: string;\n items?: RemoveLayerWrapper[];\n };\n\n ngOnInit(): void {\n this.isAuthenticated = this.commonLaymanService.isAuthenticated();\n this.data.deleteFromOptions ??= ['map', 'mapcatalogue'];\n if (!this.isAuthenticated || this.data.deleteFromOptions.length === 1) {\n this.deleteFrom = this.data.deleteFromOptions[0];\n this.deleteAllowed = !this.data.multiple;\n }\n if (this.data.items) {\n for (const item of this.data.items) {\n item.displayTitle = this.getTitle(item);\n }\n }\n }\n yes(): void {\n this.hsDialogContainerService.destroy(this);\n this.dialogItem.resolve({value: 'yes', type: this.deleteFrom});\n }\n\n no(): void {\n this.hsDialogContainerService.destroy(this);\n this.dialogItem.resolve({value: 'no'});\n }\n\n selectDeleteOption(option) {\n this.deleteFrom = option;\n /**\n * If removing only one layer checkboxes are not available thus we need\n * to disable delete button\n */\n this.deleteAllowed = !this.data.multiple ? true : this.deleteAllowed;\n }\n\n checkToRemove(item): void {\n if (item.toRemove !== undefined) {\n item.toRemove = !item.toRemove;\n } else {\n item.toRemove = true;\n }\n this.deleteAllowed = !!this.data.items.find((i) => i.toRemove);\n }\n\n toggleAll(): void {\n this._selectAll = !this._selectAll;\n for (const item of this.data.items) {\n item.toRemove = this._selectAll;\n }\n this.deleteAllowed = !!this.data.items.find((i) => i.toRemove);\n }\n\n getTitle(item: RemoveLayerWrapper): string {\n let title =\n item.layer instanceof Layer\n ? (getTitle(item.layer) ?? getName(item.layer))\n : item.layer;\n if (!title) {\n title = this.hsLanguageService.getTranslation(\n 'COMMON.unknown',\n undefined,\n );\n }\n return title;\n }\n}\n","<div class=\"modal in\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\">\n <div class=\"modal-dialog\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <h4 class=\"modal-title d-flex\">\n {{data.title | translate }}\n @if (!data.multiple) {\n <span class=\"text-truncate d-inline-block\">:\n {{data.items[0].displayTitle}}</span>\n }\n </h4>\n <button type=\"button\" (click)=\"no()\" class=\"btn-close\" data-dismiss=\"modal\"\n [attr.aria-label]=\"'COMMON.close' | translate \"></button>\n </div>\n <div class=\"modal-body\" style=\"overflow-y:auto\">\n @if(data.items.length > 0){\n <div class=\"d-flex flex-column mb-3\"> <!-- pb-3 border-bottom -->\n <p class=\"fw-bold h6\">{{'LAYERS.removeLayer.deleteFrom' | translate }}: </p>\n <div class=\"d-flex gap-3 justify-content-center px-5\">\n @for (option of data.deleteFromOptions; track option) {\n <button type=\"button\" [attr.data-cy]=\"option\" [hidden]=\"option === 'catalogue' && !this.isAuthenticated\"\n [ngClass]=\"{'active' : deleteFrom === option, 'w-auto' : option === 'catalogue' }\"\n (click)=\"selectDeleteOption(option)\" class=\"btn btn-sm btn-outline-primary w-50\">\n {{'LAYERS.removeLayer.' + option | translate }}\n </button>\n }\n </div>\n </div>\n @if (deleteFrom && deleteFrom !== 'map') {\n <p class=\"h6 small\">{{data.note | translate }}</p>\n }\n @if (deleteFrom && data.multiple) {\n <div>\n <p class=\"fw-bold h6\">{{data.message | translate }}</p>\n @if (data.items?.length > 0) {\n <div style=\"max-height: 65vh;\">\n <div class=\"d-flex w-100 justify-content-center\">\n <button type=\"button\" class=\"mt-1 btn btn-primary\"\n (click)=\"toggleAll()\">{{'SAVECOMPOSITION.form.toggleAll' |\n translate }}</button>\n </div>\n @for (item of data.items; track item) {\n <div class=\"d-flex align-items-center\" style=\"word-break:break-all\">\n <button type=\"button\" class=\"btn btn-sm m-0 p-0\" (click)=\"checkToRemove(item);$event.stopPropagation()\"\n [ngClass]=\"item.toRemove ? 'hs-checkmark' : 'hs-uncheckmark'\"></button>\n <p class=\"m-0 ps-1\">{{item.displayTitle}}</p>\n </div>\n }\n </div>\n }\n </div>\n }\n }\n @else {\n <p class=\"fw-bold h6 text-center\">{{'LAYERS.removeLayer.noLayersToDelete' | translate }} </p>\n }\n\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" [disabled]=\"!deleteAllowed\" class=\"btn\"\n [ngClass]=\"{'btn-primary': deleteFrom === 'map', 'btn-danger': deleteFrom !== 'map'}\" (click)=\"yes()\"\n [title]=\"'COMMON.remove' | translate\" data-dismiss=\"modal\">{{'COMMON.remove' |\n translate}}</button>\n <button type=\"button\" class=\"btn btn-secondary compositions-btn-cancel\" [title]=\"'COMMON.back' | translate\"\n (click)=\"no()\" data-dismiss=\"modal\">{{'COMMON.back' | translate}}</button>\n </div>\n </div>\n </div>\n</div>\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {TranslatePipe} from '@ngx-translate/core';\n\nimport {HsRmLayerDialogComponent} from './remove-layer-dialog.component';\n\n@NgModule({\n declarations: [HsRmLayerDialogComponent],\n imports: [CommonModule, TranslatePipe],\n exports: [HsRmLayerDialogComponent],\n})\nexport class HsRmLayerDialogModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}