{"version":3,"file":"hslayers-ng-components-compositions.mjs","sources":["../../../projects/hslayers/components/compositions/endpoints/compositions-layman.service.ts","../../../projects/hslayers/components/compositions/compositions-map.service.ts","../../../projects/hslayers/components/compositions/endpoints/compositions-micka.service.ts","../../../projects/hslayers/components/compositions/compositions.service.ts","../../../projects/hslayers/components/compositions/dialogs/delete-dialog.component.ts","../../../projects/hslayers/components/compositions/dialogs/delete-dialog.component.html","../../../projects/hslayers/components/compositions/dialogs/info-dialog.component.ts","../../../projects/hslayers/components/compositions/dialogs/info-dialog.component.html","../../../projects/hslayers/components/compositions/dialogs/overwrite-dialog.component.ts","../../../projects/hslayers/components/compositions/dialogs/overwrite-dialog.component.html","../../../projects/hslayers/components/compositions/dialogs/share-dialog.component.ts","../../../projects/hslayers/components/compositions/dialogs/share-dialog.component.html","../../../projects/hslayers/components/compositions/compositions-option-values.ts","../../../projects/hslayers/components/compositions/compositions-catalogue.service.ts","../../../projects/hslayers/components/compositions/compositions-list-item.component.ts","../../../projects/hslayers/components/compositions/compositions-list-item.component.html","../../../projects/hslayers/components/compositions/compositions.component.ts","../../../projects/hslayers/components/compositions/compositions.component.html","../../../projects/hslayers/components/compositions/compositions.module.ts","../../../projects/hslayers/components/compositions/hslayers-ng-components-compositions.ts"],"sourcesContent":["import {HttpClient} from '@angular/common/http';\nimport {Injectable, inject} from '@angular/core';\n\nimport {Observable, catchError, lastValueFrom, map, of, timeout} from 'rxjs';\nimport {transformExtent} from 'ol/proj';\n\nimport {\n  EndpointErrorHandler,\n  EndpointErrorHandling,\n  HsEndpoint,\n  isErrorHandlerFunction,\n  HsMapCompositionDescriptor,\n} from 'hslayers-ng/types';\nimport {HsCommonLaymanService} from 'hslayers-ng/common/layman';\nimport {HsCompositionsParserService} from 'hslayers-ng/services/compositions';\nimport {HsEventBusService} from 'hslayers-ng/services/event-bus';\nimport {HsLanguageService} from 'hslayers-ng/services/language';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {HsToastService} from 'hslayers-ng/common/toast';\nimport {addExtentFeature} from 'hslayers-ng/services/utils';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsCompositionsLaymanService {\n  private $http = inject(HttpClient);\n  private hsCommonLaymanService = inject(HsCommonLaymanService);\n  private hsCompositionsParserService = inject(HsCompositionsParserService);\n  private hsEventBusService = inject(HsEventBusService);\n  private hsToastService = inject(HsToastService);\n  private hsLanguageService = inject(HsLanguageService);\n  private hsMapService = inject(HsMapService);\n\n  /**\n   * Load composition list from the external Layman server\n   * @param endpoint - Layman endpoint selected\n   * @param params - HTTP request query params\n   * @param extentFeatureCreated - Function for creating extent vector feature that will reference all listed composition from the response\n   * @param _bbox - Bounding box\n   */\n  loadList(\n    endpoint: HsEndpoint,\n    params,\n    extentFeatureCreated,\n    _bbox,\n  ): Observable<any> {\n    endpoint.compositionsPaging.loaded = false;\n    const loggedIn = this.hsCommonLaymanService.isAuthenticated();\n    const query = params.query.title ? params.query.title : '';\n    const sortBy =\n      params.sortBy == 'date:D'\n        ? 'last_change'\n        : params.sortBy !== undefined && params.sortBy != 'None' //Set by date by default, was requested long time ago\n          ? params.sortBy\n          : 'last_change';\n\n    const b = transformExtent(\n      this.hsMapService\n        .getMap()\n        .getView()\n        .calculateExtent(this.hsMapService.getMap().getSize()),\n      this.hsMapService.getCurrentProj(),\n      'EPSG:3857',\n    );\n\n    const bbox = params.filterByExtent ? b.join(',') : '';\n    const workspace = this.hsCommonLaymanService.user();\n    const withPermissionOrMine = params.filterByOnlyMine\n      ? loggedIn\n        ? `workspaces/${workspace}/`\n        : ''\n      : '';\n    const url = `${endpoint.url}/rest/${withPermissionOrMine}maps`;\n\n    endpoint.listLoading = this.$http\n      .get(url, {\n        observe: 'response',\n        withCredentials: true,\n        params: {\n          'limit': `${endpoint.compositionsPaging.limit}`,\n          'offset': `${endpoint.compositionsPaging.start}`,\n          'full_text_filter': `${query}`,\n          'order_by': `${sortBy}`,\n          'bbox_filter': `${bbox}`,\n        },\n      })\n      .pipe(\n        timeout(5000),\n        map((response: any) => {\n          if (Array.isArray(response.body)) {\n            response.body.extentFeatureCreated = extentFeatureCreated;\n            this.compositionsReceived(endpoint, response);\n          } else {\n            this.hsCommonLaymanService.displayLaymanError(\n              endpoint,\n              'COMPOSITIONS.errorWhileRequestingCompositions',\n              response.body,\n            );\n          }\n        }),\n        catchError((e) => {\n          if (isErrorHandlerFunction(endpoint.onError?.compositionLoad)) {\n            (<EndpointErrorHandler>endpoint.onError?.compositionLoad).handle(\n              endpoint,\n              e,\n            );\n            return of(e);\n          }\n          switch (endpoint.onError?.compositionLoad) {\n            case EndpointErrorHandling.ignore:\n              break;\n            case EndpointErrorHandling.toast:\n            default:\n              this.hsToastService.createToastPopupMessage(\n                this.hsLanguageService.getTranslation(\n                  'COMPOSITIONS.errorWhileRequestingCompositions',\n                  undefined,\n                ),\n                endpoint.title +\n                  ': ' +\n                  this.hsLanguageService.getTranslationIgnoreNonExisting(\n                    'ERRORMESSAGES',\n                    e.status ? e.status.toString() : e.message,\n                    {url: endpoint.url},\n                  ),\n                {\n                  disableLocalization: true,\n                  serviceCalledFrom: 'HsCompositionsLaymanService',\n                },\n              );\n              break;\n          }\n          return of(e);\n        }),\n      );\n    return endpoint.listLoading;\n  }\n\n  /**\n   * Middleware function before returning compositions list to the rest of the app\n   * @param endpoint - Layman endpoint selected\n   * @param response - HTTP request response\n   */\n  compositionsReceived(endpoint: HsEndpoint, response): void {\n    if (response.body.length == 0) {\n      endpoint.compositionsPaging.matched = 0;\n      this.displayWarningToast(endpoint, 'COMMON.noDataReceived');\n      return;\n    }\n    endpoint.compositionsPaging.loaded = true;\n    endpoint.compositionsPaging.matched = response.headers.get('x-total-count') // in case response is an error, x-total-count will return null, it must be checked\n      ? parseInt(response.headers.get('x-total-count'))\n      : response.body.length;\n\n    const currentUser = this.hsCommonLaymanService.user();\n    endpoint.compositions = response.body.map((record) => {\n      const tmp: HsMapCompositionDescriptor = {\n        name: record.name,\n        title: record.title,\n        access_rights: record.access_rights,\n        featureId: undefined,\n        highlighted: false,\n        editable: record.access_rights.write.some((user) => {\n          return [currentUser, 'EVERYONE'].includes(user);\n        }),\n        url: `${endpoint.url}/rest/workspaces/${record.workspace}/maps/${record.name}`,\n        endpoint,\n        workspace: record.workspace,\n        date: record.updated_at.split('.')[0],\n        id: `m-${record.uuid}`, //m-* to match micka's id structure.\n      };\n      if (response.body.extentFeatureCreated) {\n        const extentFeature = addExtentFeature(\n          record,\n          this.hsMapService.getCurrentProj(),\n        );\n        if (extentFeature) {\n          tmp.featureId = extentFeature.getId().toString();\n          response.body.extentFeatureCreated(extentFeature);\n        }\n      }\n      return tmp;\n    });\n  }\n\n  /**\n   * Delete selected composition from Layman database\n   * @param endpoint - Layman endpoint selected\n   * @param composition - Composition to be deleted\n   */\n  async delete(\n    endpoint: HsEndpoint,\n    composition: HsMapCompositionDescriptor,\n  ): Promise<void> {\n    const url = `${endpoint.url}/rest/workspaces/${composition.workspace}/maps/${composition.name}`;\n    await lastValueFrom(this.$http.delete(url, {withCredentials: true}));\n    this.hsEventBusService.compositionDeletes.next(composition);\n  }\n\n  /**\n   * Get information about the selected composition\n   * @param composition - Composition selected\n   */\n  async getInfo(composition: HsMapCompositionDescriptor): Promise<any> {\n    const endpoint = composition.endpoint;\n    if (composition.name == undefined) {\n      this.displayWarningToast(\n        endpoint,\n        'COMPOSITIONS.compositionsNameAttributeIsNotDefined',\n      );\n      return;\n    }\n    if (endpoint.url == undefined) {\n      this.displayWarningToast(\n        endpoint,\n        'COMPOSITIONS.endpointUrlIsNotDefined',\n      );\n      return;\n    }\n    const url = `${endpoint.url}/rest/workspaces/${composition.workspace}/maps/${composition.name}`;\n    const info = await this.hsCompositionsParserService.loadInfo(url);\n    if (\n      info.thumbnail?.status !== undefined &&\n      info.thumbnail?.status == 'NOT_AVAILABLE'\n    ) {\n      delete info.thumbnail;\n    }\n    info.abstract = info.description;\n    return info;\n  }\n\n  /**\n   * Reset Layman composition paging values\n   * @param endpoint - Layman endpoint selected\n   */\n  resetCompositionCounter(endpoint: HsEndpoint): void {\n    endpoint.compositionsPaging.start = 0;\n    endpoint.compositionsPaging.next = endpoint.compositionsPaging.limit;\n    endpoint.compositionsPaging.matched = 0;\n  }\n\n  /**\n   * Display warning toast about some error while requesting compositions\n   * @param endpoint - Layman endpoint selected\n   * @param message - Message to be displayed when warning is issued\n   */\n  displayWarningToast(endpoint: HsEndpoint, message: string): void {\n    this.hsToastService.createToastPopupMessage(\n      this.hsLanguageService.getTranslation('COMMON.warning', undefined),\n      endpoint.title + ': ' + this.hsLanguageService.getTranslation(message),\n      {\n        disableLocalization: true,\n        type: 'warning',\n        serviceCalledFrom: 'HsCompositionsLaymanService',\n      },\n    );\n  }\n}\n","import {Injectable, inject} from '@angular/core';\n\nimport {EventsKey} from 'ol/events';\nimport {Feature} from 'ol';\nimport {Geometry} from 'ol/geom';\nimport {Vector as VectorLayer} from 'ol/layer';\nimport {Vector as VectorSource} from 'ol/source';\nimport {unByKey} from 'ol/Observable';\n\nimport {HsCommonEndpointsService} from 'hslayers-ng/services/endpoints';\nimport {\n  debounce,\n  highlightFeatures,\n  createNewExtentLayer,\n} from 'hslayers-ng/services/utils';\nimport {HsLayoutService} from 'hslayers-ng/services/layout';\nimport {HsMapCompositionDescriptor} from 'hslayers-ng/types';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {HsSaveMapService} from 'hslayers-ng/services/save-map';\nimport {setHighlighted} from 'hslayers-ng/common/extensions';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsCompositionsMapService {\n  private hsMapService = inject(HsMapService);\n  private hsLayoutService = inject(HsLayoutService);\n  private hsSaveMapService = inject(HsSaveMapService);\n  private hsCommonEndpointsService = inject(HsCommonEndpointsService);\n\n  extentLayer: VectorLayer<VectorSource<Feature>>;\n  pointerMoveListener: EventsKey;\n\n  constructor() {\n    this.hsLayoutService.mainpanel$.subscribe((which) => {\n      if (this.extentLayer) {\n        if (\n          this.hsLayoutService.mainpanel === 'compositions' ||\n          this.hsLayoutService.mainpanel === 'composition'\n        ) {\n          this.extentLayer.setVisible(true);\n        } else {\n          this.extentLayer.setVisible(false);\n        }\n      }\n      if (which === 'composition' || which === 'compositions') {\n        this.addPointerMoveListener();\n      } else if (this.pointerMoveListener) {\n        unByKey(this.pointerMoveListener);\n      }\n    });\n\n    this.extentLayer = createNewExtentLayer('Composition extents');\n    this.hsMapService.loaded().then((map) => {\n      if (\n        this.hsLayoutService.mainpanel === 'compositions' ||\n        this.hsLayoutService.mainpanel === 'composition'\n      ) {\n        this.addPointerMoveListener();\n      }\n      map.addLayer(this.extentLayer);\n      this.hsSaveMapService.internalLayers.push(this.extentLayer);\n    });\n  }\n\n  /**\n   * Add debounced pointer move listener\n   */\n  private addPointerMoveListener() {\n    this.pointerMoveListener = this.hsMapService.getMap().on(\n      'pointermove',\n      debounce((e) => this.mapPointerMoved(e), 50, false, this),\n    );\n  }\n\n  /**\n   * Act on map pointer movement and highlight features under it\n   */\n  mapPointerMoved(evt) {\n    const featuresUnderMouse = this.extentLayer\n      .getSource()\n      .getFeaturesAtCoordinate(evt.coordinate);\n    for (const endpoint of this.hsCommonEndpointsService\n      .endpoints()\n      .filter((ep) => ep.compositions)) {\n      highlightFeatures(featuresUnderMouse, endpoint.compositions);\n    }\n  }\n\n  /**\n   * Highlight composition from map feature referencing it\n   * @param composition - Composition highlighted from map feature reference\n   * @param state - Highlight state\n   */\n  highlightComposition(\n    composition: HsMapCompositionDescriptor,\n    state: boolean,\n  ) {\n    if (composition.featureId !== undefined) {\n      const found = this.extentLayer\n        .getSource()\n        .getFeatureById(composition.featureId);\n      if (found) {\n        setHighlighted(found, state);\n      }\n    }\n  }\n\n  /**\n   * Clear extent layer from all of the features\n   */\n  clearExtentLayer() {\n    this.extentLayer.getSource().clear();\n  }\n\n  /**\n   * Callback function which gets executed when extent feature\n   * is created. It should add the feature to vector layer source\n   * @param extentFeature - OpenLayers Feature\n   */\n  addExtentFeature(extentFeature: Feature<Geometry>): void {\n    this.extentLayer.getSource().addFeatures([extentFeature]);\n  }\n\n  /**\n   * Get feature record and un-highlight the same feature and composition\n   * @param feature - Feature under the pointer\n   * @param selector - Feature selector\n   * @param list - Record list referenced from the feature\n   */\n  getFeatureRecordAndUnhighlight(feature, selector, list: any[]) {\n    const record = list?.find((record) => record.featureId == feature.getId());\n    if (\n      this.hsMapService.getLayerForFeature(feature) == this.extentLayer &&\n      record\n    ) {\n      setHighlighted(feature, false);\n      selector.getFeatures().clear();\n      return record;\n    }\n  }\n}\n","import {HttpClient} from '@angular/common/http';\nimport {Injectable, inject} from '@angular/core';\n\nimport {Observable, catchError, map, of, timeout} from 'rxjs';\n\nimport {HsCompositionsParserService} from 'hslayers-ng/services/compositions';\nimport {HsEndpoint, HsMapCompositionDescriptor} from 'hslayers-ng/types';\nimport {HsLanguageService} from 'hslayers-ng/services/language';\nimport {HsLogService} from 'hslayers-ng/services/log';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {HsToastService} from 'hslayers-ng/common/toast';\nimport {addExtentFeature, HsProxyService} from 'hslayers-ng/services/utils';\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsCompositionsMickaService {\n  private $http = inject(HttpClient);\n  private hsMapService = inject(HsMapService);\n  private hsToastService = inject(HsToastService);\n  private hsLanguageService = inject(HsLanguageService);\n  private hsLog = inject(HsLogService);\n  private hsCompositionsParserService = inject(HsCompositionsParserService);\n  private hsProxyService = inject(HsProxyService);\n\n  /**\n   * Get Micka compositions query URL\n   * @param endpoint - Micka endpoint selected\n   * @param params - HTTP request query params\n   * @param bbox - Bounding box\n   */\n  getCompositionsQueryUrl(endpoint, params, bbox): string {\n    const query = params.query;\n    const bboxDelimiter =\n      endpoint.url.indexOf('cswClientRun.php') > 0 ? ',' : ' ';\n    const serviceName =\n      endpoint.serviceName !== undefined\n        ? 'serviceName=&' + endpoint.serviceName\n        : '';\n    bbox = params.filterByExtent\n      ? encodeURIComponent(\" and BBOX='\" + bbox.join(bboxDelimiter) + \"'\")\n      : '';\n    const serviceTypeFilter =\n      ' AND (serviceType like \"Map\" OR serviceType like \"CSW\" OR serviceType like \"WMC\")';\n    const textFilter =\n      query && query.title !== undefined && query.title != ''\n        ? encodeURIComponent(\n            \" AND (title like '*\" +\n              query.title +\n              \"*' OR abstract like '*\" +\n              query.title +\n              \"*')\",\n          )\n        : '';\n    const selected = [];\n    let keywordFilter = '';\n    let tmp = endpoint.url;\n    for (const key of params.keywords) {\n      if (key.selected) {\n        selected.push(\"Subject='\" + key.value + \"'\");\n      }\n    }\n    for (const theme of params.themes) {\n      if (theme.selected) {\n        selected.push(\"Subject='\" + theme.value + \"'\");\n      }\n    }\n    if (selected.length > 0) {\n      keywordFilter = encodeURIComponent(' AND ' + selected.join(' OR '));\n    }\n\n    tmp +=\n      '?format=json&' +\n      serviceName +\n      'query=type%3D' +\n      params.type +\n      bbox +\n      serviceTypeFilter +\n      textFilter +\n      keywordFilter +\n      '&lang=eng&sortBy=' +\n      params.sortBy +\n      '&detail=summary&start=' +\n      params.start +\n      '&limit=' +\n      params.limit;\n    tmp = this.hsProxyService.proxify(tmp);\n    return tmp;\n  }\n\n  /**\n   * Middleware function before returning compositions list to the rest of the app\n   * @param endpoint - Micka endpoint selected\n   * @param response - HTTP request response\n   */\n  compositionsReceived(endpoint: HsEndpoint, response: any): void {\n    if (!response.records) {\n      this.hsToastService.createToastPopupMessage(\n        this.hsLanguageService.getTranslation('COMMON.warning', undefined),\n        endpoint.title +\n          ': ' +\n          this.hsLanguageService.getTranslation(\n            'COMMON.noDataReceived',\n            undefined,\n          ),\n        {\n          disableLocalization: true,\n          type: 'warning',\n          serviceCalledFrom: 'HsCompositionsMickaService',\n        },\n      );\n      return;\n    }\n    endpoint.compositionsPaging.loaded = true;\n    endpoint.compositions = response.records;\n    if (response.records && response.records.length > 0) {\n      endpoint.compositionsPaging.matched = response.matched;\n    } else {\n      endpoint.compositionsPaging.matched = 0;\n    }\n    endpoint.compositionsPaging.next = response.next;\n    for (const record of endpoint.compositions) {\n      record.editable = false;\n      record.endpoint = endpoint;\n      record.date = record.dateStamp;\n      delete record.dateStamp;\n      if (record.thumbnail == undefined) {\n        record.thumbnail = endpoint.url + '?request=loadthumb&id=' + record.id;\n      }\n      if (response.extentFeatureCreated) {\n        const extentFeature = addExtentFeature(\n          record,\n          this.hsMapService.getCurrentProj(),\n        );\n        if (extentFeature) {\n          record.featureId = extentFeature.getId().toString();\n          response.extentFeatureCreated(extentFeature);\n        }\n      }\n    }\n  }\n\n  /**\n   * Load composition list from the external Micka server\n   * @param endpoint - Micka endpoint selected\n   * @param params - HTTP request query params\n   * @param extentFeatureCreated - Function for creating extent vector feature that will reference all listed composition from the response\n   * @param bbox - Bounding box\n   */\n  loadList(\n    endpoint: HsEndpoint,\n    params: any,\n    extentFeatureCreated,\n    bbox: any,\n  ): Observable<any> {\n    params = this.checkForParams(endpoint, params);\n    const url = this.getCompositionsQueryUrl(endpoint, params, bbox);\n    endpoint.compositionsPaging.loaded = false;\n\n    endpoint.httpCall = this.$http\n      .get(url, {\n        responseType: 'json',\n      })\n      .pipe(\n        timeout(5000),\n        map((response: any) => {\n          response.extentFeatureCreated = extentFeatureCreated;\n          this.compositionsReceived(endpoint, response);\n        }),\n        catchError((e) => {\n          this.hsToastService.createToastPopupMessage(\n            this.hsLanguageService.getTranslation(\n              'COMPOSITIONS.errorWhileRequestingCompositions',\n              undefined,\n            ),\n            endpoint.title +\n              ': ' +\n              this.hsLanguageService.getTranslationIgnoreNonExisting(\n                'ERRORMESSAGES',\n                e.status ? e.status.toString() : e.message,\n                {url: url},\n              ),\n            {\n              disableLocalization: true,\n              serviceCalledFrom: 'HsCompositionsMickaService',\n            },\n          );\n          return of(e);\n        }),\n      );\n\n    return endpoint.httpCall;\n  }\n\n  /**\n   * Reset Micka composition paging values\n   * @param endpoint - Micka endpoint selected\n   */\n  resetCompositionCounter(endpoint) {\n    endpoint.compositionsPaging.start = 0;\n    endpoint.compositionsPaging.next = endpoint.compositionsPaging.limit;\n    endpoint.compositionsPaging.matched = 0;\n  }\n\n  /**\n   * Check if query params are correct and defined\n   * @param endpoint - Micka endpoint selected\n   * @param params - HTTP request query params\n   */\n  checkForParams(endpoint: HsEndpoint, params: any): any {\n    if (params.sortBy == undefined || params.sortBy === 'None') {\n      params.sortBy = 'date:D';\n    }\n    if (params.type == undefined || params.type === 'None') {\n      params.type = 'application';\n    }\n    if (params.start == undefined) {\n      params.start = endpoint.compositionsPaging.start;\n    }\n    if (params.limit == undefined || isNaN(params.limit)) {\n      params.limit = endpoint.compositionsPaging.limit;\n    }\n    return params;\n  }\n\n  /**\n   * Get information about the selected composition\n   * @param composition - Composition selected\n   */\n  async getInfo(composition: HsMapCompositionDescriptor): Promise<any> {\n    const compLinks = composition.link || composition.links;\n    if (compLinks === undefined) {\n      return;\n    }\n    const compUrls = this.getCompositionUrls(compLinks);\n    let info: any = {};\n    const url = Array.isArray(compUrls) ? compUrls[0] : compUrls;\n    try {\n      info = await this.hsCompositionsParserService.loadInfo(url);\n      //TODO: find out if this is even available\n      // info.thumbnail = this.HsUtilsService.proxify(composition.thumbnail);\n      info.metadata = {\n        record_url:\n          composition.endpoint.url.replace('csw', 'record/basic/') +\n          composition.id,\n      };\n      return info;\n    } catch (e) {\n      this.hsToastService.createToastPopupMessage(\n        this.hsLanguageService.getTranslation(\n          'COMPOSITIONS.errorWhileLoadingCompositionMetadata',\n          undefined,\n        ),\n        this.hsLanguageService.getTranslationIgnoreNonExisting(\n          'ERRORMESSAGES',\n          e.status ? e.status.toString() : e.message,\n          {url: url},\n        ),\n        {\n          disableLocalization: true,\n          serviceCalledFrom: 'HsCompositionsMickaService',\n        },\n      );\n    }\n  }\n\n  /**\n   * Get composition URLs\n   * @param compData - Composition data\n   */\n  getCompositionUrls(compData: any): string | Array<string> {\n    if (typeof compData == 'string') {\n      return compData;\n    }\n    if (typeof compData == 'object' && compData.url !== undefined) {\n      return compData.url;\n    }\n    return compData.map((link) =>\n      typeof link == 'object' && link.url !== undefined ? link.url : link,\n    );\n  }\n\n  /**\n   * Method is not implemented as it is not desired to delete Micka records from HSLayers application.\n   * The deletion shall be done automatically by Layman or, in rare scenarios, manually via Micka UI.\n   * See https://github.com/hslayers/hslayers-ng/pull/4014\n   */\n  delete(e: HsEndpoint, c: HsMapCompositionDescriptor) {\n    this.hsLog.warn(\n      'Delete method for Micka compositions not implemented',\n      e,\n      c,\n    );\n  }\n}\n","import {HttpClient, HttpHeaders} from '@angular/common/http';\nimport {Injectable, inject} from '@angular/core';\n\nimport {Feature} from 'ol';\nimport {Geometry} from 'ol/geom';\nimport {Observable, Subject, lastValueFrom} from 'rxjs';\n\nimport {DuplicateHandling, HsMapService} from 'hslayers-ng/services/map';\nimport {HS_PRMS, HsShareUrlService} from 'hslayers-ng/services/share';\nimport {HsCommonEndpointsService} from 'hslayers-ng/services/endpoints';\nimport {HsCompositionsLaymanService} from './endpoints/compositions-layman.service';\nimport {HsCompositionsMapService} from './compositions-map.service';\nimport {HsCompositionsMickaService} from './endpoints/compositions-micka.service';\nimport {HsCompositionsParserService} from 'hslayers-ng/services/compositions';\nimport {HsConfig} from 'hslayers-ng/config';\nimport {HsEndpoint, HsMapCompositionDescriptor} from 'hslayers-ng/types';\nimport {HsEventBusService} from 'hslayers-ng/services/event-bus';\nimport {HsLanguageService} from 'hslayers-ng/services/language';\nimport {HsLayerManagerService} from 'hslayers-ng/services/layer-manager';\nimport {HsLogService} from 'hslayers-ng/services/log';\nimport {HsToastService} from 'hslayers-ng/common/toast';\nimport {HsProxyService} from 'hslayers-ng/services/utils';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsCompositionsService {\n  private http = inject(HttpClient);\n  private hsMapService = inject(HsMapService);\n  private hsCompositionsParserService = inject(HsCompositionsParserService);\n  private hsConfig = inject(HsConfig);\n  private HsShareUrlService = inject(HsShareUrlService);\n  private hsCompositionsMickaService = inject(HsCompositionsMickaService);\n  private hsCompositionsLaymanService = inject(HsCompositionsLaymanService);\n  private hsLanguageService = inject(HsLanguageService);\n  private $log = inject(HsLogService);\n  private hsCommonEndpointsService = inject(HsCommonEndpointsService);\n  private hsCompositionsMapService = inject(HsCompositionsMapService);\n  private hsEventBusService = inject(HsEventBusService);\n  private hsToastService = inject(HsToastService);\n  private hsLayerManagerService = inject(HsLayerManagerService);\n  private hsProxyService = inject(HsProxyService);\n\n  data: any = {};\n  compositionToLoad: {url: string; title: string};\n  notSavedOrEditedCompositionLoading: Subject<{url: string; record?: any}> =\n    new Subject();\n  compositionNotFoundAtUrl: Subject<any> = new Subject();\n  shareId: string;\n  constructor() {\n    this.hsEventBusService.compositionEdits.subscribe(() => {\n      this.hsCompositionsParserService.composition_edited = true;\n    });\n\n    this.hsEventBusService.compositionLoadStarts.subscribe((id) => {\n      id = `${this.HsShareUrlService.endpointUrl()}?request=load&id=${id}`;\n      this.hsCompositionsParserService.loadUrl(id);\n    });\n\n    const permalink = this.HsShareUrlService.getParamValue(HS_PRMS.permalink);\n    if (permalink) {\n      this.parsePermalinkLayers(permalink);\n    } else {\n      this.tryParseCompositionFromUrlParam();\n    }\n\n    if (this.hsConfig.base_layers && !permalink) {\n      this.loadBaseLayersComposition();\n    }\n\n    if (this.hsConfig.saveMapStateOnReload && !permalink) {\n      //Load composition data from cookies only if it is anticipated\n      setTimeout(() => {\n        this.tryParseCompositionFromCookie();\n      }, 500);\n    }\n    this.hsEventBusService.mapResets.subscribe(() => {\n      this.hsCompositionsParserService.composition_loaded = null;\n      this.hsCompositionsParserService.composition_edited = false;\n\n      if (this.hsConfig.base_layers && !permalink) {\n        this.loadBaseLayersComposition();\n      }\n      this.tryParseCompositionFromUrlParam();\n    });\n  }\n\n  /**\n   * Load composition list\n   * @param ds - Datasource endpoint\n   * @param params - Provided params for querying list items\n   */\n  loadCompositions(ds: HsEndpoint, params): Observable<any> {\n    this.hsCompositionsMapService.clearExtentLayer();\n    const bbox = this.hsMapService.getMapExtentInEpsg4326();\n    const Observable = this.managerByType(ds).loadList(\n      ds,\n      params,\n      (feature: Feature<Geometry>) =>\n        this.hsCompositionsMapService.addExtentFeature(feature),\n      bbox,\n    );\n    return Observable;\n  }\n\n  /**\n   * Reset composition counters for datasource endpoints\n   */\n  resetCompositionCounter(): void {\n    this.hsCommonEndpointsService.endpoints().forEach((ep) => {\n      switch (ep.type) {\n        case 'micka':\n          return this.hsCompositionsMickaService.resetCompositionCounter(ep);\n        case 'layman':\n        case 'layman-wagtail':\n          return this.hsCompositionsLaymanService.resetCompositionCounter(ep);\n        default:\n          this.$log.warn(`Endpoint type '${ep.type} not supported`);\n      }\n    });\n  }\n\n  /**\n   * Find and return required service reference for each endpoint type\n   * @param endpoint - Datasource endpoint\n   */\n  managerByType(endpoint: HsEndpoint): any {\n    switch (endpoint.type) {\n      case 'micka':\n        return this.hsCompositionsMickaService;\n      case 'layman':\n      case 'layman-wagtail':\n        return this.hsCompositionsLaymanService;\n      default:\n        this.$log.warn(`Endpoint type '${endpoint.type} not supported`);\n    }\n  }\n\n  /**\n   * Delete composition from datasource database\n   * @param composition - Composition selected\n   */\n  async deleteComposition(composition): Promise<void> {\n    await this.managerByType(composition.endpoint)?.delete(\n      composition.endpoint,\n      composition,\n    );\n  }\n\n  /**\n   * Share composition to other platforms\n   * @param record - Datasource record selected\n   */\n  async shareComposition(record: HsMapCompositionDescriptor): Promise<any> {\n    const recordLink = encodeURIComponent(this.getRecordLink(record));\n    const permalinkOverride = this.hsConfig.permalinkLocation;\n    const compositionUrl = permalinkOverride\n      ? permalinkOverride.origin + permalinkOverride.pathname\n      : `${location.origin}${location.pathname}?composition=${recordLink}`;\n    this.shareId = crypto.randomUUID();\n    const headers = new HttpHeaders().set(\n      'Content-Type',\n      'text/plain; charset=utf-8',\n    );\n    return await lastValueFrom(\n      this.http.post(\n        this.HsShareUrlService.endpointUrl(),\n        JSON.stringify({\n          request: 'socialShare',\n          id: this.shareId,\n          url: encodeURIComponent(compositionUrl),\n          title: record.title,\n          description: record.abstract,\n          image: record.thumbnail || 'https://ng.hslayers.org/img/logo.png',\n        }),\n        {headers, responseType: 'text'},\n      ),\n    );\n  }\n\n  /**\n   * Get composition share url\n   */\n  async getShareUrl(): Promise<string> {\n    try {\n      return await this.HsShareUrlService.shortUrl(\n        this.HsShareUrlService.endpointUrl() +\n          '?request=socialshare&id=' +\n          this.shareId,\n      );\n    } catch (ex) {\n      this.$log.log('Error creating short URL');\n    }\n  }\n\n  /**\n   * Get composition information\n   * @param composition - Composition selected\n   */\n  async getCompositionInfo(\n    composition: HsMapCompositionDescriptor,\n  ): Promise<any> {\n    const info = await this.managerByType(composition.endpoint).getInfo(\n      composition,\n    );\n    this.data.info = info;\n    return info;\n  }\n\n  /**\n   * Get record external link\n   * @param record - Datasource record selected\n   */\n  getRecordLink(record: HsMapCompositionDescriptor): string {\n    try {\n      let url;\n      if (record.link !== undefined) {\n        url = record.link;\n      } else if (record.links !== undefined) {\n        url = record.links.filter(\n          (l) => l.url.includes('/file') || l.url.endsWith('.wmc'),\n        )[0].url;\n      }\n      if (record.endpoint?.type.includes('layman')) {\n        url = record.url + '/file' + '?timestamp=' + Date.now();\n      }\n      return url;\n    } catch (e) {\n      this.$log.warn(e);\n    }\n  }\n\n  /**\n   * Get 'report-layman' template of composition object (operatesOn property included).\n   * Necessary for CSW serviceType compositions to be parsed\n   */\n  async getLaymanTemplateRecordObject(record) {\n    const params = `?request=GetRecords&format=text/json&template=report-layman&query=ServiceType like 'CSW' and title like '${\n      record.title\n    }' and BoundingBox like '${record.bbox.join(' ')}'`;\n    const url = this.hsProxyService.proxify(record.endpoint.url + params);\n\n    try {\n      const compositions = await lastValueFrom(\n        this.http.get(url, {\n          responseType: 'json',\n        }),\n      );\n      return compositions['records'].length > 1\n        ? compositions['records'].find((r) => r.id == record.id)\n        : compositions['records'][0];\n    } catch (e) {\n      this.hsToastService.createToastPopupMessage(\n        this.hsLanguageService.getTranslation(\n          'COMPOSITIONS.errorWhileRequestingCompositions',\n          undefined,\n        ),\n        record.endpoint.title +\n          ': ' +\n          this.hsLanguageService.getTranslationIgnoreNonExisting(\n            'ERRORMESSAGES',\n            e.status ? e.status.toString() : e.message,\n            {url: url},\n          ),\n        {\n          disableLocalization: true,\n          serviceCalledFrom: 'HsCompositionsMickaService',\n        },\n      );\n    }\n  }\n\n  async getRecordUrl(\n    record: HsMapCompositionDescriptor,\n  ): Promise<string | any> {\n    const recordEndpoint = record.endpoint;\n    if (recordEndpoint.type == 'micka') {\n      return record.serviceType == 'CSW'\n        ? await this.getLaymanTemplateRecordObject(record)\n        : this.getRecordLink(record);\n    }\n    if (recordEndpoint.type.includes('layman')) {\n      return record.url + '/file';\n    }\n    this.$log.warn(`Endpoint type '${recordEndpoint.type} not supported`);\n    return;\n  }\n\n  /**\n   * Load composition from datasource record url\n   * @param record - Datasource record selected\n   */\n  async loadCompositionParser(\n    record: HsMapCompositionDescriptor,\n  ): Promise<void> {\n    const url = await this.getRecordUrl(record);\n    if (url) {\n      if (\n        this.hsCompositionsParserService.composition_edited ||\n        this.hsCompositionsParserService.composition_loaded\n      ) {\n        this.notSavedOrEditedCompositionLoading.next({\n          url: url as string,\n          record,\n        });\n      } else {\n        this.loadComposition(url, true);\n      }\n    }\n  }\n\n  /**\n   * Parse composition by setting all  response object layers to base\n   * @param response - Composition data\n   */\n  parseBaseLayersComposition(response) {\n    return {\n      ...response,\n      layers: response.layers.map((l) => {\n        return {\n          ...l,\n          base: true,\n          fromComposition: false,\n          visibility: false,\n        };\n      }),\n      basemapComposition: true,\n      current_base_layer: {title: this.hsConfig.base_layers.default},\n    };\n  }\n\n  /**\n   * Load base layers received as composition\n   */\n  loadBaseLayersComposition(): void {\n    this.hsCompositionsParserService.loadUrl(\n      this.hsConfig.base_layers.url,\n      false,\n      undefined,\n      this.parseBaseLayersComposition.bind(this),\n    );\n  }\n\n  /**\n   * Load layers received through permalink to map\n   */\n  async parsePermalinkLayers(permalink: string): Promise<void> {\n    await this.hsMapService.loaded();\n    const layersUrl = this.hsProxyService.proxify(permalink);\n    const response: any = await lastValueFrom(this.http.get(layersUrl));\n    if (response.success == true) {\n      const data: any = {};\n      data.data = {};\n      if (response.data.layers) {\n        data.data.layers = response.data.layers;\n      } else {\n        //Some old structure, where layers are stored in data\n        data.data.layers = response.data;\n      }\n      this.hsMapService.removeCompositionLayers(true);\n      const layers = await this.hsCompositionsParserService.jsonToLayers(data);\n      for (let i = 0; i < layers.length; i++) {\n        this.hsMapService.addLayer(layers[i], DuplicateHandling.RemoveOriginal);\n      }\n      this.hsMapService.fitExtent(response.data.nativeExtent);\n      this.hsLayerManagerService.updateLayerListPositions();\n    } else {\n      this.$log.log('Error loading permalink layers');\n    }\n  }\n\n  /**\n   * Load composition from composition list\n   * @param url - URL\n   * @param overwrite - Overwrite existing map composition with the new one\n   */\n  loadComposition(url: string, overwrite?: boolean): Promise<void> {\n    return this.hsCompositionsParserService.loadUrl(url, overwrite);\n  }\n\n  /**\n   * Parse and load composition from cookies\n   */\n  async tryParseCompositionFromCookie(): Promise<void> {\n    if (\n      localStorage.getItem('hs_layers') &&\n      (<any>window).permalinkApp != true\n    ) {\n      await this.hsMapService.loaded();\n      const data = localStorage.getItem('hs_layers');\n      if (!data) {\n        return;\n      }\n      const parsed = JSON.parse(data);\n      if (parsed.expires && parsed.expires < new Date().getTime()) {\n        return;\n      }\n      const layers =\n        await this.hsCompositionsParserService.jsonToLayers(parsed);\n      for (let i = 0; i < layers.length; i++) {\n        this.hsMapService.addLayer(layers[i], DuplicateHandling.IgnoreNew);\n      }\n      localStorage.removeItem('hs_layers');\n      this.hsLayerManagerService.updateLayerListPositions();\n    }\n  }\n\n  /**\n   * Parse and load composition from browser URL\n   */\n  async tryParseCompositionFromUrlParam(): Promise<void> {\n    let id =\n      this.HsShareUrlService.getParamValue(HS_PRMS.composition) ||\n      this.hsConfig.defaultComposition;\n    if (id) {\n      if (!id.includes('http')) {\n        id = this.HsShareUrlService.endpointUrl() + '?request=load&id=' + id;\n      }\n      try {\n        const defaultViewProperties =\n          this.hsConfig.default_view?.getProperties();\n        const compoParserServiceRef = this.hsCompositionsParserService;\n\n        /**\n         * Little bit tricky but solution to force affect default composition loading behavior. Used to prevent\n         * passing params all the way down the loading pipeline\n         */\n        compoParserServiceRef.loadingOptions.suspendZoomingToExtent =\n          defaultViewProperties?.hasOwnProperty('center') &&\n          defaultViewProperties?.hasOwnProperty('zoom');\n        compoParserServiceRef.loadingOptions.suspendPanelChange =\n          this.hsConfig.sidebarClosed;\n\n        await this.hsCompositionsParserService.loadUrl(id);\n        compoParserServiceRef.loadingOptions.suspendZoomingToExtent = false;\n      } catch (error) {\n        this.compositionNotFoundAtUrl.next(error);\n        this.$log.warn(error);\n      }\n    }\n  }\n\n  /**\n   * Get composition common id value\n   * @param composition - Composition selected\n   */\n  commonId(composition: HsMapCompositionDescriptor): string {\n    if (composition === undefined) {\n      return '';\n    }\n    return composition.uuid || composition.id;\n  }\n\n  /**\n   * Translate string value to the selected UI language\n   * @param module - Locales json key\n   * @param text - Locales json key value\n   * @returns Translated text\n   */\n  translateString(module: string, text: string): string {\n    return this.hsLanguageService.getTranslationIgnoreNonExisting(\n      module,\n      text,\n      undefined,\n    );\n  }\n}\n","import {Component, ViewRef, inject} from '@angular/core';\n\nimport {HsCompositionsService} from '../compositions.service';\nimport {\n  HsDialogComponent,\n  HsDialogContainerService,\n} from 'hslayers-ng/common/dialogs';\n@Component({\n  selector: 'hs-compositions-delete-dialog',\n  templateUrl: './delete-dialog.component.html',\n  standalone: false,\n})\nexport class HsCompositionsDeleteDialogComponent implements HsDialogComponent {\n  hsDialogContainerService = inject(HsDialogContainerService);\n  hsCompositionsService = inject(HsCompositionsService);\n\n  viewRef: ViewRef;\n  data: any;\n\n  close(): void {\n    this.hsDialogContainerService.destroy(this);\n  }\n\n  /**\n   * @param composition - Composition selected for deletion\n   * Delete selected composition from project (including deletion from composition server, useful for user created compositions)\n   */\n  async delete(composition): Promise<void> {\n    await this.hsCompositionsService.deleteComposition(composition);\n    this.close();\n  }\n}\n","<div class=\"modal in hs-composition-delete-dialog\" 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\">\n                    {{'COMMON.confirm' | 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            <div class=\"modal-body\" style=\"max-height: 600px; overflow-y: auto\">\n                <span>{{'COMPOSITIONS.dialogDelete.doYouWantToDeleteMap' | translate }}</span>\n                {{data.compositionToDelete.title}}\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn btn-danger\" (click)=\"delete(data.compositionToDelete)\">{{'COMMON.ok' |\n                    translate }}</button>\n                <button type=\"button\" class=\"btn btn-secondary\" data-dismiss=\"modal\" (click)=\"close()\">{{'COMMON.close'\n                    | translate }}</button>\n            </div>\n        </div>\n    </div>\n</div>\n","import {Component, ViewRef, inject} from '@angular/core';\nimport {KeyValuePipe} from '@angular/common';\nimport {TranslatePipe} from '@ngx-translate/core';\n\nimport {HsCompositionsService} from '../compositions.service';\nimport {\n  HsDialogComponent,\n  HsDialogContainerService,\n} from 'hslayers-ng/common/dialogs';\nimport {HsClipboardTextComponent} from 'hslayers-ng/common/clipboard-text';\n\n@Component({\n  selector: 'hs-compositions-info-dialog',\n  templateUrl: './info-dialog.component.html',\n  standalone: true,\n  imports: [TranslatePipe, HsClipboardTextComponent, KeyValuePipe],\n})\nexport class HsCompositionsInfoDialogComponent implements HsDialogComponent {\n  hsDialogContainerService = inject(HsDialogContainerService);\n  hsCompositionsService = inject(HsCompositionsService);\n\n  viewRef: ViewRef;\n  data: {\n    info: {\n      title: string;\n      abstract: string;\n      metadata?: {\n        [key: string]: any;\n      };\n      contactAddress?: {\n        [key: string]: any;\n      };\n      contactPersonPrimary?: {\n        [key: string]: any;\n      };\n      [key: string]: any;\n    };\n  };\n\n  close(): void {\n    this.hsDialogContainerService.destroy(this);\n  }\n}\n","<div class=\"modal in hs-composition-info-dialog\" 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\" style=\"overflow-wrap: anywhere;\"> {{data.info.title}} </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      <div class=\"modal-body\" style=\"max-height: 600px; overflow-y: auto\">\n        <div class=\"row py-1\" style=\"text-align: justify; text-justify: inter-word;\">\n          <div class=\"col-md-3\"><b>{{'COMMON.name' | translate }}</b></div>\n          <div class=\"col-md-9\">{{data.info.name}}</div>\n        </div>\n        <div class=\"row py-1\" style=\"text-align: justify; text-justify: inter-word;\">\n          <div class=\"col-md-3\"><b>{{'COMMON.abstract' | translate }}</b></div>\n          <div class=\"col-md-9\">{{data.info.abstract}}</div>\n        </div>\n        @if (data.info.keywords) {\n        <div class=\"py-1\">\n          @for (keyword of data.info.keywords; track keyword; let first = $first) {\n          <div>\n            @if (first) {\n            <div class=\"row\">\n              <div class=\"col-md-3\"><b>{{'COMMON.keywords' | translate }}</b></div>\n              <div class=\"col-md-9\">{{keyword}}</div>\n            </div>\n            }\n            @if (!first) {\n            <div class=\"row\">\n              <div class=\"col-md-offset-3 col-md-9\">{{keyword}}</div>\n            </div>\n            }\n          </div>\n          }\n          <br>\n        </div>\n        }\n        @if (data.info.thumbnail) {\n        <div class=\"row py-1\">\n          <div class=\"col-md-3\"><b>{{'COMMON.thumbnail' | translate }}</b></div>\n          <div class=\"col-md-9\"><img [src]=\"data.info.thumbnail.url ? data.info.thumbnail.url : data.info.thumbnail\">\n          </div>\n        </div>\n        }\n        @if (data.info.url && data.info) {\n        <div class=\"row py-1\">\n          <div class=\"col-md-3\"><b>{{'COMMON.url' | translate }}</b></div>\n          <div class=\"col-md-9 \">\n            <hs-clipboard-text [text]=\"data.info.url\" />\n          </div>\n        </div>\n        }\n        @if (data.info.srs) {\n        <div class=\"row py-1\">\n          <div class=\"col-md-3\"><b>{{'ADDLAYERS.srs' | translate }}</b></div>\n          <div class=\"col-md-9\">{{data.info.srs}}</div>\n        </div>\n        }\n        @if (data.info.extent) {\n        <div class=\"row py-1\">\n          <div class=\"col-md-3\"><b>{{'COMMON.extent' | translate }}</b></div>\n          <div class=\"col-md-9\" style=\"word-break:break-all\">{{data.info.extent}}</div>\n        </div>\n        }\n        @if (data.info.layers) {\n        <div class=\"py-1\">\n          @for (layer of data.info.layers; track layer; let first = $first) {\n          <div>\n            @if (first) {\n            <div class=\"row\">\n              <div class=\"col-md-3\"><b>{{'COMMON.layers' | translate }}</b></div>\n              <div class=\"col-md-9\">{{layer.title}}</div>\n            </div>\n            }\n            @if (!first) {\n            <div class=\"row\">\n              <div class=\"offset-md-3 col-md-9\">{{layer.title}}</div>\n            </div>\n            }\n          </div>\n          }\n          <br>\n        </div>\n        }\n        <!-- <div *ngIf=\"data.info.metadata\">\n          <div class=\"row\">\n            <div class=\"col\"><b>{{'COMPOSITIONS.dialogInfo.metadataAboutMetadata' | translate }}</b></div>\n          </div>\n          <div *ngFor=\"let metadata of data.info.metadata | keyvalue\">\n            <div class=\"row\" *ngIf=\"metadata.value\">\n              <div class=\"col-md-3\"><b>{{hsCompositionsService.translateString('COMPOSITIONS.dialogInfo.metadata', metadata.key)}}</b></div>\n              <div class=\"col-md-9\" style=\"overflow-wrap: break-word\">{{metadata.value}}</div>\n            </div>\n          </div>\n        </div> -->\n        @if (data.info.contactAddress || data.info.contactPersonPrimary) {\n        <div class=\"row py-1\">\n          <div class=\"col\"><b>{{'COMMON.contactInformation' | translate }}</b></div>\n        </div>\n        }\n        @if (data.info.contactAddress) {\n        <div>\n          @for (data of data.info.contactAddress | keyvalue; track $index) {\n          <div>\n            @if (data.value) {\n            <div class=\"row\">\n              <div class=\"col-md-4\"><b>{{hsCompositionsService.translateString('SAVECOMPOSITION.form',\n                  data.key)}}</b></div>\n              <div class=\"col-md-8\">{{data.value}}</div>\n            </div>\n            }\n          </div>\n          }\n        </div>\n        }\n        @if (data.info.contactPersonPrimary) {\n        @for (data of data.info.contactPersonPrimary | keyvalue; track data) {\n        <div>\n          @if (data.value) {\n          <div class=\"row\">\n            <div class=\"col-md-4\" style=\"word-break:break-all\">\n              <b>{{hsCompositionsService.translateString('SAVECOMPOSITION.form', data.key)}}</b>\n            </div>\n            <div class=\"col-md-8\">{{data.value}}</div>\n          </div>\n          }\n        </div>\n        }\n        }\n      </div>\n      <div class=\"modal-footer\">\n        @if (data.info?.metadata?.record_url) {\n        <a target=\"_blank\" [href]=\"data.info.metadata.record_url\" class=\"btn btn-primary\" (click)=\"close()\">See\n          full metadata record <i class=\"fa-solid fa-arrow-up-right-from-square\"></i></a>\n        }\n        <button class=\"btn btn-secondary\" (click)=\"close()\" data-dismiss=\"modal\">{{'COMMON.close' |\n          translate }}</button>\n      </div>\n    </div>\n  </div>\n</div>\n","import {Component, ViewRef, inject} from '@angular/core';\n\nimport {HsCompositionsParserService} from 'hslayers-ng/services/compositions';\nimport {HsCompositionsService} from '../compositions.service';\nimport {\n  HsDialogComponent,\n  HsDialogContainerService,\n} from 'hslayers-ng/common/dialogs';\nimport {HsSaveMapManagerService} from 'hslayers-ng/components/save-map';\n\n@Component({\n  selector: 'hs-compositions-overwrite-dialog',\n  templateUrl: './overwrite-dialog.component.html',\n  standalone: false,\n})\nexport class HsCompositionsOverwriteDialogComponent\n  implements HsDialogComponent\n{\n  hsDialogContainerService = inject(HsDialogContainerService);\n  hsCompositionsService = inject(HsCompositionsService);\n  hsSaveMapManagerService = inject(HsSaveMapManagerService);\n  hsCompositionParserService = inject(HsCompositionsParserService);\n\n  viewRef: ViewRef;\n  data: any;\n\n  close(): void {\n    this.hsDialogContainerService.destroy(this);\n  }\n\n  /**\n   * Load new composition without saving old composition\n   */\n  overwrite() {\n    this.hsCompositionsService.loadComposition(\n      this.hsCompositionsService.compositionToLoad.url,\n      true,\n    );\n    this.close();\n  }\n\n  /**\n   * Save currently loaded composition first\n   */\n  save() {\n    this.hsSaveMapManagerService.openPanel(null);\n    this.close();\n  }\n\n  /**\n   * Load new composition (with service_parser Load function) and merge it with old composition\n   */\n  add() {\n    this.hsCompositionsService.loadComposition(\n      this.hsCompositionsService.compositionToLoad.url,\n      false,\n    );\n    this.close();\n  }\n}\n","<div class=\"modal in hs-composition-overwrite-dialog\" 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\">{{'COMPOSITIONS.dialogoverwriteConfirm.whatDoYouWant' | 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      <div class=\"container py-2 gap-2 d-flex flex-column\" style=\"max-height: 600px; overflow-y: auto\">\n        <div class=\"row\">\n          <div class=\"col-5\" style=\"text-align: right;\">\n          {{'COMPOSITIONS.dialogoverwriteConfirm.youAreOpeningMap' | translate }}:</div>\n          <div class=\"fw-bold col-5 flex-grow-1\">{{data.title}}</div>\n        </div>\n        @if (data.workspace) {\n          <div class=\"row\">\n            <div class=\"col-5\" style=\"text-align: right;\">\n              {{'COMMON.createdBy' | translate }}:\n            </div>\n            <div class=\"col-5 flex-grow-1\">\n              {{data.workspace}}\n            </div>\n          </div>\n        }\n        <div class=\"row\">\n          <div class=\"col-5\" style=\"text-align: right;\">\n            {{'COMMON.abstract' | translate }}:\n          </div>\n          <div class=\"col-5 flex-grow-1\">\n            {{data.abstract}}\n          </div>\n        </div>\n        <div class=\"row\">\n          <div class=\"col-5\" style=\"text-align: right;\">\n            {{'COMMON.date' | translate }}:\n          </div>\n          <div class=\"col-5\">\n            {{data.date}}\n          </div>\n        </div>\n\n      </div>\n      <div class=\"modal-footer flex-nowrap\">\n        <button type=\"button\" class=\"btn btn-primary compositions-btn-overwrite align-self-stretch\"\n          (click)=\"overwrite()\" data-dismiss=\"modal\">{{'SAVECOMPOSITION.form.overwrite' | translate\n        }}</button>\n        <button type=\"button\" class=\"btn btn-primary compositions-btn-add\" (click)=\"add();\"\n          data-dismiss=\"modal\">{{'COMPOSITIONS.dialogoverwriteConfirm.mergeCompositions' |\n        translate}}</button>\n        @if (hsCompositionParserService.composition_edited) {\n          <button type=\"button\"\n            class=\"btn btn-primary compositions-btn-save\" (click)=\"save()\" style=\"white-space: break-spaces;\"\n            data-dismiss=\"modal\">{{'COMPOSITIONS.dialogoverwriteConfirm.saveChangesFirst' |\n          translate}}</button>\n        }\n        <button type=\"button\" class=\"btn btn-secondary compositions-btn-cancel align-self-stretch\"\n        (click)=\"close()\" data-dismiss=\"modal\">{{'COMMON.cancel' | translate }}</button>\n      </div>\n    </div>\n  </div>\n</div>\n","import {Component, ViewRef, inject} from '@angular/core';\n\nimport {\n  HsDialogComponent,\n  HsDialogContainerService,\n} from 'hslayers-ng/common/dialogs';\nimport {HsShareService} from 'hslayers-ng/components/share';\n@Component({\n  selector: 'hs-compositions-share-dialog',\n  templateUrl: './share-dialog.component.html',\n  standalone: false,\n})\nexport class HsCompositionsShareDialogComponent implements HsDialogComponent {\n  hsDialogContainerService = inject(HsDialogContainerService);\n  hsShareService = inject(HsShareService);\n\n  viewRef: ViewRef;\n  data: {url; title; abstract};\n\n  close(): void {\n    this.hsDialogContainerService.destroy(this);\n  }\n\n  shareOnSocial() {\n    this.hsShareService.openInShareApi(\n      this.data.title,\n      this.data.abstract,\n      this.data.url,\n    );\n  }\n}\n","<div class=\"modal in hs-composition-share-dialog\" 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\">\n                    <span>{{'COMPOSITIONS.dialogShare.shareMap' | translate }}</span> {{data.title}}\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            <div class=\"modal-body\" style=\"max-height: 600px; overflow-y: auto\">\n                <div class=\"row\">\n                    <div class=\"col-md-3\"><b>{{'COMMON.abstract' | translate }}</b></div>\n                    <div class=\"col-md-9\">{{data.abstract}}</div>\n                </div>\n                <div class=\"row\">\n                    <div class=\"col-md-3\"><b>{{'COMMON.url' | translate }}</b></div>\n                    <div class=\"col-md-9\"><hs-clipboard-text [text]=\"data.url\" [anchor]=\"true\" /></div>\n                </div>\n            </div>\n            <div class=\"modal-footer\">\n                <div class=\"btn-group\" role=\"group\">\n                    <button class=\"btn btn-secondary\" (click)=\"shareOnSocial()\">\n                        <i class=\"fa-solid fa-share-nodes\"></i> {{'COMMON.share' | translate }}\n                    </button>\n                </div>\n                <button type=\"button\" class=\"btn btn-secondary\" (click)=\"close()\" data-dismiss=\"modal\">{{'COMMON.close'\n                    | translate }}</button>\n            </div>\n        </div>\n    </div>\n</div>\n","export const KEYWORDS: any[] = [\n  {name: 'Basemap', value: 'Basemap', selected: false},\n  {name: 'Borders', value: 'Borders', selected: false},\n  {name: 'Physical geography', value: 'Physical geography', selected: false},\n  {name: 'Demographics', value: 'Demographics', selected: false},\n  {name: 'Economics', value: 'Economics', selected: false},\n  {\n    name: 'Socio political conditions',\n    value: 'Socio political conditions',\n    selected: false,\n  },\n  {name: 'Culture', value: 'Culture', selected: false},\n  {name: 'Transport', value: 'Transport', selected: false},\n  {name: 'Land use', value: 'Land use', selected: false},\n  {name: 'Environment', value: 'Environment', selected: false},\n  {name: 'Water', value: 'Water', selected: false},\n  {name: 'Hazards', value: 'Hazards', selected: false},\n  {name: 'Cadastre', value: 'Cadastre', selected: false},\n  {name: 'Infrastructure', value: 'Infrastructure', selected: false},\n  {name: 'Real estate', value: 'Real estate', selected: false},\n  {name: 'Planning', value: 'Planning', selected: false},\n  {name: 'Complex information', value: 'Complex information', selected: false},\n];\nexport const INSPIRETHEMES: any[] = [\n  {\n    name: 'Addresses',\n    value: 'http://inspire.ec.europa.eu/theme/ad',\n    selected: false,\n  },\n  {\n    name: 'Administrative units',\n    value: 'http://inspire.ec.europa.eu/theme/au',\n    selected: false,\n  },\n  {\n    name: 'Coordinate reference systems',\n    value: 'http://inspire.ec.europa.eu/theme/rs',\n    selected: false,\n  },\n  {\n    name: 'Geographical grid systems',\n    value: 'http://inspire.ec.europa.eu/theme/gg',\n    selected: false,\n  },\n  {\n    name: 'Cadastral parcels',\n    value: 'http://inspire.ec.europa.eu/theme/cp',\n    selected: false,\n  },\n  {\n    name: 'Geographical names',\n    value: 'http://inspire.ec.europa.eu/theme/gn',\n    selected: false,\n  },\n  {\n    name: 'Hydrography',\n    value: 'http://inspire.ec.europa.eu/theme/hy',\n    selected: false,\n  },\n  {\n    name: 'Protected sites',\n    value: 'http://inspire.ec.europa.eu/theme/ps',\n    selected: false,\n  },\n  {\n    name: 'Transport networks',\n    value: 'http://inspire.ec.europa.eu/theme/tn',\n    selected: false,\n  },\n  {\n    name: 'Elevation',\n    value: 'http://inspire.ec.europa.eu/theme/el',\n    selected: false,\n  },\n  {\n    name: 'Geology',\n    value: 'http://inspire.ec.europa.eu/theme/ge',\n    selected: false,\n  },\n  {\n    name: 'Land cover',\n    value: 'http://inspire.ec.europa.eu/theme/lc',\n    selected: false,\n  },\n  {\n    name: 'Orthoimagery',\n    value: 'http://inspire.ec.europa.eu/theme/oi',\n    selected: false,\n  },\n  {\n    name: 'Agricultural and aquaculture facilities',\n    value: 'http://inspire.ec.europa.eu/theme/af',\n    selected: false,\n  },\n  {\n    name: 'Area management/restriction/regulation zones and reporting units',\n    value: 'http://inspire.ec.europa.eu/theme/am',\n    selected: false,\n  },\n  {\n    name: 'Atmospheric conditions',\n    value: 'http://inspire.ec.europa.eu/theme/ac',\n    selected: false,\n  },\n  {\n    name: 'Bio-geographical regions',\n    value: 'http://inspire.ec.europa.eu/theme/br',\n    selected: false,\n  },\n  {\n    name: 'Buildings',\n    value: 'http://inspire.ec.europa.eu/theme/bu',\n    selected: false,\n  },\n  {\n    name: 'Energy resources',\n    value: 'http://inspire.ec.europa.eu/theme/er',\n    selected: false,\n  },\n  {\n    name: 'Environmental monitoring facilities',\n    value: 'http://inspire.ec.europa.eu/theme/ef',\n    selected: false,\n  },\n  {\n    name: 'Habitants and biotopes',\n    value: 'http://inspire.ec.europa.eu/theme/hb',\n    selected: false,\n  },\n  {\n    name: 'Human health and safety',\n    value: 'http://inspire.ec.europa.eu/theme/hh',\n    selected: false,\n  },\n  {\n    name: 'Land use',\n    value: 'http://inspire.ec.europa.eu/theme/lu',\n    selected: false,\n  },\n  {\n    name: 'Mineral resources',\n    value: 'http://inspire.ec.europa.eu/theme/mr',\n    selected: false,\n  },\n  {\n    name: 'Natural risk zones',\n    value: 'http://inspire.ec.europa.eu/theme/nz',\n    selected: false,\n  },\n  {\n    name: 'Oceanographic geographical features',\n    value: 'http://inspire.ec.europa.eu/theme/of',\n    selected: false,\n  },\n  {\n    name: 'Population distribution - demography',\n    value: 'http://inspire.ec.europa.eu/theme/pd',\n    selected: false,\n  },\n  {\n    name: 'Production and industrial facilities',\n    value: 'http://inspire.ec.europa.eu/theme/pf',\n    selected: false,\n  },\n  {\n    name: 'Sea regions',\n    value: 'http://inspire.ec.europa.eu/theme/sr',\n    selected: false,\n  },\n  {\n    name: 'Soil',\n    value: 'http://inspire.ec.europa.eu/theme/so',\n    selected: false,\n  },\n  {\n    name: 'Species distribution',\n    value: 'http://inspire.ec.europa.eu/theme/sd',\n    selected: false,\n  },\n  {\n    name: 'Statistical units',\n    value: 'http://inspire.ec.europa.eu/theme/su',\n    selected: false,\n  },\n  {\n    name: 'Utility and governmental services',\n    value: 'http://inspire.ec.europa.eu/theme/us',\n    selected: false,\n  },\n  {\n    name: 'Meteorological geographical features',\n    value: 'http://inspire.ec.europa.eu/theme/mf',\n    selected: false,\n  },\n  {\n    name: 'Atmospheric Conditions and meteorological geographical features',\n    value: 'http://inspire.ec.europa.eu/theme/ac-mf',\n    selected: false,\n  },\n];\nexport const SORTBYVALUES: any[] = [\n  {name: 'None', value: 'None'},\n  {name: 'Title', value: 'title'},\n  {name: 'Date', value: 'date:D'},\n  {name: 'Bbox', value: 'bbox'},\n];\nexport const TYPES: any[] = [\n  {name: 'None', value: 'None'},\n  {name: 'Datasource', value: 'datasource'},\n  {name: 'Service', value: 'service'},\n  {name: 'Application', value: 'application'},\n  {name: 'Feature catalogue', value: 'feature catalogue'},\n];\n","import {Injectable, NgZone, inject} from '@angular/core';\n\nimport {Observable, filter, forkJoin} from 'rxjs';\n\nimport {HsCommonEndpointsService} from 'hslayers-ng/services/endpoints';\nimport {HsCommonLaymanService} from 'hslayers-ng/common/layman';\nimport {HsCompositionsService} from './compositions.service';\nimport {HsDialogContainerService} from 'hslayers-ng/common/dialogs';\nimport {HsEndpoint, HsMapCompositionDescriptor} from 'hslayers-ng/types';\nimport {HsEventBusService} from 'hslayers-ng/services/event-bus';\nimport {HsLayoutService} from 'hslayers-ng/services/layout';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {\n  INSPIRETHEMES,\n  KEYWORDS,\n  SORTBYVALUES,\n  TYPES,\n} from './compositions-option-values';\nimport {debounce} from 'hslayers-ng/services/utils';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsCompositionsCatalogueService {\n  hsMapService = inject(HsMapService);\n  hsCompositionsService = inject(HsCompositionsService);\n  hsLayoutService = inject(HsLayoutService);\n  hsCommonEndpointsService = inject(HsCommonEndpointsService);\n  hsEventBusService = inject(HsEventBusService);\n  hsDialogContainerService = inject(HsDialogContainerService);\n  hsCommonLaymanService = inject(HsCommonLaymanService);\n  private _zone = inject(NgZone);\n\n  compositionEntries: HsMapCompositionDescriptor[] = [];\n  /**\n   *List of sort by values (currently hard-coded selection),that will be applied in compositions lookup\n   */\n  sortByValues = SORTBYVALUES;\n  /**\n   * List of composition type values (currently hard-coded selection),that will be applied in compositions lookup\n   */\n  types = TYPES;\n  /**\n   * List of composition theme values (currently hard-coded selection),that will be applied in compositions lookup\n   */\n  inspireThemes = INSPIRETHEMES;\n\n  data: any = {\n    query: {editable: false, title: ''},\n    keywords: KEYWORDS,\n    sortBy: SORTBYVALUES[0],\n    type: TYPES[0].name,\n    themes: INSPIRETHEMES,\n  };\n  recordsPerPage = 20;\n  matchedRecords = 0;\n  listStart = 0;\n  listNext = this.recordsPerPage;\n  /**\n   * Store whether filter compositions by current window extent during composition search\n   */\n  filterByExtent = true;\n  filterByOnlyMine = false;\n  /**\n   *\n   * Store whether filter compositions by current window extent during composition search\n   */\n  dataLoading: boolean;\n  loadCompositionsQuery: any;\n  endpoints: HsEndpoint[] = this.hsCommonEndpointsService.endpoints();\n  extentChangeSuppressed = false;\n  constructor() {\n    this.hsLayoutService.mainpanel$.subscribe((which) => {\n      if (\n        this.hsLayoutService.mainpanel === 'compositions' ||\n        this.hsLayoutService.mainpanel === 'composition'\n      ) {\n        this.loadFilteredCompositions();\n        this.extentChangeSuppressed = true;\n      }\n    });\n    const extentChangeDebouncer = {};\n    this.hsEventBusService.mapExtentChanges\n      .pipe(filter(() => this.hsLayoutService.mainpanel === 'compositions'))\n      .subscribe(\n        debounce(\n          ({map, event, extent}) => {\n            if (this.extentChangeSuppressed) {\n              this.extentChangeSuppressed = false;\n              return;\n            }\n            if (this.filterByExtent) {\n              this._zone.run(() => {\n                this.loadFilteredCompositions();\n              });\n            }\n          },\n          400,\n          false,\n          extentChangeDebouncer,\n        ),\n      );\n\n    this.hsEventBusService.compositionDeletes.subscribe((composition) => {\n      //TODO: rewrite\n      const deleteDialog = this.hsLayoutService.contentWrapper.querySelector(\n        '.hs-composition-delete-dialog',\n      );\n      if (deleteDialog) {\n        deleteDialog.parentNode.remove(deleteDialog);\n      }\n      this._zone.run(() => {\n        this.loadFilteredCompositions();\n      });\n    });\n\n    this.hsCommonLaymanService.layman$.subscribe((endpoint) => {\n      if (\n        this.hsLayoutService.mainpanel != 'compositions' &&\n        this.hsLayoutService.mainpanel != 'composition'\n      ) {\n        return;\n      }\n      this.loadFilteredCompositions();\n    });\n\n    this.hsCompositionsService.compositionNotFoundAtUrl.subscribe(\n      async (data) => {\n        const {HsCompositionsInfoDialogComponent} = await import(\n          './dialogs/info-dialog.component'\n        );\n        this.hsDialogContainerService.create(\n          HsCompositionsInfoDialogComponent,\n          {\n            info: {\n              title: this.hsCompositionsService.translateString(\n                'COMPOSITIONS',\n                'compositionNotFound',\n              ),\n              abstract: data.error.message,\n            },\n          },\n        );\n      },\n    );\n  }\n\n  /**\n   * Load list of compositions for all endpoints\n   */\n  loadCompositions(suspendLimitCalculation?: boolean): void {\n    if (this.loadCompositionsQuery) {\n      this.loadCompositionsQuery.unsubscribe();\n      delete this.loadCompositionsQuery;\n    }\n    this.clearLoadedData();\n    this.dataLoading = true;\n    this.hsMapService.loaded().then(() => {\n      const observables: Observable<any>[] = [];\n      for (const endpoint of this.endpoints) {\n        if (endpoint.type === 'micka' && this.filterByOnlyMine) {\n          continue;\n        }\n        observables.push(this.loadCompositionFromEndpoint(endpoint));\n      }\n      this.loadCompositionsQuery = forkJoin(observables).subscribe(() => {\n        if (suspendLimitCalculation) {\n          this.createCompositionList();\n        } else {\n          this.calculateEndpointLimits();\n        }\n      });\n    });\n  }\n  /**\n   * Calculates each endpoint composition request limit, based on the matched compositions ratio\n   * from all endpoint matched compositions\n   */\n  calculateEndpointLimits(): void {\n    this.matchedRecords = 0;\n    const filteredEndpoints = this.endpoints.filter(\n      (ep) => ep.compositionsPaging.matched != 0,\n    );\n    if (filteredEndpoints.length == 0) {\n      this.dataLoading = false;\n      return;\n    }\n    this.matchedRecords = this.endpoints.reduce(\n      (sum, ep) => sum + ep.compositionsPaging.matched,\n      this.matchedRecords,\n    );\n    let sumLimits = 0;\n    this.endpoints.forEach((ep) => {\n      /**Calculated limit or 1 if its smaller */\n      ep.compositionsPaging.limit = Math.max(\n        Math.round(\n          (ep.compositionsPaging.matched / this.matchedRecords) *\n            this.recordsPerPage,\n        ),\n        1,\n      );\n      sumLimits += ep.compositionsPaging.limit;\n    });\n\n    /**Proportion of page limit for one of the datasources was 0 after rounding\n     * For the first few pages we need to adjust limit of the other datasource\n     */\n    if (sumLimits > this.recordsPerPage) {\n      const epWithFew = this.endpoints.reduce((maxItem, currentItem) => {\n        if (\n          maxItem === null ||\n          currentItem.compositionsPaging.limit <\n            maxItem.compositionsPaging.limit\n        ) {\n          return currentItem;\n        }\n        return maxItem;\n      }, null);\n      /** Adjust the limit for epWithMany */\n      this.endpoints.find((ep) => ep != epWithFew).compositionsPaging.limit -=\n        1;\n      sumLimits -= 1;\n    }\n\n    this.recordsPerPage = sumLimits;\n    this.listNext = this.recordsPerPage;\n    this.loadCompositions(true);\n  }\n  /**\n   * Load list of compositions according to current filter values and pager position\n   * (filter, keywords, current extent, start composition, compositions number per page). Display compositions extent in map\n   */\n  loadCompositionFromEndpoint(ep: HsEndpoint): Observable<any> {\n    return this.hsCompositionsService.loadCompositions(ep, {\n      query: this.data.query,\n      sortBy: this.data.sortBy.value,\n      filterByExtent: this.filterByExtent,\n      keywords: this.data.keywords,\n      themes: this.data.themes,\n      type: this.data.type,\n      start: ep.compositionsPaging.start,\n      limit: ep.compositionsPaging.limit,\n      filterByOnlyMine: this.filterByOnlyMine,\n    });\n  }\n  /**\n   * Reset endpoint counters and reload compositions\n   */\n  loadFilteredCompositions(): void {\n    this.clearListCounters();\n    this.loadCompositions();\n  }\n  /**\n   * Creates list of compositions from all endpoints currently available\n   */\n  createCompositionList(): void {\n    for (const endpoint of this.endpoints) {\n      this.compositionEntries = this.arrayContainsData(this.compositionEntries)\n        ? this.filterDuplicates(endpoint)\n        : this.compositionEntries.concat(endpoint.compositions);\n    }\n    this.dataLoading = false;\n    if (this.matchedRecords < this.recordsPerPage) {\n      this.listNext = this.matchedRecords;\n    }\n  }\n\n  /**\n   *  Filters compositions from responseArray with the same id in already loaded compositionEntries array\n   */\n  filterDuplicates(endpoint: HsEndpoint): HsMapCompositionDescriptor[] {\n    if (!this.arrayContainsData(endpoint.compositions)) {\n      return this.compositionEntries;\n    }\n    const filteredCompositions = endpoint.compositions.filter(\n      (record) =>\n        this.compositionEntries.filter(\n          (loaded) =>\n            loaded.id == record.id ||\n            'm-' + loaded.id == record.id ||\n            loaded.id == 'm-' + record.id,\n        ).length == 0,\n    );\n    this.matchedRecords -=\n      endpoint.compositions.length - filteredCompositions.length;\n    return this.compositionEntries.concat(filteredCompositions);\n  }\n  /**\n   * Clears all list counters regarding paging\n   */\n  clearListCounters(): void {\n    this.listStart = 0;\n    this.listNext = this.recordsPerPage;\n    this.hsCompositionsService.resetCompositionCounter();\n  }\n  /**\n   * Clears all data saved regarding loaded compositions\n   */\n  clearLoadedData(): void {\n    this.compositionEntries = [];\n    this.endpoints.forEach((ep) => (ep.compositions = []));\n  }\n  /**\n   * Evaluates if array is defined and contains any data\n   * @param arr - Endpoint composition records\n   */\n  arrayContainsData(arr: any[]): boolean {\n    return arr !== undefined && arr.length > 0;\n  }\n\n  /**\n   * Load previous list of compositions to display on pager\n   */\n  getPreviousRecords(): void {\n    if (this.listStart - this.recordsPerPage <= 0) {\n      this.listStart = 0;\n      this.listNext = this.recordsPerPage;\n      this.endpoints.forEach(\n        (ep: HsEndpoint) => (ep.compositionsPaging.start = 0),\n      );\n    } else {\n      this.listStart -= this.recordsPerPage;\n      this.listNext = this.listStart + this.recordsPerPage;\n      this.endpoints.forEach(\n        (ep: HsEndpoint) =>\n          (ep.compositionsPaging.start -= ep.compositionsPaging.limit),\n      );\n    }\n    this.loadCompositions(true);\n  }\n\n  /**\n   * Load next list of compositions to display on pager\n   */\n  getNextRecords(): void {\n    this.listStart += this.recordsPerPage;\n    this.listNext += this.recordsPerPage;\n    if (this.listNext > this.matchedRecords) {\n      this.listNext = this.matchedRecords;\n    }\n    this.endpoints.forEach(\n      (ep) => (ep.compositionsPaging.start += ep.compositionsPaging.limit),\n    );\n    this.loadCompositions(true);\n  }\n\n  changeRecordsPerPage(): void {\n    this.clearListCounters();\n    this.loadCompositions();\n  }\n\n  /**\n   * Clears all filters set for composition list filtering\n   */\n  clearFilters(): void {\n    this.data.query.title = '';\n    this.data.sortBy = SORTBYVALUES[0];\n    this.data.type = TYPES[0].name;\n    this.data.keywords.forEach((kw) => (kw.selected = false));\n    this.data.themes.forEach((th) => (th.selected = false));\n    this.loadFilteredCompositions();\n  }\n}\n","import {Component, Input, inject} from '@angular/core';\n\nimport {HsCompositionsCatalogueService} from './compositions-catalogue.service';\nimport {HsCompositionsDeleteDialogComponent} from './dialogs/delete-dialog.component';\nimport {HsCompositionsService} from './compositions.service';\nimport {HsCompositionsShareDialogComponent} from './dialogs/share-dialog.component';\nimport {HsConfig} from 'hslayers-ng/config';\nimport {HsDialogContainerService} from 'hslayers-ng/common/dialogs';\nimport {HsLanguageService} from 'hslayers-ng/services/language';\nimport {HsMapCompositionDescriptor} from 'hslayers-ng/types';\nimport {HsSetPermissionsDialogComponent} from 'hslayers-ng/common/dialog-set-permissions';\nimport {HsToastService} from 'hslayers-ng/common/toast';\nimport {HsCommonLaymanService} from 'hslayers-ng/common/layman';\n\n@Component({\n  selector: 'hs-compositions-list-item',\n  templateUrl: 'compositions-list-item.component.html',\n  standalone: false,\n})\nexport class HsCompositionsListItemComponent {\n  private hsCompositionsService = inject(HsCompositionsService);\n  private hsToastService = inject(HsToastService);\n  private hsDialogContainerService = inject(HsDialogContainerService);\n  private hsConfig = inject(HsConfig);\n  private hsLanguageService = inject(HsLanguageService);\n  private hsCompositionsCatalogueService = inject(\n    HsCompositionsCatalogueService,\n  );\n  hsCommonLaymanService = inject(HsCommonLaymanService);\n\n  @Input() composition: HsMapCompositionDescriptor;\n  @Input() selectedCompId: string;\n\n  /**\n   * Load selected composition\n   * @param composition - Selected composition\n   */\n  openComposition(composition: HsMapCompositionDescriptor): void {\n    this.hsCompositionsService.loadCompositionParser(composition);\n  }\n  /**\n   * @param record - Composition to show details\n   * Load info about composition through service and display composition info dialog\n   */\n  async detailComposition(record: HsMapCompositionDescriptor): Promise<void> {\n    const info = await this.hsCompositionsService.getCompositionInfo(record);\n    if (info !== undefined) {\n      this.infoDialogBootstrap(info);\n    }\n  }\n\n  /**\n   * @param record - Composition to share\n   * Prepare share object on server and display share dialog to share composition\n   */\n  async shareComposition(record: HsMapCompositionDescriptor): Promise<void> {\n    let url: string;\n    try {\n      await this.hsCompositionsService\n        .shareComposition(record)\n        .then(async () => {\n          url = await this.hsCompositionsService.getShareUrl();\n          if (url !== undefined) {\n            this.shareDialogBootstrap(record, url);\n          } else {\n            throw new Error('COMPOSITIONS.sharingUrlIsNotAvailable');\n          }\n        });\n    } catch (e) {\n      this.hsToastService.createToastPopupMessage(\n        this.hsLanguageService.getTranslation(\n          'COMPOSITIONS.errorWhileSharingOnSocialNetwork',\n          undefined,\n        ),\n        this.hsLanguageService.getTranslationIgnoreNonExisting(\n          'ERRORMESSAGES',\n          e.message,\n          {url: url},\n        ),\n        {disableLocalization: true},\n      );\n    }\n  }\n\n  /**\n   * Show permissions dialog window for selected composition.\n   * @param composition - Selected composition\n   */\n  async showPermissions(\n    composition: HsMapCompositionDescriptor,\n  ): Promise<void> {\n    this.hsDialogContainerService.create(HsSetPermissionsDialogComponent, {\n      recordType: 'composition',\n      selectedRecord: composition,\n      onPermissionSaved: {\n        service: this.hsCompositionsCatalogueService,\n        method: 'loadFilteredCompositions',\n      },\n    });\n  }\n\n  /**\n   * @param composition - Composition selected for deletion\n   * Display delete dialog of composition\n   */\n  confirmDelete(composition: HsMapCompositionDescriptor): void {\n    if (!composition.editable) {\n      return;\n    }\n    this.deleteDialogBootstrap(composition);\n  }\n\n  /**\n   * @param composition - Composition selected for deletion\n   */\n  deleteDialogBootstrap(composition): void {\n    this.hsDialogContainerService.create(HsCompositionsDeleteDialogComponent, {\n      compositionToDelete: composition,\n    });\n  }\n\n  /**\n   * @param record - Composition selected for sharing\n   */\n  shareDialogBootstrap(record: HsMapCompositionDescriptor, url: string): void {\n    this.hsDialogContainerService.create(HsCompositionsShareDialogComponent, {\n      url,\n      title:\n        this.hsConfig.social_hashtag &&\n        !record.title.includes(this.hsConfig.social_hashtag)\n          ? record.title + ' ' + this.hsConfig.social_hashtag\n          : record.title,\n      abstract: record.abstract,\n    });\n  }\n\n  /**\n   * Display composition info dialog\n   * @param info - Composition info\n   */\n  async infoDialogBootstrap(info): Promise<void> {\n    const {HsCompositionsInfoDialogComponent} = await import(\n      './dialogs/info-dialog.component'\n    );\n    this.hsDialogContainerService.create(HsCompositionsInfoDialogComponent, {\n      info,\n    });\n  }\n\n  /**\n   * Get composition common id\n   * @param composition - Composition item\n   */\n  getCommonId(composition: HsMapCompositionDescriptor): string {\n    return this.hsCompositionsService.commonId(composition);\n  }\n}\n","<div class=\"hs-comp-item-title\">{{composition.title || composition.name}}</div>\n<div class=\"hs-comp-item-body mt-2\" [ngClass]=\"{'d-none': getCommonId(composition) !== selectedCompId}\">\n  <hr class=\"hs-dotted-line\">\n  <div class=\"btn-group w-100 align-items-center\" role=\"group\">\n    <a class=\"btn btn-sm border-0\" (click)=\"$event.stopPropagation();openComposition(composition)\">\n      <i class=\"fa-solid fa-map icon-primary\"></i><span class=\"ms-1\">{{'COMMON.open' |\n    translate }}</span>\n  </a>\n  <a class=\"btn btn-sm border-0\" (click)=\"$event.stopPropagation();detailComposition(composition)\">\n    <i class=\"fa-solid fa-circle-info icon-primary\"></i><span class=\"ms-1\">{{'COMMON.metadata' |\n  translate }}</span>\n</a>\n<a class=\"btn btn-sm border-0\" (click)=\"$event.stopPropagation();shareComposition(composition)\">\n  <i class=\"fa-solid fa-share-nodes icon-primary\"></i><span class=\"ms-1\">{{'COMMON.share' |\ntranslate }}</span>\n</a>\n@if (hsCommonLaymanService.isAuthenticated()) {\n  <a class=\"btn btn-sm border-0\" (click)=\"$event.stopPropagation();showPermissions(composition)\"\n    data-toggle=\"tooltip\" data-placement=\"bottom\"\n    [title]=\"composition.editable ? '' : 'COMPOSITIONS.notAllowedToEditLayer' | translate \">\n    <i class=\"fa-solid fa-lock icon-primary\" [ngClass]=\"{'text-muted': !composition.editable}\"\n    [ngStyle]=\"{'cursor' : composition.editable ? 'pointer' : 'default'}\"></i><span\n    [hidden]=\"!composition.editable\" class=\"ms-1\">{{'COMMON.setPermissions' |\n  translate }}</span>\n</a>\n<a class=\"btn btn-sm border-0\" (click)=\"$event.stopPropagation();confirmDelete(composition)\"\n  data-toggle=\"tooltip\" data-placement=\"bottom\"\n  [title]=\"composition.editable ? '' : 'COMPOSITIONS.notAllowedToEditLayer' | translate \">\n  <i class=\"fa-solid fa-trash icon-primary\" [ngClass]=\"{'text-muted': !composition.editable}\"\n  [ngStyle]=\"{'cursor' : composition.editable ? 'pointer' : 'default'}\"></i><span\n  [hidden]=\"!composition.editable\" class=\"ms-1\">{{'COMMON.delete' |\ntranslate }}</span>\n</a>\n}\n</div>\n</div>\n","import {Component, computed, OnInit, signal, inject} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {filter} from 'rxjs/operators';\n\nimport {HsCommonLaymanService} from 'hslayers-ng/common/layman';\nimport {HsCompositionsCatalogueService} from './compositions-catalogue.service';\nimport {HsCompositionsMapService} from './compositions-map.service';\nimport {HsCompositionsParserService} from 'hslayers-ng/services/compositions';\nimport {HsCompositionsService} from './compositions.service';\nimport {HsConfig} from 'hslayers-ng/config';\nimport {HsDialogContainerService} from 'hslayers-ng/common/dialogs';\nimport {HsLayerSynchronizerService} from 'hslayers-ng/services/save-map';\nimport {HsMapCompositionDescriptor} from 'hslayers-ng/types';\nimport {HsPanelBaseComponent} from 'hslayers-ng/common/panels';\nimport {HsEventBusService} from 'hslayers-ng/services/event-bus';\nimport {HsCommonEndpointsService} from 'hslayers-ng/services/endpoints';\n\n@Component({\n  selector: 'hs-compositions',\n  templateUrl: './compositions.component.html',\n  standalone: false,\n})\nexport class HsCompositionsComponent\n  extends HsPanelBaseComponent\n  implements OnInit\n{\n  hsConfig = inject(HsConfig);\n  private hsEventBusService = inject(HsEventBusService);\n  private hsCompositionsService = inject(HsCompositionsService);\n  private hsCompositionsParserService = inject(HsCompositionsParserService);\n  private hsCompositionsMapService = inject(HsCompositionsMapService);\n  private hsDialogContainerService = inject(HsDialogContainerService);\n  hsCompositionsCatalogueService = inject(HsCompositionsCatalogueService);\n  hsCommonLaymanService = inject(HsCommonLaymanService);\n  private hsCommonEndpointsService = inject(HsCommonEndpointsService);\n  /*\n   * Make sure the hsLayerSynchronizerService is available in the setups with add-data\n   */\n  private hsLayerSynchronizerService = inject(HsLayerSynchronizerService);\n\n  keywordsVisible = false;\n  themesVisible = false;\n  urlToAdd = '';\n  addCompositionUrlVisible = false;\n\n  optionsMenuOpen = signal(false);\n  optionsButtonLabel = computed(() =>\n    this.optionsMenuOpen() ? 'less' : 'more',\n  );\n  selectedCompId: string;\n  loadFilteredCompositions: any;\n  name = 'compositions';\n\n  constructor() {\n    super();\n\n    this.hsEventBusService.vectorQueryFeatureSelection\n      .pipe(\n        filter((e) => this.hsLayoutService.mainpanel == 'compositions'),\n        takeUntilDestroyed(),\n      )\n      .subscribe((e) => {\n        for (const endpoint of this.hsCommonEndpointsService.endpoints()) {\n          const record =\n            this.hsCompositionsMapService.getFeatureRecordAndUnhighlight(\n              e.feature,\n              e.selector,\n              endpoint.compositions,\n            );\n          if (record) {\n            this.hsCompositionsService.loadComposition(\n              this.hsCompositionsService.getRecordLink(record),\n            );\n          }\n        }\n      });\n  }\n\n  ngOnInit(): void {\n    this.loadFilteredCompositions = () =>\n      this.hsCompositionsCatalogueService.loadFilteredCompositions();\n    this.hsCompositionsService.notSavedOrEditedCompositionLoading\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe(({url, record}) => {\n        this.hsCompositionsService.compositionToLoad = {\n          url,\n          title: record.title,\n        };\n        this.loadUnsavedDialogBootstrap(record);\n      });\n    super.ngOnInit();\n  }\n\n  /**\n   * @param composition - Composition to highlight\n   * @param state - Target state of composition ( True - highlighted, False - normal)\n   * Highlight (or dim) composition, toggle visual state of composition extent on map\n   */\n  highlightComposition(\n    composition: HsMapCompositionDescriptor,\n    state: boolean,\n  ): void {\n    composition.highlighted = state;\n    this.hsCompositionsMapService.highlightComposition(composition, state);\n  }\n\n  /**\n   \n   * Load selected composition in map, if current composition was edited display Overwrite dialog\n   */\n  addCompositionUrl(url: string): void {\n    if (\n      this.hsCompositionsParserService.composition_edited ||\n      this.hsCompositionsParserService.composition_loaded\n    ) {\n      this.hsCompositionsService.notSavedOrEditedCompositionLoading.next({\n        url,\n        record: {title: 'Composition from URL'},\n      });\n    } else {\n      this.hsCompositionsService.loadComposition(url, true).then(() => {\n        this.addCompositionUrlVisible = false;\n      });\n    }\n  }\n\n  /**\n   * @param evt - File upload event\n   * Handle composition upload from file list\n   */\n  handleFileSelect(evt): void {\n    const files = evt.target.files; // FileList object\n    for (const f of files) {\n      if (!f.type.match('application/json')) {\n        continue;\n      }\n      const reader = new FileReader();\n      reader.onload = async (theFile) => {\n        const json = JSON.parse(<string>reader.result);\n        await this.hsCompositionsParserService.loadCompositionObject(\n          json,\n          true,\n        );\n      };\n      reader.readAsText(f);\n    }\n  }\n\n  /**\n   * Open overwrite dialog\n   * @param title - Dialog title\n   */\n  async loadUnsavedDialogBootstrap(record: any): Promise<void> {\n    const {HsCompositionsOverwriteDialogComponent} = await import(\n      './dialogs/overwrite-dialog.component'\n    );\n\n    this.hsDialogContainerService.create(\n      HsCompositionsOverwriteDialogComponent,\n      record,\n    );\n  }\n\n  /**\n   * Open options menu\n   */\n  openOptionsMenu(): void {\n    this.optionsMenuOpen.update((value) => !value);\n    if (this.optionsMenuOpen()) {\n      this.keywordsVisible = false;\n      this.themesVisible = false;\n    }\n  }\n\n  /**\n   * Clear all options menu filters\n   */\n  clearFilters(): void {\n    this.optionsMenuOpen.set(false);\n    this.themesVisible = false;\n    this.keywordsVisible = false;\n    this.selectedCompId = '';\n    this.hsCompositionsCatalogueService.clearFilters();\n  }\n\n  /**\n   * Change add composition url button visibility\n   */\n  changeUrlButtonVisible(): void {\n    this.addCompositionUrlVisible = !this.addCompositionUrlVisible;\n  }\n\n  /**\n   * Open save map panel\n   */\n  openSaveMapPanel(): void {\n    this.hsLayoutService.setMainPanel('saveMap');\n  }\n\n  /**\n   * Act on composition clicked\n   * @param composition - Composition list item selected\n   */\n  compositionClicked(composition: HsMapCompositionDescriptor): void {\n    if (\n      this.selectedCompId != this.hsCompositionsService.commonId(composition)\n    ) {\n      this.selectedCompId = this.hsCompositionsService.commonId(composition);\n    } else {\n      this.selectedCompId = '';\n    }\n  }\n\n  /**\n   * Reload compositions list\n   */\n  reload(): void {\n    this.clearFilters();\n    this.loadFilteredCompositions();\n  }\n\n  /**\n   * Act on sort value changes for sorting compositions\n   * @param sortBy - Sorting value\n   */\n  sortByValueChanged(sortBy: any): void {\n    this.hsCompositionsCatalogueService.data.sortBy = sortBy;\n    this.loadFilteredCompositions();\n  }\n\n  /**\n   * Get save map panel status\n   */\n  saveMapAvailable(): boolean {\n    return this.hsLayoutService.panelEnabled('saveMap');\n  }\n}\n","@if (isVisible$ | async) {\n  <div class=\"card hs-main-panel h-100 overflow-hidden\" style=\"margin-top: 0 !important;\" [ngClass]=\"panelWidthClass\"\n    >\n    @if ({layman: hsCommonLaymanService.layman$ | async }; as ctx) {\n      <div class=\"hs-compositions-header\">\n        <hs-panel-header name=\"compositions\" [panelTabs]=\"'COMPOSITIONS'\">\n          <button mainButton [disabled]=\"!hsConfig.panelsEnabled['saveMap']\"\n            class=\"btn btn-sm btn-outline-primary border-0 align-items-center d-flex gap-2\"\n            (click)=\"openSaveMapPanel()\"> {{'PANEL_HEADER.SAVECOMPOSITION' | translate}}\n            <i class=\"fa-solid fa-floppy-disk\"></i>\n          </button>\n          <extra-buttons>\n            <a class=\"dropdown-item\" (click)=\"reload()\">\n              <i class=\"fa-solid fa-rotate-right\"></i>&nbsp;{{'COMMON.reload' | translate}}\n            </a>\n            <label class=\"dropdown-item cursor-pointer\" style=\"text-wrap: pretty;\">\n              <span class=\"fa-solid fa-upload\"></span><input type=\"file\" (change)=\"handleFileSelect($event)\"\n              accept=\".json\" style=\"display: none;\"> {{'COMPOSITIONS.import' | translate}}\n            </label>\n            <a class=\"dropdown-item\" (click)=\"changeUrlButtonVisible()\">\n              <i class=\"fa-solid fa-plus\"></i>&nbsp;{{'COMPOSITIONS.addByAddress'|translate}}\n            </a>\n          </extra-buttons>\n        </hs-panel-header>\n        <div class=\"mt-3 mx-3 ps-1 d-flex justify-content-between\">\n          <div class=\"input-group mb-2\" [hidden]=\"!addCompositionUrlVisible\">\n            <input type=\"text\" class=\"form-control\" [placeholder]=\"'COMPOSITIONS.Address'|translate\"\n              [(ngModel)]=\"urlToAdd\" [ngModelOptions]=\"{standalone: true}\">\n            <button type=\"button\" class=\"btn btn-secondary\" (click)=\"addCompositionUrl(urlToAdd)\"><i\n            class=\"fa-solid fa-link\"></i></button>\n          </div>\n        </div>\n        <div class=\"mx-3 ps-1 d-flex justify-content-between\">\n          <div class=\"input-group\" style=\"width: 55% !important;\">\n            <input type=\"search\" class=\"form-control border-end-0\" [placeholder]=\"'COMMON.search'|translate\"\n              name=\"search\" [(ngModel)]=\"hsCompositionsCatalogueService.data.query.title\"\n              (ngModelChange)=\"loadFilteredCompositions()\">\n            <button class=\"input-group-text text-secondary border-start-0\" (click)=\"loadFilteredCompositions()\">\n              <i class=\"fa-solid fa-magnifying-glass icon-primary\"></i>\n            </button>\n          </div>\n          <hs-layman-current-user />\n        </div>\n        <div class=\"d-flex ms-4 me-3 justify-content-between py-1 \">\n          <div class=\"d-flex\">\n            <div class=\"input-group-text border-0\">\n              <input type=\"checkbox\" class=\"checkbox-lg\"\n                [(ngModel)]=\"hsCompositionsCatalogueService.filterByExtent\"\n                (change)='loadFilteredCompositions()' name=\"hsCompositionsCatalogueService.filterByExtent\">\n              <span class=\"ms-1\">{{'COMPOSITIONS.filterByMap' | translate }}</span>\n            </div>\n            @if (hsCommonLaymanService.isAuthenticated()) {\n              <div class=\"input-group-text border-0 ms-1\">\n                <input type=\"checkbox\" [(ngModel)]=\"hsCompositionsCatalogueService.filterByOnlyMine\"\n                  (change)='loadFilteredCompositions()' name=\"hsCompositionsCatalogueService.filterByOnlyMine\">\n                <span class=\"ms-1\">{{'COMPOSITIONS.onlyMine' | translate }}</span>\n              </div>\n            }\n          </div>\n          <div ngbDropdown display=\"dynamic\" placement=\"bottom-right\" class=\"d-inline-block\">\n            <button class=\"btn btn-light hs-white-background hs-custom-toggle\" (click)=\"openOptionsMenu()\"\n              ngbDropdownToggle>{{'COMMON.' + optionsButtonLabel() | translate}}</button>\n            <div ngbDropdownMenu class=\"dropdown-menu-right p-2 m-1\"\n              style=\"min-width: 23rem; max-width: 23rem;  overflow: visible\" aria-labelledby=\"filtersDropdown\">\n              <table class=\"p-1 ps-3\" style=\"border-collapse:separate; border-spacing:0.5rem 0.5rem;\">\n                <tbody>\n                  <!-- <tr>\n                  <td class=\"tdbreak\">\n                    {{'COMMON.type' | translate }}\n                  </td>\n                  <td>\n                    <select class=\"form-control hs-background-alfa ps-1\" name=\"type\"\n                      [(ngModel)]=\"hsCompositionsCatalogueService.data.type\"\n                      (change)=\"loadFilteredCompositions()\"\n                      style=\"min-width: 11rem; max-width: 11rem;border:0px\">\n                      <option *ngFor=\"let type of hsCompositionsCatalogueService.types\"\n                        [ngValue]=\"type.value\">\n                      {{translateString('COMPOSITONTYPES', type.name)}}</option>\n                    </select>\n                  </td>\n                </tr> -->\n                <tr>\n                  <td class=\"tdbreak\">\n                    {{'COMMON.keywords' | translate }}\n                  </td>\n                  <td ngbDropdown display=\"dynamic\" placement=\"bottom-right\">\n                    <button type=\"button\" ngbDropdownToggle\n                      class=\"btn btn-light btn-sm hs-custom-toggle hs-background-alfa p-2 ps-1 border-0\"\n                      style=\"text-align:start; min-width: 11rem; max-width: 11rem; border-radius: 0px; justify-content: space-between; display:flex; align-items: center;\">\n                      {{'COMPOSITIONS.selectKeywords' | translate }}\n                    </button>\n                    <ul ngbDropdownMenu aria-labelledby=\"keywords\" class=\"ps-2\"\n                      style=\"overflow-y: auto; max-height: 10rem; min-width: 15rem\">\n                      @for (keyword of hsCompositionsCatalogueService.data.keywords; track keyword;) {\n                        <li\n                          class=\"p-1 p-md-0\">\n                          <label style=\"cursor: pointer;\"><input class=\"me-2\" type=\"checkbox\"\n                            [(ngModel)]=\"keyword.selected\" name=\"keyword[$index]\"\n                            (change)=\"loadFilteredCompositions()\">{{'COMPOSITONKEYWORDS.' + keyword.name | translate}}</label>\n                        </li>\n                      }\n                    </ul>\n                  </td>\n                </tr>\n                <tr>\n                  <td class=\"tdbreak\">\n                    {{'COMPOSITIONS.inspireTheme' | translate }}\n                  </td>\n                  <td ngbDropdown display=\"dynamic\" placement=\"bottom-right\">\n                    <button type=\"button\" ngbDropdownToggle\n                      class=\"btn btn-light btn-sm hs-custom-toggle hs-background-alfa p-2 ps-1 border-0\"\n                      style=\"text-align:start; min-width: 11rem; max-width: 11rem; border-radius: 0px; justify-content: space-between; display:flex; align-items: center;\">\n                      {{'COMPOSITIONS.selectThemes' | translate }}\n                    </button>\n                    <ul ngbDropdownMenu aria-labelledby=\"inspireThemes\" class=\"ps-2\"\n                      style=\"overflow-y: auto; max-height: 10rem; min-width: 20rem\">\n                      @for (theme of hsCompositionsCatalogueService.data.themes; track theme; let index = $index) {\n                        <li\n                          class=\"p-1 p-md-0\">\n                          <label style=\"cursor: pointer;\"><input class=\"me-2\" type=\"checkbox\"\n                            [(ngModel)]=\"theme.selected\" name=\"theme[index]\"\n                            (change)=\"loadFilteredCompositions()\">{{'COMPOSITONINSPIRETHEMES.' + theme.name | translate}}</label>\n                        </li>\n                      }\n                    </ul>\n                  </td>\n                </tr>\n                <tr>\n                  <td class=\"tdbreak\">\n                    {{'COMMON.sortBy' | translate }}\n                  </td>\n                  <td ngbDropdown display=\"dynamic\" placement=\"bottom-right\" #sortByDrop=\"ngbDropdown\">\n                    <button type=\"button\" ngbDropdownToggle\n                      class=\"btn btn-light btn-sm hs-custom-toggle hs-background-alfa p-2 ps-1 border-0\"\n                      style=\"text-align:start; min-width: 11rem; max-width: 11rem; border-radius: 0px; justify-content: space-between; display:flex; align-items: center;\">\n                      {{'COMPOSITONSORTVALUES.' + hsCompositionsCatalogueService.data.sortBy.name | translate}}\n                    </button>\n                    <ul ngbDropdownMenu aria-labelledby=\"sortBy\" class=\"ps-2\"\n                      style=\"overflow-y: auto; max-height: 10rem; min-width:10rem\">\n                      @for (item of hsCompositionsCatalogueService.sortByValues; track item; let index = $index) {\n                        <li\n                          class=\"p-2 p-md-0\">\n                          <label style=\"cursor: pointer;\"><input class=\"me-2\" type=\"radio\"\n                            name=\"sort-index\" [checked]=\"(index === 0)\"\n                            (change)=\"sortByValueChanged(item);sortByDrop.close()\">{{'COMPOSITONSORTVALUES.' + item.name | translate}}</label>\n                        </li>\n                      }\n                    </ul>\n                  </td>\n                </tr>\n                <tr>\n                  <td colspan=\"2\" style=\"text-align: center; vertical-align: middle;\">\n                    <button class=\"btn w-100 btn-light hs-background-alfa\"\n                      style=\"border-radius: 0.25rem;\" (click)=\"clearFilters()\">\n                    {{'COMPOSITIONS.clearFilters' | translate }}</button>\n                  </td>\n                </tr>\n              </tbody>\n            </table>\n          </div>\n          </div>\n        </div>\n      </div>\n    }\n    <div class=\"card d-flex flex-fill border-0\" style=\"font-size: 1rem !important; overflow-y:auto;     overflow-y: auto;\n    border-bottom-right-radius: 0;\n    border-bottom-left-radius: 0;\">\n    <div class=\"card-body border-0\">\n      <ul class=\"list-group\">\n        @for (composition of hsCompositionsCatalogueService.compositionEntries; track composition) {\n          <li\n            [hidden]=\"hsCompositionsCatalogueService.dataLoading\" class=\"list-group-item border-0 border-bottom\"\n            style=\"cursor: pointer;\" [ngClass]=\"{'hs-endpoint-item-active' : composition.highlighted}\"\n            (mouseover)=\"highlightComposition(composition, true)\"\n            (mouseleave)=\"highlightComposition(composition, false)\" (click)=\"compositionClicked(composition)\"\n            data-container=\"body\" data-placement=\"bottom\" [attr.title]=\"composition.abstract\">\n            <hs-compositions-list-item [composition]=\"composition\" [selectedCompId]=\"selectedCompId\">\n            </hs-compositions-list-item>\n          </li>\n        }\n        @if (hsCompositionsCatalogueService.dataLoading) {\n          <li class=\"list-group-item text-primary text-center py-2 border-0\" style=\"font-size: 1.25rem;\"\n            ><span\n          class=\"hs-loader hs-loader-dark pe-2 border-0\"></span>&emsp;{{'COMMON.loading' |\n        translate }}</li>\n      }\n      <li [hidden]=\"hsCompositionsCatalogueService.compositionEntries.length > 0 || hsCompositionsCatalogueService.dataLoading\"\n        class=\"list-group-item text-center\">\n      {{'DATASOURCE_SELECTOR.noResults' | translate }}</li>\n    </ul>\n  </div>\n</div>\n@if (hsCompositionsCatalogueService.matchedRecords !== 0 && !hsCompositionsCatalogueService.dataLoading) {\n  <hs-pager class=\"sticky-bottom bg-white border-0\" [pagerService]=\"hsCompositionsCatalogueService\"></hs-pager>\n}\n</div>\n}\n","import {CUSTOM_ELEMENTS_SCHEMA, NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FormsModule} from '@angular/forms';\n\nimport {\n  NgbAccordionModule,\n  NgbDropdownModule,\n} from '@ng-bootstrap/ng-bootstrap';\nimport {TranslatePipe} from '@ngx-translate/core';\n\nimport {HsClipboardTextComponent} from 'hslayers-ng/common/clipboard-text';\nimport {HsCommonUrlModule} from 'hslayers-ng/components/add-data';\nimport {HsCompositionsComponent} from './compositions.component';\nimport {HsCompositionsDeleteDialogComponent} from './dialogs/delete-dialog.component';\nimport {HsCompositionsListItemComponent} from './compositions-list-item.component';\nimport {HsCompositionsOverwriteDialogComponent} from './dialogs/overwrite-dialog.component';\nimport {HsCompositionsShareDialogComponent} from './dialogs/share-dialog.component';\nimport {HsLaymanCurrentUserComponent} from 'hslayers-ng/common/layman';\nimport {HsPagerModule} from 'hslayers-ng/common/pager';\nimport {\n  HsPanelHeaderComponent,\n  HsPanelHelpersModule,\n} from 'hslayers-ng/common/panels';\n\n@NgModule({\n  schemas: [CUSTOM_ELEMENTS_SCHEMA],\n  declarations: [\n    HsCompositionsComponent,\n    HsCompositionsOverwriteDialogComponent,\n    HsCompositionsDeleteDialogComponent,\n    HsCompositionsShareDialogComponent,\n    HsCompositionsListItemComponent,\n  ],\n  imports: [\n    CommonModule,\n    FormsModule,\n    HsPanelHelpersModule,\n    TranslatePipe,\n    NgbDropdownModule,\n    NgbAccordionModule,\n    HsLaymanCurrentUserComponent,\n    HsPagerModule,\n    HsCommonUrlModule,\n    HsPanelHeaderComponent,\n    HsClipboardTextComponent,\n  ],\n  exports: [HsCompositionsComponent],\n})\nexport class HsCompositionsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","filter","i7.HsCompositionsListItemComponent","i8"],"mappings":"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"}