import { useState, useEffect, useRef } from 'react' import { Pencil, Trash2, Check, X, Camera, BookOpen } from 'lucide-react' import { useNavigate } from 'react-router-dom' import { api } from '../utils/api' import { CIRCUMFERENCE_POINTS } from '../utils/guideData' import UsageBadge from '../components/UsageBadge' import dayjs from 'dayjs' const FIELDS = ['c_neck','c_chest','c_waist','c_belly','c_hip','c_thigh','c_calf','c_arm'] const LABELS = {c_neck:'Hals',c_chest:'Brust',c_waist:'Taille',c_belly:'Bauch',c_hip:'Hüfte',c_thigh:'Oberschenkel',c_calf:'Wade',c_arm:'Oberarm'} function empty() { return {date:dayjs().format('YYYY-MM-DD'), c_neck:'',c_chest:'',c_waist:'',c_belly:'',c_hip:'',c_thigh:'',c_calf:'',c_arm:'',notes:'',photo_id:''} } export default function CircumScreen() { const [entries, setEntries] = useState([]) const [form, setForm] = useState(empty()) const [editing, setEditing] = useState(null) const [saving, setSaving] = useState(false) const [saved, setSaved] = useState(false) const [error, setError] = useState(null) const [photoFile, setPhotoFile] = useState(null) const [photoPreview, setPhotoPreview] = useState(null) const [circumUsage, setCircumUsage] = useState(null) // Phase 4: Usage badge const fileRef = useRef() const nav = useNavigate() const load = () => api.listCirc().then(setEntries) const loadUsage = () => { api.getFeatureUsage().then(features => { const circumFeature = features.find(f => f.feature_id === 'circumference_entries') setCircumUsage(circumFeature) }).catch(err => console.error('Failed to load usage:', err)) } useEffect(()=>{ load() loadUsage() },[]) const set = (k,v) => setForm(f=>({...f,[k]:v})) const handleSave = async () => { setSaving(true) setError(null) try { const payload = {} payload.date = form.date FIELDS.forEach(k=>{ if(form[k]!=='') payload[k]=parseFloat(form[k]) }) if(form.notes) payload.notes = form.notes if(photoFile) { const pr = await api.uploadPhoto(photoFile, form.date) payload.photo_id = pr.id } await api.upsertCirc(payload) setSaved(true) await load() await loadUsage() // Reload usage after save setTimeout(()=>setSaved(false),2000) setForm(empty()); setPhotoFile(null); setPhotoPreview(null) } catch (err) { console.error('Save failed:', err) setError(err.message || 'Fehler beim Speichern') setTimeout(()=>setError(null), 5000) } finally { setSaving(false) } } const startEdit = (e) => setEditing({...e}) const cancelEdit = () => setEditing(null) const handleUpdate = async () => { const payload = {} payload.date = editing.date FIELDS.forEach(k=>{ if(editing[k]!=null && editing[k]!=='') payload[k]=parseFloat(editing[k]) }) if(editing.notes) payload.notes=editing.notes await api.updateCirc(editing.id, payload) setEditing(null); await load() } const handleDelete = async (id) => { if(!confirm('Eintrag löschen?')) return await api.deleteCirc(id); await load() } return (
Noch keine Einträge.
} {entries.map((e,i)=>{ const prev = entries[i+1] const isEd = editing?.id===e.id return ("{e.notes}"
}