import React, { useCallback, useState } from 'react'; import { Permission, User } from 'gql-client'; import { Select, Typography, Option, Chip, IconButton, } from '@material-tailwind/react'; 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: 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 [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 && {member.name}} {member.email}
{!isPending ? ( ) : (
{ setRemoveMemberDialogOpen((prevVal) => !prevVal); }} > D
)}
setRemoveMemberDialogOpen((preVal) => !preVal)} open={removeMemberDialogOpen} confirmButtonTitle="Yes, Remove member" handleConfirm={() => { setRemoveMemberDialogOpen((preVal) => !preVal); if (onRemoveProjectMember) { onRemoveProjectMember(); } }} color="red" > Once removed, {member.name} ({member.email}) will not be able to access this project.
); }; export default MemberCard;