// src/components/TileCard.tsx import React from 'react'; // Define the TypeScript interfaces corresponding to Pydantic schemas interface VerificationMark { verification_type: string; is_expert_verified: boolean; expert_orcid_id?: string; expert_name?: string; verification_date?: string; verification_count: number; } interface KnowledgeTile { tile_id: string; domain_id: string; topic: string; content_preview: string; created_at: string; updated_at: string; verification_mark: VerificationMark; contributor_id?: string; confidence_score: number; tags: string[]; } interface DomainConfig { domain_id: string; name: string; } interface TileCardProps { tile: KnowledgeTile; availableDomains?: DomainConfig[]; onDomainChange?: (tileId: string, newDomainId: string) => void; } const TileCard: React.FC = ({ tile, availableDomains, onDomainChange }) => { const getVerificationColor = (type: string) => { switch (type) { case 'expert': case 'multi_expert': return 'border-green-500'; case 'community': return 'border-blue-500'; default: return 'border-gray-500'; } }; return (

{tile.topic}

{availableDomains && availableDomains.length > 0 && onDomainChange ? ( ) : ( {tile.domain_id} )}

{tile.content_preview}

Confidence: {` ${(tile.confidence_score * 100).toFixed(1)}%`}
Verification: {tile.verification_mark.verification_type} ({tile.verification_mark.verification_count})
{tile.verification_mark.is_expert_verified && (
Expert: {tile.verification_mark.expert_name || tile.verification_mark.expert_orcid_id}
)}
Updated: {new Date(tile.updated_at).toLocaleDateString()}
{tile.tags.length > 0 && (
{tile.tags.map(tag => ( {tag} ))}
)}
); }; export default TileCard;