/* eslint-disable camelcase */ /* eslint-disable react/no-danger */ import React, { useState, useEffect } from 'react'; import { Typography, Skeleton } from 'antd'; import format from 'date-fns/format'; import { fetchExternalData } from '../utils/apis'; const { Title, Link } = Typography; const OWNCAST_FEED_URL = 'https://owncast.online/news/index.json'; const OWNCAST_BASE_URL = 'https://owncast.online'; interface Article { title: string; url: string; content_html: string; date_published: string; } function ArticleItem({ title, url, content_html: content, date_published: date }: Article) { const dateObject = new Date(date); const dateString = format(dateObject, 'MMM dd, yyyy, HH:mm'); return (

{dateString}

<Link href={`${OWNCAST_BASE_URL}${url}`} target="_blank" rel="noopener noreferrer"> {title} </Link>
); } export default function NewsFeed() { const [feed, setFeed] = useState([]); const [loading, setLoading] = useState(true); const getFeed = async () => { setLoading(false); try { const result = await fetchExternalData(OWNCAST_FEED_URL); if (result?.items.length > 0) { setFeed(result.items); } } catch (error) { console.log('==== error', error); } }; useEffect(() => { getFeed(); }, []); const loadingSpinner = loading ? () : null; const noNews = !loading && feed.length === 0 ? (
No news.
) : null; return (
News & Updates from Owncast {loadingSpinner} {feed.map(item => ( ))} {noNews}
); }