import { useEffect, useState } from 'react' import { api } from '../utils/api' export default function NutritionFoodMap({ onChanged }) { const [unmapped, setUnmapped] = useState([]) const [learned, setLearned] = useState([]) const [error, setError] = useState(null) const [query, setQuery] = useState({}) const [hits, setHits] = useState({}) const [saving, setSaving] = useState(null) const load = async () => { try { const [u, m] = await Promise.all([api.listUnmappedFoods(), api.listMyFoodMappings()]) setUnmapped(u) setLearned(m) } catch (e) { setError(e.message) } } useEffect(() => { load() }, []) const search = async (key, q) => { setQuery((s) => ({ ...s, [key]: q })) if (!q || q.length < 2) { setHits((s) => ({ ...s, [key]: [] })) return } try { const rows = await api.searchBlsFoods(q) setHits((s) => ({ ...s, [key]: rows })) } catch (e) { setError(e.message) } } const assign = async (sourceName, foodId, key) => { setSaving(key) setError(null) try { await api.upsertMyFoodMapping({ source_name: sourceName, food_id: foodId }) setHits((s) => ({ ...s, [key]: [] })) await load() onChanged?.() } catch (e) { setError(e.message) } finally { setSaving(null) } } const remove = async (id) => { if (!confirm('Zuordnung wirklich löschen?')) return try { await api.deleteMyFoodMapping(id) await load() onChanged?.() } catch (e) { setError(e.message) } } return (
Einmal bestätigt, bleibt die Zuordnung erhalten und gilt für spätere Importe. Du kannst sie jederzeit ändern oder löschen. Keine automatische KI-Zuordnung.
{error &&Keine ungemappten Bezeichner.
} {unmapped.map((u) => { const key = u.source_name_normalized return (