diff --git a/src/frontend/hooks/tracks/useCurrentTrackStore.ts b/src/frontend/hooks/tracks/useCurrentTrackStore.ts index 1a125abd3..2febd86ab 100644 --- a/src/frontend/hooks/tracks/useCurrentTrackStore.ts +++ b/src/frontend/hooks/tracks/useCurrentTrackStore.ts @@ -3,23 +3,30 @@ import {calculateTotalDistance} from '../../utils/distance'; import {LocationHistoryPoint} from '../../sharedTypes/location'; type TracksStoreState = { - isTracking: boolean; locationHistory: LocationHistoryPoint[]; observations: string[]; distance: number; - trackingSince: Date; addNewObservation: (observationId: string) => void; addNewLocations: (locationData: LocationHistoryPoint[]) => void; clearLocationHistory: () => void; setTracking: (val: boolean) => void; -}; +} & ( + | { + isTracking: true; + trackingSince: Date; + } + | { + isTracking: false; + trackingSince: null; + } +); export const useCurrentTrackStore = create(set => ({ isTracking: false, locationHistory: [], observations: [], distance: 0, - trackingSince: new Date(0), + trackingSince: null, addNewObservation: (id: string) => set(state => ({observations: [...state.observations, id]})), addNewLocations: data => @@ -49,8 +56,9 @@ export const useCurrentTrackStore = create(set => ({ }), clearLocationHistory: () => set(() => ({locationHistory: []})), setTracking: (val: boolean) => - set(() => ({ - isTracking: val, - trackingSince: val ? new Date() : new Date(0), - })), + set(() => + val + ? {isTracking: true, trackingSince: new Date()} + : {isTracking: false, trackingSince: null}, + ), })); diff --git a/src/frontend/hooks/tracks/useTracking.ts b/src/frontend/hooks/tracks/useTracking.ts index 0646d5985..51994c40f 100644 --- a/src/frontend/hooks/tracks/useTracking.ts +++ b/src/frontend/hooks/tracks/useTracking.ts @@ -41,14 +41,14 @@ export function useTracking() { }, [addNewTrackLocations]); const startTracking = useCallback(async () => { - setLoading(true); - if (isTracking) { console.warn('Start tracking attempt while tracking already enabled'); setLoading(false); return; } + setLoading(true); + await Location.startLocationUpdatesAsync(LOCATION_TASK_NAME, { accuracy: Location.Accuracy.Highest, activityType: Location.LocationActivityType.Fitness, diff --git a/src/frontend/hooks/useFormattedTimeSince.ts b/src/frontend/hooks/useFormattedTimeSince.ts index c08d139bf..ae01377c6 100644 --- a/src/frontend/hooks/useFormattedTimeSince.ts +++ b/src/frontend/hooks/useFormattedTimeSince.ts @@ -1,15 +1,22 @@ import {useEffect, useState} from 'react'; import {Duration} from 'luxon'; -export const useFormattedTimeSince = (start: Date, interval: number) => { +export const useFormattedTimeSince = (start: Date | null, interval: number) => { const [currentTime, setCurrentTime] = useState(new Date()); useEffect(() => { + if (!start) { + return; + } const timer = setInterval(() => { setCurrentTime(new Date()); }, interval); return () => clearInterval(timer); - }, [interval]); + }, [start, interval]); + + if (!start) { + return 'Unknown'; + } const millisPassed = Math.abs(currentTime.getTime() - start.getTime()); return Duration.fromMillis(millisPassed).toFormat('hh:mm:ss'); diff --git a/src/frontend/sharedComponents/BottomSheetModal/CustomBottomSheetModal.tsx b/src/frontend/sharedComponents/BottomSheetModal/CustomBottomSheetModal.tsx deleted file mode 100644 index 2c58454ed..000000000 --- a/src/frontend/sharedComponents/BottomSheetModal/CustomBottomSheetModal.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import React, {FC} from 'react'; -import {StyleSheet} from 'react-native'; -import {BottomSheetModal, BottomSheetView} from '@gorhom/bottom-sheet'; -import {BottomSheetModalMethods} from '@gorhom/bottom-sheet/lib/typescript/types'; -import {TAB_BAR_HEIGHT} from '../../Navigation/ScreenGroups/AppScreens'; - -interface CustomBottomSheetModal { - dismiss: () => void; - bottomSheetRef: React.RefObject; - children: React.ReactNode; -} - -export const CustomBottomSheetModal: FC = ({ - bottomSheetRef, - children, -}) => { - return ( - null}> - {children} - - ); -}; diff --git a/src/frontend/utils/distance.ts b/src/frontend/utils/distance.ts index 545a4525b..2aefde679 100644 --- a/src/frontend/utils/distance.ts +++ b/src/frontend/utils/distance.ts @@ -8,18 +8,7 @@ export const calculateTotalDistance = (points: LonLatData[]): number => { const ruler = new CheapRuler(points[0]!.latitude, 'kilometers'); - return points.reduce((previousValue, currentValue, i, arr) => { - if (i === 0) { - return previousValue; - } - - const pointA = arr[i - 1]!!; - const pointB = currentValue; - const distance = ruler.distance( - [pointA.longitude, pointA.latitude], - [pointB.longitude, pointB.latitude], - ); - - return previousValue + distance; - }, 0); + return ruler.lineDistance( + points.map(point => [point.longitude, point.latitude]), + ); };