@ng-web-apis/permissions
Version:
A library for comfortable use of Permissions API in Angular applications
33 lines • 6.05 kB
JavaScript
import { inject, Injectable } from '@angular/core';
import { from, fromEvent, map, Observable, shareReplay, startWith, Subscription, switchMap, } from 'rxjs';
import { WA_PERMISSIONS } from '../tokens/permissions';
import { WA_PERMISSIONS_SUPPORT } from '../tokens/permissions-support';
import * as i0 from "@angular/core";
class PermissionsService {
permissions = inject(WA_PERMISSIONS);
permissionsSupported = inject(WA_PERMISSIONS_SUPPORT);
state(nameOrDescriptor) {
const descriptor = typeof nameOrDescriptor === 'string'
? { name: nameOrDescriptor }
: nameOrDescriptor;
return new Observable((subscriber) => {
if (!this.permissionsSupported) {
subscriber.error('Permissions is not supported in your browser');
return new Subscription();
}
return from(this.permissions.query(descriptor))
.pipe(switchMap((status) => fromEvent(status, 'change').pipe(startWith(null), map(() => status.state))))
.subscribe(subscriber);
}).pipe(shareReplay({ bufferSize: 1, refCount: true }));
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PermissionsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PermissionsService, providedIn: 'root' });
}
export { PermissionsService };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PermissionsService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root',
}]
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbnMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvcGVybWlzc2lvbnMvc3JjL3NlcnZpY2VzL3Blcm1pc3Npb25zLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUNILElBQUksRUFDSixTQUFTLEVBQ1QsR0FBRyxFQUNILFVBQVUsRUFDVixXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksRUFDWixTQUFTLEdBQ1osTUFBTSxNQUFNLENBQUM7QUFFZCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sK0JBQStCLENBQUM7O0FBSXJFLE1BR2Esa0JBQWtCO0lBQ1YsV0FBVyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNyQyxvQkFBb0IsR0FBRyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUloRSxLQUFLLENBQ1IsZ0JBQXVEO1FBRXZELE1BQU0sVUFBVSxHQUNaLE9BQU8sZ0JBQWdCLEtBQUssUUFBUTtZQUNoQyxDQUFDLENBQUMsRUFBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUM7WUFDMUIsQ0FBQyxDQUFDLGdCQUFnQixDQUFDO1FBRTNCLE9BQU8sSUFBSSxVQUFVLENBQWtCLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDbEQsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtnQkFDNUIsVUFBVSxDQUFDLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO2dCQUVqRSxPQUFPLElBQUksWUFBWSxFQUFFLENBQUM7YUFDN0I7WUFFRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDMUMsSUFBSSxDQUNELFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQ2pCLFNBQVMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUM1QixTQUFTLENBQUMsSUFBSSxDQUFDLEVBQ2YsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FDMUIsQ0FDSixDQUNKO2lCQUNBLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFELENBQUM7d0dBaENRLGtCQUFrQjs0R0FBbEIsa0JBQWtCLGNBRmYsTUFBTTs7U0FFVCxrQkFBa0I7NEZBQWxCLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2luamVjdCwgSW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIGZyb20sXG4gICAgZnJvbUV2ZW50LFxuICAgIG1hcCxcbiAgICBPYnNlcnZhYmxlLFxuICAgIHNoYXJlUmVwbGF5LFxuICAgIHN0YXJ0V2l0aCxcbiAgICBTdWJzY3JpcHRpb24sXG4gICAgc3dpdGNoTWFwLFxufSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtXQV9QRVJNSVNTSU9OU30gZnJvbSAnLi4vdG9rZW5zL3Blcm1pc3Npb25zJztcbmltcG9ydCB7V0FfUEVSTUlTU0lPTlNfU1VQUE9SVH0gZnJvbSAnLi4vdG9rZW5zL3Blcm1pc3Npb25zLXN1cHBvcnQnO1xuXG5leHBvcnQgdHlwZSBQZXJtaXNzaW9uc1F1ZXJ5QXJncyA9IFBhcmFtZXRlcnM8dHlwZW9mIFBlcm1pc3Npb25zLnByb3RvdHlwZS5xdWVyeT5bMF07XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFBlcm1pc3Npb25zU2VydmljZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBwZXJtaXNzaW9ucyA9IGluamVjdChXQV9QRVJNSVNTSU9OUyk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBwZXJtaXNzaW9uc1N1cHBvcnRlZCA9IGluamVjdChXQV9QRVJNSVNTSU9OU19TVVBQT1JUKTtcblxuICAgIHB1YmxpYyBzdGF0ZShuYW1lOiBQZXJtaXNzaW9uTmFtZSk6IE9ic2VydmFibGU8UGVybWlzc2lvblN0YXRlPjtcbiAgICBwdWJsaWMgc3RhdGUoZGVzY3JpcHRvcjogUGVybWlzc2lvbnNRdWVyeUFyZ3MpOiBPYnNlcnZhYmxlPFBlcm1pc3Npb25TdGF0ZT47XG4gICAgcHVibGljIHN0YXRlKFxuICAgICAgICBuYW1lT3JEZXNjcmlwdG9yOiBQZXJtaXNzaW9uTmFtZSB8IFBlcm1pc3Npb25zUXVlcnlBcmdzLFxuICAgICk6IE9ic2VydmFibGU8UGVybWlzc2lvblN0YXRlPiB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3I6IFBlcm1pc3Npb25EZXNjcmlwdG9yID1cbiAgICAgICAgICAgIHR5cGVvZiBuYW1lT3JEZXNjcmlwdG9yID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgID8ge25hbWU6IG5hbWVPckRlc2NyaXB0b3J9XG4gICAgICAgICAgICAgICAgOiBuYW1lT3JEZXNjcmlwdG9yO1xuXG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxQZXJtaXNzaW9uU3RhdGU+KChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucGVybWlzc2lvbnNTdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKCdQZXJtaXNzaW9ucyBpcyBub3Qgc3VwcG9ydGVkIGluIHlvdXIgYnJvd3NlcicpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZyb20odGhpcy5wZXJtaXNzaW9ucy5xdWVyeShkZXNjcmlwdG9yKSlcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoTWFwKChzdGF0dXMpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tRXZlbnQoc3RhdHVzLCAnY2hhbmdlJykucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFdpdGgobnVsbCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKCgpID0+IHN0YXR1cy5zdGF0ZSksXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9KS5waXBlKHNoYXJlUmVwbGF5KHtidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZX0pKTtcbiAgICB9XG59XG4iXX0=