UNPKG

@netgrif/components-core

Version:

Netgrif Application engine frontend core Angular library

101 lines 14.1 kB
import { Injectable } from '@angular/core'; import { SimpleFilter } from '../../filter/models/simple-filter'; import { HttpParams } from '@angular/common/http'; import { map, switchMap } from 'rxjs/operators'; import { BehaviorSubject, of } from 'rxjs'; import { PaginationParams } from '../../utility/pagination/pagination-params'; import * as i0 from "@angular/core"; import * as i1 from "../../user/services/user.service"; import * as i2 from "../../resources/engine-endpoint/case-resource.service"; /** * This service allows access to information about the groups of the currently logged user. * * If no user is logged an empty array is provided. * * If a user can be owner of at most one group, this service provides utility methods to access this group directly. * * The groups are assumed to be instances of the engine group process, this is never checked nor enforced. */ export class NextGroupService { _userService; _caseResourceService; _memberGroups$; _ownerGroups$; _userSub; constructor(_userService, _caseResourceService) { this._userService = _userService; this._caseResourceService = _caseResourceService; this._ownerGroups$ = new BehaviorSubject([]); this._memberGroups$ = new BehaviorSubject([]); this._userSub = this._userService.user$.pipe(switchMap(user => { if (!user || user.id === '') { return of([]); } const params = new HttpParams().set(PaginationParams.PAGE_SIZE, `${user.nextGroups.length}`); return this._caseResourceService.searchCases(SimpleFilter.fromCaseQuery({ id: user.nextGroups }), params) .pipe(map(page => page.content ? page.content : []), map(groups => groups.filter(group => group.author.fullName !== 'application engine'))); })).subscribe(groups => { const ownerGroups = groups.filter(g => g.author.email === this._userService.user.email); this._ownerGroups$.next(ownerGroups); this._memberGroups$.next(groups); }); } ngOnDestroy() { this._userSub.unsubscribe(); this._memberGroups$.complete(); this._ownerGroups$.complete(); } /** * @returns an Observable of all the groups the currently logged user is a member of */ get memberGroups$() { return this._memberGroups$.asObservable(); } /** * @returns an Observable of all the groups the currently logged user is an owner of */ get ownerGroups$() { return this._ownerGroups$.asObservable(); } /** * @returns an Array of all the groups the currently logged user is a member of */ get memberGroups() { return this._memberGroups$.getValue(); } /** * @returns an Array of all the groups the currently logged user is an owner of */ get ownerGroups() { return this._ownerGroups$.getValue(); } /** * @returns an Observable containing the first element of the [ownerGroups$]{@link NextGroupService#ownerGroups$} observable, * or `undefined` if the contained array is empty */ get firstOwnerGroup$() { return this._ownerGroups$.pipe(map(array => array.length > 0 ? array[0] : undefined)); } /** * @returns the first element of the [ownerGroups]{@link NextGroupService#ownerGroups} array, or `undefined` if the array is empty */ get firstOwnerGroup() { const ownerGroups = this.ownerGroups; return ownerGroups.length > 0 ? ownerGroups[0] : undefined; } /** * @deprecated in NAE 5.6.0 - use [ownerGroups]{@link NextGroupService#ownerGroups} instead */ get groupOfUser() { return this.ownerGroups; } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NextGroupService, deps: [{ token: i1.UserService }, { token: i2.CaseResourceService }], target: i0.ɵɵFactoryTarget.Injectable }); static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NextGroupService, providedIn: 'root' }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NextGroupService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: () => [{ type: i1.UserService }, { type: i2.CaseResourceService }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dC1ncm91cC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmV0Z3JpZi1jb21wb25lbnRzLWNvcmUvc3JjL2xpYi9ncm91cHMvc2VydmljZXMvbmV4dC1ncm91cC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFHcEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBQy9ELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsR0FBRyxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTlDLE9BQU8sRUFBQyxlQUFlLEVBQWMsRUFBRSxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBQ25FLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDRDQUE0QyxDQUFDOzs7O0FBRTVFOzs7Ozs7OztHQVFHO0FBSUgsTUFBTSxPQUFPLGdCQUFnQjtJQU9IO0lBQXFDO0lBTGpELGNBQWMsQ0FBK0I7SUFDN0MsYUFBYSxDQUErQjtJQUU5QyxRQUFRLENBQWU7SUFFL0IsWUFBc0IsWUFBeUIsRUFBWSxvQkFBeUM7UUFBOUUsaUJBQVksR0FBWixZQUFZLENBQWE7UUFBWSx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXFCO1FBQ2hHLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxlQUFlLENBQWMsRUFBRSxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBYyxFQUFFLENBQUMsQ0FBQztRQUUzRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDeEMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2IsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMs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QWdCOzRHQUFoQixnQkFBZ0IsY0FGZixNQUFNOzs0RkFFUCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBPbkRlc3Ryb3l9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSAnLi4vLi4vdXNlci9zZXJ2aWNlcy91c2VyLnNlcnZpY2UnO1xuaW1wb3J0IHtDYXNlUmVzb3VyY2VTZXJ2aWNlfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvZW5naW5lLWVuZHBvaW50L2Nhc2UtcmVzb3VyY2Uuc2VydmljZSc7XG5pbXBvcnQge1NpbXBsZUZpbHRlcn0gZnJvbSAnLi4vLi4vZmlsdGVyL21vZGVscy9zaW1wbGUtZmlsdGVyJztcbmltcG9ydCB7SHR0cFBhcmFtc30gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHttYXAsIHN3aXRjaE1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtDYXNlfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvaW50ZXJmYWNlL2Nhc2UnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIG9mLCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtQYWdpbmF0aW9uUGFyYW1zfSBmcm9tICcuLi8uLi91dGlsaXR5L3BhZ2luYXRpb24vcGFnaW5hdGlvbi1wYXJhbXMnO1xuXG4vKipcbiAqIFRoaXMgc2VydmljZSBhbGxvd3MgYWNjZXNzIHRvIGluZm9ybWF0aW9uIGFib3V0IHRoZSBncm91cHMgb2YgdGhlIGN1cnJlbnRseSBsb2dnZWQgdXNlci5cbiAqXG4gKiBJZiBubyB1c2VyIGlzIGxvZ2dlZCBhbiBlbXB0eSBhcnJheSBpcyBwcm92aWRlZC5cbiAqXG4gKiBJZiBhIHVzZXIgY2FuIGJlIG93bmVyIG9mIGF0IG1vc3Qgb25lIGdyb3VwLCB0aGlzIHNlcnZpY2UgcHJvdmlkZXMgdXRpbGl0eSBtZXRob2RzIHRvIGFjY2VzcyB0aGlzIGdyb3VwIGRpcmVjdGx5LlxuICpcbiAqIFRoZSBncm91cHMgYXJlIGFzc3VtZWQgdG8gYmUgaW5zdGFuY2VzIG9mIHRoZSBlbmdpbmUgZ3JvdXAgcHJvY2VzcywgdGhpcyBpcyBuZXZlciBjaGVja2VkIG5vciBlbmZvcmNlZC5cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgTmV4dEdyb3VwU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG5cbiAgICBwcm90ZWN0ZWQgX21lbWJlckdyb3VwcyQ6IEJlaGF2aW9yU3ViamVjdDxBcnJheTxDYXNlPj47XG4gICAgcHJvdGVjdGVkIF9vd25lckdyb3VwcyQ6IEJlaGF2aW9yU3ViamVjdDxBcnJheTxDYXNlPj47XG5cbiAgICBwcml2YXRlIF91c2VyU3ViOiBTdWJzY3JpcHRpb247XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX3VzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSwgcHJvdGVjdGVkIF9jYXNlUmVzb3VyY2VTZXJ2aWNlOiBDYXNlUmVzb3VyY2VTZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMuX293bmVyR3JvdXBzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8Q2FzZT4+KFtdKTtcbiAgICAgICAgdGhpcy5fbWVtYmVyR3JvdXBzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8Q2FzZT4+KFtdKTtcblxuICAgICAgICB0aGlzLl91c2VyU3ViID0gdGhpcy5fdXNlclNlcnZpY2UudXNlciQucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcCh1c2VyID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXVzZXIgfHwgdXNlci5pZCA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpLnNldChQYWdpbmF0aW9uUGFyYW1zLlBBR0VfU0laRSwgYCR7KHVzZXIgYXMgYW55KS5uZXh0R3JvdXBzLmxlbmd0aH1gKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYXNlUmVzb3VyY2VTZXJ2aWNlLnNlYXJjaENhc2VzKFNpbXBsZUZpbHRlci5mcm9tQ2FzZVF1ZXJ5KHtpZDogKHVzZXIgYXMgYW55KS5uZXh0R3JvdXBzfSksIHBhcmFtcylcbiAgICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXAocGFnZSA9PiBwYWdlLmNvbnRlbnQgPyBwYWdlLmNvbnRlbnQgOiBbXSksXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXAoZ3JvdXBzID0+IGdyb3Vwcy5maWx0ZXIoZ3JvdXAgPT4gZ3JvdXAuYXV0aG9yLmZ1bGxOYW1lICE9PSAnYXBwbGljYXRpb24gZW5naW5lJykpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApLnN1YnNjcmliZShncm91cHMgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3duZXJHcm91cHMgPSBncm91cHMuZmlsdGVyKGcgPT4gZy5hdXRob3IuZW1haWwgPT09IHRoaXMuX3VzZXJTZXJ2aWNlLnVzZXIuZW1haWwpO1xuICAgICAgICAgICAgdGhpcy5fb3duZXJHcm91cHMkLm5leHQob3duZXJHcm91cHMpO1xuICAgICAgICAgICAgdGhpcy5fbWVtYmVyR3JvdXBzJC5uZXh0KGdyb3Vwcyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl91c2VyU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX21lbWJlckdyb3VwcyQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5fb3duZXJHcm91cHMkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgYW4gT2JzZXJ2YWJsZSBvZiBhbGwgdGhlIGdyb3VwcyB0aGUgY3VycmVudGx5IGxvZ2dlZCB1c2VyIGlzIGEgbWVtYmVyIG9mXG4gICAgICovXG4gICAgcHVibGljIGdldCBtZW1iZXJHcm91cHMkKCk6IE9ic2VydmFibGU8QXJyYXk8Q2FzZT4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21lbWJlckdyb3VwcyQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgYW4gT2JzZXJ2YWJsZSBvZiBhbGwgdGhlIGdyb3VwcyB0aGUgY3VycmVudGx5IGxvZ2dlZCB1c2VyIGlzIGFuIG93bmVyIG9mXG4gICAgICovXG4gICAgcHVibGljIGdldCBvd25lckdyb3VwcyQoKTogT2JzZXJ2YWJsZTxBcnJheTxDYXNlPj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fb3duZXJHcm91cHMkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIGFuIEFycmF5IG9mIGFsbCB0aGUgZ3JvdXBzIHRoZSBjdXJyZW50bHkgbG9nZ2VkIHVzZXIgaXMgYSBtZW1iZXIgb2ZcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IG1lbWJlckdyb3VwcygpOiBBcnJheTxDYXNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tZW1iZXJHcm91cHMkLmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgYW4gQXJyYXkgb2YgYWxsIHRoZSBncm91cHMgdGhlIGN1cnJlbnRseSBsb2dnZWQgdXNlciBpcyBhbiBvd25lciBvZlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgb3duZXJHcm91cHMoKTogQXJyYXk8Q2FzZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fb3duZXJHcm91cHMkLmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgYW4gT2JzZXJ2YWJsZSBjb250YWluaW5nIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBbb3duZXJHcm91cHMkXXtAbGluayBOZXh0R3JvdXBTZXJ2aWNlI293bmVyR3JvdXBzJH0gb2JzZXJ2YWJsZSxcbiAgICAgKiBvciBgdW5kZWZpbmVkYCBpZiB0aGUgY29udGFpbmVkIGFycmF5IGlzIGVtcHR5XG4gICAgICovXG4gICAgcHVibGljIGdldCBmaXJzdE93bmVyR3JvdXAkKCk6IE9ic2VydmFibGU8Q2FzZSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fb3duZXJHcm91cHMkLnBpcGUobWFwKGFycmF5ID0+IGFycmF5Lmxlbmd0aCA+IDAgPyBhcnJheVswXSA6IHVuZGVmaW5lZCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBbb3duZXJHcm91cHNde0BsaW5rIE5leHRHcm91cFNlcnZpY2Ujb3duZXJHcm91cHN9IGFycmF5LCBvciBgdW5kZWZpbmVkYCBpZiB0aGUgYXJyYXkgaXMgZW1wdHlcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGZpcnN0T3duZXJHcm91cCgpOiBDYXNlIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3Qgb3duZXJHcm91cHMgPSB0aGlzLm93bmVyR3JvdXBzO1xuICAgICAgICByZXR1cm4gb3duZXJHcm91cHMubGVuZ3RoID4gMCA/IG93bmVyR3JvdXBzWzBdIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIGluIE5BRSA1LjYuMCAtIHVzZSBbb3duZXJHcm91cHNde0BsaW5rIE5leHRHcm91cFNlcnZpY2Ujb3duZXJHcm91cHN9IGluc3RlYWRcbiAgICAgKi9cbiAgICBnZXQgZ3JvdXBPZlVzZXIoKTogQXJyYXk8Q2FzZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5vd25lckdyb3VwcztcbiAgICB9XG59XG4iXX0=