import { useEffect, useState } from "react"; import { ActivityIndicator, Text, View } from "react-native"; import MapView, { Marker, PROVIDER_DEFAULT } from "react-native-maps"; import MapViewDirections from "react-native-maps-directions"; import { icons } from "@/constants"; import { useFetch } from "@/lib/fetch"; import { calculateDriverTimes, calculateRegion, generateMarkersFromData, } from "@/lib/map"; import { useDriverStore, useLocationStore } from "@/store"; import type { Driver, MarkerData } from "@/types/type"; export const Map = () => { const { data: drivers, loading, error } = useFetch("/(api)/driver"); const { userLatitude, userLongitude, destinationLatitude, destinationLongitude, } = useLocationStore(); const { selectedDriver, setDrivers } = useDriverStore(); const [markers, setMarkers] = useState([]); const region = calculateRegion({ userLatitude, userLongitude, destinationLatitude, destinationLongitude, }); useEffect(() => { if (Array.isArray(drivers)) { if (!userLatitude || !userLongitude) return; const newMarkers = generateMarkersFromData({ data: drivers, userLatitude, userLongitude, }); setMarkers(newMarkers); } // eslint-disable-next-line react-hooks/exhaustive-deps }, [drivers, userLatitude, userLongitude]); useEffect(() => { if (markers.length > 0 && destinationLatitude && destinationLongitude) { calculateDriverTimes({ markers, userLatitude, userLongitude, destinationLatitude, destinationLongitude, }).then((drivers) => { setDrivers(drivers as MarkerData[]); }); } }, [ markers, destinationLatitude, destinationLongitude, userLatitude, userLongitude, setDrivers, ]); if (loading || !userLatitude || !userLongitude) { return ( ); } if (error) { return ( Error: {error} ); } return ( {markers.map((marker) => ( ))} {destinationLatitude && destinationLongitude && ( <> )} ); };