import AccountCircleIcon from '@material-ui/icons/AccountCircle'; import { useCallback } from 'react'; import { useMemo } from 'react'; import { useContext } from 'react'; import { useInvitationState } from '../../state/Notifications/NotificationsHooks'; import { NotificationsContext } from '../../state/Notifications/NotificationsProvider'; import { lightgrey } from '../../lib/colors'; import { useMe } from '../hooks'; import UIButton from '../UI/UIButton'; import { CarpoolContext } from './Carpool'; function MemberRow({ member }: { member: { id: number; name: string } }) { return (
{member.name}
); } const shownMembersCount = 2; export default function MemberList() { const { leave, carpool } = useContext(CarpoolContext); const members = carpool.members; const membersToShow = members.slice(0, shownMembersCount); const hiddenMemberCount = members.size - membersToShow.size; const { sendCarpoolRequest, cancelCarpoolRequest } = useContext(NotificationsContext); const invitationState = useInvitationState(carpool.id); const sendRequest = useCallback(() => { sendCarpoolRequest(carpool.id); }, [carpool.id, sendCarpoolRequest]); const cancelRequest = useCallback(() => { cancelCarpoolRequest(carpool.id); }, [carpool.id, cancelCarpoolRequest]); const me = useMe()!; const isMember = useMemo(() => { return members.some(({ id }) => id === me?.id); }, [me?.id, members]); return (

Members

{members.size > 0 ? (
{membersToShow.map((member) => ( ))} {hiddenMemberCount > 0 && (hiddenMemberCount === 1 ? hiddenMemberCount + ' other...' : hiddenMemberCount + ' others...')}
) : ( 'This carpool has no members.' )} {isMember ? ( Leave ) : invitationState === 'requested' ? ( Cancel request to join ) : invitationState === 'none' ? ( Request to join ) : ( You've been invited, we need to make it so you can accept the invite )}
); }