import {useState, useEffect} from "react"; import { StyleSheet, Platform, ScrollView, KeyboardAvoidingView, View, ActivityIndicator, Image, } from "react-native"; import {TextInput, Button, Snackbar, useTheme, Text} from "react-native-paper"; import {useLocalSearchParams, useRouter} from "expo-router"; import useLocationStore from "@/locationStore"; import {normalizeImageSource} from "@/api/locations"; export default function EditLocation() { const theme = useTheme(); const {id} = useLocalSearchParams(); const router = useRouter(); const [loading, setLoading] = useState(true); const [formData, setFormData] = useState({ name: "", description: "", image: "", area: "", population: "", longitude: "", latitude: "", }); const [message, setMessage] = useState(""); const [visible, setVisible] = useState(false); const updateLocation = useLocationStore((state) => state.updateLocation); const getLocation = useLocationStore((state) => state.getLocation); useEffect(() => { const data = getLocation(id); if (data) { setFormData({ name: data.name, description: data.description, image: data.image, area: data.area.toString(), population: data.population.toString(), longitude: data.longitude.toString(), latitude: data.latitude.toString(), }); } setLoading(false); }, [id, getLocation]); const handleEditLocation = async () => { if ( formData.name && formData.description && formData.image && formData.area && formData.population && formData.longitude && formData.latitude ) { // console.log("Form data:", formData); const response = await updateLocation(id, { name: formData.name, description: formData.description, image: formData.image, area: parseFloat(formData.area), population: parseInt(formData.population, 10), longitude: parseFloat(formData.longitude), latitude: parseFloat(formData.latitude), }); if (response) { setMessage("Lokalizacja została zaktualizowana!"); setVisible(true); // while (router.canGoBack()) { // Pop from stack until one element is left // router.back(); // } setTimeout(() => { router.replace("/"); }, 300); // Replace the last remaining stack element } else { setMessage("Wystąpił błąd podczas aktualizacji lokalizacji!"); setVisible(true); } } else { setMessage("Wypełnij wszystkie pola!"); setVisible(true); } }; const isBase64Image = (str) => { let image = normalizeImageSource(str); return image && ( image.uri.startsWith('data:image/jpeg;base64,') || image.uri.startsWith('data:image/png;base64,') || image.uri.startsWith('data:image/gif;base64,') || image.uri.startsWith('data:image/webp;base64,') ); }; if (loading) { return ( ); } if (!formData) { return ( Brak lokalizacji - {id} ); } return ( setVisible(false)} duration={3000} > {message} {isBase64Image(formData.image) ? ( Aktualne zdjęcie: ) : ( setFormData({...formData, image: e})} /> )} setFormData({...formData, name: e})} /> setFormData({...formData, description: e})} /> setFormData({...formData, area: e})} /> setFormData({...formData, population: e})} /> setFormData({...formData, longitude: e})} /> setFormData({...formData, latitude: e})} /> ); } const styles = StyleSheet.create({ container: { backgroundColor: "#25292e", justifyContent: "flex-start", alignItems: "center", flexGrow: 1, }, imageContainer: { margin: 10, width: "100%", alignItems: "center", padding: 10, }, imagePreview: { width: "100%", height: 200, borderRadius: 5, } });