// Copyright: © 2026 TWWIM UG. All rights reserved. (www.twwim.com) import { useState } from 'react'; import { Trash2, ArrowRightLeft } from 'lucide-react'; import { useTranslation } from '@/i18n/TranslationProvider'; import type { CompanyMemberResponse } from '@archer/api-interface'; import type { MemberRole } from '@/infrastructure/http/api/members/api'; import { RoleBadge } from './RoleBadge'; interface ActiveMembersListProps { members: CompanyMemberResponse[]; loading: boolean; onChangeRole: (member: CompanyMemberResponse, role: MemberRole) => Promise; onRemove: (member: CompanyMemberResponse) => Promise; onTransfer: (member: CompanyMemberResponse, toEmail: string) => Promise; } export function ActiveMembersList({ members, loading, onChangeRole, onRemove, onTransfer }: ActiveMembersListProps) { const { t } = useTranslation(); const [transferFor, setTransferFor] = useState(null); const [transferEmail, setTransferEmail] = useState(''); const [submitting, setSubmitting] = useState(false); const closeTransfer = () => { setTransferFor(null); setTransferEmail(''); }; const submitTransfer = async (member: CompanyMemberResponse) => { if (!transferEmail.trim()) return; setSubmitting(true); try { await onTransfer(member, transferEmail.trim()); closeTransfer(); } finally { setSubmitting(false); } }; return (

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

{loading ? (
{t('members.active.loading')}
) : members.length === 0 ? (
{t('members.active.empty')}
) : (
    {members.map((member) => (
  • {`${member.profile.firstName} ${member.profile.lastName}`.trim() || member.profile.email}
    {member.profile.email}
    {transferFor === member.id && (
    setTransferEmail(event.target.value)} placeholder={t('members.active.transferEmailPlaceholder')} data-testid={`member-transfer-email-${member.id}`} className="flex-1 border border-gray-300 rounded-md px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-primary-500" />
    )}
  • ))}
)}
); }