1
+ import React , { useEffect , useMemo , useState } from 'react' ;
2
+ import PropTypes from 'prop-types' ;
3
+
4
+ import Map from '@geomatico/geocomponents/Map' ;
5
+
6
+ import { INITIAL_VIEWPORT , LAYERS } from '../config' ;
7
+ import styled from '@mui/styles/styled' ;
8
+ import { Popup } from 'react-map-gl' ;
9
+
10
+ import PopupInfo from '../components/PopupInfo' ;
11
+ import { useDispatch , useSelector } from 'react-redux' ;
12
+ import { getFeatures } from '../modules/api/selectors' ;
13
+ import { apiGetFeatures } from '../modules/api/actions' ;
14
+
15
+ const CustomPopup = styled ( Popup ) ( {
16
+ '& .mapboxgl-popup-content' : {
17
+ padding : 0
18
+ }
19
+ } ) ;
20
+
21
+ const MainContent = ( { mapStyle} ) => {
22
+ const [ viewport , setViewport ] = useState ( INITIAL_VIEWPORT ) ;
23
+ const [ featureClicked , setFeatureClicked ] = useState ( undefined ) ;
24
+ const dispatch = useDispatch ( ) ;
25
+ const data = useSelector ( getFeatures ) ;
26
+ const sources = useMemo ( ( ) => ( {
27
+ data : {
28
+ type : 'geojson' ,
29
+ data : data
30
+ } ,
31
+ quartieri : {
32
+ type : 'geojson' ,
33
+ data : 'carto/quartieri-roma.geojson'
34
+ }
35
+ } )
36
+ ) ;
37
+ const layers = useMemo ( ( ) => LAYERS , [ ] ) ;
38
+ useEffect ( ( ) => {
39
+ dispatch ( apiGetFeatures ( ) ) ;
40
+ } , [ ] ) ;
41
+ const onViewportChange = ( viewport ) =>
42
+ setViewport ( {
43
+ ...viewport
44
+ } ) ;
45
+ const handleOnClick = ( e ) => setFeatureClicked ( e . features && e . features [ 0 ] ) ;
46
+ return < Map
47
+ mapStyle = { mapStyle }
48
+ viewport = { viewport }
49
+ onViewportChange = { onViewportChange }
50
+ sources = { sources }
51
+ layers = { layers }
52
+ interactiveLayerIds = { layers . map ( ( { id} ) => id ) }
53
+ onClick = { handleOnClick }
54
+ // mapboxAccessToken={process.env.MAPBOX_ACCESS_TOKEN} // Token necesario para ver datos de mapbox o usar mapbox-gl-js v2 (react-map-gl 6)
55
+ >
56
+ {
57
+ featureClicked &&
58
+ < CustomPopup
59
+ longitude = { featureClicked . geometry . coordinates [ 0 ] }
60
+ latitude = { featureClicked . geometry . coordinates [ 1 ] }
61
+ anchor = "bottom"
62
+ closeButton = { false }
63
+ >
64
+ < PopupInfo
65
+ name = { featureClicked . properties . name }
66
+ style = { featureClicked . properties . style }
67
+ author = { featureClicked . properties . author }
68
+ description = { featureClicked . properties . description }
69
+ price = { featureClicked . properties . price }
70
+ other = { featureClicked . properties . other }
71
+ image = { featureClicked . properties . image }
72
+ plan = { featureClicked . properties . plan }
73
+ />
74
+ </ CustomPopup >
75
+ }
76
+ </ Map > ;
77
+ } ;
78
+
79
+ MainContent . propTypes = {
80
+ mapStyle : PropTypes . string . isRequired
81
+ } ;
82
+
83
+ export default MainContent ;
0 commit comments