import React, { useState } from 'react'; import { ContactTypeObj } from './RecipientAddCard'; import { Recipient } from '../../../store/slices/selectedRecipientsSlice'; interface ContactDataProps { contactData: ContactTypeObj; inpFirstName: string; inpLastName: string; inpEmail: string; openContactModal: boolean; setOpenContactModal: React.Dispatch>; setRecipients: React.Dispatch>; topRef?: React.RefObject; setManualFocusTriggered: React.Dispatch> } // Helper function to highlight matching text const highlightText = (text: string, searchTerm: string, shouldHighlight: boolean) => { if (!shouldHighlight || !searchTerm.trim()) { return {text}; } const searchTermLower = searchTerm.toLowerCase(); const textLower = text.toLowerCase(); const index = textLower.indexOf(searchTermLower); if (index === -1) { return {text}; } const beforeMatch = text.slice(0, index); const match = text.slice(index, index + searchTerm.length); const afterMatch = text.slice(index + searchTerm.length); return ( {beforeMatch} {match} {afterMatch} ); }; const ContactModal: React.FC = ({ contactData, inpFirstName, inpLastName, inpEmail, openContactModal, setRecipients, setOpenContactModal , setManualFocusTriggered }) => { const handleContactClick = (indx: number) => { if (!contactData.contacts.length) return; setRecipients((prev) => ({ ...prev, // Preserve other properties like uuid, newOne, etc. firstName: contactData.contacts[indx].firstName, lastName: contactData.contacts[indx].lastName, email: contactData.contacts[indx].email, })); setOpenContactModal(false); setManualFocusTriggered(false) }; const handleKeyDown = (event: React.KeyboardEvent, indx: number) => { if (event.key === 'Enter' || event.key === ' ') { event.preventDefault(); handleContactClick(indx); } }; if (!openContactModal || !contactData.contacts.length) { return null; } return (
{contactData.contacts.map((contact, indx) => (
handleContactClick(indx)} onKeyDown={(e) => handleKeyDown(e, indx)} className="flex items-center px-3 py-2 cursor-pointer hover:bg-gray-50 transition-colors duration-150 focus:bg-gray-100 focus:outline-none rounded-md" role="button" aria-label={`Select contact ${contact.firstName} ${contact.lastName}`} > {/* Avatar */}
{(contact.firstName?.[0] || '') + (contact.lastName?.[0] || '')}
{/* Contact Info */}

{highlightText( contact.firstName, inpFirstName, contactData.type === "firstName" )}

{highlightText( contact.lastName, inpLastName, contactData.type === "lastName" )}

{highlightText( contact.email, inpEmail, contactData.type === "email" )}

))} {/* No results message */} {contactData.contacts.length === 0 && (
No contacts found
)}
); }; export default ContactModal;