UNPKG

@ng-web-apis/geolocation

Version:

This is a library for declarative use of Geolocation API with Angular

31 lines 5.18 kB
import { inject, Injectable } from '@angular/core'; import { finalize, Observable, shareReplay } from 'rxjs'; import { GEOLOCATION } from '../tokens/geolocation'; import { POSITION_OPTIONS } from '../tokens/geolocation-options'; import { GEOLOCATION_SUPPORT } from '../tokens/geolocation-support'; import * as i0 from "@angular/core"; class GeolocationService extends Observable { constructor() { const geolocationRef = inject(GEOLOCATION); const geolocationSupported = inject(GEOLOCATION_SUPPORT); const positionOptions = inject(POSITION_OPTIONS); let watchPositionId = 0; super((subscriber) => { if (!geolocationSupported) { subscriber.error('Geolocation is not supported in your browser'); } watchPositionId = geolocationRef.watchPosition((position) => subscriber.next(position), (positionError) => subscriber.error(positionError), positionOptions); }); return this.pipe(finalize(() => geolocationRef.clearWatch(watchPositionId)), shareReplay({ bufferSize: 1, refCount: true })); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GeolocationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GeolocationService, providedIn: 'root' }); } export { GeolocationService }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GeolocationService, decorators: [{ type: Injectable, args: [{ providedIn: 'root', }] }], ctorParameters: function () { return []; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvbG9jYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvZ2VvbG9jYXRpb24vc3JjL3NlcnZpY2VzL2dlb2xvY2F0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRXZELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUMvRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQzs7QUFFbEUsTUFHYSxrQkFBbUIsU0FBUSxVQUErQjtJQUNuRTtRQUNJLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzQyxNQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRWpELElBQUksZUFBZSxHQUFHLENBQUMsQ0FBQztRQUV4QixLQUFLLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUNqQixJQUFJLENBQUMsb0JBQW9CLEVBQUU7Z0JBQ3ZCLFVBQVUsQ0FBQyxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQzthQUNwRTtZQUVELGVBQWUsR0FBRyxjQUFjLENBQUMsYUFBYSxDQUMxQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFDdkMsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQ2xELGVBQWUsQ0FDbEIsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUNaLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQzFELFdBQVcsQ0FBQyxFQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBQyxDQUFDLENBQ3pCLENBQUM7SUFDNUIsQ0FBQzt3R0F4QlEsa0JBQWtCOzRHQUFsQixrQkFBa0IsY0FGZixNQUFNOztTQUVULGtCQUFrQjs0RkFBbEIsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aW5qZWN0LCBJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7ZmluYWxpemUsIE9ic2VydmFibGUsIHNoYXJlUmVwbGF5fSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtHRU9MT0NBVElPTn0gZnJvbSAnLi4vdG9rZW5zL2dlb2xvY2F0aW9uJztcbmltcG9ydCB7UE9TSVRJT05fT1BUSU9OU30gZnJvbSAnLi4vdG9rZW5zL2dlb2xvY2F0aW9uLW9wdGlvbnMnO1xuaW1wb3J0IHtHRU9MT0NBVElPTl9TVVBQT1JUfSBmcm9tICcuLi90b2tlbnMvZ2VvbG9jYXRpb24tc3VwcG9ydCc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEdlb2xvY2F0aW9uU2VydmljZSBleHRlbmRzIE9ic2VydmFibGU8R2VvbG9jYXRpb25Qb3NpdGlvbj4ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBjb25zdCBnZW9sb2NhdGlvblJlZiA9IGluamVjdChHRU9MT0NBVElPTik7XG4gICAgICAgIGNvbnN0IGdlb2xvY2F0aW9uU3VwcG9ydGVkID0gaW5qZWN0KEdFT0xPQ0FUSU9OX1NVUFBPUlQpO1xuICAgICAgICBjb25zdCBwb3NpdGlvbk9wdGlvbnMgPSBpbmplY3QoUE9TSVRJT05fT1BUSU9OUyk7XG5cbiAgICAgICAgbGV0IHdhdGNoUG9zaXRpb25JZCA9IDA7XG5cbiAgICAgICAgc3VwZXIoKHN1YnNjcmliZXIpID0+IHtcbiAgICAgICAgICAgIGlmICghZ2VvbG9jYXRpb25TdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKCdHZW9sb2NhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGluIHlvdXIgYnJvd3NlcicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3YXRjaFBvc2l0aW9uSWQgPSBnZW9sb2NhdGlvblJlZi53YXRjaFBvc2l0aW9uKFxuICAgICAgICAgICAgICAgIChwb3NpdGlvbikgPT4gc3Vic2NyaWJlci5uZXh0KHBvc2l0aW9uKSxcbiAgICAgICAgICAgICAgICAocG9zaXRpb25FcnJvcikgPT4gc3Vic2NyaWJlci5lcnJvcihwb3NpdGlvbkVycm9yKSxcbiAgICAgICAgICAgICAgICBwb3NpdGlvbk9wdGlvbnMsXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5waXBlKFxuICAgICAgICAgICAgZmluYWxpemUoKCkgPT4gZ2VvbG9jYXRpb25SZWYuY2xlYXJXYXRjaCh3YXRjaFBvc2l0aW9uSWQpKSxcbiAgICAgICAgICAgIHNoYXJlUmVwbGF5KHtidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZX0pLFxuICAgICAgICApIGFzIEdlb2xvY2F0aW9uU2VydmljZTtcbiAgICB9XG59XG4iXX0=