import { useEffect, useState } from 'react' import { api } from '../utils/api' export default function AdminBlsImportPage() { const [status, setStatus] = useState(null) const [msg, setMsg] = useState(null) const [error, setError] = useState(null) const load = () => { api.adminBlsStatus().then(setStatus).catch((e) => setError(e.message)) } useEffect(() => { load() }, []) const run = async (kind, file, dry) => { setError(null) setMsg(dry ? 'Prüfe…' : 'Importiere…') try { const fn = kind === 'components' ? api.adminBlsImportComponents : api.adminBlsImportFoods const res = await fn(file, dry) setMsg(JSON.stringify(res, null, 2)) if (!dry) load() } catch (e) { setError(e.message) setMsg(null) } } return (

BLS 4.0 importieren

Offizielle Dateien von blsdb.de (frei verfügbar, MRI). Codes bleiben erhalten. Zuerst Components, dann die Datendatei. Immer zuerst „Prüfen“.

{status && (

{status.official_foods} offizielle Lebensmittel · {status.official_attributes} Stoffe · {status.manual_foods} manuell · {status.source}

)} {error &&

{error}

}
e.target.files[0] && run('components', e.target.files[0], true)} /> e.target.files[0] && run('components', e.target.files[0], false)} />

Erstes Feld = prüfen, zweites = anwenden.

e.target.files[0] && run('foods', e.target.files[0], true)} /> e.target.files[0] && run('foods', e.target.files[0], false)} />
{msg &&
{msg}
}
) }