marco.pms.web/src/hooks/usePositionTracker.js

28 lines
757 B
JavaScript

import { useState, useEffect } from 'react';
import showToast from '../services/toastService';
let hasShownLocationErrorToast = false; // global flag
export const usePositionTracker = () => {
const [coords, setCoords] = useState({ latitude: 0, longitude: 0 });
useEffect(() => {
const locationID = navigator.geolocation.watchPosition(
({ coords }) => {
setCoords(coords);
},
(error) => {
if (!hasShownLocationErrorToast) {
showToast("Please Allow Location", "warn");
hasShownLocationErrorToast = true;
}
},
{ enableHighAccuracy: true, timeout: 20000, maximumAge: 1000 }
);
return () => navigator.geolocation.clearWatch(locationID);
}, []);
return coords;
};