import { useState } from 'react'; import { Link } from 'react-router-dom'; const SettingField = ({ label, description, children }) => { const [showHelp, setShowHelp] = useState(false); return (
{description && ( )}
{children} {showHelp && description && (

{description}

)}
); }; const SettingSection = ({ title, subtitle, children }) => (

{title}

{subtitle &&

{subtitle}

}
{children}
); const AdminSettingsPanel = ({ adminSettings, adminSettingsLoading, status, error, onDismissError, onSettingChange, onIgnoredSlotChange, onAddIgnoredSlot, onRemoveIgnoredSlot, onNotificationChange, onSave }) => { return (

Admin-Einstellungen

Globale Abläufe und Benachrichtigungen feinjustieren.

Zu Slots buchen
{error && (
{error}
)} {status && (
{status}
)}
{adminSettingsLoading &&

Lade Admin-Einstellungen...

} {!adminSettingsLoading && !adminSettings && (

Keine Admin-Einstellungen verfügbar.

)} {adminSettings && ( <> onSettingChange('scheduleCron', event.target.value)} className="border rounded p-2 w-full focus:outline-none focus:ring-2 focus:ring-purple-500 focus:border-purple-500" placeholder="z. B. */10 7-22 * * *" />
onSettingChange('initialDelayMinSeconds', event.target.value, true)} className="border rounded p-2 w-full focus:outline-none focus:ring-2 focus:ring-purple-500 focus:border-purple-500" placeholder="Min" /> onSettingChange('initialDelayMaxSeconds', event.target.value, true)} className="border rounded p-2 w-full focus:outline-none focus:ring-2 focus:ring-purple-500 focus:border-purple-500" placeholder="Max" />
onSettingChange('randomDelayMinSeconds', event.target.value, true)} className="border rounded p-2 w-full focus:outline-none focus:ring-2 focus:ring-purple-500 focus:border-purple-500" placeholder="Min" /> onSettingChange('randomDelayMaxSeconds', event.target.value, true)} className="border rounded p-2 w-full focus:outline-none focus:ring-2 focus:ring-purple-500 focus:border-purple-500" placeholder="Max" />
onSettingChange('storePickupCheckDelayMs', event.target.value, true)} className="border rounded p-2 w-full focus:outline-none focus:ring-2 focus:ring-purple-500 focus:border-purple-500" placeholder="z. B. 3000" />
onSettingChange('storeWatchCron', event.target.value)} className="border rounded p-2 w-full focus:outline-none focus:ring-2 focus:ring-purple-500 focus:border-purple-500" placeholder="z. B. */30 * * * *" />
onSettingChange('storeWatchInitialDelayMinSeconds', event.target.value, true) } className="border rounded p-2 w-full focus:outline-none focus:ring-2 focus:ring-purple-500 focus:border-purple-500" placeholder="Min" /> onSettingChange('storeWatchInitialDelayMaxSeconds', event.target.value, true) } className="border rounded p-2 w-full focus:outline-none focus:ring-2 focus:ring-purple-500 focus:border-purple-500" placeholder="Max" />
onSettingChange('storeWatchRequestDelayMs', event.target.value, true)} className="border rounded p-2 w-full focus:outline-none focus:ring-2 focus:ring-purple-500 focus:border-purple-500" placeholder="z. B. 1000" />
{(!adminSettings.ignoredSlots || adminSettings.ignoredSlots.length === 0) && (

Keine Regeln definiert.

)} {adminSettings.ignoredSlots?.map((slot, index) => (
onIgnoredSlotChange(index, 'storeId', event.target.value)} placeholder="Store-ID" className="md:col-span-2 border rounded p-2 focus:outline-none focus:ring-2 focus:ring-purple-500 focus:border-purple-500" /> onIgnoredSlotChange(index, 'description', event.target.value)} placeholder="Beschreibung (optional)" className="md:col-span-2 border rounded p-2 focus:outline-none focus:ring-2 focus:ring-purple-500 focus:border-purple-500" />
))}

ntfy

Push-Nachrichten via ntfy-Server.

onNotificationChange('ntfy', 'serverUrl', event.target.value)} className="border rounded p-2 w-full focus:outline-none focus:ring-2 focus:ring-purple-500 focus:border-purple-500" placeholder="Server-URL" /> onNotificationChange('ntfy', 'topicPrefix', event.target.value)} className="border rounded p-2 w-full focus:outline-none focus:ring-2 focus:ring-purple-500 focus:border-purple-500" placeholder="Themenpräfix" /> onNotificationChange('ntfy', 'username', event.target.value)} className="border rounded p-2 w-full focus:outline-none focus:ring-2 focus:ring-purple-500 focus:border-purple-500" placeholder="Benutzername (optional)" /> onNotificationChange('ntfy', 'password', event.target.value)} className="border rounded p-2 w-full focus:outline-none focus:ring-2 focus:ring-purple-500 focus:border-purple-500" placeholder="Passwort (optional)" />

Telegram

Bot-Einstellungen für Telegram-Nachrichten.

onNotificationChange('telegram', 'botToken', event.target.value)} className="border rounded p-2 w-full focus:outline-none focus:ring-2 focus:ring-purple-500 focus:border-purple-500" placeholder="Bot-Token" />
)}
); }; export default AdminSettingsPanel;