{"version":3,"file":"hslayers-ng-common-dialog-set-permissions.mjs","sources":["../../../projects/hslayers/common/dialog-set-permissions/set-permissions.component.ts","../../../projects/hslayers/common/dialog-set-permissions/set-permissions.component.html","../../../projects/hslayers/common/dialog-set-permissions/hslayers-ng-common-dialog-set-permissions.ts"],"sourcesContent":["import {\n  ChangeDetectionStrategy,\n  Component,\n  OnInit,\n  signal,\n  ViewRef,\n  WritableSignal,\n  inject,\n} from '@angular/core';\nimport {TranslatePipe} from '@ngx-translate/core';\n\nimport {\n  AccessRightsModel,\n  HsAddDataLaymanLayerDescriptor,\n  HsEndpoint,\n  UpsertLayerObject,\n} from 'hslayers-ng/types';\nimport {\n  HsCommonLaymanAccessRightsComponent,\n  HsCommonLaymanService,\n  PostPatchLayerResponse,\n} from 'hslayers-ng/common/layman';\nimport {\n  HsDialogComponent,\n  HsDialogContainerService,\n  HsDialogItem,\n} from 'hslayers-ng/common/dialogs';\nimport {HsLaymanService} from 'hslayers-ng/services/save-map';\n\n@Component({\n  selector: 'hs-set-permissions-dialog',\n  templateUrl: './set-permissions.component.html',\n  imports: [TranslatePipe, HsCommonLaymanAccessRightsComponent],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HsSetPermissionsDialogComponent\n  implements HsDialogComponent, OnInit\n{\n  hsCommonLaymanService = inject(HsCommonLaymanService);\n  private hsDialogContainerService = inject(HsDialogContainerService);\n  private hsLaymanService = inject(HsLaymanService);\n\n  dialogItem: HsDialogItem;\n  viewRef: ViewRef;\n  access_rights: AccessRightsModel = {\n    'access_rights.write': 'private',\n    'access_rights.read': 'EVERYONE',\n  };\n  /**\n   * @param onPermissionSaved - Callback method as service instance and method name.\n   * Pass service as property to not pollute the component\n   * and because component is constructed dynamically via dialog service (no input)\n   */\n  data: {\n    recordType: string;\n    selectedRecord: HsAddDataLaymanLayerDescriptor;\n    onPermissionSaved: {\n      service: any;\n      method: string;\n    };\n  };\n  endpoint: HsEndpoint;\n  state: WritableSignal<'idle' | 'loading' | 'success' | 'error'> =\n    signal('idle');\n\n  ngOnInit(): void {\n    // Can set permission for Layman endpoint only\n    this.endpoint = this.hsCommonLaymanService.layman();\n    if (!this.data.selectedRecord?.access_rights || !this.endpoint) {\n      this.close();\n      return;\n    }\n    this.parseCurrentPermissions();\n  }\n\n  /**\n   * Parse current permissions for the selected record\n   * so it can be used for Layman access rights component\n   */\n  parseCurrentPermissions(): void {\n    const currentUser = this.hsCommonLaymanService.user();\n    let read: string[] = this.data.selectedRecord.access_rights.read;\n    let write: string[] = this.data.selectedRecord.access_rights.write;\n    if (read.includes('EVERYONE')) {\n      read = read.filter((r) => r != currentUser);\n    }\n    if (write.includes('EVERYONE')) {\n      write = write.filter((r) => r != currentUser);\n    }\n    this.access_rights['access_rights.read'] =\n      read.length == 1 && read[0] == currentUser ? 'private' : read.join(',');\n    this.access_rights['access_rights.write'] =\n      write.length == 1 && write[0] == currentUser\n        ? 'private'\n        : write.join(',');\n  }\n\n  /**\n   * Close the dialog\n   */\n  close(): void {\n    this.hsDialogContainerService.destroy(this);\n  }\n\n  /**\n   * Save permissions for selected record\n   */\n  async savePermissions(): Promise<void> {\n    let response: PostPatchLayerResponse | any;\n    this.state.set('loading');\n    switch (this.data.recordType) {\n      case 'layer':\n        const layerDesc: UpsertLayerObject = {\n          name: this.data.selectedRecord.name,\n          title: this.data.selectedRecord.title,\n          workspace: this.hsCommonLaymanService.user(),\n          access_rights: this.access_rights,\n        };\n        response = await this.hsLaymanService.makeUpsertLayerRequest(\n          null,\n          layerDesc,\n        );\n        if (response?.error) {\n          console.error('Error saving layer permissions', response.error);\n          this.state.set('error');\n          break;\n        }\n        this.state.set('success');\n        this.data.onPermissionSaved.service[\n          this.data.onPermissionSaved.method\n        ]();\n        break;\n      case 'composition':\n        await this.hsLaymanService.updateCompositionAccessRights(\n          this.data.selectedRecord.name,\n          this.access_rights,\n        );\n        if (response?.error) {\n          console.error('Error saving composition permissions', response.error);\n          this.state.set('error');\n          break;\n        }\n        this.state.set('success');\n        this.data.onPermissionSaved.service[\n          this.data.onPermissionSaved.method\n        ]();\n        break;\n      default:\n    }\n    setTimeout(() => {\n      this.state.set('idle');\n    }, 3500);\n  }\n}\n","<div class=\"modal in hs-set-permissions-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\">{{'COMMON.selectAndSavePermissions' | translate}}: {{data.selectedRecord.name}}</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=\"overflow-y:auto\">\n        <hs-layman-access-rights [(access_rights)]=\"access_rights\">\n        </hs-layman-access-rights>\n        <div class=\"modal-footer pe-0\">\n          @switch (state()) {\n          @case ('idle') {\n          <button type=\"button\" class=\"btn btn-primary\" (click)=\"savePermissions()\" data-dismiss=\"modal\">{{'COMMON.save'\n            | translate }}</button>\n          }\n          @case ('loading') {\n          <button type=\"button\" class=\"btn btn-outline-primary disabled\">{{'COMMON.saving'\n            | translate }}<span class=\"pe-2 hs-loader hs-loader-dark\"></span></button>\n          }\n          @case ('success') {\n          <button (click)=\"close()\" type=\"button\"\n            class=\"btn btn-success align-items-center d-flex justify-content-around gap-2\">{{'COMMON.done'\n            | translate }}\n            <i class=\"fa-solid fa-square-check\"></i>\n          </button>\n          }\n          @case ('error') {\n          <button type=\"button\" class=\"btn btn-outline-danger disabled \">{{'COMMON.somethingWentWrong'\n            | translate }}</button>\n          }\n          }\n          @if (state() !== 'success') {\n          <button type=\"button\" class=\"btn btn-secondary\" (click)=\"close()\" data-dismiss=\"modal\">{{'COMMON.cancel'\n            | translate }}</button>\n          }\n        </div>\n      </div>\n    </div>\n  </div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}