import { useEffect, useState } from 'react'; import type { FC } from 'react'; import { FormattedDate, FormattedMessage } from 'react-intl'; import type { ApiAnnouncementJSON } from '@/mastodon/api_types/announcements'; import { AnimateEmojiProvider } from '@/mastodon/components/emoji/context'; import { EmojiHTML } from '@/mastodon/components/emoji/html'; import { ReactionsBar } from './reactions'; export interface IAnnouncement extends ApiAnnouncementJSON { contentHtml: string; } interface AnnouncementProps { announcement: IAnnouncement; selected: boolean; } export const Announcement: FC = ({ announcement, selected, }) => { const [unread, setUnread] = useState(!announcement.read); useEffect(() => { // Only update `unread` marker once the announcement is out of view if (!selected && unread !== !announcement.read) { setUnread(!announcement.read); } }, [announcement.read, selected, unread]); return ( {' ยท '} {unread && } ); }; const Timestamp: FC> = ({ announcement, }) => { const startsAt = announcement.starts_at && new Date(announcement.starts_at); const endsAt = announcement.ends_at && new Date(announcement.ends_at); const now = new Date(); const hasTimeRange = startsAt && endsAt; const skipTime = announcement.all_day; if (hasTimeRange) { const skipYear = startsAt.getFullYear() === endsAt.getFullYear() && endsAt.getFullYear() === now.getFullYear(); const skipEndDate = startsAt.getDate() === endsAt.getDate() && startsAt.getMonth() === endsAt.getMonth() && startsAt.getFullYear() === endsAt.getFullYear(); return ( <> {' '} -{' '} ); } const publishedAt = new Date(announcement.published_at); return ( ); };