import { BadgeWithDot } from '@/components/base/badges/badges'; import { cx } from '@/utils/cx'; import type { IntegrationStatus, AuthStatus, LeadIngestionSource } from '@/types/entities'; interface IntegrationHealthProps { sources: LeadIngestionSource[]; } const statusBorderMap: Record = { ACTIVE: 'border-secondary', WARNING: 'border-warning', ERROR: 'border-error', DISABLED: 'border-secondary', }; const statusBadgeColorMap: Record = { ACTIVE: 'success', WARNING: 'warning', ERROR: 'error', DISABLED: 'gray', }; const authBadgeColorMap: Record = { VALID: 'success', EXPIRING_SOON: 'warning', EXPIRED: 'error', NOT_CONFIGURED: 'gray', }; function formatRelativeTime(isoString: string): string { const diffMs = Date.now() - new Date(isoString).getTime(); const diffMinutes = Math.floor(diffMs / (1000 * 60)); if (diffMinutes < 1) return 'just now'; if (diffMinutes < 60) return `${diffMinutes} min ago`; const diffHours = Math.floor(diffMinutes / 60); if (diffHours < 24) return `${diffHours}h ago`; const diffDays = Math.floor(diffHours / 24); return `${diffDays}d ago`; } export const IntegrationHealth = ({ sources }: IntegrationHealthProps) => { return (

Integration Health

{sources.map((source) => { const status = source.integrationStatus ?? 'DISABLED'; const authStatus = source.authStatus ?? 'NOT_CONFIGURED'; const showAuthBadge = authStatus !== 'VALID'; return (
{source.sourceName} {status}

{source.leadsReceivedLast24h ?? 0} leads in 24h

{source.lastSuccessfulSyncAt && (

Last sync: {formatRelativeTime(source.lastSuccessfulSyncAt)}

)} {showAuthBadge && (
Auth: {authStatus.replace(/_/g, ' ')}
)} {(status === 'WARNING' || status === 'ERROR') && source.lastErrorMessage && (

{source.lastErrorMessage}

)}
); })}
); };