import React, { useCallback } from 'react'; import { useTranslation } from 'react-i18next'; import { makeStyles } from 'tss-react/mui'; import { IconRecordAccount, IconRecordContact, IconRecordLead, IconRecordOpportunity } from '../../../base/icons/svg'; import { BUTTON_TYPES } from '../../../base/ui/constants.web'; import { IAccountMatch, IContactMatch, ILeadMatch, IOpportunityMatch, ISearchResults, SalesforceObjectType } from '../../types'; import { RecordListItem } from './RecordListItem'; interface IProps { linkingId: string | null; onLink: (type: SalesforceObjectType, data: IAccountMatch | ILeadMatch | IContactMatch | IOpportunityMatch) => void; results: ISearchResults; } const useStyles = makeStyles()(theme => { return { section: { marginBottom: '16px' }, groupTitle: { fontSize: '0.75rem', fontWeight: 600, color: theme.palette.text03, textTransform: 'uppercase', margin: '16px 0 8px 0' }, list: { listStyle: 'none', margin: 0, padding: 0 }, noResults: { textAlign: 'center', color: theme.palette.text03, padding: '24px' } }; }); /** * Component for displaying Salesforce search results with link buttons. * * @param {IProps} props - Component props. * @returns {React.ReactElement} */ export const SearchResultsSection = ({ results, linkingId, onLink }: IProps) => { const { t } = useTranslation(); const { classes } = useStyles(); const hasResults = results.accounts.length || results.leads.length || results.contacts.length || results.opportunities.length; const handleLinkAccount = useCallback((account: IAccountMatch) => { onLink('Account', account); }, [ onLink ]); const handleLinkLead = useCallback((lead: ILeadMatch) => { onLink('Lead', lead); }, [ onLink ]); const handleLinkContact = useCallback((contact: IContactMatch) => { onLink('Contact', contact); }, [ onLink ]); const handleLinkOpportunity = useCallback((opportunity: IOpportunityMatch) => { onLink('Opportunity', opportunity); }, [ onLink ]); if (!hasResults) { return (
{t('dialog.searchResultsNotFound')}
); } return (
{!!results.accounts.length && ( <>

{t('record.type.account')}

)} {!!results.leads.length && ( <>

{t('record.type.lead')}

)} {!!results.contacts.length && ( <>

{t('record.type.contact')}

)} {!!results.opportunities.length && ( <>

{t('record.type.opportunity')}

)}
); }; export default SearchResultsSection;