80 lines
2.1 KiB
JavaScript
80 lines
2.1 KiB
JavaScript
import { createAtom } from "~/lib/atomic-zustand";
|
|
import { createLogger } from "~/lib/logger";
|
|
import { BACKGROUND_SCOPES } from "~/lib/logger/scopes";
|
|
|
|
const locationStoreLogger = createLogger({
|
|
module: BACKGROUND_SCOPES.GEOLOCATION,
|
|
feature: "store",
|
|
});
|
|
|
|
export default createAtom(({ merge, get }) => {
|
|
const update = (coords) => {
|
|
const prevState = get();
|
|
locationStoreLogger.debug("Updating location store", {
|
|
isFirstUpdate: !prevState.loaded,
|
|
hasValidCoords: !!(coords.latitude && coords.longitude),
|
|
accuracy: coords.accuracy,
|
|
});
|
|
|
|
merge({
|
|
coords,
|
|
loaded: true,
|
|
});
|
|
|
|
if (!prevState.loaded) {
|
|
locationStoreLogger.info(
|
|
"Location store initialized with first coordinates",
|
|
);
|
|
}
|
|
|
|
// Log significant changes in accuracy or movement
|
|
if (prevState.loaded) {
|
|
const prevCoords = prevState.coords;
|
|
const accuracyChange = Math.abs(
|
|
(coords.accuracy || 0) - (prevCoords.accuracy || 0),
|
|
);
|
|
const hasSignificantAccuracyChange = accuracyChange > 10; // 10 meters threshold
|
|
|
|
if (hasSignificantAccuracyChange) {
|
|
locationStoreLogger.debug("Significant accuracy change detected", {
|
|
previousAccuracy: prevCoords.accuracy,
|
|
newAccuracy: coords.accuracy,
|
|
change: accuracyChange,
|
|
});
|
|
}
|
|
|
|
// Log if speed or heading information becomes available
|
|
if (
|
|
(!prevCoords.speed && coords.speed) ||
|
|
(!prevCoords.heading && coords.heading)
|
|
) {
|
|
locationStoreLogger.debug("New motion data available", {
|
|
hasSpeed: !!coords.speed,
|
|
hasHeading: !!coords.heading,
|
|
speed: coords.speed,
|
|
heading: coords.heading,
|
|
});
|
|
}
|
|
}
|
|
};
|
|
|
|
locationStoreLogger.debug("Initializing location store");
|
|
|
|
return {
|
|
default: {
|
|
loaded: false,
|
|
coords: {
|
|
accuracy: null,
|
|
altitude: null,
|
|
altitudeAccuracy: null,
|
|
heading: null,
|
|
latitude: null,
|
|
longitude: null,
|
|
speed: null,
|
|
},
|
|
},
|
|
actions: {
|
|
update,
|
|
},
|
|
};
|
|
});
|