"use client"; import { useState } from "react"; import { WorkspaceMemberRole } from "@mosaic/shared"; interface InviteMemberProps { onInvite: (email: string, role: WorkspaceMemberRole) => Promise; } export function InviteMember({ onInvite }: InviteMemberProps) { const [email, setEmail] = useState(""); const [role, setRole] = useState(WorkspaceMemberRole.MEMBER); const [isInviting, setIsInviting] = useState(false); const [error, setError] = useState(null); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setError(null); if (!email.trim()) { setError("Email is required"); return; } if (!email.includes("@")) { setError("Please enter a valid email address"); return; } setIsInviting(true); try { await onInvite(email.trim(), role); setEmail(""); setRole(WorkspaceMemberRole.MEMBER); alert("Invitation sent successfully!"); } catch (error) { console.error("Failed to invite member:", error); setError( error instanceof Error ? error.message : "Failed to send invitation. Please try again." ); } finally { setIsInviting(false); } }; return (

Invite Member

setEmail(e.target.value)} placeholder="colleague@example.com" disabled={isInviting} className="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent disabled:bg-gray-100" />
{error && (

{error}

)}

💡 The invited user will receive an email with instructions to join this workspace.

); }