import { type FormEvent, useEffect, useRef, useState } from 'react'; import { httpPost } from '../../lib/http'; import { useTeamId } from '../../hooks/use-team-id'; import { useOutsideClick } from '../../hooks/use-outside-click'; import { type AllowedRoles, RoleDropdown } from '../CreateTeam/RoleDropdown'; type InviteMemberPopupProps = { onInvited: () => void; onClose: () => void; }; export function InviteMemberPopup(props: InviteMemberPopupProps) { const { onClose, onInvited } = props; const popupBodyRef = useRef(null); const emailRef = useRef(null); const [selectedRole, setSelectedRole] = useState('member'); const [email, setEmail] = useState(''); const [isLoading, setIsLoading] = useState(false); const [error, setError] = useState(''); const { teamId } = useTeamId(); useEffect(() => { emailRef?.current?.focus(); }, []); const handleSubmit = async (e: FormEvent) => { e.preventDefault(); setIsLoading(true); setError(''); const { response, error } = await httpPost( `${import.meta.env.PUBLIC_API_URL}/v1-invite-member/${teamId}`, { email, role: selectedRole } ); if (error || !response) { setIsLoading(false); setError(error?.message || 'Something went wrong'); return; } setIsLoading(false); handleClosePopup(); onInvited(); }; const handleClosePopup = () => { setIsLoading(false); setError(''); onClose(); }; useOutsideClick(popupBodyRef, handleClosePopup); return (

Invite Member

Enter the email and role below to invite a member.

setEmail((e.target as HTMLInputElement).value)} />
{error && (

{error}

)}
); }