// Copyright: © 2026 TWWIM UG. All rights reserved. (www.twwim.com) import { useState } from 'react'; import { Mail } from 'lucide-react'; import { useTranslation } from '@/i18n/TranslationProvider'; import type { MemberRole } from '@/infrastructure/http/api/members/api'; interface InviteMemberFormProps { onSubmit: (email: string, role: MemberRole) => Promise; /** Pre-rendered seat-cost disclosure shown when seats are a paid, configurable cap. */ seatNotice?: string | null; } export function InviteMemberForm({ onSubmit, seatNotice }: InviteMemberFormProps) { const { t } = useTranslation(); const [email, setEmail] = useState(''); const [role, setRole] = useState('operator'); const [submitting, setSubmitting] = useState(false); const handleSubmit = async (event: React.FormEvent) => { event.preventDefault(); if (!email.trim()) return; setSubmitting(true); try { await onSubmit(email.trim(), role); setEmail(''); } finally { setSubmitting(false); } }; return (

{t('members.invite.heading')}

{t('members.invite.hint')}

{seatNotice && (

{seatNotice}

)}
setEmail(event.target.value)} placeholder={t('members.invite.emailPlaceholder')} data-testid="invite-email-input" className="border border-gray-300 rounded-md px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-primary-500" />
); }