{"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 { gettext, OptionsService, UserPreferencesService } from '@c8y/ngx-components';\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  readonly USER_PREFERENCES_BOOKMARKS_KEY = 'bookmarks';\n\n  updatedBookmarks: Bookmark[];\n\n  constructor(\n    private translateService: TranslateService,\n    private userPreferencesService: UserPreferencesService,\n    private options: OptionsService\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  getCurrentActiveNodeIcon(document: Document): string {\n    const BOOKMARK = 'bookmark';\n\n    const iconElement = this.getIconElement(document);\n\n    if (!iconElement) {\n      return BOOKMARK;\n    }\n\n    const iconClassName = iconElement.className;\n    const iconName = this.extractIconName(iconClassName);\n    return iconName || BOOKMARK;\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 getIconElement(document: Document): HTMLElement | null {\n    const currentActiveNode = document.querySelectorAll('.link.active') as NodeList;\n    if (!currentActiveNode.length) {\n      return null;\n    }\n    const activeNode = currentActiveNode.item(0) as HTMLElement;\n    return activeNode.firstElementChild.firstChild as HTMLElement;\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 { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { Component, HostListener, Input, OnInit } from '@angular/core';\nimport {\n  AlertService,\n  gettext,\n  PopoverConfirmButtons,\n  PopoverConfirmComponent\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';\n\n@Component({\n  selector: 'c8y-edit-bookmarks',\n  templateUrl: './edit-bookmarks.component.html'\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          class=\"icon-24 p-relative changeIcon a-s-stretch\"\n          style=\"{{ bookmarks?.length < 2 ? 'padding-left: 16px!important' : '' }}\"\n          *ngIf=\"bookmark.icon\"\n        >\n          <i [c8yIcon]=\"bookmark.icon\"></i>\n          <button\n            class=\"btn btn-default btn-xs\"\n            [attr.aria-label]=\"'Change icon' | translate\"\n            tooltip=\"{{ 'Change icon' | translate }}\"\n            placement=\"top\"\n            container=\"body\"\n            type=\"button\"\n            [delay]=\"500\"\n            [adaptivePosition]=\"false\"\n            (click)=\"changeBookmarkIcon(bookmark)\"\n          >\n            <i c8yIcon=\"replace\"></i>\n          </button>\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 { DOCUMENT as Document } from '@angular/common';\nimport { Component, Inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { AlertService, gettext, HeaderService } from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\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';\n\n@Component({\n  selector: 'c8y-bookmarks',\n  templateUrl: './bookmarks.component.html'\n})\nexport class BookmarksComponent {\n  drawerOpen$: Observable<boolean>;\n  bookmarks: Bookmark[];\n  emptyMessageHeader = this.translateService.instant(gettext('No bookmarks yet'));\n  emptyMessageBody = this.translateService.instant(\n    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  );\n  addButtonText = this.translateService.instant(gettext('Add current page'));\n\n  constructor(\n    @Inject(Document) private document: Document,\n    private translateService: TranslateService,\n    private bookmarksService: BookmarkService,\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 currentHref = this.document.location.href;\n    if (this.bookmarks.some(bookmark => bookmark.url === currentHref)) {\n      this.alertService.warning(gettext('Bookmark with the same URL is already added.'));\n      return;\n    }\n    const linkObject = this.bookmarkService.convertBookmarkLinkToObject(\n      this.document.title,\n      currentHref,\n      this.bookmarksService.getCurrentActiveNodeIcon(this.document)\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    const parsedUrl = new URL(url);\n\n    if (\n      parsedUrl.hostname === location.hostname &&\n      parsedUrl.pathname.includes(location.pathname)\n    ) {\n      this.router.navigateByUrl(parsedUrl.hash.substring(1));\n      return;\n    }\n\n    // only possible if the external bookmark URL has been saved using the API\n    if (parsedUrl.hostname !== location.hostname) {\n      return;\n    }\n\n    window.open(url, '_self');\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    tooltip=\"{{ 'Edit bookmarks' | translate }}\"\n    [attr.aria-label]=\"'Edit bookmarks' | translate\"\n    container=\"body\"\n    placement=\"left\"\n    [adaptivePosition]=\"false\"\n    [delay]=\"500\"\n    (click)=\"editBookmarks()\"\n    type=\"button\"\n    [tabindex]=\"(drawerOpen$ | async) ? '0' : '-1'\"\n  >\n    <i c8yIcon=\"cog\" class=\"text-14 m-0\"></i>\n  </button>\n</div>\n<div class=\"c8y-right-drawer__item p-t-0 p-b-8\" *ngIf=\"bookmarks?.length\">\n  <button\n    class=\"btn btn-default btn-sm\"\n    (click)=\"addBookmark()\"\n    type=\"button\"\n    [tabindex]=\"(drawerOpen$ | async) ? '0' : '-1'\"\n  >\n    <i c8yIcon=\"plus-circle-o\" class=\"m-t-0 m-b-0 text-14\"></i>\n    <span>{{ addButtonText }}</span>\n  </button>\n</div>\n<ng-container *ngFor=\"let bookmark of bookmarks\">\n  <button\n    title=\"{{ bookmark.label }}\"\n    type=\"button\"\n    class=\"c8y-right-drawer__link\"\n    (click)=\"openUrl(bookmark.url)\"\n    [tabindex]=\"(drawerOpen$ | async) ? '0' : '-1'\"\n  >\n    <i [c8yIcon]=\"bookmark.icon\" *ngIf=\"bookmark.icon\"></i>\n    <span class=\"text-truncate\">{{ bookmark.label }}</span>\n  </button>\n</ng-container>\n<div class=\"p-t-8 p-b-8\">\n  <ng-container *ngIf=\"!bookmarks?.length\">\n    <span class=\"c8y-right-drawer__item text-muted text-bold text-14 p-b-0\">\n      {{ emptyMessageHeader }}\n    </span>\n    <span class=\"c8y-right-drawer__item text-12 p-t-0\">\n      <span class=\"text-muted\">{{ emptyMessageBody }}</span>\n    </span>\n    <div class=\"c8y-right-drawer__item\">\n      <button\n        class=\"btn btn-default btn-sm\"\n        (click)=\"addBookmark()\"\n        type=\"button\"\n        [tabindex]=\"(drawerOpen$ | async) ? '0' : '-1'\"\n      >\n        <i c8yIcon=\"plus-circle-o\" class=\"m-t-0 m-b-0 text-14\"></i>\n        <span>{{ addButtonText }}</span>\n      </button>\n    </div>\n  </ng-container>\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  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  declarations: [BookmarksComponent, EditBookmarksComponent],\n  imports: [\n    CoreModule,\n    CommonModule,\n    ListGroupModule,\n    DragDropModule,\n    FormsModule,\n    c8yFormsModule,\n    ModalModule,\n    TooltipModule.forRoot()\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","i3.BookmarkService","i5","i6","Document","i2.BookmarkService","i3","i4","i7","c8yFormsModule"],"mappings":"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"}