import React, { useState, useEffect } from "react"; import { View } from "react-native"; import WebView from "react-native-webview"; import { setViewCode, handleEvent, insertMarker, deleteAllMarkers, } from "./LeafLetMap"; import MapModal from "../MapModal"; import html_content from "./Map.js"; import MapDataMenu from "../MapDataMenu"; import { MapMarkerList } from "../MapMarkerList"; function bindEventsToListeners( event, clickListener, setMarkerListener, moveEndListener ) { switch (event.object) { case "click": clickListener && clickListener(event.cords); break; case "marker": setMarkerListener(event.id); break; case "moveend": moveEndListener && moveEndListener(event.id); break; default: break; } } function notEmpy(lista) { return lista && lista.length > 0; } export default function OpenStreetMap({ markers, clickListener, moveEndListener, isForm = false, }) { const [dataOptionsToShow, setDataOptionsToShow] = useState({ oficial: { automaticPluviometer: false, susceptibilityAreas: false, }, citzen: { floodRisk: true, pluviometer: true, rain: false, floodZones: true, riverFlood: true, }, }); const [mapRef, setMapRef] = useState(null); const webviewContent = html_content; const [markerListener, setMarkerListener] = useState(null); const viewFunction = setViewCode(global.location.lat, global.location.long); const markersList = MapMarkerList({ markers: markers, renderOptions: dataOptionsToShow, }); // console.log(markersList) // markersList && // mapRef && // notEmpy(markersList) && // markersList.forEach((val, _) => { // // console.log(val); // insertMarker(mapRef, val.ID, val.coordinate, val.image); // }); useEffect(() => { if (markersList && mapRef && notEmpy(markersList)) { deleteAllMarkers(mapRef); markersList.forEach((val, k) => { insertMarker(mapRef, val[1].ID, val[1].coordinate, val[1].image); }); } }, [markersList, dataOptionsToShow]); return ( <View flex={1}> {webviewContent && ( <WebView ref={(webViewRef) => { setMapRef(webViewRef); }} onMessage={(event) => { bindEventsToListeners( handleEvent(event), clickListener, setMarkerListener, moveEndListener ); }} javaScriptEnabled={true} source={{ html: webviewContent }} injectedJavaScript={viewFunction} /> )} {!isForm && ( <View> <MapModal showModal={markerListener} setShowModal={setMarkerListener} markers={markers.markers} /> <MapDataMenu dataOptionsToShow={dataOptionsToShow} setDataOptionsToShow={setDataOptionsToShow} /> </View> )} </View> ); }