import React, { useCallback, useState, useEffect, useMemo } from 'react'; import { FormattedMessage as T } from 'react-intl'; import { MenuItem, Button } from '@blueprintjs/core'; import { Select } from '@blueprintjs/select'; import classNames from 'classnames'; import { CLASSES } from 'common/classes'; export default function ContactSelecetList({ contactsList, initialContactId, selectedContactId, selectedContactType, defaultSelectText = , onContactSelected, popoverFill = false, disabled = false, }) { const contacts = useMemo( () => contactsList.map((contact) => ({ ...contact, _id: `${contact.id}_${contact.contact_type}`, })), [contactsList], ); const initialContact = useMemo( () => contacts.find((a) => a.id === initialContactId), [initialContactId, contacts], ); const [selecetedContact, setSelectedContact] = useState( initialContact || null, ); useEffect(() => { if (typeof selectedContactId !== 'undefined') { const account = selectedContactId ? contacts.find((a) => a.id === selectedContactId) : null; setSelectedContact(account); } }, [selectedContactId, contacts, setSelectedContact]); const handleContactRenderer = useCallback( (contact, { handleClick }) => ( ), [], ); const onContactSelect = useCallback( (contact) => { setSelectedContact({ ...contact }); onContactSelected && onContactSelected(contact); }, [setSelectedContact, onContactSelected], ); // Filter Contact List const filterContacts = (query, contact, index, exactMatch) => { const normalizedTitle = contact.display_name.toLowerCase(); const normalizedQuery = query.toLowerCase(); if (exactMatch) { return normalizedTitle === normalizedQuery; } else { return ( `${contact.display_name} ${normalizedTitle}`.indexOf(normalizedQuery) >= 0 ); } }; return ( ); }