import React, { useState, useEffect } from 'react'; import { useParams, useNavigate } from 'react-router-dom'; import { MapMarker } from '../types'; import { authService } from '../services/AuthService'; import { DiscordUser } from '../types'; const EditMarker: React.FC = () => { const { markerId } = useParams<{ markerId: string }>(); const navigate = useNavigate(); const [user, setUser] = useState(null); const [marker, setMarker] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [success, setSuccess] = useState(null); // Form state const [formData, setFormData] = useState({ name: '', type: 'city' as const, x_coord: 0, z_coord: 0, description: '', linked_entity_type: '', linked_entity_id: '', icon_type: 'city' as const, color: '#2563eb', is_public: true }); // Subscribe to auth changes useEffect(() => { const unsub = authService.subscribe((currentUser) => { setUser(currentUser); if (!currentUser?.isAdmin) { navigate('/world-map'); } }); return unsub; }, [navigate]); // Load marker data useEffect(() => { const loadMarker = async () => { try { setLoading(true); setError(null); const response = await fetch(`/api/map/markers/${markerId}`); if (!response.ok) throw new Error('Fehler beim Laden des Markers'); const markerData = await response.json(); setMarker(markerData); // Initialize form with marker data setFormData({ name: markerData.name || '', type: markerData.type || 'city', x_coord: markerData.x_coord || 0, z_coord: markerData.z_coord || 0, description: markerData.description || '', linked_entity_type: markerData.linked_entity_type || '', linked_entity_id: markerData.linked_entity_id || '', icon_type: markerData.icon_type || 'city', color: markerData.color || '#2563eb', is_public: markerData.is_public || true }); } catch (err) { console.error('Error loading marker:', err); setError(err instanceof Error ? err.message : 'Unbekannter Fehler'); } finally { setLoading(false); } }; if (markerId) { loadMarker(); } }, [markerId]); const handleInputChange = (e: React.ChangeEvent) => { const { name, value, type } = e.target; setFormData(prev => ({ ...prev, [name]: type === 'checkbox' ? (e.target as HTMLInputElement).checked : value })); }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setSuccess(null); setError(null); try { const response = await fetch(`/api/map/markers/${markerId}`, { method: 'PUT', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(formData) }); if (!response.ok) { throw new Error('Fehler beim Aktualisieren des Markers'); } setSuccess('Marker erfolgreich aktualisiert'); // Redirect back to map after 2 seconds setTimeout(() => { navigate('/world-map'); }, 2000); } catch (err) { console.error('Error updating marker:', err); setError(err instanceof Error ? err.message : 'Unbekannter Fehler'); } }; const handleDelete = async () => { if (!window.confirm('Sind Sie sicher, dass Sie diesen Marker löschen möchten?')) { return; } try { const response = await fetch(`/api/map/markers/${markerId}`, { method: 'DELETE' }); if (!response.ok) { throw new Error('Fehler beim Löschen des Markers'); } setSuccess('Marker erfolgreich gelöscht'); // Redirect back to map after 2 seconds setTimeout(() => { navigate('/world-map'); }, 2000); } catch (err) { console.error('Error deleting marker:', err); setError(err instanceof Error ? err.message : 'Unbekannter Fehler'); } }; if (loading) { return (
Lade Marker...
); } if (error) { return (
Fehler: {error}
); } if (!marker) { return (
Marker nicht gefunden
); } return (

Marker bearbeiten

{success && (
{success}
)} {error && (
{error}
)}