@ng-web-apis/geolocation
Version:
This is a library for declarative use of Geolocation API with Angular
31 lines • 5.18 kB
JavaScript
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=