diff --git a/frontend/src/features/threat-intel/components/MatchOverviewCard.tsx b/frontend/src/features/threat-intel/components/MatchOverviewCard.tsx index 6425f52a9..d933c0eef 100644 --- a/frontend/src/features/threat-intel/components/MatchOverviewCard.tsx +++ b/frontend/src/features/threat-intel/components/MatchOverviewCard.tsx @@ -15,6 +15,9 @@ const TYPE_FAMILIES: Record<'ip' | 'url' | 'domain' | 'signatures', string[]> = ], } +const compact = (n: number) => + n.toLocaleString(undefined, { notation: 'compact', maximumFractionDigits: 1 }) + // Show time-of-day for sub-day intervals, date for day+ intervals. function formatTs(ts: number, interval: string): string { const perDay = /min|hour|^[0-9]+[mh]$/i.test(interval) @@ -100,8 +103,11 @@ export function MatchOverviewCard({ body, interval }: MatchOverviewCardProps) { {t('threatIntel.overview.title')}
- - {query.isPending ? '—' : total.toLocaleString()} + + {query.isPending ? '—' : compact(total)} {t('threatIntel.overview.totalIndicators')}
@@ -116,8 +122,11 @@ export function MatchOverviewCard({ body, interval }: MatchOverviewCardProps) {
{t(`threatIntel.overview.families.${family}`, { defaultValue: family })}
-
- {query.isPending ? '—' : familyCounts[family].toLocaleString()} +
+ {query.isPending ? '—' : compact(familyCounts[family])}
))} diff --git a/frontend/src/features/threat-intel/components/ThreatIntelHeader.tsx b/frontend/src/features/threat-intel/components/ThreatIntelHeader.tsx index 3bfa5520b..8b8f02ba1 100644 --- a/frontend/src/features/threat-intel/components/ThreatIntelHeader.tsx +++ b/frontend/src/features/threat-intel/components/ThreatIntelHeader.tsx @@ -1,5 +1,5 @@ import { useTranslation } from 'react-i18next' -import { Download } from 'lucide-react' +import { Download, Info } from 'lucide-react' import { Button } from '@/shared/components/ui/button' export interface ThreatIntelHeaderProps { @@ -7,15 +7,33 @@ export interface ThreatIntelHeaderProps { onRefresh?: () => void onExport?: () => void isExporting?: boolean + noInstanceIocs?: boolean } -export function ThreatIntelHeader({ matchedCount, onExport, isExporting }: ThreatIntelHeaderProps) { +export function ThreatIntelHeader({ matchedCount, onExport, isExporting, noInstanceIocs }: ThreatIntelHeaderProps) { const { t } = useTranslation() const canExport = !!onExport && !!matchedCount && !isExporting return (
-
- {matchedCount?.toLocaleString() || 0} {t('threatIntel.header.matchedInEnv')} +
+ {!noInstanceIocs && ( + + {matchedCount?.toLocaleString() || 0} {t('threatIntel.header.matchedInEnv')} + + )} + {noInstanceIocs && ( + + + {t('threatIntel.header.noInstanceIocs', { + defaultValue: 'No instance indicators — showing generic data', + })} + + )}