import React, { useCallback, useEffect, useState } from 'react'; import toast, { Toaster } from 'react-hot-toast'; import { Project } from 'gql-client'; import { Chip, Button, Typography } from '@material-tailwind/react'; import MemberCard from './MemberCard'; import { ProjectMember } from '../../../../types/project'; import AddMemberDialog from './AddMemberDialog'; import { useGQLClient } from '../../../../context/GQLClientContext'; const FIRST_MEMBER_CARD = 0; const MembersTabPanel = ({ project }: { project: Project }) => { const client = useGQLClient(); const [addmemberDialogOpen, setAddMemberDialogOpen] = useState(false); const [projectMembers, setProjectMembers] = useState([]); const addMemberHandler = useCallback((projectMember: ProjectMember) => { setProjectMembers((val) => [...val, projectMember]); toast.success('Invitation sent'); }, []); const fetchProjectMembers = useCallback(async () => { const { projectMembers } = await client.getProjectMembers(project.id); setProjectMembers(projectMembers); }, [project.id]); const removeMemberHandler = async (projectMemberId: string) => { const { removeMember: isMemberRemoved } = await client.removeMember(projectMemberId); if (isMemberRemoved) { toast.success('Member removed from project'); await fetchProjectMembers(); } else { toast.error('Not able to remove member'); } }; useEffect(() => { fetchProjectMembers(); }, [project.id, fetchProjectMembers]); return (
Members
{}} removeMemberHandler={async () => {}} /> {projectMembers.map((projectMember, index) => { return ( { setProjectMembers( projectMembers.filter( (projectMember) => projectMember.member.id !== id, ), ); }} removeMemberHandler={() => removeMemberHandler(projectMember.id)} /> ); })} { setAddMemberDialogOpen((preVal) => !preVal); }} open={addmemberDialogOpen} handleAddMember={addMemberHandler} />
); }; export default MembersTabPanel;