{"version":3,"file":"hslayers-ng-common-dialog-csw-layers.mjs","sources":["../../../projects/hslayers/common/dialog-csw-layers/csw-layers-dialog.component.ts","../../../projects/hslayers/common/dialog-csw-layers/csw-layers-dialog.component.html","../../../projects/hslayers/common/dialog-csw-layers/hslayers-ng-common-dialog-csw-layers.ts"],"sourcesContent":["import {Component, Input, OnInit, ViewRef, inject} from '@angular/core';\nimport {NgbAccordionModule} from '@ng-bootstrap/ng-bootstrap';\nimport {TranslatePipe} from '@ngx-translate/core';\n\nimport {\n  HsAddDataOwsService,\n  HsAddDataUrlService,\n} from 'hslayers-ng/services/add-data';\nimport {\n  HsDialogComponent,\n  HsDialogContainerService,\n  HsDialogItem,\n} from 'hslayers-ng/common/dialogs';\nimport {HsLayerTableComponent} from 'hslayers-ng/common/layer-table';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {\n  setFromComposition,\n  setPath,\n  setSubLayers,\n  setTitle,\n} from 'hslayers-ng/common/extensions';\nimport {isLayerWMS} from 'hslayers-ng/services/utils';\n\n@Component({\n  selector: 'hs-csw-layers-dialog',\n  templateUrl: './csw-layers-dialog.component.html',\n  styleUrls: ['./csw-layers-dialog.component.scss'],\n  imports: [TranslatePipe, NgbAccordionModule, HsLayerTableComponent],\n})\nexport class CswLayersDialogComponent implements OnInit, HsDialogComponent {\n  hsDialogContainerService = inject(HsDialogContainerService);\n  hsAddDataUrlService = inject(HsAddDataUrlService);\n  hsAddDataOwsService = inject(HsAddDataOwsService);\n  hsMapService = inject(HsMapService);\n\n  dialogItem: HsDialogItem;\n  viewRef: ViewRef;\n  @Input() data: any;\n  servicesLoaded = false;\n  layersString: string;\n\n  close(): void {\n    this.hsDialogContainerService.destroy(this);\n    this.dialogItem.resolve(false);\n  }\n\n  async ngOnInit(): Promise<void> {\n    if (this.data.layers) {\n      this.layersString = this.data.layers.map((l) => l.title).join(', ');\n    }\n    for (const service of this.data.services) {\n      this.hsAddDataUrlService.typeSelected = service.type;\n      await this.hsAddDataOwsService.setUrlAndConnect({\n        type: service.type,\n        uri: service.url,\n        getOnly: true,\n      });\n      service.typeService = this.hsAddDataOwsService.typeService;\n      const data = service.typeService?.data;\n      if (data?.layers?.length > 0) {\n        //Store data object outside service so it can be reassigned later\n        service.data = Object.assign({}, service.typeService.data);\n        service.loaded = true;\n      } else {\n        //TODO: Toast error?\n        this.removeService(service);\n      }\n    }\n    this.servicesLoaded = this.data.services.every((s) => s.loaded);\n  }\n\n  /**\n   * Determines whether all layers should be added or just the checked ones\n   */\n  lookForChecked(layers): boolean {\n    for (const lyr of layers) {\n      if (lyr.checked) {\n        return true;\n      }\n      if (lyr.Layer) {\n        if (this.lookForChecked(lyr.Layer)) {\n          return true;\n        }\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Sets additional layer params\n   */\n  setLayerParams(layers, service, checkedOnly) {\n    for (const layer of layers) {\n      setFromComposition(layer, true);\n      setPath(layer, service.title);\n      if (isLayerWMS(layer) && !checkedOnly) {\n        setSubLayers(\n          layer,\n          layers.map((l) => l.getSource().getParams().LAYERS).join(','),\n        );\n        setTitle(layer, service.title);\n        layer.set('serviceLayer', true);\n        return [layer];\n      }\n    }\n    return layers;\n  }\n\n  /**\n   * Creates service layers and adds them to the map\n   */\n  addLayers(): void {\n    this.hsMapService.removeCompositionLayers(true);\n    for (const service of this.data.services) {\n      const checkedOnly = this.lookForChecked(service.data.layers);\n      service.typeService.data = service.data;\n      let layers = service.typeService.getLayers(checkedOnly, !checkedOnly);\n      layers = this.setLayerParams(layers, service, checkedOnly);\n      service.typeService.addLayers(layers);\n    }\n    this.hsDialogContainerService.destroy(this);\n    this.dialogItem.resolve(true);\n  }\n\n  /**\n   * Removes service from CSW composition\n   */\n  removeService(service): void {\n    this.data.services = this.data.services.filter((s) => s != service);\n  }\n\n  /**\n   * Assigns per service data to the input addData-urlType service when switching between different services (many times of same type)\n   */\n  beforeChange(e): void {\n    const service = this.data.services.find((s) => s.id == e);\n    //Assign correct service data object to typeService\n    service.typeService.data = service.data;\n    service.selected = true;\n  }\n}\n","<div class=\"modal in hs-composition-overwrite-dialog\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\">\n    <div class=\"modal-dialog\" style=\"max-width: 65em;\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <h4 class=\"modal-title\">{{'COMPOSITIONS.cswDialog.loadComposition' | translate }}\n                </h4>\n                <button type=\"button\" (click)=\"close()\" class=\"btn-close\" data-dismiss=\"modal\"\n                    [attr.aria-label]=\"'COMMON.close' | translate \">\n                </button>\n            </div>\n            <p class=\"py-3 text-danger m-auto w-75 ps-3\">\n                {{'COMPOSITIONS.cswDialog.infoText' | translate }}\n            </p>\n            <div class=\"modal-body w-75 mh-75\" style=\"max-height: 75vh; overflow-y: auto; margin:auto\">\n                <div ngbAccordion [closeOthers]=\"true\" #acc=\"ngbAccordion\" (show)=\"beforeChange($event)\">\n                    @for (service of data.services; track $index) {\n                    <div [ngbAccordionItem]=\"service.id\" [collapsed]=\"true\" [disabled]=\"!servicesLoaded\"\n                        [id]=\"service.id\" (hide)=\"service.selected = false\">\n                        <div ngbAccordionHeader>\n                            @if (service.loaded) {\n                            <button ngbAccordionButton\n                                class=\"accordion-button justify-content-between\">{{service.title}}\n                                <span class=\"ml-auto pe-3\">\n                                    <i class=\"fa-solid fa-trash text-secondary\" role=\"button\"\n                                        (click)=\"$event.stopPropagation();removeService(service)\"\n                                        [title]=\"'COMMON.delete' | translate\"></i>\n                                </span>\n                            </button>\n                            } @else {\n                            <button\n                                class=\"accordion-button justify-content-between\">{{'COMPOSITIONS.cswDialog.servicesLoading'\n                                | translate}}&emsp;<span class=\"hs-loader ml-auto\"></span></button>\n                            }\n                        </div>\n                        <div ngbAccordionCollapse>\n                            <div ngbAccordionBody>\n                                <ng-template>\n                                    @if (service.loaded && service.selected) {\n                                    <hs-layer-table [type]=\"service.type\" [injectedService]=\"service.typeService\">\n                                    </hs-layer-table>\n                                    }\n                                </ng-template>\n                            </div>\n                        </div>\n                    </div>\n                    }\n                </div>\n            </div>\n            <div class=\"w-75 mh-75 m-auto p-3\" [hidden]=\"layersString.length === 0\">\n                {{'COMPOSITIONS.cswDialog.otherLayers' | translate }}: {{layersString}}\n            </div>\n\n            <div class=\"modal-footer\">\n                <button (click)=\"addLayers()\" [disabled]=\"!servicesLoaded\" type=\"button\" class=\"btn btn-primary\"\n                    data-dismiss=\"modal\">{{'COMMON.addLayers' | translate }}</button>\n                <button (click)=\"close()\" type=\"button\" class=\"btn btn-primary\" data-dismiss=\"modal\">{{'COMMON.cancel'\n                    | translate }}</button>\n            </div>\n        </div>\n    </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}