Skip to content

Commit e82cb7e

Browse files
committed
Added state management and reconstruction from url params
1 parent daab827 commit e82cb7e

File tree

3 files changed

+16
-27
lines changed

3 files changed

+16
-27
lines changed

Eplant/views/WorldEFP/MapContainer.tsx

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
1-
import { useCallback } from 'react'
1+
import { useEffect } from 'react'
22

3-
import { ViewDispatch } from '@eplant/View'
43
import { useTheme } from '@mui/material'
54
import {
6-
APIProvider,
75
Map,
86
MapCameraChangedEvent,
97
MapEvent,
@@ -15,33 +13,32 @@ import GeneDistributionChart from '../eFP/Viewer/GeneDistributionChart'
1513
import Legend from '../eFP/Viewer/legend'
1614

1715
import MapMarker from './MapMarker'
18-
import { WorldEFPAction, WorldEFPData, WorldEFPState } from './types'
16+
import { WorldEFPData, WorldEFPState } from './types'
1917

2018
interface MapContainerProps {
2119
activeData: WorldEFPData
2220
state: WorldEFPState
23-
dispatch: ViewDispatch<WorldEFPAction>
21+
setState: (state: WorldEFPState) => void
2422
}
25-
const MapContainer = ({ activeData, state, dispatch }: MapContainerProps) => {
23+
const MapContainer = ({ activeData, state, setState }: MapContainerProps) => {
2624
const theme = useTheme()
2725
const map = useMap('WorldEFP')
2826

27+
// set map state on load from cache, url or default
28+
useEffect(() => {
29+
map?.moveCamera({ zoom: state.zoom, center: state.position })
30+
}, [map])
31+
2932
const hangleDragEnd = (event: MapEvent) => {
3033
const mapPos = map?.getCenter()
3134
if (!mapPos) return
3235

3336
const coords = { lat: mapPos.lat(), lng: mapPos.lng() }
34-
dispatch({
35-
type: 'set-map-position',
36-
position: coords,
37-
})
37+
setState({ ...state, position: coords })
3838
}
3939

4040
const handleZoom = (event: MapCameraChangedEvent) => {
41-
dispatch({
42-
type: 'set-map-zoom',
43-
zoom: event.detail.zoom,
44-
})
41+
setState({ ...state, zoom: event.detail.zoom })
4542
}
4643

4744
return (

Eplant/views/WorldEFP/WorldEFP.tsx

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -74,13 +74,7 @@ export const WorldEFPView = () => {
7474
return (
7575
<>
7676
<APIProvider apiKey={import.meta.env.VITE_MAPS_API_KEY} version='beta'>
77-
<MapContainer
78-
activeData={data}
79-
state={state}
80-
dispatch={(action: WorldEFPAction) => {
81-
// TODO: implement reducer logic
82-
}}
83-
/>
77+
<MapContainer activeData={data} state={state} setState={setState} />
8478
</APIProvider>
8579
<MaskModal
8680
isVisible={state.maskModalVisible}

Eplant/views/WorldEFP/types.tsx

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,10 @@ import { EFPData } from '../eFP/types'
55
export type Coordinates = { lat: number; lng: number }
66

77
export const WorldEFPStateSchema = z.object({
8-
position: z
9-
.object({
10-
lat: z.number().min(-90).max(90),
11-
lng: z.number().min(-180).max(180),
12-
})
13-
.default({ lat: 25, lng: 0 }),
8+
position: z.object({
9+
lat: z.number().default(25),
10+
lng: z.number().default(0),
11+
}),
1412
zoom: z.number().min(0).max(22).default(2),
1513
mapTypeId: z
1614
.enum(['roadmap', 'satellite', 'hybrid', 'terrain'])

0 commit comments

Comments
 (0)