@ng-web-apis/permissions
Version:
A library for comfortable use of Permissions API in Angular applications
65 lines (58 loc) • 2.6 kB
JavaScript
import * as i0 from '@angular/core';
import { InjectionToken, inject, Injectable } from '@angular/core';
import { Observable, Subscription, from, switchMap, fromEvent, startWith, map, shareReplay } from 'rxjs';
import { WA_NAVIGATOR } from '@ng-web-apis/common';
const WA_PERMISSIONS = new InjectionToken('[WA_PERMISSIONS]', {
factory: () => inject(WA_NAVIGATOR).permissions,
});
/**
* @deprecated: drop in v5.0, use {@link WA_PERMISSIONS}
*/
const PERMISSIONS = WA_PERMISSIONS;
const WA_PERMISSIONS_SUPPORT = new InjectionToken('[WA_PERMISSIONS_SUPPORT]', {
factory: () => !!inject(PERMISSIONS),
});
/**
* @deprecated: drop in v5.0, use {@link WA_PERMISSIONS_SUPPORT}
*/
const PERMISSIONS_SUPPORT = WA_PERMISSIONS_SUPPORT;
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' });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PermissionsService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root',
}]
}] });
function isGranted(state) {
return state === 'granted';
}
function isDenied(state) {
return state === 'denied';
}
function isPrompt(state) {
return state === 'prompt' || state === 'default';
}
/**
* Generated bundle index. Do not edit.
*/
export { PERMISSIONS, PERMISSIONS_SUPPORT, PermissionsService, WA_PERMISSIONS, WA_PERMISSIONS_SUPPORT, isDenied, isGranted, isPrompt };
//# sourceMappingURL=ng-web-apis-permissions.mjs.map