import React, { useState, useEffect } from 'react'; import { Icons } from './IconSet'; interface NpcBannerManagementModalProps { isOpen: boolean; onClose: () => void; projectId: string; currentBannerUrl: string; onUpdate: () => void; } const NpcBannerManagementModal: React.FC = ({ isOpen, onClose, projectId, currentBannerUrl, onUpdate }) => { const [bannerUrl, setBannerUrl] = useState(currentBannerUrl); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const [previewLoading, setPreviewLoading] = useState(false); useEffect(() => { if (isOpen) { setBannerUrl(currentBannerUrl); setError(null); } }, [isOpen, currentBannerUrl]); const updateBanner = async () => { if (!bannerUrl.trim()) { setError('Banner-URL ist erforderlich'); return; } try { setLoading(true); setError(null); const response = await fetch(`https://vollidioten.ceraticsoft.de/api/projects/${projectId}`, { method: 'PUT', headers: { 'Content-Type': 'application/json' }, credentials: 'include', body: JSON.stringify({ bannerUrl: bannerUrl.trim() }) }); if (response.ok) { onUpdate(); onClose(); } else { const errorData = await response.json(); setError(errorData.error || 'Fehler beim Aktualisieren des Banners'); } } catch (err) { console.error('Error updating banner:', err); setError('Netzwerkfehler'); } finally { setLoading(false); } }; const handleImageLoad = () => { setPreviewLoading(false); }; const handleImageError = () => { setPreviewLoading(false); setError('Bild konnte nicht geladen werden'); }; if (!isOpen) return null; return (

NPC-Banner bearbeiten

{error && (

{error}

)} {/* Current Banner Preview */}

Aktuelles Banner

{currentBannerUrl ? ( <> {previewLoading && (
)} Current banner ) : (
)}
{/* Banner URL Input */}

Neue Banner-URL

setBannerUrl(e.target.value)} placeholder="https://example.com/banner-image.jpg" className="w-full bg-[#0b0b0d] border border-border rounded p-3 text-sm" />

Geben Sie eine direkte URL zu einem Bild ein. Empfohlene Größe: 1200x400 Pixel oder größer.

{/* File Upload */}

Oder Bild hochladen

{ const file = e.target.files?.[0]; if (!file) return; const formData = new FormData(); formData.append('banner', file); try { setLoading(true); setError(null); const response = await fetch(`https://vollidioten.ceraticsoft.de/api/admin/npc-companies/${projectId}/banner/upload`, { method: 'POST', credentials: 'include', body: formData }); if (response.ok) { const data = await response.json(); setBannerUrl(data.bannerUrl); onUpdate(); onClose(); } else { const errorData = await response.json(); setError(errorData.error || 'Fehler beim Hochladen'); } } catch (err) { console.error('Error uploading banner:', err); setError('Netzwerkfehler beim Hochladen'); } finally { setLoading(false); } }} className="hidden" id="npc-banner-upload" />
{/* Preview */} {bannerUrl && bannerUrl !== currentBannerUrl && (

Vorschau

Banner preview setError('Vorschau-Bild konnte nicht geladen werden')} />
)} {/* Common Banner Suggestions */}

Beispiele

{/* Info */}

Banner-Empfehlungen

  • • Verwenden Sie hochwertige Bilder mit 16:9 Seitenverhältnis
  • • Stellen Sie sicher, dass die Bilder öffentlich zugänglich sind
  • • Dunklere Bilder funktionieren oft besser mit dem Text-Overlay
); }; export default NpcBannerManagementModal;