import React, { useCallback, useState } from 'react'; import toast from 'react-hot-toast'; import { Select, Typography, Option, Chip, IconButton, } from '@material-tailwind/react'; import { Member } from '../../../../types/project'; import ConfirmDialog from '../../../shared/ConfirmDialog'; 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: Member; isFirstCard: boolean; isOwner: boolean; isPending: boolean; permissions: string[]; handleDeletePendingMember: (id: number) => void; } const MemberCard = ({ member, isFirstCard, isOwner, isPending, permissions, handleDeletePendingMember, }: MemberCardProps) => { const [selectedPermission, setSelectedPermission] = useState( permissions.join('+'), ); const [removeMemberDialogOpen, setRemoveMemberDialogOpen] = useState(false); const handlePermissionChange = useCallback( (value: string) => { setSelectedPermission(value); if (value === 'remove') { setRemoveMemberDialogOpen((prevVal) => !prevVal); // To display updated label in next render setTimeout(() => { setSelectedPermission(selectedPermission); }); } }, [removeMemberDialogOpen, selectedPermission], ); return (
^
{member.name} {member.email}
{!isPending ? ( ) : (
{ handleDeletePendingMember(member.id); }} > D
)}
setRemoveMemberDialogOpen((preVal) => !preVal)} open={removeMemberDialogOpen} confirmButtonTitle="Yes, Remove member" handleConfirm={() => { setRemoveMemberDialogOpen((preVal) => !preVal); toast.success('Member removed from project'); }} color="red" > Once removed, {member.name} ({member.email}) will not be able to access this project.
); }; export default MemberCard;