diff --git a/src/components/Carpool/Carpool.tsx b/src/components/Carpool/Carpool.tsx index ad0690b..e0713ad 100644 --- a/src/components/Carpool/Carpool.tsx +++ b/src/components/Carpool/Carpool.tsx @@ -167,8 +167,8 @@ export default function Carpool({ id }: { id: number }) { + - ); diff --git a/src/components/Carpool/CarpoolRouteEstimator.tsx b/src/components/Carpool/CarpoolRouteEstimator.tsx index df59e27..8d972e0 100644 --- a/src/components/Carpool/CarpoolRouteEstimator.tsx +++ b/src/components/Carpool/CarpoolRouteEstimator.tsx @@ -1,27 +1,10 @@ -import { useMemo, useState } from 'react'; -import { useEffect } from 'react'; -import { useContext } from 'react'; +import { useContext, useMemo } from 'react'; import { Location } from '../../lib/estimateoptimalpath'; import getDistance from '../../lib/getdistance'; -import { getEventSignupsBulk } from '../api'; -import { IEventSignupComplete, IEventSignup } from '../types'; +import { IEventSignupComplete } from '../types'; import useOptimalPath from '../useOptimalPath'; import { CarpoolContext } from './Carpool'; - -function useSignups(eventId: number, userIds: number[]) { - // Fetchs bulk signups from the API for the given event and user ids - // and returns a memoized result. - - const [signups, setSignups] = useState([]); - - useEffect(() => { - getEventSignupsBulk(eventId, userIds).then((signups) => { - setSignups(signups); - }); - }, [eventId, userIds]); - - return signups; -} +import useSignups from './useSignups'; export default function CarpoolRouteEstimator() { const { carpool } = useContext(CarpoolContext); @@ -34,7 +17,7 @@ export default function CarpoolRouteEstimator() { const signups = useSignups(carpool.event.id, memberIds); - const signupsWithLocation = useMemo( + const completedSignups = useMemo( () => signups.filter( (signup) => signup.latitude !== null @@ -42,7 +25,7 @@ export default function CarpoolRouteEstimator() { [signups] ); - const path = useOptimalPath(signupsWithLocation, carpool.event); + const path = useOptimalPath(completedSignups, carpool.event); return (
- -
{member.name}
+
+
+
{signup.user.name}
+
+ {signup.formattedAddress} + {signup.canDrive && Can drive}
); } @@ -24,13 +30,18 @@ function formatOthers(hiddenMemberCount: number) { return `${hiddenMemberCount} others...`; } -const shownMembersCount = 2; +const shownMembersCount = 4; export default function MemberList() { const { carpool } = useContext(CarpoolContext); const [expanded, setExpanded] = useState(false); - const members = carpool.members; + const memberIDs = useMemo( + () => carpool.members.map((member) => member.id), + [carpool] + ); + const members = useSignups(carpool.id, memberIDs); + const membersToShow = useMemo( () => (expanded ? members : members.slice(0, shownMembersCount)), [members, expanded] @@ -60,7 +71,7 @@ export default function MemberList() { }} > {membersToShow.map((member) => ( - + ))}
setExpanded((e) => !e)}> diff --git a/src/components/Carpool/useSignups.tsx b/src/components/Carpool/useSignups.tsx new file mode 100644 index 0000000..925e7ef --- /dev/null +++ b/src/components/Carpool/useSignups.tsx @@ -0,0 +1,17 @@ +import { useState, useEffect } from 'react'; +import { getEventSignupsBulk } from '../api'; +import { IEventSignup } from '../types'; + +// Fetchs bulk signups from the API for the given event and user ids +// and returns a memoized result. +export default function useSignups(eventId: number, userIds: number[]) { + const [signups, setSignups] = useState([]); + + useEffect(() => { + getEventSignupsBulk(eventId, userIds).then((signups) => { + setSignups(signups); + }); + }, [eventId, userIds]); + + return signups; +}