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