UNPKG

@netgrif/components-core

Version:

Netgrif Application engine frontend core Angular library

109 lines 15.8 kB
import { Inject, Injectable, Injector, Optional, TemplateRef, Type } from '@angular/core'; import { ComponentPortal, TemplatePortal } from '@angular/cdk/portal'; import { NAE_SIDE_MENU_CONTROL } from '../side-menu-injection-token'; import { SideMenuSize } from '../models/side-menu-size'; import { PortalWrapper } from '../models/portal-wrapper'; import { SideMenuRef } from '../models/side-menu-ref'; import { SideMenuControl } from '../models/side-menu-control'; import { NAE_NET_ALL_VERSIONS, NAE_NET_VERSION_VISIBLE } from '../net-version-visible-injection-token'; import * as i0 from "@angular/core"; export class SideMenuService { _sideMenuComponent; // SideMenuContainerComponent _controlObject; isVersionVisible; allVersionEnabled; constructor(isVersionVisible, allVersionEnabled) { this.isVersionVisible = isVersionVisible !== null ? isVersionVisible : true; this.allVersionEnabled = allVersionEnabled !== null ? allVersionEnabled : false; } /** * register SideMenuContainerComponent * * params menu is SideMenuContainerComponent */ registerSideMenu(menu) { if (this._sideMenuComponent) { throw new Error('SideMenuContainerComponent has been already registered!'); } this._sideMenuComponent = menu; } isOpened() { return this._sideMenuComponent.isOpened(); } /** * Open this _sideMenu, and return a Observable that will resolve when it's fully opened (or get rejected if it didn't). * * @returns Observable<MatDrawerToggleResult> */ open(componentOrTemplateRef, width = SideMenuSize.MEDIUM, injectionData) { if (!this.componentIsPresent()) { throw new Error('Side menu is not initialized'); } if (this._sideMenuComponent.isOpened()) { throw new Error('Side menu has been already opened with another content'); } let ref = new SideMenuRef(null); this._controlObject = new SideMenuControl(((event) => { ref = new SideMenuRef(event); }), this._sideMenuComponent.openedChange(), () => this._sideMenuComponent.close(this._sideMenuComponent), injectionData, this.isVersionVisible, this.allVersionEnabled); const wrapper = this._createPortal(componentOrTemplateRef, width, this._controlObject); this._sideMenuComponent.open(wrapper).subscribe((opened) => { if (opened === 'open') { this._controlObject.publish({ opened: true }); } }); return ref; } _createPortal(template, size, controlObject) { if (template === undefined || template === null) { throw new Error('A component template must be provided to open a side menu!'); } if (template instanceof TemplateRef) { return new PortalWrapper(new TemplatePortal(template, null), size); } if (template instanceof Type) { const injector = Injector.create({ providers: [{ provide: NAE_SIDE_MENU_CONTROL, useValue: controlObject }] }); return new PortalWrapper(new ComponentPortal(template, null, injector), size); } } /** * Close this _sideMenu, and return a Observable that will resolve when it's fully closed (or get rejected if it didn't). * * @returns Observable<MatDrawerToggleResult> */ close(closeEvent) { return this._controlObject.close(closeEvent); } /** * Toggle this _sideMenu. This is equivalent to calling close() when it's already opened, or open() when it's closed. * * @param isOpen Whether the _sideMenu should be open. * * @returns open or close side menu */ // public toggle(isOpen?: boolean): Observable<MatDrawerToggleResult> { // return from(this._sideMenu.toggle(isOpen)); // } componentIsPresent() { return !!this._sideMenuComponent; } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SideMenuService, deps: [{ token: NAE_NET_VERSION_VISIBLE, optional: true }, { token: NAE_NET_ALL_VERSIONS, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SideMenuService, providedIn: 'root' }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SideMenuService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: () => [{ type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [NAE_NET_VERSION_VISIBLE] }] }, { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [NAE_NET_ALL_VERSIONS] }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZS1tZW51LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMtY29yZS9zcmMvbGliL3NpZGUtbWVudS9zZXJ2aWNlcy9zaWRlLW1lbnUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDeEYsT0FBTyxFQUFDLGVBQWUsRUFBaUIsY0FBYyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFbkYsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDbkUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3RELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFFcEQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBRzVELE9BQU8sRUFBQyxvQkFBb0IsRUFBRSx1QkFBdUIsRUFBQyxNQUFNLHdDQUF3QyxDQUFDOztBQUtyRyxNQUFNLE9BQU8sZUFBZTtJQUVoQixrQkFBa0IsQ0FBTSxDQUFDLDZCQUE2QjtJQUN0RCxjQUFjLENBQWtCO0lBRXZCLGdCQUFnQixDQUFVO0lBQzFCLGlCQUFpQixDQUFVO0lBRTVDLFlBQXlELGdCQUF5QixFQUM1QixpQkFBMEI7UUFDNUUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUM1RSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FB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SSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILHVFQUF1RTtJQUN2RSxrREFBa0Q7SUFDbEQsSUFBSTtJQUVJLGtCQUFrQjtRQUN0QixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDckMsQ0FBQzt3R0FqR1EsZUFBZSxrQkFRUSx1QkFBdUIsNkJBQ3ZCLG9CQUFvQjs0R0FUM0MsZUFBZSxjQUZaLE1BQU07OzRGQUVULGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzswQkFTZ0IsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyx1QkFBdUI7OzBCQUMxQyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3RvciwgT3B0aW9uYWwsIFRlbXBsYXRlUmVmLCBUeXBlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29tcG9uZW50UG9ydGFsLCBDb21wb25lbnRUeXBlLCBUZW1wbGF0ZVBvcnRhbH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtOQUVfU0lERV9NRU5VX0NPTlRST0x9IGZyb20gJy4uL3NpZGUtbWVudS1pbmplY3Rpb24tdG9rZW4nO1xuaW1wb3J0IHtTaWRlTWVudVNpemV9IGZyb20gJy4uL21vZGVscy9zaWRlLW1lbnUtc2l6ZSc7XG5pbXBvcnQge1BvcnRhbFdyYXBwZXJ9IGZyb20gJy4uL21vZGVscy9wb3J0YWwtd3JhcHBlcic7XG5pbXBvcnQge1NpZGVNZW51UmVmfSBmcm9tICcuLi9tb2RlbHMvc2lkZS1tZW51LXJlZic7XG5pbXBvcnQge1NpZGVNZW51SW5qZWN0aW9uRGF0YX0gZnJvbSAnLi4vbW9kZWxzL3NpZGUtbWVudS1pbmplY3Rpb24tZGF0YSc7XG5pbXBvcnQge1NpZGVNZW51Q29udHJvbH0gZnJvbSAnLi4vbW9kZWxzL3NpZGUtbWVudS1jb250cm9sJztcbmltcG9ydCB7U2lkZU1lbnVFdmVudH0gZnJvbSAnLi4vbW9kZWxzL3NpZGUtbWVudS1ldmVudCc7XG5pbXBvcnQge01hdERyYXdlclRvZ2dsZVJlc3VsdH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2lkZW5hdic7XG5pbXBvcnQge05BRV9ORVRfQUxMX1ZFUlNJT05TLCBOQUVfTkVUX1ZFUlNJT05fVklTSUJMRX0gZnJvbSAnLi4vbmV0LXZlcnNpb24tdmlzaWJsZS1pbmplY3Rpb24tdG9rZW4nO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFNpZGVNZW51U2VydmljZSB7XG5cbiAgICBwcml2YXRlIF9zaWRlTWVudUNvbXBvbmVudDogYW55OyAvLyBTaWRlTWVudUNvbnRhaW5lckNvbXBvbmVudFxuICAgIHByaXZhdGUgX2NvbnRyb2xPYmplY3Q6IFNpZGVNZW51Q29udHJvbDtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgaXNWZXJzaW9uVmlzaWJsZTogYm9vbGVhbjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFsbFZlcnNpb25FbmFibGVkOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdChOQUVfTkVUX1ZFUlNJT05fVklTSUJMRSkgaXNWZXJzaW9uVmlzaWJsZTogYm9vbGVhbixcbiAgICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KE5BRV9ORVRfQUxMX1ZFUlNJT05TKSBhbGxWZXJzaW9uRW5hYmxlZDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmlzVmVyc2lvblZpc2libGUgPSBpc1ZlcnNpb25WaXNpYmxlICE9PSBudWxsID8gaXNWZXJzaW9uVmlzaWJsZSA6IHRydWU7XG4gICAgICAgIHRoaXMuYWxsVmVyc2lvbkVuYWJsZWQgPSBhbGxWZXJzaW9uRW5hYmxlZCAhPT0gbnVsbCA/IGFsbFZlcnNpb25FbmFibGVkIDogZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmVnaXN0ZXIgU2lkZU1lbnVDb250YWluZXJDb21wb25lbnRcbiAgICAgKlxuICAgICAqIHBhcmFtcyBtZW51IGlzIFNpZGVNZW51Q29udGFpbmVyQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIHJlZ2lzdGVyU2lkZU1lbnUobWVudTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9zaWRlTWVudUNvbXBvbmVudCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaWRlTWVudUNvbnRhaW5lckNvbXBvbmVudCBoYXMgYmVlbiBhbHJlYWR5IHJlZ2lzdGVyZWQhJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2lkZU1lbnVDb21wb25lbnQgPSBtZW51O1xuICAgIH1cblxuICAgIHB1YmxpYyBpc09wZW5lZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZGVNZW51Q29tcG9uZW50LmlzT3BlbmVkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT3BlbiB0aGlzIF9zaWRlTWVudSwgYW5kIHJldHVybiBhIE9ic2VydmFibGUgdGhhdCB3aWxsIHJlc29sdmUgd2hlbiBpdCdzIGZ1bGx5IG9wZW5lZCAob3IgZ2V0IHJlamVjdGVkIGlmIGl0IGRpZG4ndCkuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlPE1hdERyYXdlclRvZ2dsZVJlc3VsdD5cbiAgICAgKi9cbiAgICBwdWJsaWMgb3BlbjxUPihjb21wb25lbnRPclRlbXBsYXRlUmVmOiBDb21wb25lbnRUeXBlPFQ+IHwgVGVtcGxhdGVSZWY8VD4sXG4gICAgICAgICAgICAgICAgICAgd2lkdGg6IFNpZGVNZW51U2l6ZSA9IFNpZGVNZW51U2l6ZS5NRURJVU0sXG4gICAgICAgICAgICAgICAgICAgaW5qZWN0aW9uRGF0YT86IFNpZGVNZW51SW5qZWN0aW9uRGF0YSk6IFNpZGVNZW51UmVmIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbXBvbmVudElzUHJlc2VudCgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NpZGUgbWVudSBpcyBub3QgaW5pdGlhbGl6ZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fc2lkZU1lbnVDb21wb25lbnQuaXNPcGVuZWQoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaWRlIG1lbnUgaGFzIGJlZW4gYWxyZWFkeSBvcGVuZWQgd2l0aCBhbm90aGVyIGNvbnRlbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZWY6IFNpZGVNZW51UmVmID0gbmV3IFNpZGVNZW51UmVmKG51bGwpO1xuICAgICAgICB0aGlzLl9jb250cm9sT2JqZWN0ID0gbmV3IFNpZGVNZW51Q29udHJvbCgoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICByZWYgPSBuZXcgU2lkZU1lbnVSZWYoZXZlbnQpO1xuICAgICAgICB9KSwgdGhpcy5fc2lkZU1lbnVDb21wb25lbnQub3BlbmVkQ2hhbmdlKCksICgpID0+IHRoaXMuX3NpZGVNZW51Q29tcG9uZW50LmNsb3NlKHRoaXMuX3NpZGVNZW51Q29tcG9uZW50KSxcbiAgICAgICAgICAgIGluamVjdGlvbkRhdGEsIHRoaXMuaXNWZXJzaW9uVmlzaWJsZSwgdGhpcy5hbGxWZXJzaW9uRW5hYmxlZCk7XG5cbiAgICAgICAgY29uc3Qgd3JhcHBlciA9IHRoaXMuX2NyZWF0ZVBvcnRhbChjb21wb25lbnRPclRlbXBsYXRlUmVmLCB3aWR0aCwgdGhpcy5fY29udHJvbE9iamVjdCk7XG4gICAgICAgIHRoaXMuX3NpZGVNZW51Q29tcG9uZW50Lm9wZW4od3JhcHBlcikuc3Vic2NyaWJlKChvcGVuZWQpID0+IHtcbiAgICAgICAgICAgIGlmIChvcGVuZWQgPT09ICdvcGVuJykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRyb2xPYmplY3QucHVibGlzaCh7b3BlbmVkOiB0cnVlfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVmO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NyZWF0ZVBvcnRhbDxUPih0ZW1wbGF0ZTogQ29tcG9uZW50VHlwZTxUPiB8IFRlbXBsYXRlUmVmPFQ+LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBTaWRlTWVudVNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xPYmplY3Q6IFNpZGVNZW51Q29udHJvbCk6IFBvcnRhbFdyYXBwZXIge1xuICAgICAgICBpZiAodGVtcGxhdGUgPT09IHVuZGVmaW5lZCB8fCB0ZW1wbGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBIGNvbXBvbmVudCB0ZW1wbGF0ZSBtdXN0IGJlIHByb3ZpZGVkIHRvIG9wZW4gYSBzaWRlIG1lbnUhJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRlbXBsYXRlIGluc3RhbmNlb2YgVGVtcGxhdGVSZWYpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUG9ydGFsV3JhcHBlcihuZXcgVGVtcGxhdGVQb3J0YWwodGVtcGxhdGUsIG51bGwpLCBzaXplKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGVtcGxhdGUgaW5zdGFuY2VvZiBUeXBlKSB7XG4gICAgICAgICAgICBjb25zdCBpbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7cHJvdmlkZXJzOiBbe3Byb3ZpZGU6IE5BRV9TSURFX01FTlVfQ09OVFJPTCwgdXNlVmFsdWU6IGNvbnRyb2xPYmplY3R9XX0pO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQb3J0YWxXcmFwcGVyKG5ldyBDb21wb25lbnRQb3J0YWwodGVtcGxhdGUsIG51bGwsIGluamVjdG9yKSwgc2l6ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbG9zZSB0aGlzIF9zaWRlTWVudSwgYW5kIHJldHVybiBhIE9ic2VydmFibGUgdGhhdCB3aWxsIHJlc29sdmUgd2hlbiBpdCdzIGZ1bGx5IGNsb3NlZCAob3IgZ2V0IHJlamVjdGVkIGlmIGl0IGRpZG4ndCkuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlPE1hdERyYXdlclRvZ2dsZVJlc3VsdD5cbiAgICAgKi9cbiAgICBwdWJsaWMgY2xvc2UoY2xvc2VFdmVudD86IFNpZGVNZW51RXZlbnQpOiBPYnNlcnZhYmxlPE1hdERyYXdlclRvZ2dsZVJlc3VsdD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29udHJvbE9iamVjdC5jbG9zZShjbG9zZUV2ZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUb2dnbGUgdGhpcyBfc2lkZU1lbnUuIFRoaXMgaXMgZXF1aXZhbGVudCB0byBjYWxsaW5nIGNsb3NlKCkgd2hlbiBpdCdzIGFscmVhZHkgb3BlbmVkLCBvciBvcGVuKCkgd2hlbiBpdCdzIGNsb3NlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSAgaXNPcGVuICBXaGV0aGVyIHRoZSBfc2lkZU1lbnUgc2hvdWxkIGJlIG9wZW4uXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBvcGVuIG9yIGNsb3NlIHNpZGUgbWVudVxuICAgICAqL1xuICAgIC8vIHB1YmxpYyB0b2dnbGUoaXNPcGVuPzogYm9vbGVhbik6IE9ic2VydmFibGU8TWF0RHJhd2VyVG9nZ2xlUmVzdWx0PiB7XG4gICAgLy8gICAgIHJldHVybiBmcm9tKHRoaXMuX3NpZGVNZW51LnRvZ2dsZShpc09wZW4pKTtcbiAgICAvLyB9XG5cbiAgICBwcml2YXRlIGNvbXBvbmVudElzUHJlc2VudCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fc2lkZU1lbnVDb21wb25lbnQ7XG4gICAgfVxufVxuIl19