UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

82 lines 12 kB
import { Injectable } from '@angular/core'; import { gettext, OptionsService, UserPreferencesService } from '@c8y/ngx-components'; import { TranslateService } from '@ngx-translate/core'; import { uniqBy } from 'lodash-es'; import { firstValueFrom, map } from 'rxjs'; import * as i0 from "@angular/core"; import * as i1 from "@ngx-translate/core"; import * as i2 from "@c8y/ngx-components"; export class BookmarkService { constructor(translateService, userPreferencesService, options) { this.translateService = translateService; this.userPreferencesService = userPreferencesService; this.options = options; this.USER_PREFERENCES_BOOKMARKS_KEY = 'bookmarks'; } async updateBookmarksInStorage(newBookmarks) { const existingBookmarks = await this.getBookmarks(); const mergedBookmarks = [...newBookmarks, ...existingBookmarks]; const cleanedBookmarks = uniqBy(mergedBookmarks, 'id').filter((bookmark) => !bookmark.markToRemove); this.setUserPreferencesBookmarks(cleanedBookmarks); } getCurrentActiveNodeIcon(document) { const BOOKMARK = 'bookmark'; const iconElement = this.getIconElement(document); if (!iconElement) { return BOOKMARK; } const iconClassName = iconElement.className; const iconName = this.extractIconName(iconClassName); return iconName || BOOKMARK; } extractIconName(input) { const iconRegex = /\b(dlt-)?c8y-icon-(\w+(?:-\w+)*)\b/g; const matches = [...input.matchAll(iconRegex)]; const match = matches?.pop(); if (!match) { return null; } const [, prefix, name] = match; return prefix ? name : `c8y-${name}`; } async getBookmarks() { return await firstValueFrom(this.userPreferencesService .get(this.USER_PREFERENCES_BOOKMARKS_KEY) .pipe(map((bookmarks) => bookmarks ?? []))); } generateRandomID() { const array = new Uint8Array(16); crypto.getRandomValues(array); return Array.from(array, byte => byte.toString(16).padStart(2, '0')).join(''); } convertBookmarkLinkToObject(title, url, icon) { const globalTitle = this.options.globalTitle ?? 'Cumulocity'; return { id: this.generateRandomID(), label: title.includes(globalTitle) ? title.replace(`${globalTitle} - `, '') : this.translateService.instant(gettext('Bookmark')), url, icon }; } getIconElement(document) { const currentActiveNode = document.querySelectorAll('.link.active'); if (!currentActiveNode.length) { return null; } const activeNode = currentActiveNode.item(0); return activeNode.firstElementChild.firstChild; } setUserPreferencesBookmarks(bookmarks) { this.userPreferencesService.set(this.USER_PREFERENCES_BOOKMARKS_KEY, bookmarks); this.updatedBookmarks = bookmarks; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BookmarkService, deps: [{ token: i1.TranslateService }, { token: i2.UserPreferencesService }, { token: i2.OptionsService }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BookmarkService, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BookmarkService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: () => [{ type: i1.TranslateService }, { type: i2.UserPreferencesService }, { type: i2.OptionsService }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9va21hcmtzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9ib29rbWFya3MvYm9va21hcmtzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkMsT0FBTyxFQUFFLGNBQWMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7QUFJM0MsTUFBTSxPQUFPLGVBQWU7SUFLMUIsWUFDVSxnQkFBa0MsRUFDbEMsc0JBQThDLEVBQzlDLE9BQXVCO1FBRnZCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUM5QyxZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQVB4QixtQ0FBOEIsR0FBRyxXQUFXLENBQUM7SUFRbkQsQ0FBQztJQUVKLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxZQUF3QjtRQUNyRCxNQUFNLGlCQUFpQixHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BELE1BQU0sZUFBZSxHQUFHLENBQUMsR0FBRyxZQUFZLEVBQUUsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQzNELENBQUMsUUFBa0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUMvQyxDQUFDO1FBRUYsSUFBSSxDQUFDLDJCQUEyQixDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDckQs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LENBQUM7SUFFTywyQkFBMkIsQ0FBQyxTQUFxQjtRQUN2RCxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNoRixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDO0lBQ3BDLENBQUM7K0dBdkZVLGVBQWU7bUhBQWYsZUFBZSxjQURGLE1BQU07OzRGQUNuQixlQUFlO2tCQUQzQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGdldHRleHQsIE9wdGlvbnNTZXJ2aWNlLCBVc2VyUHJlZmVyZW5jZXNTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyB1bmlxQnkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20sIG1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQm9va21hcmsgfSBmcm9tICcuL2Jvb2ttYXJrLm1vZGVsJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBCb29rbWFya1NlcnZpY2Uge1xuICByZWFkb25seSBVU0VSX1BSRUZFUkVOQ0VTX0JPT0tNQVJLU19LRVkgPSAnYm9va21hcmtzJztcblxuICB1cGRhdGVkQm9va21hcmtzOiBCb29rbWFya1tdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHVzZXJQcmVmZXJlbmNlc1NlcnZpY2U6IFVzZXJQcmVmZXJlbmNlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBvcHRpb25zOiBPcHRpb25zU2VydmljZVxuICApIHt9XG5cbiAgYXN5bmMgdXBkYXRlQm9va21hcmtzSW5TdG9yYWdlKG5ld0Jvb2ttYXJrczogQm9va21hcmtbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGV4aXN0aW5nQm9va21hcmtzID0gYXdhaXQgdGhpcy5nZXRCb29rbWFya3MoKTtcbiAgICBjb25zdCBtZXJnZWRCb29rbWFya3MgPSBbLi4ubmV3Qm9va21hcmtzLCAuLi5leGlzdGluZ0Jvb2ttYXJrc107XG4gICAgY29uc3QgY2xlYW5lZEJvb2ttYXJrcyA9IHVuaXFCeShtZXJnZWRCb29rbWFya3MsICdpZCcpLmZpbHRlcihcbiAgICAgIChib29rbWFyazogQm9va21hcmspID0+ICFib29rbWFyay5tYXJrVG9SZW1vdmVcbiAgICApO1xuXG4gICAgdGhpcy5zZXRVc2VyUHJlZmVyZW5jZXNCb29rbWFya3MoY2xlYW5lZEJvb2ttYXJrcyk7XG4gIH1cblxuICBnZXRDdXJyZW50QWN0aXZlTm9kZUljb24oZG9jdW1lbnQ6IERvY3VtZW50KTogc3RyaW5nIHtcbiAgICBjb25zdCBCT09LTUFSSyA9ICdib29rbWFyayc7XG5cbiAgICBjb25zdCBpY29uRWxlbWVudCA9IHRoaXMuZ2V0SWNvbkVsZW1lbnQoZG9jdW1lbnQpO1xuXG4gICAgaWYgKCFpY29uRWxlbWVudCkge1xuICAgICAgcmV0dXJuIEJPT0tNQVJLO1xuICAgIH1cblxuICAgIGNvbnN0IGljb25DbGFzc05hbWUgPSBpY29uRWxlbWVudC5jbGFzc05hbWU7XG4gICAgY29uc3QgaWNvbk5hbWUgPSB0aGlzLmV4dHJhY3RJY29uTmFtZShpY29uQ2xhc3NOYW1lKTtcbiAgICByZXR1cm4gaWNvbk5hbWUgfHwgQk9PS01BUks7XG4gIH1cblxuICBleHRyYWN0SWNvbk5hbWUoaW5wdXQ6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IGljb25SZWdleCA9IC9cXGIoZGx0LSk/Yzh5LWljb24tKFxcdysoPzotXFx3KykqKVxcYi9nO1xuICAgIGNvbnN0IG1hdGNoZXMgPSBbLi4uaW5wdXQubWF0Y2hBbGwoaWNvblJlZ2V4KV07XG4gICAgY29uc3QgbWF0Y2ggPSBtYXRjaGVzPy5wb3AoKTtcblxuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBbLCBwcmVmaXgsIG5hbWVdID0gbWF0Y2g7XG5cbiAgICByZXR1cm4gcHJlZml4ID8gbmFtZSA6IGBjOHktJHtuYW1lfWA7XG4gIH1cblxuICBhc3luYyBnZXRCb29rbWFya3MoKTogUHJvbWlzZTxCb29rbWFya1tdPiB7XG4gICAgcmV0dXJuIGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgdGhpcy51c2VyUHJlZmVyZW5jZXNTZXJ2aWNlXG4gICAgICAgIC5nZXQodGhpcy5VU0VSX1BSRUZFUkVOQ0VTX0JPT0tNQVJLU19LRVkpXG4gICAgICAgIC5waXBlKG1hcCgoYm9va21hcmtzOiBCb29rbWFya1tdKSA9PiBib29rbWFya3MgPz8gW10pKVxuICAgICk7XG4gIH1cblxuICBnZW5lcmF0ZVJhbmRvbUlEKCkge1xuICAgIGNvbnN0IGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xuICAgIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMoYXJyYXkpO1xuXG4gICAgcmV0dXJuIEFycmF5LmZyb20oYXJyYXksIGJ5dGUgPT4gYnl0ZS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKSkuam9pbignJyk7XG4gIH1cblxuICBjb252ZXJ0Qm9va21hcmtMaW5rVG9PYmplY3QodGl0bGU6IHN0cmluZywgdXJsOiBzdHJpbmcsIGljb246IHN0cmluZyk6IEJvb2ttYXJrIHtcbiAgICBjb25zdCBnbG9iYWxUaXRsZSA9IHRoaXMub3B0aW9ucy5nbG9iYWxUaXRsZSA/PyAnQ3VtdWxvY2l0eSc7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiB0aGlzLmdlbmVyYXRlUmFuZG9tSUQoKSxcbiAgICAgIGxhYmVsOiB0aXRsZS5pbmNsdWRlcyhnbG9iYWxUaXRsZSlcbiAgICAgICAgPyB0aXRsZS5yZXBsYWNlKGAke2dsb2JhbFRpdGxlfSAtIGAsICcnKVxuICAgICAgICA6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGdldHRleHQoJ0Jvb2ttYXJrJykpLFxuICAgICAgdXJsLFxuICAgICAgaWNvblxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldEljb25FbGVtZW50KGRvY3VtZW50OiBEb2N1bWVudCk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gICAgY29uc3QgY3VycmVudEFjdGl2ZU5vZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubGluay5hY3RpdmUnKSBhcyBOb2RlTGlzdDtcbiAgICBpZiAoIWN1cnJlbnRBY3RpdmVOb2RlLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGFjdGl2ZU5vZGUgPSBjdXJyZW50QWN0aXZlTm9kZS5pdGVtKDApIGFzIEhUTUxFbGVtZW50O1xuICAgIHJldHVybiBhY3RpdmVOb2RlLmZpcnN0RWxlbWVudENoaWxkLmZpcnN0Q2hpbGQgYXMgSFRNTEVsZW1lbnQ7XG4gIH1cblxuICBwcml2YXRlIHNldFVzZXJQcmVmZXJlbmNlc0Jvb2ttYXJrcyhib29rbWFya3M6IEJvb2ttYXJrW10pOiB2b2lkIHtcbiAgICB0aGlzLnVzZXJQcmVmZXJlbmNlc1NlcnZpY2Uuc2V0KHRoaXMuVVNFUl9QUkVGRVJFTkNFU19CT09LTUFSS1NfS0VZLCBib29rbWFya3MpO1xuICAgIHRoaXMudXBkYXRlZEJvb2ttYXJrcyA9IGJvb2ttYXJrcztcbiAgfVxufVxuIl19