import { useEffect, useState } from "react"; import { api } from "../api"; import { useConfirm } from "../confirm"; import Icon from "../components/Icon"; import { useToast } from "../toast"; import BrandingUpload from "../components/BrandingUpload"; import DangerAction from "../components/DangerAction"; import { DATE_FORMAT_KEY, useSettings } from "../settings"; import { DATE_FORMATS, formatDate } from "../units"; import { applyFavicon } from "../branding"; const EXPIRY_KEY = "expiry_warning_days"; export default function Settings() { const { reload } = useSettings(); const toast = useToast(); const [days, setDays] = useState(""); const [dateFormat, setDateFormat] = useState("de"); const [error, setError] = useState(null); const [busy, setBusy] = useState(false); async function load() { try { const settings = await api.listSettings(); setDays(settings.find((s) => s.key === EXPIRY_KEY)?.value ?? "7"); setDateFormat(settings.find((s) => s.key === DATE_FORMAT_KEY)?.value ?? "de"); } catch (err) { setError(err.message); } } useEffect(() => { load(); }, []); async function save(e) { e.preventDefault(); setError(null); setBusy(true); try { await api.setSetting(EXPIRY_KEY, String(parseInt(days, 10))); await api.setSetting(DATE_FORMAT_KEY, dateFormat); await reload(); toast("Gespeichert."); } catch (err) { setError(err.message); } finally { setBusy(false); } } // Beispiel mit einem festen Datum, damit man die Wirkung sofort sieht. const preview = formatDate("2026-12-23", dateFormat); return (
Mit einem Token lässt sich die Einkaufsliste dauerhaft abfragen, ohne dass eine Anmeldung abläuft. Der Token wird nur einmal angezeigt – danach ist nur noch sein Fingerabdruck gespeichert.
{fresh && ({fresh}{`# configuration.yaml
rest:
- resource: http://DEIN-SERVER:8080/api/shopping-list
scan_interval: 900
headers:
Authorization: "Bearer DEIN_TOKEN"
sensor:
- name: "Einkaufsliste Anzahl"
value_template: "{{ value_json | length }}"
json_attributes_path: "$"
- name: "Einkaufsliste"
value_template: "{{ value_json | map(attribute='name') | join(', ') }}"`}
Diese Aktionen lassen sich nicht rückgängig machen. Lege vorher ein Backup an (Import / Export → Backup als JSON). Benutzer, API-Tokens, Einstellungen und dein Logo bleiben in allen Fällen erhalten.
{error &&