import { useState, useEffect } from 'react' import { api } from '../utils/api' import PromptEditModal from '../components/PromptEditModal' export default function AdminPromptsPage() { const [prompts, setPrompts] = useState([]) const [filteredPrompts, setFilteredPrompts] = useState([]) const [category, setCategory] = useState('all') const [loading, setLoading] = useState(true) const [error, setError] = useState(null) const [editingPrompt, setEditingPrompt] = useState(null) const [showNewPrompt, setShowNewPrompt] = useState(false) const categories = [ { id: 'all', label: 'Alle Kategorien' }, { id: 'körper', label: 'Körper' }, { id: 'ernährung', label: 'Ernährung' }, { id: 'training', label: 'Training' }, { id: 'schlaf', label: 'Schlaf' }, { id: 'vitalwerte', label: 'Vitalwerte' }, { id: 'ziele', label: 'Ziele' }, { id: 'ganzheitlich', label: 'Ganzheitlich' } ] useEffect(() => { loadPrompts() }, []) useEffect(() => { if (category === 'all') { setFilteredPrompts(prompts) } else { setFilteredPrompts(prompts.filter(p => p.category === category)) } }, [category, prompts]) const loadPrompts = async () => { try { setLoading(true) const data = await api.listAdminPrompts() setPrompts(data) setError(null) } catch (e) { setError(e.message) } finally { setLoading(false) } } const handleToggleActive = async (prompt) => { try { await api.updatePrompt(prompt.id, { active: !prompt.active }) await loadPrompts() } catch (e) { alert('Fehler: ' + e.message) } } const handleDelete = async (prompt) => { if (!confirm(`Prompt "${prompt.name}" wirklich löschen?`)) return try { await api.deletePrompt(prompt.id) await loadPrompts() } catch (e) { alert('Fehler: ' + e.message) } } const handleDuplicate = async (prompt) => { try { await api.duplicatePrompt(prompt.id) await loadPrompts() } catch (e) { alert('Fehler: ' + e.message) } } const handleMoveUp = async (prompt) => { const idx = filteredPrompts.findIndex(p => p.id === prompt.id) if (idx === 0) return // Already at top const above = filteredPrompts[idx - 1] const newOrder = filteredPrompts.map(p => p.id) newOrder[idx] = above.id newOrder[idx - 1] = prompt.id try { await api.reorderPrompts(newOrder) await loadPrompts() } catch (e) { alert('Fehler: ' + e.message) } } const handleMoveDown = async (prompt) => { const idx = filteredPrompts.findIndex(p => p.id === prompt.id) if (idx === filteredPrompts.length - 1) return // Already at bottom const below = filteredPrompts[idx + 1] const newOrder = filteredPrompts.map(p => p.id) newOrder[idx] = below.id newOrder[idx + 1] = prompt.id try { await api.reorderPrompts(newOrder) await loadPrompts() } catch (e) { alert('Fehler: ' + e.message) } } const handleSavePrompt = async () => { await loadPrompts() setEditingPrompt(null) setShowNewPrompt(false) } if (loading) { return (
| Titel | Kategorie | Aktiv | Reihenfolge | Aktionen |
|---|---|---|---|---|
|
{prompt.name}
{prompt.description && (
{prompt.description}
)}
{prompt.slug}
|
{prompt.category || 'ganzheitlich'} | handleToggleActive(prompt)} style={{cursor:'pointer'}} /> |
|
|