import { useContext, useMemo } from 'react'; import { Location } from '../../lib/estimateoptimalpath'; import getDistance from '../../lib/getdistance'; import { IEventSignupComplete } from '../types'; import useOptimalPath from '../useOptimalPath'; import { CarpoolContext } from './Carpool'; import useSignups from './useSignups'; export default function CarpoolRouteEstimator() { const { carpool } = useContext(CarpoolContext); const { members } = carpool; const memberIds = useMemo( () => members.map((member) => member.id), [members] ); const signups = useSignups(carpool.event.id, memberIds); const completedSignups = useMemo( () => signups.filter( (signup) => signup.latitude !== null ) as IEventSignupComplete[], [signups] ); const path = useOptimalPath(completedSignups, carpool.event); return (

Route Optimization

{path ? (
Best route: {path.distance.toFixed(1)} miles
{(() => { const driver = path.path.from; const waypoints = path.path.waypoints; let previousLocation: Location = driver; return ( <> Driver: {driver.user.name} {waypoints.map((waypoint, index) => { const distance = getDistance(previousLocation, waypoint); previousLocation = waypoint; return ( Passenger #{index + 1}: {waypoint.user.name} ( {distance.toFixed(1)} miles) ); })} Destination: {carpool.event.name} ( {getDistance(carpool.event, previousLocation).toFixed(1)}{' '} miles) ); })()}
) : ( 'No valid paths are available.' )}
); }