= { company: [], contact: [], mail: [], file: [], event: [] };
if (results) {
for (const r of results) {
if (groups[r.type]) {
groups[r.type].push(r);
}
}
}
return groups;
}, [results]);
const totalResults = useMemo(() => {
if (!results) return 0;
return results.length;
}, [results]);
const renderResults = (items: SearchResult[]) => {
if (items.length === 0) {
return ;
}
return (
{items.map((result) => (
))}
);
};
const tabs = useMemo(() => [
{
key: 'all',
label: t('search.allTypes'),
badge: totalResults,
content: (
{totalResults === 0 && !isLoading ? (
) : (
renderResults(results || [])
)}
),
},
{
key: 'company',
label: t('search.companies'),
badge: groupedResults.company.length,
content: {renderResults(groupedResults.company)}
,
},
{
key: 'contact',
label: t('search.contacts'),
badge: groupedResults.contact.length,
content: {renderResults(groupedResults.contact)}
,
},
{
key: 'mail',
label: t('search.mails'),
badge: groupedResults.mail.length,
content: {renderResults(groupedResults.mail)}
,
},
{
key: 'file',
label: t('search.files'),
badge: groupedResults.file.length,
content: {renderResults(groupedResults.file)}
,
},
{
key: 'event',
label: t('search.events'),
badge: groupedResults.event.length,
content: {renderResults(groupedResults.event)}
,
},
], [t, totalResults, groupedResults, results, isLoading, query, navigate]);
return (
{t('search.title')}
{query && (
{t('search.resultsFor', { query })}:
)}
{!query ? (
) : isLoading ? (
{[1, 2, 3].map((i) => (
))}
) : (
)}
);
}