Use fetched project members data in members tab panel (#25)
* Use fetched project members data in members tab panel * Handle review changes --------- Co-authored-by: neeraj <neeraj.rtly@gmail.com>
This commit is contained in:
		
							parent
							
								
									d2187cbec2
								
							
						
					
					
						commit
						d2d26885ce
					
				@ -9,17 +9,17 @@ import {
 | 
			
		||||
  IconButton,
 | 
			
		||||
} from '@material-tailwind/react';
 | 
			
		||||
 | 
			
		||||
import { Member } from '../../../../types/project';
 | 
			
		||||
import ConfirmDialog from '../../../shared/ConfirmDialog';
 | 
			
		||||
import { Member } from '../../../../types/project';
 | 
			
		||||
 | 
			
		||||
const PERMISSION_OPTIONS = [
 | 
			
		||||
  {
 | 
			
		||||
    label: 'View only',
 | 
			
		||||
    value: 'view',
 | 
			
		||||
    value: 'View',
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    label: 'View and edit',
 | 
			
		||||
    value: 'view+edit',
 | 
			
		||||
    value: 'View+Edit',
 | 
			
		||||
  },
 | 
			
		||||
];
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,12 +1,10 @@
 | 
			
		||||
import React, { useCallback, useMemo, useState } from 'react';
 | 
			
		||||
import { useParams } from 'react-router-dom';
 | 
			
		||||
import { useOutletContext, useParams } from 'react-router-dom';
 | 
			
		||||
import toast, { Toaster } from 'react-hot-toast';
 | 
			
		||||
 | 
			
		||||
import { Chip, Button, Typography } from '@material-tailwind/react';
 | 
			
		||||
 | 
			
		||||
import MemberCard from './MemberCard';
 | 
			
		||||
import membersData from '../../../../assets/members.json';
 | 
			
		||||
import projectData from '../../../../assets/projects.json';
 | 
			
		||||
 | 
			
		||||
import { Member } from '../../../../types/project';
 | 
			
		||||
import AddMemberDialog from './AddMemberDialog';
 | 
			
		||||
@ -17,30 +15,16 @@ const MembersTabPanel = () => {
 | 
			
		||||
  const { id } = useParams();
 | 
			
		||||
  const [addmemberDialogOpen, setAddMemberDialogOpen] = useState(false);
 | 
			
		||||
 | 
			
		||||
  // @ts-expect-error create context type for projects
 | 
			
		||||
  const { projects } = useOutletContext();
 | 
			
		||||
 | 
			
		||||
  const currProject = useMemo(() => {
 | 
			
		||||
    return projectData.find((data) => data.id === Number(id));
 | 
			
		||||
    return projects.find((project: any) => project.id === id);
 | 
			
		||||
  }, [id]);
 | 
			
		||||
 | 
			
		||||
  const members = useMemo(() => {
 | 
			
		||||
    return membersData.filter(
 | 
			
		||||
      (member) =>
 | 
			
		||||
        currProject?.members.some(
 | 
			
		||||
          (projectMember) => projectMember.id === member.id,
 | 
			
		||||
        ),
 | 
			
		||||
    );
 | 
			
		||||
  }, [currProject]);
 | 
			
		||||
 | 
			
		||||
  const [updatedMembers, setUpdatedMembers] = useState([...members]);
 | 
			
		||||
 | 
			
		||||
  const getMemberPermissions = useCallback(
 | 
			
		||||
    (id: number) => {
 | 
			
		||||
      return (
 | 
			
		||||
        currProject?.members.find((projectMember) => projectMember.id === id)
 | 
			
		||||
          ?.permissions || []
 | 
			
		||||
      );
 | 
			
		||||
    },
 | 
			
		||||
    [updatedMembers],
 | 
			
		||||
  );
 | 
			
		||||
  const [updatedMembers, setUpdatedMembers] = useState([
 | 
			
		||||
    ...currProject?.members,
 | 
			
		||||
  ]);
 | 
			
		||||
 | 
			
		||||
  const addMemberHandler = useCallback((member: Member) => {
 | 
			
		||||
    setUpdatedMembers((val) => [...val, member]);
 | 
			
		||||
@ -69,15 +53,15 @@ const MembersTabPanel = () => {
 | 
			
		||||
          </Button>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      {(updatedMembers as Member[]).map((member, index) => {
 | 
			
		||||
      {updatedMembers.map((member, index) => {
 | 
			
		||||
        return (
 | 
			
		||||
          <MemberCard
 | 
			
		||||
            member={member}
 | 
			
		||||
            member={member.member}
 | 
			
		||||
            key={member.id}
 | 
			
		||||
            isFirstCard={index === FIRST_MEMBER_CARD}
 | 
			
		||||
            isOwner={member.id === currProject?.ownerId}
 | 
			
		||||
            isOwner={member.member.id === currProject?.owner.id}
 | 
			
		||||
            isPending={member.name === ''}
 | 
			
		||||
            permissions={getMemberPermissions(member.id)}
 | 
			
		||||
            permissions={member.permissions}
 | 
			
		||||
            handleDeletePendingMember={(id: number) => {
 | 
			
		||||
              setUpdatedMembers(
 | 
			
		||||
                updatedMembers.filter((member) => member.id !== id),
 | 
			
		||||
 | 
			
		||||
@ -35,6 +35,12 @@ query {
 | 
			
		||||
      webhooks
 | 
			
		||||
      members {
 | 
			
		||||
        id
 | 
			
		||||
        permissions
 | 
			
		||||
        member{
 | 
			
		||||
          id
 | 
			
		||||
          name
 | 
			
		||||
          email
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      environmentVariables {
 | 
			
		||||
        id
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user