import { AlertTriangle, ExternalLink, RefreshCw } from 'lucide-react'; import { type NewsItem } from '~main/types'; import { api } from '~renderer/utils/api'; import useScrollHint from '~renderer/utils/useScrollHint'; import IconSpinner from '../styled/IconSpinner'; import TextButton from '../styled/TextButton'; const formatDate = (raw: string) => { const d = new Date(raw); if (Number.isNaN(d.getTime())) return raw; return d.toLocaleDateString(undefined, { year: 'numeric', month: 'short', day: 'numeric' }); }; const NewsEntry = ({ item }: { item: NewsItem }) => { const openLink = api.general.openLink.useMutation(); return (
{item.title}
{formatDate(item.date)}
{item.author && ( by {item.author} )}

{item.body}

{item.url && ( openLink.mutateAsync(item.url!)} > Read more )}
); }; const NewsTab = () => { const query = api.news.list.useQuery(undefined, { staleTime: 5 * 60 * 1000, refetchOnWindowFocus: false, retry: 1 }); const scrollRef = useScrollHint(); return (

News

query.refetch()} title="Refresh" />

{query.isLoading ? (

Loading news...

) : query.isError ? (

Couldn't reach the news feed.

query.refetch()} > Try again
) : !query.data?.length ? (

No news yet — check back later.

) : ( query.data.map(item => ) )}
); }; export default NewsTab;