traintrape-moi/client/utils/features/location/locationSlice.ts

38 lines
1.2 KiB
TypeScript

import { Constants } from '@/constants/Constants'
import { createSlice, PayloadAction } from '@reduxjs/toolkit'
import { LocationObject } from 'expo-location'
interface LocationState {
lastOwnLocation: LocationObject | null
lastSentLocation: LocationObject | null
queuedLocations: LocationObject[]
}
const initialState: LocationState = {
lastOwnLocation: null,
lastSentLocation: null,
queuedLocations: []
}
export const locationSlice = createSlice({
name: 'location',
initialState: initialState,
reducers: {
setLastLocation: (state, action: PayloadAction<LocationObject>) => {
const location: LocationObject = action.payload
state.lastOwnLocation = location
if (state.lastSentLocation === null || (location.timestamp - state.lastSentLocation.timestamp) >= Constants.MIN_DELAY_LOCATION_SENT * 1000) {
state.lastSentLocation = location
state.queuedLocations.push(location)
}
},
unqueueLocation: (state, action: PayloadAction<LocationObject>) => {
state.queuedLocations.pop()
},
},
})
export const { setLastLocation, unqueueLocation } = locationSlice.actions
export default locationSlice.reducer