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) => { 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) => { state.queuedLocations.pop() }, }, }) export const { setLastLocation, unqueueLocation } = locationSlice.actions export default locationSlice.reducer