import { useCallback, useState } from 'react'; import { RemoveMemberDialog } from 'components/projects/Dialog/RemoveMemberDialog'; import { Select, SelectOption } from 'components/shared/Select'; import { LoaderIcon } from 'components/shared/CustomIcon'; import { Tooltip } from 'components/shared/Tooltip'; import { Button } from 'components/shared/Button'; import { Permission, User } from 'gql-client'; import { formatAddress } from 'utils/format'; import { Tag } from 'components/shared/Tag'; import { Input } from 'components/shared/Input'; const PERMISSION_OPTIONS: SelectOption[] = [ { label: 'View only', value: 'View', }, { label: 'View and edit', value: 'View+Edit', }, ]; const DROPDOWN_OPTIONS: SelectOption[] = [ ...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( PERMISSION_OPTIONS.map((value) => { permissions.join('+') === value.value; }).pop() ?? { label: 'View only', value: 'View', }, ); const [removeMemberDialogOpen, setRemoveMemberDialogOpen] = useState(false); const handlePermissionChange = useCallback( async (value: SelectOption) => { setSelectedPermission(value); if (value.value === 'remove') { setRemoveMemberDialogOpen((prevVal) => !prevVal); // To display updated label in next render setTimeout(() => { setSelectedPermission(selectedPermission); }); } else { if (onUpdateProjectMember) { const permissions = value.value.split('+') as Permission[]; await onUpdateProjectMember({ permissions }); } } }, [removeMemberDialogOpen, selectedPermission], ); return (
{member.name && ( {formatAddress(member.name ?? '')} )}

{formatAddress(ethAddress)}@{emailDomain}

{!isPending ? ( isOwner ? ( ) : (