'use client'; import { useEffect, useRef } from 'react'; import { getSettings, saveDriverLocation, isAuthenticated } from '@/lib/pocketbase'; export default function LocationTracker() { const intervalRef = useRef | null>(null); useEffect(() => { if (!('geolocation' in navigator)) return; const settings = getSettings(); const intervalMs = Math.max(30000, settings.locationInterval * 1000); const trackLocation = () => { if (!isAuthenticated()) return; const auth = JSON.parse(localStorage.getItem('pocketbase_auth') || '{}'); const user = auth?.model; if (!user) return; navigator.geolocation.getCurrentPosition( (position) => { if (position.coords.accuracy > settings.minimumAccuracy) return; saveDriverLocation({ driver: user.id, latitude: position.coords.latitude, longitude: position.coords.longitude, accuracy: position.coords.accuracy || undefined, altitude: position.coords.altitude || undefined, speed: position.coords.speed || undefined, heading: position.coords.heading || undefined, timestamp: new Date().toISOString(), }); }, () => {}, { enableHighAccuracy: settings.enableHighAccuracy, maximumAge: intervalMs, timeout: 30000 } ); }; trackLocation(); intervalRef.current = setInterval(trackLocation, intervalMs); return () => { if (intervalRef.current !== null) { clearInterval(intervalRef.current); intervalRef.current = null; } }; }, []); return null; }