@netgrif/components-core
Version:
Netgrif Application engine frontend core Angular library
86 lines • 10.9 kB
JavaScript
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
import { map } from 'rxjs/operators';
import * as i0 from "@angular/core";
import * as i1 from "./next-group.service";
/**
* This service to the groups that are "active" for the logged user.
*
* The meaning of "active" can wary from application to application. And this service provides the utility to track this state.
*
* The active groups are assumed to be a subset of the groups the logged user is a member of,
* but this assumption is not enforced nor checked.
*
* If at most one group can be active at a time, 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.
*
* In the default implementation the initially active groups are all the groups the logged user is a member of.
*/
export class ActiveGroupService {
_groupService;
_activeGroups$;
_groupSub;
constructor(_groupService) {
this._groupService = _groupService;
this._activeGroups$ = new BehaviorSubject([]);
this._groupSub = this._groupService.memberGroups$.subscribe(groups => {
this._activeGroups$.next(groups);
});
}
ngOnDestroy() {
this._groupSub.unsubscribe();
this._activeGroups$.complete();
}
/**
* In the default implementation this stream copies the values of the [memberGroups$]{@link NextGroupService#memberGroups$} stream
* of the {@link NextGroupService}. Whenever the copies stream emits, the underlying stream in this class emits the same value.
*
* @returns an Observable of all the groups that are currently active
*/
get activeGroups$() {
return this._activeGroups$.asObservable();
}
get activeGroups() {
return this._activeGroups$.getValue();
}
set activeGroups(activeGroups) {
this._activeGroups$.next(activeGroups);
}
/**
* @returns an Observable containing the first element of the [activeGroups$]{@link ActiveGroupService#activeGroups$} observable,
* or `undefined` if the contained array is empty
*/
get activeGroup$() {
return this.activeGroups$.pipe(map(array => array.length > 0 ? array[0] : undefined));
}
/**
* @returns the first element of the [activeGroups]{@link ActiveGroupService#activeGroups} array, or `undefined` if the array is empty
*/
get activeGroup() {
const activeGroups = this.activeGroups;
return activeGroups.length > 0 ? activeGroups[0] : undefined;
}
/**
* Emits a new array into the [activeGroups$]{@link ActiveGroupService#activeGroups$} observable, that contains only
* the provided {@link Case} object. If `undefined` is passed as argument, an empty array will be pushed into the observable.
* @param activeGroup the new active group case reference
*/
set activeGroup(activeGroup) {
if (activeGroup === undefined) {
this._activeGroups$.next([]);
}
else {
this._activeGroups$.next([activeGroup]);
}
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ActiveGroupService, deps: [{ token: i1.NextGroupService }], target: i0.ɵɵFactoryTarget.Injectable });
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ActiveGroupService, providedIn: 'root' });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ActiveGroupService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: () => [{ type: i1.NextGroupService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZlLWdyb3VwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMtY29yZS9zcmMvbGliL2dyb3Vwcy9zZXJ2aWNlcy9hY3RpdmUtZ3JvdXAuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sRUFBQyxlQUFlLEVBQTJCLE1BQU0sTUFBTSxDQUFDO0FBRy9ELE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBRW5DOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFJSCxNQUFNLE9BQU8sa0JBQWtCO0lBTUw7SUFKWixjQUFjLENBQStCO0lBRS9DLFNBQVMsQ0FBZTtJQUVoQyxZQUFzQixhQUErQjtRQUEvQixrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7UUFDakQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBYyxFQUFFLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNqRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILElBQUksYUFBYTtRQUNiLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ1osT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFRCxJQUFJLFlBQVksQ0FBQyxZQUF5QjtRQUN0QyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBSSxZQUFZO1FBQ1osT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksV0FBVztRQUNYLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDdkMsT0FBTyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDakUsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFJLFdBQVcsQ0FBQyxXQUFpQjtRQUM3QixJQUFJLFdBQVcsS0FBSyxTQUFTLEVBQUU7WUFDM0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDaEM7YUFBTTtZQUNILElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztTQUMzQztJQUNMLENBQUM7d0dBL0RRLGtCQUFrQjs0R0FBbEIsa0JBQWtCLGNBRmYsTUFBTTs7NEZBRVQsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgT25EZXN0cm95fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtDYXNlfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvaW50ZXJmYWNlL2Nhc2UnO1xuaW1wb3J0IHtOZXh0R3JvdXBTZXJ2aWNlfSBmcm9tICcuL25leHQtZ3JvdXAuc2VydmljZSc7XG5pbXBvcnQge21hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG4vKipcbiAqIFRoaXMgc2VydmljZSB0byB0aGUgZ3JvdXBzIHRoYXQgYXJlIFwiYWN0aXZlXCIgZm9yIHRoZSBsb2dnZWQgdXNlci5cbiAqXG4gKiBUaGUgbWVhbmluZyBvZiBcImFjdGl2ZVwiIGNhbiB3YXJ5IGZyb20gYXBwbGljYXRpb24gdG8gYXBwbGljYXRpb24uIEFuZCB0aGlzIHNlcnZpY2UgcHJvdmlkZXMgdGhlIHV0aWxpdHkgdG8gdHJhY2sgdGhpcyBzdGF0ZS5cbiAqXG4gKiBUaGUgYWN0aXZlIGdyb3VwcyBhcmUgYXNzdW1lZCB0byBiZSBhIHN1YnNldCBvZiB0aGUgZ3JvdXBzIHRoZSBsb2dnZWQgdXNlciBpcyBhIG1lbWJlciBvZixcbiAqIGJ1dCB0aGlzIGFzc3VtcHRpb24gaXMgbm90IGVuZm9yY2VkIG5vciBjaGVja2VkLlxuICpcbiAqIElmIGF0IG1vc3Qgb25lIGdyb3VwIGNhbiBiZSBhY3RpdmUgYXQgYSB0aW1lLCB0aGlzIHNlcnZpY2UgcHJvdmlkZXMgdXRpbGl0eSBtZXRob2RzIHRvIGFjY2VzcyB0aGlzIGdyb3VwIGRpcmVjdGx5LlxuICpcbiAqIFRoZSBncm91cHMgYXJlIGFzc3VtZWQgdG8gYmUgaW5zdGFuY2VzIG9mIHRoZSBlbmdpbmUgZ3JvdXAgcHJvY2VzcywgdGhpcyBpcyBuZXZlciBjaGVja2VkIG5vciBlbmZvcmNlZC5cbiAqXG4gKiBJbiB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB0aGUgaW5pdGlhbGx5IGFjdGl2ZSBncm91cHMgYXJlIGFsbCB0aGUgZ3JvdXBzIHRoZSBsb2dnZWQgdXNlciBpcyBhIG1lbWJlciBvZi5cbiAqL1xuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBBY3RpdmVHcm91cFNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gICAgcHJvdGVjdGVkIF9hY3RpdmVHcm91cHMkOiBCZWhhdmlvclN1YmplY3Q8QXJyYXk8Q2FzZT4+O1xuXG4gICAgcHJpdmF0ZSBfZ3JvdXBTdWI6IFN1YnNjcmlwdGlvbjtcblxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBfZ3JvdXBTZXJ2aWNlOiBOZXh0R3JvdXBTZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZUdyb3VwcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFycmF5PENhc2U+PihbXSk7XG4gICAgICAgIHRoaXMuX2dyb3VwU3ViID0gdGhpcy5fZ3JvdXBTZXJ2aWNlLm1lbWJlckdyb3VwcyQuc3Vic2NyaWJlKGdyb3VwcyA9PiB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVHcm91cHMkLm5leHQoZ3JvdXBzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2dyb3VwU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX2FjdGl2ZUdyb3VwcyQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbiB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB0aGlzIHN0cmVhbSBjb3BpZXMgdGhlIHZhbHVlcyBvZiB0aGUgW21lbWJlckdyb3VwcyRde0BsaW5rIE5leHRHcm91cFNlcnZpY2UjbWVtYmVyR3JvdXBzJH0gc3RyZWFtXG4gICAgICogb2YgdGhlIHtAbGluayBOZXh0R3JvdXBTZXJ2aWNlfS4gV2hlbmV2ZXIgdGhlIGNvcGllcyBzdHJlYW0gZW1pdHMsIHRoZSB1bmRlcmx5aW5nIHN0cmVhbSBpbiB0aGlzIGNsYXNzIGVtaXRzIHRoZSBzYW1lIHZhbHVlLlxuICAgICAqXG4gICAgICogQHJldHVybnMgYW4gT2JzZXJ2YWJsZSBvZiBhbGwgdGhlIGdyb3VwcyB0aGF0IGFyZSBjdXJyZW50bHkgYWN0aXZlXG4gICAgICovXG4gICAgZ2V0IGFjdGl2ZUdyb3VwcyQoKTogT2JzZXJ2YWJsZTxBcnJheTxDYXNlPj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlR3JvdXBzJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBnZXQgYWN0aXZlR3JvdXBzKCk6IEFycmF5PENhc2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZUdyb3VwcyQuZ2V0VmFsdWUoKTtcbiAgICB9XG5cbiAgICBzZXQgYWN0aXZlR3JvdXBzKGFjdGl2ZUdyb3VwczogQXJyYXk8Q2FzZT4pIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlR3JvdXBzJC5uZXh0KGFjdGl2ZUdyb3Vwcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgYW4gT2JzZXJ2YWJsZSBjb250YWluaW5nIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBbYWN0aXZlR3JvdXBzJF17QGxpbmsgQWN0aXZlR3JvdXBTZXJ2aWNlI2FjdGl2ZUdyb3VwcyR9IG9ic2VydmFibGUsXG4gICAgICogb3IgYHVuZGVmaW5lZGAgaWYgdGhlIGNvbnRhaW5lZCBhcnJheSBpcyBlbXB0eVxuICAgICAqL1xuICAgIGdldCBhY3RpdmVHcm91cCQoKTogT2JzZXJ2YWJsZTxDYXNlIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZUdyb3VwcyQucGlwZShtYXAoYXJyYXkgPT4gYXJyYXkubGVuZ3RoID4gMCA/IGFycmF5WzBdIDogdW5kZWZpbmVkKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIFthY3RpdmVHcm91cHNde0BsaW5rIEFjdGl2ZUdyb3VwU2VydmljZSNhY3RpdmVHcm91cHN9IGFycmF5LCBvciBgdW5kZWZpbmVkYCBpZiB0aGUgYXJyYXkgaXMgZW1wdHlcbiAgICAgKi9cbiAgICBnZXQgYWN0aXZlR3JvdXAoKTogQ2FzZSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IGFjdGl2ZUdyb3VwcyA9IHRoaXMuYWN0aXZlR3JvdXBzO1xuICAgICAgICByZXR1cm4gYWN0aXZlR3JvdXBzLmxlbmd0aCA+IDAgPyBhY3RpdmVHcm91cHNbMF0gOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW1pdHMgYSBuZXcgYXJyYXkgaW50byB0aGUgW2FjdGl2ZUdyb3VwcyRde0BsaW5rIEFjdGl2ZUdyb3VwU2VydmljZSNhY3RpdmVHcm91cHMkfSBvYnNlcnZhYmxlLCB0aGF0IGNvbnRhaW5zIG9ubHlcbiAgICAgKiB0aGUgcHJvdmlkZWQge0BsaW5rIENhc2V9IG9iamVjdC4gSWYgYHVuZGVmaW5lZGAgaXMgcGFzc2VkIGFzIGFyZ3VtZW50LCBhbiBlbXB0eSBhcnJheSB3aWxsIGJlIHB1c2hlZCBpbnRvIHRoZSBvYnNlcnZhYmxlLlxuICAgICAqIEBwYXJhbSBhY3RpdmVHcm91cCB0aGUgbmV3IGFjdGl2ZSBncm91cCBjYXNlIHJlZmVyZW5jZVxuICAgICAqL1xuICAgIHNldCBhY3RpdmVHcm91cChhY3RpdmVHcm91cDogQ2FzZSkge1xuICAgICAgICBpZiAoYWN0aXZlR3JvdXAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5fYWN0aXZlR3JvdXBzJC5uZXh0KFtdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZUdyb3VwcyQubmV4dChbYWN0aXZlR3JvdXBdKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==