import { View, Text, ScrollView, TouchableOpacity, ActivityIndicator, } from 'react-native' import { SafeAreaView } from 'react-native-safe-area-context' import { useLocalSearchParams, useRouter } from 'expo-router' import { useEffect } from 'react' import { trpc } from '@/lib/trpc' import { useNewsReadStore } from '@/store/news.store' import { AttachmentRow } from '@/components/news/AttachmentRow' import { Badge } from '@/components/ui/Badge' import { NEWS_KATEGORIE_LABELS } from '@innungsapp/shared' import { format } from 'date-fns' import { de } from 'date-fns/locale' export default function NewsDetailScreen() { const { id } = useLocalSearchParams<{ id: string }>() const router = useRouter() const markRead = useNewsReadStore((s) => s.markRead) const markReadMutation = trpc.news.markRead.useMutation() const { data: news, isLoading } = trpc.news.byId.useQuery({ id }) useEffect(() => { if (news) { markRead(id) markReadMutation.mutate({ newsId: id }) } }, [news?.id]) if (isLoading) { return ( ) } if (!news) return null return ( {/* Header */} router.back()} className="mr-3"> ← Zurück {news.title} {news.title} {news.author?.name ?? 'InnungsApp'} ·{' '} {news.publishedAt ? format(new Date(news.publishedAt), 'dd. MMMM yyyy', { locale: de }) : ''} {/* Simple Markdown renderer — plain text for MVP */} {news.body.replace(/^#+\s/gm, '').replace(/\*\*(.*?)\*\*/g, '$1')} {/* Attachments */} {news.attachments.length > 0 && ( Anhänge {news.attachments.map((a) => ( ))} )} ) }