import { useMemo } from "react"; import { useRouter } from "next/router"; import { faTrash } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { createNotification } from "@app/components/notifications"; import { IconButton, Td, Tooltip, Tr } from "@app/components/v2"; import { useWorkspace } from "@app/context"; import { ProjectMembershipRole } from "@app/hooks/api/roles/types"; import { TWorkspaceUser } from "@app/hooks/api/types"; import { UsePopUpState } from "@app/hooks/usePopUp"; type Props = { membership: TWorkspaceUser; handlePopUpOpen: (popUpName: keyof UsePopUpState<["removeUserFromProject"]>, data?: {}) => void; }; const formatRoleName = (role: string, customRoleName?: string) => { if (role === ProjectMembershipRole.Custom) return customRoleName; if (role === ProjectMembershipRole.Admin) return "Admin"; if (role === ProjectMembershipRole.Member) return "Developer"; if (role === ProjectMembershipRole.Viewer) return "Viewer"; if (role === ProjectMembershipRole.NoAccess) return "No Access"; return role; }; export const UserProjectRow = ({ membership: { id, project, user, roles }, handlePopUpOpen }: Props) => { const { workspaces } = useWorkspace(); const router = useRouter(); const isAccessible = useMemo(() => { const workspaceIds = new Map(); workspaces?.forEach((workspace) => { workspaceIds.set(workspace.id, true); }); return workspaceIds.has(project.id); }, [workspaces, project]); return ( { if (isAccessible) { router.push(`/project/${project.id}/members?selectedTab=members`); return; } createNotification({ text: "Unable to access project", type: "error" }); }} > {project.name} {`${formatRoleName(roles[0].role, roles[0].customRoleName)}${ roles.length > 1 ? ` (+${roles.length - 1})` : "" }`} {isAccessible && (
{ e.stopPropagation(); handlePopUpOpen("removeUserFromProject", { username: user.username, projectId: project.id, projectName: project.name }); }} >
)} ); };