Vergleichs-Beschriftung folgt dem Modus (OFF vs. Open Products Facts)
Bei Gegenstaenden fragt das Backend Open Products Facts ab, bei Lebensmitteln Open Food Facts. Die sichtbaren Texte (Vergleichs-Button, Toasts, das Gegenueberstellungs-Panel) nannten aber immer "Open Food Facts". Jetzt richtet sich die Beschriftung nach der Verwaltungsart der Kategorie. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -12,7 +12,7 @@ import ProduktBild from "./ProduktBild";
|
||||
*/
|
||||
export default function OffVergleich({
|
||||
felder, bildEigenId, bildFremdUrl, bildUebernommen,
|
||||
onUebernehmen, onAlle, onSchliessen,
|
||||
onUebernehmen, onAlle, onSchliessen, quelle = "Open Food Facts",
|
||||
}) {
|
||||
const leer = (wert) => wert === null || wert === undefined || wert === "";
|
||||
const abweichend = felder.filter((f) => !leer(f.fremd) && String(f.fremd) !== String(f.eigen));
|
||||
@@ -22,7 +22,7 @@ export default function OffVergleich({
|
||||
<section className="off-vergleich">
|
||||
<div className="off-kopf">
|
||||
<Icon name="search" size={16} />
|
||||
<h3>Daten von Open Food Facts</h3>
|
||||
<h3>Daten von {quelle}</h3>
|
||||
<button type="button" className="btn sm" disabled={abweichend.length === 0}
|
||||
onClick={onAlle}>
|
||||
Alle übernehmen
|
||||
@@ -38,7 +38,7 @@ export default function OffVergleich({
|
||||
<table className="table off-tabelle">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Feld</th><th>Bisher</th><th>Open Food Facts</th><th></th>
|
||||
<th>Feld</th><th>Bisher</th><th>{quelle}</th><th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@@ -48,7 +48,7 @@ export default function OffVergleich({
|
||||
<tr key={f.schluessel} className={gleich ? "muted" : ""}>
|
||||
<td data-label="Feld">{f.titel}</td>
|
||||
<td data-label="Bisher">{f.anzeigeEigen ?? (leer(f.eigen) ? "–" : String(f.eigen))}</td>
|
||||
<td data-label="Open Food Facts">
|
||||
<td data-label={quelle}>
|
||||
{f.anzeigeFremd ?? (leer(f.fremd) ? "–" : String(f.fremd))}
|
||||
</td>
|
||||
<td className="num">
|
||||
@@ -76,7 +76,7 @@ export default function OffVergleich({
|
||||
)
|
||||
: <ProduktBild productId={bildEigenId} className="off-bild" />}
|
||||
</td>
|
||||
<td data-label="Open Food Facts">
|
||||
<td data-label={quelle}>
|
||||
{/* Vorschau kommt hier direkt von OFF – lokal gibt es das Bild
|
||||
ja gerade noch nicht. Übernommen und gespeichert, holt der
|
||||
Server es einmal und liefert es danach selbst aus. */}
|
||||
|
||||
@@ -74,6 +74,9 @@ export default function ProductForm() {
|
||||
categories.find((c) => String(c.id) === String(form.category_id)) || null;
|
||||
const mode = currentCategory ? currentCategory.tracking : "food";
|
||||
const isObject = mode === "object";
|
||||
// Gegenstände gleicht das Backend gegen Open Products Facts ab, Lebensmittel
|
||||
// gegen Open Food Facts – die Beschriftung folgt dem Modus.
|
||||
const datenquelle = isObject ? "Open Products Facts" : "Open Food Facts";
|
||||
|
||||
function set(k, v) {
|
||||
setForm((f) => ({ ...f, [k]: v }));
|
||||
@@ -200,7 +203,7 @@ export default function ProductForm() {
|
||||
}));
|
||||
if (s.package_size != null) setMinUnit("package");
|
||||
toast(
|
||||
"Daten von Open Food Facts übernommen." +
|
||||
`Daten von ${datenquelle} übernommen.` +
|
||||
(s.package_size != null ? "" : " (Füllmenge nicht hinterlegt – bitte Packungsgröße prüfen.)") +
|
||||
(res.category_name ? ` Kategorie „${res.category_name}“ vorgeschlagen.` : "") +
|
||||
(res.group_name ? ` Gruppe „${res.group_name}“ über den EAN-Code erkannt.` : "")
|
||||
@@ -239,7 +242,7 @@ export default function ProductForm() {
|
||||
setOffDaten({ ...res.suggestion, category_id: res.category_id, category_name: res.category_name });
|
||||
} else {
|
||||
setOffDaten(null);
|
||||
toast("Open Food Facts kennt keinen der hinterlegten EAN-Codes.", "warn");
|
||||
toast(`${datenquelle} kennt keinen der hinterlegten EAN-Codes.`, "warn");
|
||||
}
|
||||
} catch (err) {
|
||||
setError(err.message);
|
||||
@@ -496,7 +499,7 @@ export default function ProductForm() {
|
||||
<button type="button" className="btn" disabled={offBusy}
|
||||
onClick={holeOffDaten}>
|
||||
<Icon name="download" size={16} />
|
||||
{offBusy ? "Frage an…" : "Mit Open Food Facts vergleichen"}
|
||||
{offBusy ? "Frage an…" : `Mit ${datenquelle} vergleichen`}
|
||||
</button>
|
||||
)}
|
||||
</div>
|
||||
@@ -533,6 +536,7 @@ export default function ProductForm() {
|
||||
|
||||
{offDaten && (
|
||||
<OffVergleich
|
||||
quelle={datenquelle}
|
||||
felder={offFelder()}
|
||||
bildEigenId={id}
|
||||
bildFremdUrl={offDaten.image_url || ""}
|
||||
|
||||
Reference in New Issue
Block a user