/* eslint-disable @typescript-eslint/no-unnecessary-condition */ import React from "react"; import type { KnowledgeEntryWithTags } from "@mosaic/shared"; import { EntryStatus } from "@mosaic/shared"; import Link from "next/link"; import { FileText, Eye, Users, Lock } from "lucide-react"; interface EntryCardProps { entry: KnowledgeEntryWithTags; } const statusConfig = { [EntryStatus.DRAFT]: { label: "Draft", className: "bg-gray-100 text-gray-700", icon: "📝", }, [EntryStatus.PUBLISHED]: { label: "Published", className: "bg-green-100 text-green-700", icon: "✅", }, [EntryStatus.ARCHIVED]: { label: "Archived", className: "bg-amber-100 text-amber-700", icon: "📦", }, }; const visibilityIcons = { PRIVATE: , WORKSPACE: , PUBLIC: , }; export const EntryCard = React.memo(function EntryCard({ entry, }: EntryCardProps): React.JSX.Element { const statusInfo = statusConfig[entry.status]; const visibilityIcon = visibilityIcons[entry.visibility]; return (
{/* Title */}

{entry.title}

{/* Summary */} {entry.summary && (

{entry.summary}

)} {/* Tags */} {entry.tags && entry.tags.length > 0 && (
{entry.tags.map((tag: { id: string; name: string; color: string | null }) => ( {tag.name} ))}
)} {/* Metadata row */}
{/* Status */} {statusInfo && ( {statusInfo.icon} {statusInfo.label} )} {/* Visibility */} {visibilityIcon} {entry.visibility.toLowerCase()} {/* Updated date */} Updated{" "} {new Date(entry.updatedAt).toLocaleDateString("en-US", { month: "short", day: "numeric", year: "numeric", })}
); });