{"version":3,"file":"c8y-ngx-components-bookmarks.mjs","sources":["../../bookmarks/bookmarks.service.ts","../../bookmarks/edit-bookmarks/edit-bookmarks.component.ts","../../bookmarks/edit-bookmarks/edit-bookmarks.component.html","../../bookmarks/bookmarks.component.ts","../../bookmarks/bookmarks.component.html","../../bookmarks/bookmarks.module.ts","../../bookmarks/c8y-ngx-components-bookmarks.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport {\n  NavigatorNode,\n  NavigatorService,\n  OptionsService,\n  UserPreferencesService\n} from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { TranslateService } from '@ngx-translate/core';\nimport { uniqBy } from 'lodash-es';\nimport { firstValueFrom, map } from 'rxjs';\nimport { Bookmark } from './bookmark.model';\n\n@Injectable({ providedIn: 'root' })\nexport class BookmarkService {\n  private static readonly DEFAULT_ICON = 'bookmark';\n\n  readonly USER_PREFERENCES_BOOKMARKS_KEY = 'bookmarks';\n\n  updatedBookmarks: Bookmark[];\n\n  constructor(\n    private navigatorService: NavigatorService,\n    private options: OptionsService,\n    private router: Router,\n    private translateService: TranslateService,\n    private userPreferencesService: UserPreferencesService\n  ) {}\n\n  async updateBookmarksInStorage(newBookmarks: Bookmark[]): Promise<void> {\n    const existingBookmarks = await this.getBookmarks();\n    const mergedBookmarks = [...newBookmarks, ...existingBookmarks];\n    const cleanedBookmarks = uniqBy(mergedBookmarks, 'id').filter(\n      (bookmark: Bookmark) => !bookmark.markToRemove\n    );\n\n    this.setUserPreferencesBookmarks(cleanedBookmarks);\n  }\n\n  async getActiveNodeIcon(): Promise<string> {\n    const activeNode = await this.findActiveNode();\n    return activeNode?.icon || BookmarkService.DEFAULT_ICON;\n  }\n\n  extractIconName(input: string): string | null {\n    const iconRegex = /\\b(dlt-)?c8y-icon-(\\w+(?:-\\w+)*)\\b/g;\n    const matches = [...input.matchAll(iconRegex)];\n    const match = matches?.pop();\n\n    if (!match) {\n      return null;\n    }\n    const [, prefix, name] = match;\n\n    return prefix ? name : `c8y-${name}`;\n  }\n\n  async getBookmarks(): Promise<Bookmark[]> {\n    return await firstValueFrom(\n      this.userPreferencesService\n        .get(this.USER_PREFERENCES_BOOKMARKS_KEY)\n        .pipe(map((bookmarks: Bookmark[]) => bookmarks ?? []))\n    );\n  }\n\n  generateRandomID() {\n    const array = new Uint8Array(16);\n    crypto.getRandomValues(array);\n\n    return Array.from(array, byte => byte.toString(16).padStart(2, '0')).join('');\n  }\n\n  convertBookmarkLinkToObject(title: string, url: string, icon: string): Bookmark {\n    const globalTitle = this.options.globalTitle ?? 'Cumulocity';\n    return {\n      id: this.generateRandomID(),\n      label: title.includes(globalTitle)\n        ? title.replace(`${globalTitle} - `, '')\n        : this.translateService.instant(gettext('Bookmark')),\n      url,\n      icon\n    };\n  }\n\n  private async findActiveNode(): Promise<NavigatorNode | undefined> {\n    const nodes = await firstValueFrom(this.navigatorService.items$);\n    return this.findActiveInTree(nodes);\n  }\n\n  private findActiveInTree(nodes: NavigatorNode[]): NavigatorNode | undefined {\n    let result: NavigatorNode | undefined;\n\n    for (const node of nodes) {\n      if (node.path && this.isNodeActive(node)) {\n        result = node;\n      }\n      if (node.children?.length) {\n        const childMatch = this.findActiveInTree(node.children);\n        if (childMatch) {\n          result = childMatch;\n        }\n      }\n    }\n\n    return result;\n  }\n\n  private isNodeActive(node: NavigatorNode): boolean {\n    return this.router.isActive(node.path, {\n      paths: node.routerLinkExact ? 'exact' : 'subset',\n      queryParams: 'ignored',\n      fragment: 'ignored',\n      matrixParams: 'ignored'\n    });\n  }\n\n  private setUserPreferencesBookmarks(bookmarks: Bookmark[]): void {\n    this.userPreferencesService.set(this.USER_PREFERENCES_BOOKMARKS_KEY, bookmarks);\n    this.updatedBookmarks = bookmarks;\n  }\n}\n","import {\n  CdkDragDrop,\n  moveItemInArray,\n  CdkDropList,\n  CdkDrag,\n  CdkDragHandle\n} from '@angular/cdk/drag-drop';\nimport { Component, HostListener, Input, OnInit } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  AlertService,\n  PopoverConfirmButtons,\n  PopoverConfirmComponent,\n  IconDirective,\n  C8yTranslateDirective,\n  ListGroupComponent,\n  ListItemComponent,\n  ListItemDragHandleComponent,\n  ListItemIconComponent,\n  ChangeIconComponent,\n  EmptyStateComponent,\n  C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { IconSelectorService } from '@c8y/ngx-components/icon-selector';\nimport { cloneDeep } from 'lodash-es';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { Bookmark } from '../bookmark.model';\nimport { BookmarkService } from '../bookmarks.service';\nimport { NgIf, NgFor } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\n@Component({\n  selector: 'c8y-edit-bookmarks',\n  templateUrl: './edit-bookmarks.component.html',\n  imports: [\n    IconDirective,\n    C8yTranslateDirective,\n    NgIf,\n    ListGroupComponent,\n    CdkDropList,\n    NgFor,\n    ListItemComponent,\n    CdkDrag,\n    ListItemDragHandleComponent,\n    CdkDragHandle,\n    ListItemIconComponent,\n    ChangeIconComponent,\n    FormsModule,\n    PopoverConfirmComponent,\n    EmptyStateComponent,\n    C8yTranslatePipe\n  ]\n})\nexport class EditBookmarksComponent implements OnInit {\n  @Input() bookmarks: Bookmark[];\n  private bookmarksToUpdate: Bookmark[];\n\n  confirmRemoveColumnButtons: PopoverConfirmButtons[] = [\n    {\n      label: gettext('Cancel'),\n      action: () => Promise.resolve(false)\n    },\n    {\n      label: gettext('Delete'),\n      status: 'danger',\n      action: () => Promise.resolve(true)\n    }\n  ];\n\n  result: Promise<Bookmark[]> = new Promise(resolve => {\n    this._close = resolve;\n  });\n\n  private _close: (value: Bookmark[]) => void;\n\n  constructor(\n    private bsModalRef: BsModalRef,\n    private alertService: AlertService,\n    private bookmarkService: BookmarkService,\n    private iconSelector: IconSelectorService\n  ) {}\n\n  ngOnInit(): void {\n    this.bookmarksToUpdate = cloneDeep(this.bookmarks);\n  }\n\n  @HostListener('document:keydown', ['$event'])\n  handleKeyboardEvent(event: KeyboardEvent) {\n    if (event.key === 'Escape') {\n      this.close();\n    }\n  }\n\n  close(): void {\n    if (this.bookmarkService.updatedBookmarks) {\n      this._close(this.bookmarkService.updatedBookmarks);\n    }\n    this.bsModalRef.hide();\n  }\n\n  async drop(event: CdkDragDrop<Bookmark[]>): Promise<void> {\n    try {\n      moveItemInArray(this.bookmarks, event.previousIndex, event.currentIndex);\n      moveItemInArray(this.bookmarksToUpdate, event.previousIndex, event.currentIndex);\n\n      await this.bookmarkService.updateBookmarksInStorage(this.bookmarksToUpdate);\n      this.alertService.success(gettext('Bookmarks order updated.'));\n    } catch {\n      this.alertService.success(gettext('Bookmarks order failed to update.'));\n    }\n  }\n\n  async updateBookmark(\n    updatedBookmark: Bookmark,\n    type: keyof Pick<Bookmark, 'icon' | 'label' | 'markToRemove'>\n  ): Promise<void> {\n    try {\n      this.bookmarksToUpdate = this.updateBookmarkProperty(updatedBookmark, type);\n      await this.bookmarkService.updateBookmarksInStorage(this.bookmarksToUpdate);\n      if (type !== 'markToRemove') {\n        this.alertService.success(gettext('Bookmark updated.'));\n      }\n    } catch {\n      if (type !== 'markToRemove') {\n        this.alertService.warning(gettext('Bookmark update failed'));\n      }\n    }\n  }\n\n  updateBookmarkProperty(\n    updatedBookmark: Bookmark,\n    type: keyof Pick<Bookmark, 'icon' | 'label' | 'markToRemove'>\n  ): Bookmark[] {\n    const update = {\n      icon: (bookmark: Bookmark) => ({ ...bookmark, icon: updatedBookmark.icon }),\n      label: (bookmark: Bookmark) => ({ ...bookmark, label: updatedBookmark.label }),\n      markToRemove: (bookmark: Bookmark) => ({ ...bookmark, markToRemove: true })\n    }[type];\n\n    return this.bookmarksToUpdate.map(bookmark =>\n      bookmark.id === updatedBookmark.id ? update(bookmark) : bookmark\n    );\n  }\n\n  async changeBookmarkIcon(updatedBookmark: Bookmark): Promise<void> {\n    try {\n      const newIcon = await this.iconSelector.selectIcon();\n      updatedBookmark.icon = newIcon;\n      await this.updateBookmark(updatedBookmark, 'icon');\n    } catch {\n      // nothing to do\n    }\n  }\n\n  async removeBookmark(\n    poConfirm: PopoverConfirmComponent,\n    bookmarkToDelete: Bookmark\n  ): Promise<void> {\n    poConfirm.message = gettext('This action is irreversible.');\n\n    try {\n      const remove = await poConfirm.show(this.confirmRemoveColumnButtons);\n      if (!remove) {\n        return;\n      }\n\n      await this.updateBookmark(bookmarkToDelete, 'markToRemove');\n\n      const bookmarkIndex = this.bookmarks.findIndex(\n        bookmark => bookmark.id === bookmarkToDelete.id\n      );\n\n      if (bookmarkIndex === -1) {\n        return;\n      }\n\n      this.bookmarks.splice(bookmarkIndex, 1);\n      this.alertService.success(gettext('Bookmark removed.'));\n    } catch (err) {\n      /**\n       * Prevents an alert message from being displayed if the user clicks outside of a popover.\n       */\n      if (err) {\n        this.alertService.warning(gettext('Bookmarks deletion failed.'));\n      }\n    }\n  }\n}\n","<div class=\"viewport-modal\">\n  <div class=\"modal-header dialog-header\">\n    <i [c8yIcon]=\"'bookmark'\"></i>\n    <div\n      class=\"h4\"\n      id=\"modal-title\"\n      translate\n    >\n      Bookmarks\n    </div>\n  </div>\n  <div\n    class=\"inner-scroll\"\n    id=\"modal-body\"\n  >\n    <div class=\"p-16 text-center separator-bottom sticky-top bg-component\">\n      <p class=\"text-medium text-16\">\n        {{ 'Reorder, edit or delete bookmarks.' | translate }}\n      </p>\n    </div>\n    <c8y-list-group\n      class=\"cdk-droplist no-border-last\"\n      *ngIf=\"bookmarks.length; else emptyList\"\n      cdkDropList\n      (cdkDropListDropped)=\"drop($event)\"\n      [cdkDropListDisabled]=\"bookmarks?.length < 2\"\n    >\n      <c8y-li\n        *ngFor=\"let bookmark of bookmarks\"\n        cdkDrag\n      >\n        <c8y-li-drag-handle\n          title=\"{{ 'Drag to reorder' | translate }}\"\n          cdkDragHandle\n        >\n          <i c8yIcon=\"drag-reorder\"></i>\n        </c8y-li-drag-handle>\n        <c8y-li-icon\n          style=\"{{ bookmarks?.length < 2 ? 'padding-left: 16px!important' : '' }}\"\n          *ngIf=\"bookmark.icon\"\n        >\n          <c8y-change-icon\n            [currentIcon]=\"bookmark.icon\"\n            (onButtonClick)=\"changeBookmarkIcon(bookmark)\"\n          ></c8y-change-icon>\n        </c8y-li-icon>\n\n        <div class=\"d-flex gap-8 a-i-center\">\n          <form\n            class=\"d-flex flex-grow\"\n            name=\"bookmarksForm\"\n            #bookmarksForm=\"ngForm\"\n          >\n            <div class=\"input-group input-group-editable\">\n              <input\n                class=\"form-control fit-w\"\n                title=\"{{ bookmark.label }}\"\n                id=\"label\"\n                name=\"label\"\n                type=\"text\"\n                [(ngModel)]=\"bookmark.label\"\n                #label=\"ngModel\"\n                maxlength=\"50\"\n                [placeholder]=\"'e.g. My bookmark' | translate\"\n              />\n              <span></span>\n              <div class=\"input-group-btn\">\n                <button\n                  class=\"btn btn-primary\"\n                  title=\"{{ 'Save' | translate }}\"\n                  type=\"submit\"\n                  (click)=\"updateBookmark(bookmark, 'label'); label.control.markAsPristine()\"\n                  [disabled]=\"label.invalid\"\n                >\n                  {{ 'Save' | translate }}\n                </button>\n              </div>\n            </div>\n          </form>\n          <c8y-popover-confirm\n            class=\"d-block\"\n            [title]=\"'Delete bookmark' | translate\"\n            [placement]=\"'left'\"\n            [outsideClick]=\"true\"\n            [adaptivePosition]=\"true\"\n            [container]=\"''\"\n            #poConfirm\n          >\n            <button\n              class=\"btn btn-dot btn-dot--danger m-l-auto\"\n              title=\"{{ 'Delete' | translate }}\"\n              type=\"button\"\n              (click)=\"removeBookmark(poConfirm, bookmark)\"\n            >\n              <i c8yIcon=\"minus-circle\"></i>\n            </button>\n          </c8y-popover-confirm>\n        </div>\n      </c8y-li>\n    </c8y-list-group>\n  </div>\n  <div class=\"modal-footer\">\n    <button\n      class=\"btn btn-default\"\n      title=\"{{ 'Cancel' | translate }}\"\n      type=\"button\"\n      (click)=\"close()\"\n    >\n      {{ 'Close' | translate }}\n    </button>\n  </div>\n</div>\n<ng-template #emptyList>\n  <c8y-ui-empty-state\n    [icon]=\"'bookmark'\"\n    [title]=\"'No bookmarks yet' | translate\"\n    [subtitle]=\"\n      'Navigate to the desired page, open the right drawer and click the &quot;Add current page&quot; button.'\n        | translate\n    \"\n    [horizontal]=\"true\"\n  ></c8y-ui-empty-state>\n</ng-template>\n","import { AsyncPipe } from '@angular/common';\nimport { Component, Inject, DOCUMENT as Document } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { AlertService, HeaderService, IconDirective, C8yTranslatePipe } from '@c8y/ngx-components';\nimport { cloneDeep } from 'lodash-es';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { Observable } from 'rxjs';\nimport { Bookmark } from './bookmark.model';\nimport { BookmarkService } from './bookmarks.service';\nimport { EditBookmarksComponent } from './edit-bookmarks/edit-bookmarks.component';\nimport { TooltipDirective } from 'ngx-bootstrap/tooltip';\n\n@Component({\n  selector: 'c8y-bookmarks',\n  templateUrl: './bookmarks.component.html',\n  imports: [IconDirective, TooltipDirective, C8yTranslatePipe, AsyncPipe]\n})\nexport class BookmarksComponent {\n  drawerOpen$: Observable<boolean>;\n  bookmarks: Bookmark[] = [];\n  emptyMessageHeader = gettext('No bookmarks yet');\n  emptyMessageBody = gettext(\n    'Navigate to the desired page and click the \"Add current page\" button. Editing, deleting and reordering are possible by clicking on the cog wheel.'\n  );\n  addButtonText = gettext('Add current page');\n\n  constructor(\n    @Inject(Document) private document: Document,\n    private alertService: AlertService,\n    private bookmarkService: BookmarkService,\n    private bsModalService: BsModalService,\n    private router: Router,\n    private headerService: HeaderService\n  ) {\n    this.drawerOpen$ = this.headerService.rightDrawerOpen$;\n  }\n\n  async ngOnInit(): Promise<void> {\n    this.bookmarks = await this.bookmarkService.getBookmarks();\n  }\n\n  async addBookmark(): Promise<void> {\n    const currentUrl = this.getRelativeUrl();\n    if (this.bookmarks.some(bookmark => this.toRelativeUrl(bookmark.url) === currentUrl)) {\n      this.alertService.warning(gettext('Bookmark with the same URL is already added.'));\n      return;\n    }\n    const icon = await this.bookmarkService.getActiveNodeIcon();\n    const linkObject = this.bookmarkService.convertBookmarkLinkToObject(\n      this.document.title,\n      currentUrl,\n      icon\n    );\n    this.bookmarks.push(linkObject);\n    await this.bookmarkService.updateBookmarksInStorage(this.bookmarks);\n    this.alertService.success(gettext('Bookmark added.'));\n  }\n\n  async editBookmarks(): Promise<void> {\n    try {\n      const initialState: Pick<EditBookmarksComponent, 'bookmarks'> = {\n        bookmarks: cloneDeep(this.bookmarks)\n      };\n      const modalRef = this.bsModalService.show(EditBookmarksComponent, {\n        class: 'modal-md',\n        ariaDescribedby: 'modal-body',\n        ariaLabelledBy: 'modal-title',\n        initialState: initialState,\n        ignoreBackdropClick: true\n      }).content as EditBookmarksComponent;\n      this.bookmarks = await modalRef.result;\n    } catch (err) {\n      return;\n    }\n  }\n\n  openUrl(url: string): void {\n    if (this.isRelativeUrl(url)) {\n      if (this.isSameApp(url)) {\n        const hash = url.includes('#') ? url.substring(url.indexOf('#') + 1) : '/';\n        this.router.navigateByUrl(hash);\n      } else {\n        window.open(`${location.origin}${url}`, '_self');\n      }\n      return;\n    }\n\n    // Legacy support for absolute URLs stored before the relative URL migration\n    const parsedUrl = new URL(url);\n    const relativePath = `${parsedUrl.pathname}${parsedUrl.hash}`;\n\n    if (this.isSameApp(relativePath)) {\n      const hash = parsedUrl.hash ? parsedUrl.hash.substring(1) : '/';\n      this.router.navigateByUrl(hash);\n    } else {\n      window.open(`${location.origin}${relativePath}`, '_self');\n    }\n  }\n\n  private getRelativeUrl(): string {\n    const { pathname, hash } = this.document.location;\n    return `${pathname}${hash}`;\n  }\n\n  private isRelativeUrl(url: string): boolean {\n    return url.startsWith('/');\n  }\n\n  private isSameApp(url: string): boolean {\n    return url.startsWith(location.pathname);\n  }\n\n  private toRelativeUrl(url: string): string {\n    if (this.isRelativeUrl(url)) {\n      return url;\n    }\n    try {\n      const parsed = new URL(url);\n      return `${parsed.pathname}${parsed.hash}`;\n    } catch {\n      return url;\n    }\n  }\n}\n","<div class=\"separator-top p-t-8 m-t-auto c8y-right-drawer__item sticky-top\">\n  <i c8yIcon=\"bookmark\"></i>\n  <span class=\"text-bold\">{{ 'Bookmarks' | translate }}</span>\n  <button\n    class=\"btn-dot m-l-auto\"\n    [attr.aria-label]=\"'Edit bookmarks' | translate\"\n    [tabindex]=\"(drawerOpen$ | async) ? '0' : '-1'\"\n    tooltip=\"{{ 'Edit bookmarks' | translate }}\"\n    placement=\"left\"\n    container=\"body\"\n    type=\"button\"\n    [adaptivePosition]=\"false\"\n    [delay]=\"500\"\n    (click)=\"editBookmarks()\"\n  >\n    <i\n      class=\"text-14 m-0\"\n      c8yIcon=\"cog\"\n    ></i>\n  </button>\n</div>\n@if (bookmarks?.length) {\n  <div class=\"c8y-right-drawer__item p-t-0 p-b-8\">\n    <button\n      class=\"btn btn-default btn-sm\"\n      [tabindex]=\"(drawerOpen$ | async) ? '0' : '-1'\"\n      type=\"button\"\n      (click)=\"addBookmark()\"\n    >\n      <i\n        class=\"m-t-0 m-b-0 text-14\"\n        c8yIcon=\"plus-circle-o\"\n      ></i>\n      <span>{{ addButtonText | translate }}</span>\n    </button>\n  </div>\n}\n@if (bookmarks?.length) {\n  @for (bookmark of bookmarks; track bookmark.url) {\n    <button\n      class=\"c8y-right-drawer__link\"\n      title=\"{{ bookmark.label }}\"\n      [tabindex]=\"(drawerOpen$ | async) ? '0' : '-1'\"\n      type=\"button\"\n      (click)=\"openUrl(bookmark.url)\"\n    >\n      @if (bookmark.icon) {\n        <i [c8yIcon]=\"bookmark.icon\"></i>\n      }\n      <span class=\"text-truncate\">{{ bookmark.label }}</span>\n    </button>\n  }\n}\n\n<div class=\"p-t-8 p-b-8\">\n  @if (!bookmarks?.length) {\n    <span class=\"c8y-right-drawer__item text-muted text-bold text-14 p-b-0\">\n      {{ emptyMessageHeader | translate }}\n    </span>\n    <span class=\"c8y-right-drawer__item text-12 p-t-0\">\n      <span class=\"text-muted\">{{ emptyMessageBody | translate }}</span>\n    </span>\n    <div class=\"c8y-right-drawer__item\">\n      <button\n        class=\"btn btn-default btn-sm\"\n        [tabindex]=\"(drawerOpen$ | async) ? '0' : '-1'\"\n        type=\"button\"\n        (click)=\"addBookmark()\"\n      >\n        <i\n          class=\"m-t-0 m-b-0 text-14\"\n          c8yIcon=\"plus-circle-o\"\n        ></i>\n        <span>{{ addButtonText | translate }}</span>\n      </button>\n    </div>\n  }\n</div>\n","import { DragDropModule } from '@angular/cdk/drag-drop';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport {\n  ChangeIconComponent,\n  CommonModule,\n  CoreModule,\n  FormsModule as c8yFormsModule,\n  hookDrawer,\n  ListGroupModule,\n  ModalModule\n} from '@c8y/ngx-components';\nimport { BookmarksComponent } from './bookmarks.component';\nimport { EditBookmarksComponent } from './edit-bookmarks/edit-bookmarks.component';\n\n@NgModule({\n  imports: [\n    CoreModule,\n    CommonModule,\n    ListGroupModule,\n    DragDropModule,\n    FormsModule,\n    c8yFormsModule,\n    ModalModule,\n    TooltipModule.forRoot(),\n    ChangeIconComponent,\n    BookmarksComponent,\n    EditBookmarksComponent\n  ],\n  exports: [BookmarksComponent],\n  providers: [\n    hookDrawer({\n      component: BookmarksComponent,\n      position: 'right',\n      priority: 50,\n      id: 'bookmarks'\n    })\n  ]\n})\nexport class BookmarksModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3.BookmarkService","Document","i2.BookmarkService","i3","i4","c8yFormsModule"],"mappings":"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"}