@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
80 lines • 12.7 kB
JavaScript
import { Injectable } from '@angular/core';
import { BehaviorSubject, of } from 'rxjs';
import { filter, map, switchMap } from 'rxjs/operators';
import { OptionsService } from '../common/options.service';
import { Permissions } from '../common/permissions.service';
import { AppStateService } from '../common/ui-state.service';
import { Steppers } from '../stepper/stepper.model';
import { StepperService } from '../stepper/stepper.service';
import { NEEDED_ROLE_FOR_SETUP, SETUP_FINISHED_STEP_ID } from './setup.model';
import { PluginsResolveService } from '../plugins/plugins-resolve.service';
import * as i0 from "@angular/core";
import * as i1 from "../stepper/stepper.service";
import * as i2 from "../common/permissions.service";
import * as i3 from "../common/options.service";
import * as i4 from "../common/ui-state.service";
import * as i5 from "../plugins/plugins-resolve.service";
export class SetupService {
/**
* @ignore only DI and initialization
*/
constructor(stepperService, permissions, options, ui, pluginsResolve) {
this.stepperService = stepperService;
this.permissions = permissions;
this.options = options;
this.ui = ui;
this.pluginsResolve = pluginsResolve;
this.skipSetup$ = new BehaviorSubject(false);
this.isSetupNeeded$ = this.pluginsResolve.allPluginsLoaded$.pipe(filter(loaded => loaded), switchMap(() => this.ui.currentUser.pipe(filter(user => !!user))), switchMap(() => this.ui.isOwnerOfApplication$()), switchMap(isOwner => {
if (!isOwner) {
return of([]);
}
return this.stepperService.getById$(Steppers.SETUP);
}), map((steps) => this.getNotCompletedSetupSteps(steps)), map(notCompletedSetupSteps => this.options.forceSetup ||
(this.options.isSetup && this.needsSetup(notCompletedSetupSteps))), switchMap(required => this.setupRequired(required)));
}
skipSetup() {
this.skipSetup$.next(true);
}
setupRequired(required) {
if (!required) {
return of(required);
}
return this.skipSetup$.pipe(map(skipped => !skipped));
}
needsSetup(notCompletedSetupSteps) {
notCompletedSetupSteps = this.excludeSetupFinishStep(notCompletedSetupSteps);
if (this.hasPermission()) {
return notCompletedSetupSteps.length > 0;
}
// Show setup screen as there are required steps but the user
// has no permission. The Setup screen will show an error to
// the user.
return this.hasRequiredSteps(notCompletedSetupSteps);
}
excludeSetupFinishStep(notCompletedSetupSteps) {
return notCompletedSetupSteps.filter(({ setupId }) => setupId !== SETUP_FINISHED_STEP_ID);
}
hasRequiredSteps(notCompletedSetupSteps) {
return notCompletedSetupSteps.some(step => step.required);
}
hasPermission() {
return this.permissions.hasRole(NEEDED_ROLE_FOR_SETUP);
}
getNotCompletedSetupSteps(steps) {
if (!this.ui.currentApplication.value) {
return steps;
}
return steps.filter(step => step.setupId &&
!(this.ui.currentApplication.value.config?.setup || []).includes(step.setupId));
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SetupService, deps: [{ token: i1.StepperService }, { token: i2.Permissions }, { token: i3.OptionsService }, { token: i4.AppStateService }, { token: i5.PluginsResolveService }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SetupService, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SetupService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: () => [{ type: i1.StepperService }, { type: i2.Permissions }, { type: i3.OptionsService }, { type: i4.AppStateService }, { type: i5.PluginsResolveService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXAuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvc2V0dXAvc2V0dXAuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxFQUFFLHFCQUFxQixFQUFhLHNCQUFzQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7Ozs7O0FBSzNFLE1BQU0sT0FBTyxZQUFZO0lBUXZCOztPQUVHO0lBQ0gsWUFDVSxjQUE4QixFQUM5QixXQUF3QixFQUN4QixPQUF1QixFQUN4QixFQUFtQixFQUNsQixjQUFxQztRQUpyQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDeEIsT0FBRSxHQUFGLEVBQUUsQ0FBaUI7UUFDbEIsbUJBQWMsR0FBZCxjQUFjLENBQXVCO1FBVnZDLGVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQVk5QyxJQUFJLENB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LENBQUMsTUFBTSxDQUNqQixJQUFJLENBQUMsRUFBRSxDQUNMLElBQUksQ0FBQyxPQUFPO1lBQ1osQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FDakYsQ0FBQztJQUNKLENBQUM7K0dBakZVLFlBQVk7bUhBQVosWUFBWSxjQUZYLE1BQU07OzRGQUVQLFlBQVk7a0JBSHhCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE9wdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL29wdGlvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBQZXJtaXNzaW9ucyB9IGZyb20gJy4uL2NvbW1vbi9wZXJtaXNzaW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7IEFwcFN0YXRlU2VydmljZSB9IGZyb20gJy4uL2NvbW1vbi91aS1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IFN0ZXBwZXJzIH0gZnJvbSAnLi4vc3RlcHBlci9zdGVwcGVyLm1vZGVsJztcbmltcG9ydCB7IFN0ZXBwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc3RlcHBlci9zdGVwcGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgTkVFREVEX1JPTEVfRk9SX1NFVFVQLCBTZXR1cFN0ZXAsIFNFVFVQX0ZJTklTSEVEX1NURVBfSUQgfSBmcm9tICcuL3NldHVwLm1vZGVsJztcbmltcG9ydCB7IFBsdWdpbnNSZXNvbHZlU2VydmljZSB9IGZyb20gJy4uL3BsdWdpbnMvcGx1Z2lucy1yZXNvbHZlLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBTZXR1cFNlcnZpY2Uge1xuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBhcHBsaWNhdGlvbnMgbmVlZHMgdG8gc2hvdyBhIHNldHVwIHdpemFyZC5cbiAgICovXG4gIGlzU2V0dXBOZWVkZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gIHByaXZhdGUgc2tpcFNldHVwJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gIC8qKlxuICAgKiBAaWdub3JlIG9ubHkgREkgYW5kIGluaXRpYWxpemF0aW9uXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHN0ZXBwZXJTZXJ2aWNlOiBTdGVwcGVyU2VydmljZSxcbiAgICBwcml2YXRlIHBlcm1pc3Npb25zOiBQZXJtaXNzaW9ucyxcbiAgICBwcml2YXRlIG9wdGlvbnM6IE9wdGlvbnNTZXJ2aWNlLFxuICAgIHB1YmxpYyB1aTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGx1Z2luc1Jlc29sdmU6IFBsdWdpbnNSZXNvbHZlU2VydmljZVxuICApIHtcbiAgICB0aGlzLmlzU2V0dXBOZWVkZWQkID0gdGhpcy5wbHVnaW5zUmVzb2x2ZS5hbGxQbHVnaW5zTG9hZGVkJC5waXBlKFxuICAgICAgZmlsdGVyKGxvYWRlZCA9PiBsb2FkZWQpLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMudWkuY3VycmVudFVzZXIucGlwZShmaWx0ZXIodXNlciA9PiAhIXVzZXIpKSksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy51aS5pc093bmVyT2ZBcHBsaWNhdGlvbiQoKSksXG4gICAgICBzd2l0Y2hNYXAoaXNPd25lciA9PiB7XG4gICAgICAgIGlmICghaXNPd25lcikge1xuICAgICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuc3RlcHBlclNlcnZpY2UuZ2V0QnlJZCQoU3RlcHBlcnMuU0VUVVApO1xuICAgICAgfSksXG4gICAgICBtYXAoKHN0ZXBzOiBTZXR1cFN0ZXBbXSkgPT4gdGhpcy5nZXROb3RDb21wbGV0ZWRTZXR1cFN0ZXBzKHN0ZXBzKSksXG4gICAgICBtYXAoXG4gICAgICAgIG5vdENvbXBsZXRlZFNldHVwU3RlcHMgPT5cbiAgICAgICAgICB0aGlzLm9wdGlvbnMuZm9yY2VTZXR1cCB8fFxuICAgICAgICAgICh0aGlzLm9wdGlvbnMuaXNTZXR1cCAmJiB0aGlzLm5lZWRzU2V0dXAobm90Q29tcGxldGVkU2V0dXBTdGVwcykpXG4gICAgICApLFxuICAgICAgc3dpdGNoTWFwKHJlcXVpcmVkID0+IHRoaXMuc2V0dXBSZXF1aXJlZChyZXF1aXJlZCkpXG4gICAgKTtcbiAgfVxuXG4gIHNraXBTZXR1cCgpIHtcbiAgICB0aGlzLnNraXBTZXR1cCQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBSZXF1aXJlZChyZXF1aXJlZDogYm9vbGVhbik6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIGlmICghcmVxdWlyZWQpIHtcbiAgICAgIHJldHVybiBvZihyZXF1aXJlZCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNraXBTZXR1cCQucGlwZShtYXAoc2tpcHBlZCA9PiAhc2tpcHBlZCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBuZWVkc1NldHVwKG5vdENvbXBsZXRlZFNldHVwU3RlcHM6IFNldHVwU3RlcFtdKTogYm9vbGVhbiB7XG4gICAgbm90Q29tcGxldGVkU2V0dXBTdGVwcyA9IHRoaXMuZXhjbHVkZVNldHVwRmluaXNoU3RlcChub3RDb21wbGV0ZWRTZXR1cFN0ZXBzKTtcbiAgICBpZiAodGhpcy5oYXNQZXJtaXNzaW9uKCkpIHtcbiAgICAgIHJldHVybiBub3RDb21wbGV0ZWRTZXR1cFN0ZXBzLmxlbmd0aCA+IDA7XG4gICAgfVxuICAgIC8vIFNob3cgc2V0dXAgc2NyZWVuIGFzIHRoZXJlIGFyZSByZXF1aXJlZCBzdGVwcyBidXQgdGhlIHVzZXJcbiAgICAvLyBoYXMgbm8gcGVybWlzc2lvbi4gVGhlIFNldHVwIHNjcmVlbiB3aWxsIHNob3cgYW4gZXJyb3IgdG9cbiAgICAvLyB0aGUgdXNlci5cbiAgICByZXR1cm4gdGhpcy5oYXNSZXF1aXJlZFN0ZXBzKG5vdENvbXBsZXRlZFNldHVwU3RlcHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBleGNsdWRlU2V0dXBGaW5pc2hTdGVwKG5vdENvbXBsZXRlZFNldHVwU3RlcHM6IFNldHVwU3RlcFtdKSB7XG4gICAgcmV0dXJuIG5vdENvbXBsZXRlZFNldHVwU3RlcHMuZmlsdGVyKCh7IHNldHVwSWQgfSkgPT4gc2V0dXBJZCAhPT0gU0VUVVBfRklOSVNIRURfU1RFUF9JRCk7XG4gIH1cblxuICBwcml2YXRlIGhhc1JlcXVpcmVkU3RlcHMobm90Q29tcGxldGVkU2V0dXBTdGVwczogU2V0dXBTdGVwW10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gbm90Q29tcGxldGVkU2V0dXBTdGVwcy5zb21lKHN0ZXAgPT4gc3RlcC5yZXF1aXJlZCk7XG4gIH1cblxuICBwcml2YXRlIGhhc1Blcm1pc3Npb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucGVybWlzc2lvbnMuaGFzUm9sZShORUVERURfUk9MRV9GT1JfU0VUVVApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXROb3RDb21wbGV0ZWRTZXR1cFN0ZXBzKHN0ZXBzOiBTZXR1cFN0ZXBbXSk6IFNldHVwU3RlcFtdIHtcbiAgICBpZiAoIXRoaXMudWkuY3VycmVudEFwcGxpY2F0aW9uLnZhbHVlKSB7XG4gICAgICByZXR1cm4gc3RlcHM7XG4gICAgfVxuICAgIHJldHVybiBzdGVwcy5maWx0ZXIoXG4gICAgICBzdGVwID0+XG4gICAgICAgIHN0ZXAuc2V0dXBJZCAmJlxuICAgICAgICAhKHRoaXMudWkuY3VycmVudEFwcGxpY2F0aW9uLnZhbHVlLmNvbmZpZz8uc2V0dXAgfHwgW10pLmluY2x1ZGVzKHN0ZXAuc2V0dXBJZClcbiAgICApO1xuICB9XG59XG4iXX0=