{"version":3,"file":"hslayers-ng-components-save-map.mjs","sources":["../../../projects/hslayers/components/save-map/save-map-manager.service.ts","../../../projects/hslayers/components/save-map/form/advanced-options/advanced-options.component.ts","../../../projects/hslayers/components/save-map/form/advanced-options/advanced-options.component.html","../../../projects/hslayers/components/save-map/form/form.component.ts","../../../projects/hslayers/components/save-map/form/form.component.html","../../../projects/hslayers/components/save-map/save-map.component.ts","../../../projects/hslayers/components/save-map/save-map.component.html","../../../projects/hslayers/components/save-map/save-map.module.ts","../../../projects/hslayers/components/save-map/hslayers-ng-components-save-map.ts"],"sourcesContent":["import {\n  filter,\n  map,\n  Subject,\n  tap,\n  withLatestFrom,\n  merge,\n  lastValueFrom,\n} from 'rxjs';\nimport {FormControl, FormGroup, Validators} from '@angular/forms';\nimport {HttpClient} from '@angular/common/http';\nimport {\n  Injectable,\n  signal,\n  Signal,\n  WritableSignal,\n  inject,\n} from '@angular/core';\n\nimport {\n  AccessRightsModel,\n  CompoData,\n  HsEndpoint,\n  HsGetMapsComposition,\n  LaymanCompositionDescriptor,\n  MapComposition,\n  StatusData,\n  UserData,\n} from 'hslayers-ng/types';\nimport {HsCompositionsParserService} from 'hslayers-ng/services/compositions';\nimport {HsEventBusService} from 'hslayers-ng/services/event-bus';\nimport {\n  HsLaymanService,\n  HsSaveMapService,\n  HsSaverService,\n} from 'hslayers-ng/services/save-map';\nimport {HsLayoutService} from 'hslayers-ng/services/layout';\nimport {HsLogService} from 'hslayers-ng/services/log';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {HsShareService} from 'hslayers-ng/components/share';\nimport {HsCommonLaymanService} from 'hslayers-ng/common/layman';\nimport {toSignal} from '@angular/core/rxjs-interop';\nimport {HsToastService} from 'hslayers-ng/common/toast';\n\nexport class HsSaveMapManagerParams {\n  statusData: StatusData = {\n    success: undefined,\n    canEditExistingComposition: undefined,\n  };\n\n  _access_rights: AccessRightsModel = {\n    'access_rights.write': 'private',\n    'access_rights.read': 'EVERYONE',\n  };\n\n  compoData = new FormGroup({\n    title: new FormControl('', {\n      validators: Validators.required,\n      nonNullable: true,\n    }),\n    name: new FormControl('', {\n      validators: Validators.required,\n      nonNullable: true,\n    }),\n    abstract: new FormControl('', {\n      validators: Validators.required,\n      nonNullable: true,\n    }),\n    workspace: new FormControl<string | undefined>(undefined), //{value: undefined, disabled: true}\n    keywords: new FormControl(''),\n\n    id: new FormControl(''),\n    thumbnail: new FormControl(undefined),\n    access_rights: new FormControl<AccessRightsModel>(this._access_rights),\n  });\n\n  /**\n   * In case user tires to use existing composition name by accident,\n   * we store the composition data here so it can be used to determine proper UI state\n   */\n  existingComposition: WritableSignal<HsGetMapsComposition | undefined> =\n    signal(undefined);\n\n  userData: UserData = {};\n  panelOpened: Subject<any> = new Subject();\n  saveMapResulted: Subject<StatusData | string> = new Subject();\n  preSaveCheckCompleted: Subject<HsEndpoint> = new Subject();\n  currentUser: Signal<string>;\n  missingAbstract = false;\n\n  constructor() {}\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsSaveMapManagerService extends HsSaveMapManagerParams {\n  private hsMapService = inject(HsMapService);\n  private hsSaveMapService = inject(HsSaveMapService);\n  private http = inject(HttpClient);\n  private hsShareService = inject(HsShareService);\n  private hsLaymanService = inject(HsLaymanService);\n  private hsLayoutService = inject(HsLayoutService);\n  private hsEventBusService = inject(HsEventBusService);\n  private hsLogService = inject(HsLogService);\n  private hsCompositionsParserService = inject(HsCompositionsParserService);\n  private hsCommonLaymanService = inject(HsCommonLaymanService);\n  private hsToastService = inject(HsToastService);\n\n  private mapResets = this.hsEventBusService.mapResets.pipe(\n    filter(() => {\n      return (\n        this.hsLayoutService.mainpanel == 'saveMap' ||\n        this.hsLayoutService.mainpanel == 'statusCreator'\n      );\n    }),\n    tap(() => this.resetCompoData()),\n    map(() => undefined),\n  );\n\n  private _currentComposition = merge(\n    //Undefined...\n    this.mapResets,\n    //..or result of omposition loaded\n    this.hsCompositionsParserService.currentCompositionRecord.pipe(\n      withLatestFrom(this.hsEventBusService.compositionLoads),\n      filter(([metadata, composition]) => {\n        return composition.error == undefined;\n      }),\n      map(([metadata, composition]) => {\n        const compositionData = composition.data ?? composition;\n        return [metadata, compositionData];\n      }),\n      tap(([metadata, compositionData]) => {\n        const workspace = metadata['error']\n          ? this.currentUser()\n          : this.parseAccessRights(metadata);\n\n        this.compoData.patchValue({\n          id: compositionData.id,\n          abstract: compositionData.abstract,\n          keywords: compositionData.keywords,\n          workspace: workspace,\n          //NOTE: Keep name last so its valueChange subscription has access to updated values\n          name: compositionData.name,\n          title: compositionData.title,\n          access_rights: this._access_rights,\n        });\n      }),\n      map(([metadata, compositionData]) => {\n        return compositionData;\n      }),\n    ),\n  );\n\n  currentComposition = toSignal(this._currentComposition, {\n    initialValue: undefined,\n  });\n\n  currentCompositionEditable: WritableSignal<boolean> = signal(false);\n\n  parseAccessRights(metadata: LaymanCompositionDescriptor): string {\n    this.currentCompositionEditable.set(true);\n    const workspace = metadata.url.match(/\\/workspaces\\/([^/]+)/)\n      ? metadata.url.match(/\\/workspaces\\/([^/]+)/)[1]\n      : null;\n    const write = metadata.access_rights.write;\n    const read = metadata.access_rights.read;\n    const user = this.hsCommonLaymanService.user();\n    if (user === workspace) {\n      this.privateOrPublic(write, 'write', user);\n      this.privateOrPublic(read, 'read', user);\n    } else if (\n      write.includes(user) ||\n      /**\n       * Different user + PUBLIC write\n       */\n      (write.length == 2 &&\n        [workspace, 'EVERYONE'].every((u) => write.includes(u)))\n    ) {\n      this.privateOrPublic(write, 'write', workspace);\n      this.privateOrPublic(read, 'read', workspace);\n    } else {\n      /**\n       * Not editable composition. Saved composition will have its own access rights\n       * No need to copy existing\n       */\n      this._access_rights[`access_rights.read`] = 'EVERYONE';\n      this._access_rights[`access_rights.write`] = 'private';\n      this.currentCompositionEditable.set(false);\n    }\n\n    return workspace;\n  }\n\n  /**\n   * Transform access rights array received from Layman to simplified version used in HSL\n   * Map access string (read or write) to EVERYONE, private or keep original.\n   */\n  private privateOrPublic(\n    access: string[],\n    type: 'write' | 'read',\n    user: string,\n  ): void {\n    const filtered = access.filter((u) => u !== user);\n    this._access_rights[`access_rights.${type}`] =\n      filtered.length === 0\n        ? 'private'\n        : filtered.length === 1 && filtered[0] === 'EVERYONE'\n          ? filtered[0]\n          : access.join(',');\n  }\n\n  /**\n   * Update composition data object name\n   */\n  updateCompoDataName(name: string) {\n    this.compoData.controls.name.setValue(name);\n  }\n\n  /**\n   * Save composition to external service database\n   * @param saveAsNew - Save as new composition\n   * @param endpoint - Endpoint's description\n   * @returns Promise result of POST\n   */\n  async save(\n    saveAsNew: boolean,\n    endpoint: HsEndpoint,\n  ): Promise<{\n    status: boolean;\n    response?: any;\n    error?: any;\n    reason?: string;\n  }> {\n    const compoDataValue = this.compoData.value;\n    const tempCompoData: CompoData = {\n      ...compoDataValue,\n      /**\n       * In case compoData workspace is not populated (no composition was loaded) check\n       * existingComposition (it will be available in case used tried to use exisitng name by accident and has write access to it)\n       */\n      workspace:\n        compoDataValue.workspace ?? this.existingComposition()?.workspace,\n    };\n\n    const compositionJson = this.generateCompositionJson();\n    let saver: HsSaverService = this.hsShareService;\n    if (endpoint.type.includes('layman')) {\n      saver = this.hsLaymanService;\n    }\n\n    try {\n      const response = await saver.save(\n        compositionJson,\n        tempCompoData,\n        saveAsNew,\n      );\n\n      let isSuccess = false;\n      let reason: string | undefined;\n\n      if (endpoint.type.includes('layman')) {\n        if (saveAsNew) {\n          // Layman success for new composition: response is array with one item having uuid\n          isSuccess =\n            Array.isArray(response) &&\n            response.length === 1 &&\n            response[0]?.uuid !== undefined;\n        } else {\n          // Layman success for updating composition: response directly has uuid\n          isSuccess = response?.uuid !== undefined;\n        }\n\n        // Handle specific Layman conflict case\n        if (!isSuccess && response?.status === 'CONFLICT') {\n          console.warn('Save conflict detected:', response);\n          reason = 'CONFLICT';\n        }\n      } else {\n        // Assume success for share if save() resolves without error\n        isSuccess = true;\n      }\n\n      if (isSuccess) {\n        if (\n          endpoint.type.includes('layman') &&\n          Array.isArray(response) &&\n          response.length === 1\n        ) {\n          const compositionUrl = response[0].url;\n          this.hsCompositionsParserService.current_composition_url =\n            compositionUrl;\n          this.hsEventBusService.compositionLoads.next({\n            ...compositionJson,\n            name: this.compoData.value.name,\n          });\n          return {\n            status: true,\n            response: response,\n            reason: 'SUCCESS',\n          };\n        }\n        return {status: true, response: response};\n      }\n      // General failure or specific non-success case like CONFLICT\n      return {\n        status: false,\n        response: response,\n        reason: reason ?? 'SAVE_FAILED',\n      };\n    } catch (error) {\n      console.error('Error during save operation:', error);\n      return {\n        status: false,\n        error: error,\n        reason: 'EXCEPTION',\n      };\n    }\n  }\n\n  /**\n   * Generate composition JSON for downloading\n   * @param compoData - Additional data for composition\n   * @returns composition JSON\n   */\n  generateCompositionJson(): MapComposition {\n    return this.hsSaveMapService.map2json(\n      this.hsMapService.getMap(),\n      this.compoData.value,\n      this.userData,\n    );\n  }\n\n  /**\n   * Initialization of Save map wizard from outside of component\n   * @param composition - Composition selected from the compositions list\n   */\n  openPanel(composition): void {\n    this.hsLayoutService.setMainPanel('saveMap', true);\n    this.panelOpened.next({composition});\n  }\n\n  /**\n   * Process user's info into controller model, so they can be used in Save composition forms\n   * @param response - HTTP response containing user data\n   */\n  setUserDetails(response): void {\n    const user = response.data;\n    if (user && user.success == true) {\n      // set the values\n      if (user.userInfo) {\n        this.userData.contact.email = user.userInfo.email;\n        this.userData.contact.phone = user.userInfo.phone;\n        this.userData.contact.person =\n          user.userInfo.firstName + ' ' + user.userInfo.lastName;\n      }\n      if (user.userInfo && user.userInfo.org) {\n        this.userData.organization.address = user.userInfo.org.street;\n        this.userData.organization.country = user.userInfo.org.state;\n        this.userData.organization.postalCode = user.userInfo.org.zip;\n        this.userData.organization.city = user.userInfo.org.city;\n        this.userData.organization.name = user.userInfo.org.name;\n      }\n    }\n  }\n\n  /**\n   * Reset locally stored composition's input data to default values\n   */\n  resetCompoData(): void {\n    this.compoData.patchValue({\n      id: '',\n      abstract: '',\n      name: '',\n      keywords: '',\n    });\n  }\n\n  /**\n   * Initiate composition's saving procedure\n   * @param saveAsNew - If true save a new composition, otherwise overwrite to current one\n   */\n  async initiateSave(saveAsNew: boolean): Promise<StatusData> {\n    if (!this.compoData.valid) {\n      this.hsLogService.log('validationfailed');\n      return;\n    }\n    try {\n      const augmentedResponse = await this.save(\n        saveAsNew,\n        this.hsCommonLaymanService.layman(),\n      );\n      return this.processSaveCallback(augmentedResponse);\n    } catch (ex) {\n      this.hsLogService.error(ex);\n      return this.processSaveCallback(ex);\n    }\n  }\n\n  /**\n   * Process response data after saving the composition and display results using toasts\n   * @param response - HTTP response after saving the composition\n   * @returns The StatusData object reflecting the outcome\n   */\n  async processSaveCallback(response): Promise<StatusData> {\n    const res = response.response ?? response;\n    this.statusData.status = res.status;\n    this.statusData.error = undefined; // Reset error\n    this.statusData.resultCode = undefined; // Reset result code\n    this.statusData.overWriteNeeded = false; // Reset overwrite flag\n    this.statusData.canEditExistingComposition = undefined;\n    this.existingComposition.set(undefined);\n\n    if (!response.status) {\n      const error = res.error;\n      this.statusData.error = error;\n      const errorHeader = 'Error saving composition';\n      const errorDetails = error?.['message'] ? [error['message']] : undefined;\n      const reason = error?.detail?.reason;\n      let errorText = 'Could not save composition.'; // Default error text\n\n      if (error?.code === 24) {\n        this.statusData.overWriteNeeded = true;\n        this.updateCompoDataName(error.detail.mapname);\n        this.statusData.resultCode = 'exists';\n        this.hsToastService.show(\n          `Composition '${error.detail.mapname}' already exists. Please choose a different name or overwrite.`,\n          {\n            header: 'Composition exists',\n            type: 'warning',\n            autohide: false, // Keep this visible\n            details: errorDetails,\n          },\n        );\n        this.statusData.canEditExistingComposition =\n          await this.canEditExistingComposition(error.detail.mapname);\n      } else if (error?.code === 32) {\n        this.statusData.resultCode = 'not-saved';\n        errorText = 'Request was processed, but composition was not saved.';\n        this.hsToastService.show(errorText, {\n          header: 'Composition not saved',\n          type: 'warning',\n          details: errorDetails,\n        });\n      } else {\n        this.statusData.resultCode = 'error';\n        // Use generic error text unless specific message exists\n        errorText = error?.['message'] ?? errorText;\n        this.hsToastService.show(errorText, {\n          header: errorHeader,\n          type: 'danger',\n          details: [reason],\n        });\n      }\n    } else {\n      this.statusData.resultCode = 'success';\n      this.hsToastService.show(\n        `Composition '${this.compoData.controls.name.value}' was saved.`,\n        {\n          header: 'Composition saved successfully',\n          type: 'success',\n        },\n      );\n      this.hsLayoutService.setMainPanel('layerManager', true);\n    }\n    return this.statusData;\n  }\n\n  /**\n   * Check if the current user has write access to the composition\n   */\n  async canEditExistingComposition(compositionName: string): Promise<boolean> {\n    try {\n      const layman = this.hsCommonLaymanService.layman();\n      const url = `${layman.url}/rest/maps?full_text_filter=${compositionName}`;\n      const response = await lastValueFrom(\n        this.http.get<any>(url, {\n          headers: {\n            'Content-Type': 'application/json',\n          },\n          withCredentials: true,\n        }),\n      );\n      const write = response[0].access_rights.write;\n      const user = this.hsCommonLaymanService.user();\n      const hasWriteAccess = write.includes(user) || write.includes('EVERYONE');\n      if (hasWriteAccess) {\n        //Update composition data with data of quereid compsition\n        const compositionData = response[0];\n        this.existingComposition.set(compositionData);\n      }\n      return hasWriteAccess;\n    } catch (error) {\n      console.error('Error checking if composition can be edited:', error);\n      return false;\n    }\n  }\n}\n","import {Component, Input, OnDestroy, OnInit, inject} from '@angular/core';\nimport {\n  ControlContainer,\n  FormControl,\n  FormGroup,\n  ReactiveFormsModule,\n} from '@angular/forms';\n\nimport {Layer} from 'ol/layer';\nimport {Source} from 'ol/source';\nimport {TranslatePipe} from '@ngx-translate/core';\n\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {HsSaveMapService} from 'hslayers-ng/services/save-map';\nimport {debounce} from 'hslayers-ng/services/utils';\nimport {\n  getBase,\n  getShowInLayerManager,\n  getTitle,\n} from 'hslayers-ng/common/extensions';\n\nexport type saveMapLayer = {\n  checked: boolean;\n  layer: Layer<Source>;\n  title: string;\n  base: boolean;\n};\n\n@Component({\n  selector: 'hs-save-map-advanced-options',\n  templateUrl: './advanced-options.component.html',\n  viewProviders: [\n    {\n      provide: ControlContainer,\n      useFactory: () => inject(ControlContainer, {skipSelf: true}),\n    },\n  ],\n  imports: [TranslatePipe, ReactiveFormsModule],\n})\nexport class AdvancedOptionsComponent implements OnInit, OnDestroy {\n  parentContainer = inject(ControlContainer);\n  private hsMapService = inject(HsMapService);\n  private hsSaveMapService = inject(HsSaveMapService);\n\n  @Input() thumbnail: HTMLImageElement;\n\n  layers: saveMapLayer[];\n  btnSelectDeselectClicked = true;\n\n  postCompose = debounce(\n    () => {\n      this.setCurrentBoundingBox();\n      this.hsSaveMapService.generateThumbnail(this.thumbnail);\n    },\n    1000,\n    false,\n    this,\n  );\n\n  get parentFormGroup() {\n    return this.parentContainer.control as FormGroup;\n  }\n  visible = false;\n\n  ngOnInit() {\n    this.fillCompositionLayers();\n    this.parentFormGroup.addControl(\n      'bbox',\n      new FormGroup({\n        east: new FormControl(0),\n        south: new FormControl(0),\n        west: new FormControl(0),\n        north: new FormControl(0),\n      }),\n    );\n    //Not using postCompose method because of the delay\n    this.setCurrentBoundingBox();\n    this.hsSaveMapService.generateThumbnail(this.thumbnail);\n\n    this.parentFormGroup.addControl(\n      'layers',\n      new FormControl<saveMapLayer['layer'][]>(this.flattenValues()),\n    );\n\n    this.hsMapService.getMap().on('postcompose', this.postCompose);\n  }\n\n  ngOnDestroy() {\n    this.parentFormGroup.removeControl('bbox');\n    this.parentFormGroup.removeControl('layers');\n    this.hsMapService.getMap().un('postcompose', this.postCompose);\n  }\n\n  /**\n   * Set composition's data bounding box to the current OL map view extent\n   */\n  setCurrentBoundingBox(): void {\n    this.parentFormGroup.patchValue({bbox: this.hsMapService.describeExtent()});\n  }\n\n  onChecklistChange(checked: boolean, layer: saveMapLayer): void {\n    layer.checked = checked;\n    this.parentFormGroup.get('layers').setValue(this.flattenValues());\n  }\n\n  /**\n   * Flatten saveMapLayer type object list into simply OL layer array of selected layers\n   */\n  private flattenValues(): Layer<Source>[] {\n    return this.layers.filter((l) => l.checked).map((l) => l.layer);\n  }\n\n  /**\n   * Get layers which might be saved into composition\n   */\n  fillCompositionLayers(): void {\n    this.layers = this.hsMapService\n      .getMap()\n      .getLayers()\n      .getArray()\n      .filter(\n        (lyr: Layer<Source>) =>\n          getShowInLayerManager(lyr) == undefined ||\n          getShowInLayerManager(lyr) == true,\n      )\n      .map((lyr: Layer<Source>) => {\n        return {\n          title: getTitle(lyr),\n          checked: this.btnSelectDeselectClicked,\n          layer: lyr,\n          base: getBase(lyr),\n        };\n      })\n      .sort((a, b) => {\n        return a.layer.getZIndex() - b.layer.getZIndex();\n      });\n  }\n\n  /**\n   * Select or deselect all available composition's layers\n   */\n  toggleLayers(): void {\n    this.btnSelectDeselectClicked = !this.btnSelectDeselectClicked;\n    this.layers = this.layers.map((l) => {\n      return {...l, checked: this.btnSelectDeselectClicked};\n    });\n    this.parentFormGroup.get('layers').setValue(this.flattenValues());\n  }\n}\n","<fieldset class=\"form\">\n  <div [formGroup]=\"parentFormGroup.controls.bbox\" class=\"mb-3\">\n    <div class=\"d-flex w-100 stc-extent-row\">\n      <div class=\"form-floating px-0\">\n        <input type=\"text\" formControlName=\"east\" class=\"form-control\" id=\"floatingEast\"\n          [title]=\"'COMMON.east' | translate  \">\n        <label for=\"floatingEast\">{{'COMMON.east' | translate }}</label>\n      </div>\n      <div class=\"form-floating px-0\">\n        <input type=\"text\" formControlName=\"south\" class=\"form-control\" id=\"floatingSouth\"\n          [title]=\"'COMMON.south' | translate  \">\n        <label for=\"floatingSouth\">{{'COMMON.south' | translate }}</label>\n      </div>\n      <div class=\"form-floating px-0\">\n        <input type=\"text\" formControlName=\"west\" class=\"form-control\" id=\"floatingWest\"\n          [title]=\"'COMMON.west' | translate  \">\n        <label for=\"floatingWest\">{{'COMMON.west' | translate }}</label>\n      </div>\n      <div class=\"form-floating px-0\">\n        <input type=\"text\" formControlName=\"north\" class=\"form-control\" id=\"floatingNorth\"\n          [title]=\"'COMMON.north' | translate  \">\n        <label for=\"floatingNorth\">{{'COMMON.north' | translate }}</label>\n      </div>\n    </div>\n    <button type=\"button\" class=\"btn text-bg-light border border-top-0 w-100 rounded-0 btn-sm\"\n      (click)=\"setCurrentBoundingBox()\">{{'SAVECOMPOSITION.form.userCurrentMapExtent'\n      | translate }}</button>\n  </div>\n\n  <div class=\"form-group\">\n    <ul class=\"list-group\" id=\"stc-layerlist\">\n\n      @for (layer of layers; track layer; let i = $index) {\n      <li class=\"list-group-item p-0\">\n        <label class=\"form-check-label d-flex align-items-center w-100 p-2\">\n          <input type=\"checkbox\" [value]=\"layer.layer\" (change)=\"onChecklistChange($event.target.checked, layer)\"\n            class=\"form-check-input me-2 mt-0\" [checked]=\"layer.checked\">\n          <span class=\"text-truncate flex-grow-1\" [title]=\"'LAYERS.' + layer.title | translate : {fallbackValue: layer.title} \">\n            {{'LAYERS.' + layer.title | translate : {fallbackValue: layer.title} }}\n          </span>\n          @if(layer.base) {\n          <i class=\"fa-solid fa-map-location-dot text-secondary\" [title]=\"'COMMON.base' | translate\"></i>\n          }\n        </label>\n      </li>\n      }\n      <li class=\"list-group-item\" style=\"padding: 3px\">\n        <div class=\"d-flex w-100 justify-content-center\">\n          <button type=\"button\" class=\"mt-1 btn btn-primary\" (click)=\"toggleLayers()\">{{'SAVECOMPOSITION.form.toggleAll'\n            |\n            translate }}</button>\n        </div>\n      </li>\n    </ul>\n\n  </div>\n</fieldset>\n","import {AsyncPipe} from '@angular/common';\nimport {\n  Component,\n  computed,\n  inject,\n  input,\n  signal,\n  Output,\n  EventEmitter,\n} from '@angular/core';\nimport {NgbTooltipModule} from '@ng-bootstrap/ng-bootstrap';\nimport {takeUntilDestroyed, toSignal} from '@angular/core/rxjs-interop';\nimport {startWith, Observable, map, debounceTime} from 'rxjs';\nimport {TranslatePipe} from '@ngx-translate/core';\nimport {ReactiveFormsModule} from '@angular/forms';\n\nimport {AccessRightsModel} from 'hslayers-ng/types';\nimport {HsLayoutService} from 'hslayers-ng/services/layout';\nimport {HsSaveMapManagerService} from '../save-map-manager.service';\nimport {\n  getLaymanFriendlyLayerName,\n  HsCommonLaymanAccessRightsComponent,\n  HsCommonLaymanService,\n  HsLaymanCurrentUserComponent,\n} from 'hslayers-ng/common/layman';\nimport {HsCompositionsParserService} from 'hslayers-ng/services/compositions';\nimport {AdvancedOptionsComponent} from './advanced-options/advanced-options.component';\n\n@Component({\n  selector: 'hs-save-map-form',\n  templateUrl: './form.component.html',\n  imports: [\n    AsyncPipe,\n    ReactiveFormsModule,\n    NgbTooltipModule,\n    TranslatePipe,\n    AdvancedOptionsComponent,\n    HsCommonLaymanAccessRightsComponent,\n    HsLaymanCurrentUserComponent,\n  ],\n})\nexport class HsSaveMapFormComponent {\n  hsSaveMapManagerService = inject(HsSaveMapManagerService);\n  private hsLayoutService = inject(HsLayoutService);\n\n  @Output() download = new EventEmitter<void>();\n  private hsCommonLaymanService = inject(HsCommonLaymanService);\n  private hsCompositionsParserService = inject(HsCompositionsParserService);\n\n  local = input<boolean>(false);\n\n  /**\n   *  Check if current user can overwrite the composition data\n   */\n  canOverwrite = this.hsSaveMapManagerService.currentCompositionEditable;\n  overwriteNecessary = signal(false);\n  isEditable = this.hsSaveMapManagerService.currentCompositionEditable;\n\n  currentComposition = toSignal(\n    this.hsCompositionsParserService.currentCompositionRecord,\n    {\n      initialValue: null,\n    },\n  );\n\n  compoWorkspace = toSignal(\n    this.hsSaveMapManagerService.compoData.controls.workspace.valueChanges.pipe(\n      startWith(\n        this.hsSaveMapManagerService.compoData.controls.workspace.value,\n      ),\n    ),\n    {\n      initialValue: null,\n    },\n  );\n\n  showNameInput = signal(false);\n  compoName = toSignal(\n    this.hsSaveMapManagerService.compoData.controls.name.valueChanges.pipe(\n      startWith(this.hsSaveMapManagerService.compoData.controls.name.value),\n      debounceTime(250),\n    ),\n  );\n\n  isMyComposition = computed(() => {\n    return this.compoWorkspace() === this.hsCommonLaymanService.user();\n  });\n\n  compositionWithThisNameExists = computed(() => {\n    const currentCompositionName =\n      this.hsSaveMapManagerService.currentComposition()?.name;\n    const currentFormName = this.compoName();\n    const existingCompositionName =\n      this.hsSaveMapManagerService.existingComposition()?.name;\n    return (\n      currentFormName === currentCompositionName ||\n      currentFormName === existingCompositionName\n    );\n  });\n\n  availableActions = computed(() => {\n    const exists = this.compositionWithThisNameExists();\n    const overwriteNecessary = this.overwriteNecessary();\n    if (overwriteNecessary) {\n      if (exists) {\n        return this.hsSaveMapManagerService.statusData\n          .canEditExistingComposition\n          ? ['overwrite', 'rename']\n          : ['rename'];\n      }\n      //Name was changed and is no longer same as existing composition\n      return ['save'];\n    }\n\n    if (!this.isEditable()) {\n      return ['save'];\n    }\n    if (this.isMyComposition()) {\n      return exists ? ['overwrite', 'rename'] : ['save'];\n    }\n    if (this.isEditable()) {\n      return exists ? ['overwrite', 'rename'] : ['save'];\n    }\n    return ['save'];\n  });\n\n  canRename = computed(() => {\n    return this.availableActions().includes('rename');\n  });\n\n  contextTooltipText = computed(() => {\n    const result = {text: '', iconClass: 'fa-solid fa-circle-info'};\n    if (!this.isEditable()) {\n      result.text = 'SAVECOMPOSITION.form.noWriteAccess';\n      result.iconClass = 'fa-solid fa-lock';\n    } else if (this.isMyComposition()) {\n      if (this.compositionWithThisNameExists()) {\n        result.text = 'SAVECOMPOSITION.form.myCompositionExists';\n        result.iconClass = 'fa-solid fa-user-pen';\n      } else {\n        result.text = 'SAVECOMPOSITION.form.readyToSave';\n        result.iconClass = 'fa-solid fa-check-circle';\n      }\n    } else if (this.isEditable()) {\n      if (this.compositionWithThisNameExists()) {\n        result.text = 'SAVECOMPOSITION.form.writeAccessExists';\n        if (!this.isMyComposition()) {\n          result.text = 'SAVECOMPOSITION.form.ownedBy';\n        }\n        result.iconClass = 'fa-solid fa-pencil';\n      } else {\n        result.text = 'SAVECOMPOSITION.form.writeAccessSave';\n        result.iconClass = 'fa-solid fa-check-circle';\n      }\n    }\n    return result;\n  });\n\n  downloadableData: string;\n  extraFormOpened = '';\n\n  isVisible: Observable<boolean>;\n\n  constructor() {\n    this.isVisible = this.hsLayoutService.mainpanel$.pipe(\n      startWith(this.hsLayoutService.mainpanel),\n      map((panel) => {\n        return panel === 'saveMap';\n      }),\n    );\n\n    this.hsSaveMapManagerService.compoData.controls.title.valueChanges\n      .pipe(debounceTime(250), takeUntilDestroyed())\n      .subscribe((title) => {\n        /**\n         * Update name only if user is not editing the composition\n         * or if the composition is not editable\n         */\n        const shouldUpdateName =\n          !this.showNameInput() &&\n          (!this.currentComposition() || !this.isEditable());\n        if (shouldUpdateName) {\n          this.hsSaveMapManagerService.compoData.patchValue({\n            name: getLaymanFriendlyLayerName(title),\n          });\n        }\n      });\n  }\n\n  /**\n   * Set extra form that will get opened\n   * @param form - Form name that needs to be opened\n   */\n  setExtraFormTo(form: string): void {\n    if (this.extraFormOpened === form) {\n      this.extraFormOpened = '';\n    } else {\n      this.extraFormOpened = form;\n    }\n  }\n\n  /**\n   * Manually set access rights on form as component itself is not compatible with reactive forms\n   */\n  setAccessRights(data: AccessRightsModel) {\n    this.hsSaveMapManagerService.compoData.patchValue({\n      access_rights: data,\n    });\n  }\n\n  /**\n   * Triggered when composition's abstract input field receives user's input\n   */\n  abstractChanged(): void {\n    this.hsSaveMapManagerService.missingAbstract = false;\n  }\n\n  /**\n   * Visual clue for user to rename the composition\n   */\n  rename(): void {\n    this.showNameInput.set(true);\n    setTimeout(() => {\n      this.hsLayoutService.layoutElement\n        .querySelector('[name=\"hs-save-map-name\"]')\n        .focus();\n    }, 100);\n  }\n\n  /**\n   * Initiate composition's saving procedure\n   * @param newSave - If true save a new composition, otherwise overwrite to current one\n   */\n  async initiateSave(newSave: boolean): Promise<void> {\n    /***\n     * Overwriting composition of other user and making it private\n     *  = access for owner + current user\n     */\n    const currentUser = this.hsCommonLaymanService.user();\n    const workspace =\n      this.hsSaveMapManagerService.compoData.get('workspace').value;\n    if (newSave == false && this.canOverwrite() && currentUser !== workspace) {\n      const access =\n        this.hsSaveMapManagerService.compoData.get('access_rights');\n      this.hsSaveMapManagerService.compoData.patchValue({\n        access_rights: {\n          ...access.value,\n          'access_rights.write': [workspace, currentUser].join(','),\n        },\n      });\n    }\n    await this.hsSaveMapManagerService.initiateSave(newSave);\n    this.overwriteNecessary.set(\n      this.hsSaveMapManagerService.statusData.overWriteNeeded,\n    );\n  }\n}\n","@if (isVisible | async) {\n<form class=\"form\" [formGroup]=\"hsSaveMapManagerService.compoData\" (ngSubmit)=\"initiateSave(true)\" #compoForm=\"ngForm\">\n  <div class=\"hs-form-thumbnail-container d-flex flex-reverse align-items-center mb-3 justify-content-between\">\n    <hs-layman-current-user class=\"d-block pb-5\" />\n    <img #compositionThumbnail class=\"hs-stc-thumbnail img-thumbnail mt-1 d-block\"\n      [alt]=\"'SAVECOMPOSITION.compositionThumbnail' | translate \" width=\"200\" height=\"200\">\n  </div>\n  <div class=\"form-floating mb-2\">\n    <input type=\"text\" class=\"form-control\" formControlName=\"title\"\n      [class.is-invalid]=\"hsSaveMapManagerService.compoData.controls.title.invalid  && compoForm.touched\"\n      name=\"hs-save-map-titlse\" [placeholder]=\"'COMMON.title' | translate  \">\n    <label for=\"hs-save-map-name\">{{'COMMON.title' | translate }} *</label>\n  </div>\n  @if(showNameInput()) {\n  <div class=\"form-floating mb-2\">\n    <input type=\"text\" class=\"form-control\" formControlName=\"name\"\n      [class.is-invalid]=\"hsSaveMapManagerService.compoData.controls.name.invalid  && compoForm.touched\"\n      name=\"hs-save-map-name\" [placeholder]=\"'COMMON.name' | translate  \">\n    <label for=\"hs-save-map-name\">{{'COMMON.name' | translate }} *</label>\n  </div>\n  }\n  <div class=\"form-floating mb-2\">\n    <textarea formControlName=\"abstract\" class=\"form-control\" name=\"hs-save-map-abstract\"\n      [class.is-invalid]=\"hsSaveMapManagerService.compoData.controls.abstract.invalid  && compoForm.touched\"\n      [placeholder]=\"'COMMON.abstract' | translate  \"></textarea>\n    <label for=\"hs-save-map-abstract\">{{'COMMON.abstract' | translate }} *</label>\n  </div>\n  <div class=\"form-floating mb-2\">\n    <input type=\"text\" class=\"form-control\" name=\"hs-save-map-keywords\" [placeholder]=\"'COMMON.keywords' | translate\">\n    <label for=\"hs-save-map-keywords\">{{'COMMON.keywords' | translate }}</label>\n  </div>\n\n  @if(!local()) {\n  <hs-layman-access-rights [collapsed]=\"true\" class=\"d-block pt-2\"\n    [(access_rights)]=\"hsSaveMapManagerService._access_rights\" (access_rights_changed)=\"setAccessRights($event)\">\n  </hs-layman-access-rights>\n  }\n\n  <div class=\"mb-2 d-flex justify-content-center\">\n    <button type=\"button\" class=\"btn btn-secondary me-2 w-50 dropdown-toggle\" id=\"stc-advanced-options\"\n      (click)=\"setExtraFormTo('advancedOptions')\">{{'COMMON.advancedOptions' | translate }}</button>\n  </div>\n  <hs-save-map-advanced-options [thumbnail]=\"compositionThumbnail\"\n    [hidden]=\"extraFormOpened !== 'advancedOptions'\"></hs-save-map-advanced-options>\n\n  <!-- Tooltip Template -->\n  <ng-template #contextTooltipContent>\n    <div class=\"d-flex align-items-center p-1\" style=\"text-align: left;\">\n      <i [class]=\"contextTooltipText().iconClass + ' me-2 fs-5'\"></i>\n      <span>{{ contextTooltipText().text | translate:{workspace: compoWorkspace()} }}</span>\n    </div>\n  </ng-template>\n\n  <div class=\"d-flex gap-2 flex-wrap mt-4 align-items-center justify-content-end\"\n    [class.justify-content-between]=\"!local()\">\n\n    @if(local()) {\n    <button mainButton type=\"button\" class=\"btn btn-sm btn-outline-primary border-0 align-items-center d-flex gap-2\"\n      (click)=\"download.emit()\">\n      {{'COMMON.download' | translate}}\n      <i class=\"fa-solid fa-floppy-disk\"></i>\n    </button>\n    }\n    @else{\n\n    @if(currentComposition() && compositionWithThisNameExists()) {\n    <i class=\"fa-solid fa-circle-info text-secondary fs-4 me-2\" style=\"cursor:help;\" [autoClose]=\"'outside'\"\n      [ngbTooltip]=\"contextTooltipContent\" placement=\"top\">\n    </i>\n    }\n\n    <div class=\"d-flex gap-2 flex-wrap justify-content-end flex-fill\">\n      @for(action of availableActions(); track action) {\n      @switch (action) {\n      @case ('rename') {\n      <button type=\"button\" class=\"btn btn-success\" id=\"btn-create-new\" (click)=\"rename()\">\n        <i class=\"fa-solid fa-pencil me-1\"></i>\n        {{'SAVECOMPOSITION.form.changeName' | translate }}\n      </button>\n      }\n      @case ('overwrite') {\n      <button type=\"button\" class=\"btn btn-warning\" (click)=\"initiateSave(false)\" id=\"btn-overwrite\">\n        <i class=\"fa-solid fa-rotate-right me-1\"></i>\n        {{'COMMON.update' | translate }}\n      </button>\n      }\n      @case ('save') {\n      <button type=\"submit\" class=\"btn btn-success\" id=\"btn-create-new\">\n        <i class=\"fa-solid fa-plus me-1\"></i>\n        {{'SAVECOMPOSITION.form.saveAsNew' | translate }}\n      </button>\n      }\n      }\n      }\n    </div>\n    }\n  </div>\n</form>\n}","import {Component, OnInit, inject} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\n\nimport {HsCommonEndpointsService} from 'hslayers-ng/services/endpoints';\nimport {HsCommonLaymanService} from 'hslayers-ng/common/layman';\nimport {HsConfig} from 'hslayers-ng/config';\nimport {HsPanelBaseComponent} from 'hslayers-ng/common/panels';\nimport {HsSaveMapManagerService} from './save-map-manager.service';\nimport {HsSaveMapService} from 'hslayers-ng/services/save-map';\nimport {filter} from 'rxjs';\n\n@Component({\n  selector: 'hs-save-map',\n  templateUrl: './save-map.component.html',\n  styles: `\n    .divider {\n      width: 80%;\n      height: 1px;\n      background-color: var(--bs-gray);\n      margin: 1.5rem 0;\n      align-self: center;\n    }\n  `,\n  standalone: false,\n})\nexport class HsSaveMapComponent extends HsPanelBaseComponent implements OnInit {\n  private hsConfig = inject(HsConfig);\n  private hsSaveMapManagerService = inject(HsSaveMapManagerService);\n  private hsCommonLaymanService = inject(HsCommonLaymanService);\n  private hsCommonEndpointsService = inject(HsCommonEndpointsService);\n  private hsSaveMapService = inject(HsSaveMapService);\n\n  name = 'saveMap';\n\n  isAuthenticated = this.hsCommonLaymanService.isAuthenticated;\n  localDownload = false;\n\n  ngOnInit() {\n    super.ngOnInit();\n\n    this.hsLayoutService.mainpanel$\n      .pipe(\n        takeUntilDestroyed(this.destroyRef),\n        filter((panel) => panel !== 'saveMap'),\n      )\n      .subscribe((panel) => {\n        this.localDownload = false;\n      });\n\n    window.addEventListener('beforeunload', () => {\n      if (this.hsConfig.saveMapStateOnReload) {\n        this.hsSaveMapService.save2storage();\n      }\n    });\n  }\n\n  /**\n   * Save map composition as json file\n   */\n  saveCompoJson(): void {\n    const compositionJSON =\n      this.hsSaveMapManagerService.generateCompositionJson();\n    const file = new Blob([JSON.stringify(compositionJSON)], {\n      type: 'application/json',\n    });\n\n    // Create a temporary anchor element\n    const a = document.createElement('a');\n    const url = URL.createObjectURL(file);\n    a.href = url;\n    a.download =\n      this.hsSaveMapManagerService.compoData.controls.name.value ||\n      'composition'; // Use form name or default\n    document.body.appendChild(a); // Append to body\n    a.click(); // Programmatically click the anchor\n\n    // Clean up: remove the anchor and revoke the URL\n    setTimeout(() => {\n      document.body.removeChild(a);\n      window.URL.revokeObjectURL(url);\n    }, 0);\n  }\n}\n","@if (isVisible$ | async) {\n<div class=\"card panel-default hs-main-panel mainpanel hs-stc-mainpanel\" [ngClass]=\"panelWidthClass\">\n  <hs-panel-header name=\"saveMap\" [panelTabs]=\"'SAVECOMPOSITION'\">\n    @if (isAuthenticated() ) {\n    <button mainButton class=\"btn btn-sm btn-outline-primary border-0 align-items-center d-flex gap-2\"\n      (click)=\"saveCompoJson()\"> {{'COMMON.download' | translate}}\n      <i class=\"fa-solid fa-floppy-disk\"></i>\n    </button>\n    }\n  </hs-panel-header>\n  <div class=\"card-body\">\n    @if(isAuthenticated() || localDownload) {\n    @defer {\n    <hs-save-map-form [local]=\"localDownload\" (download)=\"saveCompoJson()\" />\n    }\n    } @else {\n    <div class=\"alert alert-info text-gray mt-5 d-flex flex-column align-items-center gap-3 text-center \">\n      <i class=\"fa-solid fa-lock fs-1\"></i>\n      {{'SAVECOMPOSITION.panelMd.youAreNotAuthorized' | translate }}\n      <hs-layman-current-user class=\"d-block\" />\n      <div class=\"divider\"></div>\n      <button mainButton type=\"button\" class=\"btn btn-sm btn-outline-primary border-0 align-items-center d-flex gap-2\"\n        (click)=\"localDownload = !localDownload\"> {{'SAVECOMPOSITION.setupAndDownload' | translate}}\n        <i class=\"fa-solid fa-floppy-disk\"></i>\n      </button>\n    </div>\n    }\n  </div>\n</div>\n}\n","import {CUSTOM_ELEMENTS_SCHEMA, NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {TranslatePipe} from '@ngx-translate/core';\n\nimport {HsLaymanCurrentUserComponent} from 'hslayers-ng/common/layman';\nimport {\n  HsPanelHeaderComponent,\n  HsPanelHelpersModule,\n} from 'hslayers-ng/common/panels';\nimport {HsSaveMapComponent} from './save-map.component';\nimport {HsSaveMapFormComponent} from './form/form.component';\n\n@NgModule({\n  schemas: [CUSTOM_ELEMENTS_SCHEMA],\n  declarations: [HsSaveMapComponent],\n  imports: [\n    CommonModule,\n    HsPanelHelpersModule,\n    TranslatePipe,\n    HsLaymanCurrentUserComponent,\n    HsPanelHeaderComponent,\n    HsSaveMapFormComponent,\n  ],\n  exports: [HsSaveMapComponent],\n})\nexport class HsSaveMapModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i5.HsSaveMapFormComponent"],"mappings":"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"}