-
-
{member.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;
+}