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"; // TODO: Remove mocked drivers later const mockedDrivers = [ { id: 1, driver_id: 1, first_name: "James", last_name: "Wilson", profile_image_url: "https://ucarecdn.com/dae59f69-2c1f-48c3-a883-017bcf0f9950/-/preview/1000x666/", car_image_url: "https://ucarecdn.com/a2dc52b2-8bf7-4e49-9a36-3ffb5229ed02/-/preview/465x466/", car_seats: 4, rating: 4.8, latitude: 0, longitude: 0, price: "45", time: 5, }, { id: 2, driver_id: 2, first_name: "David", last_name: "Brown", profile_image_url: "https://ucarecdn.com/6ea6d83d-ef1a-483f-9106-837a3a5b3f67/-/preview/1000x666/", car_image_url: "https://ucarecdn.com/a3872f80-c094-409c-82f8-c9ff38429327/-/preview/930x932/", car_seats: 5, rating: 4.6, latitude: 0, longitude: 0, price: "45", time: 5, }, { id: 3, driver_id: 3, first_name: "Michael", last_name: "Johnson", profile_image_url: "https://ucarecdn.com/0330d85c-232e-4c30-bd04-e5e4d0e3d688/-/preview/826x822/", car_image_url: "https://ucarecdn.com/289764fb-55b6-4427-b1d1-f655987b4a14/-/preview/930x932/", car_seats: 4, rating: 4.7, latitude: 0, longitude: 0, price: "45", time: 5, }, { id: 4, driver_id: 4, first_name: "Robert", last_name: "Green", profile_image_url: "https://ucarecdn.com/fdfc54df-9d24-40f7-b7d3-6f391561c0db/-/preview/626x417/", car_image_url: "https://ucarecdn.com/b6fb3b55-7676-4ff3-8484-fb115e268d32/-/preview/930x932/", car_seats: 4, rating: 4.9, latitude: 0, longitude: 0, price: "45", time: 5, }, ]; 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]); useEffect(() => { if (markers.length > 0 && destinationLatitude && destinationLatitude) { // TODO: Uncomment this code block /* calculateDriverTimes({ markers, userLatitude, userLongitude, destinationLatitude, destinationLongitude, }) .then((drivers) => { setDrivers(drivers as MarkerData[]); }) */ // TODO: Remove this line setDrivers(mockedDrivers); } }, [ markers, destinationLatitude, destinationLongitude, userLatitude, userLongitude, setDrivers, ]); if (loading || !userLatitude || !userLongitude) { return ( ); } if (error) { return ( Error: {error} ); } return ( {markers.map((marker) => ( ))} {destinationLatitude && destinationLongitude && ( <> )} ); };