import React, { useState } from 'react'; interface Employee { id: string; name: string; email: string; avatar?: string; } interface InviteMultipleEmployeesModalProps { isOpen: boolean; onClose: () => void; onInviteSelected: (employees: Employee[]) => void; suggestedEmployees?: Employee[]; } const defaultSuggestedEmployees: Employee[] = [ { id: '1', name: 'John Smith', email: 'john@company.com' }, { id: '2', name: 'Sarah Johnson', email: 'sarah@company.com' }, { id: '3', name: 'Mike Chen', email: 'mike@company.com' }, { id: '4', name: 'Emily Davis', email: 'emily@company.com' }, { id: '5', name: 'Alex Rodriguez', email: 'alex@company.com' }, ]; export const InviteMultipleEmployeesModal: React.FC = ({ isOpen, onClose, onInviteSelected, suggestedEmployees = defaultSuggestedEmployees }) => { const [searchTerm, setSearchTerm] = useState(''); const [selectedEmployees, setSelectedEmployees] = useState([]); const [showDropdown, setShowDropdown] = useState(false); if (!isOpen) return null; const filteredEmployees = suggestedEmployees.filter(emp => (emp.name.toLowerCase().includes(searchTerm.toLowerCase()) || emp.email.toLowerCase().includes(searchTerm.toLowerCase())) && !selectedEmployees.find(selected => selected.id === emp.id) ); const handleEmployeeSelect = (employee: Employee) => { setSelectedEmployees(prev => [...prev, employee]); setSearchTerm(''); setShowDropdown(false); }; const handleEmployeeRemove = (employeeId: string) => { setSelectedEmployees(prev => prev.filter(emp => emp.id !== employeeId)); }; const handleInvite = () => { if (selectedEmployees.length > 0) { onInviteSelected(selectedEmployees); setSelectedEmployees([]); setSearchTerm(''); } }; return (
{/* Header */}
Invite multiple employees
{/* Search Input with Dropdown */}
Search employees
{ setSearchTerm(e.target.value); setShowDropdown(e.target.value.length > 0); }} onFocus={() => setShowDropdown(searchTerm.length > 0)} placeholder="Type name or email to search..." className="flex-1 text-[--Neutrals-NeutralSlate950] text-sm font-normal font-['Inter'] leading-tight bg-transparent outline-none placeholder:text-Text-Gray-500" />
{/* Dropdown */} {showDropdown && filteredEmployees.length > 0 && (
{filteredEmployees.map((employee) => ( ))}
)}
{/* Selected Employees */} {selectedEmployees.length > 0 && (
Selected ({selectedEmployees.length})
{selectedEmployees.map((employee) => (
{employee.name.charAt(0)}
{employee.name}
))}
)}
{/* Footer */}
); };