import React, { useCallback, useState } from 'react'; import { Permission, User } from 'gql-client'; import { Select, Option, Chip, IconButton, Tooltip, } from '@material-tailwind/react'; import { formatAddress } from 'utils/format'; import { RemoveMemberDialog } from 'components/projects/Dialog/RemoveMemberDialog'; const PERMISSION_OPTIONS = [ { label: 'View only', value: 'View', }, { label: 'View and edit', value: 'View+Edit', }, ]; const DROPDOWN_OPTIONS = [ ...PERMISSION_OPTIONS, { label: 'Remove member', value: 'remove' }, ]; interface MemberCardProps { member: User; isFirstCard: boolean; isOwner: boolean; isPending: boolean; permissions: string[]; onRemoveProjectMember?: () => Promise; onUpdateProjectMember?: (data: { permissions: Permission[]; }) => Promise; } const MemberCard = ({ member, isFirstCard, isOwner, isPending, permissions, onRemoveProjectMember, onUpdateProjectMember, }: MemberCardProps) => { const [ethAddress, emailDomain] = member.email.split('@'); const [selectedPermission, setSelectedPermission] = useState( permissions.join('+'), ); const [removeMemberDialogOpen, setRemoveMemberDialogOpen] = useState(false); const handlePermissionChange = useCallback( async (value: string) => { setSelectedPermission(value); if (value === 'remove') { setRemoveMemberDialogOpen((prevVal) => !prevVal); // To display updated label in next render setTimeout(() => { setSelectedPermission(selectedPermission); }); } else { if (onUpdateProjectMember) { const permissions = value.split('+') as Permission[]; await onUpdateProjectMember({ permissions }); } } }, [removeMemberDialogOpen, selectedPermission], ); return (
^
{member.name && ( {formatAddress(member.name ?? '')} )}

{formatAddress(ethAddress)}@{emailDomain}

{!isPending ? ( ) : (
{ setRemoveMemberDialogOpen((prevVal) => !prevVal); }} placeholder={''} > D
)}
setRemoveMemberDialogOpen((preVal) => !preVal)} open={removeMemberDialogOpen} handleConfirm={() => { setRemoveMemberDialogOpen((preVal) => !preVal); if (onRemoveProjectMember) { onRemoveProjectMember(); } }} memberName={member.name ?? ''} ethAddress={ethAddress} emailDomain={emailDomain} />
); }; export default MemberCard;