import { Link } from 'react-router-dom' import { ChevronUp, Link2, Pencil, MessageSquare, Trash2 } from 'lucide-react' import { useLocale } from '@meshkee/dashboard-ui' import type { Portfolio } from '../types/portfolio' import { formatPortfolioCardDate, resolvePortfolioExternalUrl, } from '../services/portfolioService' import { useT } from '../i18n/useT' import { textLocaleAttrs } from '../utils/textLocale' import { buildWebsiteContentUrl } from '../utils/websiteLinks' import { OpenOnWebsiteControl } from './OpenOnWebsiteControl' import { Tooltip } from './Tooltip' import cardStyles from './PortfolioCard.module.css' import controlStyles from './ProductCard.module.css' interface PortfolioCardProps { portfolio: Portfolio commentCount: number canMoveUp: boolean isMovingUp?: boolean onMoveUp: (id: string) => void onEdit: (id: string) => void onComments: (id: string) => void onRemove: (id: string) => void } export function PortfolioCard({ portfolio, commentCount, canMoveUp, isMovingUp = false, onMoveUp, onEdit, onComments, onRemove, }: PortfolioCardProps) { const t = useT() const { locale } = useLocale() const isFa = locale === 'fa' const publishDate = formatPortfolioCardDate( portfolio.publishedAt ?? portfolio.createdAt, isFa ? 'fa' : 'en', ) const titleFa = (portfolio.titleFa || portfolio.title || '').trim() const titleEn = (portfolio.titleEn || '').trim() const showBothTitles = Boolean(titleFa && titleEn) const showAbstract = !showBothTitles const abstractLocale = textLocaleAttrs(portfolio.abstract) const hasAbstract = Boolean(portfolio.abstract?.trim()) // In FA UI, keep cards RTL even when EN titles/abstracts are shown. const abstractDir = isFa ? 'rtl' : abstractLocale.dir const externalUrl = resolvePortfolioExternalUrl(portfolio.projectUrl) const websiteUrl = buildWebsiteContentUrl('portfolio', portfolio) return (
{portfolio.titleImageUrl ? ( {titleFa ) : (
{titleFa ? (

{titleFa}

) : null} {titleEn ? (

{titleEn}

) : null} {showAbstract ? ( hasAbstract ? (

{portfolio.abstract}

) : (

{t('portfolio.card.noSummary')}

) ) : null}
{portfolio.categoryName ? ( {portfolio.categoryName} ) : ( )} {publishDate}
{externalUrl ? ( ) : null}
) }