import { memo, useState } from 'react' import { Megaphone } from 'lucide-react' import { useTranslation } from 'react-i18next' import { getAnnouncementColorClass } from '@/lib/colors' import { formatDateTimeObject } from '@/lib/time' import { cn } from '@/lib/utils' import { ScrollArea } from '@/components/ui/scroll-area' import { useAnnouncements } from '@/features/dashboard/hooks/use-status-data' import { getPreviewText } from '@/features/dashboard/lib' import type { AnnouncementItem } from '@/features/dashboard/types' import { PanelWrapper } from '../ui/panel-wrapper' import { AnnouncementDetailModal } from './announcement-detail-dialog' const AnnouncementStatusDot = memo(function AnnouncementStatusDot(props: { type?: string }) { return ( ) }) export function AnnouncementsPanel() { const { t } = useTranslation() const { items: list, loading } = useAnnouncements() const [selectedAnnouncement, setSelectedAnnouncement] = useState(null) const [isDialogOpen, setIsDialogOpen] = useState(false) const handleAnnouncementClick = (item: AnnouncementItem) => { setSelectedAnnouncement(item) setIsDialogOpen(true) } return ( {t('Announcements')} } loading={loading} empty={!list.length} emptyMessage={t('No announcements at this time')} height='h-56 sm:h-64' >
{list.map((item: AnnouncementItem, idx: number) => { const key = item.id ?? `announcement-${idx}` return ( ) })}
) }