UNPKG

@universis/common

Version:

Universis - common directives and services

138 lines 17.4 kB
import { ChangeDetectorRef, Injectable, Inject, InjectionToken } from '@angular/core'; import { TranslateService, TranslatePipe } from '@ngx-translate/core'; import * as i0 from "@angular/core"; import * as i1 from "@ngx-translate/core"; export let GUEST_SIDEBAR_LOCATIONS = new InjectionToken('app.guest-sidebar.locations'); class TranslationChangeDetector extends ChangeDetectorRef { checkNoChanges() { } detach() { } detectChanges() { } markForCheck() { } reattach() { } } export class AppGuestSidebarService { constructor(_translateService, sidebarLocations) { this._translateService = _translateService; this.sidebarLocations = sidebarLocations; this.navigationItems = []; this._changeDetector = new TranslationChangeDetector(); } loadConfig() { return new Promise((resolve) => { this.addRange(this.sidebarLocations); return resolve(); }); } /** * Adds one or more navigation items to application sidebar * @param {AppSidebarNavigationItem} item */ add(...item) { // initialize translate pipe with null change detector const pipe = new TranslatePipe(this._translateService, this._changeDetector); // add navigation items to array this.navigationItems.push.apply(this.navigationItems, item.map(navigationItem => { // translate name const x = Object.assign(navigationItem, { name: pipe.transform(navigationItem.key) }); if (Array.isArray(x.children)) { // translate children x.children = x.children.map(child => { return Object.assign(child, { name: pipe.transform(child.key) }); }); } return x; })); } /** * Adds a collection of navigation items to application sidebar * @param {Array<AppSidebarNavigationItem>} items */ addRange(items) { return this.add.apply(this, items); } /** * Remove one navigation item from application sidebar * @param {AppSidebarNavigationItem} item */ remove(item) { // find item to remove const itemIndex = this.navigationItems.findIndex(el => el.name === item.name || el.url === item.url || el.key === item.key); // if item is found if (itemIndex !== -1) { this.navigationItems.splice(itemIndex, 1); } } /** * Removes one or more navigation items from application sidebar * @param {Array<AppSidebarNavigationItem>} items */ removeRange(items) { for (const item of items) { this.remove(item); } } /** * Adds one or more navigation items to as children to a sidebar item * @param {AppSidebarNavigationItem} parent * @param {AppSidebarNavigationItem} item */ addChild(parent, ...item) { // initialize translate pipe with null change detector const pipe = new TranslatePipe(this._translateService, this._changeDetector); // translate child const translatedChild = item.map(navigationItem => { // translate name const x = Object.assign(navigationItem, { name: pipe.transform(navigationItem.key) }); if (Array.isArray(x.children)) { // translate children x.children = x.children.map(child => { return Object.assign(child, { name: pipe.transform(child.key) }); }); } return x; }); // find parent by index and insert into place const parentIndex = this.navigationItems.findIndex(el => el.name === parent.name || el.url === parent.url || el.key === parent.key); if (parentIndex) { const parentWithChildren = this.navigationItems[parentIndex]; const childrenArray = parentWithChildren.children || []; childrenArray.push.apply(childrenArray, translatedChild); parentWithChildren.children = childrenArray; // Replaces parent with parentWithChildren this.navigationItems.splice(parentIndex, 1, parentWithChildren); } } /** * Adds a collection of navigation items to as children to a parent * @param {AppSidebarNavigationItem} parent * @param {Array<AppSidebarNavigationItem>} items */ addChildren(parent, items) { return this.addChild.apply(this, [parent, ...items]); } } AppGuestSidebarService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AppGuestSidebarService, deps: [{ token: i1.TranslateService }, { token: GUEST_SIDEBAR_LOCATIONS }], target: i0.ɵɵFactoryTarget.Injectable }); AppGuestSidebarService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AppGuestSidebarService, providedIn: 'root' }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AppGuestSidebarService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: function () { return [{ type: i1.TranslateService }, { type: Array, decorators: [{ type: Inject, args: [GUEST_SIDEBAR_LOCATIONS] }] }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWd1ZXN0LXNpZGViYXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zaGFyZWQvc2VydmljZXMvYXBwLWd1ZXN0LXNpZGViYXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFVBQVUsRUFDVixNQUFNLEVBQ04sY0FBYyxFQUNmLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSxhQUFhLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQzs7O0FBWXBFLE1BQU0sQ0FBQyxJQUFJLHVCQUF1QixHQUFHLElBQUksY0FBYyxDQUFrQyw2QkFBNkIsQ0FBQyxDQUFDO0FBRXhILE1BQU0seUJBQTBCLFNBQVEsaUJBQWlCO0lBQ3ZELGNBQWM7SUFDZCxDQUFDO0lBRUQsTUFBTTtJQUNOLENBQUM7SUFFRCxhQUFhO0lBQ2IsQ0FBQztJQUVELFlBQVk7SUFDWixDQUFDO0lBRUQsUUFBUTtJQUNSLENBQUM7Q0FFRjtBQUtELE1BQU0sT0FBTyxzQkFBc0I7SUFJakMsWUFBb0IsaUJBQW1DLEVBQ1osZ0JBQWlEO1FBRHhFLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBa0I7UUFDWixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWlDO1FBSHJGLG9CQUFlLEdBQW9DLEVBQUUsQ0FBQztRQUkzRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUkseUJBQXlCLEVBQUUsQ0FBQztJQUN6RCxDQUFDO0lBRU0sVUFBVTtRQUNmLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3JDLE9BQU8sT0FBTyxFQUFFLENBQUM7UUFDbkIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksR0FBRyxDQUFDLEdBQUcsSUFB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ckIsTUFBTTs0RkFFUCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFNSSxNQUFNOzJCQUFDLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBJbmplY3RhYmxlLFxuICBJbmplY3QsXG4gIEluamVjdGlvblRva2VuXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlLCBUcmFuc2xhdGVQaXBlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIEFwcFNpZGViYXJOYXZpZ2F0aW9uSXRlbSB7XG4gIGtleTogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgY2xhc3M/OiBzdHJpbmc7XG4gIGluZGV4PzogbnVtYmVyO1xuICBpY29uPzogc3RyaW5nO1xuICBjaGlsZHJlbj86IEFycmF5PEFwcFNpZGViYXJOYXZpZ2F0aW9uSXRlbT47XG59XG5cbmV4cG9ydCBsZXQgR1VFU1RfU0lERUJBUl9MT0NBVElPTlMgPSBuZXcgSW5qZWN0aW9uVG9rZW48QXJyYXk8QXBwU2lkZWJhck5hdmlnYXRpb25JdGVtPj4oJ2FwcC5ndWVzdC1zaWRlYmFyLmxvY2F0aW9ucycpO1xuXG5jbGFzcyBUcmFuc2xhdGlvbkNoYW5nZURldGVjdG9yIGV4dGVuZHMgQ2hhbmdlRGV0ZWN0b3JSZWYge1xuICBjaGVja05vQ2hhbmdlcygpOiB2b2lkIHtcbiAgfVxuXG4gIGRldGFjaCgpOiB2b2lkIHtcbiAgfVxuXG4gIGRldGVjdENoYW5nZXMoKTogdm9pZCB7XG4gIH1cblxuICBtYXJrRm9yQ2hlY2soKTogdm9pZCB7XG4gIH1cblxuICByZWF0dGFjaCgpOiB2b2lkIHtcbiAgfVxuXG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEFwcEd1ZXN0U2lkZWJhclNlcnZpY2Uge1xuXG4gIHB1YmxpYyBuYXZpZ2F0aW9uSXRlbXM6IEFycmF5PEFwcFNpZGViYXJOYXZpZ2F0aW9uSXRlbT4gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbmdlRGV0ZWN0b3I6IFRyYW5zbGF0aW9uQ2hhbmdlRGV0ZWN0b3I7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgQEluamVjdChHVUVTVF9TSURFQkFSX0xPQ0FUSU9OUykgcHJpdmF0ZSBzaWRlYmFyTG9jYXRpb25zOiBBcnJheTxBcHBTaWRlYmFyTmF2aWdhdGlvbkl0ZW0+KSB7XG4gICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3IgPSBuZXcgVHJhbnNsYXRpb25DaGFuZ2VEZXRlY3RvcigpO1xuICB9XG5cbiAgcHVibGljIGxvYWRDb25maWcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLmFkZFJhbmdlKHRoaXMuc2lkZWJhckxvY2F0aW9ucyk7XG4gICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgb25lIG9yIG1vcmUgbmF2aWdhdGlvbiBpdGVtcyB0byBhcHBsaWNhdGlvbiBzaWRlYmFyXG4gICAqIEBwYXJhbSB7QXBwU2lkZWJhck5hdmlnYXRpb25JdGVtfSBpdGVtXG4gICAqL1xuICBwdWJsaWMgYWRkKC4uLml0ZW06IEFycmF5PEFwcFNpZGViYXJOYXZpZ2F0aW9uSXRlbT4pOiB2b2lkIHtcbiAgICAgICAgLy8gaW5pdGlhbGl6ZSB0cmFuc2xhdGUgcGlwZSB3aXRoIG51bGwgY2hhbmdlIGRldGVjdG9yXG4gICAgICAgIGNvbnN0IHBpcGUgPSBuZXcgVHJhbnNsYXRlUGlwZSh0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLCB0aGlzLl9jaGFuZ2VEZXRlY3Rvcik7XG4gICAgICAgIC8vIGFkZCBuYXZpZ2F0aW9uIGl0ZW1zIHRvIGFycmF5XG4gICAgICAgIHRoaXMubmF2aWdhdGlvbkl0ZW1zLnB1c2guYXBwbHkodGhpcy5uYXZpZ2F0aW9uSXRlbXMsIGl0ZW0ubWFwKG5hdmlnYXRpb25JdGVtID0+IHtcbiAgICAgICAgICAvLyB0cmFuc2xhdGUgbmFtZVxuICAgICAgICBjb25zdCB4ID0gT2JqZWN0LmFzc2lnbihuYXZpZ2F0aW9uSXRlbSwge1xuICAgICAgICAgIG5hbWU6IHBpcGUudHJhbnNmb3JtKG5hdmlnYXRpb25JdGVtLmtleSlcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHguY2hpbGRyZW4pKSB7XG4gICAgICAgICAgLy8gdHJhbnNsYXRlIGNoaWxkcmVuXG4gICAgICAgICAgeC5jaGlsZHJlbiA9IHguY2hpbGRyZW4ubWFwKCBjaGlsZCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihjaGlsZCwge1xuICAgICAgICAgICAgICBuYW1lOiBwaXBlLnRyYW5zZm9ybShjaGlsZC5rZXkpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geDtcbiAgICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgY29sbGVjdGlvbiBvZiBuYXZpZ2F0aW9uIGl0ZW1zIHRvIGFwcGxpY2F0aW9uIHNpZGViYXJcbiAgICogQHBhcmFtIHtBcnJheTxBcHBTaWRlYmFyTmF2aWdhdGlvbkl0ZW0+fSBpdGVtc1xuICAgKi9cbiAgcHVibGljIGFkZFJhbmdlKGl0ZW1zOiBBcnJheTxBcHBTaWRlYmFyTmF2aWdhdGlvbkl0ZW0+KTogdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuYWRkLmFwcGx5KHRoaXMsIGl0ZW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgb25lIG5hdmlnYXRpb24gaXRlbSBmcm9tIGFwcGxpY2F0aW9uIHNpZGViYXJcbiAgICogQHBhcmFtIHtBcHBTaWRlYmFyTmF2aWdhdGlvbkl0ZW19IGl0ZW1cbiAgICovXG4gIHB1YmxpYyByZW1vdmUoaXRlbTogQXBwU2lkZWJhck5hdmlnYXRpb25JdGVtKTogdm9pZCB7XG4gICAgLy8gZmluZCBpdGVtIHRvIHJlbW92ZVxuICAgIGNvbnN0IGl0ZW1JbmRleCA9IHRoaXMubmF2aWdhdGlvbkl0ZW1zLmZpbmRJbmRleChlbCA9PiBlbC5uYW1lID09PSBpdGVtLm5hbWUgfHwgZWwudXJsID09PSBpdGVtLnVybCB8fCAgZWwua2V5ID09PSBpdGVtLmtleSk7XG4gICAgLy8gaWYgaXRlbSBpcyBmb3VuZFxuICAgIGlmIChpdGVtSW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLm5hdmlnYXRpb25JdGVtcy5zcGxpY2UoaXRlbUluZGV4LCAxLCApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIG9uZSBvciBtb3JlIG5hdmlnYXRpb24gaXRlbXMgZnJvbSBhcHBsaWNhdGlvbiBzaWRlYmFyXG4gICAqIEBwYXJhbSB7QXJyYXk8QXBwU2lkZWJhck5hdmlnYXRpb25JdGVtPn0gaXRlbXNcbiAgICovXG4gIHB1YmxpYyByZW1vdmVSYW5nZShpdGVtczogQXJyYXk8QXBwU2lkZWJhck5hdmlnYXRpb25JdGVtPik6IHZvaWQge1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgdGhpcy5yZW1vdmUoaXRlbSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgb25lIG9yIG1vcmUgbmF2aWdhdGlvbiBpdGVtcyB0byBhcyBjaGlsZHJlbiB0byBhIHNpZGViYXIgaXRlbVxuICAgKiBAcGFyYW0ge0FwcFNpZGViYXJOYXZpZ2F0aW9uSXRlbX0gcGFyZW50XG4gICAqIEBwYXJhbSB7QXBwU2lkZWJhck5hdmlnYXRpb25JdGVtfSBpdGVtXG4gICAqL1xuICBwdWJsaWMgYWRkQ2hpbGQocGFyZW50OiBBcHBTaWRlYmFyTmF2aWdhdGlvbkl0ZW0sIC4uLml0ZW06IEFycmF5PEFwcFNpZGViYXJOYXZpZ2F0aW9uSXRlbT4pOiB2b2lkIHtcbiAgICAvLyBpbml0aWFsaXplIHRyYW5zbGF0ZSBwaXBlIHdpdGggbnVsbCBjaGFuZ2UgZGV0ZWN0b3JcbiAgICBjb25zdCBwaXBlID0gbmV3IFRyYW5zbGF0ZVBpcGUodGhpcy5fdHJhbnNsYXRlU2VydmljZSwgdGhpcy5fY2hhbmdlRGV0ZWN0b3IpO1xuICAgIC8vIHRyYW5zbGF0ZSBjaGlsZFxuICAgIGNvbnN0IHRyYW5zbGF0ZWRDaGlsZCA9IGl0ZW0ubWFwKG5hdmlnYXRpb25JdGVtID0+IHtcbiAgICAgIC8vIHRyYW5zbGF0ZSBuYW1lXG4gICAgICBjb25zdCB4ID0gT2JqZWN0LmFzc2lnbihuYXZpZ2F0aW9uSXRlbSwge1xuICAgICAgICBuYW1lOiBwaXBlLnRyYW5zZm9ybShuYXZpZ2F0aW9uSXRlbS5rZXkpXG4gICAgICB9KTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHguY2hpbGRyZW4pKSB7XG4gICAgICAgIC8vIHRyYW5zbGF0ZSBjaGlsZHJlblxuICAgICAgICB4LmNoaWxkcmVuID0geC5jaGlsZHJlbi5tYXAoIGNoaWxkID0+IHtcbiAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihjaGlsZCwge1xuICAgICAgICAgICAgbmFtZTogcGlwZS50cmFuc2Zvcm0oY2hpbGQua2V5KVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB4O1xuICAgIH0pO1xuICAgIC8vIGZpbmQgcGFyZW50IGJ5IGluZGV4IGFuZCBpbnNlcnQgaW50byBwbGFjZVxuICAgIGNvbnN0IHBhcmVudEluZGV4ID0gdGhpcy5uYXZpZ2F0aW9uSXRlbXMuZmluZEluZGV4KGVsID0+IGVsLm5hbWUgPT09IHBhcmVudC5uYW1lIHx8IGVsLnVybCA9PT0gcGFyZW50LnVybCB8fCBlbC5rZXkgPT09IHBhcmVudC5rZXkpO1xuICAgIGlmIChwYXJlbnRJbmRleCkge1xuICAgICAgY29uc3QgcGFyZW50V2l0aENoaWxkcmVuID0gdGhpcy5uYXZpZ2F0aW9uSXRlbXNbcGFyZW50SW5kZXhdO1xuICAgICAgY29uc3QgY2hpbGRyZW5BcnJheSA9IHBhcmVudFdpdGhDaGlsZHJlbi5jaGlsZHJlbiB8fCBbXTtcbiAgICAgIGNoaWxkcmVuQXJyYXkucHVzaC5hcHBseShjaGlsZHJlbkFycmF5LCB0cmFuc2xhdGVkQ2hpbGQpO1xuICAgICAgcGFyZW50V2l0aENoaWxkcmVuLmNoaWxkcmVuID0gY2hpbGRyZW5BcnJheTtcbiAgICAgIC8vIFJlcGxhY2VzIHBhcmVudCB3aXRoIHBhcmVudFdpdGhDaGlsZHJlblxuICAgICAgdGhpcy5uYXZpZ2F0aW9uSXRlbXMuc3BsaWNlKHBhcmVudEluZGV4LCAxLCBwYXJlbnRXaXRoQ2hpbGRyZW4pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgY29sbGVjdGlvbiBvZiBuYXZpZ2F0aW9uIGl0ZW1zIHRvIGFzIGNoaWxkcmVuIHRvIGEgcGFyZW50XG4gICAqIEBwYXJhbSB7QXBwU2lkZWJhck5hdmlnYXRpb25JdGVtfSBwYXJlbnRcbiAgICogQHBhcmFtIHtBcnJheTxBcHBTaWRlYmFyTmF2aWdhdGlvbkl0ZW0+fSBpdGVtc1xuICAgKi9cbiAgcHVibGljIGFkZENoaWxkcmVuKHBhcmVudDogQXBwU2lkZWJhck5hdmlnYXRpb25JdGVtLCBpdGVtczogQXJyYXk8QXBwU2lkZWJhck5hdmlnYXRpb25JdGVtPik6IHZvaWQge1xuICAgIHJldHVybiB0aGlzLmFkZENoaWxkLmFwcGx5KHRoaXMsIFtwYXJlbnQsIC4uLml0ZW1zXSk7XG4gIH1cbn1cbiJdfQ==