You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
1.7 KiB
70 lines
1.7 KiB
import mapboxgl from 'mapbox-gl';
|
|
|
|
import type { MapStyleName } from '@app/pages/Map/styles';
|
|
import type { PayloadAction } from '@reduxjs/toolkit';
|
|
import { createSlice } from '@reduxjs/toolkit';
|
|
|
|
interface MapState {
|
|
firstLoad: boolean;
|
|
latLng: mapboxgl.LngLat;
|
|
zoom: number;
|
|
bearing: number;
|
|
pitch: number;
|
|
accessToken: string;
|
|
style: MapStyleName;
|
|
hillShade: boolean;
|
|
exaggeration: boolean;
|
|
}
|
|
|
|
const initialState: MapState = {
|
|
firstLoad: true,
|
|
latLng: new mapboxgl.LngLat(0, 0),
|
|
zoom: 2,
|
|
bearing: 0,
|
|
pitch: 0,
|
|
accessToken:
|
|
'pk.eyJ1Ijoic2FjaGF3IiwiYSI6ImNrNW9meXozZjBsdW0zbHBjM2FnNnV6cmsifQ.3E4n8eFGD9ZOFo-XDVeZnQ',
|
|
style: localStorage.getItem('darkModeDisabled') !== 'true' ? 'Dark' : 'Light',
|
|
hillShade: false,
|
|
exaggeration: true,
|
|
};
|
|
|
|
export const mapSlice = createSlice({
|
|
name: 'map',
|
|
initialState,
|
|
reducers: {
|
|
setLatLng: (state, action: PayloadAction<mapboxgl.LngLat>) => {
|
|
state.latLng = action.payload;
|
|
},
|
|
setZoom: (state, action: PayloadAction<number>) => {
|
|
state.zoom = action.payload;
|
|
},
|
|
setBearing: (state, action: PayloadAction<number>) => {
|
|
state.bearing = action.payload;
|
|
},
|
|
setPitch: (state, action: PayloadAction<number>) => {
|
|
state.pitch = action.payload;
|
|
},
|
|
setMapStyle(state, action: PayloadAction<MapStyleName>) {
|
|
state.style = action.payload;
|
|
},
|
|
setHillShade(state, action: PayloadAction<boolean>) {
|
|
state.hillShade = action.payload;
|
|
},
|
|
setExaggeration(state, action: PayloadAction<boolean>) {
|
|
state.exaggeration = action.payload;
|
|
},
|
|
},
|
|
});
|
|
|
|
export const {
|
|
setLatLng,
|
|
setZoom,
|
|
setBearing,
|
|
setPitch,
|
|
setMapStyle,
|
|
setHillShade,
|
|
setExaggeration,
|
|
} = mapSlice.actions;
|
|
|
|
export default mapSlice.reducer;
|
|
|