HEX
Server: LiteSpeed
System: Linux houston.panomity.com 6.8.0-100-generic #100-Ubuntu SMP PREEMPT_DYNAMIC Tue Jan 13 16:40:06 UTC 2026 x86_64
User: nudepix (1011)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: //opt/agentcloud/webapp/src/components/TeamMemberCard.tsx
import * as API from '@api';
import { PencilIcon,TrashIcon } from '@heroicons/react/20/solid';
import InviteForm from 'components/InviteForm';
import { useAccountContext } from 'context/account';
import Head from 'next/head';
import Link from 'next/link';
import { useRouter } from 'next/router';
import Permissions from 'permissions/permissions';
import React, { useEffect, useState } from 'react';
import { toast } from 'react-toastify';

export default function TeamMemberCard({ team, member, callback }) {

	const [accountContext]: any = useAccountContext();
	const { csrf, permissions } = accountContext as any;
	const router = useRouter();
	const { resourceSlug } = router.query;

	async function deleteMember(e) {
		e.preventDefault();
		await API.deleteFromTeam({resourceSlug, _csrf: csrf, memberId: member._id}, () => {
			toast.success(`Team member ${member.name} removed`);
			callback && callback();
		}, (res) => {
			toast.error(res);
		}, null);
	}

	const isOwner = member?._id?.toString() === (team && team[0].ownerId?.toString());

	return (
		<div className='p-4 max-w-sm bg-white rounded-lg border border-gray-200 shadow-md'>
			<p className='mb-2 font-bold tracking-tight text-gray-900 flex space-x-4'>
				<span>{member.name}</span>
				{permissions.get(Permissions.EDIT_TEAM_MEMBER) && <Link href={`/${resourceSlug}/team/${member._id}/edit`}>
					<PencilIcon className='h-5 w-5 text-gray-400 dark:text-white' aria-hidden='true' />
				</Link>}
			</p>
			<p className='mb-3 font-normal text-sm text-gray-700'>{member.email}</p>
			<div className='flex space-x-4 space-between w-full relative'>
				<span className={`px-3 py-1 text-sm font-semibold text-white rounded-full ${isOwner || member.emailVerified ? 'bg-green-500' : 'bg-yellow-500'}`}>
					{isOwner || member.emailVerified ? 'Active' : 'Pending'}
				</span>
				{team && !isOwner && permissions.get(Permissions.REMOVE_TEAM_MEMBER) && <button type='button' onClick={deleteMember}
					className='rounded-full bg-indigo-600 p-1 text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600 absolute right-0 h-full'
				>
					<TrashIcon className='h-5 w-5' aria-hidden='true' />
					<span className='tooltip z-100'>
						<span className='tooltiptext capitalize !w-[120px] !-ml-[60px]'>
							Edit permissions
						</span>
					</span>
				</button>}
			</div>
		</div>
	);

};