import { View, Text, ScrollView, TouchableOpacity, Linking, ActivityIndicator, Alert, } from 'react-native' import { SafeAreaView } from 'react-native-safe-area-context' import { useLocalSearchParams, useRouter } from 'expo-router' import { trpc } from '@/lib/trpc' import { AnmeldeButton } from '@/components/termine/AnmeldeButton' import { Badge } from '@/components/ui/Badge' import { TERMIN_TYP_LABELS } from '@innungsapp/shared' import { format } from 'date-fns' import { de } from 'date-fns/locale' import * as Calendar from 'expo-calendar' export default function TerminDetailScreen() { const { id } = useLocalSearchParams<{ id: string }>() const router = useRouter() const { data: termin, isLoading } = trpc.termine.byId.useQuery({ id }) const toggleMutation = trpc.termine.toggleAnmeldung.useMutation({ onSuccess: () => { // Invalidate queries }, }) async function addToCalendar() { if (!termin) return const { status } = await Calendar.requestCalendarPermissionsAsync() if (status !== 'granted') { Alert.alert('Keine Berechtigung', 'Bitte erlauben Sie den Kalender-Zugriff in den Einstellungen.') return } const calendars = await Calendar.getCalendarsAsync(Calendar.EntityTypes.EVENT) const defaultCal = calendars.find((c) => c.isPrimary) ?? calendars[0] if (!defaultCal) { Alert.alert('Kein Kalender', 'Es wurde kein Kalender gefunden.') return } const startDate = new Date(termin.datum) if (termin.uhrzeit) { const [h, m] = termin.uhrzeit.split(':').map(Number) startDate.setHours(h, m) } await Calendar.createEventAsync(defaultCal.id, { title: termin.titel, startDate, endDate: startDate, location: termin.adresse ?? termin.ort ?? undefined, notes: termin.beschreibung ?? undefined, }) Alert.alert('Termin gespeichert', 'Der Termin wurde in Ihren Kalender eingetragen.') } if (isLoading) { return ( ) } if (!termin) return null const datumFormatted = format(new Date(termin.datum), 'EEEE, dd. MMMM yyyy', { locale: de }) return ( router.back()} className="mr-3"> ← Zurück {termin.titel} {datumFormatted} {termin.uhrzeit && ( {termin.uhrzeit}{termin.endeUhrzeit ? ` – ${termin.endeUhrzeit}` : ''} Uhr )} {termin.ort && ( termin.adresse && Linking.openURL( `https://maps.google.com/?q=${encodeURIComponent(termin.adresse)}` ) } className="flex-row items-center px-4 py-3 border-b border-gray-50" > 📍 {termin.ort} {termin.adresse && ( {termin.adresse} )} )} 👥 {termin.teilnehmerAnzahl} Anmeldungen {termin.maxTeilnehmer ? ` / ${termin.maxTeilnehmer} Plätze` : ''} {termin.beschreibung && ( Beschreibung {termin.beschreibung} )} {/* Actions */} toggleMutation.mutate({ terminId: id })} isLoading={toggleMutation.isPending} /> 📅 Zum Kalender hinzufügen ) }