import React, { useCallback, useEffect, useState } from 'react'; import toast, { Toaster } from 'react-hot-toast'; import { Permission, Project, AddProjectMemberInput, ProjectMember, } from 'gql-client'; import { Chip, Button, Typography } from '@material-tailwind/react'; import MemberCard from './MemberCard'; 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 fetchProjectMembers = useCallback(async () => { const { projectMembers } = await client.getProjectMembers(project.id); setProjectMembers(projectMembers); }, [project.id]); const addMemberHandler = useCallback( async (data: AddProjectMemberInput) => { const { addProjectMember: isProjectMemberAdded } = await client.addProjectMember(project.id, data); if (isProjectMemberAdded) { await fetchProjectMembers(); toast.success('Invitation sent'); } else { toast.error('Invitation not sent'); } }, [project], ); const removeMemberHandler = async (projectMemberId: string) => { const { removeProjectMember: isMemberRemoved } = await client.removeProjectMember(projectMemberId); if (isMemberRemoved) { await fetchProjectMembers(); toast.success('Member removed from project'); } else { toast.error('Not able to remove member'); } }; const updateProjectMemberHandler = useCallback( async (projectMemberId: string, data: { permissions: Permission[] }) => { const { updateProjectMember: isProjectMemberUpdated } = await client.updateProjectMember(projectMemberId, data); if (isProjectMemberUpdated) { await fetchProjectMembers(); toast.success('Project member permission updated'); } else { toast.error('Project member permission not updated'); } }, [], ); useEffect(() => { fetchProjectMembers(); }, [project.id, fetchProjectMembers]); return (
Members
{projectMembers.map((projectMember, index) => { return ( await removeMemberHandler(projectMember.id) } onUpdateProjectMember={async (data) => { await updateProjectMemberHandler(projectMember.id, data); }} /> ); })} { setAddMemberDialogOpen((preVal) => !preVal); }} open={addmemberDialogOpen} handleAddMember={addMemberHandler} />
); }; export default MembersTabPanel;