import { Megaphone, ThumbsUp, ThumbsDown, RefreshCw, ExternalLink, Calendar, Eye, } from 'lucide-react'; import { cn, formatDate, formatNumber } from '@/lib/utils'; import { useTelegram } from '@/hooks/useTelegram'; import { useAnnouncements, useAnnouncementReaction } from '@/hooks/useSupabase'; import { useTranslation } from '@/i18n'; export function AnnouncementsSection() { const { hapticImpact, hapticNotification, openLink } = useTelegram(); const { data: announcements, isLoading, refetch, isRefetching } = useAnnouncements(); const reactionMutation = useAnnouncementReaction(); const { t } = useTranslation(); const handleReaction = (id: string, reaction: 'like' | 'dislike') => { if (!window.Telegram?.WebApp?.initData) { hapticNotification('error'); if (window.Telegram?.WebApp) { window.Telegram.WebApp.showAlert(t('announcements.reactionAuthRequired')); } return; } hapticImpact('light'); reactionMutation.mutate( { announcementId: id, reaction }, { onSuccess: () => hapticNotification('success'), onError: (err) => { hapticNotification('error'); window.Telegram?.WebApp?.showAlert(err.message || t('common.error')); }, } ); }; const handleRefresh = () => { hapticImpact('medium'); refetch(); }; return (
{/* Header */}

{t('announcements.title')}

{/* Content */}
{isLoading ? (
{[1, 2, 3].map((i) => (
))}
) : (
{announcements?.map((announcement) => (
{/* Image */} {announcement.image_url && (
)}
{/* Title */}

{announcement.title}

{/* Content */}

{announcement.content}

{/* Link */} {announcement.link_url && ( )} {/* Meta */}
{formatDate(announcement.created_at)} {formatNumber(announcement.views)}
{/* Actions */}
))}
)}
); }