import { useContext, useMemo, useState } from 'react';
import { IEventSignup } from '../types';
import UIPressable from '../UI/UIPressable';
import { CarpoolContext } from './Carpool';
import useSignups from './useSignups';
function MemberRow({ signup }: { signup: IEventSignup }) {
return (
{signup.formattedAddress}
{signup.canDrive &&
Can drive}
);
}
function formatOthers(hiddenMemberCount: number) {
if (hiddenMemberCount === 0) {
return '';
}
if (hiddenMemberCount === 1) {
return '1 other...';
}
return `${hiddenMemberCount} others...`;
}
const shownMembersCount = 4;
export default function MemberList() {
const { carpool } = useContext(CarpoolContext);
const [expanded, setExpanded] = useState(false);
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]
);
const hiddenMemberCount = members.length - membersToShow.length;
return (
Members
{members.length > 0 ? (
{membersToShow.map((member) => (
))}
setExpanded((e) => !e)}>
{expanded ? 'Hide' : formatOthers(hiddenMemberCount)}
) : (
'This carpool has no members.'
)}
);
}