import React, { useEffect, useState } from 'react'; import { Database, Search, ExternalLink, ShieldCheck, Filter } from 'lucide-react'; import { getApiUrl } from '../services/runtimeConfig'; interface Claim { id: string; claim_text: string; entity_name: string | null; source_url: string | null; confidence: string; merged_count?: number; } interface EvidenceSummary { claim_count: number; sourced_claim_count: number; unsourced_claim_count: number; source_coverage: number; by_entity: Record; } interface EvidenceData { project_id: string; merged: boolean; summary: EvidenceSummary; claims: Claim[]; } interface EvidenceViewProps { projectId: string; } const EvidenceView: React.FC = ({ projectId }) => { const [data, setData] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [mergeEnabled, setMergeEnabled] = useState(true); const loadEvidence = async () => { setLoading(true); setError(null); try { const apiUrl = getApiUrl(); const response = await fetch(`${apiUrl}/orchestrator/projects/${projectId}/evidence?merge=${mergeEnabled}`); if (!response.ok) throw new Error('Failed to fetch evidence data'); const result = await response.json(); setData(result); } catch (err) { setError(err instanceof Error ? err.message : 'Unknown error'); } finally { setLoading(false); } }; useEffect(() => { loadEvidence(); }, [projectId, mergeEnabled]); if (loading && !data) { return (

Analyzing project evidence...

); } if (error) { return (

Error: {error}

); } const summary = data?.summary; const claims = data?.claims || []; return (
{/* Stats Summary */}
Total Claims {summary?.claim_count || 0}
Source Coverage {(summary?.source_coverage || 0 * 100).toFixed(0)}%
Entities {Object.keys(summary?.by_entity || {}).length}
{/* Controls */}
{/* Claims List */}
{claims.length === 0 ? (

No evidence claims have been extracted for this project yet.

) : (
{claims.map((claim) => (
{claim.entity_name && ( {claim.entity_name} )} {claim.confidence} confidence {claim.merged_count && claim.merged_count > 1 && ( x{claim.merged_count} verified )}

{claim.claim_text}

{claim.source_url && ( )}
))}
)}
); }; export default EvidenceView;