import React, { useState, useEffect } from 'react'; import { View, Text, TextInput, Button, Alert, StyleSheet, FlatList, Image, TouchableOpacity, Linking, ScrollView } from 'react-native'; import AsyncStorage from '@react-native-async-storage/async-storage'; import { decode } from 'html-entities'; export default function App() { const [username, setUsername] = useState(''); const [password, setPassword] = useState(''); const [token, setToken] = useState(null); const [userInfo, setUserInfo] = useState(null); const [message, setMessage] = useState(''); const [messages, setMessages] = useState([]); const apiUrl = 'https://bremer-community.de'; useEffect(() => { const loadStoredToken = async () => { const savedToken = await AsyncStorage.getItem('userToken'); if (savedToken) { setToken(savedToken); fetchUserProfile(savedToken); loadMessagesFromServer(savedToken); } }; loadStoredToken(); }, []); const handleLogin = async () => { try { const response = await fetch(`${apiUrl}/wp-json/jwt-auth/v1/token`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ username, password }), }); const data = await response.json(); if (data.token) { await AsyncStorage.setItem('userToken', data.token); setToken(data.token); fetchUserProfile(data.token); loadMessagesFromServer(data.token); } else { Alert.alert('Fehler', data.message || 'Login fehlgeschlagen'); } } catch (error) { Alert.alert('Netzwerkfehler', error.message); } }; const fetchUserProfile = async (token) => { try { const response = await fetch(`${apiUrl}/wp-json/wp/v2/users/me`, { headers: { Authorization: `Bearer ${token}` }, }); const data = await response.json(); setUserInfo(data); } catch (error) { Alert.alert('Profilfehler', error.message); } }; const loadMessagesFromServer = async (tokenToUse) => { try { const response = await fetch(`${apiUrl}/wp-json/custom-chat/v1/messages`, { method: 'GET', headers: { Authorization: `Bearer ${tokenToUse}`, }, }); const data = await response.json(); if (Array.isArray(data)) { const allMessages = data.map(msg => ({ id: msg.id.toString(), content: decode(msg.message), author_name: msg.author || 'Unbekannt', })); setMessages(allMessages); } } catch (error) { Alert.alert('Fehler beim Laden der Nachrichten', error.message); } }; const sendMessageToBuddyPress = async () => { if (!message.trim()) { Alert.alert('Fehler', 'Nachricht darf nicht leer sein.'); return; } try { const response = await fetch(`${apiUrl}/wp-json/better-messages/v1/messages`, { method: 'POST', headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application/x-www-form-urlencoded', }, body: `recipients=15573&message=${encodeURIComponent(message.trim())}`, }); const data = await response.json(); if (response.ok) { setMessage(''); loadMessagesFromServer(token); } else { Alert.alert('Senden fehlgeschlagen', data.message || 'Unbekannter Fehler'); } } catch (error) { Alert.alert('Serverfehler', error.message); } }; const handleLogout = async () => { await AsyncStorage.removeItem('userToken'); setToken(null); setUserInfo(null); setMessages([]); }; const RegistrationNotice = () => ( Noch kein Konto?{' '} Linking.openURL('https://bremer-community.de/registrieren/')} > Registrieren ); if (!token) { return ( Bremer Community Chat