'use client'; import { Promotion } from '@/types/promotion'; import { getPromotionTypeLabel } from '@/types/promotion'; import { PencilIcon, TrashIcon, EyeIcon, EyeSlashIcon } from '@heroicons/react/24/outline'; import { formatDate } from '@/lib/utils'; import Image from 'next/image'; import { useState } from 'react'; interface PromotionListProps { promotions: Promotion[]; onEdit: (promotion: Promotion) => void; onDelete: (promotion: Promotion) => void; onToggleActive: (promotion: Promotion) => void; isLoading: boolean; } export default function PromotionList({ promotions, onEdit, onDelete, onToggleActive, isLoading }: PromotionListProps) { const [imageErrors, setImageErrors] = useState>({}); if (isLoading) { return (
); } if (!promotions || promotions.length === 0) { return (

هیچ تبلیغاتی یافت نشد

); } const sortedPromotions = [...promotions].sort((a, b) => { if (a.priority && b.priority) return b.priority - a.priority; if (a.priority) return -1; if (b.priority) return 1; return new Date(b.created_at).getTime() - new Date(a.created_at).getTime(); }); const handleImageError = (id: number) => { setImageErrors(prev => ({ ...prev, [id]: true })); }; return (

لیست تبلیغات

    {sortedPromotions.map((promotion) => (
  • {promotion.image_url && !imageErrors[promotion.id] && (
    {promotion.title handleImageError(promotion.id)} unoptimized />
    )}

    {promotion.title || 'بدون عنوان'}

    {getPromotionTypeLabel(promotion.type)} {promotion.is_active ? ( فعال ) : ( غیرفعال )} {promotion.priority && ( اولویت: {promotion.priority} )}
    {promotion.subtitle && (

    {promotion.subtitle}

    )}
    {promotion.action_text && دکمه: {promotion.action_text}} {promotion.start_at && شروع: {formatDate(promotion.start_at)}} {promotion.end_at && پایان: {formatDate(promotion.end_at)}}
    {promotion.url_site && ( وبسایت )} {promotion.url_myket && ( مایکت )} {promotion.url_bazzar && ( بازار )} {promotion.url_google_play && ( گوگل‌پلی )}
  • ))}
); }