import { useMemo } from "react"; import { faTrash } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { useNavigate } from "@tanstack/react-router"; import { createNotification } from "@app/components/notifications"; import { IconButton, Td, Tooltip, Tr } from "@app/components/v2"; import { getProjectBaseURL } from "@app/helpers/project"; import { formatProjectRoleName } from "@app/helpers/roles"; import { useGetUserProjects } from "@app/hooks/api"; import { TWorkspaceUser } from "@app/hooks/api/types"; import { UsePopUpState } from "@app/hooks/usePopUp"; import { OrgAccessControlTabSections } from "@app/types/org"; type Props = { membership: TWorkspaceUser; handlePopUpOpen: ( popUpName: keyof UsePopUpState<["removeUserFromProject"]>, data?: object ) => void; }; export const UserProjectRow = ({ membership: { id, project, user, roles }, handlePopUpOpen }: Props) => { const { data: workspaces = [] } = useGetUserProjects(); const navigate = useNavigate(); 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) { navigate({ to: `${getProjectBaseURL(project.type)}/access-management` as const, params: { projectId: project.id }, search: { selectedTab: OrgAccessControlTabSections.Member } }); return; } createNotification({ text: "Unable to access project", type: "error" }); }} > {project.name} {`${formatProjectRoleName(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 }); }} >
)} ); };