38 lines
1.2 KiB
TypeScript
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
|